Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- Introduced turbopack alias for canvas in next.config.mjs. - Updated package.json scripts for development and branding tasks. - Added new dependencies for Tiptap extensions. - Implemented new demo layouts for agenda, contacts, drive, and mail applications. - Enhanced globals.css for improved theming and splash screen animations. - Added OAuth callback handling for drive mounts. - Updated layout components to integrate new demo shells and improve structure.
279 lines
7.5 KiB
TypeScript
279 lines
7.5 KiB
TypeScript
export type WebhookTemplateVariable = {
|
|
token: string
|
|
label: string
|
|
description: string
|
|
example?: string
|
|
}
|
|
|
|
import type { AutomationDomain } from './domains'
|
|
|
|
export type WebhookTemplateVariableGroup = {
|
|
id: string
|
|
label: string
|
|
description: string
|
|
domain: AutomationDomain | 'universal'
|
|
variables: WebhookTemplateVariable[]
|
|
}
|
|
|
|
/** Variables interpolées côté backend (`internal/mail/webhooks/executor.go`). */
|
|
export const WEBHOOK_TEMPLATE_VARIABLE_GROUPS: WebhookTemplateVariableGroup[] = [
|
|
{
|
|
id: "event",
|
|
label: "Événement",
|
|
description: "Métadonnées communes à tout type d'automatisation.",
|
|
domain: "universal",
|
|
variables: [
|
|
{
|
|
token: "$event.type",
|
|
label: "Type",
|
|
description: "Type d'événement déclencheur (ex. message_received, drive_file_created).",
|
|
example: "drive_file_created",
|
|
},
|
|
{
|
|
token: "$event.domain",
|
|
label: "Domaine",
|
|
description: "Domaine source : mail, drive, contacts ou agenda.",
|
|
example: "drive",
|
|
},
|
|
{
|
|
token: "$date",
|
|
label: "Date",
|
|
description: "Horodatage ISO 8601 de l'événement.",
|
|
example: "2026-05-22T10:00:00Z",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "sender",
|
|
label: "Expéditeur",
|
|
description: "Identité de l'expéditeur du message déclencheur.",
|
|
domain: "mail",
|
|
variables: [
|
|
{
|
|
token: "$sender.name",
|
|
label: "Nom",
|
|
description: "Nom affiché de l'expéditeur.",
|
|
example: "Alice Example",
|
|
},
|
|
{
|
|
token: "$sender.email",
|
|
label: "E-mail",
|
|
description: "Adresse e-mail de l'expéditeur.",
|
|
example: "alice@example.com",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "message",
|
|
label: "Message",
|
|
description: "Métadonnées principales du mail.",
|
|
domain: "mail",
|
|
variables: [
|
|
{
|
|
token: "$subject",
|
|
label: "Objet",
|
|
description: "Objet du message.",
|
|
example: "Hello World",
|
|
},
|
|
{
|
|
token: "$message_id",
|
|
label: "Identifiant",
|
|
description: "Identifiant interne Ultimail du message.",
|
|
example: "msg-123",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "body",
|
|
label: "Contenu",
|
|
description: "Corps du message, en texte ou HTML.",
|
|
domain: "mail",
|
|
variables: [
|
|
{
|
|
token: "$body.textContent",
|
|
label: "Texte brut",
|
|
description: "Corps du message sans mise en forme.",
|
|
example: "Plain body",
|
|
},
|
|
{
|
|
token: "$body.htmlContent",
|
|
label: "HTML",
|
|
description: "Corps du message avec balises HTML.",
|
|
example: "<p>HTML body</p>",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "recipients",
|
|
label: "Destinataires",
|
|
description: "Adresses en copie directe (To).",
|
|
domain: "mail",
|
|
variables: [
|
|
{
|
|
token: "$recipients.to",
|
|
label: "To",
|
|
description: "Liste des destinataires, séparés par des virgules.",
|
|
example: "bob@example.com, carol@example.com",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "drive",
|
|
label: "Fichier Drive",
|
|
description: "Métadonnées du fichier ou dossier déclencheur.",
|
|
domain: "drive",
|
|
variables: [
|
|
{
|
|
token: "$drive.file_name",
|
|
label: "Nom",
|
|
description: "Nom du fichier ou dossier.",
|
|
example: "rapport.pdf",
|
|
},
|
|
{
|
|
token: "$drive.file_path",
|
|
label: "Chemin",
|
|
description: "Chemin complet dans le Drive.",
|
|
example: "/Documents/rapport.pdf",
|
|
},
|
|
{
|
|
token: "$drive.mime_type",
|
|
label: "Type MIME",
|
|
description: "Type MIME du fichier.",
|
|
example: "application/pdf",
|
|
},
|
|
{
|
|
token: "$drive.file_size",
|
|
label: "Taille",
|
|
description: "Taille en octets.",
|
|
example: "102400",
|
|
},
|
|
{
|
|
token: "$drive.is_folder",
|
|
label: "Dossier",
|
|
description: "true si l'élément est un dossier.",
|
|
example: "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "contact",
|
|
label: "Contact",
|
|
description: "Métadonnées du contact déclencheur.",
|
|
domain: "contacts",
|
|
variables: [
|
|
{
|
|
token: "$contact.name",
|
|
label: "Nom",
|
|
description: "Nom affiché du contact.",
|
|
example: "Alice Example",
|
|
},
|
|
{
|
|
token: "$contact.email",
|
|
label: "E-mail",
|
|
description: "Adresse e-mail principale.",
|
|
example: "alice@example.com",
|
|
},
|
|
{
|
|
token: "$contact.phone",
|
|
label: "Téléphone",
|
|
description: "Numéro de téléphone principal.",
|
|
example: "+33 6 00 00 00 00",
|
|
},
|
|
{
|
|
token: "$contact.org",
|
|
label: "Organisation",
|
|
description: "Entreprise ou organisation.",
|
|
example: "Example Corp",
|
|
},
|
|
{
|
|
token: "$contact.id",
|
|
label: "Identifiant",
|
|
description: "Identifiant interne du contact.",
|
|
example: "contact-42",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "calendar",
|
|
label: "Événement agenda",
|
|
description: "Métadonnées de l'événement déclencheur.",
|
|
domain: "agenda",
|
|
variables: [
|
|
{
|
|
token: "$calendar.event_title",
|
|
label: "Titre",
|
|
description: "Titre ou objet de l'événement.",
|
|
example: "Réunion équipe",
|
|
},
|
|
{
|
|
token: "$calendar.event_location",
|
|
label: "Lieu",
|
|
description: "Lieu ou salle de l'événement.",
|
|
example: "Salle A",
|
|
},
|
|
{
|
|
token: "$calendar.event_organizer",
|
|
label: "Organisateur",
|
|
description: "Adresse e-mail de l'organisateur.",
|
|
example: "alice@example.com",
|
|
},
|
|
{
|
|
token: "$calendar.event_start",
|
|
label: "Début",
|
|
description: "Date/heure de début (ISO 8601).",
|
|
example: "2026-06-15T10:00:00Z",
|
|
},
|
|
{
|
|
token: "$calendar.event_end",
|
|
label: "Fin",
|
|
description: "Date/heure de fin (ISO 8601).",
|
|
example: "2026-06-15T11:00:00Z",
|
|
},
|
|
{
|
|
token: "$calendar.event_all_day",
|
|
label: "Journée entière",
|
|
description: "true si l'événement dure toute la journée.",
|
|
example: "false",
|
|
},
|
|
{
|
|
token: "$calendar.calendar_id",
|
|
label: "Agenda",
|
|
description: "Identifiant de l'agenda source.",
|
|
example: "work",
|
|
},
|
|
{
|
|
token: "$calendar.event_uid",
|
|
label: "Identifiant",
|
|
description: "UID CalDAV de l'événement.",
|
|
example: "team-sync-2026-06-15",
|
|
},
|
|
{
|
|
token: "$calendar.meet_url",
|
|
label: "Lien visio",
|
|
description: "URL de visioconférence associée, le cas échéant.",
|
|
example: "https://meet.example.com/abc-def",
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
export const WEBHOOK_TEMPLATE_VARIABLES = WEBHOOK_TEMPLATE_VARIABLE_GROUPS.flatMap(
|
|
(group) => group.variables
|
|
)
|
|
|
|
export function webhookVariableGroupsForDomains(
|
|
domains: AutomationDomain[],
|
|
includeUniversal = true
|
|
): WebhookTemplateVariableGroup[] {
|
|
const allowed = new Set<AutomationDomain | 'universal'>(domains)
|
|
if (includeUniversal) allowed.add('universal')
|
|
return WEBHOOK_TEMPLATE_VARIABLE_GROUPS.filter((g) => allowed.has(g.domain))
|
|
}
|
|
|
|
export const WEBHOOK_DEFAULT_TEMPLATES: Record<AutomationDomain, string> = {
|
|
mail: '{"text":"Nouveau mail de $sender.name : $subject"}',
|
|
drive: '{"text":"Fichier Drive $drive.file_name ajouté dans $drive.file_path"}',
|
|
contacts: '{"text":"Contact $contact.name ($contact.email) mis à jour"}',
|
|
agenda: '{"text":"Événement $calendar.event_title le $calendar.event_start"}',
|
|
}
|