@kywi-software/core 0.4.0 → 0.6.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 (261) hide show
  1. package/dist/admin/field-components.d.ts.map +1 -1
  2. package/dist/admin/field-components.js +55 -0
  3. package/dist/admin/field-components.js.map +1 -1
  4. package/dist/admin/form-builder.js +10 -1
  5. package/dist/admin/form-builder.js.map +1 -1
  6. package/dist/admin/form-helpers.d.ts +1 -1
  7. package/dist/admin/form-helpers.d.ts.map +1 -1
  8. package/dist/admin/form-helpers.js +21 -0
  9. package/dist/admin/form-helpers.js.map +1 -1
  10. package/dist/admin/layout-editor/component-actions.d.ts +43 -1
  11. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  12. package/dist/admin/layout-editor/component-actions.js +59 -1
  13. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  14. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  15. package/dist/admin/layout-editor/editor-canvas.js +1 -1
  16. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  17. package/dist/admin/layout-editor/editor-state.d.ts +4 -0
  18. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  19. package/dist/admin/layout-editor/editor-state.js +17 -0
  20. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  21. package/dist/admin/layout-editor/index.d.ts +1 -1
  22. package/dist/admin/layout-editor/index.d.ts.map +1 -1
  23. package/dist/admin/layout-editor/index.js +1 -1
  24. package/dist/admin/layout-editor/index.js.map +1 -1
  25. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  26. package/dist/admin/layout-editor/layout-editor.js +95 -2
  27. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  28. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  29. package/dist/admin/layout-editor/overlay-shell.js +8 -0
  30. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  31. package/dist/admin/layout-editor/props-panel.d.ts +12 -2
  32. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  33. package/dist/admin/layout-editor/props-panel.js +30 -14
  34. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  35. package/dist/admin/layout-editor/section-overlay.d.ts +6 -1
  36. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  37. package/dist/admin/layout-editor/section-overlay.js +11 -2
  38. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  39. package/dist/admin/layout-editor/section-template-picker.d.ts +8 -1
  40. package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
  41. package/dist/admin/layout-editor/section-template-picker.js +31 -2
  42. package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
  43. package/dist/admin/server.d.ts +1 -0
  44. package/dist/admin/server.d.ts.map +1 -1
  45. package/dist/admin/server.js +7 -0
  46. package/dist/admin/server.js.map +1 -1
  47. package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -1
  48. package/dist/admin/surfaces/contentTypes/content-types-designer.js +12 -2
  49. package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -1
  50. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
  51. package/dist/admin/surfaces/dashboard/dashboard-index.js +23 -1
  52. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
  53. package/dist/admin/webhook-manager.d.ts.map +1 -1
  54. package/dist/admin/webhook-manager.js +1 -0
  55. package/dist/admin/webhook-manager.js.map +1 -1
  56. package/dist/api/admin-features-routes.d.ts.map +1 -1
  57. package/dist/api/admin-features-routes.js +7 -1
  58. package/dist/api/admin-features-routes.js.map +1 -1
  59. package/dist/api/audience-preview-routes.d.ts.map +1 -1
  60. package/dist/api/audience-preview-routes.js +20 -2
  61. package/dist/api/audience-preview-routes.js.map +1 -1
  62. package/dist/api/audience-routes.d.ts.map +1 -1
  63. package/dist/api/audience-routes.js +44 -3
  64. package/dist/api/audience-routes.js.map +1 -1
  65. package/dist/api/auth-routes.d.ts.map +1 -1
  66. package/dist/api/auth-routes.js +16 -0
  67. package/dist/api/auth-routes.js.map +1 -1
  68. package/dist/api/auth.d.ts.map +1 -1
  69. package/dist/api/auth.js +34 -1
  70. package/dist/api/auth.js.map +1 -1
  71. package/dist/api/bulk-routes.d.ts.map +1 -1
  72. package/dist/api/bulk-routes.js +44 -12
  73. package/dist/api/bulk-routes.js.map +1 -1
  74. package/dist/api/category-routes.d.ts.map +1 -1
  75. package/dist/api/category-routes.js +10 -1
  76. package/dist/api/category-routes.js.map +1 -1
  77. package/dist/api/changeset-routes.d.ts +9 -0
  78. package/dist/api/changeset-routes.d.ts.map +1 -1
  79. package/dist/api/changeset-routes.js +13 -2
  80. package/dist/api/changeset-routes.js.map +1 -1
  81. package/dist/api/comment-routes.d.ts.map +1 -1
  82. package/dist/api/comment-routes.js +27 -1
  83. package/dist/api/comment-routes.js.map +1 -1
  84. package/dist/api/component-routes.d.ts.map +1 -1
  85. package/dist/api/component-routes.js +16 -1
  86. package/dist/api/component-routes.js.map +1 -1
  87. package/dist/api/content-routes.d.ts.map +1 -1
  88. package/dist/api/content-routes.js +59 -20
  89. package/dist/api/content-routes.js.map +1 -1
  90. package/dist/api/content-schemas.d.ts.map +1 -1
  91. package/dist/api/content-schemas.js +39 -0
  92. package/dist/api/content-schemas.js.map +1 -1
  93. package/dist/api/content-type-routes.d.ts.map +1 -1
  94. package/dist/api/content-type-routes.js +25 -5
  95. package/dist/api/content-type-routes.js.map +1 -1
  96. package/dist/api/dashboard-routes.d.ts.map +1 -1
  97. package/dist/api/dashboard-routes.js +4 -1
  98. package/dist/api/dashboard-routes.js.map +1 -1
  99. package/dist/api/experiment-routes.d.ts.map +1 -1
  100. package/dist/api/experiment-routes.js +24 -2
  101. package/dist/api/experiment-routes.js.map +1 -1
  102. package/dist/api/feed-routes.d.ts +4 -4
  103. package/dist/api/feed-routes.d.ts.map +1 -1
  104. package/dist/api/feed-routes.js +12 -2
  105. package/dist/api/feed-routes.js.map +1 -1
  106. package/dist/api/form-routes.d.ts +18 -0
  107. package/dist/api/form-routes.d.ts.map +1 -1
  108. package/dist/api/form-routes.js +207 -14
  109. package/dist/api/form-routes.js.map +1 -1
  110. package/dist/api/group-routes.d.ts.map +1 -1
  111. package/dist/api/group-routes.js +27 -0
  112. package/dist/api/group-routes.js.map +1 -1
  113. package/dist/api/index.d.ts +9 -0
  114. package/dist/api/index.d.ts.map +1 -1
  115. package/dist/api/index.js +25 -2
  116. package/dist/api/index.js.map +1 -1
  117. package/dist/api/layout-routes.d.ts.map +1 -1
  118. package/dist/api/layout-routes.js +13 -1
  119. package/dist/api/layout-routes.js.map +1 -1
  120. package/dist/api/media-routes.d.ts.map +1 -1
  121. package/dist/api/media-routes.js +19 -0
  122. package/dist/api/media-routes.js.map +1 -1
  123. package/dist/api/scheduler-routes.d.ts +10 -0
  124. package/dist/api/scheduler-routes.d.ts.map +1 -1
  125. package/dist/api/scheduler-routes.js +13 -2
  126. package/dist/api/scheduler-routes.js.map +1 -1
  127. package/dist/api/search-routes.d.ts.map +1 -1
  128. package/dist/api/search-routes.js +11 -2
  129. package/dist/api/search-routes.js.map +1 -1
  130. package/dist/api/section-template-routes.d.ts.map +1 -1
  131. package/dist/api/section-template-routes.js +16 -1
  132. package/dist/api/section-template-routes.js.map +1 -1
  133. package/dist/api/site-context.d.ts +30 -1
  134. package/dist/api/site-context.d.ts.map +1 -1
  135. package/dist/api/site-context.js +41 -0
  136. package/dist/api/site-context.js.map +1 -1
  137. package/dist/api/tag-routes.d.ts.map +1 -1
  138. package/dist/api/tag-routes.js +10 -1
  139. package/dist/api/tag-routes.js.map +1 -1
  140. package/dist/api/translation-routes.d.ts.map +1 -1
  141. package/dist/api/translation-routes.js +19 -4
  142. package/dist/api/translation-routes.js.map +1 -1
  143. package/dist/api/user-routes.d.ts.map +1 -1
  144. package/dist/api/user-routes.js +13 -0
  145. package/dist/api/user-routes.js.map +1 -1
  146. package/dist/api/version-routes.d.ts.map +1 -1
  147. package/dist/api/version-routes.js +1 -0
  148. package/dist/api/version-routes.js.map +1 -1
  149. package/dist/api/webhook-routes.d.ts.map +1 -1
  150. package/dist/api/webhook-routes.js +31 -2
  151. package/dist/api/webhook-routes.js.map +1 -1
  152. package/dist/api/workflow-routes.d.ts.map +1 -1
  153. package/dist/api/workflow-routes.js +45 -1
  154. package/dist/api/workflow-routes.js.map +1 -1
  155. package/dist/auth/tokens.d.ts.map +1 -1
  156. package/dist/auth/tokens.js +14 -1
  157. package/dist/auth/tokens.js.map +1 -1
  158. package/dist/config/types.d.ts +29 -2
  159. package/dist/config/types.d.ts.map +1 -1
  160. package/dist/config/types.js.map +1 -1
  161. package/dist/db/bulk-queries.d.ts +8 -0
  162. package/dist/db/bulk-queries.d.ts.map +1 -1
  163. package/dist/db/bulk-queries.js +16 -0
  164. package/dist/db/bulk-queries.js.map +1 -1
  165. package/dist/db/changeset-queries.d.ts +27 -1
  166. package/dist/db/changeset-queries.d.ts.map +1 -1
  167. package/dist/db/changeset-queries.js +56 -2
  168. package/dist/db/changeset-queries.js.map +1 -1
  169. package/dist/db/content-permission-dedupe.d.ts +24 -0
  170. package/dist/db/content-permission-dedupe.d.ts.map +1 -0
  171. package/dist/db/content-permission-dedupe.js +69 -0
  172. package/dist/db/content-permission-dedupe.js.map +1 -0
  173. package/dist/db/content-permission-queries.d.ts +8 -0
  174. package/dist/db/content-permission-queries.d.ts.map +1 -1
  175. package/dist/db/content-permission-queries.js +29 -1
  176. package/dist/db/content-permission-queries.js.map +1 -1
  177. package/dist/db/content-queries.d.ts +7 -0
  178. package/dist/db/content-queries.d.ts.map +1 -1
  179. package/dist/db/content-queries.js +9 -0
  180. package/dist/db/content-queries.js.map +1 -1
  181. package/dist/db/content-type-queries.d.ts.map +1 -1
  182. package/dist/db/content-type-queries.js +3 -1
  183. package/dist/db/content-type-queries.js.map +1 -1
  184. package/dist/db/dynamic-schema.d.ts.map +1 -1
  185. package/dist/db/dynamic-schema.js +1 -0
  186. package/dist/db/dynamic-schema.js.map +1 -1
  187. package/dist/db/index.d.ts +1 -0
  188. package/dist/db/index.d.ts.map +1 -1
  189. package/dist/db/index.js +3 -0
  190. package/dist/db/index.js.map +1 -1
  191. package/dist/db/schema-apply.d.ts.map +1 -1
  192. package/dist/db/schema-apply.js +1 -0
  193. package/dist/db/schema-apply.js.map +1 -1
  194. package/dist/db/schema-field-queries.d.ts +2 -0
  195. package/dist/db/schema-field-queries.d.ts.map +1 -1
  196. package/dist/db/schema-field-queries.js +4 -0
  197. package/dist/db/schema-field-queries.js.map +1 -1
  198. package/dist/db/site-membership-queries.d.ts +6 -0
  199. package/dist/db/site-membership-queries.d.ts.map +1 -1
  200. package/dist/db/site-membership-queries.js +9 -0
  201. package/dist/db/site-membership-queries.js.map +1 -1
  202. package/dist/db/user-search.d.ts +8 -0
  203. package/dist/db/user-search.d.ts.map +1 -1
  204. package/dist/db/user-search.js +14 -8
  205. package/dist/db/user-search.js.map +1 -1
  206. package/dist/db/workflow-queries.d.ts +1 -0
  207. package/dist/db/workflow-queries.d.ts.map +1 -1
  208. package/dist/db/workflow-queries.js +24 -0
  209. package/dist/db/workflow-queries.js.map +1 -1
  210. package/dist/forms/types.d.ts +5 -0
  211. package/dist/forms/types.d.ts.map +1 -1
  212. package/dist/forms/validation.d.ts +20 -0
  213. package/dist/forms/validation.d.ts.map +1 -1
  214. package/dist/forms/validation.js +45 -2
  215. package/dist/forms/validation.js.map +1 -1
  216. package/dist/hooks/ax-invalidation.d.ts.map +1 -1
  217. package/dist/hooks/ax-invalidation.js +1 -0
  218. package/dist/hooks/ax-invalidation.js.map +1 -1
  219. package/dist/hooks/dispatch.d.ts +1 -0
  220. package/dist/hooks/dispatch.d.ts.map +1 -1
  221. package/dist/hooks/dispatch.js +6 -0
  222. package/dist/hooks/dispatch.js.map +1 -1
  223. package/dist/hooks/webhook-dispatch.d.ts.map +1 -1
  224. package/dist/hooks/webhook-dispatch.js +1 -0
  225. package/dist/hooks/webhook-dispatch.js.map +1 -1
  226. package/dist/layout/index.d.ts +1 -1
  227. package/dist/layout/index.d.ts.map +1 -1
  228. package/dist/layout/index.js.map +1 -1
  229. package/dist/layout/renderer.d.ts +15 -2
  230. package/dist/layout/renderer.d.ts.map +1 -1
  231. package/dist/layout/renderer.js +49 -3
  232. package/dist/layout/renderer.js.map +1 -1
  233. package/dist/layout/types.d.ts +9 -0
  234. package/dist/layout/types.d.ts.map +1 -1
  235. package/dist/layout/types.js +5 -0
  236. package/dist/layout/types.js.map +1 -1
  237. package/dist/schema/base.d.ts +74 -0
  238. package/dist/schema/base.d.ts.map +1 -1
  239. package/dist/schema/base.js +16 -0
  240. package/dist/schema/base.js.map +1 -1
  241. package/dist/schema/content-permissions.d.ts.map +1 -1
  242. package/dist/schema/content-permissions.js +23 -2
  243. package/dist/schema/content-permissions.js.map +1 -1
  244. package/dist/schema/mapper.d.ts.map +1 -1
  245. package/dist/schema/mapper.js +1 -0
  246. package/dist/schema/mapper.js.map +1 -1
  247. package/dist/schema/mysql-tables.d.ts +68 -0
  248. package/dist/schema/mysql-tables.d.ts.map +1 -1
  249. package/dist/schema/mysql-tables.js +7 -0
  250. package/dist/schema/mysql-tables.js.map +1 -1
  251. package/dist/scope/kywi-form.d.ts.map +1 -1
  252. package/dist/scope/kywi-form.js +51 -6
  253. package/dist/scope/kywi-form.js.map +1 -1
  254. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  255. package/dist/scope/kywi-wizard-form.js +29 -3
  256. package/dist/scope/kywi-wizard-form.js.map +1 -1
  257. package/dist/versioning/scheduler.d.ts +10 -2
  258. package/dist/versioning/scheduler.d.ts.map +1 -1
  259. package/dist/versioning/scheduler.js +13 -5
  260. package/dist/versioning/scheduler.js.map +1 -1
  261. package/package.json +7 -4
@@ -3,8 +3,13 @@ import { resolveAuth } from './auth.js';
3
3
  import { hasMinRole } from '../auth/roles.js';
4
4
  import { getContentBySlug } from '../db/content-queries.js';
5
5
  import { createFormSubmission, listFormSubmissions, listFormSubmissionCounts, deleteFormSubmission, updateFormSubmissionStatus, } from '../db/form-queries.js';
6
- import { resolveSiteId } from './site-context.js';
7
- import { buildFormValidationSchema } from '../forms/validation.js';
6
+ import { resolveSiteId, assertSiteAccess } from './site-context.js';
7
+ import { buildFormValidationSchema, validateFileConstraints } from '../forms/validation.js';
8
+ import { createMediaRecord } from '../db/media-queries.js';
9
+ import { checkUploadAllowed } from '../media/upload-allowlist.js';
10
+ import { randomUUID } from 'node:crypto';
11
+ /** Default hard ceiling (MB) for a form file upload when media config omits one. */
12
+ const DEFAULT_MAX_UPLOAD_MB = 10;
8
13
  import { renderEmailTemplate, FORM_NOTIFICATION_TEMPLATE, FORM_CONFIRMATION_TEMPLATE } from '../email/templates.js';
9
14
  import { generateCsrfToken, verifyCsrfToken } from '../forms/csrf.js';
10
15
  import { verifyRecaptcha } from '../forms/recaptcha.js';
@@ -22,6 +27,41 @@ export function checkHoneypot(body) {
22
27
  // If the honeypot field is filled, this is likely a bot.
23
28
  return val !== undefined && val !== null && val !== '';
24
29
  }
30
+ // ─── Multipart parsing (file-upload forms) ───────────────────────────────────
31
+ /** A FormData value is a file part when it exposes a Blob/File shape. */
32
+ function isFileEntry(value) {
33
+ return (typeof value === 'object' &&
34
+ value !== null &&
35
+ typeof value.arrayBuffer === 'function' &&
36
+ 'size' in value &&
37
+ 'name' in value);
38
+ }
39
+ /**
40
+ * Split a multipart FormData into scalar/text fields and file parts. Text keys
41
+ * seen more than once collapse into an array (matching how multiSelect posts).
42
+ * Empty file inputs (size 0, no name) are treated as "no file selected".
43
+ */
44
+ export function parseMultipartFormData(form) {
45
+ const fields = {};
46
+ const files = {};
47
+ form.forEach((value, key) => {
48
+ if (isFileEntry(value)) {
49
+ if (value.size === 0 && value.name === '')
50
+ return; // empty file input
51
+ files[key] = value; // single file per field; last wins
52
+ return;
53
+ }
54
+ const s = String(value);
55
+ if (key in fields) {
56
+ const existing = fields[key];
57
+ fields[key] = Array.isArray(existing) ? [...existing, s] : [existing, s];
58
+ }
59
+ else {
60
+ fields[key] = s;
61
+ }
62
+ });
63
+ return { fields, files };
64
+ }
25
65
  // ─── reCAPTCHA ─────────────────────────────────────────────────────────────
26
66
  /**
27
67
  * True when the form declares a reCAPTCHA field (flat or in any step). Only such
@@ -73,8 +113,23 @@ export function registerFormRoutes(router, ctx) {
73
113
  // submission against the wrong row and hiding it from the form's Submissions
74
114
  // view. Typing the lookup to 'form' fixes that silent misattribution
75
115
  // (kywi-cms#39).
76
- async function getFormBySlug(slug, siteId) {
77
- return getContentBySlug(db, null, slug, siteId, { baseType: 'form' });
116
+ //
117
+ // `publishedOnly` additionally restricts the lookup to status='published'
118
+ // used by the public resolve/submit/draft-progress endpoints so a draft form
119
+ // is neither resolvable nor submittable by an unauthenticated visitor
120
+ // (kywi-cms#66). Editor+ callers pass `publishedOnly: false` to preview drafts.
121
+ async function getFormBySlug(slug, siteId, opts) {
122
+ return getContentBySlug(db, null, slug, siteId, {
123
+ baseType: 'form',
124
+ ...(opts?.publishedOnly ? { status: 'published' } : {}),
125
+ });
126
+ }
127
+ // A request may preview a draft form only when authenticated as editor+.
128
+ // Everyone else (including unauthenticated requests) is restricted to
129
+ // published forms (kywi-cms#66).
130
+ async function resolvePublishedOnly(req) {
131
+ const auth = await authenticate(req);
132
+ return !(auth.user && hasMinRole(auth.user.role, 'editor'));
78
133
  }
79
134
  // Resolve the effective reCAPTCHA config for a site: an explicit ctx override
80
135
  // (config/programmatic) wins; otherwise the per-site keys saved in Settings →
@@ -114,7 +169,8 @@ export function registerFormRoutes(router, ctx) {
114
169
  router.get('/forms/:slug', async (req, params) => {
115
170
  const slug = params.slug;
116
171
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
117
- const form = await getFormBySlug(slug, siteId);
172
+ const publishedOnly = await resolvePublishedOnly(req);
173
+ const form = await getFormBySlug(slug, siteId, { publishedOnly });
118
174
  if (!form)
119
175
  return notFound('Form not found');
120
176
  const f = form;
@@ -137,7 +193,8 @@ export function registerFormRoutes(router, ctx) {
137
193
  router.post('/forms/:slug/submit', async (req, params) => {
138
194
  const slug = params.slug;
139
195
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
140
- const formContent = await getFormBySlug(slug, siteId);
196
+ const publishedOnly = await resolvePublishedOnly(req);
197
+ const formContent = await getFormBySlug(slug, siteId, { publishedOnly });
141
198
  if (!formContent)
142
199
  return notFound('Form not found');
143
200
  // CSRF validation (double-submit cookie pattern)
@@ -167,14 +224,45 @@ export function registerFormRoutes(router, ctx) {
167
224
  return jsonError('FORBIDDEN', result.error ?? 'reCAPTCHA failed', 403);
168
225
  }
169
226
  }
170
- let body;
171
- try {
172
- body = await req.json();
227
+ // Body parse: forms with file fields submit multipart/form-data (file bytes
228
+ // + text fields); everything else stays JSON, byte-identical to before.
229
+ const contentType = (req.headers.get('content-type') ?? '').toLowerCase();
230
+ const isMultipart = contentType.includes('multipart/form-data');
231
+ // Hard upload ceiling (bytes) — the same default cap the media route uses.
232
+ // Applies to file uploads regardless of any per-field maxSizeMb, so an
233
+ // unauthenticated multipart submit can't buffer an unbounded body.
234
+ const maxUploadBytes = (config.media?.maxUploadSizeMb ?? DEFAULT_MAX_UPLOAD_MB) * 1024 * 1024;
235
+ let bodyObj;
236
+ let fileEntries = {};
237
+ if (isMultipart) {
238
+ // Reject an oversize body up front (before buffering it) when the client
239
+ // declares Content-Length. The per-file byte check below is the backstop
240
+ // for chunked/transfer-encoded requests that omit it.
241
+ const contentLength = Number(req.headers.get('content-length') ?? '');
242
+ if (Number.isFinite(contentLength) && contentLength > maxUploadBytes) {
243
+ return jsonError('PAYLOAD_TOO_LARGE', `Upload exceeds the maximum size of ${config.media?.maxUploadSizeMb ?? DEFAULT_MAX_UPLOAD_MB}MB`, 413);
244
+ }
245
+ let form;
246
+ try {
247
+ form = await req.formData();
248
+ }
249
+ catch {
250
+ return jsonError('BAD_REQUEST', 'Invalid multipart body', 400);
251
+ }
252
+ const parsed = parseMultipartFormData(form);
253
+ bodyObj = parsed.fields;
254
+ fileEntries = parsed.files;
173
255
  }
174
- catch {
175
- return jsonError('BAD_REQUEST', 'Invalid JSON body', 400);
256
+ else {
257
+ let body;
258
+ try {
259
+ body = await req.json();
260
+ }
261
+ catch {
262
+ return jsonError('BAD_REQUEST', 'Invalid JSON body', 400);
263
+ }
264
+ bodyObj = body;
176
265
  }
177
- const bodyObj = body;
178
266
  // Honeypot check
179
267
  if (checkHoneypot(bodyObj)) {
180
268
  // Silently accept but do not persist — bot protection
@@ -187,6 +275,23 @@ export function registerFormRoutes(router, ctx) {
187
275
  // body — so a client cannot inject arbitrary extra keys into the stored
188
276
  // submission record. Forms with no declared fields fall back to cleanData.
189
277
  const formFields = formContent.formFields;
278
+ // Multipart carries every field as a string (or repeated-key array); coerce
279
+ // checkbox → boolean and multiSelect → array so the validation schema sees
280
+ // the same shapes the JSON path produces (otherwise a file+checkbox or
281
+ // file+multiSelect form would always fail validation).
282
+ if (isMultipart && formFields && Array.isArray(formFields)) {
283
+ for (const field of formFields) {
284
+ if (!(field.name in cleanData))
285
+ continue;
286
+ const raw = cleanData[field.name];
287
+ if (field.type === 'checkbox') {
288
+ cleanData[field.name] = raw === true || raw === 'true' || raw === 'on';
289
+ }
290
+ else if (field.type === 'multiSelect') {
291
+ cleanData[field.name] = Array.isArray(raw) ? raw : [raw];
292
+ }
293
+ }
294
+ }
190
295
  let dataToStore = cleanData;
191
296
  if (formFields && Array.isArray(formFields) && formFields.length > 0) {
192
297
  const schema = buildFormValidationSchema(formFields);
@@ -196,6 +301,80 @@ export function registerFormRoutes(router, ctx) {
196
301
  }
197
302
  dataToStore = parsed.data;
198
303
  }
304
+ // File-upload fields: enforce accept/maxSizeMb on the uploaded bytes, then
305
+ // persist through the existing media pipeline (storage.write +
306
+ // createMediaRecord) and store the media id/URL in the submission. Without a
307
+ // storage provider configured, constraints are still enforced and only
308
+ // name/size/type metadata is retained.
309
+ if (formFields && Array.isArray(formFields)) {
310
+ for (const field of formFields) {
311
+ if (field.type !== 'file')
312
+ continue;
313
+ const file = fileEntries[field.name];
314
+ if (!file) {
315
+ if (field.required) {
316
+ return jsonError('VALIDATION_ERROR', 'Validation failed', 400, [
317
+ { path: field.name, message: 'This field is required' },
318
+ ]);
319
+ }
320
+ continue;
321
+ }
322
+ const check = validateFileConstraints(field, { name: file.name, size: file.size, type: file.type });
323
+ if (!check.ok) {
324
+ return check.code === 'size'
325
+ ? jsonError('PAYLOAD_TOO_LARGE', check.message, 413, [{ path: field.name, message: check.message }])
326
+ : jsonError('VALIDATION_ERROR', check.message, 400, [{ path: field.name, message: check.message }]);
327
+ }
328
+ const mimeType = file.type || 'application/octet-stream';
329
+ // Media upload allowlist — the SAME extension+MIME gate every media-route
330
+ // write runs (media-routes.ts). A form file field without an `accept`
331
+ // constraint would otherwise let an anonymous submitter host a
332
+ // client-typed .html/.svg served inline at GET /media/:id/file (stored
333
+ // XSS). Enforced before storing, on the metadata-only path too.
334
+ const allowed = checkUploadAllowed(file.name, mimeType, config.media);
335
+ if (!allowed.ok) {
336
+ return jsonError('UNSUPPORTED_MEDIA_TYPE', allowed.reason, 400, [{ path: field.name, message: allowed.reason }]);
337
+ }
338
+ const buffer = Buffer.from(await file.arrayBuffer());
339
+ // Re-check against actual byte length: the per-field maxSizeMb AND the
340
+ // hard media ceiling (file.size is client-reported; a chunked request may
341
+ // omit Content-Length, so this is the authoritative size gate).
342
+ const maxSizeMb = field.validation?.maxSizeMb;
343
+ if (maxSizeMb !== undefined && buffer.byteLength > maxSizeMb * 1024 * 1024) {
344
+ const message = `File exceeds the maximum size of ${maxSizeMb}MB`;
345
+ return jsonError('PAYLOAD_TOO_LARGE', message, 413, [{ path: field.name, message }]);
346
+ }
347
+ if (buffer.byteLength > maxUploadBytes) {
348
+ const message = `File exceeds the maximum size of ${config.media?.maxUploadSizeMb ?? DEFAULT_MAX_UPLOAD_MB}MB`;
349
+ return jsonError('PAYLOAD_TOO_LARGE', message, 413, [{ path: field.name, message }]);
350
+ }
351
+ if (ctx.storage) {
352
+ const mediaId = randomUUID();
353
+ const storageKey = `${siteId}/forms/${mediaId}/${file.name}`;
354
+ await ctx.storage.write(storageKey, buffer);
355
+ const record = await createMediaRecord(db, {
356
+ siteId,
357
+ filename: file.name,
358
+ originalFilename: file.name,
359
+ mimeType,
360
+ fileSize: buffer.byteLength,
361
+ storageKey,
362
+ });
363
+ dataToStore[field.name] = {
364
+ mediaId: record.id,
365
+ // siteId is required — GET /media/:id/file resolves the file per-site,
366
+ // so a bare /media/:id/file 404s on any non-default site.
367
+ url: `/media/${record.id}/file?siteId=${encodeURIComponent(siteId)}`,
368
+ filename: file.name,
369
+ size: buffer.byteLength,
370
+ type: mimeType,
371
+ };
372
+ }
373
+ else {
374
+ dataToStore[field.name] = { filename: file.name, size: buffer.byteLength, type: mimeType };
375
+ }
376
+ }
377
+ }
199
378
  // onBeforeFormSubmitSave hook
200
379
  const hookPayload = {
201
380
  formContentId: formContent.id,
@@ -273,7 +452,8 @@ export function registerFormRoutes(router, ctx) {
273
452
  router.post('/forms/:slug/drafts', async (req, params) => {
274
453
  const slug = params.slug;
275
454
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
276
- const formContent = await getFormBySlug(slug, siteId);
455
+ const publishedOnly = await resolvePublishedOnly(req);
456
+ const formContent = await getFormBySlug(slug, siteId, { publishedOnly });
277
457
  if (!formContent)
278
458
  return notFound('Form not found');
279
459
  let body;
@@ -324,7 +504,8 @@ export function registerFormRoutes(router, ctx) {
324
504
  const slug = params.slug;
325
505
  const token = params.token;
326
506
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
327
- const formContent = await getFormBySlug(slug, siteId);
507
+ const publishedOnly = await resolvePublishedOnly(req);
508
+ const formContent = await getFormBySlug(slug, siteId, { publishedOnly });
328
509
  if (!formContent)
329
510
  return notFound('Form not found');
330
511
  const formContentId = formContent.id;
@@ -356,6 +537,9 @@ export function registerFormRoutes(router, ctx) {
356
537
  return forbidden();
357
538
  const slug = params.slug;
358
539
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
540
+ const siteDenied = assertSiteAccess(auth.user, siteId);
541
+ if (siteDenied)
542
+ return siteDenied;
359
543
  const formContent = await getFormBySlug(slug, siteId);
360
544
  if (!formContent)
361
545
  return notFound('Form not found');
@@ -379,6 +563,9 @@ export function registerFormRoutes(router, ctx) {
379
563
  if (gate.error)
380
564
  return gate.error;
381
565
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
566
+ const siteDenied = assertSiteAccess(gate.user, siteId);
567
+ if (siteDenied)
568
+ return siteDenied;
382
569
  const counts = await listFormSubmissionCounts(db, siteId);
383
570
  return jsonOk(counts);
384
571
  });
@@ -388,6 +575,9 @@ export function registerFormRoutes(router, ctx) {
388
575
  if (gate.error)
389
576
  return gate.error;
390
577
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
578
+ const siteDenied = assertSiteAccess(gate.user, siteId);
579
+ if (siteDenied)
580
+ return siteDenied;
391
581
  const formContent = await getFormBySlug(params.slug, siteId);
392
582
  if (!formContent)
393
583
  return notFound('Form not found');
@@ -402,6 +592,9 @@ export function registerFormRoutes(router, ctx) {
402
592
  if (gate.error)
403
593
  return gate.error;
404
594
  const siteId = resolveSiteId(req, config, ctx.siteIdMap);
595
+ const siteDenied = assertSiteAccess(gate.user, siteId);
596
+ if (siteDenied)
597
+ return siteDenied;
405
598
  const formContent = await getFormBySlug(params.slug, siteId);
406
599
  if (!formContent)
407
600
  return notFound('Form not found');
@@ -1 +1 @@
1
- {"version":3,"file":"form-routes.js","sourceRoot":"","sources":["../../src/api/form-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-routes.js","sourceRoot":"","sources":["../../src/api/form-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"group-routes.d.ts","sourceRoot":"","sources":["../../src/api/group-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAA;AAgBjE,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;CACnB;AAeD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAuJhF"}
1
+ {"version":3,"file":"group-routes.d.ts","sourceRoot":"","sources":["../../src/api/group-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAA;AAiBjE,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;CACnB;AAeD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA2KhF"}
@@ -4,6 +4,7 @@ import { listGroups, getGroupById, createGroup, updateGroup, deleteGroup, addUse
4
4
  import { resolveAuth } from './auth.js';
5
5
  import { hasMinRole } from '../auth/roles.js';
6
6
  import { resolveSiteId } from '../db/site-queries.js';
7
+ import { assertSiteAccess } from './site-context.js';
7
8
  const createGroupSchema = z.object({
8
9
  name: z.string().min(1, 'Name is required'),
9
10
  type: z.enum(['public', 'private']).optional(),
@@ -32,6 +33,9 @@ export function registerGroupRoutes(router, ctx) {
32
33
  // The config `sites[0].id` is a human-readable slug (e.g. "default"), while
33
34
  // group rows store the site's DB UUID. Resolve so seeded groups are found.
34
35
  const siteId = (await resolveSiteId(db, requestedSiteId)) ?? requestedSiteId;
36
+ const siteDenied = assertSiteAccess(auth.user, siteId);
37
+ if (siteDenied)
38
+ return siteDenied;
35
39
  const groups = await listGroups(db, siteId);
36
40
  return jsonOk(groups);
37
41
  });
@@ -56,6 +60,9 @@ export function registerGroupRoutes(router, ctx) {
56
60
  const { name, type, defaultRole, siteId } = parsed.data;
57
61
  const requestedSiteId = siteId ?? config.sites[0].id;
58
62
  const resolvedSiteId = (await resolveSiteId(db, requestedSiteId)) ?? requestedSiteId;
63
+ const siteDenied = assertSiteAccess(auth.user, resolvedSiteId);
64
+ if (siteDenied)
65
+ return siteDenied;
59
66
  const group = await createGroup(db, {
60
67
  siteId: resolvedSiteId,
61
68
  name,
@@ -95,6 +102,13 @@ export function registerGroupRoutes(router, ctx) {
95
102
  return validationError(parsed.error.errors.map(e => ({ path: e.path.join('.'), message: e.message })));
96
103
  }
97
104
  const updateData = Object.fromEntries(Object.entries(parsed.data).filter(([, v]) => v !== undefined));
105
+ // #73: id-keyed mutation — authorize against the group's own site first.
106
+ const existing = await getGroupById(db, params.id);
107
+ if (!existing)
108
+ return notFound('Group not found');
109
+ const siteDenied = assertSiteAccess(auth.user, existing.siteId);
110
+ if (siteDenied)
111
+ return siteDenied;
98
112
  const updated = await updateGroup(db, params.id, updateData);
99
113
  if (!updated)
100
114
  return notFound('Group not found');
@@ -107,6 +121,13 @@ export function registerGroupRoutes(router, ctx) {
107
121
  return unauthorized();
108
122
  if (!hasMinRole(auth.user.role, 'siteAdmin'))
109
123
  return forbidden();
124
+ // #73: id-keyed mutation — authorize against the group's own site first.
125
+ const existing = await getGroupById(db, params.id);
126
+ if (!existing)
127
+ return notFound('Group not found');
128
+ const siteDenied = assertSiteAccess(auth.user, existing.siteId);
129
+ if (siteDenied)
130
+ return siteDenied;
110
131
  const deleted = await deleteGroup(db, params.id);
111
132
  if (!deleted)
112
133
  return notFound('Group not found');
@@ -135,6 +156,9 @@ export function registerGroupRoutes(router, ctx) {
135
156
  const group = await getGroupById(db, params.id);
136
157
  if (!group)
137
158
  return notFound('Group not found');
159
+ const siteDenied = assertSiteAccess(auth.user, group.siteId);
160
+ if (siteDenied)
161
+ return siteDenied;
138
162
  await addUserToGroup(db, params.userId, params.id);
139
163
  return jsonOk({ added: true });
140
164
  });
@@ -148,6 +172,9 @@ export function registerGroupRoutes(router, ctx) {
148
172
  const group = await getGroupById(db, params.id);
149
173
  if (!group)
150
174
  return notFound('Group not found');
175
+ const siteDenied = assertSiteAccess(auth.user, group.siteId);
176
+ if (siteDenied)
177
+ return siteDenied;
151
178
  await removeUserFromGroup(db, params.userId, params.id);
152
179
  return jsonOk({ removed: true });
153
180
  });
@@ -1 +1 @@
1
- {"version":3,"file":"group-routes.js","sourceRoot":"","sources":["../../src/api/group-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group-routes.js","sourceRoot":"","sources":["../../src/api/group-routes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ResourceBundles } from '../i18n/types.js';
2
+ import { type ResolveChangesetType } from '../db/changeset-queries.js';
2
3
  import type { KywiConfig } from '../config/types.js';
3
4
  import type { KywiDb } from '../db/client.js';
4
5
  import type { StorageProvider } from '../media/types.js';
@@ -62,6 +63,14 @@ export interface KywiApiOptions {
62
63
  }
63
64
  export interface KywiApiHandler {
64
65
  handle(req: Request, pathSegments: string[]): Promise<Response>;
66
+ /**
67
+ * The config-derived changeset type-resolver (#63). A host that starts an
68
+ * in-process scheduler has no access to the handler's contentTypeMap/
69
+ * customTableMap, so it cannot make scheduled changeset publishes round-trip
70
+ * custom fields on its own. Exposing the resolver lets a host wire it in:
71
+ * `startScheduler(db, { resolveType: handler.resolveChangesetType, … })`.
72
+ */
73
+ resolveChangesetType: ResolveChangesetType;
65
74
  }
66
75
  export declare function createKywiApiHandler(options: KywiApiOptions): Promise<KywiApiHandler>;
67
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA4BvD,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,oBAAoB,CAAA;AACrG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,mFAAmF;IACnF,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAChE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAob3F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
package/dist/api/index.js CHANGED
@@ -68,6 +68,7 @@ import { buildCustomFieldTable } from '../db/dynamic-schema.js';
68
68
  import { loadAdminFields } from '../db/schema-field-queries.js';
69
69
  import { loadAdminTypes } from '../db/content-type-queries.js';
70
70
  import { resolveSiteId as resolveSiteIdFromDb } from '../db/site-queries.js';
71
+ import { buildChangesetTypeResolver } from '../db/changeset-queries.js';
71
72
  export { Router } from './router.js';
72
73
  export * from './response.js';
73
74
  export * from './pagination.js';
@@ -166,6 +167,22 @@ export async function createKywiApiHandler(options) {
166
167
  await cacheProvider.invalidatePattern(`nav:${siteId}:*`);
167
168
  }
168
169
  });
170
+ // Unpublish fires its own dedicated event (afterUpdate no longer fires on
171
+ // unpublish), so mirror the afterUpdate invalidation here — otherwise the
172
+ // public site keeps serving the just-unpublished node from stale cache.
173
+ hookRegistry.on('content:afterUnpublish', async (payload) => {
174
+ const p = payload;
175
+ const siteId = String(p.content.siteId ?? '');
176
+ const id = String(p.content.id ?? '');
177
+ const slug = p.content.slug ? String(p.content.slug) : undefined;
178
+ if (siteId && id) {
179
+ await cacheProvider.delete(contentKey(siteId, id));
180
+ if (slug)
181
+ await cacheProvider.delete(contentSlugKey(siteId, slug));
182
+ await cacheProvider.invalidatePattern(`feed:${siteId}:*`);
183
+ await cacheProvider.invalidatePattern(`nav:${siteId}:*`);
184
+ }
185
+ });
169
186
  hookRegistry.on('content:afterDelete', async (payload) => {
170
187
  const p = payload;
171
188
  const siteId = String(p.content.siteId ?? '');
@@ -336,7 +353,7 @@ export async function createKywiApiHandler(options) {
336
353
  if (storage) {
337
354
  registerMediaRoutes(router, { config, db, authSecret, storage });
338
355
  }
339
- registerFormRoutes(router, { config, db, authSecret, siteIdMap });
356
+ registerFormRoutes(router, { config, db, authSecret, siteIdMap, ...(storage ? { storage } : {}) });
340
357
  registerSiteAdminRoutes(router, db, authSecret, hookRegistry);
341
358
  registerAdminFeaturesRoutes(router, { config, db, authSecret });
342
359
  registerDashboardRoutes(router, { config, db, authSecret, siteIdMap });
@@ -458,10 +475,13 @@ export async function createKywiApiHandler(options) {
458
475
  db,
459
476
  authSecret,
460
477
  defaultSiteId: config.sites[0]?.id,
478
+ contentTypeMap,
479
+ customTableMap,
461
480
  invalidateContent: invalidateContentCache,
462
481
  });
463
482
  // GAP-12-E: admin trigger for the background scheduler sweep (external cron).
464
- registerSchedulerRoutes(router, { db, authSecret });
483
+ // Maps let a scheduled changeset publish round-trip custom fields (#63).
484
+ registerSchedulerRoutes(router, { db, authSecret, contentTypeMap, customTableMap });
465
485
  // Password reset routes
466
486
  if (emailProvider) {
467
487
  registerPasswordResetRoutes(router, { config, db, emailProvider });
@@ -496,6 +516,9 @@ export async function createKywiApiHandler(options) {
496
516
  }
497
517
  return response;
498
518
  },
519
+ // Same live maps the changeset/scheduler routes use, so a host-started
520
+ // scheduler round-trips custom fields (#63) and reloads stay correct.
521
+ resolveChangesetType: buildChangesetTypeResolver(contentTypeMap, customTableMap),
499
522
  };
500
523
  }
501
524
  //# sourceMappingURL=index.js.map