@actuate-media/cms-core 0.31.0 → 0.32.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 (59) hide show
  1. package/dist/__tests__/api/public-forms.test.d.ts +2 -0
  2. package/dist/__tests__/api/public-forms.test.d.ts.map +1 -0
  3. package/dist/__tests__/api/public-forms.test.js +125 -0
  4. package/dist/__tests__/api/public-forms.test.js.map +1 -0
  5. package/dist/__tests__/forms/spam.test.d.ts +2 -0
  6. package/dist/__tests__/forms/spam.test.d.ts.map +1 -0
  7. package/dist/__tests__/forms/spam.test.js +115 -0
  8. package/dist/__tests__/forms/spam.test.js.map +1 -0
  9. package/dist/__tests__/forms/submission-files.test.d.ts +2 -0
  10. package/dist/__tests__/forms/submission-files.test.d.ts.map +1 -0
  11. package/dist/__tests__/forms/submission-files.test.js +65 -0
  12. package/dist/__tests__/forms/submission-files.test.js.map +1 -0
  13. package/dist/__tests__/forms/submission-pipeline.test.d.ts +2 -0
  14. package/dist/__tests__/forms/submission-pipeline.test.d.ts.map +1 -0
  15. package/dist/__tests__/forms/submission-pipeline.test.js +131 -0
  16. package/dist/__tests__/forms/submission-pipeline.test.js.map +1 -0
  17. package/dist/__tests__/forms/submission-validation.test.d.ts +2 -0
  18. package/dist/__tests__/forms/submission-validation.test.d.ts.map +1 -0
  19. package/dist/__tests__/forms/submission-validation.test.js +108 -0
  20. package/dist/__tests__/forms/submission-validation.test.js.map +1 -0
  21. package/dist/api/handler-factory.d.ts.map +1 -1
  22. package/dist/api/handler-factory.js +2 -2
  23. package/dist/api/handler-factory.js.map +1 -1
  24. package/dist/api/handlers.d.ts.map +1 -1
  25. package/dist/api/handlers.js +275 -56
  26. package/dist/api/handlers.js.map +1 -1
  27. package/dist/api/router.d.ts +2 -1
  28. package/dist/api/router.d.ts.map +1 -1
  29. package/dist/api/router.js +3 -0
  30. package/dist/api/router.js.map +1 -1
  31. package/dist/forms/files.d.ts +38 -0
  32. package/dist/forms/files.d.ts.map +1 -0
  33. package/dist/forms/files.js +134 -0
  34. package/dist/forms/files.js.map +1 -0
  35. package/dist/forms/index.d.ts +4 -0
  36. package/dist/forms/index.d.ts.map +1 -1
  37. package/dist/forms/index.js +4 -0
  38. package/dist/forms/index.js.map +1 -1
  39. package/dist/forms/spam.d.ts +33 -0
  40. package/dist/forms/spam.d.ts.map +1 -0
  41. package/dist/forms/spam.js +93 -0
  42. package/dist/forms/spam.js.map +1 -0
  43. package/dist/forms/submission.d.ts +95 -0
  44. package/dist/forms/submission.d.ts.map +1 -0
  45. package/dist/forms/submission.js +282 -0
  46. package/dist/forms/submission.js.map +1 -0
  47. package/dist/forms/validation.d.ts +19 -0
  48. package/dist/forms/validation.d.ts.map +1 -0
  49. package/dist/forms/validation.js +235 -0
  50. package/dist/forms/validation.js.map +1 -0
  51. package/dist/index.d.ts +2 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +1 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/security/client-ip.d.ts +11 -21
  56. package/dist/security/client-ip.d.ts.map +1 -1
  57. package/dist/security/client-ip.js +38 -0
  58. package/dist/security/client-ip.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Public submission pipeline.
3
+ *
4
+ * Orchestrates the full lifecycle for an incoming public submission:
5
+ * resolve schema → validate + normalize → sanitize → score spam →
6
+ * derive sender/preview → assign entry number (transaction) → persist →
7
+ * attach files → fire plugin hooks → audit log → build confirmation.
8
+ *
9
+ * The HTTP layer (`api/handlers.ts`) is responsible only for parsing the
10
+ * request (JSON or multipart), resolving the form, rate-limiting, CORS, and
11
+ * optional CAPTCHA verification. All trust decisions live here so the same
12
+ * pipeline backs every entry point (public slug route, legacy id route, and
13
+ * the future page-builder block).
14
+ */
15
+ import { getDB } from '../db.js';
16
+ import { logEvent } from '../security/audit.js';
17
+ import { hashClientIp } from '../security/client-ip.js';
18
+ import { getActuateConfig } from '../config/runtime.js';
19
+ import { getSchemaVersion } from './service.js';
20
+ import { validateAndNormalizeSubmission } from './validation.js';
21
+ import { scoreSubmissionSpam } from './spam.js';
22
+ import { persistSubmissionFiles } from './files.js';
23
+ /** Thrown when field validation fails; mapped to HTTP 422 by the API layer. */
24
+ export class SubmissionValidationError extends Error {
25
+ fieldErrors;
26
+ constructor(fieldErrors) {
27
+ super('Submission validation failed');
28
+ this.name = 'SubmissionValidationError';
29
+ this.fieldErrors = fieldErrors;
30
+ }
31
+ }
32
+ const DEFAULT_SUCCESS_MESSAGE = 'Thank you! Your submission has been received.';
33
+ function asString(value) {
34
+ if (typeof value === 'string')
35
+ return value;
36
+ if (typeof value === 'number' || typeof value === 'boolean')
37
+ return String(value);
38
+ return '';
39
+ }
40
+ /** Resolve the field schema the submission should be validated against. */
41
+ async function resolveFields(form) {
42
+ if (form.activeSchemaVersionId) {
43
+ const version = await getSchemaVersion(form.activeSchemaVersionId);
44
+ if (version && version.fields.length > 0) {
45
+ return { fields: version.fields, versionId: version.id };
46
+ }
47
+ }
48
+ return { fields: form.fields ?? [], versionId: form.activeSchemaVersionId ?? null };
49
+ }
50
+ function deriveSender(fields, data) {
51
+ let name = null;
52
+ let email = null;
53
+ let phone = null;
54
+ for (const field of fields) {
55
+ const v = asString(data[field.key]).trim();
56
+ if (!v)
57
+ continue;
58
+ if (!email && field.type === 'email')
59
+ email = v;
60
+ if (!phone && field.type === 'phone')
61
+ phone = v;
62
+ if (!name && /name/i.test(field.key))
63
+ name = v;
64
+ }
65
+ // Fallbacks by common key naming when the schema didn't use typed fields.
66
+ if (!email)
67
+ email = firstByKeys(data, ['email', 'emailaddress', 'email_address']);
68
+ if (!name)
69
+ name = firstByKeys(data, ['name', 'fullname', 'full_name', 'firstname', 'first_name']);
70
+ if (!phone)
71
+ phone = firstByKeys(data, ['phone', 'phonenumber', 'phone_number', 'tel']);
72
+ return { name, email, phone };
73
+ }
74
+ function firstByKeys(data, candidates) {
75
+ const lower = new Map(Object.entries(data).map(([k, v]) => [k.toLowerCase(), v]));
76
+ for (const c of candidates) {
77
+ const v = asString(lower.get(c)).trim();
78
+ if (v)
79
+ return v;
80
+ }
81
+ return null;
82
+ }
83
+ function derivePreview(fields, data) {
84
+ // Prefer long-form fields, then any non-empty string value.
85
+ for (const field of fields) {
86
+ if (field.type === 'textarea') {
87
+ const v = asString(data[field.key]).trim();
88
+ if (v)
89
+ return v.slice(0, 200);
90
+ }
91
+ }
92
+ const messageKeys = ['message', 'body', 'comments', 'notes', 'description'];
93
+ const byKey = firstByKeys(data, messageKeys);
94
+ if (byKey)
95
+ return byKey.slice(0, 200);
96
+ for (const v of Object.values(data)) {
97
+ const s = asString(v).trim();
98
+ if (s)
99
+ return s.slice(0, 200);
100
+ }
101
+ return null;
102
+ }
103
+ /** Site-wide default spam strategies; per-form strategies are merged in `scoreSubmissionSpam`. */
104
+ function defaultSpamStrategies() {
105
+ return (getActuateConfig()?.forms?.defaultSpamProtection ?? []);
106
+ }
107
+ async function assignAndCreate(db, row, formId) {
108
+ // Sequential per-form entry number assigned inside a transaction so two
109
+ // concurrent submissions don't read the same max. Not globally unique by DB
110
+ // constraint, but the transaction makes collisions vanishingly unlikely.
111
+ if (typeof db.$transaction === 'function') {
112
+ return db.$transaction(async (tx) => {
113
+ const agg = await tx.formSubmission.aggregate({
114
+ where: { formId },
115
+ _max: { entryNumber: true },
116
+ });
117
+ const entryNumber = (agg?._max?.entryNumber ?? 0) + 1;
118
+ const created = await tx.formSubmission.create({
119
+ data: { ...row, entryNumber },
120
+ select: { id: true, entryNumber: true },
121
+ });
122
+ return { id: String(created.id), entryNumber: created.entryNumber ?? entryNumber };
123
+ });
124
+ }
125
+ const created = await db.formSubmission.create({
126
+ data: row,
127
+ select: { id: true, entryNumber: true },
128
+ });
129
+ return { id: String(created.id), entryNumber: created.entryNumber ?? null };
130
+ }
131
+ function buildConfirmation(form) {
132
+ if (form.redirectUrl && form.redirectUrl.trim()) {
133
+ return { type: 'redirect', redirectUrl: form.redirectUrl.trim() };
134
+ }
135
+ const message = form.successMessage?.trim() ||
136
+ getActuateConfig()?.forms?.defaultSuccessMessage ||
137
+ DEFAULT_SUCCESS_MESSAGE;
138
+ return { type: 'message', message };
139
+ }
140
+ async function fireSubmissionHooks(formId, data) {
141
+ try {
142
+ const config = getActuateConfig();
143
+ const hooks = (config?._pluginHooks ?? []);
144
+ for (const hook of hooks.filter((h) => h?.event === 'afterCreate:form-submissions')) {
145
+ await hook.handler({ formId, data });
146
+ }
147
+ }
148
+ catch (err) {
149
+ if (process.env.NODE_ENV !== 'test') {
150
+ console.error('[Actuate CMS] Form submission hook error:', err);
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * Process a validated request into a persisted submission. Throws
156
+ * `SubmissionValidationError` when field validation fails so the caller can
157
+ * return a structured 422.
158
+ */
159
+ export async function processSubmission(form, ctx) {
160
+ const db = getDB();
161
+ const { fields, versionId } = await resolveFields(form);
162
+ const fileKeys = new Set((ctx.files ?? []).map((f) => f.fieldKey));
163
+ const validation = validateAndNormalizeSubmission(fields, ctx.values, { fileKeys });
164
+ if (!validation.ok) {
165
+ throw new SubmissionValidationError(validation.errors);
166
+ }
167
+ const sender = deriveSender(fields, validation.data);
168
+ const spam = scoreSubmissionSpam({
169
+ fields,
170
+ rawValues: ctx.values,
171
+ settings: form.spamSettings,
172
+ defaultStrategies: defaultSpamStrategies(),
173
+ senderEmail: sender.email,
174
+ elapsedMs: ctx.elapsedMs ?? null,
175
+ origin: ctx.origin ?? null,
176
+ referrer: ctx.referrer ?? null,
177
+ });
178
+ const attribution = ctx.attribution && typeof ctx.attribution === 'object' ? ctx.attribution : null;
179
+ const row = {
180
+ formId: form.id,
181
+ schemaVersionId: versionId,
182
+ data: validation.data,
183
+ normalizedData: validation.normalized,
184
+ attribution,
185
+ senderName: sender.name,
186
+ senderEmail: sender.email,
187
+ senderPhone: sender.phone,
188
+ preview: derivePreview(fields, validation.data),
189
+ spamStatus: spam.status,
190
+ unread: true,
191
+ ipAddressHash: hashClientIp(ctx.ip ?? 'unknown'),
192
+ userAgent: ctx.userAgent ?? null,
193
+ referrer: ctx.referrer ?? null,
194
+ pageUrl: ctx.pageUrl ?? null,
195
+ utmSource: asString(attribution?.source) || null,
196
+ utmMedium: asString(attribution?.medium) || null,
197
+ utmCampaign: asString(attribution?.campaign) || null,
198
+ submittedAt: new Date(),
199
+ };
200
+ const { id, entryNumber } = await assignAndCreate(db, row, form.id);
201
+ if ((ctx.files?.length ?? 0) > 0) {
202
+ try {
203
+ await persistSubmissionFiles(form.id, id, ctx.files ?? []);
204
+ }
205
+ catch (err) {
206
+ if (process.env.NODE_ENV !== 'test') {
207
+ console.error('[Actuate CMS] Failed to persist submission files:', err);
208
+ }
209
+ }
210
+ }
211
+ // Notification/webhook side-effects (PR6) run via plugin hooks; never block
212
+ // or fail the submission on them. Spam is not notified.
213
+ if (spam.status !== 'spam') {
214
+ void fireSubmissionHooks(form.id, validation.data);
215
+ }
216
+ await logEvent({
217
+ event: spam.status === 'spam' ? 'form.spam_detected' : 'form.submitted',
218
+ details: {
219
+ formId: form.id,
220
+ submissionId: id,
221
+ entryNumber,
222
+ spamStatus: spam.status,
223
+ ...(spam.reasons.length > 0 ? { spamReasons: spam.reasons } : {}),
224
+ },
225
+ });
226
+ return {
227
+ submissionId: id,
228
+ entryNumber,
229
+ spamStatus: spam.status,
230
+ confirmation: buildConfirmation(form),
231
+ };
232
+ }
233
+ /**
234
+ * Project a form definition into the public, embeddable schema. Strips every
235
+ * server-only concern (access rules, notification recipients, webhook secrets,
236
+ * blocklists, encryption flags) so nothing sensitive leaks to the browser.
237
+ */
238
+ export function buildPublicForm(form, fields, schemaVersionId, options = {}) {
239
+ const publicFields = fields
240
+ .filter((f) => f.type !== 'honeypot')
241
+ .map((f) => ({
242
+ id: f.id,
243
+ key: f.key,
244
+ label: f.label,
245
+ type: f.type,
246
+ required: Boolean(f.required),
247
+ placeholder: f.placeholder,
248
+ helpText: f.helpText,
249
+ defaultValue: f.defaultValue ?? undefined,
250
+ options: f.options,
251
+ width: f.width,
252
+ sortOrder: f.sortOrder,
253
+ validationRules: f.validationRules
254
+ ? sanitizePublicRules(f.validationRules)
255
+ : undefined,
256
+ conditionalLogic: f.conditionalLogic,
257
+ }));
258
+ const basePath = getActuateConfig()?.forms?.publicSubmissionPath ?? '/api/cms/public/forms';
259
+ return {
260
+ id: form.id,
261
+ name: form.name,
262
+ slug: form.slug,
263
+ description: form.description || undefined,
264
+ fields: publicFields,
265
+ submitPath: `${basePath.replace(/\/$/, '')}/${form.slug}/submit`,
266
+ successMessage: form.successMessage,
267
+ redirectUrl: form.redirectUrl,
268
+ spam: {
269
+ honeypotFieldKey: form.spamSettings?.honeypotFieldKey ?? fields.find((f) => f.type === 'honeypot')?.key,
270
+ minSubmitSeconds: form.spamSettings?.minSubmitSeconds,
271
+ },
272
+ captcha: options.captcha && options.captcha.provider !== 'none' ? options.captcha : undefined,
273
+ schemaVersionId,
274
+ };
275
+ }
276
+ /** Strip server-side-only validation hints (custom validator names) before exposing rules. */
277
+ function sanitizePublicRules(rules) {
278
+ const { customValidator: _drop, ...rest } = rules;
279
+ return rest;
280
+ }
281
+ export { resolveFields as resolveSubmissionFields };
282
+ //# sourceMappingURL=submission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/forms/submission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FormField } from './types.js';
2
+ export interface FieldError {
3
+ key: string;
4
+ message: string;
5
+ }
6
+ export interface SubmissionValidationResult {
7
+ ok: boolean;
8
+ errors: FieldError[];
9
+ /** Sanitized raw values keyed by field key (HTML stripped from strings). */
10
+ data: Record<string, unknown>;
11
+ /** Type-coerced values for export/search. */
12
+ normalized: Record<string, unknown>;
13
+ }
14
+ export interface ValidateOptions {
15
+ /** Field keys that have an accompanying uploaded file (for required-file checks). */
16
+ fileKeys?: ReadonlySet<string>;
17
+ }
18
+ export declare function validateAndNormalizeSubmission(fields: FormField[], rawValues: Record<string, unknown>, options?: ValidateOptions): SubmissionValidationResult;
19
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Server-side submission validation + normalization.
3
+ *
4
+ * This is the authoritative gate for incoming public form submissions: the
5
+ * client-side form is convenience only and is assumed hostile. Every value is
6
+ * validated against the field's declared type and `validationRules`, then split
7
+ * into two views:
8
+ *
9
+ * - `data` — the sanitized *raw* values (HTML-stripped strings) that we
10
+ * persist and render back in the admin inbox.
11
+ * - `normalized` — type-coerced values (numbers as numbers, checkboxes as
12
+ * booleans, dates as ISO strings) used for export/search.
13
+ *
14
+ * Keys that are not part of the schema are dropped entirely — a submitter
15
+ * cannot smuggle arbitrary columns into the stored payload. Fields hidden by
16
+ * conditional logic are skipped (not required, not stored).
17
+ */
18
+ import { stripHtml } from '../security/sanitize.js';
19
+ // Conservative hard caps so a single field can't be used to balloon the row /
20
+ // exhaust memory even when the schema omits explicit length rules.
21
+ const MAX_TEXT_LEN = 5_000;
22
+ const MAX_TEXTAREA_LEN = 50_000;
23
+ const MAX_MULTISELECT_ITEMS = 200;
24
+ const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
25
+ const PHONE_RE = /^[+]?[0-9\s().-]{6,20}$/;
26
+ const NON_INPUT = new Set(['richtext', 'divider', 'honeypot']);
27
+ const TRUTHY = new Set(['true', 'on', '1', 'yes', 'checked']);
28
+ function asString(value) {
29
+ if (value == null)
30
+ return '';
31
+ if (typeof value === 'string')
32
+ return value;
33
+ if (typeof value === 'number' || typeof value === 'boolean')
34
+ return String(value);
35
+ return '';
36
+ }
37
+ function coerceBoolean(value) {
38
+ if (typeof value === 'boolean')
39
+ return value;
40
+ if (typeof value === 'number')
41
+ return value === 1;
42
+ return TRUTHY.has(asString(value).trim().toLowerCase());
43
+ }
44
+ function evalRule(rule, values) {
45
+ const current = asString(values[rule.fieldKey]).toLowerCase().trim();
46
+ const target = asString(rule.value).toLowerCase().trim();
47
+ switch (rule.operator) {
48
+ case 'equals':
49
+ return current === target;
50
+ case 'notEquals':
51
+ return current !== target;
52
+ case 'contains':
53
+ return current.includes(target);
54
+ case 'isEmpty':
55
+ return current === '';
56
+ case 'isNotEmpty':
57
+ return current !== '';
58
+ default:
59
+ return true;
60
+ }
61
+ }
62
+ /** A field is visible unless its `show` rules exist and not all of them pass. */
63
+ function isVisible(field, values) {
64
+ const show = field.conditionalLogic?.show;
65
+ if (!show || show.length === 0)
66
+ return true;
67
+ return show.every((rule) => evalRule(rule, values));
68
+ }
69
+ /** A field is conditionally required when its `require` rules all pass. */
70
+ function isConditionallyRequired(field, values) {
71
+ const require = field.conditionalLogic?.require;
72
+ if (!require || require.length === 0)
73
+ return false;
74
+ return require.every((rule) => evalRule(rule, values));
75
+ }
76
+ function isPresent(raw) {
77
+ if (raw === undefined || raw === null)
78
+ return false;
79
+ if (typeof raw === 'string')
80
+ return raw.trim() !== '';
81
+ if (Array.isArray(raw))
82
+ return raw.length > 0;
83
+ return true;
84
+ }
85
+ export function validateAndNormalizeSubmission(fields, rawValues, options = {}) {
86
+ const errors = [];
87
+ const data = {};
88
+ const normalized = {};
89
+ const fileKeys = options.fileKeys ?? new Set();
90
+ for (const field of fields) {
91
+ if (NON_INPUT.has(field.type))
92
+ continue;
93
+ if (!isVisible(field, rawValues))
94
+ continue;
95
+ const key = field.key;
96
+ const label = field.label || key;
97
+ const rules = field.validationRules ?? {};
98
+ const required = Boolean(field.required) ||
99
+ Boolean(rules.required) ||
100
+ isConditionallyRequired(field, rawValues);
101
+ if (field.type === 'file') {
102
+ if (required && !fileKeys.has(key)) {
103
+ errors.push({ key, message: `${label} is required.` });
104
+ }
105
+ continue;
106
+ }
107
+ const raw = rawValues[key];
108
+ if (!isPresent(raw)) {
109
+ if (required)
110
+ errors.push({ key, message: `${label} is required.` });
111
+ continue;
112
+ }
113
+ switch (field.type) {
114
+ case 'checkbox':
115
+ case 'consent': {
116
+ const bool = coerceBoolean(raw);
117
+ if ((field.type === 'consent' || required) && !bool) {
118
+ errors.push({ key, message: `${label} must be accepted.` });
119
+ }
120
+ data[key] = bool;
121
+ normalized[key] = bool;
122
+ break;
123
+ }
124
+ case 'number': {
125
+ const num = typeof raw === 'number' ? raw : Number(asString(raw).trim());
126
+ if (!Number.isFinite(num)) {
127
+ errors.push({ key, message: `${label} must be a number.` });
128
+ break;
129
+ }
130
+ if (rules.min != null && num < rules.min) {
131
+ errors.push({ key, message: `${label} must be at least ${rules.min}.` });
132
+ }
133
+ if (rules.max != null && num > rules.max) {
134
+ errors.push({ key, message: `${label} must be at most ${rules.max}.` });
135
+ }
136
+ data[key] = num;
137
+ normalized[key] = num;
138
+ break;
139
+ }
140
+ case 'multiselect': {
141
+ const list = Array.isArray(raw) ? raw : [raw];
142
+ if (list.length > MAX_MULTISELECT_ITEMS) {
143
+ errors.push({ key, message: `${label} has too many selections.` });
144
+ break;
145
+ }
146
+ const cleaned = list.map((v) => stripHtml(asString(v)).trim()).filter((v) => v !== '');
147
+ const allowed = new Set((field.options ?? []).map((o) => o.value));
148
+ if (allowed.size > 0 && cleaned.some((v) => !allowed.has(v))) {
149
+ errors.push({ key, message: `${label} contains an invalid selection.` });
150
+ }
151
+ data[key] = cleaned;
152
+ normalized[key] = cleaned;
153
+ break;
154
+ }
155
+ case 'select':
156
+ case 'radio': {
157
+ const val = stripHtml(asString(raw)).trim();
158
+ const allowed = new Set((field.options ?? []).map((o) => o.value));
159
+ if (allowed.size > 0 && !allowed.has(val)) {
160
+ errors.push({ key, message: `${label} contains an invalid selection.` });
161
+ }
162
+ data[key] = val;
163
+ normalized[key] = val;
164
+ break;
165
+ }
166
+ case 'date': {
167
+ const s = asString(raw).trim();
168
+ const d = new Date(s);
169
+ if (Number.isNaN(d.getTime())) {
170
+ errors.push({ key, message: `${label} is not a valid date.` });
171
+ data[key] = s;
172
+ }
173
+ else {
174
+ data[key] = s;
175
+ normalized[key] = d.toISOString();
176
+ }
177
+ break;
178
+ }
179
+ default: {
180
+ // text, email, phone, url, textarea, hidden
181
+ const s = stripHtml(asString(raw)).trim();
182
+ const maxLen = rules.maxLength ?? (field.type === 'textarea' ? MAX_TEXTAREA_LEN : MAX_TEXT_LEN);
183
+ if (s.length > maxLen) {
184
+ errors.push({ key, message: `${label} must be at most ${maxLen} characters.` });
185
+ }
186
+ if (rules.minLength != null && s.length < rules.minLength) {
187
+ errors.push({ key, message: `${label} must be at least ${rules.minLength} characters.` });
188
+ }
189
+ const format = rules.format ??
190
+ (field.type === 'email'
191
+ ? 'email'
192
+ : field.type === 'url'
193
+ ? 'url'
194
+ : field.type === 'phone'
195
+ ? 'phone'
196
+ : undefined);
197
+ if (format === 'email' && !EMAIL_RE.test(s)) {
198
+ errors.push({ key, message: `${label} must be a valid email address.` });
199
+ }
200
+ else if (format === 'phone' && !PHONE_RE.test(s)) {
201
+ errors.push({ key, message: `${label} must be a valid phone number.` });
202
+ }
203
+ else if (format === 'url') {
204
+ if (!isHttpUrl(s)) {
205
+ errors.push({ key, message: `${label} must be a valid URL.` });
206
+ }
207
+ }
208
+ if (rules.pattern) {
209
+ try {
210
+ if (!new RegExp(rules.pattern).test(s)) {
211
+ errors.push({ key, message: `${label} is not in the expected format.` });
212
+ }
213
+ }
214
+ catch {
215
+ // An invalid pattern in the schema must never block a submission;
216
+ // schema validation already surfaces bad patterns to the editor.
217
+ }
218
+ }
219
+ data[key] = s;
220
+ normalized[key] = s;
221
+ }
222
+ }
223
+ }
224
+ return { ok: errors.length === 0, errors, data, normalized };
225
+ }
226
+ function isHttpUrl(value) {
227
+ try {
228
+ const url = new URL(value);
229
+ return url.protocol === 'http:' || url.protocol === 'https:';
230
+ }
231
+ catch {
232
+ return false;
233
+ }
234
+ }
235
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/forms/validation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -65,8 +65,8 @@ export { createPreviewAdapter } from './preview/index.js';
65
65
  export type { PreviewSession, PreviewAdapter } from './preview/index.js';
66
66
  export { checkSetupRequired, createInitialAdmin, autoSeedAdmin } from './setup/index.js';
67
67
  export type { SetupStatus, CreateAdminInput, SetupResult } from './setup/index.js';
68
- export { captureAttribution, storeAttribution, getStoredAttribution, trackPageView, getAttributionForSubmission, trackFormStart, trackFormSubmit, trackFormError, pushDataLayerEvent, getDefaultConfirmation, getDefaultAnalyticsConfig, INPUT_FIELD_TYPES, NON_INPUT_FIELD_TYPES, } from './forms/index.js';
69
- export type { AttributionData, FormAnalyticsConfig, FormConfirmation, FormFieldType, PiiClassification, FormFieldOption, FieldValidationRules, ConditionalOperator, ConditionalRule, ConditionalLogic, FieldWidth, FormField, FormSchemaVersion, FormWebhookConfig, FormWebhookEvent, FormNotificationSettings, SpamProtectionStrategy, FormSpamSettings, FormEmbedSettings, FormStatus, FormDefinition, SpamStatus, FormSubmissionFile, FormSubmission, FetchFormsParams, FetchFormEntriesParams, FormStats, FormsSidebarCount, EntryCounts, } from './forms/index.js';
68
+ export { captureAttribution, storeAttribution, getStoredAttribution, trackPageView, getAttributionForSubmission, trackFormStart, trackFormSubmit, trackFormError, pushDataLayerEvent, getDefaultConfirmation, getDefaultAnalyticsConfig, INPUT_FIELD_TYPES, NON_INPUT_FIELD_TYPES, validateAndNormalizeSubmission, scoreSubmissionSpam, validateSubmissionFiles, persistSubmissionFiles, processSubmission, buildPublicForm, SubmissionValidationError, FORM_UPLOAD_ALLOWED_MIME_TYPES, DEFAULT_MAX_FILE_BYTES, } from './forms/index.js';
69
+ export type { FieldError, SubmissionValidationResult, SpamScoreInput, SpamScoreResult, IncomingFile, ValidateFilesResult, SubmissionContext, SubmissionResult, SubmissionConfirmation, PublicForm, PublicFormField, AttributionData, FormAnalyticsConfig, FormConfirmation, FormFieldType, PiiClassification, FormFieldOption, FieldValidationRules, ConditionalOperator, ConditionalRule, ConditionalLogic, FieldWidth, FormField, FormSchemaVersion, FormWebhookConfig, FormWebhookEvent, FormNotificationSettings, SpamProtectionStrategy, FormSpamSettings, FormEmbedSettings, FormStatus, FormDefinition, SpamStatus, FormSubmissionFile, FormSubmission, FetchFormsParams, FetchFormEntriesParams, FormStats, FormsSidebarCount, EntryCounts, } from './forms/index.js';
70
70
  export { setStorageAdapter, getStorageAdapter } from './storage/index.js';
71
71
  export type { StorageAdapter as MediaStorageAdapter } from './storage/index.js';
72
72
  export { optimizeImage, getImageMetadata, formatBytes } from './media/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -69,7 +69,7 @@ export { createPreviewAdapter } from './preview/index.js';
69
69
  // Setup (first-run)
70
70
  export { checkSetupRequired, createInitialAdmin, autoSeedAdmin } from './setup/index.js';
71
71
  // Forms
72
- export { captureAttribution, storeAttribution, getStoredAttribution, trackPageView, getAttributionForSubmission, trackFormStart, trackFormSubmit, trackFormError, pushDataLayerEvent, getDefaultConfirmation, getDefaultAnalyticsConfig, INPUT_FIELD_TYPES, NON_INPUT_FIELD_TYPES, } from './forms/index.js';
72
+ export { captureAttribution, storeAttribution, getStoredAttribution, trackPageView, getAttributionForSubmission, trackFormStart, trackFormSubmit, trackFormError, pushDataLayerEvent, getDefaultConfirmation, getDefaultAnalyticsConfig, INPUT_FIELD_TYPES, NON_INPUT_FIELD_TYPES, validateAndNormalizeSubmission, scoreSubmissionSpam, validateSubmissionFiles, persistSubmissionFiles, processSubmission, buildPublicForm, SubmissionValidationError, FORM_UPLOAD_ALLOWED_MIME_TYPES, DEFAULT_MAX_FILE_BYTES, } from './forms/index.js';
73
73
  // Storage (media upload abstraction)
74
74
  export { setStorageAdapter, getStorageAdapter } from './storage/index.js';
75
75
  // Media optimization