dineway 0.2.40 → 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-B4zstd2d.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-CQishNjZ.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-D-b9CWux.d.mts → byline-fields-Bne2v0ti.d.mts} +20 -16
  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 +486 -48
  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-wRF85RXo.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-D2USlibj.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-CG5YbNqB.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-Da2UFygt.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-t9yamqBb.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-jx6Yiwsm.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-D5JfvPvx.d.mts → types-C3jUu4Bc.d.mts} +89 -33
  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-CKU70ODm.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-CISd4wX_.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-DFGsDtCj.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-BJwb_MgK.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-B8yYh0g5.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-BkmPhclj.mjs → workers-build-4926MPc0.mjs} +0 -0
@@ -1,20 +1,20 @@
1
1
  import { atomicBatch } from "./database/batch.mjs";
2
2
  import { n as validateJsonFieldName } from "./validate-Co3j6T_K.mjs";
3
3
  import { c as jsonExtractExpr } from "./dialect-helpers-C6xtO-Ui.mjs";
4
- import { i as encodeCursor, r as decodeCursor } from "./types-RFzE_V1M.mjs";
5
- import { t as contentWriteChecks } from "./atomic-authority-CnBQJ14T.mjs";
6
- import { o as invalidateCollectionCache } from "./object-cache-mxCW-Rpt.mjs";
7
- import { t as ContentRepository } from "./content-CIKsrvU9.mjs";
8
- import { t as MediaRepository } from "./media-C5ba8fvI.mjs";
9
- import { t as UserRepository } from "./user-Btai9rl3.mjs";
10
- import { t as OptionsRepository } from "./options-JiLWB6Bt.mjs";
11
- import { t as enrichImageMetadata } from "./enrich-B7PIJ8Iy.mjs";
12
- import { t as SeoRepository } from "./seo-Bs_DUxJf.mjs";
13
- import { o as prepareContentMediaUsageCollectionStale } from "./content-refresh-BilzqcLt.mjs";
14
- import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-C9dyjU8O.mjs";
15
- import { t as CronAccessImpl } from "./cron-C7HCJPPl.mjs";
4
+ import { i as encodeCursor, r as decodeCursor } from "./types-BI3ULB3A.mjs";
5
+ import { t as contentWriteChecks } from "./atomic-authority-Bf5QZboB.mjs";
6
+ import { t as ContentRepository } from "./content-BigS8BAv.mjs";
7
+ import { o as invalidateCollectionCache } from "./object-cache-DyI1SOBK.mjs";
8
+ import { t as MediaRepository } from "./media-BjH5OD-A.mjs";
9
+ import { t as UserRepository } from "./user-Bl2_8rhJ.mjs";
10
+ import { t as OptionsRepository } from "./options-yFkLUuTw.mjs";
11
+ import { t as enrichImageMetadata } from "./enrich-CAMsD1aT.mjs";
12
+ import { t as SeoRepository } from "./seo-Cv7ud_m2.mjs";
13
+ import { o as prepareContentMediaUsageCollectionStale } from "./content-refresh-DJuFIqQ4.mjs";
14
+ import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-DcD8vn3E.mjs";
16
15
  import { sql } from "kysely";
17
16
  import { ulid } from "ulidx";
17
+ import { Cron } from "croner";
18
18
 
19
19
  //#region src/plugins/storage-query.ts
20
20
  /**
@@ -222,7 +222,7 @@ var PluginStorageRepository = class {
222
222
  /**
223
223
  * Store multiple documents
224
224
  */
225
- async putMany(items) {
225
+ async putMany(items, options = {}) {
226
226
  if (items.length === 0) return;
227
227
  const now = (/* @__PURE__ */ new Date()).toISOString();
228
228
  await atomicBatch(this.db, { statements: items.map((item) => {
@@ -234,14 +234,17 @@ var PluginStorageRepository = class {
234
234
  data: jsonData,
235
235
  created_at: now,
236
236
  updated_at: now
237
- }).onConflict((oc) => oc.columns([
238
- "plugin_id",
239
- "collection",
240
- "id"
241
- ]).doUpdateSet({
242
- data: jsonData,
243
- updated_at: now
244
- })).compile();
237
+ }).onConflict((oc) => {
238
+ const key = oc.columns([
239
+ "plugin_id",
240
+ "collection",
241
+ "id"
242
+ ]);
243
+ return options.ifAbsent ? key.doNothing() : key.doUpdateSet({
244
+ data: jsonData,
245
+ updated_at: now
246
+ });
247
+ }).compile();
245
248
  }) });
246
249
  }
247
250
  /**
@@ -327,6 +330,272 @@ var PluginStorageRepository = class {
327
330
  }
328
331
  };
329
332
 
333
+ //#endregion
334
+ //#region src/plugins/cron.ts
335
+ /**
336
+ * Plugin Cron System
337
+ *
338
+ * Provides scheduled task execution for plugins:
339
+ * - CronExecutor: claims overdue tasks, invokes per-plugin cron hook, updates next run.
340
+ * - CronAccessImpl: per-plugin API for schedule/cancel/list.
341
+ *
342
+ */
343
+ /** Stale lock threshold in minutes */
344
+ const STALE_LOCK_MINUTES = 10;
345
+ const MAX_ONESHOT_RETRIES = 5;
346
+ /**
347
+ * Executes overdue cron tasks.
348
+ *
349
+ * Called by schedulers (NodeCronScheduler, PiggybackScheduler). Stateless —
350
+ * all state lives in the database.
351
+ */
352
+ var CronExecutor = class {
353
+ resolveDb;
354
+ constructor(db, invokeCronHook) {
355
+ this.invokeCronHook = invokeCronHook;
356
+ this.resolveDb = typeof db === "function" ? db : () => db;
357
+ }
358
+ get db() {
359
+ return this.resolveDb();
360
+ }
361
+ /**
362
+ * Process all overdue tasks.
363
+ *
364
+ * 1. Atomically claim tasks whose next_run_at <= now, status = idle, enabled = 1.
365
+ * 2. For each claimed task, invoke the plugin's cron hook.
366
+ * 3. On success: compute next_run_at and reset to idle, or delete one-shots.
367
+ * 4. On failure: reset to idle (retry on next tick).
368
+ */
369
+ async tick() {
370
+ let processed = 0;
371
+ for (let index = 0; index < 10; index++) {
372
+ const now = (/* @__PURE__ */ new Date()).toISOString();
373
+ const lease = ulid();
374
+ const task = (await sql`
375
+ UPDATE _dineway_cron_tasks
376
+ SET status = 'running', locked_at = ${now}, lease_token = ${lease}
377
+ WHERE status = 'idle' AND enabled = 1 AND next_run_at <= ${now} AND id IN (
378
+ SELECT id FROM _dineway_cron_tasks
379
+ WHERE next_run_at <= ${now}
380
+ AND status = 'idle'
381
+ AND enabled = 1
382
+ ORDER BY next_run_at ASC
383
+ LIMIT 1
384
+ )
385
+ RETURNING id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at
386
+ `.execute(this.db)).rows[0];
387
+ if (!task) break;
388
+ const ownedOccurrence = sql`id = ${task.id} AND status = 'running' AND enabled = 1 AND lease_token = ${lease}
389
+ AND schedule = ${task.schedule} AND next_run_at = ${task.next_run_at} AND data IS NOT DISTINCT FROM ${task.data}`;
390
+ let parsedData;
391
+ if (task.data) try {
392
+ parsedData = JSON.parse(task.data);
393
+ } catch {
394
+ console.error(`[cron] Invalid JSON data for ${task.plugin_id}:${task.task_name}, skipping`);
395
+ await sql`
396
+ UPDATE _dineway_cron_tasks
397
+ SET status = 'failed', enabled = 0, locked_at = NULL, lease_token = NULL
398
+ WHERE ${ownedOccurrence}
399
+ `.execute(this.db);
400
+ continue;
401
+ }
402
+ const event = {
403
+ executionId: `${task.id}:${task.is_oneshot ? task.schedule : task.next_run_at}`,
404
+ name: task.task_name,
405
+ data: parsedData,
406
+ scheduledAt: task.next_run_at
407
+ };
408
+ let hookFailed = false;
409
+ try {
410
+ await this.invokeCronHook(task.plugin_id, event);
411
+ } catch (error) {
412
+ hookFailed = true;
413
+ console.error(`[cron] Hook failed for ${task.plugin_id}:${task.task_name}:`, error);
414
+ }
415
+ if (task.is_oneshot) if (hookFailed) {
416
+ const retryMeta = parsedData?.__dineway != null && typeof parsedData.__dineway === "object" ? parsedData.__dineway : void 0;
417
+ const rawRetryCount = retryMeta?.retryCount;
418
+ const retryCount = typeof rawRetryCount === "number" && Number.isFinite(rawRetryCount) && rawRetryCount > 0 ? Math.floor(rawRetryCount) : 0;
419
+ if (retryCount >= MAX_ONESHOT_RETRIES) {
420
+ console.error(`[cron] One-shot task ${task.plugin_id}:${task.task_name} exceeded ${MAX_ONESHOT_RETRIES} retries, retaining failed task`);
421
+ await sql`
422
+ UPDATE _dineway_cron_tasks SET status = 'failed', enabled = 0, locked_at = NULL, lease_token = NULL WHERE ${ownedOccurrence}
423
+ `.execute(this.db);
424
+ } else {
425
+ const backoffMs = 6e4 * Math.pow(2, retryCount);
426
+ await sql`
427
+ UPDATE _dineway_cron_tasks
428
+ SET status = 'idle', locked_at = NULL, lease_token = NULL, next_run_at = ${new Date(Date.now() + backoffMs).toISOString()}, data = ${JSON.stringify({
429
+ ...parsedData,
430
+ __dineway: {
431
+ ...retryMeta,
432
+ retryCount: retryCount + 1
433
+ }
434
+ })}
435
+ WHERE ${ownedOccurrence}
436
+ `.execute(this.db);
437
+ }
438
+ } else await sql`
439
+ DELETE FROM _dineway_cron_tasks WHERE ${ownedOccurrence}
440
+ `.execute(this.db);
441
+ else await sql`
442
+ UPDATE _dineway_cron_tasks
443
+ SET status = 'idle',
444
+ locked_at = NULL, lease_token = NULL,
445
+ last_run_at = ${now},
446
+ next_run_at = ${nextCronTime(task.schedule)}
447
+ WHERE ${ownedOccurrence}
448
+ `.execute(this.db);
449
+ await sql`UPDATE _dineway_cron_tasks SET status = 'idle', locked_at = NULL, lease_token = NULL
450
+ WHERE id = ${task.id} AND status = 'running' AND lease_token = ${lease}`.execute(this.db);
451
+ processed++;
452
+ }
453
+ return processed;
454
+ }
455
+ /**
456
+ * Recover tasks stuck in 'running' for more than STALE_LOCK_MINUTES.
457
+ * These likely crashed mid-execution.
458
+ */
459
+ async recoverStaleLocks() {
460
+ const result = await sql`
461
+ UPDATE _dineway_cron_tasks
462
+ SET status = 'idle', locked_at = NULL, lease_token = NULL
463
+ WHERE status = 'running'
464
+ AND locked_at < ${(/* @__PURE__ */ new Date(Date.now() - STALE_LOCK_MINUTES * 60 * 1e3)).toISOString()}
465
+ `.execute(this.db);
466
+ return Number(result.numAffectedRows ?? 0);
467
+ }
468
+ /**
469
+ * Get the next due time across all enabled tasks.
470
+ * Returns null if no tasks are scheduled.
471
+ */
472
+ async getNextDueTime() {
473
+ return (await sql`
474
+ SELECT MIN(next_run_at) as next
475
+ FROM _dineway_cron_tasks
476
+ WHERE status = 'idle' AND enabled = 1
477
+ `.execute(this.db)).rows[0]?.next ?? null;
478
+ }
479
+ };
480
+ /**
481
+ * Per-plugin cron API implementation.
482
+ * Scoped to a single plugin ID — plugins cannot see or modify other plugins' tasks.
483
+ */
484
+ var CronAccessImpl = class {
485
+ constructor(db, pluginId, reschedule) {
486
+ this.db = db;
487
+ this.pluginId = pluginId;
488
+ this.reschedule = reschedule;
489
+ }
490
+ async schedule(name, opts) {
491
+ validateTaskName(name);
492
+ validateSchedule(opts.schedule);
493
+ const oneshot = isOneShot(opts.schedule);
494
+ const schedule = oneshot ? new Date(opts.schedule).toISOString() : opts.schedule;
495
+ const nextRun = oneshot ? schedule : nextCronTime(schedule);
496
+ const dataJson = opts.data ? JSON.stringify(opts.data) : null;
497
+ await sql`
498
+ INSERT INTO _dineway_cron_tasks (id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at, status, enabled)
499
+ VALUES (${ulid()}, ${this.pluginId}, ${name}, ${schedule}, ${oneshot ? 1 : 0}, ${dataJson}, ${nextRun}, 'idle', 1)
500
+ ON CONFLICT (plugin_id, task_name) DO UPDATE SET
501
+ schedule = ${schedule},
502
+ is_oneshot = ${oneshot ? 1 : 0},
503
+ data = ${dataJson},
504
+ next_run_at = ${nextRun},
505
+ status = CASE WHEN _dineway_cron_tasks.status = 'running' THEN 'running' ELSE 'idle' END,
506
+ locked_at = CASE WHEN _dineway_cron_tasks.status = 'running' THEN _dineway_cron_tasks.locked_at ELSE NULL END,
507
+ lease_token = CASE WHEN _dineway_cron_tasks.status = 'running' THEN _dineway_cron_tasks.lease_token ELSE NULL END,
508
+ enabled = 1
509
+ `.execute(this.db);
510
+ this.reschedule();
511
+ }
512
+ async cancel(name) {
513
+ await sql`
514
+ DELETE FROM _dineway_cron_tasks
515
+ WHERE plugin_id = ${this.pluginId} AND task_name = ${name}
516
+ `.execute(this.db);
517
+ this.reschedule();
518
+ }
519
+ async list() {
520
+ return (await sql`
521
+ SELECT task_name, schedule, next_run_at, last_run_at, status
522
+ FROM _dineway_cron_tasks
523
+ WHERE plugin_id = ${this.pluginId} AND (enabled = 1 OR status = 'failed')
524
+ ORDER BY next_run_at ASC
525
+ `.execute(this.db)).rows.map((row) => ({
526
+ name: row.task_name,
527
+ status: row.status,
528
+ schedule: row.schedule,
529
+ nextRunAt: row.next_run_at,
530
+ lastRunAt: row.last_run_at
531
+ }));
532
+ }
533
+ };
534
+ /**
535
+ * Enable or disable all cron tasks for a plugin.
536
+ * Called by admin disable/enable endpoints and PluginManager lifecycle.
537
+ * Gracefully handles the cron table not existing yet (pre-migration).
538
+ */
539
+ async function setCronTasksEnabled(db, pluginId, enabled) {
540
+ try {
541
+ await sql`
542
+ UPDATE _dineway_cron_tasks
543
+ SET enabled = ${enabled ? 1 : 0}
544
+ WHERE plugin_id = ${pluginId}
545
+ `.execute(db);
546
+ } catch {}
547
+ }
548
+ /**
549
+ * Compute the next fire time for a cron expression.
550
+ * Supports standard cron (5-field), extended (6-field with seconds), and
551
+ * aliases like @daily, @weekly, @hourly, @monthly, @yearly.
552
+ */
553
+ function nextCronTime(expression) {
554
+ const next = new Cron(expression).nextRun();
555
+ if (!next) throw new Error(`Invalid cron expression or no future run: "${expression}"`);
556
+ return next.toISOString();
557
+ }
558
+ /**
559
+ * Check whether a string is a valid cron expression.
560
+ */
561
+ function isCronExpression(schedule) {
562
+ try {
563
+ new Cron(schedule);
564
+ return true;
565
+ } catch {
566
+ return false;
567
+ }
568
+ }
569
+ const ISO_DATETIME = /^\d{4}-\d{2}-\d{2}T/;
570
+ /** Croner accepts ISO timestamps too; distinguish those before testing cron patterns. */
571
+ function isOneShot(schedule) {
572
+ if (ISO_DATETIME.test(schedule)) return !isNaN(Date.parse(schedule));
573
+ if (schedule.startsWith("@") || isCronExpression(schedule)) return false;
574
+ return !isNaN(Date.parse(schedule));
575
+ }
576
+ /** Max length for a task name */
577
+ const MAX_TASK_NAME_LENGTH = 128;
578
+ /** Task name pattern: alphanumeric, dashes, underscores */
579
+ const TASK_NAME_RE = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
580
+ /**
581
+ * Validate a cron task name.
582
+ * Must be non-empty, ≤128 chars, alphanumeric with dashes/underscores.
583
+ */
584
+ function validateTaskName(name) {
585
+ if (!name || name.length > MAX_TASK_NAME_LENGTH) throw new Error(`Invalid task name: must be 1-${MAX_TASK_NAME_LENGTH} characters, got ${name.length}`);
586
+ if (!TASK_NAME_RE.test(name)) throw new Error(`Invalid task name "${name}": must start with a letter and contain only letters, numbers, dashes, or underscores`);
587
+ }
588
+ /**
589
+ * Validate a schedule string at registration time.
590
+ * Must be a valid cron expression or a parseable ISO 8601 datetime.
591
+ */
592
+ function validateSchedule(schedule) {
593
+ if (!schedule || schedule.length > 256) throw new Error(`Invalid schedule: must be 1-256 characters, got ${schedule.length}`);
594
+ if (isCronExpression(schedule)) return;
595
+ const parsed = Date.parse(schedule);
596
+ if (isNaN(parsed)) throw new Error(`Invalid schedule "${schedule}": must be a valid cron expression or ISO 8601 datetime`);
597
+ }
598
+
330
599
  //#endregion
331
600
  //#region src/plugins/context.ts
332
601
  /**
@@ -375,7 +644,7 @@ function createStorageCollection(db, pluginId, collectionName, indexes) {
375
644
  delete: (id) => repo.delete(id),
376
645
  exists: (id) => repo.exists(id),
377
646
  getMany: (ids) => repo.getMany(ids),
378
- putMany: (items) => repo.putMany(items),
647
+ putMany: (items, options) => repo.putMany(items, options),
379
648
  deleteMany: (ids) => repo.deleteMany(ids),
380
649
  count: (where) => repo.count(where),
381
650
  async query(options) {
@@ -939,4 +1208,4 @@ function createPluginContext(options, plugin) {
939
1208
  }
940
1209
 
941
1210
  //#endregion
942
- export { createPluginContext as n, createStorageAccess as r, PluginContextFactory as t };
1211
+ export { setCronTasksEnabled as a, CronExecutor as i, createPluginContext as n, createStorageAccess as r, PluginContextFactory as t };
@@ -1,5 +1,5 @@
1
- import { _ as toPublicContextDiff, v as toPublicContextEntry, y as toPublicContextEntryPage } from "./site-context-Dic2jHuw.mjs";
2
- import { d as ContextRepository, i as parseSiteBriefingScope, n as SiteBriefingError } from "./briefing-COw-WcYz.mjs";
1
+ import { _ as toPublicContextDiff, v as toPublicContextEntry, y as toPublicContextEntryPage } from "./site-context-BW3GRCJH.mjs";
2
+ import { i as parseSiteBriefingScope, m as ContextRepository, n as SiteBriefingError } from "./briefing-DYiV93rg.mjs";
3
3
 
4
4
  //#region src/api/handlers/context.ts
5
5
  async function handleContextEntryList(db, input = {}) {
@@ -1,5 +1,5 @@
1
- import { i as resolveActorIdentity } from "./actor-DxUAJgQX.mjs";
2
- import { p as logSiteActivitySafely } from "./activity-events-DoqeOM8x.mjs";
1
+ import { i as resolveActorIdentity } from "./actor-D0AW80ld.mjs";
2
+ import { p as logSiteActivitySafely } from "./activity-events-DkHsy7Y0.mjs";
3
3
 
4
4
  //#region src/api/context-route-helpers.ts
5
5
  function resolveContextRouteActor(locals) {
@@ -1,8 +1,8 @@
1
1
  import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
2
- import { t as ContentRepository } from "./content-CIKsrvU9.mjs";
3
- import { t as MediaRepository } from "./media-C5ba8fvI.mjs";
4
- import { t as UserRepository } from "./user-Btai9rl3.mjs";
5
- import { r as ReviewRequestRepository } from "./review-requests-CUVn0RBl.mjs";
2
+ import { t as ContentRepository } from "./content-BigS8BAv.mjs";
3
+ import { t as MediaRepository } from "./media-BjH5OD-A.mjs";
4
+ import { t as UserRepository } from "./user-Bl2_8rhJ.mjs";
5
+ import { r as ReviewRequestRepository } from "./review-requests-DZYM51yI.mjs";
6
6
  import { sql } from "kysely";
7
7
 
8
8
  //#region src/api/handlers/dashboard.ts
@@ -1,4 +1,4 @@
1
- import { t as D1_BINDING } from "../adapter-symbols-Bq3JsWGM.mjs";
1
+ import { t as D1_BINDING } from "../adapter-symbols-B9mi-BUh.mjs";
2
2
  import { CompiledQuery, Kysely, QueryResult, RawBuilder } from "kysely";
3
3
 
4
4
  //#region src/database/batch.d.ts
@@ -46,8 +46,8 @@ function assertQueryLimits(query) {
46
46
  }
47
47
  /** Executes precompiled writes once; conflicts and unknown commit outcomes are never replayed. */
48
48
  async function atomicBatch(db, batch) {
49
- if (!batch.statements.length && !batch.checks?.length) return [];
50
49
  const checks = [...await getRequestContext()?.prepareWriteChecks?.(db) ?? [], ...batch.checks ?? []];
50
+ if (!batch.statements.length && !checks.length) return [];
51
51
  const binding = d1Database(db);
52
52
  if (!binding) {
53
53
  const execute = async (transaction) => {
@@ -1,14 +1,17 @@
1
- import { At as ResolvedPlugin, ac as assertD1Migrations, cc as compileD1Schema, ic as D1MigrationOptions, oc as migrateD1, rc as D1Migration, sc as D1SchemaObject } from "../../types-D5JfvPvx.mjs";
2
- import "../../types-B--VyN3n.mjs";
3
- import "../../runner-SoP1rphP.mjs";
4
- import "../../index-BVGe04wF.mjs";
5
- import "../../types-B03h5jt_.mjs";
6
- import "../../adapters-C8nRpUuj.mjs";
7
- import "../../scheduled-publish-BxdShRGs.mjs";
8
- import "../../public-url-Ccv0Xmue.mjs";
9
- import "../../validate-kmN2lS8H.mjs";
10
- import "../../byline-fields-D-b9CWux.mjs";
11
- import "../../types-DsJTXStN.mjs";
1
+ import { At as ResolvedPlugin, ac as assertD1Migrations, cc as compileD1Schema, ic as D1MigrationOptions, oc as migrateD1, rc as D1Migration, sc as D1SchemaObject } from "../../types-C3jUu4Bc.mjs";
2
+ import "../../types-Dpv_MvwZ.mjs";
3
+ import "../../runner-DXQkyPeX.mjs";
4
+ import "../../index-CLj17kW9.mjs";
5
+ import "../../types-qOEot0UQ.mjs";
6
+ import "../../types-DheoByey.mjs";
7
+ import "../../adapters-lDnJjNDz.mjs";
8
+ import "../../runtime-Bs2JMbb2.mjs";
9
+ import "../../hook-events-BQw73jc7.mjs";
10
+ import "../../scheduled-publish-eCNGpvNm.mjs";
11
+ import "../../public-url-CEC1vj02.mjs";
12
+ import "../../validate-DUscf6VG.mjs";
13
+ import "../../byline-fields-Bne2v0ti.mjs";
14
+ import "../../types-BJztoTbF.mjs";
12
15
  import { Kysely } from "kysely";
13
16
 
14
17
  //#region src/database/d1/release.d.ts
@@ -1,8 +1,8 @@
1
- import { o as assertD1Migrations, s as migrateD1 } from "../../runner-CRU7BXjr.mjs";
1
+ import { o as assertD1Migrations, s as migrateD1 } from "../../runner-CuG8o1uW.mjs";
2
2
  import "../../d1-binding-DrLMBUxu.mjs";
3
3
  import "../../dialect-helpers-C6xtO-Ui.mjs";
4
- import "../../migrations-CLlX25HO.mjs";
5
- import "../../state-jx6Yiwsm.mjs";
6
- import { n as compileD1Schema, t as migrateD1Release } from "../../release-Da2UFygt.mjs";
4
+ import "../../migrations-BAjF60cl.mjs";
5
+ import "../../state-CKkqoA6i.mjs";
6
+ import { n as compileD1Schema, t as migrateD1Release } from "../../release-Cpi0-Bzq.mjs";
7
7
 
8
8
  export { assertD1Migrations, compileD1Schema, migrateD1, migrateD1Release };
@@ -1,4 +1,5 @@
1
1
  import { getRequestContext } from "../request-context.mjs";
2
+ import { t as readRuntimeEnv } from "../runtime-env-DpYGy4pT.mjs";
2
3
 
3
4
  //#region src/database/instrumentation.ts
4
5
  const QUERY_LOG_ENV = "DINEWAY_QUERY_LOG";
@@ -26,10 +27,10 @@ function flushRecorder(recorder) {
26
27
  for (const event of recorder.events) console.log(`${QUERY_LOG_PREFIX} ${JSON.stringify(event)}`);
27
28
  }
28
29
  function isInstrumentationEnabled() {
29
- return Boolean(typeof process !== "undefined" && process.env && process.env[QUERY_LOG_ENV] === "1");
30
+ return readRuntimeEnv(QUERY_LOG_ENV) === "1";
30
31
  }
31
32
  function isServerTimingEnabled() {
32
- return Boolean(typeof process !== "undefined" && process.env && process.env[SERVER_TIMING_ENV] === "1");
33
+ return readRuntimeEnv(SERVER_TIMING_ENV) === "1";
33
34
  }
34
35
  function formatServerTimingHeader(metrics) {
35
36
  return metrics.map((metric) => {
@@ -1,4 +1,4 @@
1
- import "../types-B--VyN3n.mjs";
2
- import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-SoP1rphP.mjs";
3
- import { a as RequestScopedDb, c as libsql, i as PostgresConfig, l as postgres, n as DatabaseDialectType, o as RequestScopedDbOpts, r as LibsqlConfig, s as SqliteConfig, t as DatabaseDescriptor, u as sqlite } from "../adapters-C8nRpUuj.mjs";
1
+ import "../types-Dpv_MvwZ.mjs";
2
+ import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-DXQkyPeX.mjs";
3
+ import { a as RequestScopedDb, c as libsql, i as PostgresConfig, l as postgres, n as DatabaseDialectType, o as RequestScopedDbOpts, r as LibsqlConfig, s as SqliteConfig, t as DatabaseDescriptor, u as sqlite } from "../adapters-lDnJjNDz.mjs";
4
4
  export { type DatabaseDescriptor, type DatabaseDialectType, type LibsqlConfig, type MigrationStatus, type PostgresConfig, type RequestScopedDb, type RequestScopedDbOpts, type SqliteConfig, getMigrationStatus, libsql, postgres, rollbackMigration, runMigrations, sqlite };
package/dist/db/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as runMigrations, i as rollbackMigration, r as getMigrationStatus } from "../runner-CRU7BXjr.mjs";
1
+ import { a as runMigrations, i as rollbackMigration, r as getMigrationStatus } from "../runner-CuG8o1uW.mjs";
2
2
  import "../d1-binding-DrLMBUxu.mjs";
3
3
  import "../dialect-helpers-C6xtO-Ui.mjs";
4
4
 
@@ -1,4 +1,4 @@
1
- import { r as LibsqlConfig } from "../adapters-C8nRpUuj.mjs";
1
+ import { r as LibsqlConfig } from "../adapters-lDnJjNDz.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/libsql.d.ts
@@ -1,4 +1,4 @@
1
- import { i as PostgresConfig } from "../adapters-C8nRpUuj.mjs";
1
+ import { i as PostgresConfig } from "../adapters-lDnJjNDz.mjs";
2
2
  import { PostgresDialect } from "kysely";
3
3
 
4
4
  //#region src/db/postgres.d.ts
@@ -1,4 +1,4 @@
1
- import { s as SqliteConfig } from "../adapters-C8nRpUuj.mjs";
1
+ import { s as SqliteConfig } from "../adapters-lDnJjNDz.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/sqlite.d.ts
@@ -1,8 +1,8 @@
1
1
  import { AtomicWriteConflict, atomicBatch, rowUnchanged } from "./database/batch.mjs";
2
2
  import { r as currentIsoTimestampValue } from "./dialect-helpers-C6xtO-Ui.mjs";
3
- import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-0N3nafqZ.mjs";
4
- import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-BbxpWwBy.mjs";
5
- import { t as readTokenAuthority } from "./oauth-authority-P5YMSk2z.mjs";
3
+ import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-CdfsE9PL.mjs";
4
+ import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-CPNiI2EL.mjs";
5
+ import { t as readTokenAuthority } from "./oauth-authority-DVlLFhsZ.mjs";
6
6
  import { sql } from "kysely";
7
7
  import { clampScopes, toRoleLevel } from "@dineway-ai/auth";
8
8
  import { generateCodeVerifier } from "arctic";
@@ -1,8 +1,8 @@
1
1
  import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
2
- import { i as encodeCursor, r as decodeCursor } from "./types-RFzE_V1M.mjs";
3
- import { n as publicDiscoveryExclusions } from "./public-discovery-BGyhuD5U.mjs";
4
- import { n as SchemaRegistry } from "./registry-Dclv9iHv.mjs";
5
- import { t as resolveContentUrl } from "./public-url-DFXUU6Wp.mjs";
2
+ import { i as encodeCursor, r as decodeCursor } from "./types-BI3ULB3A.mjs";
3
+ import { n as publicDiscoveryExclusions } from "./public-discovery-BnqYofSK.mjs";
4
+ import { n as SchemaRegistry } from "./registry-zXXZezu-.mjs";
5
+ import { t as resolveContentUrl } from "./public-url-BHjYWuaN.mjs";
6
6
  import { sql } from "kysely";
7
7
 
8
8
  //#region src/seo/canonical-url.ts
@@ -1,4 +1,4 @@
1
- import { n as normalizeMime } from "./mime-BnVhH671.mjs";
1
+ import { n as normalizeMime } from "./mime-FkfazULS.mjs";
2
2
  import { encode } from "blurhash";
3
3
  import { imageSize } from "image-size";
4
4
 
@@ -29,6 +29,7 @@ const ErrorCode = {
29
29
  INTEGRATION_CREDENTIAL_KEY_UNAVAILABLE: "INTEGRATION_CREDENTIAL_KEY_UNAVAILABLE",
30
30
  INTEGRATION_CREDENTIAL_DECRYPT_FAILED: "INTEGRATION_CREDENTIAL_DECRYPT_FAILED",
31
31
  INTEGRATION_CREDENTIAL_VERSION_UNSUPPORTED: "INTEGRATION_CREDENTIAL_VERSION_UNSUPPORTED",
32
+ CONTENT_STORAGE_UNAVAILABLE: "CONTENT_STORAGE_UNAVAILABLE",
32
33
  CONTENT_CREATE_ERROR: "CONTENT_CREATE_ERROR",
33
34
  CONTENT_UPDATE_ERROR: "CONTENT_UPDATE_ERROR",
34
35
  CONTENT_DELETE_ERROR: "CONTENT_DELETE_ERROR",
@@ -286,6 +287,7 @@ const ErrorCode = {
286
287
  */
287
288
  function mapErrorStatus(code) {
288
289
  switch (code) {
290
+ case ErrorCode.CONTENT_STORAGE_UNAVAILABLE: return 503;
289
291
  case ErrorCode.VALIDATION_ERROR:
290
292
  case ErrorCode.INVALID_INPUT:
291
293
  case ErrorCode.INVALID_JSON:
@@ -1,10 +1,10 @@
1
- import { i as encodeBase64url } from "./base64-Cz-aU0X1.mjs";
2
- import { t as MediaRepository } from "./media-C5ba8fvI.mjs";
3
- import { t as buildStableHash } from "./stable-hash-B9Tbb2f_.mjs";
4
- import { a as selectActiveBriefingContextEntries, d as ContextRepository, i as parseSiteBriefingScope } from "./briefing-COw-WcYz.mjs";
5
- import { n as sha256, s as readBoundedBytes } from "./runs-BtaAiLTw.mjs";
6
- import { c as loadContentMediaUsageFields } from "./content-refresh-BilzqcLt.mjs";
7
- import { r as ssrfSafeFetch } from "./ssrf-C9dyjU8O.mjs";
1
+ import { i as encodeBase64url } from "./base64-qvSs0Gxy.mjs";
2
+ import { t as MediaRepository } from "./media-BjH5OD-A.mjs";
3
+ import { t as buildStableHash } from "./stable-hash-9RDJgfif.mjs";
4
+ import { a as selectActiveBriefingContextEntries, i as parseSiteBriefingScope, m as ContextRepository } from "./briefing-DYiV93rg.mjs";
5
+ import { n as sha256, s as readBoundedBytes } from "./runs-BjgLfqCn.mjs";
6
+ import { c as loadContentMediaUsageFields } from "./content-refresh-DJuFIqQ4.mjs";
7
+ import { r as ssrfSafeFetch } from "./ssrf-DcD8vn3E.mjs";
8
8
  import { imageSize } from "image-size";
9
9
 
10
10
  //#region src/review-automation/evidence.ts
@@ -1,9 +1,9 @@
1
- import { c as __exportAll } from "./runner-CRU7BXjr.mjs";
1
+ import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
2
2
  import { getRequestContext } from "./request-context.mjs";
3
3
  import { after } from "./after.mjs";
4
- import { r as requestCached } from "./request-cache-8_ifFzVw.mjs";
5
- import { n as BylineSchemaRegistry } from "./byline-registry-CJihchD1.mjs";
6
- import { n as invalidateProcessCache, r as processCachedAsync, t as createProcessCache } from "./process-cache-C19OA3am.mjs";
4
+ import { r as requestCached } from "./request-cache-CizvDoxV.mjs";
5
+ import { n as BylineSchemaRegistry } from "./byline-registry-Caj0_gbU.mjs";
6
+ import { n as invalidateProcessCache, r as processCachedAsync, t as createProcessCache } from "./process-cache-CMy5M80h.mjs";
7
7
 
8
8
  //#region src/bylines/field-defs-cache.ts
9
9
  var field_defs_cache_exports = /* @__PURE__ */ __exportAll({ getBylineFieldDefs: () => getBylineFieldDefs });
@@ -1,4 +1,4 @@
1
- import { c as __exportAll } from "./runner-CRU7BXjr.mjs";
1
+ import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
2
2
  import { atomicBatch } from "./database/batch.mjs";
3
3
  import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
4
4
  import { s as isSqlite, u as tableExists } from "./dialect-helpers-C6xtO-Ui.mjs";
@@ -1,5 +1,5 @@
1
- import { b as HitlRequestService } from "./site-context-Dic2jHuw.mjs";
2
- import { t as ExperimentalSiteContextWorkflowDisabledError } from "./experimental-workflows-BbxpWwBy.mjs";
1
+ import { b as HitlRequestService } from "./site-context-BW3GRCJH.mjs";
2
+ import { t as ExperimentalSiteContextWorkflowDisabledError } from "./experimental-workflows-CPNiI2EL.mjs";
3
3
 
4
4
  //#region src/api/handlers/hitl-requests.ts
5
5
  const HITL_NOT_FOUND_RE = /not found/i;
@@ -1,8 +1,8 @@
1
- import { i as resolveActorIdentity } from "./actor-DxUAJgQX.mjs";
2
- import { t as WorkflowHitlCoordinator } from "./site-context-Dic2jHuw.mjs";
3
- import { t as apiError } from "./error-B5a45Tfb.mjs";
4
- import { p as logSiteActivitySafely } from "./activity-events-DoqeOM8x.mjs";
5
- import { t as ExperimentalSiteContextWorkflowDisabledError } from "./experimental-workflows-BbxpWwBy.mjs";
1
+ import { i as resolveActorIdentity } from "./actor-D0AW80ld.mjs";
2
+ import { t as WorkflowHitlCoordinator } from "./site-context-BW3GRCJH.mjs";
3
+ import { t as apiError } from "./error-sL4aemcW.mjs";
4
+ import { p as logSiteActivitySafely } from "./activity-events-DkHsy7Y0.mjs";
5
+ import { t as ExperimentalSiteContextWorkflowDisabledError } from "./experimental-workflows-CPNiI2EL.mjs";
6
6
  import { Role } from "@dineway-ai/auth";
7
7
 
8
8
  //#region src/api/hitl-route-helpers.ts