dineway 0.2.39 → 0.2.41

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 (460) hide show
  1. package/dist/{activity-LXZdjKwI.mjs → activity-BuhkMdv8.mjs} +2 -2
  2. package/dist/{activity-events-DoqeOM8x.mjs → activity-events-DkHsy7Y0.mjs} +1 -1
  3. package/dist/{allowed-origins-DiVrMLxh.mjs → allowed-origins-Clitkhiv.mjs} +1 -1
  4. package/dist/api/route-utils.d.mts +15 -12
  5. package/dist/api/route-utils.mjs +27 -20
  6. package/dist/api/schemas/index.d.mts +1 -1
  7. package/dist/api/schemas/index.mjs +10 -5
  8. package/dist/{api-COSxvdOi.mjs → api-CMbsIQ46.mjs} +41 -13
  9. package/dist/{api-tokens-CNHnKO57.mjs → api-tokens-ciHNTdN2.mjs} +1 -1
  10. package/dist/{apply-D4rZHDyg.mjs → apply-B5qoX19G.mjs} +62 -18
  11. package/dist/astro/index.d.mts +16 -13
  12. package/dist/astro/index.mjs +31 -5
  13. package/dist/astro/middleware/auth.d.mts +14 -11
  14. package/dist/astro/middleware/auth.mjs +8 -8
  15. package/dist/astro/middleware/redirect.mjs +10 -6
  16. package/dist/astro/middleware/request-context.mjs +5 -5
  17. package/dist/astro/middleware/seed.d.mts +1 -1
  18. package/dist/astro/middleware/seed.mjs +2 -2
  19. package/dist/astro/middleware/setup.mjs +1 -1
  20. package/dist/astro/middleware.d.mts +2 -2
  21. package/dist/astro/middleware.mjs +266 -176
  22. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +12 -7
  23. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +12 -7
  24. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  25. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  26. package/dist/astro/routes/api/admin/briefing.mjs +41 -22
  27. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  28. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +14 -10
  29. package/dist/astro/routes/api/admin/byline-fields/index.mjs +14 -10
  30. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +14 -10
  31. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -19
  32. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -19
  33. package/dist/astro/routes/api/admin/bylines/index.mjs +25 -19
  34. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +20 -16
  35. package/dist/astro/routes/api/admin/comments/_id_.mjs +10 -7
  36. package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -13
  37. package/dist/astro/routes/api/admin/comments/counts.mjs +10 -7
  38. package/dist/astro/routes/api/admin/comments/index.mjs +18 -13
  39. package/dist/astro/routes/api/admin/context/_id_/history.mjs +51 -39
  40. package/dist/astro/routes/api/admin/context/_id_/index.mjs +51 -39
  41. package/dist/astro/routes/api/admin/context/_id_/review.mjs +57 -44
  42. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +57 -44
  43. package/dist/astro/routes/api/admin/context/diff.mjs +56 -43
  44. package/dist/astro/routes/api/admin/context/index.mjs +57 -44
  45. package/dist/astro/routes/api/admin/context/stale.mjs +56 -43
  46. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +51 -39
  47. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +56 -43
  48. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +56 -43
  49. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +52 -40
  50. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  51. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +7 -7
  52. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +7 -7
  53. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +78 -68
  54. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +78 -68
  55. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +71 -60
  56. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +78 -67
  57. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +78 -67
  58. package/dist/astro/routes/api/admin/plugins/index.mjs +71 -60
  59. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  60. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -60
  61. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +78 -67
  62. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -60
  63. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -60
  64. package/dist/astro/routes/api/admin/review-requests/_id_/image.mjs +38 -23
  65. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +46 -36
  66. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +63 -52
  67. package/dist/astro/routes/api/admin/review-requests/_id_/revoke.mjs +9 -9
  68. package/dist/astro/routes/api/admin/review-requests/index.mjs +61 -50
  69. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -60
  70. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  71. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -60
  72. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
  73. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
  74. package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -7
  75. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  76. package/dist/astro/routes/api/admin/users/index.mjs +12 -7
  77. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  78. package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
  79. package/dist/astro/routes/api/auth/invite/complete.mjs +17 -12
  80. package/dist/astro/routes/api/auth/invite/index.mjs +14 -9
  81. package/dist/astro/routes/api/auth/invite/register-options.mjs +16 -11
  82. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  83. package/dist/astro/routes/api/auth/magic-link/send.mjs +17 -12
  84. package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
  85. package/dist/astro/routes/api/auth/me.mjs +14 -11
  86. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  87. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  88. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +3 -3
  89. package/dist/astro/routes/api/auth/passkey/_id_.mjs +12 -7
  90. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  91. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -14
  92. package/dist/astro/routes/api/auth/passkey/register/options.mjs +16 -11
  93. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +17 -12
  94. package/dist/astro/routes/api/auth/passkey/verify.mjs +17 -12
  95. package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
  96. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  97. package/dist/astro/routes/api/auth/signup/complete.mjs +17 -12
  98. package/dist/astro/routes/api/auth/signup/request.mjs +17 -12
  99. package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
  100. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +14 -11
  101. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +23 -19
  102. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +23 -18
  103. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  104. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +8 -8
  105. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +8 -8
  106. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +8 -8
  107. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +25 -20
  108. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +41 -31
  109. package/dist/astro/routes/api/content/_collection_/_id_/release-readiness.mjs +14 -9
  110. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +8 -8
  111. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  112. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +41 -31
  113. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +30 -20
  114. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  115. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +8 -8
  116. package/dist/astro/routes/api/content/_collection_/_id_.mjs +25 -14
  117. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  118. package/dist/astro/routes/api/content/_collection_/index.mjs +25 -14
  119. package/dist/astro/routes/api/content/_collection_/trash.mjs +13 -8
  120. package/dist/astro/routes/api/dashboard.mjs +21 -13
  121. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  122. package/dist/astro/routes/api/health.mjs +1 -1
  123. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  124. package/dist/astro/routes/api/import/probe.mjs +30 -23
  125. package/dist/astro/routes/api/import/wordpress/analyze.mjs +13 -10
  126. package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -11
  127. package/dist/astro/routes/api/import/wordpress/execute.mjs +58 -47
  128. package/dist/astro/routes/api/import/wordpress/media.d.mts +14 -11
  129. package/dist/astro/routes/api/import/wordpress/media.mjs +17 -14
  130. package/dist/astro/routes/api/import/wordpress/prepare.mjs +61 -48
  131. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +15 -12
  132. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +58 -45
  133. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  134. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +32 -26
  135. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  136. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +14 -11
  137. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +63 -52
  138. package/dist/astro/routes/api/integration/artifact.mjs +9 -9
  139. package/dist/astro/routes/api/integration/dispatch.mjs +14 -14
  140. package/dist/astro/routes/api/integrations/_provider_.mjs +9 -9
  141. package/dist/astro/routes/api/integrations/index.mjs +8 -8
  142. package/dist/astro/routes/api/manifest.mjs +5 -5
  143. package/dist/astro/routes/api/mcp.mjs +141 -93
  144. package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -12
  145. package/dist/astro/routes/api/media/_id_.mjs +14 -9
  146. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  147. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  148. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  149. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  150. package/dist/astro/routes/api/media/upload-url.mjs +16 -13
  151. package/dist/astro/routes/api/media.mjs +19 -16
  152. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +57 -44
  153. package/dist/astro/routes/api/menus/_name_/items.mjs +57 -44
  154. package/dist/astro/routes/api/menus/_name_/reorder.mjs +57 -44
  155. package/dist/astro/routes/api/menus/_name_/translations.mjs +57 -44
  156. package/dist/astro/routes/api/menus/_name_.mjs +57 -44
  157. package/dist/astro/routes/api/menus/index.mjs +57 -44
  158. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  159. package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
  160. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  161. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  162. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  163. package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
  164. package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
  165. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  166. package/dist/astro/routes/api/openapi.json.mjs +10 -5
  167. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
  168. package/dist/astro/routes/api/redirects/404s/index.mjs +15 -13
  169. package/dist/astro/routes/api/redirects/404s/summary.mjs +15 -13
  170. package/dist/astro/routes/api/redirects/_id_.mjs +57 -44
  171. package/dist/astro/routes/api/redirects/index.mjs +57 -44
  172. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  173. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -62
  175. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +73 -62
  176. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +73 -62
  177. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +73 -62
  178. package/dist/astro/routes/api/schema/collections/index.mjs +73 -62
  179. package/dist/astro/routes/api/schema/index.mjs +13 -10
  180. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -60
  181. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -60
  182. package/dist/astro/routes/api/search/enable.mjs +20 -13
  183. package/dist/astro/routes/api/search/index.mjs +19 -12
  184. package/dist/astro/routes/api/search/rebuild.mjs +20 -13
  185. package/dist/astro/routes/api/search/stats.mjs +12 -7
  186. package/dist/astro/routes/api/search/suggest.mjs +19 -12
  187. package/dist/astro/routes/api/sections/_slug_.mjs +57 -44
  188. package/dist/astro/routes/api/sections/index.mjs +57 -44
  189. package/dist/astro/routes/api/settings/email.mjs +5 -5
  190. package/dist/astro/routes/api/settings/reviews.mjs +11 -11
  191. package/dist/astro/routes/api/settings.mjs +57 -44
  192. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -14
  193. package/dist/astro/routes/api/setup/admin.mjs +17 -12
  194. package/dist/astro/routes/api/setup/dev-bypass.mjs +44 -32
  195. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  196. package/dist/astro/routes/api/setup/index.mjs +47 -34
  197. package/dist/astro/routes/api/setup/status.mjs +3 -3
  198. package/dist/astro/routes/api/snapshot.mjs +9 -9
  199. package/dist/astro/routes/api/system/heartbeat.mjs +2 -2
  200. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +60 -47
  201. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +60 -47
  202. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +60 -47
  203. package/dist/astro/routes/api/taxonomies/index.mjs +60 -47
  204. package/dist/astro/routes/api/themes/preview.mjs +7 -7
  205. package/dist/astro/routes/api/typegen.mjs +4 -4
  206. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  207. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  208. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  209. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +56 -43
  210. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +57 -44
  211. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +57 -44
  212. package/dist/astro/routes/api/widget-areas/_name_.mjs +53 -41
  213. package/dist/astro/routes/api/widget-areas/index.mjs +57 -44
  214. package/dist/astro/routes/api/widget-components.mjs +2 -2
  215. package/dist/astro/routes/robots.txt.mjs +14 -9
  216. package/dist/astro/routes/sitemap-_collection_.xml.mjs +20 -16
  217. package/dist/astro/routes/sitemap.xml.mjs +19 -15
  218. package/dist/astro/session-driver.d.mts +1 -1
  219. package/dist/astro/session-driver.mjs +8 -3
  220. package/dist/astro/types.d.mts +21 -14
  221. package/dist/{atomic-authority-CnBQJ14T.mjs → atomic-authority-Bf5QZboB.mjs} +2 -2
  222. package/dist/{audit-Cl495Ze3.mjs → audit-hXJBTPY0.mjs} +1 -1
  223. package/dist/auth/providers/github.d.mts +1 -1
  224. package/dist/auth/providers/google.d.mts +1 -1
  225. package/dist/{auth-control-guard-DbjgJdlo.mjs → auth-control-guard-DpUP6Fs_.mjs} +1 -1
  226. package/dist/{authorize-DDmgmnW-.mjs → authorize-DWNOqMKq.mjs} +1 -1
  227. package/dist/{briefing-DsD-Ouwc.mjs → briefing-BzvBeIJh.mjs} +1 -1
  228. package/dist/{briefing-COw-WcYz.mjs → briefing-DYiV93rg.mjs} +995 -7
  229. package/dist/{bundle-bhiszAui.mjs → bundle-DWn5eFKz.mjs} +2 -2
  230. package/dist/{byline-TYk2kad6.mjs → byline-3qjp1-oa.mjs} +65 -14
  231. package/dist/{byline-fields-CKhPED5o.d.mts → byline-fields-Bne2v0ti.d.mts} +42 -38
  232. package/dist/{byline-fields-BKj5f3Ub.mjs → byline-fields-DRMCc0V_.mjs} +1 -1
  233. package/dist/{byline-fields-DZ46DF10.mjs → byline-fields-wWu2Cb3l.mjs} +3 -3
  234. package/dist/{byline-registry-CJihchD1.mjs → byline-registry-Caj0_gbU.mjs} +1 -1
  235. package/dist/{bylines-6T9iVC9j.mjs → bylines-BSn9O1Wx.mjs} +3 -3
  236. package/dist/{bylines-CvTSCAw9.mjs → bylines-CGuJi-zu.mjs} +5 -5
  237. package/dist/{patterns-Ay-4KImK.mjs → cache-DsEbwFVE.mjs} +51 -1
  238. package/dist/{chunks-C8vSD_5L.mjs → chunks-Bb56aCtB.mjs} +1 -1
  239. package/dist/cli/index.mjs +488 -58
  240. package/dist/cli/plugin-kit.d.mts +14 -11
  241. package/dist/cli/plugin-kit.mjs +2 -2
  242. package/dist/client/external-auth-headers.d.mts +1 -1
  243. package/dist/client/index.d.mts +16 -13
  244. package/dist/client/index.mjs +2 -2
  245. package/dist/{client-factory-C1ZQCMog.mjs → client-factory-BLbm250o.mjs} +1 -1
  246. package/dist/{comment-DAQfUjqt.mjs → comment-BWDG1nQm.mjs} +2 -2
  247. package/dist/{comment-reaction-Dp3G7UZc.mjs → comment-reaction-B7pLTlQ7.mjs} +1 -1
  248. package/dist/{comments-BrvIaRAx.mjs → comments-xkten8nV.mjs} +1 -1
  249. package/dist/config-6R0bchVE.mjs +125 -0
  250. package/dist/{content-CIKsrvU9.mjs → content-BigS8BAv.mjs} +302 -45
  251. package/dist/content-Dr22fzA_.mjs +390 -0
  252. package/dist/{content-refresh-BilzqcLt.mjs → content-refresh-DJuFIqQ4.mjs} +14 -8
  253. package/dist/content-storage/index.d.mts +180 -0
  254. package/dist/content-storage/index.mjs +29 -0
  255. package/dist/content-storage/store.d.mts +3 -0
  256. package/dist/content-storage/store.mjs +5 -0
  257. package/dist/{review-payload-Bap86e75.mjs → content-write-DAZCNKWl.mjs} +838 -131
  258. package/dist/{context-DAs_MZjJ.mjs → context-0806nV9h.mjs} +292 -23
  259. package/dist/{context-DVTvucNb.mjs → context-CCsI5nTK.mjs} +2 -2
  260. package/dist/{context-route-helpers-BP-UJ4u8.mjs → context-route-helpers-TP3EqxRQ.mjs} +2 -2
  261. package/dist/{dashboard-BAjWCGCP.mjs → dashboard-CSrnhBO6.mjs} +4 -4
  262. package/dist/database/batch.d.mts +1 -1
  263. package/dist/database/batch.mjs +1 -1
  264. package/dist/database/d1/index.d.mts +14 -11
  265. package/dist/database/d1/index.mjs +4 -4
  266. package/dist/database/instrumentation.mjs +3 -2
  267. package/dist/db/index.d.mts +3 -3
  268. package/dist/db/index.mjs +1 -1
  269. package/dist/db/libsql.d.mts +1 -1
  270. package/dist/db/postgres.d.mts +1 -1
  271. package/dist/db/sqlite.d.mts +1 -1
  272. package/dist/{device-flow-Dh0rNlh1.mjs → device-flow-SoZh-HvN.mjs} +3 -3
  273. package/dist/{discovery-V0e0Gg8j.mjs → discovery-49qXmdwv.mjs} +4 -4
  274. package/dist/{enrich-B7PIJ8Iy.mjs → enrich-CAMsD1aT.mjs} +1 -1
  275. package/dist/{error-B5a45Tfb.mjs → error-sL4aemcW.mjs} +2 -0
  276. package/dist/{evidence-Vnp_fQbC.mjs → evidence-B3O9_VKm.mjs} +7 -7
  277. package/dist/{field-defs-cache-aXUeXJdC.mjs → field-defs-cache-dn5Tw79A.mjs} +4 -4
  278. package/dist/{fts-manager-BrPpYtK0.mjs → fts-manager-Zu5ITic0.mjs} +1 -1
  279. package/dist/{hitl-requests-BxMMON3s.mjs → hitl-requests-B5vOPseK.mjs} +2 -2
  280. package/dist/{hitl-route-helpers-sdnjpx2k.mjs → hitl-route-helpers-C3icmGdj.mjs} +5 -5
  281. package/dist/hook-events-BQw73jc7.d.mts +32 -0
  282. package/dist/{import-C2-v4FCs.mjs → import-CKnKQj3f.mjs} +9 -9
  283. package/dist/{index-BVGe04wF.d.mts → index-CLj17kW9.d.mts} +12 -5
  284. package/dist/index.d.mts +19 -16
  285. package/dist/index.mjs +107 -98
  286. package/dist/{integration-credentials-DMEXZU2J.mjs → integration-credentials-DpuRw1kx.mjs} +2 -2
  287. package/dist/{jsonld-XWmmAoVo.d.mts → jsonld-CN91qtDw.d.mts} +2 -2
  288. package/dist/{load-DvCVppOF.mjs → load-CiRTddkJ.mjs} +1 -1
  289. package/dist/{loader-Dp6zLmQm.mjs → loader-CCwWFQSh.mjs} +16 -5
  290. package/dist/{manifest-schema-CCvogfrP.mjs → manifest-schema-DaQpgyTB.mjs} +1 -1
  291. package/dist/{mcp-reviewed-executor-B8Gbin3T.mjs → mcp-reviewed-executor-DA6Q9sDc.mjs} +6 -6
  292. package/dist/media/image-endpoint.mjs +1 -1
  293. package/dist/media/index.d.mts +1 -1
  294. package/dist/media/index.mjs +2 -2
  295. package/dist/media/local-runtime.d.mts +16 -13
  296. package/dist/media/local-runtime.mjs +3 -3
  297. package/dist/{media-C5ba8fvI.mjs → media-BjH5OD-A.mjs} +1 -1
  298. package/dist/{media-allowlist-DQvscVkS.mjs → media-allowlist-C8HJ2O61.mjs} +1 -1
  299. package/dist/{menus-CyNpBQrX.mjs → menus-CbBi7Ad7.mjs} +2 -2
  300. package/dist/{menus-w5xwT-f5.mjs → menus-D0c8CeVg.mjs} +7 -7
  301. package/dist/migration-DJuj7ZwN.mjs +526 -0
  302. package/dist/{migrations-CLlX25HO.mjs → migrations-BAjF60cl.mjs} +1 -1
  303. package/dist/{oauth-authorization-CdqJZUMf.mjs → oauth-authorization-CSSRMOKn.mjs} +4 -4
  304. package/dist/{oauth-clients-CHNb9MAZ.mjs → oauth-clients-DX5HIJJv.mjs} +2 -2
  305. package/dist/object-cache/memory.d.mts +1 -1
  306. package/dist/{object-cache-mxCW-Rpt.mjs → object-cache-DyI1SOBK.mjs} +3 -1
  307. package/dist/owned-metadata-BPmUjZqI.mjs +69 -0
  308. package/dist/page/index.d.mts +15 -12
  309. package/dist/page/index.mjs +1 -1
  310. package/dist/{parse-THHCpJLB.mjs → parse-C6kCR1OT.mjs} +1 -1
  311. package/dist/plugin-utils.d.mts +14 -11
  312. package/dist/plugins/adapt-sandbox-entry.d.mts +14 -11
  313. package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
  314. package/dist/{plugins-pfraURNp.mjs → plugins-V0W65r3v.mjs} +16 -962
  315. package/dist/{policy-B6mVa7ib.mjs → policy-DbceGc4P.mjs} +2 -2
  316. package/dist/{preview-Bh7D7F27.mjs → preview-CWiIjMDi.mjs} +2 -2
  317. package/dist/{provider-loader-DT7vQ5FI.d.mts → provider-loader-oLKm1AU8.d.mts} +1 -1
  318. package/dist/{public-url-Ccv0Xmue.d.mts → public-url-CEC1vj02.d.mts} +2 -2
  319. package/dist/{public-url-BvnTaacI.d.mts → public-url-CKrUov8D.d.mts} +1 -1
  320. package/dist/{publication-authorization-B_HJSnzR.mjs → publication-authorization-wMR-tEQ_.mjs} +43 -17
  321. package/dist/{query-xspvw7Ui.mjs → query-DDi367tF.mjs} +14 -14
  322. package/dist/{query-DLeahg3x.mjs → query-DLnnpEuf.mjs} +4 -4
  323. package/dist/{rate-limit-BsBr_U9g.mjs → rate-limit-DeVLLe4z.mjs} +2 -2
  324. package/dist/{redirect-BQFa1THe.mjs → redirect-CJ-FAbNK.mjs} +2 -2
  325. package/dist/{redirects-DJcsgz_X.mjs → redirects-BKi6mek4.mjs} +4 -5
  326. package/dist/{redirects-CVfxefrz.mjs → redirects-I78-ZYLV.mjs} +5 -386
  327. package/dist/{registry-Dclv9iHv.mjs → registry-zXXZezu-.mjs} +7 -7
  328. package/dist/{release-B3Q-9B7N.mjs → release-Cpi0-Bzq.mjs} +173 -22
  329. package/dist/request-context.d.mts +30 -0
  330. package/dist/{request-meta-CjORiJQ_.mjs → request-meta-DZYuLXx_.mjs} +1 -1
  331. package/dist/review-payload-Bhi52CbI.mjs +112 -0
  332. package/dist/{review-requests-CcSUTm_l.mjs → review-requests-C-ScxD9n.mjs} +2 -2
  333. package/dist/{review-requests-CUVn0RBl.mjs → review-requests-DZYM51yI.mjs} +2 -2
  334. package/dist/{review-route-helpers-CKBfGKCi.mjs → review-route-helpers-DXNDyx_q.mjs} +2 -2
  335. package/dist/{revision-W6FDfDqx.mjs → revision-B_HYO2AE.mjs} +42 -7
  336. package/dist/revisions-CQ7rMP5d.mjs +55 -0
  337. package/dist/{revocation-C_ZQvGRT.mjs → revocation-4we8kfBg.mjs} +2 -2
  338. package/dist/{runner-CRU7BXjr.mjs → runner-CuG8o1uW.mjs} +558 -487
  339. package/dist/{runner-SoP1rphP.d.mts → runner-DXQkyPeX.d.mts} +1 -1
  340. package/dist/{runs-BtaAiLTw.mjs → runs-BjgLfqCn.mjs} +5 -5
  341. package/dist/runtime-Bs2JMbb2.d.mts +45 -0
  342. package/dist/runtime-Ch5G-tnG.mjs +400 -0
  343. package/dist/runtime.d.mts +15 -12
  344. package/dist/runtime.mjs +9 -4
  345. package/dist/schema-BA05k0TN.mjs +8 -0
  346. package/dist/{search-BI9uKr7U.mjs → search-DMrzhfx_.mjs} +4 -98
  347. package/dist/{secrets-D_pergcD.mjs → secrets-CIYcw9T9.mjs} +4 -4
  348. package/dist/{sections-BqqYq9RW.mjs → sections-BTrSEhqB.mjs} +2 -2
  349. package/dist/seed/index.d.mts +2 -2
  350. package/dist/seed/index.mjs +38 -26
  351. package/dist/seo/index.d.mts +3 -3
  352. package/dist/seo/index.mjs +12 -9
  353. package/dist/{seo-Bs_DUxJf.mjs → seo-Cv7ud_m2.mjs} +44 -5
  354. package/dist/{seo-B-5PsaJO.mjs → seo-DkjtBh-y.mjs} +1 -1
  355. package/dist/{service-W2xuGLgw.mjs → service-BBJM08uD.mjs} +2 -2
  356. package/dist/{service-B65aJsN7.mjs → service-CkMuD5AE.mjs} +3 -3
  357. package/dist/{settings-DsBzKeUQ.mjs → settings-BUONaNnG.mjs} +7 -7
  358. package/dist/{settings-CyJ2-MKx.mjs → settings-CI-NtWEc.mjs} +2 -2
  359. package/dist/{setup-complete-DeivSVJi.mjs → setup-complete-DoVbVrHx.mjs} +1 -1
  360. package/dist/{site-activity-DU0UPDji.mjs → site-activity-hpfJkmxQ.mjs} +1 -1
  361. package/dist/{site-context-Dic2jHuw.mjs → site-context-BW3GRCJH.mjs} +15 -15
  362. package/dist/{site-url-Tw6CfBB2.mjs → site-url-CYatfe3q.mjs} +1 -1
  363. package/dist/{state-DM7blWfT.mjs → state-CKkqoA6i.mjs} +1 -1
  364. package/dist/storage/local.d.mts +1 -1
  365. package/dist/storage/local.mjs +1 -1
  366. package/dist/storage/s3.d.mts +1 -1
  367. package/dist/storage/s3.mjs +2 -2
  368. package/dist/{store-32e6dfD-.mjs → store-BzaAtszy.mjs} +3 -3
  369. package/dist/submission-DLgjQ_Ew.mjs +205 -0
  370. package/dist/{taxonomies-BFsUR7kc.mjs → taxonomies-C02-Vuh3.mjs} +3 -3
  371. package/dist/{taxonomies-lWGNLKgn.mjs → taxonomies-D5wO9zmB.mjs} +7 -7
  372. package/dist/{taxonomy-DN6i1upz.mjs → taxonomy-BK7JmHlo.mjs} +53 -3
  373. package/dist/terms-EskuqbKE.mjs +104 -0
  374. package/dist/text-extraction-CdqMGYQK.mjs +96 -0
  375. package/dist/{tokens-D-StaTAQ.mjs → tokens-D8HEH277.mjs} +1 -1
  376. package/dist/{trusted-proxy-hYufGFPK.mjs → trusted-proxy-Dg3U9Lrv.mjs} +1 -1
  377. package/dist/{types-RFzE_V1M.mjs → types-BI3ULB3A.mjs} +2 -2
  378. package/dist/{types-CJynaYg1.d.mts → types-C3jUu4Bc.d.mts} +90 -34
  379. package/dist/{types-B--VyN3n.d.mts → types-Dpv_MvwZ.d.mts} +1 -1
  380. package/dist/{types-CgcOeaiQ.d.mts → types-ex-UrNlz.d.mts} +1 -1
  381. package/dist/types-qOEot0UQ.d.mts +83 -0
  382. package/dist/ui/server-runtime.d.mts +18 -15
  383. package/dist/ui/server-runtime.mjs +29 -25
  384. package/dist/{user-Btai9rl3.mjs → user-Bl2_8rhJ.mjs} +2 -2
  385. package/dist/{utils-CYxGuO_P.mjs → utils-CklSLz9F.mjs} +2 -2
  386. package/dist/{validate-C05z0m7M.mjs → validate-C-yk7mmX.mjs} +3 -3
  387. package/dist/{validate-kmN2lS8H.d.mts → validate-DUscf6VG.d.mts} +3 -3
  388. package/dist/version-BlE1LEPb.mjs +6 -0
  389. package/dist/version-store-BXv2D0de.mjs +208 -0
  390. package/dist/version-store-B_THJCc0.d.mts +98 -0
  391. package/dist/{widgets-BOrDZdQ3.mjs → widgets-9xHBhL_L.mjs} +3 -3
  392. package/dist/{wordpress-slugs-ROzITIBK.mjs → wordpress-slugs-yaeD7cxn.mjs} +1 -1
  393. package/dist/{worker-Bg35R37I.mjs → worker-CC_Rt1pB.mjs} +10 -10
  394. package/dist/write-intent-DuHVqks9.mjs +108 -0
  395. package/dist/{zod-generator-DkrWuID7.mjs → zod-generator-B5Pt8fv0.mjs} +2 -2
  396. package/package.json +16 -4
  397. package/dist/cache-B5NSHhxG.mjs +0 -52
  398. package/dist/cron-C7HCJPPl.mjs +0 -271
  399. package/dist/schema-CosVhHJt.mjs +0 -8
  400. package/dist/submission-DJmRejGR.mjs +0 -411
  401. package/dist/version-BnLdwIT1.mjs +0 -6
  402. /package/dist/{actor-DxUAJgQX.mjs → actor-D0AW80ld.mjs} +0 -0
  403. /package/dist/{adapter-symbols-Bq3JsWGM.d.mts → adapter-symbols-B9mi-BUh.d.mts} +0 -0
  404. /package/dist/{adapters-C8nRpUuj.d.mts → adapters-lDnJjNDz.d.mts} +0 -0
  405. /package/dist/{api-tokens-0N3nafqZ.mjs → api-tokens-CdfsE9PL.mjs} +0 -0
  406. /package/dist/{base64-Cz-aU0X1.mjs → base64-qvSs0Gxy.mjs} +0 -0
  407. /package/dist/{challenge-store-BPn3goP9.mjs → challenge-store-7IZ_NqWg.mjs} +0 -0
  408. /package/dist/{components-rFN8NH3N.mjs → components-JA6tFHmE.mjs} +0 -0
  409. /package/dist/{context-types-CPWAJRs5.mjs → context-types-DDIJhGLs.mjs} +0 -0
  410. /package/dist/{default-BS6VQRkB.mjs → default-C2azCFSB.mjs} +0 -0
  411. /package/dist/{email-console-GqK6hgMJ.mjs → email-console-BYQp_5Qr.mjs} +0 -0
  412. /package/dist/{escape-CE7xOWzJ.mjs → escape-4_NNa6GR.mjs} +0 -0
  413. /package/dist/{experimental-workflows-BbxpWwBy.mjs → experimental-workflows-CPNiI2EL.mjs} +0 -0
  414. /package/dist/{forgeway-account-DcTxh3Gw.mjs → forgeway-account-YzraapbX.mjs} +0 -0
  415. /package/dist/{hash-D2Rqd2J2.mjs → hash-qSYPMJ8w.mjs} +0 -0
  416. /package/dist/{media-url-D9kdpoLS.mjs → media-url-D5E1a47B.mjs} +0 -0
  417. /package/dist/{mime-BnVhH671.mjs → mime-FkfazULS.mjs} +0 -0
  418. /package/dist/{mode-D0gePRtf.mjs → mode-C3RI5Z5t.mjs} +0 -0
  419. /package/dist/{normalize-aTwryvvi.mjs → normalize-DrmlLn40.mjs} +0 -0
  420. /package/dist/{oauth-authority-P5YMSk2z.mjs → oauth-authority-DVlLFhsZ.mjs} +0 -0
  421. /package/dist/{oauth-state-store-CMqLdo4I.mjs → oauth-state-store-nf-78RbK.mjs} +0 -0
  422. /package/dist/{options-JiLWB6Bt.mjs → options-yFkLUuTw.mjs} +0 -0
  423. /package/dist/{output-7HDrYTSQ.mjs → output-ljHaxIHX.mjs} +0 -0
  424. /package/dist/{parser-kettsjWc.mjs → parser-CTlxybRo.mjs} +0 -0
  425. /package/dist/{passkey-config-DVzQ3dv3.mjs → passkey-config-BLon3ct9.mjs} +0 -0
  426. /package/dist/{placeholder-DJLP_HY7.d.mts → placeholder-DdZV3I8x.d.mts} +0 -0
  427. /package/dist/{portable-text-tQhvPLf1.mjs → portable-text-CSbRjM-T.mjs} +0 -0
  428. /package/dist/{portable-text-BE7nszX6.d.mts → portable-text-HNmwL-7L.d.mts} +0 -0
  429. /package/dist/{process-cache-C19OA3am.mjs → process-cache-CMy5M80h.mjs} +0 -0
  430. /package/dist/{provider-loader-DERzBMUz.mjs → provider-loader-DlaT1usE.mjs} +0 -0
  431. /package/dist/{public-discovery-BGyhuD5U.mjs → public-discovery-BnqYofSK.mjs} +0 -0
  432. /package/dist/{public-url-DFXUU6Wp.mjs → public-url-BHjYWuaN.mjs} +0 -0
  433. /package/dist/{public-url-sR8SVmTt.mjs → public-url-GQygrYmg.mjs} +0 -0
  434. /package/dist/{redirect-BxacnBYL.mjs → redirect-CokmLN5o.mjs} +0 -0
  435. /package/dist/{request-cache-8_ifFzVw.mjs → request-cache-CizvDoxV.mjs} +0 -0
  436. /package/dist/{resolve-DEKC4qVa.mjs → resolve-BxFGSKYu.mjs} +0 -0
  437. /package/dist/{runtime-env-CPTzh0mZ.mjs → runtime-env-DpYGy4pT.mjs} +0 -0
  438. /package/dist/{scheduled-publish-BxdShRGs.d.mts → scheduled-publish-eCNGpvNm.d.mts} +0 -0
  439. /package/dist/{seo-contributions-LEFs1d7w.mjs → seo-contributions-ZKqrqsdT.mjs} +0 -0
  440. /package/dist/{service-kQ5ljRzX.mjs → service-DeX1PRNt.mjs} +0 -0
  441. /package/dist/{session-user-eweCNKzW.mjs → session-user-D36BRaZY.mjs} +0 -0
  442. /package/dist/{setup-nonce-B6A5Y1ea.mjs → setup-nonce-B9IO7PbK.mjs} +0 -0
  443. /package/dist/{sidecar-client-BwPhhz-F.mjs → sidecar-client-2hx5G46s.mjs} +0 -0
  444. /package/dist/{slugify-kD31VIv2.mjs → slugify-DvoaEPtL.mjs} +0 -0
  445. /package/dist/{ssrf-C9dyjU8O.mjs → ssrf-DcD8vn3E.mjs} +0 -0
  446. /package/dist/{stable-hash-B9Tbb2f_.mjs → stable-hash-9RDJgfif.mjs} +0 -0
  447. /package/dist/{status-Bjf_uSrW.mjs → status-B2xUokyJ.mjs} +0 -0
  448. /package/dist/{transport-BrU1aDY5.mjs → transport-BHYE4pox.mjs} +0 -0
  449. /package/dist/{transport-CZbtxgKZ.d.mts → transport-CVU5rp7W.d.mts} +0 -0
  450. /package/dist/{types-DNBL-4Sn.mjs → types-B3Uq7Czg.mjs} +0 -0
  451. /package/dist/{types-DsJTXStN.d.mts → types-BJztoTbF.d.mts} +0 -0
  452. /package/dist/{types-COvyXIp7.mjs → types-BgUxCuwu.mjs} +0 -0
  453. /package/dist/{types-KFzuijKE.d.mts → types-C0heD9oI.d.mts} +0 -0
  454. /package/dist/{types-B03h5jt_.d.mts → types-DheoByey.d.mts} +0 -0
  455. /package/dist/{types-SlLXjRpg.d.mts → types-I5LHzk_M.d.mts} +0 -0
  456. /package/dist/{types-PLJ9hlhh.mjs → types-Nm0cMxEh.mjs} +0 -0
  457. /package/dist/{types-CtGSEKEJ.d.mts → types-PxxPTFSl.d.mts} +0 -0
  458. /package/dist/{url-DGG3hw_h.mjs → url-Coamqvs4.mjs} +0 -0
  459. /package/dist/{url-DUz3LbCs.mjs → url-dn4mFfCI.mjs} +0 -0
  460. /package/dist/{workers-build-5UQ4j69Q.mjs → workers-build-4926MPc0.mjs} +0 -0
@@ -1,15 +1,179 @@
1
- import { c as __exportAll } from "./runner-CRU7BXjr.mjs";
2
- import { atomicBatch, isD1Database, rowUnchanged } from "./database/batch.mjs";
1
+ import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
2
+ import { AtomicWriteConflict, atomicBatch, isD1Database, rowUnchanged } from "./database/batch.mjs";
3
3
  import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
4
4
  import { o as isPostgres } from "./dialect-helpers-C6xtO-Ui.mjs";
5
- import { i as encodeCursor, n as ScheduledNotDueError, r as decodeCursor, t as DinewayValidationError } from "./types-RFzE_V1M.mjs";
6
- import { t as contentWriteChecks } from "./atomic-authority-CnBQJ14T.mjs";
7
- import { o as invalidateCollectionCache } from "./object-cache-mxCW-Rpt.mjs";
8
- import { n as slugify } from "./slugify-kD31VIv2.mjs";
9
- import { t as RevisionRepository } from "./revision-W6FDfDqx.mjs";
5
+ import { n as contentDigest, o as ContentStorageError, t as canonicalContentJson } from "./config-6R0bchVE.mjs";
6
+ import { a as hydrateContentRows, d as contentPartitionWritable, r as getContentStorage } from "./runtime-Ch5G-tnG.mjs";
7
+ import { i as encodeCursor, n as ScheduledNotDueError, r as decodeCursor, t as DinewayValidationError } from "./types-BI3ULB3A.mjs";
8
+ import { t as contentWriteChecks } from "./atomic-authority-Bf5QZboB.mjs";
9
+ import { o as invalidateCollectionCache } from "./object-cache-DyI1SOBK.mjs";
10
+ import { i as storedContentSeo, r as snapshotOwnedContentMetadata, t as contentEventBylines } from "./owned-metadata-BPmUjZqI.mjs";
11
+ import { n as slugify } from "./slugify-DvoaEPtL.mjs";
12
+ import { t as RevisionRepository } from "./revision-B_HYO2AE.mjs";
10
13
  import { sql } from "kysely";
11
14
  import { ulid } from "ulidx";
15
+ import { z } from "zod";
12
16
 
17
+ //#region src/content-storage/hook-events.ts
18
+ const contentStorageHookSchema = z.enum([
19
+ "content:afterSave",
20
+ "content:afterPublish",
21
+ "content:afterUnpublish",
22
+ "content:afterDelete",
23
+ "content:afterRestore",
24
+ "content:afterSchedule",
25
+ "content:afterUnschedule"
26
+ ]);
27
+ const contentStorageHookSnapshotSchema = z.object({
28
+ collection: z.string(),
29
+ id: z.string(),
30
+ isNew: z.boolean(),
31
+ permanent: z.boolean(),
32
+ content: z.record(z.string(), z.json()),
33
+ previousContent: z.record(z.string(), z.json()).optional()
34
+ }).strict();
35
+
36
+ //#endregion
37
+ //#region src/content-storage/outbox.ts
38
+ const eventIdentitySchema = z.object({
39
+ operationId: z.string().min(1).max(128),
40
+ routingVersion: z.string().min(1).max(128),
41
+ collection: z.string().regex(/^[a-z][a-z0-9_]{0,62}$/),
42
+ entryId: z.string().min(1).max(128)
43
+ });
44
+ const hookTargetSchema = z.object({
45
+ hook: contentStorageHookSchema,
46
+ pluginId: z.string().min(1).max(128),
47
+ timeoutMs: z.number().int().min(1).max(12e4)
48
+ });
49
+ /** Pending snapshots are temporary outbox data, removed only after every subscriber acknowledges. */
50
+ async function prepareContentHookEvents(db, command, snapshot, targets) {
51
+ if (!targets.length) return { statements: [] };
52
+ eventIdentitySchema.parse(command);
53
+ contentStorageHookSnapshotSchema.parse(snapshot);
54
+ if (snapshot.collection !== command.collection || snapshot.id !== command.entryId) throw new ContentStorageError("CONFLICT", "The content event snapshot does not match its commit.");
55
+ const subscribers = targets.map((target) => hookTargetSchema.parse(target));
56
+ if (new Set(subscribers.map((target) => `${target.hook}:${target.pluginId}`)).size !== targets.length) throw new ContentStorageError("INVALID_CONFIG", "Each content hook subscriber must be unique.");
57
+ const payload = canonicalContentJson(snapshot);
58
+ if (new TextEncoder().encode(payload).length > 8e6) throw new ContentStorageError("CONFLICT", "The content event exceeds the durable delivery limit; no snapshot was truncated.");
59
+ const parts = [];
60
+ for (let offset = 0; offset < payload.length;) {
61
+ let end = Math.min(payload.length, offset + 1e5);
62
+ const last = payload.charCodeAt(end - 1);
63
+ if (end < payload.length && last >= 55296 && last <= 56319) end--;
64
+ parts.push(payload.slice(offset, end));
65
+ offset = end;
66
+ }
67
+ const now = (/* @__PURE__ */ new Date()).toISOString();
68
+ const statements = [sql`INSERT INTO _dineway_content_commit_events (operation_id,collection,entry_id,command,created_at,payload_digest,part_count) VALUES (${command.operationId},${command.collection},${command.entryId},${canonicalContentJson(command)},${now},${await contentDigest(payload)},${parts.length})`.compile(db)];
69
+ for (const [part, data] of parts.entries()) statements.push(sql`INSERT INTO _dineway_content_event_payloads (operation_id,part,data) VALUES (${command.operationId},${part},${data})`.compile(db));
70
+ for (const [ordinal, target] of subscribers.entries()) {
71
+ const id = await contentDigest({
72
+ operationId: command.operationId,
73
+ hook: target.hook,
74
+ pluginId: target.pluginId
75
+ });
76
+ statements.push(sql`INSERT INTO _dineway_content_hook_deliveries (id,operation_id,hook,plugin_id,ordinal,timeout_ms,attempts,next_attempt_at,created_at) VALUES (${id},${command.operationId},${target.hook},${target.pluginId},${ordinal},${target.timeoutMs},0,${now},${now})`.compile(db));
77
+ }
78
+ return { statements };
79
+ }
80
+ /** Claims are per subscriber; receivers must use the stable key for idempotent side effects. */
81
+ async function drainContentHookEvents(db, deliver, options = {}) {
82
+ const now = options.now ?? (() => /* @__PURE__ */ new Date());
83
+ const limit = z.number().int().min(1).max(20).parse(options.limit ?? 5);
84
+ let completed = 0;
85
+ let failed = 0;
86
+ for (let index = 0; index < limit; index++) {
87
+ const at = now().toISOString();
88
+ const row = (await sql`SELECT d.* FROM _dineway_content_hook_deliveries d JOIN _dineway_content_commit_events event ON event.operation_id=d.operation_id WHERE d.delivered_at IS NULL AND d.next_attempt_at<=${at} AND (d.lease_until IS NULL OR d.lease_until<${at}) AND NOT EXISTS (SELECT 1 FROM _dineway_content_hook_deliveries prior WHERE prior.operation_id=d.operation_id AND prior.ordinal<d.ordinal AND prior.delivered_at IS NULL) AND NOT EXISTS (SELECT 1 FROM _dineway_content_commit_events earlier WHERE earlier.collection=event.collection AND earlier.entry_id=event.entry_id AND earlier.sequence<event.sequence AND earlier.part_count>0 AND earlier.delivered_at IS NULL) ORDER BY d.next_attempt_at,event.sequence,d.ordinal LIMIT 1`.execute(db)).rows[0];
89
+ if (!row) break;
90
+ const owner = ulid();
91
+ try {
92
+ await atomicBatch(db, {
93
+ checks: [rowUnchanged("_dineway_content_hook_deliveries", { ...row })],
94
+ statements: [sql`UPDATE _dineway_content_hook_deliveries SET lease_owner=${owner},lease_until=${new Date(now().getTime() + Math.max(3e4, row.timeout_ms) + 15e3).toISOString()},attempts=attempts+1 WHERE id=${row.id}`.compile(db)]
95
+ });
96
+ } catch (error) {
97
+ if (error instanceof AtomicWriteConflict) continue;
98
+ throw error;
99
+ }
100
+ try {
101
+ const header = (await sql`SELECT command,payload_digest,part_count FROM _dineway_content_commit_events WHERE operation_id=${row.operation_id}`.execute(db)).rows[0];
102
+ if (!header) throw new ContentStorageError("CONFLICT", "The durable content event is missing.");
103
+ const command = eventIdentitySchema.parse(JSON.parse(header.command));
104
+ const installed = (await sql`SELECT version FROM _dineway_content_storage_config WHERE id='active'`.execute(db)).rows[0];
105
+ if (command.routingVersion !== installed?.version) throw new ContentStorageError("ROUTE_CHANGED", "A pending content event targets a different routing version.");
106
+ const parts = (await sql`SELECT part,data FROM _dineway_content_event_payloads WHERE operation_id=${row.operation_id} ORDER BY part`.execute(db)).rows;
107
+ const payload = parts.map((part) => part.data).join("");
108
+ if (parts.length !== header.part_count || parts.some((part, ordinal) => part.part !== ordinal) || await contentDigest(payload) !== header.payload_digest) throw new ContentStorageError("UNAVAILABLE", "The durable content event snapshot could not be verified.");
109
+ const snapshot = contentStorageHookSnapshotSchema.parse(JSON.parse(payload));
110
+ if (command.operationId !== row.operation_id || snapshot.id !== command.entryId || snapshot.collection !== command.collection) throw new ContentStorageError("CONFLICT", "The content event snapshot does not match its commit.");
111
+ await deliver({
112
+ hook: contentStorageHookSchema.parse(row.hook),
113
+ pluginId: row.plugin_id,
114
+ timeoutMs: row.timeout_ms
115
+ }, {
116
+ ...snapshot,
117
+ idempotencyKey: row.id
118
+ });
119
+ await atomicBatch(db, {
120
+ checks: [sql`EXISTS (SELECT 1 FROM _dineway_content_hook_deliveries WHERE id=${row.id} AND lease_owner=${owner})`],
121
+ statements: [
122
+ sql`UPDATE _dineway_content_hook_deliveries SET delivered_at=${now().toISOString()},lease_owner=NULL,lease_until=NULL,last_error=NULL WHERE id=${row.id}`.compile(db),
123
+ sql`UPDATE _dineway_content_commit_events SET delivered_at=${now().toISOString()} WHERE operation_id=${row.operation_id} AND NOT EXISTS (SELECT 1 FROM _dineway_content_hook_deliveries WHERE operation_id=${row.operation_id} AND delivered_at IS NULL)`.compile(db),
124
+ sql`DELETE FROM _dineway_content_event_payloads WHERE operation_id=${row.operation_id} AND EXISTS (SELECT 1 FROM _dineway_content_commit_events WHERE operation_id=${row.operation_id} AND delivered_at IS NOT NULL)`.compile(db)
125
+ ]
126
+ });
127
+ completed++;
128
+ } catch (error) {
129
+ await sql`UPDATE _dineway_content_hook_deliveries SET lease_owner=NULL,lease_until=NULL,next_attempt_at=${new Date(now().getTime() + Math.min(36e5, 1e3 * 2 ** Math.min(row.attempts, 12))).toISOString()},last_error=${error instanceof ContentStorageError ? error.code : "DELIVERY_FAILED"} WHERE id=${row.id} AND lease_owner=${owner}`.execute(db);
130
+ failed++;
131
+ }
132
+ }
133
+ return {
134
+ completed,
135
+ failed
136
+ };
137
+ }
138
+
139
+ //#endregion
140
+ //#region src/content-storage/lifecycle-events.ts
141
+ /** Visibility-only changes stay on primary and commit their exact event snapshot atomically. */
142
+ async function prepareContentLifecycleEvents(db, previous, hook, current, permanent = false) {
143
+ const storage = getContentStorage(db, previous.type);
144
+ if (!storage) return { statements: [] };
145
+ const targets = storage.runtime.hookTargets?.([hook]) ?? [];
146
+ const metadata = targets.length ? await snapshotOwnedContentMetadata(db, previous.type, previous.id) : void 0;
147
+ const enrich = async (item) => ({
148
+ ...item,
149
+ ...metadata ? {
150
+ seo: storedContentSeo(metadata.owned.seo),
151
+ ...await contentEventBylines(db, item, metadata.owned.bylines)
152
+ } : {}
153
+ });
154
+ return {
155
+ ...await prepareContentHookEvents(db, {
156
+ operationId: ulid(),
157
+ routingVersion: storage.runtime.config.version,
158
+ collection: previous.type,
159
+ entryId: previous.id
160
+ }, contentStorageHookSnapshotSchema.parse(JSON.parse(JSON.stringify({
161
+ collection: previous.type,
162
+ id: previous.id,
163
+ isNew: false,
164
+ permanent,
165
+ content: current ? await enrich(current) : {},
166
+ previousContent: await enrich(previous)
167
+ }))), targets),
168
+ checks: [
169
+ ...metadata?.checks ?? [],
170
+ contentPartitionWritable(previous.type, previous.id),
171
+ sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='active' AND version=${storage.runtime.config.version})`
172
+ ]
173
+ };
174
+ }
175
+
176
+ //#endregion
13
177
  //#region src/database/repositories/content.ts
14
178
  var content_exports = /* @__PURE__ */ __exportAll({ ContentRepository: () => ContentRepository });
15
179
  const ULID_PATTERN = /^[0-9A-Z]{26}$/;
@@ -99,9 +263,16 @@ function escapeRegExp(s) {
99
263
  * Content is stored in per-collection tables (ec_posts, ec_pages, etc.)
100
264
  * Each field becomes a real column in the table.
101
265
  */
102
- var ContentRepository = class {
103
- constructor(db) {
266
+ var ContentRepository = class ContentRepository {
267
+ constructor(db, options = {}) {
104
268
  this.db = db;
269
+ this.options = options;
270
+ }
271
+ assertIndexWrite(type) {
272
+ if (!this.options.prepareIndexWrites && getContentStorage(this.db, type)) throw new DinewayValidationError("Use Dineway content commands or prepareContentWrite for partitioned content writes.");
273
+ }
274
+ writeChecks(type, id, action) {
275
+ return [...contentWriteChecks(type, id, action), ...getContentStorage(this.db, type) ? [contentPartitionWritable(type, id)] : []];
105
276
  }
106
277
  async normalizePreparedData(type, data) {
107
278
  if (isPostgres(this.db)) return data;
@@ -115,8 +286,9 @@ var ContentRepository = class {
115
286
  * Create a new content item
116
287
  */
117
288
  async prepareCreate(input, options = {}) {
118
- const id = ulid();
119
- const now = (/* @__PURE__ */ new Date()).toISOString();
289
+ this.assertIndexWrite(input.type);
290
+ const id = options.id ?? ulid();
291
+ const now = options.now ?? (/* @__PURE__ */ new Date()).toISOString();
120
292
  const { type, slug, data, status = "draft", authorId, primaryBylineId, locale, translationOf, publishedAt, createdAt } = input;
121
293
  if (!type) throw new DinewayValidationError("Content type is required");
122
294
  const tableName = getTableName(type);
@@ -203,6 +375,7 @@ var ContentRepository = class {
203
375
  }
204
376
  /** Capture database defaults and JSON values from the saved row inside the write batch. */
205
377
  async prepareDraftSnapshot(type, id, authorId) {
378
+ this.assertIndexWrite(type);
206
379
  const tableName = getTableName(type);
207
380
  const checks = [];
208
381
  let snapshot;
@@ -291,6 +464,7 @@ var ContentRepository = class {
291
464
  * A slug is auto-generated from the new title by the handler layer.
292
465
  */
293
466
  async prepareDuplicate(type, id, authorId) {
467
+ this.assertIndexWrite(type);
294
468
  const snapshot = await this.snapshot(type, id);
295
469
  if (!snapshot) throw new DinewayValidationError("Content item not found");
296
470
  const original = snapshot.item;
@@ -312,7 +486,7 @@ var ContentRepository = class {
312
486
  batch: {
313
487
  checks: [
314
488
  snapshot.check,
315
- ...contentWriteChecks(type, id, "edit"),
489
+ ...this.writeChecks(type, id, "edit"),
316
490
  ...prepared.batch.checks ?? []
317
491
  ],
318
492
  statements: prepared.batch.statements
@@ -338,6 +512,7 @@ var ContentRepository = class {
338
512
  AND deleted_at IS NULL
339
513
  `.execute(this.db)).rows[0];
340
514
  if (!row) return null;
515
+ await hydrateContentRows(this.db, type, [row]);
341
516
  return this.mapRow(type, row);
342
517
  }
343
518
  /**
@@ -351,6 +526,7 @@ var ContentRepository = class {
351
526
  WHERE id = ${id}
352
527
  `.execute(this.db)).rows[0];
353
528
  if (!row) return null;
529
+ await hydrateContentRows(this.db, type, [row]);
354
530
  return this.mapRow(type, row);
355
531
  }
356
532
  /**
@@ -398,6 +574,7 @@ var ContentRepository = class {
398
574
  LIMIT 1
399
575
  `.execute(this.db)).rows[0];
400
576
  if (!row) return null;
577
+ await hydrateContentRows(this.db, type, [row]);
401
578
  return this.mapRow(type, row);
402
579
  }
403
580
  /**
@@ -417,6 +594,7 @@ var ContentRepository = class {
417
594
  LIMIT 1
418
595
  `.execute(this.db)).rows[0];
419
596
  if (!row) return null;
597
+ await hydrateContentRows(this.db, type, [row]);
420
598
  return this.mapRow(type, row);
421
599
  }
422
600
  /**
@@ -447,6 +625,7 @@ var ContentRepository = class {
447
625
  const [rows, total] = await Promise.all([query.execute(), this.count(type, options.where)]);
448
626
  const hasMore = rows.length > limit;
449
627
  const items = rows.slice(0, limit);
628
+ await hydrateContentRows(this.db, type, items);
450
629
  const mappedResult = {
451
630
  items: items.map((row) => this.mapRow(type, row)),
452
631
  total
@@ -462,6 +641,7 @@ var ContentRepository = class {
462
641
  * Update content
463
642
  */
464
643
  prepareUpdate(type, id, input, now = (/* @__PURE__ */ new Date()).toISOString()) {
644
+ this.assertIndexWrite(type);
465
645
  const tableName = getTableName(type);
466
646
  const updates = {
467
647
  updated_at: now,
@@ -483,15 +663,18 @@ var ContentRepository = class {
483
663
  }
484
664
  async snapshot(type, id, includeTrashed = false) {
485
665
  const row = (await sql`SELECT * FROM ${sql.table(getTableName(type))} WHERE id = ${id} AND ${includeTrashed ? sql`true` : sql`deleted_at IS NULL`}`.execute(this.db)).rows[0];
486
- return row ? {
666
+ if (!row) return null;
667
+ const check = rowUnchanged(getTableName(type), row);
668
+ await hydrateContentRows(this.db, type, [row]);
669
+ return {
487
670
  item: this.mapRow(type, row),
488
671
  deleted: row.deleted_at !== null,
489
- check: rowUnchanged(getTableName(type), row)
490
- } : null;
672
+ check
673
+ };
491
674
  }
492
675
  async update(type, id, input) {
493
676
  await atomicBatch(this.db, {
494
- checks: contentWriteChecks(type, id, "edit"),
677
+ checks: this.writeChecks(type, id, "edit"),
495
678
  statements: [this.prepareUpdate(type, id, input)]
496
679
  });
497
680
  invalidateCollectionCache(type);
@@ -503,10 +686,11 @@ var ContentRepository = class {
503
686
  * Delete content (soft delete - moves to trash)
504
687
  */
505
688
  prepareDelete(type, id) {
689
+ this.assertIndexWrite(type);
506
690
  const tableName = getTableName(type);
507
691
  const now = (/* @__PURE__ */ new Date()).toISOString();
508
692
  return {
509
- checks: contentWriteChecks(type, id, "delete"),
693
+ checks: this.writeChecks(type, id, "delete"),
510
694
  statements: [sql`
511
695
  UPDATE ${sql.ref(tableName)}
512
696
  SET deleted_at = ${now}
@@ -516,47 +700,90 @@ var ContentRepository = class {
516
700
  };
517
701
  }
518
702
  async delete(type, id) {
519
- const [result] = await atomicBatch(this.db, this.prepareDelete(type, id));
703
+ const [result] = await atomicBatch(this.db, await this.prepareSoftDelete(type, id));
520
704
  const changed = (result?.numAffectedRows ?? 0n) > 0n;
521
705
  if (changed) invalidateCollectionCache(type);
522
706
  return changed;
523
707
  }
708
+ /** Compose a routed soft delete with primary business writes without dropping its event. */
709
+ async prepareSoftDelete(type, id) {
710
+ if (!getContentStorage(this.db, type)) return this.prepareDelete(type, id);
711
+ const snapshot = await this.snapshot(type, id);
712
+ if (!snapshot) return { statements: [] };
713
+ const effects = await prepareContentLifecycleEvents(this.db, snapshot.item, "content:afterDelete", null);
714
+ const write = new ContentRepository(this.db, { prepareIndexWrites: true }).prepareDelete(type, id);
715
+ return {
716
+ checks: [
717
+ snapshot.check,
718
+ ...write.checks ?? [],
719
+ ...effects.checks ?? []
720
+ ],
721
+ statements: [...write.statements, ...effects.statements]
722
+ };
723
+ }
524
724
  /**
525
725
  * Restore content from trash
526
726
  */
527
727
  async restore(type, id) {
528
728
  const tableName = getTableName(type);
729
+ const snapshot = getContentStorage(this.db, type) ? await this.snapshot(type, id, true) : null;
730
+ if (getContentStorage(this.db, type) && !snapshot?.deleted) return null;
731
+ const effects = snapshot ? await prepareContentLifecycleEvents(this.db, snapshot.item, "content:afterRestore", snapshot.item) : {
732
+ checks: [],
733
+ statements: []
734
+ };
529
735
  const [result] = await atomicBatch(this.db, {
530
- checks: contentWriteChecks(type, id, "edit"),
736
+ checks: [
737
+ ...this.writeChecks(type, id, "edit"),
738
+ ...effects.checks ?? [],
739
+ ...snapshot ? [snapshot.check] : []
740
+ ],
531
741
  statements: [sql`
532
742
  UPDATE ${sql.ref(tableName)}
533
743
  SET deleted_at = NULL
534
744
  WHERE id = ${id}
535
745
  AND deleted_at IS NOT NULL
536
746
  RETURNING *
537
- `.compile(this.db)]
747
+ `.compile(this.db), ...effects.statements]
538
748
  });
539
749
  const restored = result?.rows[0];
540
750
  if (!restored) return null;
541
751
  invalidateCollectionCache(type);
752
+ await hydrateContentRows(this.db, type, [restored]);
542
753
  return this.mapRow(type, restored);
543
754
  }
544
755
  /**
545
756
  * Permanently delete a soft-deleted content row.
546
757
  */
547
758
  async permanentDelete(type, id) {
759
+ const batch = await this.preparePermanentDelete(type, id);
760
+ if (!batch) return false;
761
+ await atomicBatch(this.db, batch);
762
+ invalidateCollectionCache(type);
763
+ return true;
764
+ }
765
+ async preparePermanentDelete(type, id) {
548
766
  const tableName = getTableName(type);
549
- const [result] = await atomicBatch(this.db, {
550
- checks: contentWriteChecks(type, id, "permanent"),
551
- statements: [sql`
552
- DELETE FROM ${sql.ref(tableName)}
553
- WHERE id = ${id}
554
- AND deleted_at IS NOT NULL
555
- `.compile(this.db)]
556
- });
557
- const changed = (result?.numAffectedRows ?? 0n) > 0n;
558
- if (changed) invalidateCollectionCache(type);
559
- return changed;
767
+ const snapshot = await this.snapshot(type, id, true);
768
+ if (!snapshot?.deleted) return null;
769
+ const effects = await prepareContentLifecycleEvents(this.db, snapshot.item, "content:afterDelete", null, true);
770
+ return {
771
+ checks: [
772
+ ...this.writeChecks(type, id, "permanent"),
773
+ snapshot.check,
774
+ ...effects.checks ?? []
775
+ ],
776
+ statements: [
777
+ sql`DELETE FROM ${sql.table(tableName)} WHERE id=${id} AND deleted_at IS NOT NULL`.compile(this.db),
778
+ this.db.deleteFrom("_dineway_seo").where("collection", "=", type).where("content_id", "=", id).compile(),
779
+ this.db.deleteFrom("content_taxonomies").where("collection", "=", type).where("entry_id", "=", id).compile(),
780
+ this.db.deleteFrom("_dineway_comments").where("collection", "=", type).where("content_id", "=", id).compile(),
781
+ this.db.deleteFrom("revisions").where("collection", "=", type).where("entry_id", "=", id).compile(),
782
+ this.db.deleteFrom("_dineway_content_bylines").where("collection_slug", "=", type).where("content_id", "=", id).compile(),
783
+ ...getContentStorage(this.db, type) ? [sql`DELETE FROM _dineway_content_locations WHERE collection=${type} AND entry_id=${id}`.compile(this.db)] : [],
784
+ ...effects.statements
785
+ ]
786
+ };
560
787
  }
561
788
  /**
562
789
  * Find trashed content items
@@ -581,6 +808,7 @@ var ContentRepository = class {
581
808
  const rows = await query.execute();
582
809
  const hasMore = rows.length > limit;
583
810
  const items = rows.slice(0, limit);
811
+ await hydrateContentRows(this.db, type, items);
584
812
  const mappedResult = { items: items.map((row) => {
585
813
  const record = row;
586
814
  return {
@@ -677,9 +905,20 @@ var ContentRepository = class {
677
905
  if (scheduledDate <= /* @__PURE__ */ new Date()) throw new DinewayValidationError("Scheduled date must be in the future");
678
906
  const snapshot = await this.snapshot(type, id);
679
907
  if (!snapshot) throw new DinewayValidationError("Content item not found");
680
- const newStatus = snapshot.item.status === "published" ? "published" : "scheduled";
908
+ const existing = snapshot.item;
909
+ const newStatus = existing.status === "published" ? "published" : "scheduled";
910
+ const effects = await prepareContentLifecycleEvents(this.db, existing, "content:afterSchedule", {
911
+ ...existing,
912
+ status: newStatus,
913
+ scheduledAt,
914
+ updatedAt: now
915
+ });
681
916
  await atomicBatch(this.db, {
682
- checks: [snapshot.check, ...contentWriteChecks(type, id, "publish")],
917
+ checks: [
918
+ snapshot.check,
919
+ ...this.writeChecks(type, id, "publish"),
920
+ ...effects.checks ?? []
921
+ ],
683
922
  statements: [sql`
684
923
  UPDATE ${sql.ref(tableName)}
685
924
  SET status = ${newStatus},
@@ -687,7 +926,7 @@ var ContentRepository = class {
687
926
  updated_at = ${now}
688
927
  WHERE id = ${id}
689
928
  AND deleted_at IS NULL
690
- `.compile(this.db)]
929
+ `.compile(this.db), ...effects.statements]
691
930
  });
692
931
  invalidateCollectionCache(type);
693
932
  const updated = await this.findById(type, id);
@@ -705,9 +944,21 @@ var ContentRepository = class {
705
944
  const now = (/* @__PURE__ */ new Date()).toISOString();
706
945
  const snapshot = await this.snapshot(type, id);
707
946
  if (!snapshot) throw new DinewayValidationError("Content item not found");
708
- const newStatus = snapshot.item.status === "published" ? "published" : "draft";
947
+ const existing = snapshot.item;
948
+ const newStatus = existing.status === "published" ? "published" : "draft";
949
+ if (getContentStorage(this.db, type) && existing.scheduledAt === null) return existing;
950
+ const effects = await prepareContentLifecycleEvents(this.db, existing, "content:afterUnschedule", {
951
+ ...existing,
952
+ status: newStatus,
953
+ scheduledAt: null,
954
+ updatedAt: now
955
+ });
709
956
  await atomicBatch(this.db, {
710
- checks: [snapshot.check, ...contentWriteChecks(type, id, "publish")],
957
+ checks: [
958
+ snapshot.check,
959
+ ...this.writeChecks(type, id, "publish"),
960
+ ...effects.checks ?? []
961
+ ],
711
962
  statements: [sql`
712
963
  UPDATE ${sql.ref(tableName)}
713
964
  SET status = ${newStatus},
@@ -716,7 +967,7 @@ var ContentRepository = class {
716
967
  WHERE id = ${id}
717
968
  AND scheduled_at IS NOT NULL
718
969
  AND deleted_at IS NULL
719
- `.compile(this.db)]
970
+ `.compile(this.db), ...effects.statements]
720
971
  });
721
972
  invalidateCollectionCache(type);
722
973
  const updated = await this.findById(type, id);
@@ -734,26 +985,30 @@ var ContentRepository = class {
734
985
  const tableName = getTableName(type);
735
986
  const now = (/* @__PURE__ */ new Date()).toISOString();
736
987
  const limitClause = typeof limit === "number" && Number.isInteger(limit) && limit > 0 ? sql`LIMIT ${limit}` : sql``;
737
- return (await sql`
988
+ const result = await sql`
738
989
  SELECT * FROM ${sql.ref(tableName)}
739
990
  WHERE scheduled_at IS NOT NULL
740
991
  AND scheduled_at <= ${now}
741
992
  AND deleted_at IS NULL
742
993
  ORDER BY scheduled_at ASC
743
994
  ${limitClause}
744
- `.execute(this.db)).rows.map((row) => this.mapRow(type, row));
995
+ `.execute(this.db);
996
+ await hydrateContentRows(this.db, type, result.rows);
997
+ return result.rows.map((row) => this.mapRow(type, row));
745
998
  }
746
999
  /**
747
1000
  * Find all translations in a translation group
748
1001
  */
749
1002
  async findTranslations(type, translationGroup) {
750
1003
  const tableName = getTableName(type);
751
- return (await sql`
1004
+ const result = await sql`
752
1005
  SELECT * FROM ${sql.ref(tableName)}
753
1006
  WHERE translation_group = ${translationGroup}
754
1007
  AND deleted_at IS NULL
755
1008
  ORDER BY locale ASC
756
- `.execute(this.db)).rows.map((row) => this.mapRow(type, row));
1009
+ `.execute(this.db);
1010
+ await hydrateContentRows(this.db, type, result.rows);
1011
+ return result.rows.map((row) => this.mapRow(type, row));
757
1012
  }
758
1013
  /**
759
1014
  * Publish the current draft
@@ -767,6 +1022,7 @@ var ContentRepository = class {
767
1022
  * `published_at` is preserved and first publish falls back to the current time.
768
1023
  */
769
1024
  async preparePublish(type, id, publishedAt, requireScheduledDue = false) {
1025
+ this.assertIndexWrite(type);
770
1026
  const tableName = getTableName(type);
771
1027
  const now = (/* @__PURE__ */ new Date()).toISOString();
772
1028
  const snapshot = await this.snapshot(type, id);
@@ -833,7 +1089,7 @@ var ContentRepository = class {
833
1089
  checks: [
834
1090
  snapshot.check,
835
1091
  rowUnchanged("revisions", revision),
836
- ...contentWriteChecks(type, id, "edit")
1092
+ ...this.writeChecks(type, id, "edit")
837
1093
  ],
838
1094
  statements: [sql`UPDATE ${sql.table(tableName)} SET draft_revision_id = ${revisionId}, updated_at = ${(/* @__PURE__ */ new Date()).toISOString()} WHERE id = ${id} AND deleted_at IS NULL`.compile(this.db)]
839
1095
  });
@@ -850,7 +1106,7 @@ var ContentRepository = class {
850
1106
  const snapshot = await this.snapshot(type, id);
851
1107
  if (!snapshot) throw new DinewayValidationError("Content item not found");
852
1108
  const existing = snapshot.item;
853
- const checks = [snapshot.check, ...contentWriteChecks(type, id, "publish")];
1109
+ const checks = [snapshot.check, ...this.writeChecks(type, id, "publish")];
854
1110
  const statements = [];
855
1111
  let draftId = existing.draftRevisionId;
856
1112
  if (!draftId && existing.liveRevisionId) {
@@ -891,7 +1147,7 @@ var ContentRepository = class {
891
1147
  const existing = snapshot.item;
892
1148
  if (!existing.draftRevisionId) return existing;
893
1149
  await atomicBatch(this.db, {
894
- checks: [snapshot.check, ...contentWriteChecks(type, id, "edit")],
1150
+ checks: [snapshot.check, ...this.writeChecks(type, id, "edit")],
895
1151
  statements: [sql`
896
1152
  UPDATE ${sql.ref(tableName)}
897
1153
  SET draft_revision_id = NULL,
@@ -911,6 +1167,7 @@ var ContentRepository = class {
911
1167
  * Keys starting with _ are revision metadata (e.g. _slug) and are skipped.
912
1168
  */
913
1169
  prepareSyncDataColumns(type, id, data) {
1170
+ this.assertIndexWrite(type);
914
1171
  const tableName = getTableName(type);
915
1172
  const updates = {};
916
1173
  for (const [key, value] of Object.entries(data)) {
@@ -986,4 +1243,4 @@ var ContentRepository = class {
986
1243
  };
987
1244
 
988
1245
  //#endregion
989
- export { content_exports as n, ContentRepository as t };
1246
+ export { prepareContentHookEvents as a, drainContentHookEvents as i, content_exports as n, contentStorageHookSchema as o, prepareContentLifecycleEvents as r, contentStorageHookSnapshotSchema as s, ContentRepository as t };