@actuate-media/cms-admin 0.62.0 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @actuate-media/cms-admin
2
2
 
3
+ ## 0.63.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a6360cc: Forms launch kit (Batch 7): Integrations tab with Zapier Catch Hook helper and webhook CRUD in the form schema drawer; marketing seed contact form + /contact page; ActuateForm success focus; actuate doctor forms/CRM checks; forms-and-integrations docs.
8
+
3
9
  ## 0.62.0
4
10
 
5
11
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"FormSchemaDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaDrawer.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAe9D,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,kDA+IA"}
1
+ {"version":3,"file":"FormSchemaDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaDrawer.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAiB9D,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,kDAmJA"}
@@ -2,8 +2,9 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  /**
4
4
  * Form Schema drawer — the right-side panel opened from the Forms list "Schema"
5
- * action. Three tabs: Fields (versioned schema editor), Embed (public snippets
6
- * + domain restrictions), Notifications (per-form notification settings).
5
+ * action. Four tabs: Fields (versioned schema editor), Embed (public snippets
6
+ * + domain restrictions), Notifications (email settings), Integrations (CRM
7
+ * webhooks / Zapier).
7
8
  *
8
9
  * Saving the Fields tab creates a new schema version server-side; existing
9
10
  * submissions keep referencing the version they were captured against, so
@@ -19,11 +20,13 @@ import { Drawer } from './Drawer.js';
19
20
  import { FieldsPanel } from './FieldsPanel.js';
20
21
  import { EmbedPanel } from './EmbedPanel.js';
21
22
  import { NotificationsPanel } from './NotificationsPanel.js';
23
+ import { WebhooksPanel } from './WebhooksPanel.js';
22
24
  import { FormsErrorState, FormsLoading, btnPrimary, btnSecondary } from './primitives.js';
23
25
  const TABS = [
24
26
  { id: 'fields', label: 'Fields' },
25
27
  { id: 'embed', label: 'Embed' },
26
28
  { id: 'notifications', label: 'Notifications' },
29
+ { id: 'integrations', label: 'Integrations' },
27
30
  ];
28
31
  export function FormSchemaDrawer({ form, open, onOpenChange, onSaved, }) {
29
32
  const [tab, setTab] = useState('fields');
@@ -88,7 +91,7 @@ export function FormSchemaDrawer({ form, open, onOpenChange, onSaved, }) {
88
91
  }
89
92
  if (!form)
90
93
  return null;
91
- return (_jsxs(_Fragment, { children: [_jsx(Drawer, { open: open, onOpenChange: requestClose, title: form.name, description: `/${form.slug}`, width: "max-w-2xl", footer: tab === 'fields' ? (_jsxs(_Fragment, { children: [_jsx("button", { className: btnSecondary, onClick: () => requestClose(false), children: "Close" }), _jsx("button", { className: btnPrimary, onClick: handleSave, disabled: saving || loading, children: saving ? 'Saving…' : 'Save Schema' })] })) : undefined, children: _jsxs(Tabs.Root, { value: tab, onValueChange: setTab, children: [_jsx(Tabs.List, { className: "border-border mb-4 flex gap-1 border-b", "aria-label": "Form schema sections", children: TABS.map((t) => (_jsx(Tabs.Trigger, { value: t.id, className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary focus-visible:ring-ring -mb-px border-b-2 border-transparent px-3 py-2 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none", children: t.label }, t.id))) }), _jsx(Tabs.Content, { value: "fields", tabIndex: -1, children: loading ? (_jsx(FormsLoading, { label: "Loading schema\u2026" })) : error ? (_jsx(FormsErrorState, { message: error, onRetry: () => formId && setTab('fields') })) : (_jsx(FieldsPanel, { fields: fields, onChange: handleFieldsChange, hasSubmissions: hasSubmissions })) }), _jsx(Tabs.Content, { value: "embed", tabIndex: -1, children: formId && _jsx(EmbedPanel, { formId: formId, slug: form.slug, status: form.status }) }), _jsx(Tabs.Content, { value: "notifications", tabIndex: -1, children: formId && _jsx(NotificationsPanel, { formId: formId, onChanged: onSaved }) })] }) }), _jsx(ConfirmDialog, { open: confirmDiscard, onClose: () => setConfirmDiscard(false), onConfirm: () => {
94
+ return (_jsxs(_Fragment, { children: [_jsx(Drawer, { open: open, onOpenChange: requestClose, title: form.name, description: `/${form.slug}`, width: "max-w-2xl", footer: tab === 'fields' ? (_jsxs(_Fragment, { children: [_jsx("button", { className: btnSecondary, onClick: () => requestClose(false), children: "Close" }), _jsx("button", { className: btnPrimary, onClick: handleSave, disabled: saving || loading, children: saving ? 'Saving…' : 'Save Schema' })] })) : undefined, children: _jsxs(Tabs.Root, { value: tab, onValueChange: setTab, children: [_jsx(Tabs.List, { className: "border-border mb-4 flex gap-1 border-b", "aria-label": "Form schema sections", children: TABS.map((t) => (_jsx(Tabs.Trigger, { value: t.id, className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary focus-visible:ring-ring -mb-px border-b-2 border-transparent px-3 py-2 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none", children: t.label }, t.id))) }), _jsx(Tabs.Content, { value: "fields", tabIndex: -1, children: loading ? (_jsx(FormsLoading, { label: "Loading schema\u2026" })) : error ? (_jsx(FormsErrorState, { message: error, onRetry: () => formId && setTab('fields') })) : (_jsx(FieldsPanel, { fields: fields, onChange: handleFieldsChange, hasSubmissions: hasSubmissions })) }), _jsx(Tabs.Content, { value: "embed", tabIndex: -1, children: formId && _jsx(EmbedPanel, { formId: formId, slug: form.slug, status: form.status }) }), _jsx(Tabs.Content, { value: "notifications", tabIndex: -1, children: formId && _jsx(NotificationsPanel, { formId: formId, onChanged: onSaved }) }), _jsx(Tabs.Content, { value: "integrations", tabIndex: -1, children: formId && _jsx(WebhooksPanel, { formId: formId, formSlug: form.slug }) })] }) }), _jsx(ConfirmDialog, { open: confirmDiscard, onClose: () => setConfirmDiscard(false), onConfirm: () => {
92
95
  setDirty(false);
93
96
  onOpenChange(false);
94
97
  }, title: "Discard unsaved changes?", description: "You have unsaved schema changes. Closing now will discard them.", confirmLabel: "Discard", cancelLabel: "Keep editing", destructive: true })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"FormSchemaDrawer.js","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaDrawer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FormSchemaDrawer.js","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaDrawer.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/forms/NotificationsPanel.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,kDAmKA"}
1
+ {"version":3,"file":"NotificationsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/forms/NotificationsPanel.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,kDAqKA"}
@@ -3,8 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * Notifications tab of the Form Schema drawer. Persists per-form notification
5
5
  * settings (recipients, reply-to, subject/message templates, field inclusion,
6
- * autoresponder). Actual email/webhook delivery + the "send test" action are
7
- * wired in a later phase (PR 6); this panel owns the configuration only.
6
+ * autoresponder). Email delivery uses the configured email adapter when enabled.
8
7
  */
9
8
  import { useEffect, useState } from 'react';
10
9
  import * as Switch from '@radix-ui/react-switch';
@@ -69,7 +68,7 @@ export function NotificationsPanel({ formId, onChanged, }) {
69
68
  .split(',')
70
69
  .map((s) => s.trim())
71
70
  .filter(Boolean),
72
- }), placeholder: "team@example.com", className: inputCls }) }), _jsx(Field, { label: "Reply-to field key", hint: "Field whose value is used as the reply-to address", children: _jsx("input", { type: "text", value: settings.replyToFieldKey ?? '', onChange: (e) => patch({ replyToFieldKey: e.target.value || null }), placeholder: "email", className: inputCls }) }), _jsx(Field, { label: "Subject template", children: _jsx("input", { type: "text", value: settings.subjectTemplate ?? '', onChange: (e) => patch({ subjectTemplate: e.target.value }), placeholder: "New submission from {{name}}", className: inputCls }) }), _jsx(Field, { label: "Message template", children: _jsx("textarea", { rows: 3, value: settings.messageTemplate ?? '', onChange: (e) => patch({ messageTemplate: e.target.value }), className: inputCls }) }), _jsx(ToggleRow, { label: "Include all fields", help: "Append every submitted field to the notification body.", checked: settings.includeFields ?? true, onChange: (v) => patch({ includeFields: v }) }), _jsx(ToggleRow, { label: "Exclude sensitive fields", help: "Omit fields marked as sensitive/PII from the email.", checked: settings.excludeSensitiveFields ?? false, onChange: (v) => patch({ excludeSensitiveFields: v }) }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsx(ToggleRow, { label: "Auto-response email", help: "Send a confirmation email back to the submitter.", checked: settings.autoresponderEnabled ?? false, onChange: (v) => patch({ autoresponderEnabled: v }) }), settings.autoresponderEnabled && (_jsxs("div", { className: "mt-3 space-y-3", children: [_jsx(Field, { label: "Auto-response subject", children: _jsx("input", { type: "text", value: settings.autoresponderSubject ?? '', onChange: (e) => patch({ autoresponderSubject: e.target.value }), className: inputCls }) }), _jsx(Field, { label: "Auto-response body", children: _jsx("textarea", { rows: 3, value: settings.autoresponderBody ?? '', onChange: (e) => patch({ autoresponderBody: e.target.value }), className: inputCls }) })] }))] })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Email & webhook delivery (including the test action) is wired in an upcoming release. Settings saved here apply automatically once delivery is enabled." }), _jsx("div", { className: "flex justify-end", children: _jsx("button", { className: btnPrimary, onClick: save, disabled: saving, children: saving ? 'Saving…' : 'Save notifications' }) })] }));
71
+ }), placeholder: "team@example.com", className: inputCls }) }), _jsx(Field, { label: "Reply-to field key", hint: "Field whose value is used as the reply-to address", children: _jsx("input", { type: "text", value: settings.replyToFieldKey ?? '', onChange: (e) => patch({ replyToFieldKey: e.target.value || null }), placeholder: "email", className: inputCls }) }), _jsx(Field, { label: "Subject template", children: _jsx("input", { type: "text", value: settings.subjectTemplate ?? '', onChange: (e) => patch({ subjectTemplate: e.target.value }), placeholder: "New submission from {{name}}", className: inputCls }) }), _jsx(Field, { label: "Message template", children: _jsx("textarea", { rows: 3, value: settings.messageTemplate ?? '', onChange: (e) => patch({ messageTemplate: e.target.value }), className: inputCls }) }), _jsx(ToggleRow, { label: "Include all fields", help: "Append every submitted field to the notification body.", checked: settings.includeFields ?? true, onChange: (v) => patch({ includeFields: v }) }), _jsx(ToggleRow, { label: "Exclude sensitive fields", help: "Omit fields marked as sensitive/PII from the email.", checked: settings.excludeSensitiveFields ?? false, onChange: (v) => patch({ excludeSensitiveFields: v }) }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsx(ToggleRow, { label: "Auto-response email", help: "Send a confirmation email back to the submitter.", checked: settings.autoresponderEnabled ?? false, onChange: (v) => patch({ autoresponderEnabled: v }) }), settings.autoresponderEnabled && (_jsxs("div", { className: "mt-3 space-y-3", children: [_jsx(Field, { label: "Auto-response subject", children: _jsx("input", { type: "text", value: settings.autoresponderSubject ?? '', onChange: (e) => patch({ autoresponderSubject: e.target.value }), className: inputCls }) }), _jsx(Field, { label: "Auto-response body", children: _jsx("textarea", { rows: 3, value: settings.autoresponderBody ?? '', onChange: (e) => patch({ autoresponderBody: e.target.value }), className: inputCls }) })] }))] })] }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["For CRM integrations (Zapier, HubSpot via Zapier, etc.), use the", ' ', _jsx("span", { className: "font-medium", children: "Integrations" }), " tab to add a signed webhook. Email notifications send when recipients are configured and your email provider is set up (", _jsx("span", { className: "font-mono", children: "RESEND_API_KEY" }), " or SMTP)."] }), _jsx("div", { className: "flex justify-end", children: _jsx("button", { className: btnPrimary, onClick: save, disabled: saving, children: saving ? 'Saving…' : 'Save notifications' }) })] }));
73
72
  }
74
73
  function ToggleRow({ label, help, checked, onChange, }) {
75
74
  return (_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground block text-sm font-medium", children: label }), _jsx("span", { className: "text-muted-foreground block text-sm", children: help })] }), _jsx(Switch.Root, { checked: checked, onCheckedChange: onChange, "aria-label": label, className: "bg-destructive data-[state=checked]:bg-success focus-visible:ring-ring relative h-[18px] w-8 shrink-0 rounded-full transition-colors focus-visible:ring-2 focus-visible:outline-none", children: _jsx(Switch.Thumb, { className: "bg-background block h-3.5 w-3.5 translate-x-0.5 rounded-full shadow-sm transition-transform data-[state=checked]:translate-x-[14px]" }) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationsPanel.js","sourceRoot":"","sources":["../../../src/components/forms/NotificationsPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotificationsPanel.js","sourceRoot":"","sources":["../../../src/components/forms/NotificationsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function WebhooksPanel({ formId, formSlug }: {
2
+ formId: string;
3
+ formSlug: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=WebhooksPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhooksPanel.d.ts","sourceRoot":"","sources":["../../../src/components/forms/WebhooksPanel.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,2CA0RvF"}
@@ -0,0 +1,129 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * Integrations tab of the Form Schema drawer. Manages signed outbound webhooks
5
+ * (Zapier Catch Hook, Make, custom CRM endpoints) and guides editors through
6
+ * the default Zapier → Webhooks by Zapier → Catch Hook setup.
7
+ */
8
+ import * as Switch from '@radix-ui/react-switch';
9
+ import { ExternalLink, Loader2, Plus, Trash2, Zap } from 'lucide-react';
10
+ import { useEffect, useState } from 'react';
11
+ import { toast } from 'sonner';
12
+ import { createFormWebhook, deleteFormWebhook, fetchFormWebhooks, testFormWebhook, updateFormWebhook, } from '../../lib/forms-service.js';
13
+ import { ConfirmDialog } from '../ui/ConfirmDialog.js';
14
+ import { FormsErrorState, FormsLoading, btnPrimary, btnSecondary } from './primitives.js';
15
+ const ZAPIER_CATCH_HOOK_DOCS = 'https://zapier.com/apps/webhook/integrations';
16
+ const FORMS_INTEGRATIONS_DOCS = 'https://actuatecms.dev/docs/forms-and-integrations';
17
+ const inputCls = 'border-border bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
18
+ export function WebhooksPanel({ formId, formSlug }) {
19
+ const [webhooks, setWebhooks] = useState([]);
20
+ const [loading, setLoading] = useState(true);
21
+ const [error, setError] = useState(null);
22
+ const [url, setUrl] = useState('');
23
+ const [creating, setCreating] = useState(false);
24
+ const [createdSecret, setCreatedSecret] = useState(null);
25
+ const [pendingDelete, setPendingDelete] = useState(null);
26
+ const [testingId, setTestingId] = useState(null);
27
+ async function reload() {
28
+ setLoading(true);
29
+ setError(null);
30
+ try {
31
+ setWebhooks(await fetchFormWebhooks(formId));
32
+ }
33
+ catch (e) {
34
+ setError(e instanceof Error ? e.message : 'Failed to load webhooks');
35
+ }
36
+ finally {
37
+ setLoading(false);
38
+ }
39
+ }
40
+ useEffect(() => {
41
+ let active = true;
42
+ setLoading(true);
43
+ setError(null);
44
+ fetchFormWebhooks(formId)
45
+ .then((rows) => {
46
+ if (active)
47
+ setWebhooks(rows);
48
+ })
49
+ .catch((e) => {
50
+ if (active)
51
+ setError(e instanceof Error ? e.message : 'Failed to load webhooks');
52
+ })
53
+ .finally(() => {
54
+ if (active)
55
+ setLoading(false);
56
+ });
57
+ return () => {
58
+ active = false;
59
+ };
60
+ }, [formId]);
61
+ async function handleCreate(e) {
62
+ e.preventDefault();
63
+ const trimmed = url.trim();
64
+ if (!trimmed) {
65
+ toast.error('Paste your Catch Hook URL first.');
66
+ return;
67
+ }
68
+ setCreating(true);
69
+ const res = await createFormWebhook(formId, {
70
+ url: trimmed,
71
+ events: ['form.submitted'],
72
+ enabled: true,
73
+ });
74
+ setCreating(false);
75
+ if (res.error) {
76
+ toast.error(res.error);
77
+ return;
78
+ }
79
+ if (res.data?.secret)
80
+ setCreatedSecret(res.data.secret);
81
+ setUrl('');
82
+ toast.success('Webhook connected.');
83
+ await reload();
84
+ }
85
+ async function toggleEnabled(webhook, enabled) {
86
+ const res = await updateFormWebhook(formId, webhook.id, { enabled });
87
+ if (res.error) {
88
+ toast.error(res.error);
89
+ return;
90
+ }
91
+ setWebhooks((rows) => rows.map((row) => (row.id === webhook.id ? { ...row, enabled } : row)));
92
+ }
93
+ async function handleTest(webhookId) {
94
+ setTestingId(webhookId);
95
+ const res = await testFormWebhook(formId, webhookId);
96
+ setTestingId(null);
97
+ if (res.error) {
98
+ toast.error(res.error);
99
+ return;
100
+ }
101
+ if (res.data?.ok) {
102
+ toast.success(`Test delivery succeeded (HTTP ${res.data.status}).`);
103
+ }
104
+ else {
105
+ toast.error(res.data?.error || `Test failed (HTTP ${res.data?.status ?? 'unknown'}).`);
106
+ }
107
+ await reload();
108
+ }
109
+ async function confirmDelete() {
110
+ if (!pendingDelete)
111
+ return;
112
+ const res = await deleteFormWebhook(formId, pendingDelete.id);
113
+ setPendingDelete(null);
114
+ if (res.error) {
115
+ toast.error(res.error);
116
+ return;
117
+ }
118
+ toast.success('Webhook removed.');
119
+ await reload();
120
+ }
121
+ if (loading)
122
+ return _jsx(FormsLoading, { label: "Loading integrations\u2026" });
123
+ if (error)
124
+ return _jsx(FormsErrorState, { message: error, onRetry: () => void reload() });
125
+ return (_jsxs("div", { className: "space-y-5", children: [_jsx("section", { className: "border-border bg-muted/40 space-y-3 rounded-lg border p-4", "aria-labelledby": "zapier-helper-title", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("span", { className: "bg-primary/10 text-primary flex h-9 w-9 shrink-0 items-center justify-center rounded-md", children: _jsx(Zap, { size: 18, "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0 space-y-2", children: [_jsx("h3", { id: "zapier-helper-title", className: "text-foreground text-sm font-medium", children: "Connect to Zapier (recommended)" }), _jsxs("ol", { className: "text-muted-foreground list-decimal space-y-1 pl-4 text-sm", children: [_jsxs("li", { children: ["In Zapier, create a Zap with trigger", ' ', _jsx("span", { className: "text-foreground font-medium", children: "Webhooks by Zapier \u2192 Catch Hook" }), "."] }), _jsx("li", { children: "Copy the hook URL Zapier gives you and paste it below." }), _jsxs("li", { children: ["Map fields in your action step \u2014 submission values arrive under", ' ', _jsx("span", { className: "font-mono text-xs", children: "data.email" }), ",", ' ', _jsx("span", { className: "font-mono text-xs", children: "data.name" }), ", etc."] }), _jsxs("li", { children: ["Use event ", _jsx("span", { className: "font-mono text-xs", children: "form.submitted" }), " only (spam hits emit ", _jsx("span", { className: "font-mono text-xs", children: "form.spam_detected" }), " separately)."] })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "HubSpot, Salesforce, Slack, and Google Sheets work through Zapier actions \u2014 no native Actuate app required for v1." }), _jsxs("div", { className: "flex flex-wrap gap-3 pt-1", children: [_jsxs("a", { href: ZAPIER_CATCH_HOOK_DOCS, target: "_blank", rel: "noopener noreferrer", className: "text-primary inline-flex items-center gap-1 text-sm font-medium hover:underline", children: ["Open Zapier Webhooks", _jsx(ExternalLink, { size: 14, "aria-hidden": true })] }), _jsxs("a", { href: FORMS_INTEGRATIONS_DOCS, target: "_blank", rel: "noopener noreferrer", className: "text-primary inline-flex items-center gap-1 text-sm font-medium hover:underline", children: ["Full integration guide", _jsx(ExternalLink, { size: 14, "aria-hidden": true })] })] })] })] }) }), _jsxs("form", { onSubmit: handleCreate, className: "space-y-3", children: [_jsxs("label", { className: "block", children: [_jsx("span", { className: "text-foreground mb-1 block text-sm font-medium", children: "Webhook URL" }), _jsx("input", { type: "url", value: url, onChange: (e) => setUrl(e.target.value), placeholder: "https://hooks.zapier.com/hooks/catch/\u2026", className: inputCls, autoComplete: "off" }), _jsxs("span", { className: "text-muted-foreground mt-1 block text-xs", children: ["Paste your Catch Hook URL for form ", _jsx("span", { className: "font-mono", children: formSlug }), ". Payloads are HMAC-signed via ", _jsx("span", { className: "font-mono", children: "X-Actuate-Signature" }), "."] })] }), _jsx("button", { type: "submit", className: `${btnPrimary} inline-flex items-center`, disabled: creating, children: creating ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 inline h-4 w-4 animate-spin", "aria-hidden": true }), "Connecting\u2026"] })) : (_jsxs(_Fragment, { children: [_jsx(Plus, { className: "mr-1 inline h-4 w-4", "aria-hidden": true }), "Add webhook"] })) })] }), createdSecret && (_jsxs("div", { className: "border-success/30 bg-success/10 text-foreground space-y-2 rounded-md border px-3 py-3 text-sm", role: "status", children: [_jsx("p", { className: "font-medium", children: "Signing secret (shown once)" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Store this if your CRM verifies HMAC signatures. You cannot retrieve it again after closing this panel." }), _jsx("pre", { className: "border-border bg-background overflow-x-auto rounded border px-2 py-1.5 font-mono text-xs", children: createdSecret }), _jsx("button", { type: "button", className: btnSecondary, onClick: () => setCreatedSecret(null), children: "Dismiss" })] })), webhooks.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "No webhooks yet. Add a Catch Hook URL to send each submission to your CRM." })) : (_jsx("ul", { className: "space-y-3", "aria-label": "Configured webhooks", children: webhooks.map((webhook) => (_jsxs("li", { className: "border-border flex flex-col gap-3 rounded-lg border p-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-foreground truncate font-mono text-xs", children: webhook.url }), _jsxs("p", { className: "text-muted-foreground mt-1 text-xs", children: ["Events: ", webhook.events.join(', ') || 'form.submitted', webhook.lastDeliveryAt
126
+ ? ` · Last delivery: ${webhook.lastDeliveryStatus ?? 'unknown'}`
127
+ : ''] })] }), _jsxs("div", { className: "flex shrink-0 flex-wrap items-center gap-2", children: [_jsx(Switch.Root, { checked: webhook.enabled, onCheckedChange: (v) => void toggleEnabled(webhook, v), "aria-label": `Enable webhook ${webhook.url}`, className: "bg-destructive data-[state=checked]:bg-success focus-visible:ring-ring relative h-[18px] w-8 rounded-full transition-colors focus-visible:ring-2 focus-visible:outline-none", children: _jsx(Switch.Thumb, { className: "bg-background block h-3.5 w-3.5 translate-x-0.5 rounded-full shadow-sm transition-transform data-[state=checked]:translate-x-[14px]" }) }), _jsx("button", { type: "button", className: btnSecondary, disabled: testingId === webhook.id, onClick: () => void handleTest(webhook.id), children: testingId === webhook.id ? 'Testing…' : 'Send test' }), _jsxs("button", { type: "button", className: "text-destructive hover:bg-destructive/10 focus-visible:ring-ring inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-sm font-medium focus-visible:ring-2 focus-visible:outline-none", "aria-label": "Remove webhook", onClick: () => setPendingDelete(webhook), children: [_jsx(Trash2, { size: 16, "aria-hidden": true }), "Remove"] })] })] }, webhook.id))) })), _jsx(ConfirmDialog, { open: !!pendingDelete, onClose: () => setPendingDelete(null), onConfirm: () => void confirmDelete(), title: "Remove webhook?", description: "New submissions will no longer be sent to this URL. Existing Zapier Zaps are not deleted \u2014 disable them in Zapier if needed.", confirmLabel: "Remove", cancelLabel: "Keep webhook", destructive: true })] }));
128
+ }
129
+ //# sourceMappingURL=WebhooksPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhooksPanel.js","sourceRoot":"","sources":["../../../src/components/forms/WebhooksPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { FormDefinition, FormSchemaVersion, FormField, FormNotificationSettings, FormEmbedSettings, FormStatus, FormStats, FormsSidebarCount, FetchFormsParams, FormSubmission, FetchFormEntriesParams, EntryCounts } from '@actuate-media/cms-core';
2
- export type { FormDefinition, FormSchemaVersion, FormField, FormFieldType, FormFieldOption, FieldValidationRules, FormNotificationSettings, FormEmbedSettings, FormStatus, FormStats, FormsSidebarCount, FormSubmission, FormSubmissionFile, FetchFormEntriesParams, EntryCounts, SpamStatus, } from '@actuate-media/cms-core';
1
+ import type { FormDefinition, FormSchemaVersion, FormField, FormNotificationSettings, FormEmbedSettings, FormWebhookConfig, FormWebhookEvent, FormStatus, FormStats, FormsSidebarCount, FetchFormsParams, FormSubmission, FetchFormEntriesParams, EntryCounts } from '@actuate-media/cms-core';
2
+ export type { FormDefinition, FormSchemaVersion, FormField, FormFieldType, FormFieldOption, FieldValidationRules, FormNotificationSettings, FormEmbedSettings, FormWebhookConfig, FormWebhookEvent, FormStatus, FormStats, FormsSidebarCount, FormSubmission, FormSubmissionFile, FetchFormEntriesParams, EntryCounts, SpamStatus, } from '@actuate-media/cms-core';
3
3
  /**
4
4
  * A form as returned by `GET /forms` — the typed definition plus the legacy
5
5
  * numeric aliases the list endpoint adds for backward compatibility.
@@ -77,6 +77,44 @@ export declare function updateEmbedSettings(id: string, payload: Partial<FormEmb
77
77
  data?: FormEmbedSettings;
78
78
  error?: string;
79
79
  }>;
80
+ export interface WebhookTestResult {
81
+ ok: boolean;
82
+ status: number;
83
+ attempts: number;
84
+ error?: string;
85
+ }
86
+ export interface CreateFormWebhookPayload {
87
+ url: string;
88
+ events?: FormWebhookEvent[];
89
+ enabled?: boolean;
90
+ retryCount?: number;
91
+ }
92
+ export interface UpdateFormWebhookPayload {
93
+ url?: string;
94
+ events?: FormWebhookEvent[];
95
+ enabled?: boolean;
96
+ retryCount?: number;
97
+ }
98
+ /** Plaintext secret is returned only on create — store it before closing the dialog. */
99
+ export type CreatedFormWebhook = FormWebhookConfig & {
100
+ secret: string;
101
+ };
102
+ export declare function fetchFormWebhooks(formId: string): Promise<FormWebhookConfig[]>;
103
+ export declare function createFormWebhook(formId: string, payload: CreateFormWebhookPayload): Promise<{
104
+ data?: CreatedFormWebhook;
105
+ error?: string;
106
+ }>;
107
+ export declare function updateFormWebhook(formId: string, webhookId: string, payload: UpdateFormWebhookPayload): Promise<{
108
+ data?: FormWebhookConfig;
109
+ error?: string;
110
+ }>;
111
+ export declare function deleteFormWebhook(formId: string, webhookId: string): Promise<{
112
+ error?: string;
113
+ }>;
114
+ export declare function testFormWebhook(formId: string, webhookId: string): Promise<{
115
+ data?: WebhookTestResult;
116
+ error?: string;
117
+ }>;
80
118
  /** A page of submissions as returned by `GET /forms/entries`. */
81
119
  export interface EntriesPage {
82
120
  entries: FormSubmission[];
@@ -1 +1 @@
1
- {"version":3,"file":"forms-service.d.ts","sourceRoot":"","sources":["../../src/lib/forms-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forms-service.d.ts","sourceRoot":"","sources":["../../src/lib/forms-service.ts"],"names":[],"mappings":"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"}
@@ -141,6 +141,30 @@ export async function updateEmbedSettings(id, payload) {
141
141
  });
142
142
  return { data: res.data, error: res.error };
143
143
  }
144
+ export async function fetchFormWebhooks(formId) {
145
+ const res = await cmsApi(`/forms/${encodeURIComponent(formId)}/webhooks`);
146
+ throwIfError(res);
147
+ return res.data ?? [];
148
+ }
149
+ export async function createFormWebhook(formId, payload) {
150
+ const res = await cmsApi(`/forms/${encodeURIComponent(formId)}/webhooks`, {
151
+ method: 'POST',
152
+ body: JSON.stringify(payload),
153
+ });
154
+ return { data: res.data, error: res.error };
155
+ }
156
+ export async function updateFormWebhook(formId, webhookId, payload) {
157
+ const res = await cmsApi(`/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}`, { method: 'PATCH', body: JSON.stringify(payload) });
158
+ return { data: res.data, error: res.error };
159
+ }
160
+ export async function deleteFormWebhook(formId, webhookId) {
161
+ const res = await cmsApi(`/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}`, { method: 'DELETE' });
162
+ return { error: res.error };
163
+ }
164
+ export async function testFormWebhook(formId, webhookId) {
165
+ const res = await cmsApi(`/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}/test`, { method: 'POST' });
166
+ return { data: res.data, error: res.error };
167
+ }
144
168
  function buildEntriesQuery(params) {
145
169
  const qs = new URLSearchParams();
146
170
  if (params.search)
@@ -1 +1 @@
1
- {"version":3,"file":"forms-service.js","sourceRoot":"","sources":["../../src/lib/forms-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forms-service.js","sourceRoot":"","sources":["../../src/lib/forms-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.62.0",
3
+ "version": "0.63.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -2,8 +2,9 @@
2
2
 
3
3
  /**
4
4
  * Form Schema drawer — the right-side panel opened from the Forms list "Schema"
5
- * action. Three tabs: Fields (versioned schema editor), Embed (public snippets
6
- * + domain restrictions), Notifications (per-form notification settings).
5
+ * action. Four tabs: Fields (versioned schema editor), Embed (public snippets
6
+ * + domain restrictions), Notifications (email settings), Integrations (CRM
7
+ * webhooks / Zapier).
7
8
  *
8
9
  * Saving the Fields tab creates a new schema version server-side; existing
9
10
  * submissions keep referencing the version they were captured against, so
@@ -20,12 +21,14 @@ import { Drawer } from './Drawer.js'
20
21
  import { FieldsPanel } from './FieldsPanel.js'
21
22
  import { EmbedPanel } from './EmbedPanel.js'
22
23
  import { NotificationsPanel } from './NotificationsPanel.js'
24
+ import { WebhooksPanel } from './WebhooksPanel.js'
23
25
  import { FormsErrorState, FormsLoading, btnPrimary, btnSecondary } from './primitives.js'
24
26
 
25
27
  const TABS = [
26
28
  { id: 'fields', label: 'Fields' },
27
29
  { id: 'embed', label: 'Embed' },
28
30
  { id: 'notifications', label: 'Notifications' },
31
+ { id: 'integrations', label: 'Integrations' },
29
32
  ] as const
30
33
 
31
34
  export function FormSchemaDrawer({
@@ -164,6 +167,10 @@ export function FormSchemaDrawer({
164
167
  <Tabs.Content value="notifications" tabIndex={-1}>
165
168
  {formId && <NotificationsPanel formId={formId} onChanged={onSaved} />}
166
169
  </Tabs.Content>
170
+
171
+ <Tabs.Content value="integrations" tabIndex={-1}>
172
+ {formId && <WebhooksPanel formId={formId} formSlug={form.slug} />}
173
+ </Tabs.Content>
167
174
  </Tabs.Root>
168
175
  </Drawer>
169
176
 
@@ -3,8 +3,7 @@
3
3
  /**
4
4
  * Notifications tab of the Form Schema drawer. Persists per-form notification
5
5
  * settings (recipients, reply-to, subject/message templates, field inclusion,
6
- * autoresponder). Actual email/webhook delivery + the "send test" action are
7
- * wired in a later phase (PR 6); this panel owns the configuration only.
6
+ * autoresponder). Email delivery uses the configured email adapter when enabled.
8
7
  */
9
8
  import { useEffect, useState } from 'react'
10
9
  import * as Switch from '@radix-ui/react-switch'
@@ -179,8 +178,10 @@ export function NotificationsPanel({
179
178
  </fieldset>
180
179
 
181
180
  <p className="text-muted-foreground text-xs">
182
- Email &amp; webhook delivery (including the test action) is wired in an upcoming release.
183
- Settings saved here apply automatically once delivery is enabled.
181
+ For CRM integrations (Zapier, HubSpot via Zapier, etc.), use the{' '}
182
+ <span className="font-medium">Integrations</span> tab to add a signed webhook. Email
183
+ notifications send when recipients are configured and your email provider is set up (
184
+ <span className="font-mono">RESEND_API_KEY</span> or SMTP).
184
185
  </p>
185
186
 
186
187
  <div className="flex justify-end">
@@ -0,0 +1,311 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * Integrations tab of the Form Schema drawer. Manages signed outbound webhooks
5
+ * (Zapier Catch Hook, Make, custom CRM endpoints) and guides editors through
6
+ * the default Zapier → Webhooks by Zapier → Catch Hook setup.
7
+ */
8
+ import * as Switch from '@radix-ui/react-switch'
9
+ import { ExternalLink, Loader2, Plus, Trash2, Zap } from 'lucide-react'
10
+ import { useEffect, useState } from 'react'
11
+ import { toast } from 'sonner'
12
+ import {
13
+ createFormWebhook,
14
+ deleteFormWebhook,
15
+ fetchFormWebhooks,
16
+ testFormWebhook,
17
+ updateFormWebhook,
18
+ type FormWebhookConfig,
19
+ } from '../../lib/forms-service.js'
20
+ import { ConfirmDialog } from '../ui/ConfirmDialog.js'
21
+ import { FormsErrorState, FormsLoading, btnPrimary, btnSecondary } from './primitives.js'
22
+
23
+ const ZAPIER_CATCH_HOOK_DOCS = 'https://zapier.com/apps/webhook/integrations'
24
+ const FORMS_INTEGRATIONS_DOCS = 'https://actuatecms.dev/docs/forms-and-integrations'
25
+
26
+ const inputCls =
27
+ 'border-border bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none'
28
+
29
+ export function WebhooksPanel({ formId, formSlug }: { formId: string; formSlug: string }) {
30
+ const [webhooks, setWebhooks] = useState<FormWebhookConfig[]>([])
31
+ const [loading, setLoading] = useState(true)
32
+ const [error, setError] = useState<string | null>(null)
33
+ const [url, setUrl] = useState('')
34
+ const [creating, setCreating] = useState(false)
35
+ const [createdSecret, setCreatedSecret] = useState<string | null>(null)
36
+ const [pendingDelete, setPendingDelete] = useState<FormWebhookConfig | null>(null)
37
+ const [testingId, setTestingId] = useState<string | null>(null)
38
+
39
+ async function reload(): Promise<void> {
40
+ setLoading(true)
41
+ setError(null)
42
+ try {
43
+ setWebhooks(await fetchFormWebhooks(formId))
44
+ } catch (e: unknown) {
45
+ setError(e instanceof Error ? e.message : 'Failed to load webhooks')
46
+ } finally {
47
+ setLoading(false)
48
+ }
49
+ }
50
+
51
+ useEffect(() => {
52
+ let active = true
53
+ setLoading(true)
54
+ setError(null)
55
+ fetchFormWebhooks(formId)
56
+ .then((rows) => {
57
+ if (active) setWebhooks(rows)
58
+ })
59
+ .catch((e: unknown) => {
60
+ if (active) setError(e instanceof Error ? e.message : 'Failed to load webhooks')
61
+ })
62
+ .finally(() => {
63
+ if (active) setLoading(false)
64
+ })
65
+ return () => {
66
+ active = false
67
+ }
68
+ }, [formId])
69
+
70
+ async function handleCreate(e: React.FormEvent): Promise<void> {
71
+ e.preventDefault()
72
+ const trimmed = url.trim()
73
+ if (!trimmed) {
74
+ toast.error('Paste your Catch Hook URL first.')
75
+ return
76
+ }
77
+ setCreating(true)
78
+ const res = await createFormWebhook(formId, {
79
+ url: trimmed,
80
+ events: ['form.submitted'],
81
+ enabled: true,
82
+ })
83
+ setCreating(false)
84
+ if (res.error) {
85
+ toast.error(res.error)
86
+ return
87
+ }
88
+ if (res.data?.secret) setCreatedSecret(res.data.secret)
89
+ setUrl('')
90
+ toast.success('Webhook connected.')
91
+ await reload()
92
+ }
93
+
94
+ async function toggleEnabled(webhook: FormWebhookConfig, enabled: boolean): Promise<void> {
95
+ const res = await updateFormWebhook(formId, webhook.id, { enabled })
96
+ if (res.error) {
97
+ toast.error(res.error)
98
+ return
99
+ }
100
+ setWebhooks((rows) => rows.map((row) => (row.id === webhook.id ? { ...row, enabled } : row)))
101
+ }
102
+
103
+ async function handleTest(webhookId: string): Promise<void> {
104
+ setTestingId(webhookId)
105
+ const res = await testFormWebhook(formId, webhookId)
106
+ setTestingId(null)
107
+ if (res.error) {
108
+ toast.error(res.error)
109
+ return
110
+ }
111
+ if (res.data?.ok) {
112
+ toast.success(`Test delivery succeeded (HTTP ${res.data.status}).`)
113
+ } else {
114
+ toast.error(res.data?.error || `Test failed (HTTP ${res.data?.status ?? 'unknown'}).`)
115
+ }
116
+ await reload()
117
+ }
118
+
119
+ async function confirmDelete(): Promise<void> {
120
+ if (!pendingDelete) return
121
+ const res = await deleteFormWebhook(formId, pendingDelete.id)
122
+ setPendingDelete(null)
123
+ if (res.error) {
124
+ toast.error(res.error)
125
+ return
126
+ }
127
+ toast.success('Webhook removed.')
128
+ await reload()
129
+ }
130
+
131
+ if (loading) return <FormsLoading label="Loading integrations…" />
132
+ if (error) return <FormsErrorState message={error} onRetry={() => void reload()} />
133
+
134
+ return (
135
+ <div className="space-y-5">
136
+ <section
137
+ className="border-border bg-muted/40 space-y-3 rounded-lg border p-4"
138
+ aria-labelledby="zapier-helper-title"
139
+ >
140
+ <div className="flex items-start gap-3">
141
+ <span className="bg-primary/10 text-primary flex h-9 w-9 shrink-0 items-center justify-center rounded-md">
142
+ <Zap size={18} aria-hidden />
143
+ </span>
144
+ <div className="min-w-0 space-y-2">
145
+ <h3 id="zapier-helper-title" className="text-foreground text-sm font-medium">
146
+ Connect to Zapier (recommended)
147
+ </h3>
148
+ <ol className="text-muted-foreground list-decimal space-y-1 pl-4 text-sm">
149
+ <li>
150
+ In Zapier, create a Zap with trigger{' '}
151
+ <span className="text-foreground font-medium">Webhooks by Zapier → Catch Hook</span>
152
+ .
153
+ </li>
154
+ <li>Copy the hook URL Zapier gives you and paste it below.</li>
155
+ <li>
156
+ Map fields in your action step — submission values arrive under{' '}
157
+ <span className="font-mono text-xs">data.email</span>,{' '}
158
+ <span className="font-mono text-xs">data.name</span>, etc.
159
+ </li>
160
+ <li>
161
+ Use event <span className="font-mono text-xs">form.submitted</span> only (spam hits
162
+ emit <span className="font-mono text-xs">form.spam_detected</span> separately).
163
+ </li>
164
+ </ol>
165
+ <p className="text-muted-foreground text-xs">
166
+ HubSpot, Salesforce, Slack, and Google Sheets work through Zapier actions — no native
167
+ Actuate app required for v1.
168
+ </p>
169
+ <div className="flex flex-wrap gap-3 pt-1">
170
+ <a
171
+ href={ZAPIER_CATCH_HOOK_DOCS}
172
+ target="_blank"
173
+ rel="noopener noreferrer"
174
+ className="text-primary inline-flex items-center gap-1 text-sm font-medium hover:underline"
175
+ >
176
+ Open Zapier Webhooks
177
+ <ExternalLink size={14} aria-hidden />
178
+ </a>
179
+ <a
180
+ href={FORMS_INTEGRATIONS_DOCS}
181
+ target="_blank"
182
+ rel="noopener noreferrer"
183
+ className="text-primary inline-flex items-center gap-1 text-sm font-medium hover:underline"
184
+ >
185
+ Full integration guide
186
+ <ExternalLink size={14} aria-hidden />
187
+ </a>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </section>
192
+
193
+ <form onSubmit={handleCreate} className="space-y-3">
194
+ <label className="block">
195
+ <span className="text-foreground mb-1 block text-sm font-medium">Webhook URL</span>
196
+ <input
197
+ type="url"
198
+ value={url}
199
+ onChange={(e) => setUrl(e.target.value)}
200
+ placeholder="https://hooks.zapier.com/hooks/catch/…"
201
+ className={inputCls}
202
+ autoComplete="off"
203
+ />
204
+ <span className="text-muted-foreground mt-1 block text-xs">
205
+ Paste your Catch Hook URL for form <span className="font-mono">{formSlug}</span>.
206
+ Payloads are HMAC-signed via <span className="font-mono">X-Actuate-Signature</span>.
207
+ </span>
208
+ </label>
209
+ <button
210
+ type="submit"
211
+ className={`${btnPrimary} inline-flex items-center`}
212
+ disabled={creating}
213
+ >
214
+ {creating ? (
215
+ <>
216
+ <Loader2 className="mr-2 inline h-4 w-4 animate-spin" aria-hidden />
217
+ Connecting…
218
+ </>
219
+ ) : (
220
+ <>
221
+ <Plus className="mr-1 inline h-4 w-4" aria-hidden />
222
+ Add webhook
223
+ </>
224
+ )}
225
+ </button>
226
+ </form>
227
+
228
+ {createdSecret && (
229
+ <div
230
+ className="border-success/30 bg-success/10 text-foreground space-y-2 rounded-md border px-3 py-3 text-sm"
231
+ role="status"
232
+ >
233
+ <p className="font-medium">Signing secret (shown once)</p>
234
+ <p className="text-muted-foreground text-xs">
235
+ Store this if your CRM verifies HMAC signatures. You cannot retrieve it again after
236
+ closing this panel.
237
+ </p>
238
+ <pre className="border-border bg-background overflow-x-auto rounded border px-2 py-1.5 font-mono text-xs">
239
+ {createdSecret}
240
+ </pre>
241
+ <button type="button" className={btnSecondary} onClick={() => setCreatedSecret(null)}>
242
+ Dismiss
243
+ </button>
244
+ </div>
245
+ )}
246
+
247
+ {webhooks.length === 0 ? (
248
+ <p className="text-muted-foreground text-sm">
249
+ No webhooks yet. Add a Catch Hook URL to send each submission to your CRM.
250
+ </p>
251
+ ) : (
252
+ <ul className="space-y-3" aria-label="Configured webhooks">
253
+ {webhooks.map((webhook) => (
254
+ <li
255
+ key={webhook.id}
256
+ className="border-border flex flex-col gap-3 rounded-lg border p-3 sm:flex-row sm:items-center sm:justify-between"
257
+ >
258
+ <div className="min-w-0">
259
+ <p className="text-foreground truncate font-mono text-xs">{webhook.url}</p>
260
+ <p className="text-muted-foreground mt-1 text-xs">
261
+ Events: {webhook.events.join(', ') || 'form.submitted'}
262
+ {webhook.lastDeliveryAt
263
+ ? ` · Last delivery: ${webhook.lastDeliveryStatus ?? 'unknown'}`
264
+ : ''}
265
+ </p>
266
+ </div>
267
+ <div className="flex shrink-0 flex-wrap items-center gap-2">
268
+ <Switch.Root
269
+ checked={webhook.enabled}
270
+ onCheckedChange={(v) => void toggleEnabled(webhook, v)}
271
+ aria-label={`Enable webhook ${webhook.url}`}
272
+ className="bg-destructive data-[state=checked]:bg-success focus-visible:ring-ring relative h-[18px] w-8 rounded-full transition-colors focus-visible:ring-2 focus-visible:outline-none"
273
+ >
274
+ <Switch.Thumb className="bg-background block h-3.5 w-3.5 translate-x-0.5 rounded-full shadow-sm transition-transform data-[state=checked]:translate-x-[14px]" />
275
+ </Switch.Root>
276
+ <button
277
+ type="button"
278
+ className={btnSecondary}
279
+ disabled={testingId === webhook.id}
280
+ onClick={() => void handleTest(webhook.id)}
281
+ >
282
+ {testingId === webhook.id ? 'Testing…' : 'Send test'}
283
+ </button>
284
+ <button
285
+ type="button"
286
+ className="text-destructive hover:bg-destructive/10 focus-visible:ring-ring inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-sm font-medium focus-visible:ring-2 focus-visible:outline-none"
287
+ aria-label="Remove webhook"
288
+ onClick={() => setPendingDelete(webhook)}
289
+ >
290
+ <Trash2 size={16} aria-hidden />
291
+ Remove
292
+ </button>
293
+ </div>
294
+ </li>
295
+ ))}
296
+ </ul>
297
+ )}
298
+
299
+ <ConfirmDialog
300
+ open={!!pendingDelete}
301
+ onClose={() => setPendingDelete(null)}
302
+ onConfirm={() => void confirmDelete()}
303
+ title="Remove webhook?"
304
+ description="New submissions will no longer be sent to this URL. Existing Zapier Zaps are not deleted — disable them in Zapier if needed."
305
+ confirmLabel="Remove"
306
+ cancelLabel="Keep webhook"
307
+ destructive
308
+ />
309
+ </div>
310
+ )
311
+ }
@@ -17,6 +17,8 @@ import type {
17
17
  FormField,
18
18
  FormNotificationSettings,
19
19
  FormEmbedSettings,
20
+ FormWebhookConfig,
21
+ FormWebhookEvent,
20
22
  FormStatus,
21
23
  FormStats,
22
24
  FormsSidebarCount,
@@ -35,6 +37,8 @@ export type {
35
37
  FieldValidationRules,
36
38
  FormNotificationSettings,
37
39
  FormEmbedSettings,
40
+ FormWebhookConfig,
41
+ FormWebhookEvent,
38
42
  FormStatus,
39
43
  FormStats,
40
44
  FormsSidebarCount,
@@ -251,6 +255,83 @@ export async function updateEmbedSettings(
251
255
  return { data: res.data, error: res.error }
252
256
  }
253
257
 
258
+ // ─── Webhooks (CRM / Zapier) ───────────────────────────────────────────────
259
+
260
+ export interface WebhookTestResult {
261
+ ok: boolean
262
+ status: number
263
+ attempts: number
264
+ error?: string
265
+ }
266
+
267
+ export interface CreateFormWebhookPayload {
268
+ url: string
269
+ events?: FormWebhookEvent[]
270
+ enabled?: boolean
271
+ retryCount?: number
272
+ }
273
+
274
+ export interface UpdateFormWebhookPayload {
275
+ url?: string
276
+ events?: FormWebhookEvent[]
277
+ enabled?: boolean
278
+ retryCount?: number
279
+ }
280
+
281
+ /** Plaintext secret is returned only on create — store it before closing the dialog. */
282
+ export type CreatedFormWebhook = FormWebhookConfig & { secret: string }
283
+
284
+ export async function fetchFormWebhooks(formId: string): Promise<FormWebhookConfig[]> {
285
+ const res = await cmsApi<FormWebhookConfig[]>(`/forms/${encodeURIComponent(formId)}/webhooks`)
286
+ throwIfError(res)
287
+ return res.data ?? []
288
+ }
289
+
290
+ export async function createFormWebhook(
291
+ formId: string,
292
+ payload: CreateFormWebhookPayload,
293
+ ): Promise<{ data?: CreatedFormWebhook; error?: string }> {
294
+ const res = await cmsApi<CreatedFormWebhook>(`/forms/${encodeURIComponent(formId)}/webhooks`, {
295
+ method: 'POST',
296
+ body: JSON.stringify(payload),
297
+ })
298
+ return { data: res.data, error: res.error }
299
+ }
300
+
301
+ export async function updateFormWebhook(
302
+ formId: string,
303
+ webhookId: string,
304
+ payload: UpdateFormWebhookPayload,
305
+ ): Promise<{ data?: FormWebhookConfig; error?: string }> {
306
+ const res = await cmsApi<FormWebhookConfig>(
307
+ `/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}`,
308
+ { method: 'PATCH', body: JSON.stringify(payload) },
309
+ )
310
+ return { data: res.data, error: res.error }
311
+ }
312
+
313
+ export async function deleteFormWebhook(
314
+ formId: string,
315
+ webhookId: string,
316
+ ): Promise<{ error?: string }> {
317
+ const res = await cmsApi(
318
+ `/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}`,
319
+ { method: 'DELETE' },
320
+ )
321
+ return { error: res.error }
322
+ }
323
+
324
+ export async function testFormWebhook(
325
+ formId: string,
326
+ webhookId: string,
327
+ ): Promise<{ data?: WebhookTestResult; error?: string }> {
328
+ const res = await cmsApi<WebhookTestResult>(
329
+ `/forms/${encodeURIComponent(formId)}/webhooks/${encodeURIComponent(webhookId)}/test`,
330
+ { method: 'POST' },
331
+ )
332
+ return { data: res.data, error: res.error }
333
+ }
334
+
254
335
  // ─── Entries (submissions) ─────────────────────────────────────────────────
255
336
 
256
337
  /** A page of submissions as returned by `GET /forms/entries`. */