@kywi-software/core 0.2.0 → 0.3.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 (364) hide show
  1. package/README.md +57 -2
  2. package/dist/admin/app.d.ts +10 -1
  3. package/dist/admin/app.d.ts.map +1 -1
  4. package/dist/admin/app.js +2 -2
  5. package/dist/admin/app.js.map +1 -1
  6. package/dist/admin/approval-queue.d.ts +3 -1
  7. package/dist/admin/approval-queue.d.ts.map +1 -1
  8. package/dist/admin/approval-queue.js +2 -2
  9. package/dist/admin/approval-queue.js.map +1 -1
  10. package/dist/admin/audience-list.d.ts.map +1 -1
  11. package/dist/admin/audience-list.js +9 -1
  12. package/dist/admin/audience-list.js.map +1 -1
  13. package/dist/admin/chrome.d.ts +7 -1
  14. package/dist/admin/chrome.d.ts.map +1 -1
  15. package/dist/admin/chrome.js +2 -1
  16. package/dist/admin/chrome.js.map +1 -1
  17. package/dist/admin/content-editor-api.d.ts +27 -1
  18. package/dist/admin/content-editor-api.d.ts.map +1 -1
  19. package/dist/admin/content-editor-api.js +60 -2
  20. package/dist/admin/content-editor-api.js.map +1 -1
  21. package/dist/admin/content-form.d.ts +62 -6
  22. package/dist/admin/content-form.d.ts.map +1 -1
  23. package/dist/admin/content-form.js +118 -13
  24. package/dist/admin/content-form.js.map +1 -1
  25. package/dist/admin/content-permissions-tab.d.ts +13 -0
  26. package/dist/admin/content-permissions-tab.d.ts.map +1 -0
  27. package/dist/admin/content-permissions-tab.js +90 -0
  28. package/dist/admin/content-permissions-tab.js.map +1 -0
  29. package/dist/admin/context.d.ts +8 -0
  30. package/dist/admin/context.d.ts.map +1 -1
  31. package/dist/admin/context.js.map +1 -1
  32. package/dist/admin/feed-builder.d.ts.map +1 -1
  33. package/dist/admin/feed-builder.js +20 -1
  34. package/dist/admin/feed-builder.js.map +1 -1
  35. package/dist/admin/field-components.d.ts.map +1 -1
  36. package/dist/admin/field-components.js +26 -1
  37. package/dist/admin/field-components.js.map +1 -1
  38. package/dist/admin/form-builder.js +6 -1
  39. package/dist/admin/form-builder.js.map +1 -1
  40. package/dist/admin/form-helpers.d.ts.map +1 -1
  41. package/dist/admin/form-helpers.js +2 -0
  42. package/dist/admin/form-helpers.js.map +1 -1
  43. package/dist/admin/kywi-logo.d.ts +21 -0
  44. package/dist/admin/kywi-logo.d.ts.map +1 -0
  45. package/dist/admin/kywi-logo.js +123 -0
  46. package/dist/admin/kywi-logo.js.map +1 -0
  47. package/dist/admin/layout-editor/component-actions.d.ts +18 -0
  48. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  49. package/dist/admin/layout-editor/component-actions.js +19 -0
  50. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  51. package/dist/admin/layout-editor/component-picker-field.d.ts +20 -0
  52. package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -0
  53. package/dist/admin/layout-editor/component-picker-field.js +16 -0
  54. package/dist/admin/layout-editor/component-picker-field.js.map +1 -0
  55. package/dist/admin/layout-editor/drag-utils.d.ts +48 -0
  56. package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
  57. package/dist/admin/layout-editor/drag-utils.js +43 -0
  58. package/dist/admin/layout-editor/drag-utils.js.map +1 -1
  59. package/dist/admin/layout-editor/editor-canvas.d.ts +9 -1
  60. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  61. package/dist/admin/layout-editor/editor-canvas.js +41 -15
  62. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  63. package/dist/admin/layout-editor/editor-state.d.ts +9 -1
  64. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  65. package/dist/admin/layout-editor/editor-state.js +34 -0
  66. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  67. package/dist/admin/layout-editor/editor.css +83 -0
  68. package/dist/admin/layout-editor/form-picker-field.d.ts +17 -0
  69. package/dist/admin/layout-editor/form-picker-field.d.ts.map +1 -0
  70. package/dist/admin/layout-editor/form-picker-field.js +35 -0
  71. package/dist/admin/layout-editor/form-picker-field.js.map +1 -0
  72. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  73. package/dist/admin/layout-editor/layout-editor.js +95 -28
  74. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  75. package/dist/admin/layout-editor/mode-toggle.d.ts.map +1 -1
  76. package/dist/admin/layout-editor/mode-toggle.js +1 -1
  77. package/dist/admin/layout-editor/mode-toggle.js.map +1 -1
  78. package/dist/admin/layout-editor/module-overlay.d.ts +10 -1
  79. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  80. package/dist/admin/layout-editor/module-overlay.js +3 -3
  81. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  82. package/dist/admin/layout-editor/props-panel.d.ts +10 -1
  83. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  84. package/dist/admin/layout-editor/props-panel.js +25 -2
  85. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  86. package/dist/admin/layout-editor/section-insert-line.d.ts.map +1 -1
  87. package/dist/admin/layout-editor/section-insert-line.js +1 -1
  88. package/dist/admin/layout-editor/section-insert-line.js.map +1 -1
  89. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  90. package/dist/admin/layout-editor/section-overlay.js +1 -1
  91. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  92. package/dist/admin/layout-editor/section-template-picker.d.ts +9 -1
  93. package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
  94. package/dist/admin/layout-editor/section-template-picker.js +45 -2
  95. package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
  96. package/dist/admin/registry.d.ts.map +1 -1
  97. package/dist/admin/registry.js +11 -0
  98. package/dist/admin/registry.js.map +1 -1
  99. package/dist/admin/server.d.ts +15 -2
  100. package/dist/admin/server.d.ts.map +1 -1
  101. package/dist/admin/server.js +37 -1
  102. package/dist/admin/server.js.map +1 -1
  103. package/dist/admin/shell.d.ts.map +1 -1
  104. package/dist/admin/shell.js +62 -3
  105. package/dist/admin/shell.js.map +1 -1
  106. package/dist/admin/styles/admin.css +105 -27
  107. package/dist/admin/surface-matcher.d.ts +27 -0
  108. package/dist/admin/surface-matcher.d.ts.map +1 -1
  109. package/dist/admin/surface-matcher.js +11 -0
  110. package/dist/admin/surface-matcher.js.map +1 -1
  111. package/dist/admin/surfaces/approvals/approvals-data.d.ts +29 -9
  112. package/dist/admin/surfaces/approvals/approvals-data.d.ts.map +1 -1
  113. package/dist/admin/surfaces/approvals/approvals-data.js +65 -22
  114. package/dist/admin/surfaces/approvals/approvals-data.js.map +1 -1
  115. package/dist/admin/surfaces/approvals/approvals-index.d.ts.map +1 -1
  116. package/dist/admin/surfaces/approvals/approvals-index.js +47 -14
  117. package/dist/admin/surfaces/approvals/approvals-index.js.map +1 -1
  118. package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -1
  119. package/dist/admin/surfaces/content/content-edit.js +34 -8
  120. package/dist/admin/surfaces/content/content-edit.js.map +1 -1
  121. package/dist/admin/surfaces/content/content-index.d.ts.map +1 -1
  122. package/dist/admin/surfaces/content/content-index.js +29 -2
  123. package/dist/admin/surfaces/content/content-index.js.map +1 -1
  124. package/dist/admin/surfaces/content/content-new.d.ts.map +1 -1
  125. package/dist/admin/surfaces/content/content-new.js +6 -4
  126. package/dist/admin/surfaces/content/content-new.js.map +1 -1
  127. package/dist/admin/surfaces/contentTree/content-tree.d.ts.map +1 -1
  128. package/dist/admin/surfaces/contentTree/content-tree.js +25 -2
  129. package/dist/admin/surfaces/contentTree/content-tree.js.map +1 -1
  130. package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -1
  131. package/dist/admin/surfaces/contentTypes/content-types-designer.js +78 -47
  132. package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -1
  133. package/dist/admin/surfaces/feeds/feed-editor.d.ts.map +1 -1
  134. package/dist/admin/surfaces/feeds/feed-editor.js +21 -4
  135. package/dist/admin/surfaces/feeds/feed-editor.js.map +1 -1
  136. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
  137. package/dist/admin/surfaces/layouts/layout-editor-client.js +7 -4
  138. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
  139. package/dist/admin/surfaces/login.d.ts.map +1 -1
  140. package/dist/admin/surfaces/login.js +2 -1
  141. package/dist/admin/surfaces/login.js.map +1 -1
  142. package/dist/admin/surfaces/media/media-client.d.ts.map +1 -1
  143. package/dist/admin/surfaces/media/media-client.js +10 -2
  144. package/dist/admin/surfaces/media/media-client.js.map +1 -1
  145. package/dist/admin/surfaces/settings/settings-site.d.ts.map +1 -1
  146. package/dist/admin/surfaces/settings/settings-site.js +39 -2
  147. package/dist/admin/surfaces/settings/settings-site.js.map +1 -1
  148. package/dist/admin/surfaces/settings/settings-sites.js +18 -0
  149. package/dist/admin/surfaces/settings/settings-sites.js.map +1 -1
  150. package/dist/admin/surfaces/trash/trash-index.d.ts.map +1 -1
  151. package/dist/admin/surfaces/trash/trash-index.js +45 -8
  152. package/dist/admin/surfaces/trash/trash-index.js.map +1 -1
  153. package/dist/admin/surfaces/users/users-data.d.ts +11 -0
  154. package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
  155. package/dist/admin/surfaces/users/users-data.js +20 -1
  156. package/dist/admin/surfaces/users/users-data.js.map +1 -1
  157. package/dist/admin/surfaces/webServices/web-services-data.d.ts +11 -1
  158. package/dist/admin/surfaces/webServices/web-services-data.d.ts.map +1 -1
  159. package/dist/admin/surfaces/webServices/web-services-data.js +13 -0
  160. package/dist/admin/surfaces/webServices/web-services-data.js.map +1 -1
  161. package/dist/admin/surfaces/webServices/webhooks.d.ts +3 -0
  162. package/dist/admin/surfaces/webServices/webhooks.d.ts.map +1 -0
  163. package/dist/admin/surfaces/webServices/webhooks.js +69 -0
  164. package/dist/admin/surfaces/webServices/webhooks.js.map +1 -0
  165. package/dist/admin/webhook-manager.d.ts +32 -0
  166. package/dist/admin/webhook-manager.d.ts.map +1 -0
  167. package/dist/admin/webhook-manager.js +62 -0
  168. package/dist/admin/webhook-manager.js.map +1 -0
  169. package/dist/api/admin-features-routes.d.ts.map +1 -1
  170. package/dist/api/admin-features-routes.js +30 -0
  171. package/dist/api/admin-features-routes.js.map +1 -1
  172. package/dist/api/api-key-routes.d.ts.map +1 -1
  173. package/dist/api/api-key-routes.js +6 -1
  174. package/dist/api/api-key-routes.js.map +1 -1
  175. package/dist/api/auth.d.ts +8 -0
  176. package/dist/api/auth.d.ts.map +1 -1
  177. package/dist/api/auth.js +11 -1
  178. package/dist/api/auth.js.map +1 -1
  179. package/dist/api/comment-routes.d.ts.map +1 -1
  180. package/dist/api/comment-routes.js +102 -47
  181. package/dist/api/comment-routes.js.map +1 -1
  182. package/dist/api/config-routes.d.ts +10 -2
  183. package/dist/api/config-routes.d.ts.map +1 -1
  184. package/dist/api/config-routes.js +46 -25
  185. package/dist/api/config-routes.js.map +1 -1
  186. package/dist/api/content-routes.d.ts.map +1 -1
  187. package/dist/api/content-routes.js +41 -0
  188. package/dist/api/content-routes.js.map +1 -1
  189. package/dist/api/content-schemas.d.ts.map +1 -1
  190. package/dist/api/content-schemas.js +34 -1
  191. package/dist/api/content-schemas.js.map +1 -1
  192. package/dist/api/content-type-routes.d.ts.map +1 -1
  193. package/dist/api/content-type-routes.js +58 -3
  194. package/dist/api/content-type-routes.js.map +1 -1
  195. package/dist/api/feed-routes.d.ts +180 -0
  196. package/dist/api/feed-routes.d.ts.map +1 -1
  197. package/dist/api/feed-routes.js +10 -2
  198. package/dist/api/feed-routes.js.map +1 -1
  199. package/dist/api/form-routes.d.ts +6 -0
  200. package/dist/api/form-routes.d.ts.map +1 -1
  201. package/dist/api/form-routes.js +93 -14
  202. package/dist/api/form-routes.js.map +1 -1
  203. package/dist/api/graphql/resolvers.d.ts +4 -4
  204. package/dist/api/index.d.ts.map +1 -1
  205. package/dist/api/index.js +12 -1
  206. package/dist/api/index.js.map +1 -1
  207. package/dist/api/media-routes.d.ts.map +1 -1
  208. package/dist/api/media-routes.js +18 -1
  209. package/dist/api/media-routes.js.map +1 -1
  210. package/dist/api/webhook-routes.d.ts.map +1 -1
  211. package/dist/api/webhook-routes.js +19 -2
  212. package/dist/api/webhook-routes.js.map +1 -1
  213. package/dist/api/workflow-routes.d.ts.map +1 -1
  214. package/dist/api/workflow-routes.js +163 -4
  215. package/dist/api/workflow-routes.js.map +1 -1
  216. package/dist/auth/roles.d.ts +28 -0
  217. package/dist/auth/roles.d.ts.map +1 -1
  218. package/dist/auth/roles.js +49 -0
  219. package/dist/auth/roles.js.map +1 -1
  220. package/dist/config/reserved-field-names.d.ts +29 -0
  221. package/dist/config/reserved-field-names.d.ts.map +1 -0
  222. package/dist/config/reserved-field-names.js +59 -0
  223. package/dist/config/reserved-field-names.js.map +1 -0
  224. package/dist/config/types.d.ts +31 -2
  225. package/dist/config/types.d.ts.map +1 -1
  226. package/dist/config/types.js.map +1 -1
  227. package/dist/db/analytics-queries.d.ts +1 -1
  228. package/dist/db/api-key-queries.d.ts +7 -2
  229. package/dist/db/api-key-queries.d.ts.map +1 -1
  230. package/dist/db/api-key-queries.js +8 -2
  231. package/dist/db/api-key-queries.js.map +1 -1
  232. package/dist/db/apply-snapshot.d.ts +58 -0
  233. package/dist/db/apply-snapshot.d.ts.map +1 -0
  234. package/dist/db/apply-snapshot.js +142 -0
  235. package/dist/db/apply-snapshot.js.map +1 -0
  236. package/dist/db/audit-queries.d.ts +3 -3
  237. package/dist/db/category-queries.d.ts +3 -3
  238. package/dist/db/changeset-audit-queries.d.ts +2 -2
  239. package/dist/db/changeset-queries.d.ts +5 -5
  240. package/dist/db/changeset-queries.d.ts.map +1 -1
  241. package/dist/db/changeset-queries.js +24 -7
  242. package/dist/db/changeset-queries.js.map +1 -1
  243. package/dist/db/content-queries.d.ts +6 -0
  244. package/dist/db/content-queries.d.ts.map +1 -1
  245. package/dist/db/content-queries.js +8 -0
  246. package/dist/db/content-queries.js.map +1 -1
  247. package/dist/db/content-type-queries.d.ts +20 -0
  248. package/dist/db/content-type-queries.d.ts.map +1 -1
  249. package/dist/db/content-type-queries.js +32 -0
  250. package/dist/db/content-type-queries.js.map +1 -1
  251. package/dist/db/dashboard-queries.d.ts.map +1 -1
  252. package/dist/db/dashboard-queries.js +5 -1
  253. package/dist/db/dashboard-queries.js.map +1 -1
  254. package/dist/db/dynamic-schema.d.ts.map +1 -1
  255. package/dist/db/dynamic-schema.js +2 -0
  256. package/dist/db/dynamic-schema.js.map +1 -1
  257. package/dist/db/extension-queries.d.ts +8 -8
  258. package/dist/db/feed-queries.d.ts +3 -3
  259. package/dist/db/index.d.ts +3 -0
  260. package/dist/db/index.d.ts.map +1 -1
  261. package/dist/db/index.js +7 -0
  262. package/dist/db/index.js.map +1 -1
  263. package/dist/db/media-queries.d.ts +31 -7
  264. package/dist/db/media-queries.d.ts.map +1 -1
  265. package/dist/db/media-queries.js +13 -1
  266. package/dist/db/media-queries.js.map +1 -1
  267. package/dist/db/membership-dedupe.d.ts +26 -0
  268. package/dist/db/membership-dedupe.d.ts.map +1 -0
  269. package/dist/db/membership-dedupe.js +68 -0
  270. package/dist/db/membership-dedupe.js.map +1 -0
  271. package/dist/db/revision-queries.d.ts +122 -0
  272. package/dist/db/revision-queries.d.ts.map +1 -0
  273. package/dist/db/revision-queries.js +213 -0
  274. package/dist/db/revision-queries.js.map +1 -0
  275. package/dist/db/schema-apply.d.ts +8 -0
  276. package/dist/db/schema-apply.d.ts.map +1 -1
  277. package/dist/db/schema-apply.js +17 -0
  278. package/dist/db/schema-apply.js.map +1 -1
  279. package/dist/db/schema-field-queries.d.ts +2 -0
  280. package/dist/db/schema-field-queries.d.ts.map +1 -1
  281. package/dist/db/schema-field-queries.js +4 -0
  282. package/dist/db/schema-field-queries.js.map +1 -1
  283. package/dist/db/site-plugin-queries.d.ts +2 -2
  284. package/dist/db/user-queries.d.ts +12 -0
  285. package/dist/db/user-queries.d.ts.map +1 -1
  286. package/dist/db/user-queries.js +18 -4
  287. package/dist/db/user-queries.js.map +1 -1
  288. package/dist/db/version-queries.d.ts +37 -0
  289. package/dist/db/version-queries.d.ts.map +1 -1
  290. package/dist/db/version-queries.js +36 -0
  291. package/dist/db/version-queries.js.map +1 -1
  292. package/dist/db/webhook-queries.d.ts +27 -5
  293. package/dist/db/webhook-queries.d.ts.map +1 -1
  294. package/dist/db/webhook-queries.js +17 -0
  295. package/dist/db/webhook-queries.js.map +1 -1
  296. package/dist/db/workflow-queries.d.ts +2 -2
  297. package/dist/experiments/schema.d.ts +1 -1
  298. package/dist/hooks/index.d.ts +1 -1
  299. package/dist/hooks/index.d.ts.map +1 -1
  300. package/dist/hooks/index.js +1 -1
  301. package/dist/hooks/index.js.map +1 -1
  302. package/dist/hooks/webhook-retry.d.ts +22 -1
  303. package/dist/hooks/webhook-retry.d.ts.map +1 -1
  304. package/dist/hooks/webhook-retry.js +38 -1
  305. package/dist/hooks/webhook-retry.js.map +1 -1
  306. package/dist/host/index.d.ts +28 -0
  307. package/dist/host/index.d.ts.map +1 -1
  308. package/dist/host/index.js +56 -1
  309. package/dist/host/index.js.map +1 -1
  310. package/dist/layout/comments-module.d.ts +18 -0
  311. package/dist/layout/comments-module.d.ts.map +1 -0
  312. package/dist/layout/comments-module.js +130 -0
  313. package/dist/layout/comments-module.js.map +1 -0
  314. package/dist/layout/feed-hydration.d.ts +75 -0
  315. package/dist/layout/feed-hydration.d.ts.map +1 -0
  316. package/dist/layout/feed-hydration.js +158 -0
  317. package/dist/layout/feed-hydration.js.map +1 -0
  318. package/dist/layout/index.d.ts +2 -1
  319. package/dist/layout/index.d.ts.map +1 -1
  320. package/dist/layout/index.js +2 -1
  321. package/dist/layout/index.js.map +1 -1
  322. package/dist/layout/module-render-context.d.ts +13 -0
  323. package/dist/layout/module-render-context.d.ts.map +1 -0
  324. package/dist/layout/module-render-context.js +15 -0
  325. package/dist/layout/module-render-context.js.map +1 -0
  326. package/dist/layout/modules-extended.d.ts.map +1 -1
  327. package/dist/layout/modules-extended.js +92 -13
  328. package/dist/layout/modules-extended.js.map +1 -1
  329. package/dist/layout/registry.d.ts.map +1 -1
  330. package/dist/layout/registry.js +22 -6
  331. package/dist/layout/registry.js.map +1 -1
  332. package/dist/layout/renderer.d.ts +17 -1
  333. package/dist/layout/renderer.d.ts.map +1 -1
  334. package/dist/layout/renderer.js +11 -4
  335. package/dist/layout/renderer.js.map +1 -1
  336. package/dist/nav/index.d.ts +1 -0
  337. package/dist/nav/index.d.ts.map +1 -1
  338. package/dist/nav/index.js +4 -0
  339. package/dist/nav/index.js.map +1 -1
  340. package/dist/nav/url-resolver.d.ts +10 -2
  341. package/dist/nav/url-resolver.d.ts.map +1 -1
  342. package/dist/nav/url-resolver.js +17 -3
  343. package/dist/nav/url-resolver.js.map +1 -1
  344. package/dist/schema/base.d.ts +37 -1
  345. package/dist/schema/base.d.ts.map +1 -1
  346. package/dist/schema/base.js +20 -2
  347. package/dist/schema/base.js.map +1 -1
  348. package/dist/schema/generate.d.ts +8 -0
  349. package/dist/schema/generate.d.ts.map +1 -1
  350. package/dist/schema/generate.js +7 -4
  351. package/dist/schema/generate.js.map +1 -1
  352. package/dist/schema/mapper.d.ts.map +1 -1
  353. package/dist/schema/mapper.js +2 -0
  354. package/dist/schema/mapper.js.map +1 -1
  355. package/dist/schema/mysql-tables.d.ts +34 -0
  356. package/dist/schema/mysql-tables.d.ts.map +1 -1
  357. package/dist/schema/mysql-tables.js +14 -2
  358. package/dist/schema/mysql-tables.js.map +1 -1
  359. package/dist/server.d.ts +1 -0
  360. package/dist/server.d.ts.map +1 -1
  361. package/dist/server.js +1 -0
  362. package/dist/server.js.map +1 -1
  363. package/dist/site/styles.css +384 -0
  364. package/package.json +2 -1
@@ -3,4 +3,32 @@ export type KywiRole = (typeof KYWI_ROLES)[number];
3
3
  export type ContentAction = 'read' | 'write' | 'publish' | 'delete';
4
4
  export declare function hasMinRole(userRole: string, requiredRole: string): boolean;
5
5
  export declare function canAccessContent(role: string, action: ContentAction): boolean;
6
+ /**
7
+ * API-key scope → the MAXIMUM role that scope grants. A key's scopes act as a
8
+ * ceiling on its owner's role (see {@link effectiveApiKeyRole}):
9
+ *
10
+ * read → reader (read-only; can never mutate)
11
+ * write → author (the `write` content gate)
12
+ * publish → editor (the `publish` content gate)
13
+ * admin → siteAdmin (admin surfaces, incl. the `delete` content gate)
14
+ * developer → siteAdmin (developer surfaces — plugins / extensions / content
15
+ * types — are siteAdmin-gated)
16
+ *
17
+ * `developer`/`admin` cap at siteAdmin, never superAdmin: the most destructive
18
+ * superAdmin-only operations (global trash purge, etc.) always require session
19
+ * auth, since no API-key scope reaches superAdmin.
20
+ */
21
+ export declare const API_KEY_SCOPE_CEILING: Record<string, KywiRole>;
22
+ /**
23
+ * The effective role for a request authenticated by an API key —
24
+ * `intersection(owner role, key scopes)`.
25
+ *
26
+ * The scope ceiling is the most permissive role any of the key's scopes grants;
27
+ * the effective role is whichever of {owner role, scope ceiling} is LOWER, so a
28
+ * key can never exceed its owner's role AND an owner can never exceed what the
29
+ * key's scopes allow. An empty or wholly-unrecognized scope set grants nothing
30
+ * (`deny`). This is the fix for #54: without it the owner's full role leaked
31
+ * through every scoped key (a read key could POST/PUT/DELETE/publish content).
32
+ */
33
+ export declare function effectiveApiKeyRole(ownerRole: string, scopes: string[]): string;
6
34
  //# sourceMappingURL=roles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/auth/roles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,4EAA6E,CAAA;AACpG,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAClD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAkBnE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAE7E"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/auth/roles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,4EAA6E,CAAA;AACpG,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAClD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAkBnE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAE7E;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAM1D,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAc/E"}
@@ -19,4 +19,53 @@ export function hasMinRole(userRole, requiredRole) {
19
19
  export function canAccessContent(role, action) {
20
20
  return hasMinRole(role, ACTION_MIN_ROLE[action]);
21
21
  }
22
+ /**
23
+ * API-key scope → the MAXIMUM role that scope grants. A key's scopes act as a
24
+ * ceiling on its owner's role (see {@link effectiveApiKeyRole}):
25
+ *
26
+ * read → reader (read-only; can never mutate)
27
+ * write → author (the `write` content gate)
28
+ * publish → editor (the `publish` content gate)
29
+ * admin → siteAdmin (admin surfaces, incl. the `delete` content gate)
30
+ * developer → siteAdmin (developer surfaces — plugins / extensions / content
31
+ * types — are siteAdmin-gated)
32
+ *
33
+ * `developer`/`admin` cap at siteAdmin, never superAdmin: the most destructive
34
+ * superAdmin-only operations (global trash purge, etc.) always require session
35
+ * auth, since no API-key scope reaches superAdmin.
36
+ */
37
+ export const API_KEY_SCOPE_CEILING = {
38
+ read: 'reader',
39
+ write: 'author',
40
+ publish: 'editor',
41
+ admin: 'siteAdmin',
42
+ developer: 'siteAdmin',
43
+ };
44
+ /**
45
+ * The effective role for a request authenticated by an API key —
46
+ * `intersection(owner role, key scopes)`.
47
+ *
48
+ * The scope ceiling is the most permissive role any of the key's scopes grants;
49
+ * the effective role is whichever of {owner role, scope ceiling} is LOWER, so a
50
+ * key can never exceed its owner's role AND an owner can never exceed what the
51
+ * key's scopes allow. An empty or wholly-unrecognized scope set grants nothing
52
+ * (`deny`). This is the fix for #54: without it the owner's full role leaked
53
+ * through every scoped key (a read key could POST/PUT/DELETE/publish content).
54
+ */
55
+ export function effectiveApiKeyRole(ownerRole, scopes) {
56
+ let ceilingLevel = 0;
57
+ let ceilingRole = 'deny';
58
+ for (const scope of scopes) {
59
+ const role = API_KEY_SCOPE_CEILING[scope];
60
+ if (!role)
61
+ continue;
62
+ const level = ROLE_LEVEL[role] ?? 0;
63
+ if (level > ceilingLevel) {
64
+ ceilingLevel = level;
65
+ ceilingRole = role;
66
+ }
67
+ }
68
+ const ownerLevel = ROLE_LEVEL[ownerRole] ?? 0;
69
+ return ownerLevel <= ceilingLevel ? ownerRole : ceilingRole;
70
+ }
22
71
  //# sourceMappingURL=roles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/auth/roles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAIpG,MAAM,UAAU,GAA2B;IACzC,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,CAAC;CACR,CAAA;AAED,MAAM,eAAe,GAAkC;IACrD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,WAAW;CACpB,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAoB;IAC/D,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAqB;IAClE,OAAO,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/auth/roles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAIpG,MAAM,UAAU,GAA2B;IACzC,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,CAAC;CACR,CAAA;AAED,MAAM,eAAe,GAAkC;IACrD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,WAAW;CACpB,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAoB;IAC/D,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAqB;IAClE,OAAO,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,WAAW;CACvB,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,MAAgB;IACrE,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,WAAW,GAAG,MAAM,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACzC,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;YACzB,YAAY,GAAG,KAAK,CAAA;YACpB,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7C,OAAO,UAAU,IAAI,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;AAC7D,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Field names reserved by the built-in content editor UI and the base content
3
+ * schema. A custom field (added through the Type Designer) must never reuse
4
+ * one of these names.
5
+ *
6
+ * Root cause of kywi-cms#10: `ContentEditForm` (admin/content-form.tsx) keeps
7
+ * every field — Title/Slug/Body/Featured Image, every Publishing/Navigation/
8
+ * SEO/Categories/Related/Permissions control, AND every custom field from
9
+ * `contentType.fields` — in one flat `values: Record<string, unknown>` state
10
+ * object, keyed by field name. A custom field named e.g. `slug` or `body`
11
+ * writes through the exact same key as the built-in Slug/Body input, so typing
12
+ * in one silently overwrites the other (they are, literally, one value).
13
+ *
14
+ * This list is the union of:
15
+ * - every hardcoded field key `ContentEditForm` writes via `handleChange`
16
+ * across its 9 tabs, and
17
+ * - `WRITABLE_BASE_FIELD_NAMES` (api/content-schemas.ts) — the base columns
18
+ * the create/update API schemas recognize (the subset that would also
19
+ * silently redirect a custom field's value onto a real base column on
20
+ * save, not just collide in the browser).
21
+ *
22
+ * Kept dependency-free (no zod import) so it is equally cheap to import from
23
+ * a client surface (the Type Designer, for inline validation) and a server
24
+ * route handler (content-type-routes.ts, for the authoritative 409 check).
25
+ */
26
+ export declare const RESERVED_FIELD_NAMES: readonly string[];
27
+ /** Whether `name` collides with a built-in field name (kywi-cms#10). */
28
+ export declare function isReservedFieldName(name: string): boolean;
29
+ //# sourceMappingURL=reserved-field-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserved-field-names.d.ts","sourceRoot":"","sources":["../../src/config/reserved-field-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EA2BxC,CAAA;AAIV,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Field names reserved by the built-in content editor UI and the base content
3
+ * schema. A custom field (added through the Type Designer) must never reuse
4
+ * one of these names.
5
+ *
6
+ * Root cause of kywi-cms#10: `ContentEditForm` (admin/content-form.tsx) keeps
7
+ * every field — Title/Slug/Body/Featured Image, every Publishing/Navigation/
8
+ * SEO/Categories/Related/Permissions control, AND every custom field from
9
+ * `contentType.fields` — in one flat `values: Record<string, unknown>` state
10
+ * object, keyed by field name. A custom field named e.g. `slug` or `body`
11
+ * writes through the exact same key as the built-in Slug/Body input, so typing
12
+ * in one silently overwrites the other (they are, literally, one value).
13
+ *
14
+ * This list is the union of:
15
+ * - every hardcoded field key `ContentEditForm` writes via `handleChange`
16
+ * across its 9 tabs, and
17
+ * - `WRITABLE_BASE_FIELD_NAMES` (api/content-schemas.ts) — the base columns
18
+ * the create/update API schemas recognize (the subset that would also
19
+ * silently redirect a custom field's value onto a real base column on
20
+ * save, not just collide in the browser).
21
+ *
22
+ * Kept dependency-free (no zod import) so it is equally cheap to import from
23
+ * a client surface (the Type Designer, for inline validation) and a server
24
+ * route handler (content-type-routes.ts, for the authoritative 409 check).
25
+ */
26
+ export const RESERVED_FIELD_NAMES = [
27
+ // Tab 1: Content
28
+ 'title', 'slug', 'body', 'featuredImageId',
29
+ // Tab 2: Publishing
30
+ 'status', 'publishedAt', 'unpublishAt', 'displayStop', 'displayStart', 'expiresAt',
31
+ 'featureInSection', 'featureStartAt', 'featureEndAt', 'expirationNotifyUser',
32
+ 'internalNotes',
33
+ // Tab 3: Navigation
34
+ 'isNav', 'menuTitle', 'parentId', 'sortOrder', 'openInNewWindow',
35
+ 'navVisibility', 'excludeFromSitemap', 'excludeFromSearch', 'urlOverride',
36
+ 'redirectUrl',
37
+ // Tab 4: SEO
38
+ 'metaTitle', 'metaDescription', 'metaKeywords', 'metaImageId',
39
+ 'canonicalUrl', 'robotsIndex', 'robotsFollow', 'changeFreq', 'sitemapPriority',
40
+ // Tab 5: Layout
41
+ 'layout',
42
+ // Tab 6: Categories & Tags
43
+ 'categoryIds', 'tags', 'featuredInCategory',
44
+ // Tab 7: Related Content
45
+ 'relatedContentIds',
46
+ // Tab 8: Permissions
47
+ 'inheritPermissions', 'noLoginRequired', 'groupPermissions',
48
+ // Real writable base columns (api/content-schemas.ts WRITABLE_BASE_FIELD_NAMES)
49
+ // not otherwise covered above — reserved defensively even though the editor
50
+ // has no dedicated control for them today.
51
+ 'locale', 'isLocked', 'tagIds', 'summary',
52
+ 'successMessage', 'notifyEmails', 'formFields', 'formSteps',
53
+ ];
54
+ const RESERVED_FIELD_NAME_SET = new Set(RESERVED_FIELD_NAMES);
55
+ /** Whether `name` collides with a built-in field name (kywi-cms#10). */
56
+ export function isReservedFieldName(name) {
57
+ return RESERVED_FIELD_NAME_SET.has(name);
58
+ }
59
+ //# sourceMappingURL=reserved-field-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserved-field-names.js","sourceRoot":"","sources":["../../src/config/reserved-field-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IAC1C,oBAAoB;IACpB,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW;IAClF,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB;IAC5E,eAAe;IACf,oBAAoB;IACpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB;IAChE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,aAAa;IACzE,aAAa;IACb,aAAa;IACb,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa;IAC7D,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB;IAC9E,gBAAgB;IAChB,QAAQ;IACR,2BAA2B;IAC3B,aAAa,EAAE,MAAM,EAAE,oBAAoB;IAC3C,yBAAyB;IACzB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB;IAC3D,gFAAgF;IAChF,4EAA4E;IAC5E,2CAA2C;IAC3C,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS;IACzC,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW;CACnD,CAAA;AAEV,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAElF,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC"}
@@ -2,7 +2,7 @@ import type { MediaConfig } from '../media/types.js';
2
2
  import type { AxContentNode, AxRenderContext } from '../ax/types.js';
3
3
  import type { AdapterConfig } from '../audiences/adapters/types.js';
4
4
  import type { AdminArea } from '../admin/registry.js';
5
- export type FieldType = 'text' | 'richText' | 'textarea' | 'select' | 'multiSelect' | 'relationship' | 'group' | 'image' | 'file' | 'date' | 'boolean' | 'number' | 'json' | 'color' | 'slug';
5
+ export type FieldType = 'text' | 'richText' | 'textarea' | 'select' | 'multiSelect' | 'relationship' | 'group' | 'image' | 'file' | 'date' | 'boolean' | 'number' | 'json' | 'color' | 'slug' | 'url' | 'email';
6
6
  export interface FieldAccessConfig {
7
7
  read?: (ctx: {
8
8
  user: UserContext | null;
@@ -156,6 +156,13 @@ export interface ContentTypeConfig {
156
156
  allowedChildTypes?: string[];
157
157
  /** Provenance. 'admin' = created at runtime via the visual designer; config types leave this unset. */
158
158
  source?: 'config' | 'admin';
159
+ /**
160
+ * Whether the base Title field is required (kywi-cms#12). Defaults to true
161
+ * (back-compat) when unset — every base-`content` type historically forced a
162
+ * required Title even for models with no natural title (a testimonial's
163
+ * person name, an FAQ's question). Set `false` to make it optional.
164
+ */
165
+ titleRequired?: boolean;
159
166
  }
160
167
  export interface SiteConfig {
161
168
  id: string;
@@ -478,6 +485,25 @@ export interface SchedulerConfig {
478
485
  */
479
486
  intervalSeconds?: number;
480
487
  }
488
+ /**
489
+ * Webhook delivery tuning. Outgoing deliveries fire from `wireWebhookDispatch`;
490
+ * a failed delivery is marked `failed` with a `nextRetryAt`, and an in-process
491
+ * retry worker (`startWebhookRetryWorker`) re-dispatches due retries with
492
+ * exponential backoff — the same start-at-boot pattern as `scheduler`.
493
+ */
494
+ export interface WebhooksConfig {
495
+ /**
496
+ * Seconds between in-process webhook retry sweeps. A value <= 0 disables the
497
+ * retry runner. The reference app defaults to 60s when this block is omitted.
498
+ */
499
+ retryIntervalSeconds?: number;
500
+ /**
501
+ * Give up on a delivery after this many attempts (default 10). Exhausted
502
+ * deliveries stop being retried rather than looping forever against a dead
503
+ * endpoint.
504
+ */
505
+ maxAttempts?: number;
506
+ }
481
507
  export interface KywiConfigInput {
482
508
  mode: DeploymentMode;
483
509
  db: DbConfig;
@@ -492,6 +518,7 @@ export interface KywiConfigInput {
492
518
  email?: EmailConfig;
493
519
  ax?: AxConfig;
494
520
  scheduler?: SchedulerConfig;
521
+ webhooks?: WebhooksConfig;
495
522
  admin?: AdminConfigInput;
496
523
  }
497
524
  /**
@@ -499,7 +526,7 @@ export interface KywiConfigInput {
499
526
  * guaranteed non-undefined. `email` has no default (it is genuinely optional),
500
527
  * so it stays optional here.
501
528
  */
502
- export interface KywiConfig extends Required<Omit<KywiConfigInput, 'email' | 'ax' | 'scheduler' | 'admin'>> {
529
+ export interface KywiConfig extends Required<Omit<KywiConfigInput, 'email' | 'ax' | 'scheduler' | 'webhooks' | 'admin'>> {
503
530
  contentTypes: ContentTypeConfig[];
504
531
  plugins: PluginConfig[];
505
532
  modules: ModuleConfig[];
@@ -509,6 +536,8 @@ export interface KywiConfig extends Required<Omit<KywiConfigInput, 'email' | 'ax
509
536
  email?: EmailConfig;
510
537
  /** Background scheduler tuning; optional (no default injected at resolve time). */
511
538
  scheduler?: SchedulerConfig;
539
+ /** Webhook delivery/retry tuning; optional (no default injected at resolve time). */
540
+ webhooks?: WebhooksConfig;
512
541
  /**
513
542
  * The `admin` block. Typed optional (like `email`/`ax`) so existing bare
514
543
  * `KywiConfig` literals still compile, but `defineKywiConfig` always
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAucA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAgdA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,CAAA"}
@@ -24,7 +24,7 @@ export declare function insertAnalyticsEvent(db: KywiDb, event: AnalyticsEventIn
24
24
  createdAt: Date;
25
25
  contentId: string | null;
26
26
  visitorId: string;
27
- eventType: "click" | "matched" | "impression";
27
+ eventType: "matched" | "impression" | "click";
28
28
  variantId: string | null;
29
29
  }>;
30
30
  /**
@@ -15,12 +15,17 @@ export declare function createApiKey(db: KywiDb, userId: string, name: string, s
15
15
  */
16
16
  export declare function listApiKeys(db: KywiDb, userId: string): Promise<Omit<KywiApiKeysRow, 'keyHash'>[]>;
17
17
  /**
18
- * Resolve a raw API key to its userId and scopes.
18
+ * Resolve a raw API key to its userId and declared scopes.
19
19
  * Also updates last_used_at. Returns null if not found.
20
+ *
21
+ * `scopes` is the key's authorization ceiling — callers MUST intersect it with
22
+ * the owner's role (see `effectiveApiKeyRole`) rather than authorizing off the
23
+ * owner alone (#54). It is normalized to a string[] (the `scopes` column is
24
+ * jsonb, hence typed `unknown` at the row level).
20
25
  */
21
26
  export declare function resolveApiKey(db: KywiDb, rawKey: string): Promise<{
22
27
  userId: string;
23
- scopes: unknown;
28
+ scopes: ApiKeyScope[];
24
29
  } | null>;
25
30
  /**
26
31
  * Revoke an API key. The userId must match to prevent cross-user deletion.
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-queries.d.ts","sourceRoot":"","sources":["../../src/db/api-key-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAA;AAM9E;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAC,CAWlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC,CAc5C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAgBrD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAMlB"}
1
+ {"version":3,"file":"api-key-queries.d.ts","sourceRoot":"","sources":["../../src/db/api-key-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAA;AAM9E;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAC,CAWlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC,CAc5C;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAiB3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAMlB"}
@@ -40,8 +40,13 @@ export async function listApiKeys(db, userId) {
40
40
  return rows;
41
41
  }
42
42
  /**
43
- * Resolve a raw API key to its userId and scopes.
43
+ * Resolve a raw API key to its userId and declared scopes.
44
44
  * Also updates last_used_at. Returns null if not found.
45
+ *
46
+ * `scopes` is the key's authorization ceiling — callers MUST intersect it with
47
+ * the owner's role (see `effectiveApiKeyRole`) rather than authorizing off the
48
+ * owner alone (#54). It is normalized to a string[] (the `scopes` column is
49
+ * jsonb, hence typed `unknown` at the row level).
45
50
  */
46
51
  export async function resolveApiKey(db, rawKey) {
47
52
  const keyHash = hashKey(rawKey);
@@ -57,7 +62,8 @@ export async function resolveApiKey(db, rawKey) {
57
62
  .set({ lastUsedAt: new Date() })
58
63
  .where(eq(kywiApiKeys.id, row.id))
59
64
  .catch(() => { });
60
- return { userId: row.userId, scopes: row.scopes };
65
+ const scopes = Array.isArray(row.scopes) ? row.scopes : [];
66
+ return { userId: row.userId, scopes };
61
67
  }
62
68
  /**
63
69
  * Revoke an API key. The userId must match to prevent cross-user deletion.
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-queries.js","sourceRoot":"","sources":["../../src/db/api-key-queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-key-queries.js","sourceRoot":"","sources":["../../src/db/api-key-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
2
+ import type { KywiDb } from './client.js';
3
+ /**
4
+ * Shared "apply a stored snapshot back onto the live content row" logic.
5
+ *
6
+ * A snapshot (the `snapshot` jsonb on kywi_content_versions) is the flattened
7
+ * content row at a point in time. Two lifecycle operations write one back onto
8
+ * the live row:
9
+ * - publishing a changeset `update` item (db/changeset-queries.ts, #43), and
10
+ * - approving a pending revision of published content (db/revision-queries.ts, #42).
11
+ *
12
+ * Neither may trust the raw snapshot verbatim: (a) JSON snapshots carry
13
+ * timestamps as ISO strings that drizzle's `timestamp` columns cannot serialise
14
+ * (they call `.toISOString()` on the value), and (b) identity/tree-placement
15
+ * columns (id, siteId, path, slug, parentId, …) are the row's spine and must not
16
+ * be rewritten from history. This module centralises that sanitisation so the
17
+ * changeset-publish and revision-approve paths behave identically.
18
+ */
19
+ /**
20
+ * Columns never applied from a stored snapshot. Three groups: row identity
21
+ * (id/siteId), tree placement + addressing (path, depth, parentId, slug,
22
+ * sortOrder — owned by the move/slug-cascade machinery, never restored from a
23
+ * content snapshot), and write bookkeeping (created*, updated*, deletedAt).
24
+ * `status` and `publishedAt` are skipped too: an apply is always a publish, so
25
+ * the caller sets them explicitly.
26
+ */
27
+ export declare const SNAPSHOT_SKIP_FIELDS: ReadonlySet<string>;
28
+ /**
29
+ * Pure: reduce a snapshot to the REAL kywi_content base columns that are safe to
30
+ * write back, with `date` columns coerced from ISO strings to `Date`. Custom
31
+ * (side-table) fields and every {@link SNAPSHOT_SKIP_FIELDS} key are dropped.
32
+ * Only keys present in the snapshot appear in the result, so an apply never
33
+ * clobbers a column the snapshot never captured.
34
+ */
35
+ export declare function sanitizeSnapshotForContentUpdate(snapshot: Record<string, unknown>, skip?: ReadonlySet<string>): Record<string, unknown>;
36
+ /**
37
+ * Pure: extract the custom-field subset of a snapshot (keys declared on the
38
+ * content type), coercing any `date`-typed custom column back to a `Date`. The
39
+ * `customTable` supplies the column types; when it is null nothing is extracted.
40
+ */
41
+ export declare function extractCustomFieldsFromSnapshot(snapshot: Record<string, unknown>, customFieldNames: readonly string[], customTable: PgTableWithColumns<any> | null): Record<string, unknown>;
42
+ /**
43
+ * Apply a stored snapshot onto the live content row using an existing
44
+ * transaction/handle. Writes the sanitised base columns and (when a customTable
45
+ * is supplied) the custom-field columns, then stamps `status`/`publishedAt`.
46
+ * Identity + tree-placement columns are never touched.
47
+ *
48
+ * `forceStatus` (default 'published') is the status the row lands in — an apply
49
+ * is always a publish of the proposed content. `publishedAt` is preserved via
50
+ * COALESCE so the first-published date survives (matching publishContent).
51
+ */
52
+ export declare function applyContentSnapshot(db: KywiDb, contentId: string, snapshot: Record<string, unknown>, opts?: {
53
+ forceStatus?: string;
54
+ userId?: string | null;
55
+ customTable?: PgTableWithColumns<any> | null;
56
+ customFieldNames?: readonly string[];
57
+ }): Promise<void>;
58
+ //# sourceMappingURL=apply-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-snapshot.d.ts","sourceRoot":"","sources":["../../src/db/apply-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAiBnD,CAAA;AAoBF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,GAAE,WAAW,CAAC,MAAM,CAAwB,GAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,GAAE;IACJ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IAC5C,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC,GACL,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -0,0 +1,142 @@
1
+ import { eq, sql, getTableColumns } from 'drizzle-orm';
2
+ import { kywiContent } from '../schema/base.js';
3
+ /**
4
+ * Shared "apply a stored snapshot back onto the live content row" logic.
5
+ *
6
+ * A snapshot (the `snapshot` jsonb on kywi_content_versions) is the flattened
7
+ * content row at a point in time. Two lifecycle operations write one back onto
8
+ * the live row:
9
+ * - publishing a changeset `update` item (db/changeset-queries.ts, #43), and
10
+ * - approving a pending revision of published content (db/revision-queries.ts, #42).
11
+ *
12
+ * Neither may trust the raw snapshot verbatim: (a) JSON snapshots carry
13
+ * timestamps as ISO strings that drizzle's `timestamp` columns cannot serialise
14
+ * (they call `.toISOString()` on the value), and (b) identity/tree-placement
15
+ * columns (id, siteId, path, slug, parentId, …) are the row's spine and must not
16
+ * be rewritten from history. This module centralises that sanitisation so the
17
+ * changeset-publish and revision-approve paths behave identically.
18
+ */
19
+ /**
20
+ * Columns never applied from a stored snapshot. Three groups: row identity
21
+ * (id/siteId), tree placement + addressing (path, depth, parentId, slug,
22
+ * sortOrder — owned by the move/slug-cascade machinery, never restored from a
23
+ * content snapshot), and write bookkeeping (created*, updated*, deletedAt).
24
+ * `status` and `publishedAt` are skipped too: an apply is always a publish, so
25
+ * the caller sets them explicitly.
26
+ */
27
+ export const SNAPSHOT_SKIP_FIELDS = new Set([
28
+ 'id',
29
+ 'siteId',
30
+ 'createdAt',
31
+ 'createdBy',
32
+ 'updatedAt',
33
+ 'updatedBy',
34
+ 'deletedAt',
35
+ 'path',
36
+ 'depth',
37
+ 'parentId',
38
+ 'slug',
39
+ 'sortOrder',
40
+ 'contentTypeName',
41
+ 'baseType',
42
+ 'status',
43
+ 'publishedAt',
44
+ ]);
45
+ const BASE_COLUMNS = getTableColumns(kywiContent);
46
+ const DATE_COLUMN_NAMES = new Set(Object.entries(BASE_COLUMNS)
47
+ .filter(([, col]) => col.dataType === 'date')
48
+ .map(([name]) => name));
49
+ /**
50
+ * Coerce a snapshot value bound for a `date`-typed column back into a `Date`.
51
+ * ISO strings (how JSON stores them) become Date; an unparseable value → null.
52
+ */
53
+ function coerceDate(value) {
54
+ if (value == null)
55
+ return null;
56
+ if (value instanceof Date)
57
+ return value;
58
+ const parsed = new Date(String(value));
59
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
60
+ }
61
+ /**
62
+ * Pure: reduce a snapshot to the REAL kywi_content base columns that are safe to
63
+ * write back, with `date` columns coerced from ISO strings to `Date`. Custom
64
+ * (side-table) fields and every {@link SNAPSHOT_SKIP_FIELDS} key are dropped.
65
+ * Only keys present in the snapshot appear in the result, so an apply never
66
+ * clobbers a column the snapshot never captured.
67
+ */
68
+ export function sanitizeSnapshotForContentUpdate(snapshot, skip = SNAPSHOT_SKIP_FIELDS) {
69
+ const out = {};
70
+ for (const key of Object.keys(BASE_COLUMNS)) {
71
+ if (skip.has(key) || !(key in snapshot))
72
+ continue;
73
+ const value = snapshot[key];
74
+ out[key] = DATE_COLUMN_NAMES.has(key) && !(value instanceof Date) ? coerceDate(value) : value;
75
+ }
76
+ return out;
77
+ }
78
+ /**
79
+ * Pure: extract the custom-field subset of a snapshot (keys declared on the
80
+ * content type), coercing any `date`-typed custom column back to a `Date`. The
81
+ * `customTable` supplies the column types; when it is null nothing is extracted.
82
+ */
83
+ export function extractCustomFieldsFromSnapshot(snapshot, customFieldNames, customTable) {
84
+ if (!customTable || customFieldNames.length === 0)
85
+ return {};
86
+ const columns = getTableColumns(customTable);
87
+ const out = {};
88
+ for (const name of customFieldNames) {
89
+ if (!(name in snapshot))
90
+ continue;
91
+ const value = snapshot[name];
92
+ const isDate = columns[name]?.dataType === 'date';
93
+ out[name] = isDate && value != null && !(value instanceof Date) ? coerceDate(value) : value;
94
+ }
95
+ return out;
96
+ }
97
+ /**
98
+ * Apply a stored snapshot onto the live content row using an existing
99
+ * transaction/handle. Writes the sanitised base columns and (when a customTable
100
+ * is supplied) the custom-field columns, then stamps `status`/`publishedAt`.
101
+ * Identity + tree-placement columns are never touched.
102
+ *
103
+ * `forceStatus` (default 'published') is the status the row lands in — an apply
104
+ * is always a publish of the proposed content. `publishedAt` is preserved via
105
+ * COALESCE so the first-published date survives (matching publishContent).
106
+ */
107
+ export async function applyContentSnapshot(db, contentId, snapshot, opts = {}) {
108
+ const forceStatus = opts.forceStatus ?? 'published';
109
+ const base = sanitizeSnapshotForContentUpdate(snapshot);
110
+ const setValues = {
111
+ ...base,
112
+ status: forceStatus,
113
+ updatedAt: new Date(),
114
+ };
115
+ if (opts.userId !== undefined && opts.userId !== null)
116
+ setValues.updatedBy = opts.userId;
117
+ if (forceStatus === 'published') {
118
+ setValues.publishedAt = sql `COALESCE(${kywiContent.publishedAt}, now())`;
119
+ }
120
+ await db
121
+ .update(kywiContent)
122
+ .set(setValues)
123
+ .where(eq(kywiContent.id, contentId));
124
+ const customFields = extractCustomFieldsFromSnapshot(snapshot, opts.customFieldNames ?? [], opts.customTable ?? null);
125
+ if (opts.customTable && Object.keys(customFields).length > 0) {
126
+ const result = await db
127
+ .update(opts.customTable)
128
+ .set(customFields)
129
+ .where(eq(opts.customTable.id, contentId));
130
+ // Insert the custom row if none existed yet (mirrors updateContent).
131
+ if (result?.rowCount === 0) {
132
+ const [row] = await db
133
+ .select({ siteId: kywiContent.siteId })
134
+ .from(kywiContent)
135
+ .where(eq(kywiContent.id, contentId));
136
+ if (row) {
137
+ await db.insert(opts.customTable).values({ id: contentId, siteId: row.siteId, ...customFields });
138
+ }
139
+ }
140
+ }
141
+ }
142
+ //# sourceMappingURL=apply-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-snapshot.js","sourceRoot":"","sources":["../../src/db/apply-snapshot.ts"],"names":[],"mappings":"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"}