Eventual RSVP – Core#
Historique des versions, du premier calendrier sandboxé (0.5.0) aux collections natives EmDash, métadonnées de cache opt-in (0.15.0) liens calendrier multilingues (0.17.0) et administration en 21 langues (0.18.0).
Note : Core est publié sur le registre EmDash ; un paquet npm suivra dans une prochaine version.
0.18.0 — 2026-11-14
- Nouveau nom : Eventual RSVP – Core (anciennement Eventual). L’identifiant du plugin reste
eventual : les sites se mettent à jour sans changement ; l’administration renvoie à la page Event settings.
- Administration en 21 langues, dont l’arabe et l’hébreu de droite à gauche. L’anglais est intégré ; les autres langues sont des paquets de langue vérifiés par empreinte, issus de
@vermeulen.solutions/eventual-locales et téléchargés à la première utilisation. Les boutons de tableau et les statuts sont traduits aussi.
- Nouvelle permission :
network:request vers cdn.jsdelivr.net, uniquement pour ces paquets de langue. Les administrateurs approuvent de nouveau le plugin lors de la mise à jour.
- Les mois chargés ne cassent plus le calendrier public : les adresses web sont demandées une fois par langue au lieu d’une fois par événement, ce qui reste dans la limite de 10 appels du sandbox.
0.17.0 — 2026-11-07
- Dictionnaires complets d’interface en allemand (
de), néerlandais (nl) et espagnol (es) aux côtés du français (fr) et de l’anglais (en), avec résolution normalisée (resolveLanguage).
- Liens « Ajouter au calendrier » en un clic (
buildCalendarLinks) pour Google Calendar, Outlook Web, Office 365 et téléchargement direct .ics Apple/bureau dans PublicEvent et <EventList showCalendarLinks={true} />.
- Prise en charge de la requête unitaire par paramètre
eventId sur publicEvents (identifiant parent ou d’occurrence).
- Rétrocompatibilité complète : aucune nouvelle permission, aucun nouveau schéma (
EmDash >=1.2.0 <2.0.0).
0.16.0 — 2026-11-02
- Parallélisation de l’hydratation du flux public et des résolutions de lieux/médias via
Promise.all, réduisant nettement les appels RPC du bac à sable.
- En-tête
Cache-Control: public, max-age=3600, must-revalidate sur publicEventImage.
- Métadonnées optionnelles
imageMedia (src, width, height, alt) sur PublicEvent pour optimisation directe côté Astro tout en conservant imageUrl.
0.15.0 — 2026-11-01 (version registre EmDash)
- Métadonnées typées opt-in de dépendance et d’expiration de cache sur les flux publics natifs (plafonnées à 15 secondes de durée de vie restante, sans servir de contenu périmé ; requiert
EmDash >=1.4.0 <2.0.0).
- Assistants Astro de répartition SSR directe, bornes de minuit par fuseau horaire et option
pluginId pour les installations issues du registre.
0.14.1 — 2026-10-30
- Validation de compatibilité sur EmDash
1.2.0 et 1.4.0 (1.4.0 recommandé pour les formulaires Block Kit imbriqués et les mutations sur Cloudflare).
0.14.0 — 2026-10-14 (changement majeur)
- Les lectures publiques ne se replient plus silencieusement sur les anciens enregistrements internes du plugin lorsque les collections natives ne sont pas reliées ; l’administrateur active explicitement Afficher les anciens événements enregistrés dans l’extension (
legacyReads) pendant une migration.
0.13.0 – 0.13.4 — 7 au 11 octobre 2026 (modernisation vers les collections natives)
- Propriété des événements, lieux et organisateurs transférée aux collections natives EmDash (texte enrichi, brouillons, révisions, traductions).
- Comptage strict des appels RPC (
<= 10), diffusion publique des images mises en avant et option publicUrls=false.
0.5.0 – 0.11.1
- Jalons précédents : première version MIT sandboxée (
0.5.0), 15–16 outils MCP eventual__* et widget (0.6.0), gestion des exceptions de récurrence et règles avec passage à l’heure d’été (0.7.0), sept vues visiteur sans JavaScript (0.8.0), tableaux paginés Block Kit (0.9.0), détection d’édition obsolète (0.10.0), événements présentiels/virtuels/hybrides + JSON-LD + transfert CSV/ICS (0.11.0) et droits éditeur content:edit_any (0.11.1).
Eventual RSVP – Registrations#
Notes de version d’Eventual RSVP – Registrations 0.1.0 (publiée le 14 novembre 2026) : inscriptions gratuites sous licence MIT, liste d’attente, approbations, liste d’accueil et effacement des données personnelles.
0.1.0 — 2026-11-14
Inscriptions, approbations et gestion des places
- Inscriptions par occurrence pour les événements ponctuels et récurrents, avec capacité, liste d’attente et réglages partagés entre traductions d’un même événement.
- Registre de places sans survente garanti par compare-and-set révisé (
eventual-capacity) et soumissions idempotentes (commandId).
- Fermé par défaut ; n’accepte d’inscriptions que sur les événements publiés non gérés par billetterie (
inventory_mode != "tickets").
- Questions personnalisées par événement (texte court, texte long, choix, case à cocher, obligatoires ou facultatives) validées côté serveur avec messages en français et en anglais.
- Mode d’approbation manuelle par événement (
requireApproval, fenêtre réglable 1–720 heures) retenant les places en attente jusqu’à décision ou expiration automatique par attendance-approvals (*/5 * * * *), avec avis facultatif à l’organisateur.
- Écran de confirmation affichant le lien direct « Gérer ou annuler cette inscription » et ne promettant l’envoi d’un e-mail que si le serveur confirme
email: "sent" | "queued".
Liste d’attente et liens autonomes sécurisés
- Liste d’attente stricte premier arrivé, premier servi avec rang exact affiché au visiteur, promotion automatique à tour de rôle (
waitlist-maintenance), offres retenues 2 heures par e-mail et action manuelle pour renvoyer la tête bloquée en fin de file.
- Liens signés HMAC transmis dans le
#fragment de l’URL (cancel, waitlist/claim), hachés en base via clé générée dans le KV du plugin (aucune EMDASH_ENCRYPTION_KEY requise), sans modification d’état en GET.
- Intégration optionnelle de Cloudflare Turnstile (
challenges.cloudflare.com), champ pot de miel et limitation à 10 inscriptions par tranche de 10 minutes par empreinte ipHash lorsque Turnstile est désactivé.
Opérations organisateur, rappels et protection des données
- Tableau des créneaux les plus demandés (« Quand les séances se remplissent ») et carte thermique dans le fuseau local IANA de chaque séance (
formatInZone, repli UTC).
- Listes d’accueil HTML imprimables et CSV respectant les filtres événement/date (colonne
Heure locale) et pointage à l’entrée sur mobile (Pointer l’arrivée / Annuler).
- Pages Inscriptions, Liste d’accueil et Réglages des inscriptions séparées ; questions modifiées sous forme de lignes ; les pages suivent la langue de l’administration (21 langues, dont l’arabe et l’hébreu de droite à gauche), les libellés de la barre latérale restent en anglais.
- Garde-fou empêchant la mise à la corbeille d’un événement ayant des inscriptions à venir.
- E-mails bilingues (confirmations, liste d’attente, offre 2 h, décisions d’approbation, rappels automatiques
attendance-reminders, liens .ics, adresse Reply-To).
- Purge horaire configurable (
attendance-retention, 30–3650 jours, 365 par défaut) et effacement manuel à la demande conservant les totaux anonymisés (Effacée / —).
- Accessibilité WCAG 2.2 AA vérifiée (
axe-core en 1280×800 et 320×640), personnalisation via --eventual-* en thèmes clair et sombre, navigation clavier, captures d’e-mails et parcours Playwright complets.
Eventual RSVP – Tickets#
Notes de version d’Eventual RSVP – Tickets 0.1.0 (bientôt disponible) : billetterie commerciale, Stripe Checkout, factures, billets QR, remboursements et licence vérifiée hors ligne.
0.1.0 (bientôt disponible)
Catégories de billets, Stripe Checkout et paiement sur facture
- Jusqu’à 20 catégories de billets par événement (nom, prix en unité minimale y compris devises sans décimale ou Gratuit, quota par date dans le plafond global, maximum par commande
1–50, fenêtre de vente) et questions sous forme de lignes.
- Retenue atomique synchronisée avec Stripe Checkout (expiration
31 minutes conforme au minimum Stripe de 30 minutes) et idempotence par commandId.
- Réception brute du webhook HMAC-SHA256 (
stripe/webhook), contrôle strict amount_total et currency (AMOUNT_MISMATCH), traitement des paiements tardifs (PAID_NO_SEATS avec remboursement automatique) et renvoi 503 sur erreur temporaire.
- Billets gratuits et paiement sur facture / virement bancaire actifs sans
EMDASH_ENCRYPTION_KEY ni clés Stripe ; envoi des instructions bancaires avec référence (ord_…) et lien commande, puis délivrance des billets QR au clic sur Mark paid.
- Vérification automatique des retenues échues (
tickets-hold-sweep) interrogeant Stripe avant toute libération.
Espace commande, contrôle à l’entrée, remboursements et licence hors ligne
- Espace acheteur
<TicketOrder /> via jeton HMAC en #fragment, affichant codes QR générés côté navigateur (qrcode-generator), code hexadécimal 64 caractères et annulation avant l’échéance (libération ou remboursement Stripe).
- Page
<TicketCheckin /> pour l’équipe à l’entrée : lecture par lien caméra téléphone, scanner navigateur BarcodeDetector ou saisie directe ; refuse double validation et billets remboursés/impayés.
- Remboursements automatiques (
tickets-auto-refund toutes les 5 minutes) et manuels (charge.refunded), plus export CSV comptable à usage unique avec colonne Local time et protection anti-formules.
- Clé de licence hors ligne Ed25519 (
evt1.…) vérifiée par Web Crypto sans appel réseau sortant ; hôtes de test (localhost, *.workers.dev, *.pages.dev) exemptés ; commandes existantes et contrôle à l’entrée toujours maintenus.
- Le panneau de l’événement, la page Commandes et la page de configuration suivent la langue de l’administration EmDash (21 langues).
- Composants et e-mails acheteur en 21 langues (arabe et hébreu de droite à gauche ; textes d’administration et d’e-mail en paquets de langue vérifiés par empreinte depuis
cdn.jsdelivr.net), conservation comptable des montants lors de l’effacement retentionDays, audits WCAG 2.2 AA axe-core, tests --et-* et suite Playwright complète.
eventual-capacity#
Notes de version de la bibliothèque partagée eventual-capacity 0.1.0 (publiée le 14 novembre 2026) : registre de places, budget d’appels, fuseaux horaires, champs de capacité et harnais de test.
0.1.0 — 2026-11-14
budget : RpcBudget, BudgetSlice et logWithin pour rester sous le plafond par défaut de 10 appels hôte par requête ou exécution cron.
ledger & holds : registre partagé par compare-and-set révisé (reserveSeats, holdSeats, adjustLedger, freeSeats) avec sous-quotas par billet, file d’attente FIFO et fuseau IANA validé.
inventory & field-pack : séparation stricte rsvp / tickets et script additif export-capacity-fields.mjs.
time : formatInZone, zonedParts, validTimeZone et eventTiming (lecture de start/end/all_day/timezone avec repli start_date/end_date).
tokens, secret, validation, questions, ics, reconcile, turnstile, schedules : jetons HMAC en #fragment, génération de clé KV, validation des questions (QuestionIssueCode), générateur .ics, rapprochement CAS en période calme, Turnstile et réenregistrement progressif des tâches cron.
testing : harnais de mesure des appels pont (withBudget, expectWithinBudget) sur l’hôte d’exécution EmDash.
- Intégrée à Eventual RSVP – Registrations et Eventual RSVP – Tickets à la compilation ; ce n’est pas une extension. Le paquet npm sert à la commande des champs (
npx -p @vermeulen.solutions/eventual-capacity eventual-capacity-fields).