dineway 0.1.48 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/{activity-events-C9u37D5z.mjs → activity-events-y6eT8UW6.mjs} +6 -38
  2. package/dist/actor-CrObAPV0.mjs +37 -0
  3. package/dist/after-BfniwgIf.mjs +9 -0
  4. package/dist/{allowed-origins-DhipQNLb.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
  5. package/dist/api/route-utils.d.mts +10 -10
  6. package/dist/api/route-utils.mjs +17 -14
  7. package/dist/api/schemas/index.d.mts +2 -2
  8. package/dist/api/schemas/index.mjs +5 -4
  9. package/dist/{api-Eiy8_zVZ.mjs → api-ByrU2q-Z.mjs} +61 -37
  10. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
  11. package/dist/{apply-CX3no7XE.mjs → apply-bZswmZPm.mjs} +117 -77
  12. package/dist/astro/image-endpoint.d.mts +7 -0
  13. package/dist/astro/image-endpoint.mjs +54 -0
  14. package/dist/astro/index.d.mts +35 -11
  15. package/dist/astro/index.mjs +157 -23
  16. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  17. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  18. package/dist/astro/middleware/auth.d.mts +10 -10
  19. package/dist/astro/middleware/auth.mjs +42 -24
  20. package/dist/astro/middleware/redirect.mjs +14 -5
  21. package/dist/astro/middleware/request-context.mjs +9 -6
  22. package/dist/astro/middleware/seed.d.mts +1 -1
  23. package/dist/astro/middleware/seed.mjs +2 -2
  24. package/dist/astro/middleware/setup.mjs +1 -1
  25. package/dist/astro/middleware.mjs +334 -193
  26. package/dist/astro/routes/admin.astro +6 -1
  27. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  28. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  30. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  31. package/dist/astro/routes/api/admin/briefing.mjs +22 -18
  32. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  34. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  36. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -15
  37. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -15
  38. package/dist/astro/routes/api/admin/bylines/index.mjs +18 -15
  39. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +15 -13
  40. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -6
  41. package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -10
  42. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -6
  43. package/dist/astro/routes/api/admin/comments/index.mjs +12 -10
  44. package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -25
  45. package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -25
  46. package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -29
  47. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -29
  48. package/dist/astro/routes/api/admin/context/diff.mjs +31 -28
  49. package/dist/astro/routes/api/admin/context/index.mjs +32 -29
  50. package/dist/astro/routes/api/admin/context/stale.mjs +31 -28
  51. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -25
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -28
  53. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -28
  54. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -26
  55. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  56. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  57. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  58. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -52
  59. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -52
  60. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +48 -44
  61. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -50
  62. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -49
  63. package/dist/astro/routes/api/admin/plugins/index.mjs +48 -44
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -43
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -49
  67. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -43
  68. package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -43
  69. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
  70. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -28
  71. package/dist/astro/routes/api/admin/review-requests/index.mjs +11 -10
  72. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -43
  73. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  74. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -43
  75. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  76. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  77. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  78. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  79. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  80. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  81. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  82. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  83. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  84. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  85. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  86. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  87. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  88. package/dist/astro/routes/api/auth/me.mjs +10 -9
  89. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  90. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  91. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  92. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  93. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  94. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  95. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  96. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  97. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  98. package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
  99. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  100. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  101. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  102. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  103. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +16 -14
  104. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  106. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  107. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
  108. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
  109. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
  110. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -11
  111. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
  112. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  113. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  114. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
  115. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -15
  116. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  117. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
  118. package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
  119. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  120. package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
  121. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  122. package/dist/astro/routes/api/dashboard.mjs +10 -9
  123. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  124. package/dist/astro/routes/api/health.mjs +1 -1
  125. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  126. package/dist/astro/routes/api/import/probe.mjs +23 -11
  127. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  128. package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
  129. package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -38
  130. package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
  131. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
  132. package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -33
  133. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
  134. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -101
  135. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  136. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -13
  137. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  138. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
  139. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -56
  140. package/dist/astro/routes/api/manifest.mjs +14 -5
  141. package/dist/astro/routes/api/mcp.mjs +266 -70
  142. package/dist/astro/routes/api/media/_id_/confirm.mjs +39 -11
  143. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  144. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  145. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  146. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  147. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  148. package/dist/astro/routes/api/media/upload-url.mjs +12 -11
  149. package/dist/astro/routes/api/media.mjs +28 -35
  150. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -29
  151. package/dist/astro/routes/api/menus/_name_/items.mjs +32 -29
  152. package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -29
  153. package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -29
  154. package/dist/astro/routes/api/menus/_name_.mjs +32 -29
  155. package/dist/astro/routes/api/menus/index.mjs +32 -29
  156. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  157. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  158. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  159. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  160. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  161. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  162. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  163. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  164. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  165. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
  166. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
  167. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
  168. package/dist/astro/routes/api/redirects/_id_.mjs +33 -30
  169. package/dist/astro/routes/api/redirects/index.mjs +33 -30
  170. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  171. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  172. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -44
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -44
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -44
  175. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -44
  176. package/dist/astro/routes/api/schema/collections/index.mjs +48 -44
  177. package/dist/astro/routes/api/schema/index.mjs +13 -14
  178. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -43
  179. package/dist/astro/routes/api/schema/orphans/index.mjs +47 -43
  180. package/dist/astro/routes/api/search/enable.mjs +12 -11
  181. package/dist/astro/routes/api/search/index.mjs +11 -10
  182. package/dist/astro/routes/api/search/rebuild.mjs +12 -11
  183. package/dist/astro/routes/api/search/stats.mjs +7 -7
  184. package/dist/astro/routes/api/search/suggest.mjs +11 -10
  185. package/dist/astro/routes/api/sections/_slug_.mjs +32 -29
  186. package/dist/astro/routes/api/sections/index.mjs +32 -29
  187. package/dist/astro/routes/api/settings/email.mjs +4 -4
  188. package/dist/astro/routes/api/settings.mjs +32 -29
  189. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  190. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  191. package/dist/astro/routes/api/setup/dev-bypass.mjs +32 -26
  192. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  193. package/dist/astro/routes/api/setup/index.mjs +30 -26
  194. package/dist/astro/routes/api/setup/status.mjs +3 -3
  195. package/dist/astro/routes/api/snapshot.mjs +9 -8
  196. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -32
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -32
  198. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -32
  199. package/dist/astro/routes/api/taxonomies/index.mjs +35 -32
  200. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  201. package/dist/astro/routes/api/typegen.mjs +4 -4
  202. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  203. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  204. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  205. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -28
  206. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -29
  207. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -29
  208. package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -27
  209. package/dist/astro/routes/api/widget-areas/index.mjs +32 -29
  210. package/dist/astro/routes/api/widget-components.mjs +2 -2
  211. package/dist/astro/routes/robots.txt.mjs +9 -8
  212. package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -15
  213. package/dist/astro/routes/sitemap.xml.mjs +10 -9
  214. package/dist/astro/session-driver.d.mts +1 -1
  215. package/dist/astro/session-driver.mjs +3 -3
  216. package/dist/astro/types.d.mts +21 -13
  217. package/dist/{audit-D1cbG7xH.mjs → audit-ByVKIwWF.mjs} +1 -1
  218. package/dist/auth/providers/github.d.mts +1 -1
  219. package/dist/auth/providers/google.d.mts +1 -1
  220. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
  221. package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
  222. package/dist/{briefing-CObXGOGz.mjs → briefing-BJaJI8dm.mjs} +2 -1
  223. package/dist/{briefing-gKWiGLt1.mjs → briefing-CawZ59CY.mjs} +90 -28
  224. package/dist/bundle-7C_DpkEq.mjs +602 -0
  225. package/dist/{byline-1ntDwv8c.mjs → byline-e51-fWRs.mjs} +30 -62
  226. package/dist/{byline-fields-BX7rWKNU.d.mts → byline-fields-CUvbslGc.d.mts} +49 -6
  227. package/dist/{byline-fields-C9_iaPaM.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
  228. package/dist/{byline-fields-B-ZkoVft.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
  229. package/dist/{byline-registry-CUSvkasJ.mjs → byline-registry-87nNnYl4.mjs} +2 -2
  230. package/dist/{bylines-bC15ZqAv.mjs → bylines-CMQNCNFh.mjs} +9 -3
  231. package/dist/{bylines-DtxChhN_.mjs → bylines-y4LO-dTj.mjs} +5 -5
  232. package/dist/{cache-DbKyr60Q.mjs → cache-C-FNTFYK.mjs} +2 -2
  233. package/dist/{chunks-C5zp2xir.mjs → chunks-CxBt-GxR.mjs} +1 -1
  234. package/dist/cli/index.mjs +820 -1276
  235. package/dist/client/external-auth-headers.d.mts +1 -1
  236. package/dist/client/index.d.mts +1 -1
  237. package/dist/client/index.mjs +2 -1
  238. package/dist/{comment-CXDOQ93N.mjs → comment-DlA4iChg.mjs} +13 -3
  239. package/dist/comment-reaction-DfFao1ST.mjs +58 -0
  240. package/dist/{comments-hK-rdzJ9.mjs → comments-DApFGMsP.mjs} +1 -1
  241. package/dist/{content-QaryevFO.mjs → content-Bh4BDjv8.mjs} +51 -34
  242. package/dist/content-refresh-CgutSUfO.mjs +1576 -0
  243. package/dist/{context-CoYb_fvK.mjs → context-C5W3G18y.mjs} +111 -50
  244. package/dist/{context-DBL1ib4v.mjs → context-CK4ym2Sf.mjs} +2 -2
  245. package/dist/{context-route-helpers-CYQVmbIm.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
  246. package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
  247. package/dist/{dashboard-DNlqsknJ.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
  248. package/dist/db/index.d.mts +3 -3
  249. package/dist/db/index.mjs +1 -1
  250. package/dist/db/libsql.d.mts +1 -1
  251. package/dist/db/postgres.d.mts +1 -1
  252. package/dist/db/sqlite.d.mts +1 -1
  253. package/dist/{device-flow-DygsFPGL.mjs → device-flow-BnqRH-T9.mjs} +5 -5
  254. package/dist/{placeholder-BDo81Is5.mjs → enrich-DIFIFA8O.mjs} +36 -9
  255. package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
  256. package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
  257. package/dist/{fts-manager-CIZlScg5.mjs → fts-manager-Crzypjqu.mjs} +1 -1
  258. package/dist/hitl-Hw1RmWOq.mjs +677 -0
  259. package/dist/{hitl-requests-CGQwOEiq.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
  260. package/dist/{hitl-route-helpers-GSDLNPpN.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
  261. package/dist/import-Bh9biJfx.mjs +1354 -0
  262. package/dist/{index-CwRuZ-u8.d.mts → index-D4y6NGiy.d.mts} +75 -3
  263. package/dist/index.d.mts +17 -16
  264. package/dist/index.mjs +81 -69
  265. package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
  266. package/dist/{load-xE01Jm0V.mjs → load-DmYeniXl.mjs} +1 -1
  267. package/dist/{loader-tg63WSY2.mjs → loader-CjWqjweO.mjs} +117 -31
  268. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
  269. package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
  270. package/dist/media/image-endpoint.d.mts +32 -0
  271. package/dist/media/image-endpoint.mjs +111 -0
  272. package/dist/media/index.d.mts +27 -2
  273. package/dist/media/index.mjs +5 -3
  274. package/dist/media/local-runtime.d.mts +16 -11
  275. package/dist/media/local-runtime.mjs +10 -8
  276. package/dist/{media-DUAjMfvR.mjs → media-DMj0grzC.mjs} +3 -1
  277. package/dist/{media-allowlist-BsXkT9RK.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
  278. package/dist/media-url-lEKSrpr9.mjs +20 -0
  279. package/dist/{menus-WpFRMXjz.mjs → menus-TaW1gKnk.mjs} +19 -5
  280. package/dist/{menus-DU1eZqw_.mjs → menus-xvsnVZXw.mjs} +80 -15
  281. package/dist/{normalize-DUnoXAa9.mjs → normalize-5ek_z7de.mjs} +8 -1
  282. package/dist/{oauth-authorization-D-1p52Je.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
  283. package/dist/{oauth-clients-CzeMGyUU.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
  284. package/dist/object-cache/memory.d.mts +14 -0
  285. package/dist/object-cache/memory.mjs +55 -0
  286. package/dist/object-cache-D51qOseS.mjs +419 -0
  287. package/dist/page/index.d.mts +4 -3
  288. package/dist/page/index.mjs +2 -2
  289. package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
  290. package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
  291. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
  292. package/dist/plugin-utils.d.mts +9 -9
  293. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  294. package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
  295. package/dist/{plugins-C57YQi4l.mjs → plugins-BolVa-tl.mjs} +832 -64
  296. package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
  297. package/dist/{preview-D5rvDhRt.mjs → preview-vSVg6fwG.mjs} +4 -3
  298. package/dist/process-cache-7xgAO9JY.mjs +106 -0
  299. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
  300. package/dist/{public-url-DLUM5OOv.mjs → public-url-BEz_sM9n.mjs} +24 -18
  301. package/dist/{public-url-B5HaoGzj.d.mts → public-url-gsp3oUbu.d.mts} +5 -4
  302. package/dist/{query-BYc3oruA.mjs → query-CfRCdaL3.mjs} +281 -76
  303. package/dist/{query-DKEwzobh.mjs → query-jaAmw8E1.mjs} +11 -6
  304. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
  305. package/dist/{redirect-C2zXRj3c.mjs → redirect-BAjt4Z6b.mjs} +2 -2
  306. package/dist/{redirects-YZo_znWG.mjs → redirects-BTdwpQtE.mjs} +47 -24
  307. package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
  308. package/dist/{registry-CTkbIDB9.mjs → registry-CtyVedcN.mjs} +130 -77
  309. package/dist/request-context.d.mts +2 -0
  310. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
  311. package/dist/{review-requests-C0un5kdV.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
  312. package/dist/{review-requests-gGMyYYhy.mjs → review-requests-DUyEmtmG.mjs} +1 -1
  313. package/dist/{runner-D4FL9usy.d.mts → runner-1tC2tIRV.d.mts} +1 -1
  314. package/dist/runner-DB7CRfOF.mjs +6740 -0
  315. package/dist/{runtime-DEWQpZ-4.d.mts → runtime-BOeiQsCv.d.mts} +2028 -1564
  316. package/dist/runtime.d.mts +10 -10
  317. package/dist/runtime.mjs +4 -4
  318. package/dist/schema-DXdYj4R3.mjs +8 -0
  319. package/dist/{search-axGQ1KY3.mjs → search-DSaLgEFI.mjs} +5 -3
  320. package/dist/{secrets-062Izo8i.mjs → secrets-CDZo2k8L.mjs} +15 -12
  321. package/dist/{sections-OLKgXL10.mjs → sections-PVVXHGfp.mjs} +2 -2
  322. package/dist/seed/index.d.mts +2 -2
  323. package/dist/seed/index.mjs +22 -19
  324. package/dist/seo/index.d.mts +1 -1
  325. package/dist/seo/index.mjs +3 -12
  326. package/dist/{seo-Cd45Po8L.mjs → seo-CQG3GCHQ.mjs} +5 -2
  327. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
  328. package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
  329. package/dist/{service-Bwad8s5h.mjs → service-DiN4ZuPp.mjs} +2 -2
  330. package/dist/session-user-CAKImna3.mjs +22 -0
  331. package/dist/{settings-yLjz_I4T.mjs → settings-BbqgHWpU.mjs} +28 -55
  332. package/dist/{settings-lAHjaUit.mjs → settings-i4VPP8bT.mjs} +2 -2
  333. package/dist/{setup-complete--PradA4R.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
  334. package/dist/{site-activity-D7Xyropw.mjs → site-activity-Dy3FROs0.mjs} +1 -1
  335. package/dist/{site-context-DaN9Z91j.mjs → site-context-DQiL8Fl5.mjs} +23 -652
  336. package/dist/{site-url-DpGZo9Z6.mjs → site-url-BML3GQYm.mjs} +1 -1
  337. package/dist/status-DANd8ERo.mjs +21 -0
  338. package/dist/storage/local.d.mts +1 -1
  339. package/dist/storage/local.mjs +1 -1
  340. package/dist/storage/s3.d.mts +1 -1
  341. package/dist/storage/s3.mjs +1 -1
  342. package/dist/{taxonomies-uXVEoQso.mjs → taxonomies-9s-v03H-.mjs} +36 -29
  343. package/dist/taxonomies-DRiixp_E.mjs +443 -0
  344. package/dist/{taxonomy-CBmkmMuU.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
  345. package/dist/{tokens-CjSgb0AC.mjs → tokens-1RK1n6ED.mjs} +1 -1
  346. package/dist/transport-BNmCqLu7.mjs +134 -0
  347. package/dist/types-4garmdWa.mjs +66 -0
  348. package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
  349. package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
  350. package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
  351. package/dist/types-DF7ZuGGk.d.mts +118 -0
  352. package/dist/types-DU0bU2Wu.d.mts +2392 -0
  353. package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
  354. package/dist/{types-DfuD0Afl.mjs → types-Dq1qT19x.mjs} +2 -2
  355. package/dist/ui/server-runtime.d.mts +15 -15
  356. package/dist/ui/server-runtime.mjs +25 -21
  357. package/dist/url-Cac7a9QZ.mjs +33 -0
  358. package/dist/{user-DtNmjNYt.mjs → user-BIZPzCb9.mjs} +2 -2
  359. package/dist/{utils-wv-zvC-Y.mjs → utils-CMDhr5Xd.mjs} +129 -7
  360. package/dist/{validate-BMs11tan.d.mts → validate-CZvb-BKB.d.mts} +10 -7
  361. package/dist/{validate-7SYRbz2f.mjs → validate-DNs0pTSc.mjs} +11 -6
  362. package/dist/version-BTvfRGc6.mjs +6 -0
  363. package/dist/{widgets-DR8EHuRO.mjs → widgets-f0ibZUIq.mjs} +46 -43
  364. package/dist/{wordpress-slugs-Dvhxh4cl.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
  365. package/dist/{zod-generator-BS9-umbk.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
  366. package/package.json +31 -8
  367. package/src/components/Block.astro +50 -0
  368. package/src/components/Comments.astro +143 -1
  369. package/src/components/DinewayHead.astro +19 -2
  370. package/src/components/DinewayImage.astro +66 -33
  371. package/src/components/DinewayMedia.astro +1 -2
  372. package/src/components/Image.astro +85 -40
  373. package/src/components/InlinePortableTextEditor.tsx +12 -2
  374. package/src/components/JsonLdScript.astro +9 -0
  375. package/src/components/LiveSearch.astro +40 -4
  376. package/src/components/index.ts +4 -0
  377. package/src/components/live-search-routing.ts +30 -0
  378. package/src/components/portable-text-text-align.ts +15 -0
  379. package/src/ui.ts +2 -0
  380. package/dist/entity-aliases-Egjmqc7I.mjs +0 -51
  381. package/dist/import-CvHY6sf5.mjs +0 -684
  382. package/dist/runner-B-tbV751.mjs +0 -2741
  383. package/dist/schema-B6zyB-Xn.mjs +0 -8
  384. package/dist/taxonomies-CNOGeC-3.mjs +0 -327
  385. package/dist/types-eu5UDgHN.d.mts +0 -652
  386. package/dist/version-xlzMSXF2.mjs +0 -6
  387. /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
  388. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
  389. /package/dist/{base64-C1Q9yr0B.mjs → base64-F8-DUraK.mjs} +0 -0
  390. /package/dist/{challenge-store-CRSz-Xim.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
  391. /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
  392. /package/dist/{context-types-DQh_XKkn.mjs → context-types-DqTo6C79.mjs} +0 -0
  393. /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
  394. /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
  395. /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
  396. /package/dist/{experimental-workflows-Dh4DUoD_.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
  397. /package/dist/{mime-8pAB8-77.mjs → mime-CA7Lgovc.mjs} +0 -0
  398. /package/dist/{mode-CpyEz8pe.mjs → mode-C4CIyjtR.mjs} +0 -0
  399. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
  400. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
  401. /package/dist/{options-BvJoSSJR.mjs → options-DQPTH5n0.mjs} +0 -0
  402. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
  403. /package/dist/{patterns-r-0n824Y.mjs → patterns-BhAvqO0S.mjs} +0 -0
  404. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
  405. /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
  406. /package/dist/{request-cache-CYMbwZc6.mjs → request-cache-D9GQBxMP.mjs} +0 -0
  407. /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
  408. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
  409. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
  410. /package/dist/{slugify-BzGxlOFx.mjs → slugify-KSsVD_D3.mjs} +0 -0
  411. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
  412. /package/dist/{transaction-CShMWIej.mjs → transaction-C2EOMTJA.mjs} +0 -0
  413. /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
  414. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
  415. /package/dist/{types-BO8TGjS8.mjs → types-B3t5cxhU.mjs} +0 -0
  416. /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
  417. /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
  418. /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
  419. /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
  420. /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
@@ -1,14 +1,16 @@
1
1
  import { n as validateJsonFieldName } from "./validate-VPnKoIzW.mjs";
2
2
  import { c as jsonExtractExpr } from "./dialect-helpers-fk43GbDb.mjs";
3
- import { t as ContentRepository } from "./content-QaryevFO.mjs";
4
- import { i as encodeCursor, r as decodeCursor } from "./types-DfuD0Afl.mjs";
5
- import { t as MediaRepository } from "./media-DUAjMfvR.mjs";
6
- import { t as UserRepository } from "./user-DtNmjNYt.mjs";
7
- import { t as OptionsRepository } from "./options-BvJoSSJR.mjs";
8
- import { t as withTransaction } from "./transaction-CShMWIej.mjs";
9
- import { t as SeoRepository } from "./seo-Cd45Po8L.mjs";
10
- import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-DiKqWd3N.mjs";
11
- import { t as CronAccessImpl } from "./cron-DxCAU_Sn.mjs";
3
+ import { i as encodeCursor, r as decodeCursor } from "./types-Dq1qT19x.mjs";
4
+ import { t as ContentRepository } from "./content-Bh4BDjv8.mjs";
5
+ import { t as MediaRepository } from "./media-DMj0grzC.mjs";
6
+ import { t as UserRepository } from "./user-BIZPzCb9.mjs";
7
+ import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
8
+ import { t as withTransaction } from "./transaction-C2EOMTJA.mjs";
9
+ import { t as enrichImageMetadata } from "./enrich-DIFIFA8O.mjs";
10
+ import { t as SeoRepository } from "./seo-CQG3GCHQ.mjs";
11
+ import { a as markContentMediaUsageCollectionStaleSafely } from "./content-refresh-CgutSUfO.mjs";
12
+ import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-DWe8jwAp.mjs";
13
+ import { t as CronAccessImpl } from "./cron-cKcNTix_.mjs";
12
14
  import { sql } from "kysely";
13
15
  import { ulid } from "ulidx";
14
16
 
@@ -486,37 +488,58 @@ function createContentAccessWithWrite(db) {
486
488
  ...createContentAccess(db),
487
489
  async create(collection, data) {
488
490
  const { fields, seo } = splitSeoFromInput(data);
489
- return withTransaction(db, async (trx) => {
490
- const trxContentRepo = new ContentRepository(trx);
491
- const trxSeoRepo = new SeoRepository(trx);
492
- const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
493
- const item = await trxContentRepo.create({
494
- type: collection,
495
- data: fields
491
+ let contentMutated = false;
492
+ try {
493
+ const created = await withTransaction(db, async (trx) => {
494
+ const trxContentRepo = new ContentRepository(trx);
495
+ const trxSeoRepo = new SeoRepository(trx);
496
+ const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
497
+ const item = await trxContentRepo.create({
498
+ type: collection,
499
+ data: fields
500
+ });
501
+ contentMutated = true;
502
+ const result = toPluginContentItem(item);
503
+ if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
504
+ return result;
496
505
  });
497
- const result = toPluginContentItem(item);
498
- if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
499
- return result;
500
- });
506
+ await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
507
+ return created;
508
+ } catch (error) {
509
+ if (contentMutated) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
510
+ throw error;
511
+ }
501
512
  },
502
513
  async update(collection, id, data) {
503
514
  const { fields, seo } = splitSeoFromInput(data);
504
- return withTransaction(db, async (trx) => {
505
- const trxContentRepo = new ContentRepository(trx);
506
- const trxSeoRepo = new SeoRepository(trx);
507
- const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
508
- const item = Object.keys(fields).length > 0 ? await trxContentRepo.update(collection, id, { data: fields }) : await (async () => {
509
- const existing = await trxContentRepo.findById(collection, id);
510
- if (!existing) throw new Error("Content not found");
511
- return existing;
512
- })();
513
- const result = toPluginContentItem(item);
514
- if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
515
- return result;
516
- });
515
+ const hasFieldUpdates = Object.keys(fields).length > 0;
516
+ let contentMutated = false;
517
+ try {
518
+ const updated = await withTransaction(db, async (trx) => {
519
+ const trxContentRepo = new ContentRepository(trx);
520
+ const trxSeoRepo = new SeoRepository(trx);
521
+ const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
522
+ const item = hasFieldUpdates ? await trxContentRepo.update(collection, id, { data: fields }) : await (async () => {
523
+ const existing = await trxContentRepo.findById(collection, id);
524
+ if (!existing) throw new Error("Content not found");
525
+ return existing;
526
+ })();
527
+ if (hasFieldUpdates) contentMutated = true;
528
+ const result = toPluginContentItem(item);
529
+ if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
530
+ return result;
531
+ });
532
+ if (hasFieldUpdates) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
533
+ return updated;
534
+ } catch (error) {
535
+ if (contentMutated) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
536
+ throw error;
537
+ }
517
538
  },
518
539
  async delete(collection, id) {
519
- return new ContentRepository(db).delete(collection, id);
540
+ const deleted = await new ContentRepository(db).delete(collection, id);
541
+ if (deleted) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
542
+ return deleted;
520
543
  }
521
544
  };
522
545
  }
@@ -561,13 +584,38 @@ function createMediaAccess(db) {
561
584
  }
562
585
  /**
563
586
  * Create full media access with write operations.
564
- * If storage is not provided, upload() will throw at call time.
587
+ *
588
+ * `getUploadUrlFn` is optional. When it is omitted and storage is configured,
589
+ * `getUploadUrl()` is derived from storage by creating a pending media row and
590
+ * signed upload URL, matching the REST signed-upload path. `upload()` only
591
+ * needs storage. If storage is not provided, both throw at call time.
565
592
  */
566
593
  function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
567
594
  const mediaRepo = new MediaRepository(db);
595
+ const readAccess = createMediaAccess(db);
596
+ const getUploadUrl = getUploadUrlFn ?? (async (filename, contentType) => {
597
+ if (!storage) throw new Error("Media getUploadUrl() requires a storage backend. Configure storage in PluginContextFactoryOptions.");
598
+ const basename = filename.split("/").pop() ?? filename;
599
+ const dotIdx = basename.lastIndexOf(".");
600
+ const ext = dotIdx > 0 ? basename.slice(dotIdx).toLowerCase() : "";
601
+ const storageKey = `${ulid()}${ext}`;
602
+ const media = await mediaRepo.createPending({
603
+ filename: basename,
604
+ mimeType: contentType,
605
+ storageKey
606
+ });
607
+ return {
608
+ uploadUrl: (await storage.getSignedUploadUrl({
609
+ key: storageKey,
610
+ contentType,
611
+ expiresIn: 3600
612
+ })).url,
613
+ mediaId: media.id
614
+ };
615
+ });
568
616
  return {
569
- ...createMediaAccess(db),
570
- getUploadUrl: getUploadUrlFn,
617
+ ...readAccess,
618
+ getUploadUrl,
571
619
  async upload(filename, contentType, bytes) {
572
620
  if (!storage) throw new Error("Media upload() requires a storage backend. Configure storage in PluginContextFactoryOptions.");
573
621
  const keyPrefix = ulid();
@@ -579,6 +627,7 @@ function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
579
627
  body: new Uint8Array(bytes),
580
628
  contentType
581
629
  });
630
+ const enriched = await enrichImageMetadata(new Uint8Array(bytes), contentType);
582
631
  let media;
583
632
  try {
584
633
  media = await mediaRepo.create({
@@ -586,7 +635,11 @@ function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
586
635
  mimeType: contentType,
587
636
  size: bytes.byteLength,
588
637
  storageKey,
589
- status: "ready"
638
+ status: "ready",
639
+ width: enriched.width,
640
+ height: enriched.height,
641
+ blurhash: enriched.blurhash,
642
+ dominantColor: enriched.dominantColor
590
643
  });
591
644
  } catch (error) {
592
645
  try {
@@ -774,17 +827,17 @@ function createUserAccess(db) {
774
827
  * Factory for creating plugin contexts
775
828
  */
776
829
  var PluginContextFactory = class {
777
- optionsRepo;
778
- db;
830
+ resolveDb;
779
831
  storage;
780
832
  getUploadUrl;
781
833
  site;
782
834
  urlHelper;
783
835
  cronReschedule;
784
836
  emailPipeline;
837
+ warnedMissingMediaBackend = /* @__PURE__ */ new Set();
785
838
  constructor(options) {
786
- this.db = options.db;
787
- this.optionsRepo = new OptionsRepository(options.db);
839
+ const fixedDb = options.db;
840
+ this.resolveDb = options.getDb ?? (() => fixedDb);
788
841
  this.storage = options.storage;
789
842
  this.getUploadUrl = options.getUploadUrl;
790
843
  this.site = createSiteInfo(options.siteInfo ?? {});
@@ -797,22 +850,30 @@ var PluginContextFactory = class {
797
850
  */
798
851
  createContext(plugin) {
799
852
  const capabilities = new Set(plugin.capabilities);
800
- const kv = createKVAccess(this.optionsRepo, plugin.id);
853
+ const db = this.resolveDb();
854
+ const kv = createKVAccess(new OptionsRepository(db), plugin.id);
801
855
  const log = createLogAccess(plugin.id);
802
- const storage = createStorageAccess(this.db, plugin.id, plugin.storage);
856
+ const storage = createStorageAccess(db, plugin.id, plugin.storage);
803
857
  let content;
804
- if (capabilities.has("content:write")) content = createContentAccessWithWrite(this.db);
805
- else if (capabilities.has("content:read")) content = createContentAccess(this.db);
858
+ if (capabilities.has("content:write")) content = createContentAccessWithWrite(db);
859
+ else if (capabilities.has("content:read")) content = createContentAccess(db);
806
860
  let media;
807
- if (capabilities.has("media:write") && this.getUploadUrl) media = createMediaAccessWithWrite(this.db, this.getUploadUrl, this.storage);
808
- else if (capabilities.has("media:read")) media = createMediaAccess(this.db);
861
+ if (capabilities.has("media:write")) if (this.getUploadUrl || this.storage) media = createMediaAccessWithWrite(db, this.getUploadUrl, this.storage);
862
+ else {
863
+ if (!this.warnedMissingMediaBackend.has(plugin.id)) {
864
+ this.warnedMissingMediaBackend.add(plugin.id);
865
+ log.warn("declares the media:write capability but no storage backend is configured; upload() is unavailable.");
866
+ }
867
+ if (capabilities.has("media:read")) media = createMediaAccess(db);
868
+ }
869
+ else if (capabilities.has("media:read")) media = createMediaAccess(db);
809
870
  let http;
810
871
  if (capabilities.has("network:request:unrestricted")) http = createUnrestrictedHttpAccess(plugin.id);
811
872
  else if (capabilities.has("network:request")) http = createHttpAccess(plugin.id, plugin.allowedHosts);
812
873
  let users;
813
- if (capabilities.has("users:read")) users = createUserAccess(this.db);
874
+ if (capabilities.has("users:read")) users = createUserAccess(db);
814
875
  let cron;
815
- if (this.cronReschedule) cron = new CronAccessImpl(this.db, plugin.id, this.cronReschedule);
876
+ if (this.cronReschedule) cron = new CronAccessImpl(db, plugin.id, this.cronReschedule);
816
877
  let email;
817
878
  if (capabilities.has("email:send") && this.emailPipeline?.isAvailable()) {
818
879
  const pipeline = this.emailPipeline;
@@ -1,5 +1,5 @@
1
- import { a as ContextRepository, i as parseSiteBriefingScope, n as SiteBriefingError } from "./briefing-gKWiGLt1.mjs";
2
- import { b as toPublicContextEntry, x as toPublicContextEntryPage, y as toPublicContextDiff } from "./site-context-DaN9Z91j.mjs";
1
+ import { a as ContextRepository, i as parseSiteBriefingScope, n as SiteBriefingError } from "./briefing-CawZ59CY.mjs";
2
+ import { b as toPublicContextEntryPage, v as toPublicContextDiff, y as toPublicContextEntry } from "./site-context-DQiL8Fl5.mjs";
3
3
 
4
4
  //#region src/api/handlers/context.ts
5
5
  async function handleContextEntryList(db, input = {}) {
@@ -1,4 +1,5 @@
1
- import { T as resolveActorIdentity, p as logSiteActivitySafely } from "./activity-events-C9u37D5z.mjs";
1
+ import { t as resolveActorIdentity } from "./actor-CrObAPV0.mjs";
2
+ import { p as logSiteActivitySafely } from "./activity-events-y6eT8UW6.mjs";
2
3
 
3
4
  //#region src/api/context-route-helpers.ts
4
5
  function resolveContextRouteActor(locals) {
@@ -17,13 +17,17 @@ const MAX_ONESHOT_RETRIES = 5;
17
17
  /**
18
18
  * Executes overdue cron tasks.
19
19
  *
20
- * Called by platform-specific schedulers (NodeCronScheduler, DinewayScheduler DO,
21
- * PiggybackScheduler). Stateless — all state lives in the database.
20
+ * Called by schedulers (NodeCronScheduler, PiggybackScheduler). Stateless —
21
+ * all state lives in the database.
22
22
  */
23
23
  var CronExecutor = class {
24
+ resolveDb;
24
25
  constructor(db, invokeCronHook) {
25
- this.db = db;
26
26
  this.invokeCronHook = invokeCronHook;
27
+ this.resolveDb = typeof db === "function" ? db : () => db;
28
+ }
29
+ get db() {
30
+ return this.resolveDb();
27
31
  }
28
32
  /**
29
33
  * Process all overdue tasks.
@@ -1,8 +1,8 @@
1
1
  import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
- import { t as ContentRepository } from "./content-QaryevFO.mjs";
3
- import { t as MediaRepository } from "./media-DUAjMfvR.mjs";
4
- import { t as UserRepository } from "./user-DtNmjNYt.mjs";
5
- import { t as ReviewRequestRepository } from "./review-requests-gGMyYYhy.mjs";
2
+ import { t as ContentRepository } from "./content-Bh4BDjv8.mjs";
3
+ import { t as MediaRepository } from "./media-DMj0grzC.mjs";
4
+ import { t as UserRepository } from "./user-BIZPzCb9.mjs";
5
+ import { t as ReviewRequestRepository } from "./review-requests-DUyEmtmG.mjs";
6
6
  import { sql } from "kysely";
7
7
 
8
8
  //#region src/api/handlers/dashboard.ts
@@ -1,4 +1,4 @@
1
- import "../types-eu5UDgHN.mjs";
2
- import { a as SqliteConfig, c as sqlite, i as PostgresConfig, n as DatabaseDialectType, o as libsql, r as LibsqlConfig, s as postgres, t as DatabaseDescriptor } from "../adapters-OQCImOL7.mjs";
3
- import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-D4FL9usy.mjs";
1
+ import "../types-DU0bU2Wu.mjs";
2
+ import { a as SqliteConfig, c as sqlite, i as PostgresConfig, n as DatabaseDialectType, o as libsql, r as LibsqlConfig, s as postgres, t as DatabaseDescriptor } from "../adapters-NVSs4UH7.mjs";
3
+ import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-1tC2tIRV.mjs";
4
4
  export { type DatabaseDescriptor, type DatabaseDialectType, type LibsqlConfig, type MigrationStatus, type PostgresConfig, type SqliteConfig, getMigrationStatus, libsql, postgres, rollbackMigration, runMigrations, sqlite };
package/dist/db/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration } from "../runner-B-tbV751.mjs";
1
+ import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration } from "../runner-DB7CRfOF.mjs";
2
2
  import "../dialect-helpers-fk43GbDb.mjs";
3
3
 
4
4
  //#region src/db/adapters.ts
@@ -1,4 +1,4 @@
1
- import { r as LibsqlConfig } from "../adapters-OQCImOL7.mjs";
1
+ import { r as LibsqlConfig } from "../adapters-NVSs4UH7.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-OQCImOL7.mjs";
1
+ import { i as PostgresConfig } from "../adapters-NVSs4UH7.mjs";
2
2
  import { PostgresDialect } from "kysely";
3
3
 
4
4
  //#region src/db/postgres.d.ts
@@ -1,4 +1,4 @@
1
- import { a as SqliteConfig } from "../adapters-OQCImOL7.mjs";
1
+ import { a as SqliteConfig } from "../adapters-NVSs4UH7.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/sqlite.d.ts
@@ -1,8 +1,8 @@
1
- import { t as withTransaction } from "./transaction-CShMWIej.mjs";
2
- import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-Dh4DUoD_.mjs";
3
- import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-CYUoFGo7.mjs";
4
- import { o as lookupOAuthClient } from "./oauth-clients-CzeMGyUU.mjs";
5
- import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-BFjWF8wK.mjs";
1
+ import { t as withTransaction } from "./transaction-C2EOMTJA.mjs";
2
+ import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-2r7OWi_I.mjs";
3
+ import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-BMsUnIAw.mjs";
4
+ import { o as lookupOAuthClient } from "./oauth-clients-Dl9E8dEM.mjs";
5
+ import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-Ygw4bNyt.mjs";
6
6
  import { clampScopes } from "@dineway-ai/auth";
7
7
  import { generateCodeVerifier } from "arctic";
8
8
 
@@ -1,3 +1,4 @@
1
+ import { n as normalizeMime } from "./mime-CA7Lgovc.mjs";
1
2
  import { encode } from "blurhash";
2
3
  import { imageSize } from "image-size";
3
4
 
@@ -67,8 +68,9 @@ function extractDominantColor(data, width, height) {
67
68
  }
68
69
  /**
69
70
  * Read image dimensions from headers without decoding pixel data.
71
+ * Returns null when the header cannot be parsed.
70
72
  */
71
- function getImageDimensions(buffer) {
73
+ function readDimensions(buffer) {
72
74
  try {
73
75
  const result = imageSize(buffer);
74
76
  if (result.width != null && result.height != null) return {
@@ -84,17 +86,18 @@ function getImageDimensions(buffer) {
84
86
  * Generate blurhash and dominant color from an image buffer.
85
87
  * Returns null for non-image MIME types or on failure.
86
88
  *
87
- * @param dimensions - Optional pre-known dimensions. Used as a fallback when
88
- * image-size cannot parse the buffer (e.g. truncated headers). When the
89
- * decoded size (width * height * 4) exceeds MAX_DECODED_BYTES, placeholder
90
- * generation is skipped to avoid OOM on memory-constrained runtimes.
89
+ * @param dimensions - Optional pre-known dimensions. When present they are
90
+ * trusted as bounds for the buffer that will be decoded; otherwise dimensions
91
+ * are read from this buffer's header. Generation is skipped when no dimensions
92
+ * are available or when the decoded size exceeds MAX_DECODED_BYTES.
91
93
  */
92
94
  async function generatePlaceholder(buffer, mimeType, dimensions) {
93
- const format = SUPPORTED_TYPES[mimeType];
95
+ const format = SUPPORTED_TYPES[normalizeMime(mimeType)];
94
96
  if (!format) return null;
95
97
  try {
96
- const dims = getImageDimensions(buffer) ?? dimensions;
97
- if (dims && dims.width * dims.height * 4 > MAX_DECODED_BYTES) return null;
98
+ const dims = dimensions ?? readDimensions(buffer);
99
+ if (!dims) return null;
100
+ if (dims.width * dims.height * 4 > MAX_DECODED_BYTES) return null;
98
101
  const { width, height, data } = format === "jpeg" ? await decodeJpeg(buffer) : await decodePng(buffer);
99
102
  if (width === 0 || height === 0) return null;
100
103
  let encodePixels;
@@ -139,4 +142,28 @@ function downsample(src, srcW, srcH, dstW, dstH) {
139
142
  }
140
143
 
141
144
  //#endregion
142
- export { generatePlaceholder as t };
145
+ //#region src/media/enrich.ts
146
+ /**
147
+ * Image Metadata Enrichment
148
+ *
149
+ * Derives dimensions and LQIP placeholders from image bytes. Server-side media
150
+ * creation paths share this helper so direct uploads, signed upload confirms,
151
+ * imports, and plugin uploads store consistent image metadata.
152
+ */
153
+ async function enrichImageMetadata(bytes, contentType, opts) {
154
+ const normalizedContentType = normalizeMime(contentType);
155
+ if (!normalizedContentType.startsWith("image/")) return {};
156
+ const headerDims = readDimensions(bytes) ?? void 0;
157
+ const recordDims = opts?.knownDimensions ?? headerDims;
158
+ const override = opts?.placeholder;
159
+ const placeholder = await generatePlaceholder(override ? override.bytes : bytes, override ? normalizeMime(override.contentType) : normalizedContentType, override ? void 0 : headerDims);
160
+ return {
161
+ width: recordDims?.width,
162
+ height: recordDims?.height,
163
+ blurhash: placeholder?.blurhash,
164
+ dominantColor: placeholder?.dominantColor
165
+ };
166
+ }
167
+
168
+ //#endregion
169
+ export { generatePlaceholder as n, enrichImageMetadata as t };
@@ -61,6 +61,7 @@ const ErrorCode = {
61
61
  URL_PATTERN_EXISTS: "URL_PATTERN_EXISTS",
62
62
  TABLE_NOT_FOUND: "TABLE_NOT_FOUND",
63
63
  FIELD_EXISTS: "FIELD_EXISTS",
64
+ FIELD_TYPE_COLUMN_CHANGE: "FIELD_TYPE_COLUMN_CHANGE",
64
65
  RESERVED_SLUG: "RESERVED_SLUG",
65
66
  INVALID_SLUG: "INVALID_SLUG",
66
67
  INVALID_URL_PATTERN: "INVALID_URL_PATTERN",
@@ -98,6 +99,9 @@ const ErrorCode = {
98
99
  COMMENTS_DISABLED: "COMMENTS_DISABLED",
99
100
  COMMENTS_CLOSED: "COMMENTS_CLOSED",
100
101
  COMMENT_REJECTED: "COMMENT_REJECTED",
102
+ COMMENT_NOT_APPROVED: "COMMENT_NOT_APPROVED",
103
+ REACTION_TOGGLE_ERROR: "REACTION_TOGGLE_ERROR",
104
+ REACTION_COUNTS_ERROR: "REACTION_COUNTS_ERROR",
101
105
  ACCOUNT_DISABLED: "ACCOUNT_DISABLED",
102
106
  ADMIN_EXISTS: "ADMIN_EXISTS",
103
107
  SETUP_COMPLETE: "SETUP_COMPLETE",
@@ -309,6 +313,7 @@ function mapErrorStatus(code) {
309
313
  case ErrorCode.COMMENTS_DISABLED:
310
314
  case ErrorCode.COMMENTS_CLOSED:
311
315
  case ErrorCode.COMMENT_REJECTED:
316
+ case ErrorCode.COMMENT_NOT_APPROVED:
312
317
  case ErrorCode.DOMAIN_NOT_ALLOWED:
313
318
  case ErrorCode.INSUFFICIENT_ROLE:
314
319
  case ErrorCode.CAPABILITY_ESCALATION:
@@ -0,0 +1,49 @@
1
+ import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
2
+ import { getRequestContext } from "./request-context.mjs";
3
+ import { t as after } from "./after-BfniwgIf.mjs";
4
+ import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
5
+ import { n as BylineSchemaRegistry } from "./byline-registry-87nNnYl4.mjs";
6
+ import { n as invalidateProcessCache, r as processCachedAsync, t as createProcessCache } from "./process-cache-7xgAO9JY.mjs";
7
+
8
+ //#region src/bylines/field-defs-cache.ts
9
+ var field_defs_cache_exports = /* @__PURE__ */ __exportAll({ getBylineFieldDefs: () => getBylineFieldDefs });
10
+ const HOLDER_KEY = Symbol.for("dineway:byline-field-defs");
11
+ const REQUEST_CACHE_KEY_VERSION = "byline-fields-version";
12
+ const REQUEST_CACHE_KEY_DEFS_PREFIX = "byline-field-defs:";
13
+ function getHolder() {
14
+ const existing = Reflect.get(globalThis, HOLDER_KEY);
15
+ if (isFieldDefsHolder(existing)) return existing;
16
+ const holder = {
17
+ cache: createProcessCache(),
18
+ cachedVersion: -1
19
+ };
20
+ Reflect.set(globalThis, HOLDER_KEY, holder);
21
+ return holder;
22
+ }
23
+ function isFieldDefsHolder(value) {
24
+ if (value && typeof value === "object" && "cache" in value && "cachedVersion" in value) {
25
+ const cache = value.cache;
26
+ return typeof value.cachedVersion === "number" && !!cache && typeof cache === "object" && "lock" in cache;
27
+ }
28
+ return false;
29
+ }
30
+ const holder = getHolder();
31
+ async function getBylineFieldsVersion(db) {
32
+ return requestCached(REQUEST_CACHE_KEY_VERSION, () => new BylineSchemaRegistry(db).getVersion());
33
+ }
34
+ async function getBylineFieldDefs(db) {
35
+ const hasDbOverride = !!getRequestContext()?.db;
36
+ const version = await getBylineFieldsVersion(db);
37
+ const dirty = version % 2 !== 0;
38
+ return requestCached(`${REQUEST_CACHE_KEY_DEFS_PREFIX}${version}`, async () => {
39
+ if (hasDbOverride || dirty) return new BylineSchemaRegistry(db).listFields();
40
+ if (holder.cachedVersion !== version) {
41
+ invalidateProcessCache(holder.cache);
42
+ holder.cachedVersion = version;
43
+ }
44
+ return processCachedAsync(holder.cache, () => new BylineSchemaRegistry(db).listFields(), { anchor: (promise) => after(() => promise) });
45
+ });
46
+ }
47
+
48
+ //#endregion
49
+ export { getBylineFieldDefs as n, field_defs_cache_exports as t };
@@ -1,4 +1,4 @@
1
- import { a as __exportAll } from "./runner-B-tbV751.mjs";
1
+ import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
2
2
  import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
3
3
  import { s as isSqlite, u as tableExists } from "./dialect-helpers-fk43GbDb.mjs";
4
4
  import { sql } from "kysely";