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,4 +1,5 @@
1
- import { a as __exportAll } from "./runner-DzIpHGND.mjs";
1
+ import { a as __exportAll } from "./runner-BgmttQmD.mjs";
2
+ import { d as invalidateTaxonomyObjectCache } from "./object-cache-D51qOseS.mjs";
2
3
  import { ulid } from "ulidx";
3
4
 
4
5
  //#region src/database/repositories/taxonomy.ts
@@ -25,7 +26,8 @@ var TaxonomyRepository = class {
25
26
  */
26
27
  async create(input) {
27
28
  const id = ulid();
28
- const parentId = input.parentId === void 0 || input.parentId === "" ? null : input.parentId;
29
+ const parentInput = input.parentId === void 0 || input.parentId === "" ? null : input.parentId;
30
+ const parentId = parentInput ? await this.resolveParentRef(parentInput) : null;
29
31
  let translationGroup = id;
30
32
  if (input.translationOf) {
31
33
  const source = await this.findById(input.translationOf);
@@ -41,6 +43,7 @@ var TaxonomyRepository = class {
41
43
  ...input.locale !== void 0 ? { locale: input.locale } : {},
42
44
  translation_group: translationGroup
43
45
  }).execute();
46
+ invalidateTaxonomyObjectCache();
44
47
  const taxonomy = await this.findById(id);
45
48
  if (!taxonomy) throw new Error("Failed to create taxonomy");
46
49
  return taxonomy;
@@ -74,8 +77,18 @@ var TaxonomyRepository = class {
74
77
  else query = query.where("parent_id", "=", options.parentId);
75
78
  return (await query.execute()).map((row) => this.rowToTaxonomy(row));
76
79
  }
77
- async findChildren(parentId) {
78
- return (await this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", parentId).orderBy("label", "asc").orderBy("id", "asc").execute()).map((row) => this.rowToTaxonomy(row));
80
+ /**
81
+ * Children of a term. Accepts a term id OR a translation_group and resolves
82
+ * to the group, since `parent_id` stores the parent's translation_group.
83
+ * Pass `locale` to scope to one locale's tree; omit it to find children in
84
+ * every locale, which is used to block deletes that would orphan a subtree.
85
+ */
86
+ async findChildren(parentIdOrGroup, locale) {
87
+ const group = await this.resolveTranslationGroup(parentIdOrGroup);
88
+ if (!group) return [];
89
+ let query = this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", group).orderBy("label", "asc").orderBy("id", "asc");
90
+ if (locale !== void 0) query = query.where("locale", "=", locale);
91
+ return (await query.execute()).map((row) => this.rowToTaxonomy(row));
79
92
  }
80
93
  /**
81
94
  * Every translation sibling of a term (including itself), identified by
@@ -89,9 +102,12 @@ var TaxonomyRepository = class {
89
102
  const updates = {};
90
103
  if (input.slug !== void 0) updates.slug = input.slug;
91
104
  if (input.label !== void 0) updates.label = input.label;
92
- if (input.parentId !== void 0) updates.parent_id = input.parentId === "" ? null : input.parentId;
105
+ if (input.parentId !== void 0) updates.parent_id = input.parentId === "" || input.parentId === null ? null : await this.resolveParentRef(input.parentId);
93
106
  if (input.data !== void 0) updates.data = JSON.stringify(input.data);
94
- if (Object.keys(updates).length > 0) await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
107
+ if (Object.keys(updates).length > 0) {
108
+ await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
109
+ invalidateTaxonomyObjectCache();
110
+ }
95
111
  return this.findById(id);
96
112
  }
97
113
  async delete(id) {
@@ -100,7 +116,9 @@ var TaxonomyRepository = class {
100
116
  if (term.translationGroup) {
101
117
  if ((await this.db.selectFrom("taxonomies").select("id").where("translation_group", "=", term.translationGroup).where("id", "!=", id).execute()).length === 0) await this.db.deleteFrom("content_taxonomies").where("taxonomy_id", "=", term.translationGroup).execute();
102
118
  }
103
- return ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0n) > 0n;
119
+ const deleted = ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0n) > 0n;
120
+ if (deleted) invalidateTaxonomyObjectCache();
121
+ return deleted;
104
122
  }
105
123
  async attachToEntry(collection, entryId, taxonomyId) {
106
124
  const group = await this.resolveTranslationGroup(taxonomyId);
@@ -111,11 +129,13 @@ var TaxonomyRepository = class {
111
129
  taxonomy_id: group
112
130
  };
113
131
  await this.db.insertInto("content_taxonomies").values(row).onConflict((oc) => oc.doNothing()).execute();
132
+ invalidateTaxonomyObjectCache();
114
133
  }
115
134
  async detachFromEntry(collection, entryId, taxonomyId) {
116
135
  const group = await this.resolveTranslationGroup(taxonomyId);
117
136
  if (!group) return;
118
137
  await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", group).execute();
138
+ invalidateTaxonomyObjectCache();
119
139
  }
120
140
  /**
121
141
  * Taxonomy terms assigned to a content entry, resolved into a specific locale.
@@ -149,10 +169,13 @@ var TaxonomyRepository = class {
149
169
  entry_id: entryId,
150
170
  taxonomy_id
151
171
  }))).onConflict((oc) => oc.doNothing()).execute();
172
+ if (toRemove.length > 0 || toAdd.length > 0) invalidateTaxonomyObjectCache();
152
173
  }
153
174
  async clearEntryTerms(collection, entryId) {
154
175
  const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
155
- return Number(result.numDeletedRows ?? 0);
176
+ const removed = Number(result.numDeletedRows ?? 0);
177
+ if (removed > 0) invalidateTaxonomyObjectCache();
178
+ return removed;
156
179
  }
157
180
  /**
158
181
  * Copy every term assignment from one content entry to another. Used when
@@ -167,6 +190,7 @@ var TaxonomyRepository = class {
167
190
  entry_id: targetEntryId,
168
191
  taxonomy_id: r.taxonomy_id
169
192
  }))).onConflict((oc) => oc.doNothing()).execute();
193
+ invalidateTaxonomyObjectCache();
170
194
  }
171
195
  /**
172
196
  * Count content entries that use any translation of this term. Accepts
@@ -178,6 +202,17 @@ var TaxonomyRepository = class {
178
202
  const result = await this.db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", group).executeTakeFirst();
179
203
  return Number(result?.count ?? 0);
180
204
  }
205
+ /**
206
+ * Resolve a parent reference to the value stored in `parent_id`: the parent's
207
+ * translation_group. A translation_group normally equals its anchor row's id,
208
+ * which satisfies the self-FK on parent_id. If the anchor row is missing,
209
+ * fall back to the input so we never write a dangling FK value.
210
+ */
211
+ async resolveParentRef(idOrGroup) {
212
+ const group = await this.resolveTranslationGroup(idOrGroup);
213
+ if (!group) return idOrGroup;
214
+ return await this.db.selectFrom("taxonomies").select("id").where("id", "=", group).executeTakeFirst() ? group : idOrGroup;
215
+ }
181
216
  async resolveTranslationGroup(idOrGroup) {
182
217
  return (await this.db.selectFrom("taxonomies").select(["translation_group"]).where((eb) => eb.or([eb("id", "=", idOrGroup), eb("translation_group", "=", idOrGroup)])).executeTakeFirst())?.translation_group ?? null;
183
218
  }
@@ -191,7 +226,7 @@ var TaxonomyRepository = class {
191
226
  */
192
227
  async countEntriesForTerms(translationGroups) {
193
228
  if (translationGroups.length === 0) return /* @__PURE__ */ new Map();
194
- const { chunks, SQL_BATCH_SIZE } = await import("./chunks-CuUt7K50.mjs").then((n) => n.r);
229
+ const { chunks, SQL_BATCH_SIZE } = await import("./chunks-ChGNDY8r.mjs").then((n) => n.r);
195
230
  const counts = /* @__PURE__ */ new Map();
196
231
  for (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {
197
232
  const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id", (eb) => eb.fn.count("entry_id").as("count")]).where("taxonomy_id", "in", chunk).groupBy("taxonomy_id").execute();
@@ -0,0 +1,134 @@
1
+ //#region src/client/transport.ts
2
+ /**
3
+ * Transport layer for the Dineway client.
4
+ *
5
+ * Implements a composable interceptor pipeline that modifies requests
6
+ * and responses. The client calls `transport.fetch(request)` — everything
7
+ * else (auth, CSRF, retry) is handled by interceptors.
8
+ */
9
+ const COOKIE_NAME_VALUE_PATTERN = /^([^;]+)/;
10
+ function baseFetch(request) {
11
+ return globalThis.fetch(request);
12
+ }
13
+ /**
14
+ * Creates a fetch function that runs requests through an interceptor pipeline.
15
+ */
16
+ function createTransport(options = {}) {
17
+ const interceptors = options.interceptors ?? [];
18
+ let chain = baseFetch;
19
+ for (let i = interceptors.length - 1; i >= 0; i--) {
20
+ const interceptor = interceptors[i];
21
+ const next = chain;
22
+ chain = (req) => interceptor(req, next);
23
+ }
24
+ return { fetch: chain };
25
+ }
26
+ /**
27
+ * Adds X-Dineway-Request: 1 and Origin headers to mutation requests
28
+ * (POST, PUT, DELETE). The custom header satisfies Dineway's CSRF check;
29
+ * the Origin header satisfies Astro's built-in origin verification which
30
+ * rejects server-side POST requests that lack a matching Origin.
31
+ */
32
+ function csrfInterceptor() {
33
+ const MUTATION_METHODS = new Set([
34
+ "POST",
35
+ "PUT",
36
+ "DELETE",
37
+ "PATCH"
38
+ ]);
39
+ return (request, next) => {
40
+ if (MUTATION_METHODS.has(request.method)) {
41
+ const headers = new Headers(request.headers);
42
+ headers.set("X-Dineway-Request", "1");
43
+ if (!headers.has("Origin")) {
44
+ const url = new URL(request.url);
45
+ headers.set("Origin", url.origin);
46
+ }
47
+ return next(new Request(request, { headers }));
48
+ }
49
+ return next(request);
50
+ };
51
+ }
52
+ /**
53
+ * Adds Authorization: Bearer header from a static token.
54
+ */
55
+ function tokenInterceptor(token) {
56
+ return (request, next) => {
57
+ const headers = new Headers(request.headers);
58
+ headers.set("Authorization", `Bearer ${token}`);
59
+ return next(new Request(request, { headers }));
60
+ };
61
+ }
62
+ /**
63
+ * Dev bypass interceptor. Calls the dev-bypass endpoint on first request
64
+ * to establish a session, then forwards the session cookie on subsequent
65
+ * requests.
66
+ */
67
+ function devBypassInterceptor(baseUrl) {
68
+ let sessionCookie = null;
69
+ let initializing = null;
70
+ async function init() {
71
+ const bypassUrl = new URL("/_dineway/api/auth/dev-bypass", baseUrl);
72
+ const res = await globalThis.fetch(bypassUrl, { redirect: "manual" });
73
+ const setCookie = res.headers.get("set-cookie");
74
+ if (setCookie) {
75
+ const match = setCookie.match(COOKIE_NAME_VALUE_PATTERN);
76
+ if (match) sessionCookie = match[1];
77
+ }
78
+ if (res.body) await res.text().catch(() => {});
79
+ }
80
+ return async (request, next) => {
81
+ if (!sessionCookie) {
82
+ if (!initializing) initializing = init();
83
+ await initializing;
84
+ }
85
+ if (sessionCookie) {
86
+ const headers = new Headers(request.headers);
87
+ const existing = headers.get("cookie");
88
+ headers.set("cookie", existing ? `${existing}; ${sessionCookie}` : sessionCookie);
89
+ return next(new Request(request, { headers }));
90
+ }
91
+ return next(request);
92
+ };
93
+ }
94
+ /**
95
+ * Auto-refreshes expired OAuth tokens on 401 responses.
96
+ * Requires a refresh token and the token endpoint URL.
97
+ */
98
+ function refreshInterceptor(options) {
99
+ let refreshing = null;
100
+ async function refresh() {
101
+ const res = await globalThis.fetch(options.tokenEndpoint, {
102
+ method: "POST",
103
+ headers: { "Content-Type": "application/json" },
104
+ body: JSON.stringify({
105
+ grant_type: "refresh_token",
106
+ refresh_token: options.refreshToken
107
+ })
108
+ });
109
+ if (!res.ok) return null;
110
+ const json = await res.json();
111
+ const tokenData = json.data && typeof json.data === "object" && "access_token" in json.data ? json.data : json;
112
+ const expiresAt = tokenData.expires_in ? new Date(Date.now() + tokenData.expires_in * 1e3).toISOString() : new Date(Date.now() + 36e5).toISOString();
113
+ if (options.onTokenRefreshed) options.onTokenRefreshed(tokenData.access_token, tokenData.refresh_token ?? options.refreshToken, expiresAt);
114
+ return tokenData.access_token;
115
+ }
116
+ return async (request, next) => {
117
+ const response = await next(request);
118
+ if (response.status === 401) {
119
+ if (!refreshing) refreshing = refresh().finally(() => {
120
+ refreshing = null;
121
+ });
122
+ const newToken = await refreshing;
123
+ if (newToken) {
124
+ const headers = new Headers(request.headers);
125
+ headers.set("Authorization", `Bearer ${newToken}`);
126
+ return next(new Request(request, { headers }));
127
+ }
128
+ }
129
+ return response;
130
+ };
131
+ }
132
+
133
+ //#endregion
134
+ export { tokenInterceptor as a, refreshInterceptor as i, csrfInterceptor as n, devBypassInterceptor as r, createTransport as t };
@@ -0,0 +1,69 @@
1
+ //#region src/plugins/types.ts
2
+ function capabilitiesToDeclaredAccess(capabilities, allowedHosts) {
3
+ const caps = new Set(capabilities);
4
+ const out = {};
5
+ if (caps.has("content:read") || caps.has("content:write")) {
6
+ out.content = { read: {} };
7
+ if (caps.has("content:write")) out.content.write = {};
8
+ }
9
+ if (caps.has("media:read") || caps.has("media:write")) {
10
+ out.media = { read: {} };
11
+ if (caps.has("media:write")) out.media.write = {};
12
+ }
13
+ if (caps.has("network:request:unrestricted")) {
14
+ out.network = { request: {} };
15
+ if (caps.has("network:request:development-loopback")) out.network.request.developmentLoopback = true;
16
+ } else if (caps.has("network:request")) out.network = { request: { allowedHosts: [...allowedHosts] } };
17
+ if (caps.has("email:send")) (out.email ??= {}).send = {};
18
+ if (caps.has("hooks.email-events:register")) (out.email ??= {}).events = {};
19
+ if (caps.has("hooks.email-transport:register")) (out.email ??= {}).transport = {};
20
+ if (caps.has("hooks.page-fragments:register")) out.page = { fragments: {} };
21
+ if (caps.has("users:read")) out.users = { read: {} };
22
+ return out;
23
+ }
24
+ function declaredAccessToCapabilities(declaredAccess) {
25
+ const caps = /* @__PURE__ */ new Set();
26
+ let allowedHosts = [];
27
+ if (declaredAccess.content?.read) caps.add("content:read");
28
+ if (declaredAccess.content?.write) {
29
+ caps.add("content:write");
30
+ caps.add("content:read");
31
+ }
32
+ if (declaredAccess.media?.read) caps.add("media:read");
33
+ if (declaredAccess.media?.write) {
34
+ caps.add("media:write");
35
+ caps.add("media:read");
36
+ }
37
+ if (declaredAccess.network?.request) {
38
+ const hosts = declaredAccess.network.request.allowedHosts;
39
+ if (hosts === void 0) {
40
+ caps.add("network:request:unrestricted");
41
+ caps.add("network:request");
42
+ } else {
43
+ caps.add("network:request");
44
+ allowedHosts = [...hosts];
45
+ }
46
+ if (declaredAccess.network.request.developmentLoopback) caps.add("network:request:development-loopback");
47
+ }
48
+ if (declaredAccess.email?.send) caps.add("email:send");
49
+ if (declaredAccess.email?.events) caps.add("hooks.email-events:register");
50
+ if (declaredAccess.email?.transport) caps.add("hooks.email-transport:register");
51
+ if (declaredAccess.page?.fragments) caps.add("hooks.page-fragments:register");
52
+ if (declaredAccess.users?.read) caps.add("users:read");
53
+ return {
54
+ capabilities: [...caps],
55
+ allowedHosts
56
+ };
57
+ }
58
+ /**
59
+ * Check if a value is a StandardPluginDefinition (has hooks/routes but no id/version).
60
+ */
61
+ function isStandardPluginDefinition(value) {
62
+ if (typeof value !== "object" || value === null) return false;
63
+ const hasPluginShape = "hooks" in value || "routes" in value;
64
+ const hasNativeShape = "id" in value && "version" in value;
65
+ return hasPluginShape && !hasNativeShape;
66
+ }
67
+
68
+ //#endregion
69
+ export { declaredAccessToCapabilities as n, isStandardPluginDefinition as r, capabilitiesToDeclaredAccess as t };
@@ -0,0 +1,118 @@
1
+ //#region src/object-cache/types.d.ts
2
+ /**
3
+ * Object cache types
4
+ *
5
+ * The object cache is an optional, distributed read-through cache that sits
6
+ * *beneath* the per-request cache (`requestCached`) and *above* the database.
7
+ * Query results (content entries, settings, menus, taxonomies) are stored in a
8
+ * fast key/value store (an in-process memory store on Node, or another
9
+ * compatible backend supplied by an extension package) so repeat reads across
10
+ * requests skip the database entirely.
11
+ *
12
+ * Backends only ever deal in strings — serialization (including `Date`
13
+ * preservation) is handled by the core read-through layer in `./codec.ts`, so
14
+ * every backend behaves identically.
15
+ */
16
+ /**
17
+ * A pluggable object-cache backend.
18
+ *
19
+ * Implementations must be safe to call concurrently and should never throw on
20
+ * cache misses — `get` returns `null` for a miss. A backend that throws (e.g.
21
+ * a transient backend error) degrades gracefully: the read-through layer
22
+ * treats a thrown `get` as a miss and a thrown `set` as a no-op, so the
23
+ * database remains the source of truth.
24
+ */
25
+ interface ObjectCacheBackend {
26
+ /** Return the stored string for `key`, or `null` on a miss. */
27
+ get(key: string): Promise<string | null>;
28
+ /**
29
+ * Store `value` under `key`.
30
+ *
31
+ * @param ttlSeconds Optional time-to-live in seconds. Backends that don't
32
+ * support TTLs may ignore it, but shared backends should honor it so
33
+ * orphaned, epoch-busted keys are eventually reclaimed.
34
+ */
35
+ set(key: string, value: string, ttlSeconds?: number): Promise<void>;
36
+ /** Remove `key`. Idempotent — deleting a missing key is not an error. */
37
+ delete(key: string): Promise<void>;
38
+ }
39
+ /**
40
+ * Serializable descriptor for an object-cache backend.
41
+ *
42
+ * Mirrors {@link import("../storage/types.js").StorageDescriptor}: `entrypoint`
43
+ * is a module specifier resolved at build time that exports a
44
+ * {@link CreateObjectCacheBackendFn} named `createObjectCache`; `config` is the
45
+ * plain, serializable runtime config passed to it.
46
+ */
47
+ interface ObjectCacheDescriptor {
48
+ /** Module path exporting a `createObjectCache` function. */
49
+ entrypoint: string;
50
+ /** Serializable config passed to `createObjectCache` at runtime. */
51
+ config: ObjectCacheRuntimeConfig;
52
+ }
53
+ /**
54
+ * Runtime config shared by every backend, plus backend-specific keys.
55
+ *
56
+ * The read-through layer reads `defaultTtl`, `revalidate`, and `keyPrefix`;
57
+ * individual backends read their own keys (e.g. the memory backend reads
58
+ * `maxEntries`).
59
+ */
60
+ interface ObjectCacheRuntimeConfig {
61
+ /**
62
+ * Default time-to-live for cached entries, in seconds.
63
+ *
64
+ * Invalidation works by epoch comparison, not key deletion: a stale value
65
+ * is detected on read (its stored epoch no longer matches) and overwritten
66
+ * in place under the same key. The TTL is just a backstop that reclaims
67
+ * keys that are never read again.
68
+ *
69
+ * @default 3600 (1 hour)
70
+ */
71
+ defaultTtl?: number;
72
+ /**
73
+ * How long (milliseconds) an isolate may reuse a cached namespace epoch
74
+ * before re-reading it from the backend.
75
+ *
76
+ * After a write bumps a namespace's epoch, an isolate keeps serving the
77
+ * previous epoch's keys until its cached epoch expires after this window.
78
+ * Shared backends may add their own propagation delay. Only anonymous
79
+ * visitors are affected — preview and edit requests bypass the cache.
80
+ *
81
+ * Set to `0` to re-read the epoch on every query (strongest freshness, more
82
+ * backend reads).
83
+ *
84
+ * @default 1000
85
+ */
86
+ revalidate?: number;
87
+ /**
88
+ * Prefix applied to every cache key. Lets multiple Dineway sites share one
89
+ * backend without colliding.
90
+ *
91
+ * @default "dineway"
92
+ */
93
+ keyPrefix?: string;
94
+ /**
95
+ * Maximum time (milliseconds) to wait for a single backend read before
96
+ * treating it as a cache miss and falling back to the database.
97
+ *
98
+ * Guards against a backend operation that stalls without resolving or
99
+ * rejecting, which would otherwise hang the request. A timed-out read
100
+ * degrades to a miss; the database remains the source of truth.
101
+ *
102
+ * Set to `0` to disable the timeout.
103
+ *
104
+ * @default 2000
105
+ */
106
+ timeout?: number;
107
+ /** Backend-specific keys. */
108
+ [key: string]: unknown;
109
+ }
110
+ /**
111
+ * Factory signature exported as `createObjectCache` from a backend entrypoint.
112
+ *
113
+ * Each backend accesses its own resources directly; the bundled memory backend
114
+ * uses an in-process map.
115
+ */
116
+ type CreateObjectCacheBackendFn = (config: ObjectCacheRuntimeConfig) => ObjectCacheBackend;
117
+ //#endregion
118
+ export { ObjectCacheRuntimeConfig as i, ObjectCacheBackend as n, ObjectCacheDescriptor as r, CreateObjectCacheBackendFn as t };
@@ -163,10 +163,11 @@ interface CreateFieldInput {
163
163
  */
164
164
  interface UpdateFieldInput {
165
165
  label?: string;
166
+ type?: FieldType;
166
167
  required?: boolean;
167
168
  unique?: boolean;
168
169
  defaultValue?: unknown;
169
- validation?: FieldValidation;
170
+ validation?: FieldValidation | null;
170
171
  widget?: string;
171
172
  options?: FieldWidgetOptions;
172
173
  sortOrder?: number;
@@ -180,6 +181,8 @@ interface UpdateFieldInput {
180
181
  */
181
182
  interface CollectionWithFields extends Collection {
182
183
  fields: Field[];
184
+ /** Stable hash of the complete native collection and field contract. */
185
+ schemaFingerprint: string;
183
186
  }
184
187
  /**
185
188
  * Reserved field slugs that cannot be used
@@ -1,4 +1,4 @@
1
- import { a as __exportAll } from "./runner-DzIpHGND.mjs";
1
+ import { a as __exportAll } from "./runner-BgmttQmD.mjs";
2
2
  import { r as encodeBase64, t as decodeBase64 } from "./base64-F8-DUraK.mjs";
3
3
 
4
4
  //#region src/database/repositories/types.ts
@@ -289,6 +289,24 @@ interface ImportResult {
289
289
  error: string;
290
290
  }>;
291
291
  byCollection: Record<string, number>;
292
+ /** Number of taxonomy term assignments written during plugin import */
293
+ taxonomyAssignments?: number;
294
+ /** Source taxonomies skipped because no matching Dineway taxonomy def exists */
295
+ missingTaxonomies?: string[];
296
+ /** Custom taxonomy defs auto-created during plugin import */
297
+ taxonomiesCreated?: string[];
298
+ /** Navigation menu import summary */
299
+ menus?: {
300
+ created: number;
301
+ items: number;
302
+ };
303
+ /** Comment import summary */
304
+ comments?: {
305
+ imported: number;
306
+ skipped: number;
307
+ };
308
+ /** Site settings applied from the source */
309
+ siteSettings?: string[];
292
310
  }
293
311
  /**
294
312
  * An import source provides content from an external system.