@kywi-software/core 0.5.0 → 0.6.1

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 (311) hide show
  1. package/README.md +44 -0
  2. package/dist/admin/app.d.ts.map +1 -1
  3. package/dist/admin/app.js.map +1 -1
  4. package/dist/admin/field-components.d.ts.map +1 -1
  5. package/dist/admin/field-components.js +55 -0
  6. package/dist/admin/field-components.js.map +1 -1
  7. package/dist/admin/form-builder.js +10 -1
  8. package/dist/admin/form-builder.js.map +1 -1
  9. package/dist/admin/form-helpers.d.ts +1 -1
  10. package/dist/admin/form-helpers.d.ts.map +1 -1
  11. package/dist/admin/form-helpers.js +21 -0
  12. package/dist/admin/form-helpers.js.map +1 -1
  13. package/dist/admin/layout-editor/component-actions.d.ts +43 -1
  14. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  15. package/dist/admin/layout-editor/component-actions.js +59 -1
  16. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  17. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  18. package/dist/admin/layout-editor/editor-canvas.js +1 -1
  19. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  20. package/dist/admin/layout-editor/editor-state.d.ts +4 -0
  21. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  22. package/dist/admin/layout-editor/editor-state.js +17 -0
  23. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  24. package/dist/admin/layout-editor/index.d.ts +1 -1
  25. package/dist/admin/layout-editor/index.d.ts.map +1 -1
  26. package/dist/admin/layout-editor/index.js +1 -1
  27. package/dist/admin/layout-editor/index.js.map +1 -1
  28. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  29. package/dist/admin/layout-editor/layout-editor.js +95 -2
  30. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  31. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  32. package/dist/admin/layout-editor/overlay-shell.js +8 -0
  33. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  34. package/dist/admin/layout-editor/props-panel.d.ts +12 -2
  35. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  36. package/dist/admin/layout-editor/props-panel.js +30 -14
  37. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  38. package/dist/admin/layout-editor/section-overlay.d.ts +6 -1
  39. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  40. package/dist/admin/layout-editor/section-overlay.js +11 -2
  41. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  42. package/dist/admin/layout-editor/section-template-picker.d.ts +8 -1
  43. package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
  44. package/dist/admin/layout-editor/section-template-picker.js +31 -2
  45. package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
  46. package/dist/admin/registry.d.ts +6 -6
  47. package/dist/admin/registry.d.ts.map +1 -1
  48. package/dist/admin/server.d.ts +1 -0
  49. package/dist/admin/server.d.ts.map +1 -1
  50. package/dist/admin/server.js +7 -0
  51. package/dist/admin/server.js.map +1 -1
  52. package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -1
  53. package/dist/admin/surfaces/contentTypes/content-types-designer.js +12 -2
  54. package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -1
  55. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
  56. package/dist/admin/surfaces/dashboard/dashboard-index.js +23 -1
  57. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
  58. package/dist/admin/webhook-manager.d.ts.map +1 -1
  59. package/dist/admin/webhook-manager.js +1 -0
  60. package/dist/admin/webhook-manager.js.map +1 -1
  61. package/dist/api/admin-features-routes.d.ts.map +1 -1
  62. package/dist/api/admin-features-routes.js +7 -1
  63. package/dist/api/admin-features-routes.js.map +1 -1
  64. package/dist/api/audience-preview-routes.d.ts.map +1 -1
  65. package/dist/api/audience-preview-routes.js +20 -2
  66. package/dist/api/audience-preview-routes.js.map +1 -1
  67. package/dist/api/audience-routes.d.ts.map +1 -1
  68. package/dist/api/audience-routes.js +44 -3
  69. package/dist/api/audience-routes.js.map +1 -1
  70. package/dist/api/audience-runtime-routes.d.ts.map +1 -1
  71. package/dist/api/audience-runtime-routes.js +6 -2
  72. package/dist/api/audience-runtime-routes.js.map +1 -1
  73. package/dist/api/auth-routes.d.ts.map +1 -1
  74. package/dist/api/auth-routes.js +16 -0
  75. package/dist/api/auth-routes.js.map +1 -1
  76. package/dist/api/auth.d.ts.map +1 -1
  77. package/dist/api/auth.js +34 -1
  78. package/dist/api/auth.js.map +1 -1
  79. package/dist/api/bulk-routes.d.ts.map +1 -1
  80. package/dist/api/bulk-routes.js +44 -12
  81. package/dist/api/bulk-routes.js.map +1 -1
  82. package/dist/api/category-routes.d.ts.map +1 -1
  83. package/dist/api/category-routes.js +10 -1
  84. package/dist/api/category-routes.js.map +1 -1
  85. package/dist/api/changeset-routes.d.ts +9 -0
  86. package/dist/api/changeset-routes.d.ts.map +1 -1
  87. package/dist/api/changeset-routes.js +13 -2
  88. package/dist/api/changeset-routes.js.map +1 -1
  89. package/dist/api/comment-routes.d.ts.map +1 -1
  90. package/dist/api/comment-routes.js +27 -1
  91. package/dist/api/comment-routes.js.map +1 -1
  92. package/dist/api/component-routes.d.ts.map +1 -1
  93. package/dist/api/component-routes.js +16 -1
  94. package/dist/api/component-routes.js.map +1 -1
  95. package/dist/api/content-routes.d.ts.map +1 -1
  96. package/dist/api/content-routes.js +59 -20
  97. package/dist/api/content-routes.js.map +1 -1
  98. package/dist/api/content-schemas.d.ts.map +1 -1
  99. package/dist/api/content-schemas.js +39 -0
  100. package/dist/api/content-schemas.js.map +1 -1
  101. package/dist/api/content-type-routes.d.ts.map +1 -1
  102. package/dist/api/content-type-routes.js +25 -5
  103. package/dist/api/content-type-routes.js.map +1 -1
  104. package/dist/api/dashboard-routes.d.ts.map +1 -1
  105. package/dist/api/dashboard-routes.js +4 -1
  106. package/dist/api/dashboard-routes.js.map +1 -1
  107. package/dist/api/experiment-routes.d.ts.map +1 -1
  108. package/dist/api/experiment-routes.js +24 -2
  109. package/dist/api/experiment-routes.js.map +1 -1
  110. package/dist/api/feed-routes.d.ts +4 -4
  111. package/dist/api/feed-routes.d.ts.map +1 -1
  112. package/dist/api/feed-routes.js +12 -2
  113. package/dist/api/feed-routes.js.map +1 -1
  114. package/dist/api/form-routes.d.ts +18 -0
  115. package/dist/api/form-routes.d.ts.map +1 -1
  116. package/dist/api/form-routes.js +207 -14
  117. package/dist/api/form-routes.js.map +1 -1
  118. package/dist/api/graphql/handler.d.ts +1 -1
  119. package/dist/api/graphql/handler.d.ts.map +1 -1
  120. package/dist/api/graphql/handler.js +8 -1
  121. package/dist/api/graphql/handler.js.map +1 -1
  122. package/dist/api/graphql/resolvers.d.ts +15 -6
  123. package/dist/api/graphql/resolvers.d.ts.map +1 -1
  124. package/dist/api/graphql/resolvers.js +108 -9
  125. package/dist/api/graphql/resolvers.js.map +1 -1
  126. package/dist/api/graphql/schema.d.ts +1 -1
  127. package/dist/api/graphql/schema.d.ts.map +1 -1
  128. package/dist/api/graphql/schema.js +14 -3
  129. package/dist/api/graphql/schema.js.map +1 -1
  130. package/dist/api/group-routes.d.ts.map +1 -1
  131. package/dist/api/group-routes.js +27 -0
  132. package/dist/api/group-routes.js.map +1 -1
  133. package/dist/api/index.d.ts +9 -0
  134. package/dist/api/index.d.ts.map +1 -1
  135. package/dist/api/index.js +35 -4
  136. package/dist/api/index.js.map +1 -1
  137. package/dist/api/layout-routes.d.ts.map +1 -1
  138. package/dist/api/layout-routes.js +13 -1
  139. package/dist/api/layout-routes.js.map +1 -1
  140. package/dist/api/media-routes.d.ts.map +1 -1
  141. package/dist/api/media-routes.js +19 -0
  142. package/dist/api/media-routes.js.map +1 -1
  143. package/dist/api/scheduler-routes.d.ts +10 -0
  144. package/dist/api/scheduler-routes.d.ts.map +1 -1
  145. package/dist/api/scheduler-routes.js +13 -2
  146. package/dist/api/scheduler-routes.js.map +1 -1
  147. package/dist/api/search-routes.d.ts.map +1 -1
  148. package/dist/api/search-routes.js +20 -2
  149. package/dist/api/search-routes.js.map +1 -1
  150. package/dist/api/section-template-routes.d.ts.map +1 -1
  151. package/dist/api/section-template-routes.js +16 -1
  152. package/dist/api/section-template-routes.js.map +1 -1
  153. package/dist/api/site-context.d.ts +30 -1
  154. package/dist/api/site-context.d.ts.map +1 -1
  155. package/dist/api/site-context.js +41 -0
  156. package/dist/api/site-context.js.map +1 -1
  157. package/dist/api/tag-routes.d.ts.map +1 -1
  158. package/dist/api/tag-routes.js +10 -1
  159. package/dist/api/tag-routes.js.map +1 -1
  160. package/dist/api/translation-routes.d.ts.map +1 -1
  161. package/dist/api/translation-routes.js +19 -4
  162. package/dist/api/translation-routes.js.map +1 -1
  163. package/dist/api/user-routes.d.ts.map +1 -1
  164. package/dist/api/user-routes.js +13 -0
  165. package/dist/api/user-routes.js.map +1 -1
  166. package/dist/api/version-routes.d.ts.map +1 -1
  167. package/dist/api/version-routes.js +1 -0
  168. package/dist/api/version-routes.js.map +1 -1
  169. package/dist/api/webhook-routes.d.ts.map +1 -1
  170. package/dist/api/webhook-routes.js +31 -2
  171. package/dist/api/webhook-routes.js.map +1 -1
  172. package/dist/api/workflow-routes.d.ts.map +1 -1
  173. package/dist/api/workflow-routes.js +45 -1
  174. package/dist/api/workflow-routes.js.map +1 -1
  175. package/dist/audiences/collectors/index.d.ts +1 -0
  176. package/dist/audiences/collectors/index.d.ts.map +1 -1
  177. package/dist/audiences/collectors/index.js +1 -0
  178. package/dist/audiences/collectors/index.js.map +1 -1
  179. package/dist/audiences/collectors/pinned-audience.d.ts +17 -0
  180. package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -0
  181. package/dist/audiences/collectors/pinned-audience.js +22 -0
  182. package/dist/audiences/collectors/pinned-audience.js.map +1 -0
  183. package/dist/audiences/cookies.d.ts +1 -0
  184. package/dist/audiences/cookies.d.ts.map +1 -1
  185. package/dist/audiences/cookies.js +4 -0
  186. package/dist/audiences/cookies.js.map +1 -1
  187. package/dist/audiences/engine.d.ts.map +1 -1
  188. package/dist/audiences/engine.js +10 -2
  189. package/dist/audiences/engine.js.map +1 -1
  190. package/dist/audiences/index.d.ts +1 -0
  191. package/dist/audiences/index.d.ts.map +1 -1
  192. package/dist/audiences/index.js +4 -0
  193. package/dist/audiences/index.js.map +1 -1
  194. package/dist/audiences/utm-persistence.d.ts +46 -0
  195. package/dist/audiences/utm-persistence.d.ts.map +1 -0
  196. package/dist/audiences/utm-persistence.js +68 -0
  197. package/dist/audiences/utm-persistence.js.map +1 -0
  198. package/dist/auth/tokens.d.ts.map +1 -1
  199. package/dist/auth/tokens.js +14 -1
  200. package/dist/auth/tokens.js.map +1 -1
  201. package/dist/config/types.d.ts +29 -2
  202. package/dist/config/types.d.ts.map +1 -1
  203. package/dist/config/types.js.map +1 -1
  204. package/dist/db/bulk-queries.d.ts +8 -0
  205. package/dist/db/bulk-queries.d.ts.map +1 -1
  206. package/dist/db/bulk-queries.js +16 -0
  207. package/dist/db/bulk-queries.js.map +1 -1
  208. package/dist/db/changeset-queries.d.ts +27 -1
  209. package/dist/db/changeset-queries.d.ts.map +1 -1
  210. package/dist/db/changeset-queries.js +56 -2
  211. package/dist/db/changeset-queries.js.map +1 -1
  212. package/dist/db/content-permission-dedupe.d.ts +24 -0
  213. package/dist/db/content-permission-dedupe.d.ts.map +1 -0
  214. package/dist/db/content-permission-dedupe.js +69 -0
  215. package/dist/db/content-permission-dedupe.js.map +1 -0
  216. package/dist/db/content-permission-queries.d.ts +8 -0
  217. package/dist/db/content-permission-queries.d.ts.map +1 -1
  218. package/dist/db/content-permission-queries.js +29 -1
  219. package/dist/db/content-permission-queries.js.map +1 -1
  220. package/dist/db/content-queries.d.ts +7 -0
  221. package/dist/db/content-queries.d.ts.map +1 -1
  222. package/dist/db/content-queries.js +9 -0
  223. package/dist/db/content-queries.js.map +1 -1
  224. package/dist/db/content-type-queries.d.ts.map +1 -1
  225. package/dist/db/content-type-queries.js +3 -1
  226. package/dist/db/content-type-queries.js.map +1 -1
  227. package/dist/db/dynamic-schema.d.ts.map +1 -1
  228. package/dist/db/dynamic-schema.js +1 -0
  229. package/dist/db/dynamic-schema.js.map +1 -1
  230. package/dist/db/index.d.ts +1 -0
  231. package/dist/db/index.d.ts.map +1 -1
  232. package/dist/db/index.js +3 -0
  233. package/dist/db/index.js.map +1 -1
  234. package/dist/db/schema-apply.d.ts.map +1 -1
  235. package/dist/db/schema-apply.js +1 -0
  236. package/dist/db/schema-apply.js.map +1 -1
  237. package/dist/db/schema-field-queries.d.ts +2 -0
  238. package/dist/db/schema-field-queries.d.ts.map +1 -1
  239. package/dist/db/schema-field-queries.js +4 -0
  240. package/dist/db/schema-field-queries.js.map +1 -1
  241. package/dist/db/search-queries.d.ts +7 -0
  242. package/dist/db/search-queries.d.ts.map +1 -1
  243. package/dist/db/search-queries.js +3 -0
  244. package/dist/db/search-queries.js.map +1 -1
  245. package/dist/db/site-membership-queries.d.ts +6 -0
  246. package/dist/db/site-membership-queries.d.ts.map +1 -1
  247. package/dist/db/site-membership-queries.js +9 -0
  248. package/dist/db/site-membership-queries.js.map +1 -1
  249. package/dist/db/user-search.d.ts +8 -0
  250. package/dist/db/user-search.d.ts.map +1 -1
  251. package/dist/db/user-search.js +14 -8
  252. package/dist/db/user-search.js.map +1 -1
  253. package/dist/db/workflow-queries.d.ts +1 -0
  254. package/dist/db/workflow-queries.d.ts.map +1 -1
  255. package/dist/db/workflow-queries.js +24 -0
  256. package/dist/db/workflow-queries.js.map +1 -1
  257. package/dist/experiments/engine.d.ts.map +1 -1
  258. package/dist/experiments/engine.js +7 -2
  259. package/dist/experiments/engine.js.map +1 -1
  260. package/dist/forms/types.d.ts +5 -0
  261. package/dist/forms/types.d.ts.map +1 -1
  262. package/dist/forms/validation.d.ts +20 -0
  263. package/dist/forms/validation.d.ts.map +1 -1
  264. package/dist/forms/validation.js +45 -2
  265. package/dist/forms/validation.js.map +1 -1
  266. package/dist/hooks/ax-invalidation.d.ts.map +1 -1
  267. package/dist/hooks/ax-invalidation.js +1 -0
  268. package/dist/hooks/ax-invalidation.js.map +1 -1
  269. package/dist/hooks/dispatch.d.ts +1 -0
  270. package/dist/hooks/dispatch.d.ts.map +1 -1
  271. package/dist/hooks/dispatch.js +6 -0
  272. package/dist/hooks/dispatch.js.map +1 -1
  273. package/dist/hooks/webhook-dispatch.d.ts.map +1 -1
  274. package/dist/hooks/webhook-dispatch.js +1 -0
  275. package/dist/hooks/webhook-dispatch.js.map +1 -1
  276. package/dist/layout/index.d.ts +1 -1
  277. package/dist/layout/index.d.ts.map +1 -1
  278. package/dist/layout/index.js.map +1 -1
  279. package/dist/layout/renderer.d.ts +15 -2
  280. package/dist/layout/renderer.d.ts.map +1 -1
  281. package/dist/layout/renderer.js +49 -3
  282. package/dist/layout/renderer.js.map +1 -1
  283. package/dist/layout/types.d.ts +9 -0
  284. package/dist/layout/types.d.ts.map +1 -1
  285. package/dist/layout/types.js +5 -0
  286. package/dist/layout/types.js.map +1 -1
  287. package/dist/schema/base.d.ts +74 -0
  288. package/dist/schema/base.d.ts.map +1 -1
  289. package/dist/schema/base.js +16 -0
  290. package/dist/schema/base.js.map +1 -1
  291. package/dist/schema/content-permissions.d.ts.map +1 -1
  292. package/dist/schema/content-permissions.js +23 -2
  293. package/dist/schema/content-permissions.js.map +1 -1
  294. package/dist/schema/mapper.d.ts.map +1 -1
  295. package/dist/schema/mapper.js +1 -0
  296. package/dist/schema/mapper.js.map +1 -1
  297. package/dist/schema/mysql-tables.d.ts +68 -0
  298. package/dist/schema/mysql-tables.d.ts.map +1 -1
  299. package/dist/schema/mysql-tables.js +7 -0
  300. package/dist/schema/mysql-tables.js.map +1 -1
  301. package/dist/scope/kywi-form.d.ts.map +1 -1
  302. package/dist/scope/kywi-form.js +51 -6
  303. package/dist/scope/kywi-form.js.map +1 -1
  304. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  305. package/dist/scope/kywi-wizard-form.js +29 -3
  306. package/dist/scope/kywi-wizard-form.js.map +1 -1
  307. package/dist/versioning/scheduler.d.ts +10 -2
  308. package/dist/versioning/scheduler.d.ts.map +1 -1
  309. package/dist/versioning/scheduler.js +13 -5
  310. package/dist/versioning/scheduler.js.map +1 -1
  311. package/package.json +12 -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,3 +1,3 @@
1
1
  import type { GraphQLSchema } from 'graphql';
2
- export declare function handleGraphQLRequest(schema: GraphQLSchema, resolvers: Record<string, Function>, req: Request): Promise<Response>;
2
+ export declare function handleGraphQLRequest(schema: GraphQLSchema, resolvers: Record<string, Function>, req: Request, context?: unknown): Promise<Response>;
3
3
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACnC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,QAAQ,CAAC,CA4CnB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACnC,GAAG,EAAE,OAAO,EAMZ,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,QAAQ,CAAC,CA6CnB"}
@@ -1,5 +1,11 @@
1
1
  import { graphql, defaultFieldResolver } from 'graphql';
2
- export async function handleGraphQLRequest(schema, resolvers, req) {
2
+ export async function handleGraphQLRequest(schema, resolvers, req,
3
+ // Per-request context (the resolved auth user) passed to graphql-js as
4
+ // `contextValue`, reaching every resolver as its third parameter. The route
5
+ // populates it from `resolveAuth`; a missing/invalid Authorization header
6
+ // yields `{ user: null }` (anonymous). Optional so existing callers that pass
7
+ // no context are treated as anonymous — resolvers fail closed on `undefined`.
8
+ context) {
3
9
  let body;
4
10
  try {
5
11
  body = await req.json();
@@ -15,6 +21,7 @@ export async function handleGraphQLRequest(schema, resolvers, req) {
15
21
  source: body.query,
16
22
  variableValues: body.variables,
17
23
  rootValue: resolvers,
24
+ contextValue: context,
18
25
  // The Query resolvers live on `rootValue`, keyed by field name, and are
19
26
  // written with the standard `(source, args, context, info)` field-resolver
20
27
  // signature. graphql-js's default field resolver would instead invoke a
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/api/graphql/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGvD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,SAAmC,EACnC,GAAY;IAEZ,IAAI,IAA6D,CAAA;IACjE,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6D,CAAA;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,KAAK;QAClB,cAAc,EAAE,IAAI,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS;QACpB,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,6EAA6E;QAC7E,aAAa,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAI,MAAqD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrF,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,OAAQ,IAAqC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC5E,CAAC;YACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC1D,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACjC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/api/graphql/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGvD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,SAAmC,EACnC,GAAY;AACZ,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,OAAiB;IAEjB,IAAI,IAA6D,CAAA;IACjE,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6D,CAAA;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,KAAK;QAClB,cAAc,EAAE,IAAI,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,OAAO;QACrB,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,6EAA6E;QAC7E,aAAa,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAI,MAAqD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrF,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,OAAQ,IAAqC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC5E,CAAC;YACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC1D,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACjC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;AACJ,CAAC"}
@@ -1,26 +1,35 @@
1
1
  import type { KywiDb } from '../../db/client.js';
2
- import type { KywiConfig } from '../../config/types.js';
2
+ import type { KywiConfig, UserContext } from '../../config/types.js';
3
+ /**
4
+ * Per-request GraphQL context, passed to graphql-js as `contextValue` and
5
+ * reaching resolvers as their third parameter. `user` is the caller resolved
6
+ * from the Authorization header (null = anonymous). Task 2 (#84) builds on this
7
+ * shape — keep it stable.
8
+ */
9
+ export interface GraphQLContext {
10
+ user: UserContext | null;
11
+ }
3
12
  export declare function createResolvers(db: KywiDb, config: KywiConfig): {
4
13
  content: (_: unknown, args: {
5
14
  id: string;
6
- }) => Promise<import("../../db/content-queries.js").ContentWithCustomFields | null>;
15
+ }, ctx: GraphQLContext) => Promise<import("../../db/content-queries.js").ContentWithCustomFields | null>;
7
16
  contentBySlug: (_: unknown, args: {
8
17
  slug: string;
9
18
  siteId: string;
10
- }) => Promise<import("../../db/content-queries.js").ContentWithCustomFields | null>;
19
+ }, ctx: GraphQLContext) => Promise<import("../../db/content-queries.js").ContentWithCustomFields | null>;
11
20
  contentList: (_: unknown, args: {
12
21
  contentType: string;
13
22
  siteId: string;
14
23
  limit?: number;
15
24
  page?: number;
16
25
  status?: string;
17
- }) => Promise<import("../../db/content-queries.js").ContentWithCustomFields[]>;
26
+ }, ctx: GraphQLContext) => Promise<import("../../db/content-queries.js").ContentWithCustomFields[]>;
18
27
  search: (_: unknown, args: {
19
28
  query: string;
20
29
  siteId: string;
21
30
  contentType?: string;
22
31
  limit?: number;
23
- }) => Promise<import("../../db/search-queries.js").SearchResult[]>;
32
+ }, ctx: GraphQLContext) => Promise<import("../../db/search-queries.js").SearchResult[]>;
24
33
  categories: (_: unknown, args: {
25
34
  siteId: string;
26
35
  }) => Promise<{
@@ -39,7 +48,7 @@ export declare function createResolvers(db: KywiDb, config: KywiConfig): {
39
48
  }[]>;
40
49
  nav: (_: unknown, args: {
41
50
  siteId: string;
42
- }) => Promise<import("../../db/tree-queries.js").NavContentRow[]>;
51
+ }, ctx: GraphQLContext) => Promise<import("../../db/tree-queries.js").NavContentRow[]>;
43
52
  media: (_: unknown, args: {
44
53
  id: string;
45
54
  }) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAMvD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;iBAEvC,OAAO,QAAQ;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;uBAGvB,OAAO,QAAQ;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;qBAInE,OAAO,QACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;gBAmB1F,OAAO,QACJ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;oBAUzD,OAAO,QAAQ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;aAGxC,OAAO,QAAQ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;eAG/B,OAAO,QAAQ;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;EAOjD"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/resolvers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAOpE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CACzB;AAqDD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;iBAEvC,OAAO,QAAQ;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,OAAO,cAAc;uBAYhE,OAAO,QACJ;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,OACjC,cAAc;qBAUhB,OAAO,QACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,OACxF,cAAc;gBA0BhB,OAAO,QACJ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,OACxE,cAAc;oBA8BC,OAAO,QAAQ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;aAGxC,OAAO,QAAQ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,OAAO,cAAc;eAUpD,OAAO,QAAQ;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;EASjD"}