dineway 0.1.49 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/dist/activity-DUaz_w7p.mjs +79 -0
  2. package/dist/{activity-events-CwM7yxPW.mjs → activity-events-CJDvE2uc.mjs} +5 -113
  3. package/dist/actor-0QJ1Gbtf.mjs +37 -0
  4. package/dist/after-BfniwgIf.mjs +9 -0
  5. package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins--OwHHiY8.mjs} +1 -1
  6. package/dist/api/route-utils.d.mts +9 -10
  7. package/dist/api/route-utils.mjs +16 -13
  8. package/dist/api/schemas/index.d.mts +2 -2
  9. package/dist/api/schemas/index.mjs +5 -4
  10. package/dist/{api-BMIxRIEN.mjs → api-B4PHIF4V.mjs} +93 -41
  11. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-tbK_sORH.mjs} +6 -2
  12. package/dist/{apply-D_RlTYtC.mjs → apply-DjTqq6Ae.mjs} +117 -77
  13. package/dist/astro/image-endpoint.d.mts +7 -0
  14. package/dist/astro/image-endpoint.mjs +54 -0
  15. package/dist/astro/index.d.mts +34 -11
  16. package/dist/astro/index.mjs +163 -24
  17. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  18. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  19. package/dist/astro/middleware/auth.d.mts +8 -18
  20. package/dist/astro/middleware/auth.mjs +42 -24
  21. package/dist/astro/middleware/redirect.mjs +13 -4
  22. package/dist/astro/middleware/request-context.mjs +8 -5
  23. package/dist/astro/middleware/seed.d.mts +1 -1
  24. package/dist/astro/middleware/seed.mjs +2 -2
  25. package/dist/astro/middleware/setup.mjs +1 -1
  26. package/dist/astro/middleware.mjs +389 -206
  27. package/dist/astro/routes/admin.astro +6 -1
  28. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  29. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  30. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  31. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  32. package/dist/astro/routes/api/admin/briefing.mjs +21 -17
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  34. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  36. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  37. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
  38. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
  39. package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
  40. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
  41. package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
  42. package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
  43. package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
  44. package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
  45. package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -24
  46. package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -24
  47. package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -28
  48. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -28
  49. package/dist/astro/routes/api/admin/context/diff.mjs +31 -27
  50. package/dist/astro/routes/api/admin/context/index.mjs +32 -28
  51. package/dist/astro/routes/api/admin/context/stale.mjs +31 -27
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -24
  53. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -27
  54. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -27
  55. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -25
  56. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  57. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  58. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  59. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -51
  60. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -51
  61. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
  62. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -49
  63. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -48
  64. package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
  67. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -48
  68. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
  69. package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
  70. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
  71. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -63
  72. package/dist/astro/routes/api/admin/review-requests/index.d.mts +2 -1
  73. package/dist/astro/routes/api/admin/review-requests/index.mjs +58 -10
  74. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
  75. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  76. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
  77. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  78. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  79. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  80. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  81. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  82. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  83. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  84. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  85. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  86. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  87. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  88. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  89. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  90. package/dist/astro/routes/api/auth/me.mjs +9 -8
  91. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  92. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  93. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  94. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  95. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  96. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  97. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  98. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  99. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  100. package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
  101. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  102. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  103. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  104. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
  106. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  107. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  108. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  109. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -5
  110. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
  111. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -5
  112. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
  113. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +49 -20
  114. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -5
  115. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  116. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +67 -32
  117. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
  118. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  119. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -5
  120. package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
  121. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  122. package/dist/astro/routes/api/content/_collection_/index.mjs +11 -9
  123. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  124. package/dist/astro/routes/api/dashboard.mjs +9 -8
  125. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  126. package/dist/astro/routes/api/health.mjs +1 -1
  127. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  128. package/dist/astro/routes/api/import/probe.mjs +22 -10
  129. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  130. package/dist/astro/routes/api/import/wordpress/execute.d.mts +18 -1
  131. package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -37
  132. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -1
  133. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
  134. package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -32
  135. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +17 -1
  136. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -100
  137. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  138. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
  139. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +55 -2
  140. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -55
  141. package/dist/astro/routes/api/manifest.mjs +14 -5
  142. package/dist/astro/routes/api/mcp.mjs +753 -170
  143. package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
  144. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  145. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  146. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  147. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  148. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  149. package/dist/astro/routes/api/media/upload-url.mjs +11 -10
  150. package/dist/astro/routes/api/media.mjs +28 -35
  151. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -28
  152. package/dist/astro/routes/api/menus/_name_/items.mjs +32 -28
  153. package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -28
  154. package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -28
  155. package/dist/astro/routes/api/menus/_name_.mjs +32 -28
  156. package/dist/astro/routes/api/menus/index.mjs +32 -28
  157. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  158. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  159. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  160. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  161. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  162. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  163. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  164. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  165. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  166. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +46 -31
  167. package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
  168. package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
  169. package/dist/astro/routes/api/redirects/_id_.mjs +33 -29
  170. package/dist/astro/routes/api/redirects/index.mjs +33 -29
  171. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  172. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -43
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -43
  175. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -43
  176. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -43
  177. package/dist/astro/routes/api/schema/collections/index.mjs +48 -43
  178. package/dist/astro/routes/api/schema/index.mjs +14 -15
  179. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
  180. package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
  181. package/dist/astro/routes/api/search/enable.mjs +11 -10
  182. package/dist/astro/routes/api/search/index.mjs +10 -9
  183. package/dist/astro/routes/api/search/rebuild.mjs +11 -10
  184. package/dist/astro/routes/api/search/stats.mjs +6 -6
  185. package/dist/astro/routes/api/search/suggest.mjs +10 -9
  186. package/dist/astro/routes/api/sections/_slug_.mjs +32 -28
  187. package/dist/astro/routes/api/sections/index.mjs +32 -28
  188. package/dist/astro/routes/api/settings/email.mjs +4 -4
  189. package/dist/astro/routes/api/settings.mjs +32 -28
  190. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  191. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  192. package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
  193. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  194. package/dist/astro/routes/api/setup/index.mjs +29 -25
  195. package/dist/astro/routes/api/setup/status.mjs +3 -3
  196. package/dist/astro/routes/api/snapshot.mjs +8 -7
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -31
  198. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -31
  199. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -31
  200. package/dist/astro/routes/api/taxonomies/index.mjs +35 -31
  201. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  202. package/dist/astro/routes/api/typegen.mjs +4 -4
  203. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  204. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  205. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  206. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -27
  207. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -28
  208. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -28
  209. package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -26
  210. package/dist/astro/routes/api/widget-areas/index.mjs +32 -28
  211. package/dist/astro/routes/api/widget-components.mjs +2 -2
  212. package/dist/astro/routes/robots.txt.mjs +8 -7
  213. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
  214. package/dist/astro/routes/sitemap.xml.mjs +9 -8
  215. package/dist/astro/session-driver.d.mts +1 -1
  216. package/dist/astro/session-driver.mjs +2 -2
  217. package/dist/astro/types.d.mts +22 -13
  218. package/dist/{audit-BeNsSyfU.mjs → audit-B2pRxZ20.mjs} +1 -1
  219. package/dist/auth/providers/github.d.mts +1 -1
  220. package/dist/auth/providers/google.d.mts +1 -1
  221. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-D71jourk.mjs} +1 -1
  222. package/dist/{authorize-BLO0m7fW.mjs → authorize-ZXPGPwKn.mjs} +1 -1
  223. package/dist/{briefing-CkTee1ex.mjs → briefing-0rf-su3-.mjs} +90 -28
  224. package/dist/{briefing-DJX6irto.mjs → briefing-kRhegBoF.mjs} +2 -1
  225. package/dist/bundle-CEcdUa1s.mjs +602 -0
  226. package/dist/{byline-BVC1lV6G.mjs → byline-7xR185Ly.mjs} +30 -62
  227. package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-BKzA0fJU.mjs} +1 -1
  228. package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-Ckeqd1OY.d.mts} +88 -35
  229. package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-WN7RQT4q.mjs} +10 -4
  230. package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-Ba54M74c.mjs} +2 -2
  231. package/dist/{bylines-LN9XISRo.mjs → bylines-C-EL6dh3.mjs} +9 -3
  232. package/dist/{bylines-DwokOFj6.mjs → bylines-CmZFCMr0.mjs} +5 -5
  233. package/dist/{cache-Bac05gBd.mjs → cache-DkVCKGio.mjs} +2 -2
  234. package/dist/{chunks-CuUt7K50.mjs → chunks-ChGNDY8r.mjs} +1 -1
  235. package/dist/cli/index.d.mts +29 -1
  236. package/dist/cli/index.mjs +1466 -1763
  237. package/dist/cli/plugin-kit.d.mts +75 -0
  238. package/dist/cli/plugin-kit.mjs +4 -0
  239. package/dist/client/external-auth-headers.d.mts +1 -1
  240. package/dist/client/index.d.mts +27 -52
  241. package/dist/client/index.mjs +34 -6
  242. package/dist/client-factory-BDD9azPJ.mjs +233 -0
  243. package/dist/{comment-Beue8-15.mjs → comment-DFALgsJD.mjs} +13 -3
  244. package/dist/comment-reaction-C37bf99u.mjs +58 -0
  245. package/dist/{comments-DcjFIfqX.mjs → comments-B3NwDBxl.mjs} +1 -1
  246. package/dist/{content-CBxYGWfL.mjs → content-DJcAYFhz.mjs} +51 -34
  247. package/dist/content-refresh-B4ZCmxgd.mjs +1576 -0
  248. package/dist/{context-Df1xVYyr.mjs → context-DnpXcp6Y.mjs} +2 -2
  249. package/dist/{context-CQVNZaR8.mjs → context-fSCYLL3c.mjs} +125 -53
  250. package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-CI8XzcsK.mjs} +2 -1
  251. package/dist/{cron-DxCAU_Sn.mjs → cron-B1SL_lsb.mjs} +7 -3
  252. package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-D0nj5oWg.mjs} +4 -4
  253. package/dist/db/index.d.mts +3 -3
  254. package/dist/db/index.mjs +1 -1
  255. package/dist/db/libsql.d.mts +1 -1
  256. package/dist/db/postgres.d.mts +1 -1
  257. package/dist/db/sqlite.d.mts +1 -1
  258. package/dist/{device-flow-BZVGftqi.mjs → device-flow-BJe6VEhP.mjs} +5 -5
  259. package/dist/{placeholder-d54Qr_7n.mjs → enrich-Ck9tfMqe.mjs} +36 -9
  260. package/dist/{error-DCSuUAZW.mjs → error-CSVaQNZy.mjs} +5 -0
  261. package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-GVhUgzEs.mjs} +1 -1
  262. package/dist/field-defs-cache-DL-T2XVS.mjs +49 -0
  263. package/dist/forgeway-seo-client-G5ddhVHd.mjs +456 -0
  264. package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-ewTGohf4.mjs} +1 -1
  265. package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-DEFj8e6u.mjs} +2 -2
  266. package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-C23JHaWz.mjs} +5 -4
  267. package/dist/import-CXXL5pip.mjs +1354 -0
  268. package/dist/index-DcnOCD1e.d.mts +375 -0
  269. package/dist/index.d.mts +15 -16
  270. package/dist/index.mjs +85 -70
  271. package/dist/{jsonld-DZ67souc.d.mts → jsonld-DzKbhRZ4.d.mts} +8 -4
  272. package/dist/{load-D9OiGr2m.mjs → load-CFtJRT3c.mjs} +1 -1
  273. package/dist/{loader--GOYux8M.mjs → loader-aWkkc1_o.mjs} +117 -31
  274. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-uA6pRFXi.mjs} +38 -1
  275. package/dist/mcp-reviewed-executor-Dn52L_yY.mjs +558 -0
  276. package/dist/media/image-endpoint.d.mts +32 -0
  277. package/dist/media/image-endpoint.mjs +111 -0
  278. package/dist/media/index.d.mts +27 -2
  279. package/dist/media/index.mjs +5 -3
  280. package/dist/media/local-runtime.d.mts +15 -11
  281. package/dist/media/local-runtime.mjs +9 -7
  282. package/dist/{media-CbKyYukG.mjs → media-CVMOoywq.mjs} +3 -1
  283. package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-zDNJmXCo.mjs} +1 -1
  284. package/dist/media-url-BdoLPvg8.mjs +20 -0
  285. package/dist/{menus-C7F0sCrC.mjs → menus-CCG2z5um.mjs} +80 -15
  286. package/dist/{menus-BZbXf-ej.mjs → menus-CmyIkRG5.mjs} +19 -5
  287. package/dist/{normalize-ByemhhfW.mjs → normalize-Cyt7JdF7.mjs} +8 -1
  288. package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-B9H7X85L.mjs} +5 -5
  289. package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dwl32-Uj.mjs} +2 -2
  290. package/dist/object-cache/memory.d.mts +14 -0
  291. package/dist/object-cache/memory.mjs +55 -0
  292. package/dist/object-cache-D51qOseS.mjs +419 -0
  293. package/dist/output-DhBe5_Pi.mjs +68 -0
  294. package/dist/page/index.d.mts +10 -3
  295. package/dist/page/index.mjs +2 -2
  296. package/dist/{parse-CneSgl7-.mjs → parse-i15EFSAE.mjs} +1 -1
  297. package/dist/{parser-DxfsARXL.mjs → parser-06LLLL4E.mjs} +151 -9
  298. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-DkWkXfDI.d.mts} +12 -4
  299. package/dist/plugin-utils.d.mts +8 -9
  300. package/dist/plugins/adapt-sandbox-entry.d.mts +8 -9
  301. package/dist/plugins/adapt-sandbox-entry.mjs +13 -2
  302. package/dist/{plugins-DzfqRREq.mjs → plugins-CPA2PtfY.mjs} +919 -66
  303. package/dist/{transport-LSdZVXHF.mjs → portable-text-BASHceim.mjs} +1 -134
  304. package/dist/portable-text-E79LyjGo.d.mts +45 -0
  305. package/dist/{preview-C-3YTX2U.mjs → preview-BjedZm8G.mjs} +4 -3
  306. package/dist/process-cache-CCDgti7j.mjs +106 -0
  307. package/dist/project-env-DKibmuP8.mjs +95 -0
  308. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-DC2JdWeO.d.mts} +1 -1
  309. package/dist/{public-url-B4xV4rGa.d.mts → public-url-DQJCnYi9.d.mts} +1 -1
  310. package/dist/publication-authorization-RKiHXKtq.mjs +985 -0
  311. package/dist/{query-CZ3TH_Uu.mjs → query-C2U5u5_p.mjs} +11 -6
  312. package/dist/{query-Ds0EnMFX.mjs → query-DEv5x6yB.mjs} +281 -76
  313. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-DglsAJSw.mjs} +2 -2
  314. package/dist/{redirect-CEACczxo.mjs → redirect-ubhEqQCQ.mjs} +2 -2
  315. package/dist/{redirects-ocRJmQHP.mjs → redirects-Bhpm8bRe.mjs} +35 -19
  316. package/dist/{redirects-DYj1yPxs.mjs → redirects-xs2yahLq.mjs} +47 -24
  317. package/dist/{registry-D7HACema.mjs → registry-BYYyb2tF.mjs} +148 -81
  318. package/dist/request-context.d.mts +2 -0
  319. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CFe1tW2M.mjs} +1 -1
  320. package/dist/review-payload-BysRWpxS.mjs +111 -0
  321. package/dist/{review-requests-BW2NxY-l.mjs → review-requests-CTWGnWUt.mjs} +1 -1
  322. package/dist/review-requests-D42VEP1l.mjs +142 -0
  323. package/dist/review-route-helpers-C31vO6SI.mjs +41 -0
  324. package/dist/runner-BgmttQmD.mjs +7444 -0
  325. package/dist/{runner-09sTqtv0.d.mts → runner-D6hzs8L9.d.mts} +1 -1
  326. package/dist/runtime.d.mts +9 -10
  327. package/dist/runtime.mjs +3 -3
  328. package/dist/schema-DUtnZxjZ.mjs +8 -0
  329. package/dist/{search-Gdrqj582.mjs → search-DUKgZUlm.mjs} +5 -3
  330. package/dist/{secrets-CeGpBFV2.mjs → secrets-ZV5rd8yV.mjs} +14 -11
  331. package/dist/{sections-BOjU13Y-.mjs → sections-DvFgsnda.mjs} +2 -2
  332. package/dist/seed/index.d.mts +2 -2
  333. package/dist/seed/index.mjs +21 -18
  334. package/dist/seo/index.d.mts +1 -1
  335. package/dist/seo/index.mjs +3 -12
  336. package/dist/{seo-5lJOtB5J.mjs → seo-BLszyJxd.mjs} +22 -4
  337. package/dist/{seo-CLj8lS7Q.mjs → seo-BU8MLCS9.mjs} +5 -2
  338. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-GnCuL1ML.mjs} +11 -3
  339. package/dist/{service-jGlhrICs.mjs → service-FL3fB0Rx.mjs} +2 -2
  340. package/dist/session-user-Ct6GBLvn.mjs +22 -0
  341. package/dist/{settings-CUXOxzsT.mjs → settings-BECcAIRH.mjs} +28 -55
  342. package/dist/{settings-DlBsT2VS.mjs → settings-EzADu-dd.mjs} +2 -2
  343. package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-Da0axZEE.mjs} +1 -1
  344. package/dist/{site-activity-DONFrMBJ.mjs → site-activity-h8smOlYI.mjs} +1 -1
  345. package/dist/{site-context-C8Az_P_I.mjs → site-context-B8T1kpUP.mjs} +337 -530
  346. package/dist/{site-url-DIMD68go.mjs → site-url-DJEid0ml.mjs} +1 -1
  347. package/dist/stable-hash-DshcXvRE.mjs +19 -0
  348. package/dist/status-NqWOSFAD.mjs +21 -0
  349. package/dist/storage/local.d.mts +1 -1
  350. package/dist/storage/local.mjs +1 -1
  351. package/dist/storage/s3.d.mts +1 -1
  352. package/dist/storage/s3.mjs +1 -1
  353. package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-BiM9NtgW.mjs} +36 -29
  354. package/dist/taxonomies-DSnY5nOa.mjs +443 -0
  355. package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-0k_vRVsD.mjs} +44 -9
  356. package/dist/transport-C46KHLMP.mjs +134 -0
  357. package/dist/types-A8fPOJnl.mjs +69 -0
  358. package/dist/types-BLQCz46p.d.mts +118 -0
  359. package/dist/{types-CwawBUTa.d.mts → types-B_FlxIIl.d.mts} +4 -1
  360. package/dist/{types-CSgR9nQB.mjs → types-ChxYDRvx.mjs} +1 -1
  361. package/dist/{types-GaCtZ1k9.d.mts → types-Cw0PeCT_.d.mts} +18 -0
  362. package/dist/types-DuQn1G7-.d.mts +2973 -0
  363. package/dist/{runtime-C4-2lSFg.d.mts → types-DwoUifGE.d.mts} +5668 -3000
  364. package/dist/{types-DRIKLmJI.d.mts → types-opjX_kz6.d.mts} +17 -2
  365. package/dist/ui/server-runtime.d.mts +13 -15
  366. package/dist/ui/server-runtime.mjs +24 -20
  367. package/dist/url-guoXQQcV.mjs +33 -0
  368. package/dist/{user-DTLoZs16.mjs → user-BH-n01y3.mjs} +2 -2
  369. package/dist/{utils-B8hBJ9Oz.mjs → utils-D1SrKGtP.mjs} +129 -7
  370. package/dist/{validate-DzjCdy6v.d.mts → validate-CbVFoJgc.d.mts} +65 -8
  371. package/dist/{validate-DWmPO6oj.mjs → validate-D1HL-oLR.mjs} +11 -6
  372. package/dist/version-C3iVRuaF.mjs +6 -0
  373. package/dist/{widgets-BpJ8EpPd.mjs → widgets-BZrLrNgS.mjs} +46 -43
  374. package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-C3PWcowq.mjs} +1 -1
  375. package/dist/{zod-generator-K91-g665.mjs → zod-generator-C7AsLpSB.mjs} +42 -14
  376. package/package.json +38 -8
  377. package/src/components/Block.astro +50 -0
  378. package/src/components/Comments.astro +143 -1
  379. package/src/components/DinewayHead.astro +19 -2
  380. package/src/components/DinewayImage.astro +66 -33
  381. package/src/components/DinewayMedia.astro +1 -2
  382. package/src/components/Image.astro +85 -40
  383. package/src/components/InlinePortableTextEditor.tsx +12 -2
  384. package/src/components/JsonLdScript.astro +9 -0
  385. package/src/components/LiveSearch.astro +40 -4
  386. package/src/components/index.ts +4 -0
  387. package/src/components/live-search-routing.ts +30 -0
  388. package/src/components/portable-text-text-align.ts +15 -0
  389. package/src/ui.ts +2 -0
  390. package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
  391. package/dist/import-4YBXbDkI.mjs +0 -684
  392. package/dist/index-CZiWCQDp.d.mts +0 -227
  393. package/dist/review-requests-Qum4713s.mjs +0 -79
  394. package/dist/runner-DzIpHGND.mjs +0 -2836
  395. package/dist/schema-Bsi-VpYv.mjs +0 -8
  396. package/dist/taxonomies-CZ-_DitR.mjs +0 -327
  397. package/dist/types-CuJOqHfM.d.mts +0 -758
  398. package/dist/types-DSPGWjxO.d.mts +0 -1247
  399. package/dist/types-nP9vGUFq.d.mts +0 -56
  400. package/dist/version-C4gfn0PJ.mjs +0 -6
  401. /package/dist/{adapters-OQCImOL7.d.mts → adapters-BiRymx02.d.mts} +0 -0
  402. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-Ypaly90d.mjs} +0 -0
  403. /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-D5pSY2S1.mjs} +0 -0
  404. /package/dist/{components--pg6zBvu.mjs → components-DImzlLhb.mjs} +0 -0
  405. /package/dist/{context-types-r8oFvyOq.mjs → context-types-eBuMDAg-.mjs} +0 -0
  406. /package/dist/{default-B6iaLvP7.mjs → default-D4Vygcy_.mjs} +0 -0
  407. /package/dist/{email-console-BOVqIYpB.mjs → email-console-Bp0r68iF.mjs} +0 -0
  408. /package/dist/{escape-BDgouFFY.mjs → escape-DN4Qmjsl.mjs} +0 -0
  409. /package/dist/{hash-BPmX6P8I.mjs → hash-mxxx2oPW.mjs} +0 -0
  410. /package/dist/{mime-CbKsKDCB.mjs → mime-C0vOHFm7.mjs} +0 -0
  411. /package/dist/{mode-CZqCF9dZ.mjs → mode-C8yZnIlR.mjs} +0 -0
  412. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CndT35iw.mjs} +0 -0
  413. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-CMehAaKs.mjs} +0 -0
  414. /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
  415. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-NYukYGed.mjs} +0 -0
  416. /package/dist/{patterns-DKAX6oqN.mjs → patterns-CoqlXUvk.mjs} +0 -0
  417. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-BtfrrzfD.mjs} +0 -0
  418. /package/dist/{public-url-B_m9IwdV.mjs → public-url-Cp6hyjVR.mjs} +0 -0
  419. /package/dist/{redirect-BjIBtDWY.mjs → redirect-DrbEmU9a.mjs} +0 -0
  420. /package/dist/{request-cache-ho99schz.mjs → request-cache-CBFjCwSt.mjs} +0 -0
  421. /package/dist/{resolve-DTuDyYKs.mjs → resolve-DE71WcL9.mjs} +0 -0
  422. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-BtkKnvxQ.mjs} +0 -0
  423. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-Ctzfyyp-.mjs} +0 -0
  424. /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
  425. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-FJqwQzj4.mjs} +0 -0
  426. /package/dist/{tokens-SLmgowfd.mjs → tokens-BDQU29Vd.mjs} +0 -0
  427. /package/dist/{transaction-CFLhEOuH.mjs → transaction-0LEAAy8R.mjs} +0 -0
  428. /package/dist/{transport-BnsNxh2l.d.mts → transport-D9pKAzFP.d.mts} +0 -0
  429. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-Dm7Mxvt6.mjs} +0 -0
  430. /package/dist/{types-CJ8DkL0q.mjs → types-B7TDDFMG.mjs} +0 -0
  431. /package/dist/{types-Dryvv7LH.d.mts → types-g0zMtraY.d.mts} +0 -0
  432. /package/dist/{types-Cg276-3z.mjs → types-mVVgRPaU.mjs} +0 -0
  433. /package/dist/{types-DZpT-PnG.d.mts → types-wFu80FrO.d.mts} +0 -0
  434. /package/dist/{url-w7Mp5qAD.mjs → url-EMAguGVk.mjs} +0 -0
@@ -1,13 +1,13 @@
1
- import { i as ContentItem } from "../types-DRIKLmJI.mjs";
2
- import { _i as MediaItem, a as S3StorageConfig, i as LocalStorageConfig, o as StorageDescriptor, r as getStoredConfig, t as DinewayConfig } from "../runtime-C4-2lSFg.mjs";
3
- import "../types-CuJOqHfM.mjs";
4
- import { X as ResolvedPlugin } from "../types-DSPGWjxO.mjs";
5
- import "../types-Dryvv7LH.mjs";
6
- import "../runner-09sTqtv0.mjs";
7
- import "../index-CZiWCQDp.mjs";
8
- import "../byline-fields-uJlygdzM.mjs";
9
- import "../types-GaCtZ1k9.mjs";
10
- import "../validate-DzjCdy6v.mjs";
1
+ import { i as ContentItem } from "../types-opjX_kz6.mjs";
2
+ import { ao as getStoredConfig, co as StorageDescriptor, es as MediaItem, oo as LocalStorageConfig, ro as DinewayConfig, so as S3StorageConfig, vt as ResolvedPlugin } from "../types-DwoUifGE.mjs";
3
+ import "../types-DuQn1G7-.mjs";
4
+ import "../runner-D6hzs8L9.mjs";
5
+ import "../index-DcnOCD1e.mjs";
6
+ import "../types-g0zMtraY.mjs";
7
+ import { i as ObjectCacheRuntimeConfig, r as ObjectCacheDescriptor } from "../types-BLQCz46p.mjs";
8
+ import "../validate-CbVFoJgc.mjs";
9
+ import "../byline-fields-Ckeqd1OY.mjs";
10
+ import "../types-Cw0PeCT_.mjs";
11
11
  import { DinewayHandlers, DinewayManifest, ManifestCollection } from "./types.mjs";
12
12
  import { AstroIntegration } from "astro";
13
13
 
@@ -54,10 +54,33 @@ declare function s3(config?: Partial<S3StorageConfig>): StorageDescriptor;
54
54
  */
55
55
  declare function local(config: LocalStorageConfig): StorageDescriptor;
56
56
  //#endregion
57
+ //#region src/astro/object-cache/adapters.d.ts
58
+ /** Options for {@link memoryCache}. */
59
+ interface MemoryCacheOptions extends ObjectCacheRuntimeConfig {
60
+ /**
61
+ * Soft cap on the number of cached keys per isolate before FIFO eviction.
62
+ * @default 1000
63
+ */
64
+ maxEntries?: number;
65
+ }
66
+ /**
67
+ * In-isolate memory object cache.
68
+ *
69
+ * Caches query results across requests within a single process. On Node this
70
+ * is a genuine cross-request cache; on multi-process deployments each process
71
+ * keeps its own cache. Useful for local development regardless of target.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * dineway({ objectCache: memoryCache({ defaultTtl: 600 }) })
76
+ * ```
77
+ */
78
+ declare function memoryCache(options?: MemoryCacheOptions): ObjectCacheDescriptor;
79
+ //#endregion
57
80
  //#region src/astro/integration/index.d.ts
58
81
  /**
59
82
  * Create the Dineway Astro integration
60
83
  */
61
84
  declare function dineway(config?: DinewayConfig): AstroIntegration;
62
85
  //#endregion
63
- export { type ContentItem, type DinewayConfig, type DinewayHandlers, type DinewayManifest, type LocalStorageConfig, type ManifestCollection, type MediaItem, type ResolvedPlugin, type S3StorageConfig, type StorageDescriptor, dineway as default, getStoredConfig, local, s3 };
86
+ export { type ContentItem, type DinewayConfig, type DinewayHandlers, type DinewayManifest, type LocalStorageConfig, type ManifestCollection, type MediaItem, type MemoryCacheOptions, type ResolvedPlugin, type S3StorageConfig, type StorageDescriptor, dineway as default, getStoredConfig, local, memoryCache, s3 };
@@ -1,7 +1,7 @@
1
- import { t as INTERNAL_MEDIA_PREFIX } from "../normalize-ByemhhfW.mjs";
2
- import { n as VERSION, t as COMMIT } from "../version-C4gfn0PJ.mjs";
3
- import { t as defaultSeed } from "../default-B6iaLvP7.mjs";
4
- import { n as validateAllowedOrigins, r as validateOriginShape } from "../allowed-origins-CyGnbgBd.mjs";
1
+ import { t as INTERNAL_MEDIA_PREFIX } from "../normalize-Cyt7JdF7.mjs";
2
+ import { n as VERSION, t as COMMIT } from "../version-C3iVRuaF.mjs";
3
+ import { t as defaultSeed } from "../default-D4Vygcy_.mjs";
4
+ import { n as validateAllowedOrigins, r as validateOriginShape } from "../allowed-origins--OwHHiY8.mjs";
5
5
  import { createRequire } from "node:module";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { dirname, isAbsolute, relative, resolve } from "node:path";
@@ -61,6 +61,27 @@ function local(config) {
61
61
  };
62
62
  }
63
63
 
64
+ //#endregion
65
+ //#region src/astro/object-cache/adapters.ts
66
+ /**
67
+ * In-isolate memory object cache.
68
+ *
69
+ * Caches query results across requests within a single process. On Node this
70
+ * is a genuine cross-request cache; on multi-process deployments each process
71
+ * keeps its own cache. Useful for local development regardless of target.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * dineway({ objectCache: memoryCache({ defaultTtl: 600 }) })
76
+ * ```
77
+ */
78
+ function memoryCache(options = {}) {
79
+ return {
80
+ entrypoint: "dineway/object-cache/memory",
81
+ config: { ...options }
82
+ };
83
+ }
84
+
64
85
  //#endregion
65
86
  //#region src/astro/integration/font-provider.ts
66
87
  /**
@@ -196,10 +217,28 @@ function resolveRoute(route) {
196
217
  return resolve(__dirname, "../routes", route);
197
218
  }
198
219
  }
220
+ const PUBLIC_ROUTE_OVERRIDE_EXTENSIONS = [
221
+ ".astro",
222
+ ".js",
223
+ ".ts",
224
+ ".jsx",
225
+ ".tsx",
226
+ ".mjs",
227
+ ".mts",
228
+ ".md",
229
+ ".mdx",
230
+ ".html"
231
+ ];
232
+ function hasUserDefinedPublicRoute(srcDir, basename) {
233
+ const srcDirPath = fileURLToPath(srcDir);
234
+ return PUBLIC_ROUTE_OVERRIDE_EXTENSIONS.some((extension) => {
235
+ return existsSync(resolve(srcDirPath, "pages", `${basename}${extension}`)) || existsSync(resolve(srcDirPath, "pages", basename, `index${extension}`));
236
+ });
237
+ }
199
238
  /**
200
239
  * Injects all core Dineway routes.
201
240
  */
202
- function injectCoreRoutes(injectRoute) {
241
+ function injectCoreRoutes(injectRoute, options = {}) {
203
242
  injectRoute({
204
243
  pattern: "/_dineway/admin/[...path]",
205
244
  entrypoint: resolveRoute("admin.astro")
@@ -744,6 +783,10 @@ function injectCoreRoutes(injectRoute) {
744
783
  pattern: "/_dineway/api/comments/[collection]/[contentId]",
745
784
  entrypoint: resolveRoute("api/comments/[collection]/[contentId]/index.ts")
746
785
  });
786
+ injectRoute({
787
+ pattern: "/_dineway/api/comments/[collection]/[contentId]/reactions",
788
+ entrypoint: resolveRoute("api/comments/[collection]/[contentId]/reactions.ts")
789
+ });
747
790
  injectRoute({
748
791
  pattern: "/_dineway/api/admin/comments",
749
792
  entrypoint: resolveRoute("api/admin/comments/index.ts")
@@ -764,7 +807,7 @@ function injectCoreRoutes(injectRoute) {
764
807
  pattern: "/_dineway/api/admin/comments/[id]",
765
808
  entrypoint: resolveRoute("api/admin/comments/[id].ts")
766
809
  });
767
- injectRoute({
810
+ if (!options.srcDir || !hasUserDefinedPublicRoute(options.srcDir, "sitemap.xml")) injectRoute({
768
811
  pattern: "/sitemap.xml",
769
812
  entrypoint: resolveRoute("sitemap.xml.ts")
770
813
  });
@@ -772,7 +815,7 @@ function injectCoreRoutes(injectRoute) {
772
815
  pattern: "/sitemap-[collection].xml",
773
816
  entrypoint: resolveRoute("sitemap-[collection].xml.ts")
774
817
  });
775
- injectRoute({
818
+ if (!options.srcDir || !hasUserDefinedPublicRoute(options.srcDir, "robots.txt")) injectRoute({
776
819
  pattern: "/robots.txt",
777
820
  entrypoint: resolveRoute("robots.txt.ts")
778
821
  });
@@ -947,6 +990,8 @@ const VIRTUAL_DIALECT_ID = "virtual:dineway/dialect";
947
990
  const RESOLVED_VIRTUAL_DIALECT_ID = "\0" + VIRTUAL_DIALECT_ID;
948
991
  const VIRTUAL_STORAGE_ID = "virtual:dineway/storage";
949
992
  const RESOLVED_VIRTUAL_STORAGE_ID = "\0" + VIRTUAL_STORAGE_ID;
993
+ const VIRTUAL_OBJECT_CACHE_ID = "virtual:dineway/object-cache";
994
+ const RESOLVED_VIRTUAL_OBJECT_CACHE_ID = "\0" + VIRTUAL_OBJECT_CACHE_ID;
950
995
  const VIRTUAL_ADMIN_REGISTRY_ID = "virtual:dineway/admin-registry";
951
996
  const RESOLVED_VIRTUAL_ADMIN_REGISTRY_ID = "\0" + VIRTUAL_ADMIN_REGISTRY_ID;
952
997
  const VIRTUAL_PLUGINS_ID = "virtual:dineway/plugins";
@@ -993,7 +1038,19 @@ function generateStorageModule(storageEntrypoint) {
993
1038
  return `
994
1039
  import { createStorage as _createStorage } from "${storageEntrypoint}";
995
1040
  export const createStorage = _createStorage;
996
- `;
1041
+ `;
1042
+ }
1043
+ /**
1044
+ * Generates the object-cache virtual module.
1045
+ * Statically imports the configured backend factory.
1046
+ */
1047
+ function generateObjectCacheModule(objectCacheEntrypoint, config) {
1048
+ if (!objectCacheEntrypoint) return [`export const createObjectCache = undefined;`, `export const objectCacheConfig = {};`].join("\n");
1049
+ return `
1050
+ import { createObjectCache as _createObjectCache } from "${objectCacheEntrypoint}";
1051
+ export const createObjectCache = _createObjectCache;
1052
+ export const objectCacheConfig = ${JSON.stringify(config ?? {})};
1053
+ `;
997
1054
  }
998
1055
  /**
999
1056
  * Generates the auth virtual module.
@@ -1049,6 +1106,7 @@ function generatePluginsModule(descriptors) {
1049
1106
  const instantiations = [];
1050
1107
  let needsAdapter = false;
1051
1108
  descriptors.forEach((descriptor, index) => {
1109
+ if (!descriptor.entrypoint) throw new Error(`[dineway] Plugin "${descriptor.id}" has no \`entrypoint\`. The Astro integration's \`plugins: []\` option requires plugins that resolve to a file or package entrypoint so they can be bundled at build time. Inline \`definePlugin({...})\` results are not supported; move the plugin into its own module and reference a factory descriptor with an \`entrypoint\`.`);
1052
1110
  if (descriptor.format === "standard") {
1053
1111
  needsAdapter = true;
1054
1112
  const varName = `pluginDef${index}`;
@@ -1060,7 +1118,9 @@ function generatePluginsModule(descriptors) {
1060
1118
  allowedHosts: descriptor.allowedHosts,
1061
1119
  storage: descriptor.storage,
1062
1120
  adminPages: descriptor.adminPages,
1063
- adminWidgets: descriptor.adminWidgets
1121
+ adminWidgets: descriptor.adminWidgets,
1122
+ portableTextBlocks: descriptor.portableTextBlocks,
1123
+ fieldWidgets: descriptor.fieldWidgets
1064
1124
  })})`);
1065
1125
  } else {
1066
1126
  const varName = `createPlugin${index}`;
@@ -1249,6 +1309,8 @@ export const sandboxedPlugins = [];
1249
1309
  storage: ${JSON.stringify(descriptor.storage ?? {})},
1250
1310
  adminPages: ${JSON.stringify(descriptor.adminPages ?? [])},
1251
1311
  adminWidgets: ${JSON.stringify(descriptor.adminWidgets ?? [])},
1312
+ portableTextBlocks: ${JSON.stringify(descriptor.portableTextBlocks ?? [])},
1313
+ fieldWidgets: ${JSON.stringify(descriptor.fieldWidgets ?? [])},
1252
1314
  adminEntry: ${JSON.stringify(descriptor.adminEntry)},
1253
1315
  // Code read from: ${filePath}
1254
1316
  code: ${JSON.stringify(code)},
@@ -1334,6 +1396,12 @@ function resolveAdminSource(projectRoot) {
1334
1396
  if (existsSync(srcEntry) && isInside(repoRoot, projectRoot)) return resolve(packageRoot, "src");
1335
1397
  } catch {}
1336
1398
  }
1399
+ function resolveIntegrationShim(fileName) {
1400
+ const currentDir = dirname(fileURLToPath(import.meta.url));
1401
+ const sourceShimPath = resolve(currentDir, "shims", fileName);
1402
+ if (existsSync(sourceShimPath)) return sourceShimPath;
1403
+ return resolve(currentDir, "..", "..", "src", "astro", "integration", "shims", fileName);
1404
+ }
1337
1405
  /**
1338
1406
  * Creates the Dineway virtual modules Vite plugin.
1339
1407
  */
@@ -1349,6 +1417,7 @@ function createVirtualModulesPlugin(options) {
1349
1417
  if (id === VIRTUAL_CONFIG_ID) return RESOLVED_VIRTUAL_CONFIG_ID;
1350
1418
  if (id === VIRTUAL_DIALECT_ID) return RESOLVED_VIRTUAL_DIALECT_ID;
1351
1419
  if (id === VIRTUAL_STORAGE_ID) return RESOLVED_VIRTUAL_STORAGE_ID;
1420
+ if (id === VIRTUAL_OBJECT_CACHE_ID) return RESOLVED_VIRTUAL_OBJECT_CACHE_ID;
1352
1421
  if (id === VIRTUAL_ADMIN_REGISTRY_ID) return RESOLVED_VIRTUAL_ADMIN_REGISTRY_ID;
1353
1422
  if (id === VIRTUAL_PLUGINS_ID) return RESOLVED_VIRTUAL_PLUGINS_ID;
1354
1423
  if (id === VIRTUAL_SANDBOX_RUNNER_ID) return RESOLVED_VIRTUAL_SANDBOX_RUNNER_ID;
@@ -1363,6 +1432,7 @@ function createVirtualModulesPlugin(options) {
1363
1432
  if (id === RESOLVED_VIRTUAL_CONFIG_ID) return generateConfigModule(serializableConfig);
1364
1433
  if (id === RESOLVED_VIRTUAL_DIALECT_ID) return generateDialectModule(resolvedConfig.database?.entrypoint, resolvedConfig.database?.type, resolvedConfig.database?.config);
1365
1434
  if (id === RESOLVED_VIRTUAL_STORAGE_ID) return generateStorageModule(resolvedConfig.storage?.entrypoint);
1435
+ if (id === RESOLVED_VIRTUAL_OBJECT_CACHE_ID) return generateObjectCacheModule(resolvedConfig.objectCache?.entrypoint, resolvedConfig.objectCache?.config);
1366
1436
  if (id === RESOLVED_VIRTUAL_PLUGINS_ID) return generatePluginsModule(pluginDescriptors);
1367
1437
  if (id === RESOLVED_VIRTUAL_ADMIN_REGISTRY_ID) return generateAdminRegistryModule([...pluginDescriptors, ...resolvedConfig.sandboxed ?? []]);
1368
1438
  if (id === RESOLVED_VIRTUAL_SANDBOX_RUNNER_ID) return generateSandboxRunnerModule(resolvedConfig.sandboxRunner);
@@ -1386,6 +1456,7 @@ function createVirtualModulesPlugin(options) {
1386
1456
  * Modules that contain native Node.js addons or Node-only code.
1387
1457
  * These must be external in SSR to avoid bundling failures on Node.
1388
1458
  */
1459
+ const ADMIN_STYLES_ALIAS = /^@dineway-ai\/admin\/styles\.css/;
1389
1460
  const NODE_NATIVE_EXTERNALS = [
1390
1461
  "better-sqlite3",
1391
1462
  "bindings",
@@ -1403,6 +1474,8 @@ function createViteConfig(options, command) {
1403
1474
  const adminSourcePath = isDev ? resolveAdminSource(projectRoot) : void 0;
1404
1475
  const useSource = adminSourcePath !== void 0;
1405
1476
  const devPlugins = adminSourcePath ? [linguiMacroPlugin(adminSourcePath, adminDistPath)] : [];
1477
+ const useSyncExternalStoreShimPath = resolveIntegrationShim("use-sync-external-store.js");
1478
+ const useSyncExternalStoreWithSelectorShimPath = resolveIntegrationShim("use-sync-external-store-with-selector.js");
1406
1479
  return {
1407
1480
  define: {
1408
1481
  __DINEWAY_VERSION__: JSON.stringify(VERSION),
@@ -1417,7 +1490,7 @@ function createViteConfig(options, command) {
1417
1490
  ],
1418
1491
  alias: [
1419
1492
  {
1420
- find: "@dineway-ai/admin/styles.css",
1493
+ find: ADMIN_STYLES_ALIAS,
1421
1494
  replacement: resolve(adminDistPath, "styles.css")
1422
1495
  },
1423
1496
  {
@@ -1427,13 +1500,34 @@ function createViteConfig(options, command) {
1427
1500
  {
1428
1501
  find: "@dineway-ai/admin",
1429
1502
  replacement: useSource ? adminSourcePath : adminDistPath
1503
+ },
1504
+ {
1505
+ find: "use-sync-external-store/shim/with-selector.js",
1506
+ replacement: useSyncExternalStoreWithSelectorShimPath
1507
+ },
1508
+ {
1509
+ find: "use-sync-external-store/shim/with-selector",
1510
+ replacement: useSyncExternalStoreWithSelectorShimPath
1511
+ },
1512
+ {
1513
+ find: "use-sync-external-store/shim/index.js",
1514
+ replacement: useSyncExternalStoreShimPath
1515
+ },
1516
+ {
1517
+ find: "use-sync-external-store/shim",
1518
+ replacement: useSyncExternalStoreShimPath
1430
1519
  }
1431
1520
  ]
1432
1521
  },
1433
1522
  plugins: [createVirtualModulesPlugin(options), ...useSource ? devPlugins : []],
1434
1523
  ssr: {
1435
- external: NODE_NATIVE_EXTERNALS,
1436
- noExternal: ["dineway", "@dineway-ai/admin"]
1524
+ external: [...NODE_NATIVE_EXTERNALS, "dineway > zod"],
1525
+ noExternal: [
1526
+ "dineway",
1527
+ "@dineway-ai/admin",
1528
+ "@dineway-ai/federation-contracts",
1529
+ "@dineway-ai/venue-federation-contracts"
1530
+ ]
1437
1531
  },
1438
1532
  optimizeDeps: {
1439
1533
  include: useSource ? ["@astrojs/react/client.js"] : ["@dineway-ai/admin", "@astrojs/react/client.js"],
@@ -1463,9 +1557,10 @@ const DINEWAY_SESSION_DRIVER = { entrypoint: "dineway/astro/session-driver" };
1463
1557
  /**
1464
1558
  * Build `image.remotePatterns` entries so Astro will optimize Dineway media.
1465
1559
  *
1466
- * Astro's image services only transform absolute URLs whose host is authorized.
1467
- * We authorize the storage public URL host, the configured site origin scoped
1468
- * to the media proxy route, and a dev-only host-agnostic media route pattern.
1560
+ * Astro's image services only build transform URLs for sources allowed via
1561
+ * `image.domains` / `image.remotePatterns`. Dineway authorizes storage public
1562
+ * URL hosts, the configured site origin scoped to the media proxy route, and a
1563
+ * dev-only host-agnostic media route pattern.
1469
1564
  *
1470
1565
  * @internal Exported for unit testing.
1471
1566
  */
@@ -1494,6 +1589,19 @@ function buildImageRemotePatterns(storage, siteUrl, command) {
1494
1589
  if (command === "dev") patterns.push({ pathname: `${INTERNAL_MEDIA_PREFIX}**` });
1495
1590
  return patterns;
1496
1591
  }
1592
+ const OVERRIDABLE_IMAGE_ENDPOINTS = new Set([
1593
+ "astro/assets/endpoint/generic",
1594
+ "astro/assets/endpoint/node",
1595
+ "astro/assets/endpoint/dev"
1596
+ ]);
1597
+ const PASSTHROUGH_IMAGE_ENDPOINTS = new Set(["@astrojs/cloudflare/image-passthrough-endpoint"]);
1598
+ function resolveImageEndpoint(opts) {
1599
+ if (opts.imagesDisabled) return {};
1600
+ const current = opts.currentEntrypoint;
1601
+ if (current === void 0 || OVERRIDABLE_IMAGE_ENDPOINTS.has(current)) return { entrypoint: "dineway/image-endpoint" };
1602
+ if (PASSTHROUGH_IMAGE_ENDPOINTS.has(current)) return {};
1603
+ return { warn: `A custom image.endpoint (${current}) is configured; Dineway will not wrap it, so storage-backed media may render unoptimized.` };
1604
+ }
1497
1605
  const dim = (s) => `\x1b[2m${s}\x1b[22m`;
1498
1606
  const bold = (s) => `\x1b[1m${s}\x1b[22m`;
1499
1607
  const cyan = (s) => `\x1b[36m${s}\x1b[39m`;
@@ -1501,14 +1609,31 @@ const cyan = (s) => `\x1b[36m${s}\x1b[39m`;
1501
1609
  function printBanner(_logger) {
1502
1610
  const banner = `
1503
1611
 
1504
- ${bold(cyan("— D I N E W A Y —"))}
1612
+ ${bold(cyan("— D I N E W A Y —"))} ${dim(`v${VERSION}`)}
1505
1613
  `;
1506
1614
  console.log(banner);
1507
1615
  }
1508
- /** Print route injection summary */
1509
- function printRoutesSummary(_logger) {
1510
- console.log(`\n ${dim("›")} Admin UI ${cyan("/_dineway/admin")}`);
1511
- console.log(` ${dim("›")} API ${cyan("/_dineway/api/*")}`);
1616
+ function buildDevServerInfo(baseUrl, mcpEnabled) {
1617
+ return {
1618
+ adminUrl: `${baseUrl}/_dineway/admin`,
1619
+ ...mcpEnabled ? { mcpUrl: `${baseUrl}/_dineway/api/mcp` } : {},
1620
+ devBypassUrl: `${baseUrl}/_dineway/api/setup/dev-bypass?redirect=/_dineway/admin`,
1621
+ devBypassDescription: "Skips passkey setup/auth and signs you in as a dev admin"
1622
+ };
1623
+ }
1624
+ function getDevServerBaseUrl(address) {
1625
+ if (!address || typeof address === "string") return null;
1626
+ let host = address.address;
1627
+ if (host === "::1" || host === "::" || host === "0.0.0.0") host = "localhost";
1628
+ else if (address.family === "IPv6") host = `[${host}]`;
1629
+ return `http://${host}:${address.port}`;
1630
+ }
1631
+ function printDevServerInfo(baseUrl, mcpEnabled) {
1632
+ const info = buildDevServerInfo(baseUrl, mcpEnabled);
1633
+ console.log(`\n ${dim("›")} Admin UI ${cyan(info.adminUrl)}`);
1634
+ if (info.mcpUrl) console.log(` ${dim("›")} MCP server ${cyan(info.mcpUrl)}`);
1635
+ console.log(` ${dim("›")} Dev bypass ${cyan(info.devBypassUrl)}`);
1636
+ console.log(` ${dim(info.devBypassDescription)}`);
1512
1637
  console.log("");
1513
1638
  }
1514
1639
  /**
@@ -1568,10 +1693,12 @@ function dineway(config = {}) {
1568
1693
  trustedProxyHeaders: resolvedConfig.trustedProxyHeaders
1569
1694
  };
1570
1695
  const useExternalAuth = !!(resolvedConfig.auth && "entrypoint" in resolvedConfig.auth);
1696
+ let astroCommand;
1571
1697
  return {
1572
1698
  name: "dineway",
1573
1699
  hooks: {
1574
1700
  "astro:config:setup": ({ injectRoute, addMiddleware, logger, updateConfig, config: astroConfig, command }) => {
1701
+ astroCommand = command;
1575
1702
  printBanner(logger);
1576
1703
  if (astroConfig.i18n) {
1577
1704
  const routing = astroConfig.i18n.routing;
@@ -1615,10 +1742,18 @@ function dineway(config = {}) {
1615
1742
  ]
1616
1743
  }];
1617
1744
  const imageRemotePatterns = buildImageRemotePatterns(resolvedConfig.storage, resolvedConfig.siteUrl, command);
1745
+ const { entrypoint: imageEndpoint, warn: imageEndpointWarning } = resolveImageEndpoint({
1746
+ imagesDisabled: resolvedConfig.images === false,
1747
+ currentEntrypoint: astroConfig.image?.endpoint?.entrypoint
1748
+ });
1749
+ if (imageEndpointWarning) logger.warn(imageEndpointWarning);
1750
+ const imageConfig = {};
1751
+ if (imageRemotePatterns.length) imageConfig.remotePatterns = imageRemotePatterns;
1752
+ if (imageEndpoint) imageConfig.endpoint = { entrypoint: imageEndpoint };
1618
1753
  updateConfig({
1619
1754
  security: securityConfig,
1620
1755
  session: sessionConfig,
1621
- ...imageRemotePatterns.length ? { image: { remotePatterns: imageRemotePatterns } } : {},
1756
+ ...Object.keys(imageConfig).length ? { image: imageConfig } : {},
1622
1757
  fonts: dinewayFonts,
1623
1758
  vite: createViteConfig({
1624
1759
  serializableConfig,
@@ -1627,7 +1762,7 @@ function dineway(config = {}) {
1627
1762
  astroConfig
1628
1763
  }, command)
1629
1764
  });
1630
- injectCoreRoutes(injectRoute);
1765
+ injectCoreRoutes(injectRoute, { srcDir: astroConfig.srcDir });
1631
1766
  if (resolvedConfig.authProviders?.length) injectAuthProviderRoutes(injectRoute, resolvedConfig.authProviders);
1632
1767
  if (!useExternalAuth) injectBuiltinAuthRoutes(injectRoute);
1633
1768
  if (resolvedConfig.mcp !== false) injectMcpRoute(injectRoute);
@@ -1661,9 +1796,13 @@ function dineway(config = {}) {
1661
1796
  entrypoint: "dineway/middleware/request-context",
1662
1797
  order: "pre"
1663
1798
  });
1664
- printRoutesSummary(logger);
1665
1799
  },
1666
1800
  "astro:server:setup": ({ server, logger }) => {
1801
+ if (astroCommand === "dev") server.httpServer?.once("listening", () => {
1802
+ const baseUrl = getDevServerBaseUrl(server.httpServer?.address() ?? null);
1803
+ if (!baseUrl) return;
1804
+ printDevServerInfo(baseUrl, resolvedConfig.mcp !== false);
1805
+ });
1667
1806
  server.httpServer?.once("listening", async () => {
1668
1807
  const { writeFile, readFile } = await import("node:fs/promises");
1669
1808
  const { resolve } = await import("node:path");
@@ -1704,4 +1843,4 @@ function dineway(config = {}) {
1704
1843
  }
1705
1844
 
1706
1845
  //#endregion
1707
- export { dineway as default, getStoredConfig, local, s3 };
1846
+ export { dineway as default, getStoredConfig, local, memoryCache, s3 };
@@ -0,0 +1,71 @@
1
+ import * as React from "react";
2
+
3
+ const objectIs =
4
+ typeof Object.is === "function"
5
+ ? Object.is
6
+ : (x, y) => (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
7
+
8
+ export function useSyncExternalStoreWithSelector(
9
+ subscribe,
10
+ getSnapshot,
11
+ getServerSnapshot,
12
+ selector,
13
+ isEqual,
14
+ ) {
15
+ const instRef = React.useRef(null);
16
+ if (instRef.current === null) {
17
+ instRef.current = { hasValue: false, value: null };
18
+ }
19
+ const inst = instRef.current;
20
+
21
+ const [getSelection, getServerSelection] = React.useMemo(() => {
22
+ let hasMemo = false;
23
+ let memoizedSnapshot;
24
+ let memoizedSelection;
25
+
26
+ const memoizedSelector = (nextSnapshot) => {
27
+ if (!hasMemo) {
28
+ hasMemo = true;
29
+ memoizedSnapshot = nextSnapshot;
30
+ const nextSelection = selector(nextSnapshot);
31
+ if (isEqual !== undefined && inst.hasValue) {
32
+ const currentSelection = inst.value;
33
+ if (isEqual(currentSelection, nextSelection)) {
34
+ memoizedSelection = currentSelection;
35
+ return currentSelection;
36
+ }
37
+ }
38
+ memoizedSelection = nextSelection;
39
+ return nextSelection;
40
+ }
41
+
42
+ const previousSelection = memoizedSelection;
43
+ if (objectIs(memoizedSnapshot, nextSnapshot)) {
44
+ return previousSelection;
45
+ }
46
+
47
+ const nextSelection = selector(nextSnapshot);
48
+ if (isEqual !== undefined && isEqual(previousSelection, nextSelection)) {
49
+ memoizedSnapshot = nextSnapshot;
50
+ return previousSelection;
51
+ }
52
+
53
+ memoizedSnapshot = nextSnapshot;
54
+ memoizedSelection = nextSelection;
55
+ return nextSelection;
56
+ };
57
+
58
+ return [
59
+ () => memoizedSelector(getSnapshot()),
60
+ getServerSnapshot === undefined ? undefined : () => memoizedSelector(getServerSnapshot()),
61
+ ];
62
+ }, [getSnapshot, getServerSnapshot, selector, isEqual]);
63
+
64
+ const value = React.useSyncExternalStore(subscribe, getSelection, getServerSelection);
65
+ React.useEffect(() => {
66
+ inst.hasValue = true;
67
+ inst.value = value;
68
+ }, [inst, value]);
69
+ React.useDebugValue(value);
70
+ return value;
71
+ }
@@ -0,0 +1 @@
1
+ export { useSyncExternalStore } from "react";
@@ -1,25 +1,15 @@
1
- import "../../runtime-C4-2lSFg.mjs";
2
- import "../../types-CuJOqHfM.mjs";
3
- import "../../types-DSPGWjxO.mjs";
4
- import "../../types-Dryvv7LH.mjs";
5
- import "../../runner-09sTqtv0.mjs";
6
- import "../../index-CZiWCQDp.mjs";
7
- import "../../byline-fields-uJlygdzM.mjs";
8
- import "../../types-GaCtZ1k9.mjs";
9
- import "../../validate-DzjCdy6v.mjs";
1
+ import { xr as SiteAuthTokenContext } from "../../types-DwoUifGE.mjs";
2
+ import "../../types-DuQn1G7-.mjs";
3
+ import "../../runner-D6hzs8L9.mjs";
4
+ import "../../index-DcnOCD1e.mjs";
5
+ import "../../types-g0zMtraY.mjs";
6
+ import "../../validate-CbVFoJgc.mjs";
7
+ import "../../byline-fields-Ckeqd1OY.mjs";
8
+ import "../../types-Cw0PeCT_.mjs";
10
9
  import { DinewayHandlers } from "../types.mjs";
11
- import { Kysely } from "kysely";
12
10
  import { User } from "@dineway-ai/auth";
13
11
  import * as astro from "astro";
14
12
 
15
- //#region src/site-context/actor.d.ts
16
- type SiteAuthTokenType = "api_token" | "oauth_token";
17
- interface SiteAuthTokenContext {
18
- type: SiteAuthTokenType;
19
- /** Non-secret persistent token id. Present for API tokens; absent for OAuth access tokens today. */
20
- id?: string | null;
21
- }
22
- //#endregion
23
13
  //#region src/astro/middleware/auth.d.ts
24
14
  declare global {
25
15
  namespace App {
@@ -1,8 +1,9 @@
1
- import { t as apiError } from "../../error-DCSuUAZW.mjs";
2
- import { n as getPublicOrigin } from "../../public-url-B_m9IwdV.mjs";
3
- import { t as getAuthMode } from "../../mode-CZqCF9dZ.mjs";
4
- import { i as hasScope } from "../../api-tokens-CYUoFGo7.mjs";
5
- import { a as resolveOAuthToken, i as resolveApiToken } from "../../api-tokens-DtvdtIkm.mjs";
1
+ import { t as apiError } from "../../error-CSVaQNZy.mjs";
2
+ import { i as hasScope } from "../../api-tokens-Ypaly90d.mjs";
3
+ import { n as getPublicOrigin } from "../../public-url-Cp6hyjVR.mjs";
4
+ import { t as getAuthMode } from "../../mode-C8yZnIlR.mjs";
5
+ import { t as resolveSessionUser } from "../../session-user-Ct6GBLvn.mjs";
6
+ import { a as resolveApiToken, o as resolveOAuthToken } from "../../api-tokens-tbK_sORH.mjs";
6
7
  import { ulid } from "ulidx";
7
8
  import { defineMiddleware } from "astro:middleware";
8
9
  import { createKyselyAdapter } from "@dineway-ai/auth/adapters/kysely";
@@ -52,25 +53,41 @@ function checkPublicCsrf(request, url, publicOrigin) {
52
53
 
53
54
  //#endregion
54
55
  //#region src/astro/middleware/csp.ts
56
+ const S3_ADAPTER_ENTRYPOINT = "dineway/storage/s3";
55
57
  /**
56
- * Strict Content-Security-Policy for /_dineway routes (admin + API).
57
- *
58
- * Applied via middleware header rather than Astro's built-in CSP because
59
- * Astro's auto-hashing defeats 'unsafe-inline' (CSP3 ignores 'unsafe-inline'
60
- * when hashes are present), which would break user-facing pages.
61
- *
62
- * img-src allows any HTTPS origin because the admin renders user content that
63
- * may reference external images (migrations, external hosting, embeds).
64
- * Plugin security does not rely on img-src -- sandboxed plugins run behind the
65
- * host-mediated `SandboxRunner` boundary with no DOM access, and connect-src
66
- * 'self' blocks fetch-based exfiltration from the admin itself.
58
+ * S3-compatible adapters resolve omitted fields from matching S3_* env vars at
59
+ * runtime, so the CSP helper must mirror that endpoint lookup.
67
60
  */
68
- function buildDinewayCsp() {
61
+ function getConfiguredStorageEndpoint(storage) {
62
+ const config = storage?.config;
63
+ if (typeof config === "object" && config !== null && "endpoint" in config) {
64
+ const endpoint = config.endpoint;
65
+ if (typeof endpoint === "string") return endpoint;
66
+ }
67
+ if (storage?.entrypoint === S3_ADAPTER_ENTRYPOINT) {
68
+ const envEndpoint = typeof process !== "undefined" && process.env ? process.env.S3_ENDPOINT : void 0;
69
+ if (envEndpoint) return envEndpoint;
70
+ }
71
+ }
72
+ function getHttpOrigin(rawUrl) {
73
+ if (!rawUrl) return void 0;
74
+ try {
75
+ const url = new URL(rawUrl);
76
+ if (url.protocol !== "http:" && url.protocol !== "https:") return void 0;
77
+ return url.origin;
78
+ } catch {
79
+ return;
80
+ }
81
+ }
82
+ function buildDinewayCsp(storageEndpoint) {
83
+ const connectSrc = ["connect-src 'self'"];
84
+ const storageOrigin = getHttpOrigin(storageEndpoint);
85
+ if (storageOrigin) connectSrc.push(storageOrigin);
69
86
  return [
70
87
  "default-src 'self'",
71
88
  "script-src 'self' 'unsafe-inline'",
72
89
  "style-src 'self' 'unsafe-inline'",
73
- "connect-src 'self'",
90
+ connectSrc.join(" "),
74
91
  "form-action 'self'",
75
92
  "frame-ancestors 'none'",
76
93
  "img-src 'self' https: data: blob:",
@@ -143,7 +160,8 @@ const PUBLIC_API_EXACT = new Set([
143
160
  "/_dineway/api/auth/setup-token/verify",
144
161
  "/_dineway/api/oauth/token",
145
162
  "/_dineway/api/snapshot",
146
- "/_dineway/api/search"
163
+ "/_dineway/api/search",
164
+ "/_dineway/api/search/suggest"
147
165
  ]);
148
166
  const CSRF_EXEMPT_PUBLIC_ROUTES = new Set([
149
167
  "/_dineway/api/auth/setup-token/verify",
@@ -229,11 +247,11 @@ const onRequest = defineMiddleware(async (context, next) => {
229
247
  const scopeError = enforceTokenScope(url.pathname, method, context.locals.tokenScopes);
230
248
  if (scopeError) return scopeError;
231
249
  const response = await next();
232
- if (!import.meta.env.DEV) response.headers.set("Content-Security-Policy", buildDinewayCsp());
250
+ if (!import.meta.env.DEV) response.headers.set("Content-Security-Policy", buildDinewayCsp(getConfiguredStorageEndpoint(context.locals.dineway?.config.storage)));
233
251
  return response;
234
252
  }
235
253
  const response = await handleDinewayAuth(context, next);
236
- if (!import.meta.env.DEV) response.headers.set("Content-Security-Policy", buildDinewayCsp());
254
+ if (!import.meta.env.DEV) response.headers.set("Content-Security-Policy", buildDinewayCsp(getConfiguredStorageEndpoint(context.locals.dineway?.config.storage)));
237
255
  return response;
238
256
  });
239
257
  /**
@@ -283,7 +301,7 @@ async function handlePluginRouteAuth(context, next) {
283
301
  }
284
302
  try {
285
303
  const { session } = context;
286
- const sessionUser = await session?.get("user");
304
+ const sessionUser = await resolveSessionUser(session);
287
305
  if (sessionUser?.id && dineway?.db) {
288
306
  const user = await createKyselyAdapter(dineway.db).getUserById(sessionUser.id);
289
307
  if (user && !user.disabled) locals.user = user;
@@ -301,7 +319,7 @@ async function handlePublicRouteAuth(context, next) {
301
319
  const { locals, session } = context;
302
320
  const { dineway } = locals;
303
321
  try {
304
- const sessionUser = await session?.get("user");
322
+ const sessionUser = await resolveSessionUser(session);
305
323
  if (sessionUser?.id && dineway?.db) {
306
324
  const user = await createKyselyAdapter(dineway.db).getUserById(sessionUser.id);
307
325
  if (user && !user.disabled) locals.user = user;
@@ -441,7 +459,7 @@ async function handlePasskeyAuth(context, next, isApiRoute) {
441
459
  const { url, locals, session } = context;
442
460
  const { dineway } = locals;
443
461
  try {
444
- const sessionUser = await session?.get("user");
462
+ const sessionUser = await resolveSessionUser(session);
445
463
  if (!sessionUser?.id) {
446
464
  if (isApiRoute) return Response.json({ error: {
447
465
  code: "NOT_AUTHENTICATED",