@actuate-media/cms-core 0.59.1 → 0.62.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.
Files changed (83) hide show
  1. package/CHANGELOG.md +1731 -0
  2. package/README.md +33 -0
  3. package/dist/__tests__/api/email-settings-routes.test.d.ts +2 -0
  4. package/dist/__tests__/api/email-settings-routes.test.d.ts.map +1 -0
  5. package/dist/__tests__/api/email-settings-routes.test.js +240 -0
  6. package/dist/__tests__/api/email-settings-routes.test.js.map +1 -0
  7. package/dist/__tests__/api/page-sections-routes.test.js +103 -0
  8. package/dist/__tests__/api/page-sections-routes.test.js.map +1 -1
  9. package/dist/__tests__/api/route-contracts.test.js +3 -0
  10. package/dist/__tests__/api/route-contracts.test.js.map +1 -1
  11. package/dist/__tests__/collections/presets.test.js +19 -0
  12. package/dist/__tests__/collections/presets.test.js.map +1 -1
  13. package/dist/__tests__/email/resolve.test.d.ts +2 -0
  14. package/dist/__tests__/email/resolve.test.d.ts.map +1 -0
  15. package/dist/__tests__/email/resolve.test.js +90 -0
  16. package/dist/__tests__/email/resolve.test.js.map +1 -0
  17. package/dist/__tests__/email/settings-store.test.d.ts +2 -0
  18. package/dist/__tests__/email/settings-store.test.d.ts.map +1 -0
  19. package/dist/__tests__/email/settings-store.test.js +149 -0
  20. package/dist/__tests__/email/settings-store.test.js.map +1 -0
  21. package/dist/__tests__/forms/client-validation.test.d.ts +2 -0
  22. package/dist/__tests__/forms/client-validation.test.d.ts.map +1 -0
  23. package/dist/__tests__/forms/client-validation.test.js +98 -0
  24. package/dist/__tests__/forms/client-validation.test.js.map +1 -0
  25. package/dist/api/handlers.d.ts.map +1 -1
  26. package/dist/api/handlers.js +2 -0
  27. package/dist/api/handlers.js.map +1 -1
  28. package/dist/api/route-helpers.d.ts +6 -0
  29. package/dist/api/route-helpers.d.ts.map +1 -1
  30. package/dist/api/route-helpers.js +13 -0
  31. package/dist/api/route-helpers.js.map +1 -1
  32. package/dist/api/routes/email-settings.d.ts +3 -0
  33. package/dist/api/routes/email-settings.d.ts.map +1 -0
  34. package/dist/api/routes/email-settings.js +248 -0
  35. package/dist/api/routes/email-settings.js.map +1 -0
  36. package/dist/api/routes/meta.d.ts.map +1 -1
  37. package/dist/api/routes/meta.js +1 -0
  38. package/dist/api/routes/meta.js.map +1 -1
  39. package/dist/api/routes/sections.d.ts.map +1 -1
  40. package/dist/api/routes/sections.js +15 -4
  41. package/dist/api/routes/sections.js.map +1 -1
  42. package/dist/api/routes/users.js +3 -3
  43. package/dist/api/routes/users.js.map +1 -1
  44. package/dist/auth/invites.js +2 -2
  45. package/dist/auth/invites.js.map +1 -1
  46. package/dist/auth/reset.js +2 -2
  47. package/dist/auth/reset.js.map +1 -1
  48. package/dist/collections/presets.d.ts +10 -1
  49. package/dist/collections/presets.d.ts.map +1 -1
  50. package/dist/collections/presets.js +26 -5
  51. package/dist/collections/presets.js.map +1 -1
  52. package/dist/config/types.d.ts +8 -0
  53. package/dist/config/types.d.ts.map +1 -1
  54. package/dist/email/resolve.d.ts +27 -0
  55. package/dist/email/resolve.d.ts.map +1 -0
  56. package/dist/email/resolve.js +68 -0
  57. package/dist/email/resolve.js.map +1 -0
  58. package/dist/email/sender.d.ts +36 -0
  59. package/dist/email/sender.d.ts.map +1 -1
  60. package/dist/email/sender.js +16 -0
  61. package/dist/email/sender.js.map +1 -1
  62. package/dist/email/settings-store.d.ts +116 -0
  63. package/dist/email/settings-store.d.ts.map +1 -0
  64. package/dist/email/settings-store.js +222 -0
  65. package/dist/email/settings-store.js.map +1 -0
  66. package/dist/forms/client-validation.d.ts +50 -0
  67. package/dist/forms/client-validation.d.ts.map +1 -0
  68. package/dist/forms/client-validation.js +215 -0
  69. package/dist/forms/client-validation.js.map +1 -0
  70. package/dist/forms/index.d.ts +1 -0
  71. package/dist/forms/index.d.ts.map +1 -1
  72. package/dist/forms/index.js +3 -0
  73. package/dist/forms/index.js.map +1 -1
  74. package/dist/forms/notify.js +3 -3
  75. package/dist/forms/notify.js.map +1 -1
  76. package/dist/forms/validation.d.ts.map +1 -1
  77. package/dist/forms/validation.js +14 -83
  78. package/dist/forms/validation.js.map +1 -1
  79. package/dist/index.d.ts +5 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +3 -1
  82. package/dist/index.js.map +1 -1
  83. package/package.json +9 -3
@@ -0,0 +1,222 @@
1
+ /**
2
+ * DB-backed email delivery configuration store (Settings > Email).
3
+ *
4
+ * Storage: a single Document row with `collection = '__email_config__'`,
5
+ * mirroring the AI config-store pattern (`src/ai/config-store.ts`) so no
6
+ * Prisma migration is required.
7
+ *
8
+ * Security invariants:
9
+ * - API keys and SMTP passwords are encrypted at rest via `encryptSecret`.
10
+ * - Encrypted values are NEVER returned to the client; handlers serialize
11
+ * through {@link toPublicEmailConfig} (masked last-4 + has-flags only).
12
+ * - Sending with these settings requires the provider factory registered by
13
+ * `@actuate-media/plugin-email` (dependency direction stays plugin → core).
14
+ */
15
+ import { decryptSecret, encryptSecret } from '../security/secret-storage.js';
16
+ export const EMAIL_CONFIG_COLLECTION = '__email_config__';
17
+ export const EMAIL_PROVIDER_KEYS = ['resend', 'smtpcom', 'ses', 'smtp'];
18
+ export function isEmailProviderKey(value) {
19
+ return typeof value === 'string' && EMAIL_PROVIDER_KEYS.includes(value);
20
+ }
21
+ export const EMAIL_PROVIDER_LABELS = {
22
+ resend: 'Resend',
23
+ smtpcom: 'SMTP.com',
24
+ ses: 'Amazon SES',
25
+ smtp: 'SMTP server',
26
+ };
27
+ const EMPTY = { provider: null };
28
+ /** Last 4 chars of a secret for masked display (never the full value). */
29
+ export function emailKeyLast4(key) {
30
+ if (!key)
31
+ return undefined;
32
+ const trimmed = key.trim();
33
+ return trimmed.length >= 4 ? trimmed.slice(-4) : trimmed;
34
+ }
35
+ /** Read the email config document; `{ provider: null }` when none exists. */
36
+ export async function getEmailConfig(db) {
37
+ const d = db;
38
+ if (!d?.document?.findFirst)
39
+ return { ...EMPTY };
40
+ try {
41
+ const doc = await d.document.findFirst({
42
+ where: { collection: EMAIL_CONFIG_COLLECTION, deletedAt: null },
43
+ select: { data: true },
44
+ });
45
+ if (!doc?.data || typeof doc.data !== 'object')
46
+ return { ...EMPTY };
47
+ const data = doc.data;
48
+ return {
49
+ ...data,
50
+ provider: isEmailProviderKey(data.provider) ? data.provider : null,
51
+ };
52
+ }
53
+ catch {
54
+ return { ...EMPTY };
55
+ }
56
+ }
57
+ /**
58
+ * Upsert the email config document. Caller is responsible for auth/role
59
+ * checks. Stamps `updatedAt`/`updatedBy`.
60
+ */
61
+ export async function putEmailConfig(db, next, userId) {
62
+ const d = db;
63
+ const data = {
64
+ ...next,
65
+ updatedAt: new Date().toISOString(),
66
+ updatedBy: userId,
67
+ };
68
+ const existing = await d.document.findFirst({
69
+ where: { collection: EMAIL_CONFIG_COLLECTION, deletedAt: null },
70
+ select: { id: true },
71
+ });
72
+ if (existing) {
73
+ await d.document.update({ where: { id: existing.id }, data: { data, updatedById: userId } });
74
+ }
75
+ else {
76
+ await d.document.create({
77
+ data: {
78
+ collection: EMAIL_CONFIG_COLLECTION,
79
+ data,
80
+ status: 'PUBLISHED',
81
+ title: 'Email settings',
82
+ slug: 'email-config',
83
+ createdById: userId,
84
+ updatedById: userId,
85
+ },
86
+ });
87
+ }
88
+ return data;
89
+ }
90
+ /** Strip secret material for client serialization. */
91
+ export function toPublicEmailConfig(doc) {
92
+ const { apiKeyEncrypted: _key, smtpPassEncrypted: _pass, ...rest } = doc;
93
+ return {
94
+ ...rest,
95
+ hasApiKey: Boolean(doc.apiKeyEncrypted),
96
+ hasSmtpPass: Boolean(doc.smtpPassEncrypted),
97
+ };
98
+ }
99
+ /**
100
+ * Decrypt the stored config into the plain settings consumed by the provider
101
+ * factory. Returns `null` when no provider is configured or when a required
102
+ * secret cannot be decrypted (wrong/missing `CMS_ENCRYPTION_KEY`) — callers
103
+ * fall back to the env-configured sender rather than sending with bad creds.
104
+ */
105
+ export async function resolveEmailProviderSettings(doc) {
106
+ if (!doc.provider)
107
+ return null;
108
+ const from = doc.from?.trim();
109
+ if (!from)
110
+ return null;
111
+ try {
112
+ switch (doc.provider) {
113
+ case 'resend':
114
+ case 'smtpcom': {
115
+ if (!doc.apiKeyEncrypted)
116
+ return null;
117
+ const apiKey = await decryptSecret(doc.apiKeyEncrypted);
118
+ if (!apiKey)
119
+ return null;
120
+ return {
121
+ provider: doc.provider,
122
+ from,
123
+ apiKey,
124
+ ...(doc.provider === 'smtpcom' && doc.channel ? { channel: doc.channel } : {}),
125
+ };
126
+ }
127
+ case 'ses': {
128
+ if (!doc.region)
129
+ return null;
130
+ return { provider: 'ses', from, region: doc.region };
131
+ }
132
+ case 'smtp': {
133
+ if (!doc.host)
134
+ return null;
135
+ const pass = doc.smtpPassEncrypted ? await decryptSecret(doc.smtpPassEncrypted) : undefined;
136
+ return {
137
+ provider: 'smtp',
138
+ from,
139
+ host: doc.host,
140
+ port: doc.port,
141
+ secure: doc.secure,
142
+ auth: doc.smtpUser ? { user: doc.smtpUser, pass: pass ?? '' } : undefined,
143
+ };
144
+ }
145
+ }
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ /** Encrypt a plaintext secret for storage with its masked suffix. */
152
+ export async function encryptEmailSecret(plaintext) {
153
+ return { encrypted: await encryptSecret(plaintext), last4: emailKeyLast4(plaintext) ?? '' };
154
+ }
155
+ /**
156
+ * Which provider (if any) the environment variables currently configure.
157
+ * Mirrors `resolveEmailConfigFromEnv()` in `@actuate-media/plugin-email` so
158
+ * the Settings UI can tell admins what env-based config exists alongside the
159
+ * DB settings.
160
+ */
161
+ export function detectEnvEmailProvider(env = process.env) {
162
+ const explicit = env.EMAIL_PROVIDER;
163
+ if (isEmailProviderKey(explicit))
164
+ return explicit;
165
+ if (env.SMTP_HOST)
166
+ return 'smtp';
167
+ if (env.SMTPCOM_API_KEY ?? env.SMTP_KEY)
168
+ return 'smtpcom';
169
+ if (env.RESEND_API_KEY)
170
+ return 'resend';
171
+ return null;
172
+ }
173
+ const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
174
+ const REGION_RE = /^[a-z]{2}(-[a-z]+)+-\d$/;
175
+ // Hostname only — no scheme, path, port suffix, or whitespace.
176
+ const HOST_RE = /^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+$/;
177
+ /**
178
+ * Validate a PUT payload against the selected provider's requirements.
179
+ * `hasStoredApiKey`/`hasStoredSmtpPass` let an update keep an existing secret
180
+ * without re-entering it (apiKey omitted = keep, null/'' = clear).
181
+ */
182
+ export function validateEmailSettingsInput(input, stored) {
183
+ if (input.provider === null)
184
+ return null; // clearing the config is always valid
185
+ if (!isEmailProviderKey(input.provider)) {
186
+ return 'A valid `provider` is required (resend, smtpcom, ses, smtp) or null to disable.';
187
+ }
188
+ const from = typeof input.from === 'string' ? input.from.trim() : '';
189
+ if (!from || !EMAIL_RE.test(from)) {
190
+ return 'A valid sender address (`from`) is required, e.g. noreply@yoursite.com.';
191
+ }
192
+ const newKey = typeof input.apiKey === 'string' ? input.apiKey.trim() : '';
193
+ const keepsKey = input.apiKey === undefined && stored.hasApiKey;
194
+ switch (input.provider) {
195
+ case 'resend':
196
+ case 'smtpcom':
197
+ if (!newKey && !keepsKey)
198
+ return 'An API key is required for this provider.';
199
+ return null;
200
+ case 'ses': {
201
+ const region = typeof input.region === 'string' ? input.region.trim() : '';
202
+ if (!region || !REGION_RE.test(region)) {
203
+ return 'A valid AWS region is required, e.g. us-east-1.';
204
+ }
205
+ return null;
206
+ }
207
+ case 'smtp': {
208
+ const host = typeof input.host === 'string' ? input.host.trim() : '';
209
+ if (!host || !HOST_RE.test(host)) {
210
+ return 'A valid SMTP hostname is required, e.g. smtp.example.com.';
211
+ }
212
+ if (input.port !== undefined && input.port !== null) {
213
+ const port = Number(input.port);
214
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
215
+ return 'SMTP port must be an integer between 1 and 65535.';
216
+ }
217
+ }
218
+ return null;
219
+ }
220
+ }
221
+ }
222
+ //# sourceMappingURL=settings-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/email/settings-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Client-safe form validation — zero Node dependencies, tree-shakeable.
3
+ *
4
+ * Published as `@actuate-media/cms-core/forms/client` so public-site form
5
+ * components can mirror the server's rules (same regexes, same caps, same
6
+ * conditional-visibility semantics) for instant inline feedback.
7
+ *
8
+ * This is convenience only: the server re-validates every submission via
9
+ * `validateAndNormalizeSubmission()` (which also imports these primitives, so
10
+ * the two can never drift). The one intentional difference is sanitization —
11
+ * the client validates the raw value; the server strips HTML before storing.
12
+ */
13
+ import type { FormField } from './types.js';
14
+ export declare const FORM_MAX_TEXT_LEN = 5000;
15
+ export declare const FORM_MAX_TEXTAREA_LEN = 50000;
16
+ export declare const FORM_MAX_MULTISELECT_ITEMS = 200;
17
+ /** The exact email format the server accepts for `email`-format fields. */
18
+ export declare const FORM_EMAIL_RE: RegExp;
19
+ /** The exact phone format the server accepts for `phone`-format fields. */
20
+ export declare const FORM_PHONE_RE: RegExp;
21
+ /** Field types that never carry a submitted value. */
22
+ export declare const FORM_NON_INPUT_TYPES: ReadonlySet<string>;
23
+ export declare function asString(value: unknown): string;
24
+ export declare function coerceBoolean(value: unknown): boolean;
25
+ /** A field is visible unless its `show` rules exist and not all of them pass. */
26
+ export declare function isFieldVisible(field: FormField, values: Record<string, unknown>): boolean;
27
+ /** A field is conditionally required when its `require` rules all pass. */
28
+ export declare function isFieldConditionallyRequired(field: FormField, values: Record<string, unknown>): boolean;
29
+ export declare function isValuePresent(raw: unknown): boolean;
30
+ export declare function isHttpUrl(value: string): boolean;
31
+ export interface ClientFieldValidation {
32
+ ok: boolean;
33
+ /** Human-readable message for the first failed rule, when `ok` is false. */
34
+ message?: string;
35
+ }
36
+ /**
37
+ * Validate a single field's value with the same rules the server applies.
38
+ *
39
+ * Pass `allValues` (the full form state) so conditional visibility/required
40
+ * logic evaluates correctly; a hidden field always validates as ok, matching
41
+ * the server (hidden fields are skipped, not required, not stored).
42
+ */
43
+ export declare function validateFormFieldClient(field: FormField, value: unknown, allValues?: Record<string, unknown>): ClientFieldValidation;
44
+ /**
45
+ * Validate the whole form client-side. Returns the first error per field,
46
+ * keyed by field key. An empty object means the form would pass the server's
47
+ * field validation (spam/honeypot/file checks still run server-side).
48
+ */
49
+ export declare function validateFormValuesClient(fields: FormField[], values: Record<string, unknown>): Record<string, string>;
50
+ //# sourceMappingURL=client-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-validation.d.ts","sourceRoot":"","sources":["../../src/forms/client-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAA;AAI5D,eAAO,MAAM,iBAAiB,OAAQ,CAAA;AACtC,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAC3C,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAE7C,2EAA2E;AAC3E,eAAO,MAAM,aAAa,QAA+B,CAAA;AACzD,2EAA2E;AAC3E,eAAO,MAAM,aAAa,QAA4B,CAAA;AAEtD,sDAAsD;AACtD,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAInD,CAAA;AAIF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrD;AAqBD,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAIzF;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAIT;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOhD;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAA;IACX,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,OAAO,EACd,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACtC,qBAAqB,CAwHvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB"}
@@ -0,0 +1,215 @@
1
+ // Conservative hard caps so a single field can't be used to balloon the row /
2
+ // exhaust memory even when the schema omits explicit length rules.
3
+ export const FORM_MAX_TEXT_LEN = 5_000;
4
+ export const FORM_MAX_TEXTAREA_LEN = 50_000;
5
+ export const FORM_MAX_MULTISELECT_ITEMS = 200;
6
+ /** The exact email format the server accepts for `email`-format fields. */
7
+ export const FORM_EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
8
+ /** The exact phone format the server accepts for `phone`-format fields. */
9
+ export const FORM_PHONE_RE = /^[+]?[0-9\s().-]{6,20}$/;
10
+ /** Field types that never carry a submitted value. */
11
+ export const FORM_NON_INPUT_TYPES = new Set([
12
+ 'richtext',
13
+ 'divider',
14
+ 'honeypot',
15
+ ]);
16
+ const TRUTHY = new Set(['true', 'on', '1', 'yes', 'checked']);
17
+ export function asString(value) {
18
+ if (value == null)
19
+ return '';
20
+ if (typeof value === 'string')
21
+ return value;
22
+ if (typeof value === 'number' || typeof value === 'boolean')
23
+ return String(value);
24
+ return '';
25
+ }
26
+ export function coerceBoolean(value) {
27
+ if (typeof value === 'boolean')
28
+ return value;
29
+ if (typeof value === 'number')
30
+ return value === 1;
31
+ return TRUTHY.has(asString(value).trim().toLowerCase());
32
+ }
33
+ function evalRule(rule, values) {
34
+ const current = asString(values[rule.fieldKey]).toLowerCase().trim();
35
+ const target = asString(rule.value).toLowerCase().trim();
36
+ switch (rule.operator) {
37
+ case 'equals':
38
+ return current === target;
39
+ case 'notEquals':
40
+ return current !== target;
41
+ case 'contains':
42
+ return current.includes(target);
43
+ case 'isEmpty':
44
+ return current === '';
45
+ case 'isNotEmpty':
46
+ return current !== '';
47
+ default:
48
+ return true;
49
+ }
50
+ }
51
+ /** A field is visible unless its `show` rules exist and not all of them pass. */
52
+ export function isFieldVisible(field, values) {
53
+ const show = field.conditionalLogic?.show;
54
+ if (!show || show.length === 0)
55
+ return true;
56
+ return show.every((rule) => evalRule(rule, values));
57
+ }
58
+ /** A field is conditionally required when its `require` rules all pass. */
59
+ export function isFieldConditionallyRequired(field, values) {
60
+ const require = field.conditionalLogic?.require;
61
+ if (!require || require.length === 0)
62
+ return false;
63
+ return require.every((rule) => evalRule(rule, values));
64
+ }
65
+ export function isValuePresent(raw) {
66
+ if (raw === undefined || raw === null)
67
+ return false;
68
+ if (typeof raw === 'string')
69
+ return raw.trim() !== '';
70
+ if (Array.isArray(raw))
71
+ return raw.length > 0;
72
+ return true;
73
+ }
74
+ export function isHttpUrl(value) {
75
+ try {
76
+ const url = new URL(value);
77
+ return url.protocol === 'http:' || url.protocol === 'https:';
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ /**
84
+ * Validate a single field's value with the same rules the server applies.
85
+ *
86
+ * Pass `allValues` (the full form state) so conditional visibility/required
87
+ * logic evaluates correctly; a hidden field always validates as ok, matching
88
+ * the server (hidden fields are skipped, not required, not stored).
89
+ */
90
+ export function validateFormFieldClient(field, value, allValues = {}) {
91
+ if (FORM_NON_INPUT_TYPES.has(field.type))
92
+ return { ok: true };
93
+ if (!isFieldVisible(field, allValues))
94
+ return { ok: true };
95
+ const label = field.label || field.key;
96
+ const rules = field.validationRules ?? {};
97
+ const required = Boolean(field.required) ||
98
+ Boolean(rules.required) ||
99
+ isFieldConditionallyRequired(field, allValues);
100
+ const fail = (message) => ({ ok: false, message });
101
+ if (field.type === 'file') {
102
+ // The client knows file presence from its own input state; only the
103
+ // required check is expressible here.
104
+ if (required && !isValuePresent(value))
105
+ return fail(`${label} is required.`);
106
+ return { ok: true };
107
+ }
108
+ if (!isValuePresent(value)) {
109
+ return required ? fail(`${label} is required.`) : { ok: true };
110
+ }
111
+ switch (field.type) {
112
+ case 'checkbox':
113
+ case 'consent': {
114
+ const bool = coerceBoolean(value);
115
+ if ((field.type === 'consent' || required) && !bool) {
116
+ return fail(`${label} must be accepted.`);
117
+ }
118
+ return { ok: true };
119
+ }
120
+ case 'number': {
121
+ const num = typeof value === 'number' ? value : Number(asString(value).trim());
122
+ if (!Number.isFinite(num))
123
+ return fail(`${label} must be a number.`);
124
+ if (rules.min != null && num < rules.min) {
125
+ return fail(`${label} must be at least ${rules.min}.`);
126
+ }
127
+ if (rules.max != null && num > rules.max) {
128
+ return fail(`${label} must be at most ${rules.max}.`);
129
+ }
130
+ return { ok: true };
131
+ }
132
+ case 'multiselect': {
133
+ const list = Array.isArray(value) ? value : [value];
134
+ if (list.length > FORM_MAX_MULTISELECT_ITEMS) {
135
+ return fail(`${label} has too many selections.`);
136
+ }
137
+ const cleaned = list.map((v) => asString(v).trim()).filter((v) => v !== '');
138
+ const allowed = new Set((field.options ?? []).map((o) => o.value));
139
+ if (allowed.size > 0 && cleaned.some((v) => !allowed.has(v))) {
140
+ return fail(`${label} contains an invalid selection.`);
141
+ }
142
+ return { ok: true };
143
+ }
144
+ case 'select':
145
+ case 'radio': {
146
+ const val = asString(value).trim();
147
+ const allowed = new Set((field.options ?? []).map((o) => o.value));
148
+ if (allowed.size > 0 && !allowed.has(val)) {
149
+ return fail(`${label} contains an invalid selection.`);
150
+ }
151
+ return { ok: true };
152
+ }
153
+ case 'date': {
154
+ const d = new Date(asString(value).trim());
155
+ if (Number.isNaN(d.getTime()))
156
+ return fail(`${label} is not a valid date.`);
157
+ return { ok: true };
158
+ }
159
+ default: {
160
+ // text, email, phone, url, textarea, hidden
161
+ const s = asString(value).trim();
162
+ const maxLen = rules.maxLength ?? (field.type === 'textarea' ? FORM_MAX_TEXTAREA_LEN : FORM_MAX_TEXT_LEN);
163
+ if (s.length > maxLen) {
164
+ return fail(`${label} must be at most ${maxLen} characters.`);
165
+ }
166
+ if (rules.minLength != null && s.length < rules.minLength) {
167
+ return fail(`${label} must be at least ${rules.minLength} characters.`);
168
+ }
169
+ const format = rules.format ??
170
+ (field.type === 'email'
171
+ ? 'email'
172
+ : field.type === 'url'
173
+ ? 'url'
174
+ : field.type === 'phone'
175
+ ? 'phone'
176
+ : undefined);
177
+ if (format === 'email' && !FORM_EMAIL_RE.test(s)) {
178
+ return fail(`${label} must be a valid email address.`);
179
+ }
180
+ if (format === 'phone' && !FORM_PHONE_RE.test(s)) {
181
+ return fail(`${label} must be a valid phone number.`);
182
+ }
183
+ if (format === 'url' && !isHttpUrl(s)) {
184
+ return fail(`${label} must be a valid URL.`);
185
+ }
186
+ if (rules.pattern) {
187
+ try {
188
+ if (!new RegExp(rules.pattern).test(s)) {
189
+ return fail(`${label} is not in the expected format.`);
190
+ }
191
+ }
192
+ catch {
193
+ // An invalid pattern in the schema must never block input; schema
194
+ // validation already surfaces bad patterns to the editor.
195
+ }
196
+ }
197
+ return { ok: true };
198
+ }
199
+ }
200
+ }
201
+ /**
202
+ * Validate the whole form client-side. Returns the first error per field,
203
+ * keyed by field key. An empty object means the form would pass the server's
204
+ * field validation (spam/honeypot/file checks still run server-side).
205
+ */
206
+ export function validateFormValuesClient(fields, values) {
207
+ const errors = {};
208
+ for (const field of fields) {
209
+ const result = validateFormFieldClient(field, values[field.key], values);
210
+ if (!result.ok && result.message)
211
+ errors[field.key] = result.message;
212
+ }
213
+ return errors;
214
+ }
215
+ //# sourceMappingURL=client-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-validation.js","sourceRoot":"","sources":["../../src/forms/client-validation.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export type { FormFieldType, PiiClassification, FormFieldOption, FieldValidation
7
7
  export * from './service.js';
8
8
  export * from './entries.js';
9
9
  export { validateAndNormalizeSubmission, type FieldError, type SubmissionValidationResult, } from './validation.js';
10
+ export { validateFormFieldClient, validateFormValuesClient, isFieldVisible, isFieldConditionallyRequired, FORM_EMAIL_RE, FORM_PHONE_RE, FORM_MAX_TEXT_LEN, FORM_MAX_TEXTAREA_LEN, FORM_MAX_MULTISELECT_ITEMS, type ClientFieldValidation, } from './client-validation.js';
10
11
  export { scoreSubmissionSpam, type SpamScoreInput, type SpamScoreResult } from './spam.js';
11
12
  export { validateSubmissionFiles, persistSubmissionFiles, FORM_UPLOAD_ALLOWED_MIME_TYPES, DEFAULT_MAX_FILE_BYTES, type IncomingFile, type ValidateFilesResult, } from './files.js';
12
13
  export { processSubmission, buildPublicForm, runSubmissionSideEffects, SubmissionValidationError, type SubmissionContext, type SubmissionResult, type SubmissionConfirmation, type SubmissionSideEffectInput, type PublicForm, type PublicFormField, } from './submission.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE3E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACrE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,YAAY,CAAA;AAEnB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,8BAA8B,EAC9B,KAAK,UAAU,EACf,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAElG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE3E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACrE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,YAAY,CAAA;AAEnB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,8BAA8B,EAC9B,KAAK,UAAU,EACf,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,4BAA4B,EAC5B,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAElG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA"}
@@ -4,6 +4,9 @@ export { INPUT_FIELD_TYPES, NON_INPUT_FIELD_TYPES } from './types.js';
4
4
  export * from './service.js';
5
5
  export * from './entries.js';
6
6
  export { validateAndNormalizeSubmission, } from './validation.js';
7
+ // Client-safe rule primitives — also published standalone (no Node deps) at
8
+ // `@actuate-media/cms-core/forms/client` for public-site form components.
9
+ export { validateFormFieldClient, validateFormValuesClient, isFieldVisible, isFieldConditionallyRequired, FORM_EMAIL_RE, FORM_PHONE_RE, FORM_MAX_TEXT_LEN, FORM_MAX_TEXTAREA_LEN, FORM_MAX_MULTISELECT_ITEMS, } from './client-validation.js';
7
10
  export { scoreSubmissionSpam } from './spam.js';
8
11
  export { validateSubmissionFiles, persistSubmissionFiles, FORM_UPLOAD_ALLOWED_MIME_TYPES, DEFAULT_MAX_FILE_BYTES, } from './files.js';
9
12
  export { processSubmission, buildPublicForm, runSubmissionSideEffects, SubmissionValidationError, } from './submission.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AA8BrE,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,8BAA8B,GAG/B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,GAGvB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,GAO1B,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GAGxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAElG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GAKpB,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AA8BrE,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,8BAA8B,GAG/B,MAAM,iBAAiB,CAAA;AACxB,4EAA4E;AAC5E,0EAA0E;AAC1E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,4BAA4B,EAC5B,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,GAE3B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,GAGvB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,GAO1B,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GAGxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAElG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GAKpB,MAAM,eAAe,CAAA"}
@@ -12,7 +12,7 @@
12
12
  * before interpolation, so a value can never inject markup into the email.
13
13
  */
14
14
  import { getActuateConfig } from '../config/runtime.js';
15
- import { resolveEmailSender } from '../email/sender.js';
15
+ import { resolveEmailSenderAsync } from '../email/resolve.js';
16
16
  import { createLogger } from '../diagnostics/logger.js';
17
17
  const logger = createLogger('forms-notify');
18
18
  const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
@@ -135,7 +135,7 @@ export function buildAutoresponderEmail(settings, ctx) {
135
135
  return { subject, html, text: stripTags(body) };
136
136
  }
137
137
  async function sendEmail(options) {
138
- const email = resolveEmailSender();
138
+ const email = await resolveEmailSenderAsync();
139
139
  if (!email)
140
140
  return false;
141
141
  await email.send(options);
@@ -148,7 +148,7 @@ async function sendEmail(options) {
148
148
  */
149
149
  export async function sendFormNotifications(settings, ctx) {
150
150
  const result = { notified: 0, autoresponded: false };
151
- if (!resolveEmailSender()) {
151
+ if (!(await resolveEmailSenderAsync())) {
152
152
  return { ...result, skippedReason: 'no-email-adapter' };
153
153
  }
154
154
  if (!settings?.enabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/forms/notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/forms/notify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/forms/validation.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC/B;AAmED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EAAE,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,GAAE,eAAoB,GAC5B,0BAA0B,CAuJ5B"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/forms/validation.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC/B;AAQD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EAAE,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,GAAE,eAAoB,GAC5B,0BAA0B,CAuJ5B"}