Installer la Eventual RSVP sur votre site EmDash.
Trois modes d’installation pris en charge selon votre hébergement, suivis du pack de champs partagé et des pages Astro nécessaires pour les visiteurs et l’accueil à la porte.
Compatibilité EmDash
EmDash >= 1.2.0 < 2.0.0 (1.4.0 conseillé). Sur Cloudflare en mode sandboxé : offre Workers Paid requise pour worker_loaders (LOADER) + PluginBridge réexporté + EMDASH_SITE_URL défini.
Fournisseur e-mail
Installez un plugin d’envoi d’e-mails dans EmDash pour expédier confirmations, offres de liste d’attente, rappels, instructions de virement et billets QR.
Chiffrement EMDASH_ENCRYPTION_KEY
Nécessaire uniquement pour les clés secrètes Stripe en paiement carte dans Tickets. Core, Registrations, billets gratuits, virements et clé de licence fonctionnent sans.
Trois façons d’installer les extensions
Eventual RSVP – Core 0.18.2, Eventual RSVP – Registrations 0.1.1 et Eventual RSVP – Tickets 0.1.3 sont sur le registre EmDash et sur npm.
Depuis l’administration EmDash → Plugins → Registry, recherchez « Eventual RSVP – Core », « Eventual RSVP – Registrations » ou « Eventual RSVP – Tickets » (éditeur vermeulen.solutions), vérifiez les permissions affichées et installez. Les composants Astro (.astro) viennent du paquet npm correspondant.
Méthode recommandée : exécute chaque extension dans un isolat sandboxé avec plafond strict à 10 appels pont / 50 ms CPU. Déclarez vos paquets dans astro.config.mjs :
// astro.config.mjs
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import eventual from "@vermeulen.solutions/eventual"; // Eventual RSVP – Core
import eventualAttendance from "@vermeulen.solutions/eventual-attendance";
import eventualTickets from "@vermeulen.solutions/eventual-tickets";
export default defineConfig({
integrations: [
emdash({
// database, storage, email provider…
sandboxed: [eventual, eventualAttendance, eventualTickets],
sandboxRunner: "@emdash-cms/cloudflare/sandbox", // on Node: "@emdash-cms/sandbox-workerd/sandbox"
}),
],
});Sur Cloudflare Workers Paid, ajoutez la liaison LOADER dans wrangler.jsonc et réexportez PluginBridge dans votre fichier d’entrée Worker :
// wrangler.jsonc
{
"worker_loaders": [{ "binding": "LOADER" }]
}
// src/worker.ts (your main Worker entry)
export { PluginBridge } from "@emdash-cms/cloudflare/worker";Pour les paiements par carte Stripe : générez EMDASH_ENCRYPTION_KEY via npx emdash secrets generate puis enregistrez-la avec wrangler secret put EMDASH_ENCRYPTION_KEY (et configurez EMDASH_SITE_URL).
Uniquement sur hébergement Node que vous contrôlez entièrement : exécute les extensions directement dans le processus hôte sans isolation ni plafond Worker Loader.
// astro.config.mjs (Node hosts you trust only)
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import eventual from "@vermeulen.solutions/eventual"; // Eventual RSVP – Core
import eventualAttendance from "@vermeulen.solutions/eventual-attendance";
import eventualTickets from "@vermeulen.solutions/eventual-tickets";
export default defineConfig({
integrations: [
emdash({
// database, storage, email provider…
plugins: [eventualAttendance, eventualTickets],
// Core always runs sandboxed, also on Node.
sandboxed: [eventual],
sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
}),
],
});Pack de champs et pages Astro requises sur votre site
Core gère les collections de contenu ; Registrations et Tickets lisent trois champs partagés facultatifs (inventory_mode, capacity, allow_waitlist) générés au moment du build sans toucher au schéma automatiquement.
Exporter les collections et fusionner les champs de capacité
Exportez d’abord le schéma natif d’Eventual RSVP – Core (avec son paquet npm), puis fusionnez les champs partagés de @vermeulen.solutions/eventual-capacity avant de l’appliquer via votre workflow EmDash (sans écraser les champs existants de même type) :
npx -p @vermeulen.solutions/eventual eventual-schema --locale fr --output eventual-schema.json npx -p @vermeulen.solutions/eventual-capacity eventual-capacity-fields --merge eventual-schema.json --output eventual-schema-with-capacity.jsonNote importante : l’identifiant d’une date récurrente dans le flux Core a la forme <contentId>#<occurrence>. Passez eventId={id.split("#")[0]} et occurrenceStart={event.start} aux composants Registrations et Tickets.
Créer la page visiteur et /rsvp/manage (Eventual RSVP – Registrations)
Ajoutez <RsvpForm /> sur la fiche événement et créez la page /rsvp/manage (liens d’annulation et offres de liste d’attente par #fragment) :
// src/pages/rsvp/manage.astro import RsvpManage from "@vermeulen.solutions/eventual-attendance/astro/RsvpManage.astro"; <RsvpManage locale="en" /> // On an event detail page: import RsvpForm from "@vermeulen.solutions/eventual-attendance/astro/RsvpForm.astro"; <RsvpForm eventId={contentId} occurrenceStart={event.start} locale="en" />Créer /tickets/checkout, /tickets/order et /tickets/check (Eventual RSVP – Tickets)
Si vous utilisez Eventual RSVP – Tickets, créez les trois pages par défaut (/tickets/checkout, /tickets/order, et /tickets/check réservé à l’équipe connectée) puis reportez l’URL webhook indiquée dans Admin → Tickets sur votre tableau de bord Stripe :
// Event page: import TicketCheckout from "@vermeulen.solutions/eventual-tickets/astro/TicketCheckout.astro"; <TicketCheckout eventId={contentId} occurrenceStart={event.start} locale="en" /> // /tickets/checkout -> <TicketCheckoutReturn backHref="/events" locale="en" /> // /tickets/order -> <TicketOrder checkinPath="/tickets/check" locale="en" /> // /tickets/check -> <TicketCheckin locale="en" /> (keep behind authenticated staff access)

