dineway 0.1.8 → 0.1.11

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 (690) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +63 -17
  3. package/dist/activity-events-BsMaXdJa.mjs +540 -0
  4. package/dist/allowed-origins-DG86sH8U.mjs +68 -0
  5. package/dist/api/route-utils.d.mts +41 -0
  6. package/dist/api/route-utils.mjs +26 -0
  7. package/dist/api/schemas/index.d.mts +3 -0
  8. package/dist/api/schemas/index.mjs +6 -0
  9. package/dist/api/schemas/setup.d.mts +42 -0
  10. package/dist/api/schemas/setup.mjs +39 -0
  11. package/dist/api-Cmy8Rjk5.mjs +2704 -0
  12. package/dist/api-tokens-Bu3ez1MO.mjs +153 -0
  13. package/dist/api-tokens-DzloJxuh.mjs +3 -0
  14. package/dist/{apply-iVSqz2qs.mjs → apply-Co5imxxT.mjs} +15 -689
  15. package/dist/astro/index.d.mts +10 -6
  16. package/dist/astro/index.mjs +86 -11
  17. package/dist/astro/middleware/auth.d.mts +10 -7
  18. package/dist/astro/middleware/auth.mjs +19 -104
  19. package/dist/astro/middleware/redirect.mjs +24 -14
  20. package/dist/astro/middleware/request-context.mjs +9 -6
  21. package/dist/astro/middleware/setup.mjs +1 -1
  22. package/dist/astro/middleware.mjs +86 -145
  23. package/dist/astro/routes/PluginRegistry.d.mts +14 -0
  24. package/dist/astro/routes/PluginRegistry.mjs +24 -0
  25. package/dist/astro/routes/api/admin/allowed-domains/_domain_.d.mts +14 -0
  26. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +65 -0
  27. package/dist/astro/routes/api/admin/allowed-domains/index.d.mts +14 -0
  28. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +65 -0
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.d.mts +10 -0
  30. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +33 -0
  31. package/dist/astro/routes/api/admin/api-tokens/index.d.mts +16 -0
  32. package/dist/astro/routes/api/admin/api-tokens/index.mjs +59 -0
  33. package/dist/astro/routes/api/admin/briefing.d.mts +7 -0
  34. package/dist/astro/routes/api/admin/briefing.mjs +71 -0
  35. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts +9 -0
  36. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +74 -0
  37. package/dist/astro/routes/api/admin/bylines/index.d.mts +8 -0
  38. package/dist/astro/routes/api/admin/bylines/index.mjs +61 -0
  39. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts +7 -0
  40. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +80 -0
  41. package/dist/astro/routes/api/admin/comments/_id_.d.mts +14 -0
  42. package/dist/astro/routes/api/admin/comments/_id_.mjs +46 -0
  43. package/dist/astro/routes/api/admin/comments/bulk.d.mts +7 -0
  44. package/dist/astro/routes/api/admin/comments/bulk.mjs +36 -0
  45. package/dist/astro/routes/api/admin/comments/counts.d.mts +7 -0
  46. package/dist/astro/routes/api/admin/comments/counts.mjs +24 -0
  47. package/dist/astro/routes/api/admin/comments/index.d.mts +10 -0
  48. package/dist/astro/routes/api/admin/comments/index.mjs +40 -0
  49. package/dist/astro/routes/api/admin/context/_id_/history.d.mts +7 -0
  50. package/dist/astro/routes/api/admin/context/_id_/history.mjs +45 -0
  51. package/dist/astro/routes/api/admin/context/_id_/index.d.mts +7 -0
  52. package/dist/astro/routes/api/admin/context/_id_/index.mjs +45 -0
  53. package/dist/astro/routes/api/admin/context/_id_/review.d.mts +7 -0
  54. package/dist/astro/routes/api/admin/context/_id_/review.mjs +60 -0
  55. package/dist/astro/routes/api/admin/context/_id_/supersede.d.mts +7 -0
  56. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +63 -0
  57. package/dist/astro/routes/api/admin/context/diff.d.mts +7 -0
  58. package/dist/astro/routes/api/admin/context/diff.mjs +49 -0
  59. package/dist/astro/routes/api/admin/context/index.d.mts +8 -0
  60. package/dist/astro/routes/api/admin/context/index.mjs +71 -0
  61. package/dist/astro/routes/api/admin/context/stale.d.mts +7 -0
  62. package/dist/astro/routes/api/admin/context/stale.mjs +49 -0
  63. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.d.mts +7 -0
  64. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +51 -0
  65. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.d.mts +7 -0
  66. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +67 -0
  67. package/dist/astro/routes/api/admin/hitl-requests/index.d.mts +7 -0
  68. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +55 -0
  69. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts +7 -0
  70. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +98 -0
  71. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts +7 -0
  72. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +33 -0
  73. package/dist/astro/routes/api/admin/oauth-clients/_id_.d.mts +18 -0
  74. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +79 -0
  75. package/dist/astro/routes/api/admin/oauth-clients/index.d.mts +14 -0
  76. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +58 -0
  77. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts +7 -0
  78. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +89 -0
  79. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts +7 -0
  80. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +89 -0
  81. package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts +7 -0
  82. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +54 -0
  83. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts +7 -0
  84. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +98 -0
  85. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts +7 -0
  86. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +131 -0
  87. package/dist/astro/routes/api/admin/plugins/index.d.mts +7 -0
  88. package/dist/astro/routes/api/admin/plugins/index.mjs +52 -0
  89. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts +7 -0
  90. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +36 -0
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.d.mts +7 -0
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +54 -0
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts +7 -0
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +128 -0
  95. package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts +7 -0
  96. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +61 -0
  97. package/dist/astro/routes/api/admin/plugins/updates.d.mts +7 -0
  98. package/dist/astro/routes/api/admin/plugins/updates.mjs +52 -0
  99. package/dist/astro/routes/api/admin/review-requests/_id_/index.d.mts +7 -0
  100. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +26 -0
  101. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.d.mts +7 -0
  102. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +97 -0
  103. package/dist/astro/routes/api/admin/review-requests/index.d.mts +7 -0
  104. package/dist/astro/routes/api/admin/review-requests/index.mjs +31 -0
  105. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.d.mts +7 -0
  106. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +54 -0
  107. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts +7 -0
  108. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +36 -0
  109. package/dist/astro/routes/api/admin/themes/marketplace/index.d.mts +7 -0
  110. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +70 -0
  111. package/dist/astro/routes/api/admin/users/_id_/disable.d.mts +7 -0
  112. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +38 -0
  113. package/dist/astro/routes/api/admin/users/_id_/enable.d.mts +7 -0
  114. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +29 -0
  115. package/dist/astro/routes/api/admin/users/_id_/index.d.mts +8 -0
  116. package/dist/astro/routes/api/admin/users/_id_/index.mjs +104 -0
  117. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts +7 -0
  118. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +43 -0
  119. package/dist/astro/routes/api/admin/users/index.d.mts +7 -0
  120. package/dist/astro/routes/api/admin/users/index.mjs +54 -0
  121. package/dist/astro/routes/api/auth/dev-bypass.d.mts +8 -0
  122. package/dist/astro/routes/api/auth/dev-bypass.mjs +81 -0
  123. package/dist/astro/routes/api/auth/invite/accept.d.mts +7 -0
  124. package/dist/astro/routes/api/auth/invite/accept.mjs +31 -0
  125. package/dist/astro/routes/api/auth/invite/complete.d.mts +7 -0
  126. package/dist/astro/routes/api/auth/invite/complete.mjs +54 -0
  127. package/dist/astro/routes/api/auth/invite/index.d.mts +7 -0
  128. package/dist/astro/routes/api/auth/invite/index.mjs +51 -0
  129. package/dist/astro/routes/api/auth/invite/register-options.d.mts +7 -0
  130. package/dist/astro/routes/api/auth/invite/register-options.mjs +44 -0
  131. package/dist/astro/routes/api/auth/logout.d.mts +7 -0
  132. package/dist/astro/routes/api/auth/logout.mjs +24 -0
  133. package/dist/astro/routes/api/auth/magic-link/send.d.mts +7 -0
  134. package/dist/astro/routes/api/auth/magic-link/send.mjs +48 -0
  135. package/dist/astro/routes/api/auth/magic-link/verify.d.mts +7 -0
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +32 -0
  137. package/dist/astro/routes/api/auth/me.d.mts +13 -0
  138. package/dist/astro/routes/api/auth/me.mjs +41 -0
  139. package/dist/astro/routes/api/auth/mode.d.mts +7 -0
  140. package/dist/astro/routes/api/auth/mode.mjs +28 -0
  141. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts +7 -0
  142. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +114 -0
  143. package/dist/astro/routes/api/auth/oauth/_provider_.d.mts +7 -0
  144. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +58 -0
  145. package/dist/astro/routes/api/auth/passkey/_id_.d.mts +14 -0
  146. package/dist/astro/routes/api/auth/passkey/_id_.mjs +62 -0
  147. package/dist/astro/routes/api/auth/passkey/index.d.mts +7 -0
  148. package/dist/astro/routes/api/auth/passkey/index.mjs +25 -0
  149. package/dist/astro/routes/api/auth/passkey/options.d.mts +7 -0
  150. package/dist/astro/routes/api/auth/passkey/options.mjs +46 -0
  151. package/dist/astro/routes/api/auth/passkey/register/options.d.mts +7 -0
  152. package/dist/astro/routes/api/auth/passkey/register/options.mjs +44 -0
  153. package/dist/astro/routes/api/auth/passkey/register/verify.d.mts +7 -0
  154. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +59 -0
  155. package/dist/astro/routes/api/auth/passkey/verify.d.mts +7 -0
  156. package/dist/astro/routes/api/auth/passkey/verify.mjs +47 -0
  157. package/dist/astro/routes/api/auth/signup/complete.d.mts +7 -0
  158. package/dist/astro/routes/api/auth/signup/complete.mjs +55 -0
  159. package/dist/astro/routes/api/auth/signup/request.d.mts +7 -0
  160. package/dist/astro/routes/api/auth/signup/request.mjs +44 -0
  161. package/dist/astro/routes/api/auth/signup/verify.d.mts +7 -0
  162. package/dist/astro/routes/api/auth/signup/verify.mjs +32 -0
  163. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +14 -0
  164. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +193 -0
  165. package/dist/astro/routes/api/content/_collection_/_id_/compare.d.mts +7 -0
  166. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +17 -0
  167. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts +7 -0
  168. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +36 -0
  169. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.d.mts +7 -0
  170. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +39 -0
  171. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts +7 -0
  172. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +31 -0
  173. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts +7 -0
  174. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +78 -0
  175. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +7 -0
  176. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +92 -0
  177. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts +7 -0
  178. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +36 -0
  179. package/dist/astro/routes/api/content/_collection_/_id_/revisions.d.mts +7 -0
  180. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +19 -0
  181. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts +8 -0
  182. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +75 -0
  183. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts +14 -0
  184. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +85 -0
  185. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts +7 -0
  186. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +40 -0
  187. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts +7 -0
  188. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +36 -0
  189. package/dist/astro/routes/api/content/_collection_/_id_.d.mts +9 -0
  190. package/dist/astro/routes/api/content/_collection_/_id_.mjs +114 -0
  191. package/dist/astro/routes/api/content/_collection_/index.d.mts +8 -0
  192. package/dist/astro/routes/api/content/_collection_/index.mjs +74 -0
  193. package/dist/astro/routes/api/content/_collection_/trash.d.mts +7 -0
  194. package/dist/astro/routes/api/content/_collection_/trash.mjs +23 -0
  195. package/dist/astro/routes/api/dashboard.d.mts +7 -0
  196. package/dist/astro/routes/api/dashboard.mjs +26 -0
  197. package/dist/astro/routes/api/dev/emails.d.mts +8 -0
  198. package/dist/astro/routes/api/dev/emails.mjs +17 -0
  199. package/dist/astro/routes/api/health.d.mts +7 -0
  200. package/dist/astro/routes/api/health.mjs +34 -0
  201. package/dist/astro/routes/api/import/probe.d.mts +17 -0
  202. package/dist/astro/routes/api/import/probe.mjs +33 -0
  203. package/dist/astro/routes/api/import/wordpress/analyze.d.mts +87 -0
  204. package/dist/astro/routes/api/import/wordpress/analyze.mjs +305 -0
  205. package/dist/astro/routes/api/import/wordpress/execute.d.mts +37 -0
  206. package/dist/astro/routes/api/import/wordpress/execute.mjs +197 -0
  207. package/dist/astro/routes/api/import/wordpress/media.d.mts +35 -0
  208. package/dist/astro/routes/api/import/wordpress/media.mjs +222 -0
  209. package/dist/astro/routes/api/import/wordpress/prepare.d.mts +19 -0
  210. package/dist/astro/routes/api/import/wordpress/prepare.mjs +155 -0
  211. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +21 -0
  212. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +289 -0
  213. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +15 -0
  214. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +69 -0
  215. package/dist/astro/routes/api/import/wordpress-plugin/callback.d.mts +7 -0
  216. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +28 -0
  217. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +19 -0
  218. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +268 -0
  219. package/dist/astro/routes/api/manifest.d.mts +7 -0
  220. package/dist/astro/routes/api/manifest.mjs +50 -0
  221. package/dist/astro/routes/api/mcp.d.mts +15 -0
  222. package/dist/astro/routes/api/mcp.mjs +2700 -0
  223. package/dist/astro/routes/api/media/_id_/confirm.d.mts +10 -0
  224. package/dist/astro/routes/api/media/_id_/confirm.mjs +59 -0
  225. package/dist/astro/routes/api/media/_id_.d.mts +22 -0
  226. package/dist/astro/routes/api/media/_id_.mjs +81 -0
  227. package/dist/astro/routes/api/media/file/_...key_.d.mts +7 -0
  228. package/dist/astro/routes/api/media/file/_...key_.mjs +49 -0
  229. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.d.mts +14 -0
  230. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +49 -0
  231. package/dist/astro/routes/api/media/providers/_providerId_/index.d.mts +14 -0
  232. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +72 -0
  233. package/dist/astro/routes/api/media/providers/index.d.mts +10 -0
  234. package/dist/astro/routes/api/media/providers/index.mjs +18 -0
  235. package/dist/astro/routes/api/media/upload-url.d.mts +10 -0
  236. package/dist/astro/routes/api/media/upload-url.mjs +82 -0
  237. package/dist/astro/routes/api/media.d.mts +16 -0
  238. package/dist/astro/routes/api/media.mjs +137 -0
  239. package/dist/astro/routes/api/menus/_name_/items.d.mts +9 -0
  240. package/{src/astro/routes/api/menus/[name]/items.ts → dist/astro/routes/api/menus/_name_/items.mjs} +63 -105
  241. package/dist/astro/routes/api/menus/_name_/reorder.d.mts +7 -0
  242. package/dist/astro/routes/api/menus/_name_/reorder.mjs +77 -0
  243. package/dist/astro/routes/api/menus/_name_.d.mts +9 -0
  244. package/dist/astro/routes/api/menus/_name_.mjs +123 -0
  245. package/dist/astro/routes/api/menus/index.d.mts +8 -0
  246. package/dist/astro/routes/api/menus/index.mjs +84 -0
  247. package/dist/astro/routes/api/oauth/authorize.d.mts +8 -0
  248. package/dist/astro/routes/api/oauth/authorize.mjs +265 -0
  249. package/dist/astro/routes/api/oauth/device/authorize.d.mts +7 -0
  250. package/dist/astro/routes/api/oauth/device/authorize.mjs +30 -0
  251. package/dist/astro/routes/api/oauth/device/code.d.mts +7 -0
  252. package/dist/astro/routes/api/oauth/device/code.mjs +34 -0
  253. package/dist/astro/routes/api/oauth/device/token.d.mts +7 -0
  254. package/dist/astro/routes/api/oauth/device/token.mjs +45 -0
  255. package/dist/astro/routes/api/oauth/register.d.mts +8 -0
  256. package/dist/astro/routes/api/oauth/register.mjs +115 -0
  257. package/dist/astro/routes/api/oauth/token/refresh.d.mts +7 -0
  258. package/dist/astro/routes/api/oauth/token/refresh.mjs +28 -0
  259. package/dist/astro/routes/api/oauth/token/revoke.d.mts +7 -0
  260. package/dist/astro/routes/api/oauth/token/revoke.mjs +25 -0
  261. package/dist/astro/routes/api/oauth/token.d.mts +8 -0
  262. package/dist/astro/routes/api/oauth/token.mjs +138 -0
  263. package/dist/astro/routes/api/openapi.json.d.mts +7 -0
  264. package/dist/astro/routes/api/openapi.json.mjs +2638 -0
  265. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +11 -0
  266. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +77 -0
  267. package/dist/astro/routes/api/redirects/404s/index.d.mts +9 -0
  268. package/dist/astro/routes/api/redirects/404s/index.mjs +62 -0
  269. package/dist/astro/routes/api/redirects/404s/summary.d.mts +7 -0
  270. package/dist/astro/routes/api/redirects/404s/summary.mjs +34 -0
  271. package/dist/astro/routes/api/redirects/_id_.d.mts +9 -0
  272. package/dist/astro/routes/api/redirects/_id_.mjs +152 -0
  273. package/dist/astro/routes/api/redirects/index.d.mts +8 -0
  274. package/dist/astro/routes/api/redirects/index.mjs +97 -0
  275. package/dist/astro/routes/api/revisions/_revisionId_/index.d.mts +7 -0
  276. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +16 -0
  277. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts +7 -0
  278. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +23 -0
  279. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts +9 -0
  280. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +98 -0
  281. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts +8 -0
  282. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +80 -0
  283. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.d.mts +7 -0
  284. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +67 -0
  285. package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts +9 -0
  286. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +97 -0
  287. package/dist/astro/routes/api/schema/collections/index.d.mts +8 -0
  288. package/dist/astro/routes/api/schema/collections/index.mjs +77 -0
  289. package/dist/astro/routes/api/schema/index.d.mts +7 -0
  290. package/dist/astro/routes/api/schema/index.mjs +79 -0
  291. package/dist/astro/routes/api/schema/orphans/_slug_.d.mts +7 -0
  292. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +58 -0
  293. package/dist/astro/routes/api/schema/orphans/index.d.mts +7 -0
  294. package/dist/astro/routes/api/schema/orphans/index.mjs +53 -0
  295. package/dist/astro/routes/api/search/enable.d.mts +15 -0
  296. package/dist/astro/routes/api/search/enable.mjs +55 -0
  297. package/dist/astro/routes/api/search/index.d.mts +16 -0
  298. package/dist/astro/routes/api/search/index.mjs +52 -0
  299. package/dist/astro/routes/api/search/rebuild.d.mts +13 -0
  300. package/dist/astro/routes/api/search/rebuild.mjs +48 -0
  301. package/dist/astro/routes/api/search/stats.d.mts +10 -0
  302. package/dist/astro/routes/api/search/stats.mjs +28 -0
  303. package/dist/astro/routes/api/search/suggest.d.mts +15 -0
  304. package/dist/astro/routes/api/search/suggest.mjs +43 -0
  305. package/dist/astro/routes/api/sections/_slug_.d.mts +9 -0
  306. package/dist/astro/routes/api/sections/_slug_.mjs +156 -0
  307. package/dist/astro/routes/api/sections/index.d.mts +8 -0
  308. package/dist/astro/routes/api/sections/index.mjs +99 -0
  309. package/dist/astro/routes/api/settings/email.d.mts +17 -0
  310. package/dist/astro/routes/api/settings/email.mjs +102 -0
  311. package/dist/astro/routes/api/settings.d.mts +20 -0
  312. package/dist/astro/routes/api/settings.mjs +101 -0
  313. package/dist/astro/routes/api/setup/admin-verify.d.mts +7 -0
  314. package/dist/astro/routes/api/setup/admin-verify.mjs +67 -0
  315. package/dist/astro/routes/api/setup/admin.d.mts +7 -0
  316. package/dist/astro/routes/api/setup/admin.mjs +68 -0
  317. package/dist/astro/routes/api/setup/dev-bypass.d.mts +8 -0
  318. package/dist/astro/routes/api/setup/dev-bypass.mjs +137 -0
  319. package/dist/astro/routes/api/setup/dev-reset.d.mts +7 -0
  320. package/dist/astro/routes/api/setup/dev-reset.mjs +22 -0
  321. package/dist/astro/routes/api/setup/index.d.mts +7 -0
  322. package/dist/astro/routes/api/setup/index.mjs +93 -0
  323. package/dist/astro/routes/api/setup/status.d.mts +7 -0
  324. package/dist/astro/routes/api/setup/status.mjs +57 -0
  325. package/dist/astro/routes/api/snapshot.d.mts +7 -0
  326. package/dist/astro/routes/api/snapshot.mjs +227 -0
  327. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts +18 -0
  328. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +189 -0
  329. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts +14 -0
  330. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +113 -0
  331. package/dist/astro/routes/api/taxonomies/index.d.mts +14 -0
  332. package/dist/astro/routes/api/taxonomies/index.mjs +103 -0
  333. package/dist/astro/routes/api/themes/preview.d.mts +7 -0
  334. package/dist/astro/routes/api/themes/preview.mjs +47 -0
  335. package/dist/astro/routes/api/typegen.d.mts +17 -0
  336. package/dist/astro/routes/api/typegen.mjs +75 -0
  337. package/dist/astro/routes/api/well-known/auth.d.mts +7 -0
  338. package/dist/astro/routes/api/well-known/auth.mjs +42 -0
  339. package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts +7 -0
  340. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +33 -0
  341. package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts +7 -0
  342. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +21 -0
  343. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts +7 -0
  344. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +88 -0
  345. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts +8 -0
  346. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +158 -0
  347. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts +7 -0
  348. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +104 -0
  349. package/dist/astro/routes/api/widget-areas/_name_.d.mts +8 -0
  350. package/dist/astro/routes/api/widget-areas/_name_.mjs +99 -0
  351. package/dist/astro/routes/api/widget-areas/index.d.mts +8 -0
  352. package/dist/astro/routes/api/widget-areas/index.mjs +108 -0
  353. package/dist/astro/routes/api/widget-components.d.mts +7 -0
  354. package/dist/astro/routes/api/widget-components.mjs +15 -0
  355. package/dist/astro/routes/robots.txt.d.mts +7 -0
  356. package/dist/astro/routes/robots.txt.mjs +60 -0
  357. package/dist/astro/routes/sitemap-_collection_.xml.d.mts +7 -0
  358. package/dist/astro/routes/sitemap-_collection_.xml.mjs +70 -0
  359. package/dist/astro/routes/sitemap.xml.d.mts +7 -0
  360. package/dist/astro/routes/sitemap.xml.mjs +63 -0
  361. package/dist/astro/types.d.mts +41 -9
  362. package/dist/auth/providers/github-admin.d.mts +9 -0
  363. package/dist/auth/providers/github-admin.mjs +27 -0
  364. package/dist/auth/providers/github.d.mts +12 -0
  365. package/dist/auth/providers/github.mjs +17 -0
  366. package/dist/auth/providers/google-admin.d.mts +9 -0
  367. package/dist/auth/providers/google-admin.mjs +43 -0
  368. package/dist/auth/providers/google.d.mts +12 -0
  369. package/dist/auth/providers/google.mjs +17 -0
  370. package/dist/auth-control-guard-DKUe_1oa.mjs +13 -0
  371. package/dist/authorize-BBj8C6Y8.mjs +36 -0
  372. package/dist/briefing-BrXCuMEE.mjs +1294 -0
  373. package/dist/briefing-ClWw4mc9.mjs +29 -0
  374. package/dist/{byline-OhH2dlRu.mjs → byline-naZxOPSa.mjs} +3 -3
  375. package/dist/{bylines-BGpD9_hy.mjs → bylines-BcOPh6Ej.mjs} +20 -53
  376. package/dist/bylines-HfUKum_j.d.mts +2023 -0
  377. package/dist/{cache-BdSY-gQN.mjs → cache-DEbQ13c9.mjs} +21 -11
  378. package/dist/challenge-store-DHMgBGOq.mjs +48 -0
  379. package/dist/cli/index.mjs +142 -22
  380. package/dist/client/external-auth-headers.d.mts +1 -1
  381. package/dist/client/index.d.mts +1 -1
  382. package/dist/client/index.mjs +3 -3
  383. package/dist/comment-DFO-gWDH.mjs +246 -0
  384. package/dist/comments-Gy3zLBaP.mjs +186 -0
  385. package/dist/components-DND2rd3D.mjs +107 -0
  386. package/dist/{content-DWi4d0rT.mjs → content-CyLkb-qH.mjs} +33 -44
  387. package/dist/context-bE5Kyvcj.mjs +184 -0
  388. package/dist/context-nxMyOe3p.mjs +849 -0
  389. package/dist/context-route-helpers-D-6uCQ0S.mjs +45 -0
  390. package/dist/context-types-C-LwdAxx.mjs +23 -0
  391. package/dist/cron-DGzVTtJp.mjs +263 -0
  392. package/dist/dashboard-DqnYU8EU.mjs +120 -0
  393. package/dist/db/index.d.mts +3 -3
  394. package/dist/db/libsql.d.mts +1 -1
  395. package/dist/db/libsql.mjs +3 -3
  396. package/dist/db/postgres.d.mts +1 -1
  397. package/dist/db/sqlite.d.mts +1 -1
  398. package/dist/db/sqlite.mjs +1 -2
  399. package/dist/device-flow-7AhWNwCK.mjs +487 -0
  400. package/dist/email-console-CgLVZbcn.mjs +36 -0
  401. package/dist/entity-aliases-C0v-yNET.mjs +51 -0
  402. package/dist/error-DEGjx2Xw.mjs +435 -0
  403. package/dist/escape-mNZr4t2A.mjs +8 -0
  404. package/dist/experimental-workflows-DldxJlqV.mjs +38 -0
  405. package/dist/fts-manager-B1pTNEG_.mjs +297 -0
  406. package/dist/hash-CDX7M0ze.mjs +32 -0
  407. package/dist/hitl-requests-Bx3Bkk9l.mjs +118 -0
  408. package/dist/hitl-route-helpers-DMmJRS7B.mjs +96 -0
  409. package/dist/import-DD3f2jkc.mjs +243 -0
  410. package/dist/import-DVZcYlDp.mjs +1323 -0
  411. package/dist/index-CkljPf5F.d.mts +227 -0
  412. package/dist/index.d.mts +15 -11
  413. package/dist/index.mjs +60 -22
  414. package/dist/{loader-sMG4TZ-u.mjs → loader-PZnPxFLc.mjs} +42 -5
  415. package/dist/{manifest-schema-D1MSVnoI.mjs → manifest-schema-DYoCQ5np.mjs} +22 -10
  416. package/dist/media/index.d.mts +1 -1
  417. package/dist/media/index.mjs +2 -1
  418. package/dist/media/local-runtime.d.mts +11 -7
  419. package/dist/media/local-runtime.mjs +3 -3
  420. package/dist/{media-DMTr80Gv.mjs → media-_7Fxdu45.mjs} +1 -1
  421. package/dist/menus-BacxVCCo.mjs +312 -0
  422. package/dist/menus-CrzHokKj.mjs +3502 -0
  423. package/dist/normalize-C49G_o1k.mjs +126 -0
  424. package/dist/oauth-authorization-C1qiw4hd.mjs +283 -0
  425. package/dist/oauth-clients-CvWatf5p.mjs +298 -0
  426. package/dist/oauth-state-store-hSdzxsEe.mjs +48 -0
  427. package/dist/oauth-user-lookup-B4OcmsLV.mjs +25 -0
  428. package/dist/options-z8VVg1Ll.mjs +114 -0
  429. package/dist/page/index.d.mts +2 -2
  430. package/dist/parse-BeQXIt1U.mjs +88 -0
  431. package/dist/passkey-config-Daqs5fjq.mjs +42 -0
  432. package/dist/{patterns-CrCYkMBb.mjs → patterns-K0DLqWir.mjs} +53 -1
  433. package/dist/{placeholder-Cp8g5Emj.mjs → placeholder-C2P5fKa4.mjs} +1 -126
  434. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -5
  435. package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
  436. package/dist/preview-C_4DyVox.mjs +788 -0
  437. package/dist/public-url-BB_umF5G.mjs +71 -0
  438. package/dist/{query-kDmwCsHh.mjs → query-RiobVwB5.mjs} +93 -19
  439. package/dist/rate-limit-CbJoj_fT.mjs +112 -0
  440. package/dist/{redirect-DnEWAkVg.mjs → redirect-CGl64yOX.mjs} +9 -5
  441. package/dist/redirect-ClSmMOtC.mjs +16 -0
  442. package/dist/redirects-B69T59hK.mjs +499 -0
  443. package/dist/redirects-CqaxraTO.mjs +1070 -0
  444. package/dist/{registry-C0zjeB9P.mjs → registry-C-_hxLqa.mjs} +26 -294
  445. package/dist/request-meta-Bd0mQfiS.mjs +130 -0
  446. package/dist/review-requests-C2DIHwlJ.mjs +148 -0
  447. package/dist/review-requests-DIyjw-K_.mjs +79 -0
  448. package/dist/{runner-CFI6B6J2.d.mts → runner-9eIQXuc2.d.mts} +1 -1
  449. package/dist/{index-yvc6E_17.d.mts → runtime-C4-7y7xK.d.mts} +1539 -2007
  450. package/dist/runtime.d.mts +10 -6
  451. package/dist/runtime.mjs +3 -3
  452. package/dist/schema-BNpI53of.mjs +40 -0
  453. package/dist/search-DM6CVti3.mjs +337 -0
  454. package/dist/secrets-dI8zzTV7.mjs +160 -0
  455. package/dist/sections-DZFyAQXd.mjs +338 -0
  456. package/dist/seed/index.d.mts +2 -2
  457. package/dist/seed/index.mjs +18 -13
  458. package/dist/seo/index.d.mts +1 -1
  459. package/dist/seo-BBgTCOYU.mjs +85 -0
  460. package/dist/seo-CUQctrog.mjs +129 -0
  461. package/dist/service-CSfcQguB.mjs +194 -0
  462. package/dist/settings-4XnpVMOS.mjs +223 -0
  463. package/dist/settings-Bw93cLfe.mjs +50 -0
  464. package/dist/setup-complete-DidsDQ1e.mjs +21 -0
  465. package/dist/setup-nonce-pml1PMKo.mjs +17 -0
  466. package/dist/sidecar-client-vzwV98K4.mjs +66 -0
  467. package/dist/site-activity-B8FjLIVh.mjs +104 -0
  468. package/dist/site-context-Bpu_Paur.mjs +4122 -0
  469. package/dist/site-url-CYIcO0Tj.mjs +12 -0
  470. package/dist/slugify-PDTDtMXp.mjs +30 -0
  471. package/dist/ssrf-CmM76lLV.mjs +248 -0
  472. package/dist/storage/local.d.mts +1 -1
  473. package/dist/storage/local.mjs +1 -1
  474. package/dist/storage/s3.d.mts +1 -1
  475. package/dist/storage/s3.mjs +2 -2
  476. package/dist/{taxonomies-1s5PaS_8.mjs → taxonomies-BvBgfzn3.mjs} +11 -7
  477. package/dist/taxonomies-CpqGcIJD.mjs +355 -0
  478. package/dist/taxonomy-D5cbhc8u.mjs +165 -0
  479. package/dist/{tokens-CJz9ubV6.mjs → tokens-DLTo4dO2.mjs} +1 -1
  480. package/dist/{transport-DB5eDN4x.mjs → transport-C9e_h-BF.mjs} +5 -4
  481. package/dist/trusted-proxy-Bi0Cuk5n.mjs +30 -0
  482. package/dist/{types-BawVha09.mjs → types-Bs6lTBBW.mjs} +1 -1
  483. package/dist/types-C982qI5I.d.mts +344 -0
  484. package/dist/types-D4XVOt01.d.mts +165 -0
  485. package/dist/{types-Cj0KMIZV.d.mts → types-DgfUZqcd.d.mts} +54 -16
  486. package/dist/{types-BuMDPy5C.d.mts → types-IPACEM14.d.mts} +6 -0
  487. package/dist/user-CcXq-zoL.mjs +154 -0
  488. package/dist/utils-D2in-zwy.mjs +285 -0
  489. package/dist/{validate-BZ5wnLLp.mjs → validate-BJgA6TW_.mjs} +1 -1
  490. package/dist/{validate-IPf8n4Fj.d.mts → validate-JCZihRIa.d.mts} +3 -3
  491. package/dist/version-DH53KCQd.mjs +6 -0
  492. package/dist/widgets-B7Q_7bxN.mjs +104 -0
  493. package/dist/wordpress-slugs-BevajWrC.mjs +14 -0
  494. package/dist/zod-generator-DBVP8D0P.mjs +132 -0
  495. package/locals.d.ts +1 -6
  496. package/package.json +96 -41
  497. package/src/components/DinewayHead.astro +8 -4
  498. package/src/components/DinewayImage.astro +7 -5
  499. package/src/components/DinewayMedia.astro +9 -3
  500. package/src/components/Gallery.astro +5 -3
  501. package/src/components/Image.astro +5 -1
  502. package/src/components/InlinePortableTextEditor.tsx +68 -19
  503. package/dist/error-BmL6QipT.mjs +0 -30
  504. package/dist/search-Hlm6g8Td.mjs +0 -11200
  505. package/dist/version-DxxaFHZ_.mjs +0 -6
  506. package/src/astro/routes/PluginRegistry.tsx +0 -21
  507. package/src/astro/routes/api/admin/allowed-domains/[domain].ts +0 -112
  508. package/src/astro/routes/api/admin/allowed-domains/index.ts +0 -108
  509. package/src/astro/routes/api/admin/api-tokens/[id].ts +0 -44
  510. package/src/astro/routes/api/admin/api-tokens/index.ts +0 -90
  511. package/src/astro/routes/api/admin/briefing.ts +0 -76
  512. package/src/astro/routes/api/admin/bylines/[id]/index.ts +0 -90
  513. package/src/astro/routes/api/admin/bylines/index.ts +0 -74
  514. package/src/astro/routes/api/admin/comments/[id]/status.ts +0 -120
  515. package/src/astro/routes/api/admin/comments/[id].ts +0 -64
  516. package/src/astro/routes/api/admin/comments/bulk.ts +0 -42
  517. package/src/astro/routes/api/admin/comments/counts.ts +0 -30
  518. package/src/astro/routes/api/admin/comments/index.ts +0 -46
  519. package/src/astro/routes/api/admin/context/[id]/history.ts +0 -35
  520. package/src/astro/routes/api/admin/context/[id]/index.ts +0 -35
  521. package/src/astro/routes/api/admin/context/[id]/review.ts +0 -57
  522. package/src/astro/routes/api/admin/context/[id]/supersede.ts +0 -58
  523. package/src/astro/routes/api/admin/context/diff.ts +0 -35
  524. package/src/astro/routes/api/admin/context/index.ts +0 -69
  525. package/src/astro/routes/api/admin/context/stale.ts +0 -35
  526. package/src/astro/routes/api/admin/hitl-requests/[id]/index.ts +0 -38
  527. package/src/astro/routes/api/admin/hitl-requests/[id]/resolve.ts +0 -54
  528. package/src/astro/routes/api/admin/hitl-requests/index.ts +0 -38
  529. package/src/astro/routes/api/admin/hooks/exclusive/[hookName].ts +0 -132
  530. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +0 -51
  531. package/src/astro/routes/api/admin/oauth-clients/[id].ts +0 -137
  532. package/src/astro/routes/api/admin/oauth-clients/index.ts +0 -95
  533. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +0 -91
  534. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +0 -91
  535. package/src/astro/routes/api/admin/plugins/[id]/index.ts +0 -38
  536. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +0 -98
  537. package/src/astro/routes/api/admin/plugins/[id]/update.ts +0 -154
  538. package/src/astro/routes/api/admin/plugins/index.ts +0 -32
  539. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +0 -62
  540. package/src/astro/routes/api/admin/plugins/marketplace/[id]/index.ts +0 -33
  541. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +0 -135
  542. package/src/astro/routes/api/admin/plugins/marketplace/index.ts +0 -38
  543. package/src/astro/routes/api/admin/plugins/updates.ts +0 -28
  544. package/src/astro/routes/api/admin/review-requests/[id]/index.ts +0 -35
  545. package/src/astro/routes/api/admin/review-requests/[id]/resolve.ts +0 -52
  546. package/src/astro/routes/api/admin/review-requests/index.ts +0 -35
  547. package/src/astro/routes/api/admin/themes/marketplace/[id]/index.ts +0 -33
  548. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +0 -62
  549. package/src/astro/routes/api/admin/themes/marketplace/index.ts +0 -45
  550. package/src/astro/routes/api/admin/users/[id]/disable.ts +0 -72
  551. package/src/astro/routes/api/admin/users/[id]/enable.ts +0 -48
  552. package/src/astro/routes/api/admin/users/[id]/index.ts +0 -166
  553. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +0 -72
  554. package/src/astro/routes/api/admin/users/index.ts +0 -66
  555. package/src/astro/routes/api/auth/dev-bypass.ts +0 -139
  556. package/src/astro/routes/api/auth/invite/accept.ts +0 -52
  557. package/src/astro/routes/api/auth/invite/complete.ts +0 -86
  558. package/src/astro/routes/api/auth/invite/index.ts +0 -99
  559. package/src/astro/routes/api/auth/invite/register-options.ts +0 -73
  560. package/src/astro/routes/api/auth/logout.ts +0 -40
  561. package/src/astro/routes/api/auth/magic-link/send.ts +0 -90
  562. package/src/astro/routes/api/auth/magic-link/verify.ts +0 -71
  563. package/src/astro/routes/api/auth/me.ts +0 -60
  564. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +0 -221
  565. package/src/astro/routes/api/auth/oauth/[provider].ts +0 -120
  566. package/src/astro/routes/api/auth/passkey/[id].ts +0 -124
  567. package/src/astro/routes/api/auth/passkey/index.ts +0 -54
  568. package/src/astro/routes/api/auth/passkey/options.ts +0 -85
  569. package/src/astro/routes/api/auth/passkey/register/options.ts +0 -88
  570. package/src/astro/routes/api/auth/passkey/register/verify.ts +0 -119
  571. package/src/astro/routes/api/auth/passkey/verify.ts +0 -72
  572. package/src/astro/routes/api/auth/signup/complete.ts +0 -87
  573. package/src/astro/routes/api/auth/signup/request.ts +0 -89
  574. package/src/astro/routes/api/auth/signup/verify.ts +0 -53
  575. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +0 -310
  576. package/src/astro/routes/api/content/[collection]/[id]/compare.ts +0 -28
  577. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +0 -68
  578. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +0 -77
  579. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +0 -42
  580. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +0 -107
  581. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +0 -100
  582. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +0 -64
  583. package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +0 -31
  584. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +0 -129
  585. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +0 -143
  586. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +0 -50
  587. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +0 -69
  588. package/src/astro/routes/api/content/[collection]/[id].ts +0 -173
  589. package/src/astro/routes/api/content/[collection]/index.ts +0 -103
  590. package/src/astro/routes/api/content/[collection]/trash.ts +0 -33
  591. package/src/astro/routes/api/dashboard.ts +0 -32
  592. package/src/astro/routes/api/dev/emails.ts +0 -36
  593. package/src/astro/routes/api/health.ts +0 -54
  594. package/src/astro/routes/api/import/probe.ts +0 -47
  595. package/src/astro/routes/api/import/wordpress/analyze.ts +0 -523
  596. package/src/astro/routes/api/import/wordpress/execute.ts +0 -330
  597. package/src/astro/routes/api/import/wordpress/media.ts +0 -338
  598. package/src/astro/routes/api/import/wordpress/prepare.ts +0 -212
  599. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +0 -425
  600. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +0 -111
  601. package/src/astro/routes/api/import/wordpress-plugin/callback.ts +0 -58
  602. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +0 -399
  603. package/src/astro/routes/api/manifest.ts +0 -75
  604. package/src/astro/routes/api/mcp.ts +0 -125
  605. package/src/astro/routes/api/media/[id]/confirm.ts +0 -93
  606. package/src/astro/routes/api/media/[id].ts +0 -145
  607. package/src/astro/routes/api/media/file/[...key].ts +0 -79
  608. package/src/astro/routes/api/media/providers/[providerId]/[itemId].ts +0 -91
  609. package/src/astro/routes/api/media/providers/[providerId]/index.ts +0 -111
  610. package/src/astro/routes/api/media/providers/index.ts +0 -30
  611. package/src/astro/routes/api/media/upload-url.ts +0 -146
  612. package/src/astro/routes/api/media.ts +0 -204
  613. package/src/astro/routes/api/menus/[name]/reorder.ts +0 -79
  614. package/src/astro/routes/api/menus/[name].ts +0 -145
  615. package/src/astro/routes/api/menus/index.ts +0 -91
  616. package/src/astro/routes/api/oauth/authorize.ts +0 -430
  617. package/src/astro/routes/api/oauth/device/authorize.ts +0 -45
  618. package/src/astro/routes/api/oauth/device/code.ts +0 -56
  619. package/src/astro/routes/api/oauth/device/token.ts +0 -70
  620. package/src/astro/routes/api/oauth/register.ts +0 -182
  621. package/src/astro/routes/api/oauth/token/refresh.ts +0 -38
  622. package/src/astro/routes/api/oauth/token/revoke.ts +0 -38
  623. package/src/astro/routes/api/oauth/token.ts +0 -195
  624. package/src/astro/routes/api/openapi.json.ts +0 -33
  625. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +0 -109
  626. package/src/astro/routes/api/redirects/404s/index.ts +0 -72
  627. package/src/astro/routes/api/redirects/404s/summary.ts +0 -33
  628. package/src/astro/routes/api/redirects/[id].ts +0 -183
  629. package/src/astro/routes/api/redirects/index.ts +0 -100
  630. package/src/astro/routes/api/revisions/[revisionId]/index.ts +0 -29
  631. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +0 -62
  632. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +0 -104
  633. package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +0 -67
  634. package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +0 -45
  635. package/src/astro/routes/api/schema/collections/[slug]/index.ts +0 -107
  636. package/src/astro/routes/api/schema/collections/index.ts +0 -61
  637. package/src/astro/routes/api/schema/index.ts +0 -109
  638. package/src/astro/routes/api/schema/orphans/[slug].ts +0 -36
  639. package/src/astro/routes/api/schema/orphans/index.ts +0 -26
  640. package/src/astro/routes/api/search/enable.ts +0 -64
  641. package/src/astro/routes/api/search/index.ts +0 -52
  642. package/src/astro/routes/api/search/rebuild.ts +0 -72
  643. package/src/astro/routes/api/search/stats.ts +0 -35
  644. package/src/astro/routes/api/search/suggest.ts +0 -50
  645. package/src/astro/routes/api/sections/[slug].ts +0 -203
  646. package/src/astro/routes/api/sections/index.ts +0 -107
  647. package/src/astro/routes/api/settings/email.ts +0 -150
  648. package/src/astro/routes/api/settings.ts +0 -116
  649. package/src/astro/routes/api/setup/admin-verify.ts +0 -122
  650. package/src/astro/routes/api/setup/admin.ts +0 -104
  651. package/src/astro/routes/api/setup/dev-bypass.ts +0 -200
  652. package/src/astro/routes/api/setup/dev-reset.ts +0 -40
  653. package/src/astro/routes/api/setup/index.ts +0 -128
  654. package/src/astro/routes/api/setup/status.ts +0 -122
  655. package/src/astro/routes/api/snapshot.ts +0 -76
  656. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +0 -232
  657. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +0 -131
  658. package/src/astro/routes/api/taxonomies/index.ts +0 -114
  659. package/src/astro/routes/api/themes/preview.ts +0 -78
  660. package/src/astro/routes/api/typegen.ts +0 -114
  661. package/src/astro/routes/api/well-known/auth.ts +0 -71
  662. package/src/astro/routes/api/well-known/oauth-authorization-server.ts +0 -48
  663. package/src/astro/routes/api/well-known/oauth-protected-resource.ts +0 -39
  664. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +0 -114
  665. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +0 -213
  666. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +0 -126
  667. package/src/astro/routes/api/widget-areas/[name].ts +0 -135
  668. package/src/astro/routes/api/widget-areas/index.ts +0 -149
  669. package/src/astro/routes/api/widget-components.ts +0 -22
  670. package/src/astro/routes/robots.txt.ts +0 -81
  671. package/src/astro/routes/sitemap-[collection].xml.ts +0 -104
  672. package/src/astro/routes/sitemap.xml.ts +0 -92
  673. /package/dist/{adapters-C2ypTrZZ.d.mts → adapters-BLDldpJg.d.mts} +0 -0
  674. /package/{src → dist}/astro/routes/admin.astro +0 -0
  675. /package/dist/{base64-F8-DUraK.mjs → base64-Cz-aU0X1.mjs} +0 -0
  676. /package/dist/{chunks--4F8ddV4.mjs → chunks-D_jVet6z.mjs} +0 -0
  677. /package/dist/{config-BXwuX8Bx.mjs → config-CAMFxGaV.mjs} +0 -0
  678. /package/dist/{db-errors-CEqD7qH9.mjs → db-errors-DKUg_NgF.mjs} +0 -0
  679. /package/dist/{default-VjJyuuG9.mjs → default-C3PZN-bz.mjs} +0 -0
  680. /package/dist/{load-Coc9HpHH.mjs → load-D-9NhLmF.mjs} +0 -0
  681. /package/dist/{mode-47goXBBK.mjs → mode-C80mAZQv.mjs} +0 -0
  682. /package/dist/{placeholder--wOi4TbO.d.mts → placeholder-CHkLckzK.d.mts} +0 -0
  683. /package/dist/{request-cache-Dk5qPSOx.mjs → request-cache-DHMRr2Lf.mjs} +0 -0
  684. /package/dist/{transaction-Cn2rjY78.mjs → transaction-x2tJQ-A1.mjs} +0 -0
  685. /package/dist/{transport-Wge_IzKl.d.mts → transport-6RefuBdV.d.mts} +0 -0
  686. /package/dist/{types-griIBQOQ.mjs → types-B9gKVOHk.mjs} +0 -0
  687. /package/dist/{types-CWbdtiux.d.mts → types-B9qVtiHb.d.mts} +0 -0
  688. /package/dist/{types-COeOq9nK.mjs → types-DL7Y8D_t.mjs} +0 -0
  689. /package/dist/{types-BzcUjoqg.d.mts → types-Djdp0cZO.d.mts} +0 -0
  690. /package/dist/{types-DOrVigru.d.mts → types-Du8jreyC.d.mts} +0 -0
@@ -0,0 +1,788 @@
1
+ import { runWithContext } from "./request-context.mjs";
2
+ import { n as createDatabase } from "./connection-BCNICDWN.mjs";
3
+ import { a as verifyPreviewSignature, t as buildPreviewSignatureHeader } from "./sidecar-client-vzwV98K4.mjs";
4
+ import { t as generatePreviewToken } from "./tokens-DLTo4dO2.mjs";
5
+ import BetterSqlite3 from "better-sqlite3";
6
+ import { sql } from "kysely";
7
+ import { ulid } from "ulidx";
8
+ import { createHash } from "node:crypto";
9
+ import { existsSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
10
+ import { join } from "node:path";
11
+
12
+ //#region src/preview/loading.ts
13
+ function renderPreviewLoadingPage() {
14
+ return `<!DOCTYPE html>
15
+ <html lang="en">
16
+ <head>
17
+ <meta charset="utf-8">
18
+ <meta name="viewport" content="width=device-width, initial-scale=1">
19
+ <meta http-equiv="refresh" content="2">
20
+ <title>Loading preview...</title>
21
+ <link rel="icon" href="/favicon.svg" />
22
+ <style>
23
+ body { font-family: system-ui, sans-serif; display: flex; align-items: center; justify-content: center; min-height: 100vh; margin: 0; background: #fafafa; color: #333; }
24
+ .spinner { width: 40px; height: 40px; border: 3px solid #e0e0e0; border-top-color: #333; border-radius: 50%; animation: spin 0.8s linear infinite; margin-right: 16px; }
25
+ @keyframes spin { to { transform: rotate(360deg); } }
26
+ </style>
27
+ </head>
28
+ <body>
29
+ <div class="spinner"></div>
30
+ <p>Loading preview&hellip;</p>
31
+ </body>
32
+ </html>`;
33
+ }
34
+
35
+ //#endregion
36
+ //#region src/preview/routes.ts
37
+ /**
38
+ * Preview mode route gating.
39
+ *
40
+ * Preview is read-only with no authenticated user. All `/_dineway/`
41
+ * routes are blocked by default. Only specific read-only API prefixes
42
+ * are allowlisted.
43
+ */
44
+ const ALLOWED_API_PREFIXES = [
45
+ "/_dineway/api/content/",
46
+ "/_dineway/api/schema",
47
+ "/_dineway/api/manifest",
48
+ "/_dineway/api/dashboard",
49
+ "/_dineway/api/search",
50
+ "/_dineway/api/media",
51
+ "/_dineway/api/taxonomies",
52
+ "/_dineway/api/menus",
53
+ "/_dineway/api/snapshot"
54
+ ];
55
+ function isBlockedInPreview(pathname) {
56
+ if (!pathname.startsWith("/_dineway/")) return false;
57
+ for (const prefix of ALLOWED_API_PREFIXES) if (pathname === prefix || pathname.startsWith(prefix)) return false;
58
+ return true;
59
+ }
60
+
61
+ //#endregion
62
+ //#region src/preview/session-database-factory.ts
63
+ function isRecord$1(value) {
64
+ return value !== null && typeof value === "object";
65
+ }
66
+ function isSessionRow(value) {
67
+ if (!isRecord$1(value)) return false;
68
+ return typeof value.id === "string" && typeof value.db_path === "string" && typeof value.created_at === "number" && typeof value.expires_at === "number" && typeof value.last_touched_at === "number";
69
+ }
70
+ function isDbPathRow(value) {
71
+ return isRecord$1(value) && typeof value.db_path === "string";
72
+ }
73
+ var SessionDatabaseLimitError = class extends Error {
74
+ constructor(message = "Session disk budget exceeded") {
75
+ super(message);
76
+ this.name = "SessionDatabaseLimitError";
77
+ }
78
+ };
79
+ var FileSessionDatabaseFactory = class {
80
+ registry;
81
+ sessionsDir;
82
+ maxDiskBytes;
83
+ constructor(options) {
84
+ this.options = options;
85
+ mkdirSync(options.rootDir, { recursive: true });
86
+ this.sessionsDir = join(options.rootDir, options.sessionsDirName ?? "sessions");
87
+ mkdirSync(this.sessionsDir, { recursive: true });
88
+ this.maxDiskBytes = options.maxDiskBytes ?? Number.POSITIVE_INFINITY;
89
+ this.registry = new BetterSqlite3(join(options.rootDir, options.registryFileName ?? "registry.db"));
90
+ this.registry.exec(`
91
+ CREATE TABLE IF NOT EXISTS session_databases (
92
+ id TEXT PRIMARY KEY,
93
+ db_path TEXT NOT NULL,
94
+ created_at INTEGER NOT NULL,
95
+ expires_at INTEGER NOT NULL,
96
+ last_touched_at INTEGER NOT NULL
97
+ );
98
+ `);
99
+ }
100
+ async open(input) {
101
+ const now = input.now ?? Date.now();
102
+ const row = this.getSessionRow(input.id);
103
+ if (!row) return null;
104
+ if (row.expires_at <= now || !existsSync(row.db_path)) {
105
+ this.deleteSession(row.id, row.db_path);
106
+ return null;
107
+ }
108
+ this.registry.prepare("UPDATE session_databases SET last_touched_at = ? WHERE id = ?").run(now, row.id);
109
+ const updated = this.getSessionRow(input.id);
110
+ if (!updated) return null;
111
+ return this.createHandle(updated, false);
112
+ }
113
+ async openOrCreate(input) {
114
+ const reopened = await this.open({
115
+ id: input.id,
116
+ now: input.now
117
+ });
118
+ if (reopened) return reopened;
119
+ const now = input.now ?? Date.now();
120
+ await this.cleanup(now);
121
+ if (this.getActiveDiskBytes() >= this.maxDiskBytes) throw new SessionDatabaseLimitError();
122
+ const dbPath = this.getDbPath(input.id);
123
+ new BetterSqlite3(dbPath).close();
124
+ this.registry.prepare(`INSERT OR REPLACE INTO session_databases (
125
+ id, db_path, created_at, expires_at, last_touched_at
126
+ ) VALUES (?, ?, ?, ?, ?)`).run(input.id, dbPath, now, now + input.ttlMs, now);
127
+ const row = this.getSessionRow(input.id);
128
+ if (!row) throw new Error(`Failed to create session database for ${JSON.stringify(input.id)}`);
129
+ return this.createHandle(row, true);
130
+ }
131
+ async destroy(id) {
132
+ const row = this.getSessionRow(id);
133
+ if (!row) return false;
134
+ this.deleteSession(row.id, row.db_path);
135
+ return true;
136
+ }
137
+ async cleanup(now = Date.now()) {
138
+ const removedSessionIds = [];
139
+ const removedPaths = /* @__PURE__ */ new Set();
140
+ const rows = this.listSessionRows();
141
+ for (const row of rows) if (row.expires_at <= now || !existsSync(row.db_path)) {
142
+ removedSessionIds.push(row.id);
143
+ for (const path of this.getManagedPaths(row.db_path)) if (existsSync(path)) {
144
+ rmSync(path, { force: true });
145
+ removedPaths.add(path);
146
+ }
147
+ this.registry.prepare("DELETE FROM session_databases WHERE id = ?").run(row.id);
148
+ }
149
+ const knownPaths = new Set(this.listDbPathRows().flatMap((row) => this.getManagedPaths(row.db_path)));
150
+ for (const entry of readdirSync(this.sessionsDir)) {
151
+ const fullPath = join(this.sessionsDir, entry);
152
+ if (!knownPaths.has(fullPath)) {
153
+ rmSync(fullPath, {
154
+ force: true,
155
+ recursive: false
156
+ });
157
+ removedPaths.add(fullPath);
158
+ }
159
+ }
160
+ return {
161
+ removedSessionIds,
162
+ removedPaths: [...removedPaths].toSorted()
163
+ };
164
+ }
165
+ async close() {
166
+ this.registry.close();
167
+ }
168
+ createHandle(row, created) {
169
+ const db = createDatabase({ url: `file:${row.db_path}` });
170
+ return {
171
+ created,
172
+ session: this.toSessionInfo(row),
173
+ db,
174
+ close: async () => {
175
+ await db.destroy();
176
+ }
177
+ };
178
+ }
179
+ getSessionRow(id) {
180
+ const row = this.registry.prepare("SELECT * FROM session_databases WHERE id = ?").get(id);
181
+ return isSessionRow(row) ? row : null;
182
+ }
183
+ toSessionInfo(row) {
184
+ return {
185
+ id: row.id,
186
+ dbPath: row.db_path,
187
+ createdAt: row.created_at,
188
+ expiresAt: row.expires_at,
189
+ lastTouchedAt: row.last_touched_at
190
+ };
191
+ }
192
+ deleteSession(id, dbPath) {
193
+ for (const path of this.getManagedPaths(dbPath)) rmSync(path, { force: true });
194
+ this.registry.prepare("DELETE FROM session_databases WHERE id = ?").run(id);
195
+ }
196
+ getActiveDiskBytes() {
197
+ return this.listDbPathRows().reduce((total, row) => {
198
+ return total + this.getManagedPaths(row.db_path).reduce((subtotal, path) => {
199
+ if (!existsSync(path)) return subtotal;
200
+ return subtotal + statSync(path).size;
201
+ }, 0);
202
+ }, 0);
203
+ }
204
+ getDbPath(id) {
205
+ const hash = createHash("sha256").update(id).digest("hex");
206
+ return join(this.sessionsDir, `${hash}.db`);
207
+ }
208
+ getManagedPaths(dbPath) {
209
+ return [
210
+ dbPath,
211
+ `${dbPath}-wal`,
212
+ `${dbPath}-shm`
213
+ ];
214
+ }
215
+ listSessionRows() {
216
+ return this.registry.prepare("SELECT * FROM session_databases ORDER BY expires_at ASC, last_touched_at ASC").all().filter(isSessionRow);
217
+ }
218
+ listDbPathRows() {
219
+ return this.registry.prepare("SELECT db_path FROM session_databases").all().filter(isDbPathRow);
220
+ }
221
+ };
222
+
223
+ //#endregion
224
+ //#region src/preview/snapshot-database.ts
225
+ const SAFE_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;
226
+ const SAFE_COLUMN_TYPES = new Set([
227
+ "TEXT",
228
+ "INTEGER",
229
+ "REAL",
230
+ "BLOB",
231
+ "JSON"
232
+ ]);
233
+ const SNAPSHOT_META_TABLE = "_dineway_snapshot_meta";
234
+ function quoteIdentifier(name, context) {
235
+ if (!SAFE_IDENTIFIER.test(name)) throw new Error(`Invalid ${context}: ${JSON.stringify(name)}`);
236
+ return `"${name}"`;
237
+ }
238
+ function normalizeColumnType(type) {
239
+ const normalized = type?.toUpperCase() ?? "TEXT";
240
+ return SAFE_COLUMN_TYPES.has(normalized) ? normalized : "TEXT";
241
+ }
242
+ async function dropSessionDatabaseTables(db) {
243
+ const tables = await sql`
244
+ SELECT name FROM sqlite_master
245
+ WHERE type = 'table'
246
+ AND name NOT LIKE 'sqlite_%'
247
+ ORDER BY name
248
+ `.execute(db);
249
+ for (const row of tables.rows) {
250
+ const tableName = quoteIdentifier(row.name, "table name");
251
+ await sql.raw(`DROP TABLE IF EXISTS ${tableName}`).execute(db);
252
+ }
253
+ }
254
+ async function applySnapshotToDatabase(db, snapshot, options) {
255
+ const fetchedAt = options?.fetchedAt ?? Date.now();
256
+ const shouldReset = options?.reset ?? true;
257
+ await db.transaction().execute(async (trx) => {
258
+ if (shouldReset) await dropSessionDatabaseTables(trx);
259
+ await sql.raw(`CREATE TABLE IF NOT EXISTS ${quoteIdentifier(SNAPSHOT_META_TABLE, "meta table")} (key TEXT PRIMARY KEY, value TEXT)`).execute(trx);
260
+ for (const [tableName, rows] of Object.entries(snapshot.tables)) {
261
+ if (tableName === SNAPSHOT_META_TABLE) continue;
262
+ if (rows.length === 0) continue;
263
+ const quotedTableName = quoteIdentifier(tableName, "table name");
264
+ const schemaInfo = snapshot.schema[tableName];
265
+ const firstRow = rows[0];
266
+ if (!firstRow) continue;
267
+ const columns = schemaInfo?.columns ?? Object.keys(firstRow);
268
+ const quotedColumns = columns.map((column) => quoteIdentifier(column, `column name in ${tableName}`));
269
+ const columnDefs = columns.map((column, index) => {
270
+ return `${quotedColumns[index]} ${normalizeColumnType(schemaInfo?.types?.[column])}`;
271
+ }).join(", ");
272
+ await sql.raw(`CREATE TABLE IF NOT EXISTS ${quotedTableName} (${columnDefs})`).execute(trx);
273
+ const columnList = quotedColumns.join(", ");
274
+ for (const row of rows) {
275
+ const values = columns.map((column) => row[column] ?? null);
276
+ await sql`
277
+ INSERT INTO ${sql.raw(quotedTableName)} (${sql.raw(columnList)})
278
+ VALUES (${sql.join(values)})
279
+ `.execute(trx);
280
+ }
281
+ }
282
+ await sql`
283
+ INSERT OR REPLACE INTO ${sql.raw(quoteIdentifier(SNAPSHOT_META_TABLE, "meta table"))} (key, value)
284
+ VALUES
285
+ (${`snapshot_fetched_at`}, ${String(fetchedAt)}),
286
+ (${`snapshot_generated_at`}, ${snapshot.generatedAt})
287
+ `.execute(trx);
288
+ });
289
+ }
290
+ async function getAppliedSnapshotMeta(db) {
291
+ if ((await sql`
292
+ SELECT name FROM sqlite_master
293
+ WHERE type = 'table'
294
+ AND name = ${SNAPSHOT_META_TABLE}
295
+ LIMIT 1
296
+ `.execute(db)).rows.length === 0) return null;
297
+ const rows = await sql`
298
+ SELECT key, value FROM ${sql.raw(quoteIdentifier(SNAPSHOT_META_TABLE, "meta table"))}
299
+ WHERE key IN (${`snapshot_fetched_at`}, ${`snapshot_generated_at`})
300
+ `.execute(db);
301
+ const values = new Map(rows.rows.map((row) => [row.key, row.value]));
302
+ const fetchedAt = values.get("snapshot_fetched_at");
303
+ const generatedAt = values.get("snapshot_generated_at");
304
+ if (!fetchedAt || !generatedAt) return null;
305
+ return {
306
+ fetchedAt: Number(fetchedAt),
307
+ generatedAt
308
+ };
309
+ }
310
+
311
+ //#endregion
312
+ //#region src/preview/toolbar.ts
313
+ const RE_AMP = /&/g;
314
+ const RE_QUOT = /"/g;
315
+ const RE_LT = /</g;
316
+ const RE_GT = />/g;
317
+ function renderPreviewToolbar(config) {
318
+ const { generatedAt, source, error } = config;
319
+ return `
320
+ <!-- Dineway Preview Toolbar -->
321
+ <div id="dineway-preview-toolbar"${generatedAt ? ` data-generated-at="${escapeAttr(generatedAt)}"` : ""}${source ? ` data-source="${escapeAttr(source)}"` : ""}${error ? ` data-error="${escapeAttr(error)}"` : ""}>
322
+ <div class="ec-ptb-inner">
323
+ <span class="ec-ptb-badge">Preview</span>
324
+
325
+ <div class="ec-ptb-divider"></div>
326
+
327
+ <span class="ec-ptb-status" id="ec-ptb-status"></span>
328
+
329
+ <button class="ec-ptb-btn" id="ec-ptb-reload" title="Reload snapshot">
330
+ <svg class="ec-ptb-icon" id="ec-ptb-reload-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg>
331
+ </button>
332
+
333
+ <button class="ec-ptb-btn ec-ptb-close" id="ec-ptb-dismiss" title="Dismiss toolbar">
334
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
335
+ </button>
336
+ </div>
337
+ </div>
338
+
339
+ <style>
340
+ #dineway-preview-toolbar {
341
+ position: fixed;
342
+ bottom: 16px;
343
+ left: 50%;
344
+ transform: translateX(-50%);
345
+ z-index: 999999;
346
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
347
+ font-size: 13px;
348
+ line-height: 1;
349
+ -webkit-font-smoothing: antialiased;
350
+ }
351
+
352
+ #dineway-preview-toolbar.ec-ptb-hidden {
353
+ display: none;
354
+ }
355
+
356
+ .ec-ptb-inner {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: 10px;
360
+ padding: 8px 12px 8px 16px;
361
+ background: #1a1a1a;
362
+ color: #e0e0e0;
363
+ border-radius: 999px;
364
+ box-shadow: 0 4px 24px rgba(0,0,0,0.3), 0 0 0 1px rgba(255,255,255,0.08);
365
+ white-space: nowrap;
366
+ user-select: none;
367
+ }
368
+
369
+ .ec-ptb-badge {
370
+ display: inline-flex;
371
+ align-items: center;
372
+ padding: 3px 8px;
373
+ border-radius: 999px;
374
+ font-size: 11px;
375
+ font-weight: 600;
376
+ letter-spacing: 0.02em;
377
+ text-transform: uppercase;
378
+ background: rgba(139,92,246,0.2);
379
+ color: #a78bfa;
380
+ }
381
+
382
+ .ec-ptb-divider {
383
+ width: 1px;
384
+ height: 16px;
385
+ background: rgba(255,255,255,0.15);
386
+ }
387
+
388
+ .ec-ptb-status {
389
+ display: inline-flex;
390
+ align-items: center;
391
+ gap: 6px;
392
+ font-size: 12px;
393
+ color: #999;
394
+ }
395
+
396
+ .ec-ptb-status--error {
397
+ color: #f87171;
398
+ }
399
+
400
+ .ec-ptb-btn {
401
+ display: inline-flex;
402
+ align-items: center;
403
+ justify-content: center;
404
+ background: none;
405
+ border: none;
406
+ color: #888;
407
+ cursor: pointer;
408
+ padding: 4px;
409
+ border-radius: 4px;
410
+ transition: color 0.15s, background 0.15s;
411
+ font-family: inherit;
412
+ }
413
+
414
+ .ec-ptb-btn:hover {
415
+ color: #fff;
416
+ background: rgba(255,255,255,0.08);
417
+ }
418
+
419
+ .ec-ptb-icon {
420
+ transition: transform 0.3s;
421
+ }
422
+
423
+ .ec-ptb-btn:disabled {
424
+ opacity: 0.4;
425
+ cursor: not-allowed;
426
+ }
427
+
428
+ .ec-ptb-btn:disabled:hover {
429
+ color: #888;
430
+ background: none;
431
+ }
432
+
433
+ @keyframes ec-ptb-spin {
434
+ to { transform: rotate(360deg); }
435
+ }
436
+
437
+ .ec-ptb-spinning .ec-ptb-icon {
438
+ animation: ec-ptb-spin 0.8s linear infinite;
439
+ }
440
+ </style>
441
+
442
+ <script>
443
+ (function() {
444
+ var toolbar = document.getElementById("dineway-preview-toolbar");
445
+ var statusEl = document.getElementById("ec-ptb-status");
446
+ var reloadBtn = document.getElementById("ec-ptb-reload");
447
+ var dismissBtn = document.getElementById("ec-ptb-dismiss");
448
+ if (!toolbar || !statusEl || !reloadBtn || !dismissBtn) return;
449
+
450
+ var generatedAt = toolbar.getAttribute("data-generated-at");
451
+ var source = toolbar.getAttribute("data-source");
452
+ var error = toolbar.getAttribute("data-error");
453
+
454
+ function formatAge(isoString) {
455
+ if (!isoString) return null;
456
+ var then = new Date(isoString).getTime();
457
+ var now = Date.now();
458
+ var seconds = Math.floor((now - then) / 1000);
459
+ if (seconds < 60) return "just now";
460
+ var minutes = Math.floor(seconds / 60);
461
+ if (minutes < 60) return minutes + "m ago";
462
+ var hours = Math.floor(minutes / 60);
463
+ if (hours < 24) return hours + "h ago";
464
+ return Math.floor(hours / 24) + "d ago";
465
+ }
466
+
467
+ function updateStatus() {
468
+ if (error) {
469
+ statusEl.className = "ec-ptb-status ec-ptb-status--error";
470
+ statusEl.textContent = error;
471
+ return;
472
+ }
473
+ var age = formatAge(generatedAt);
474
+ statusEl.className = "ec-ptb-status";
475
+ statusEl.textContent = age ? "Snapshot " + age : "Preview mode";
476
+ }
477
+
478
+ updateStatus();
479
+
480
+ var ageInterval = setInterval(updateStatus, 30000);
481
+
482
+ reloadBtn.addEventListener("click", function() {
483
+ reloadBtn.disabled = true;
484
+ reloadBtn.classList.add("ec-ptb-spinning");
485
+ statusEl.className = "ec-ptb-status";
486
+ statusEl.textContent = "Reloading\u2026";
487
+ location.href = "/_preview/reload";
488
+ });
489
+
490
+ dismissBtn.addEventListener("click", function() {
491
+ toolbar.classList.add("ec-ptb-hidden");
492
+ clearInterval(ageInterval);
493
+ });
494
+ })();
495
+ <\/script>
496
+ `;
497
+ }
498
+ function escapeAttr(str) {
499
+ return str.replace(RE_AMP, "&amp;").replace(RE_QUOT, "&quot;").replace(RE_LT, "&lt;").replace(RE_GT, "&gt;");
500
+ }
501
+
502
+ //#endregion
503
+ //#region src/preview/middleware.ts
504
+ const DEFAULT_TTL_SECONDS = 3600;
505
+ const DEFAULT_COOKIE_NAME = "dineway_preview";
506
+ const DEFAULT_SNAPSHOT_PATH = "/_dineway/api/snapshot";
507
+ const SNAPSHOT_SIGNATURE_HEADER = "X-Preview-Signature";
508
+ function isRecord(value) {
509
+ return value !== null && typeof value === "object";
510
+ }
511
+ function isStringRecord(value) {
512
+ return isRecord(value) && Object.values(value).every((entry) => typeof entry === "string");
513
+ }
514
+ function isSnapshot(value) {
515
+ if (!isRecord(value)) return false;
516
+ if (typeof value.generatedAt !== "string") return false;
517
+ if (!isRecord(value.tables) || !isRecord(value.schema)) return false;
518
+ return Object.values(value.tables).every((rows) => {
519
+ return Array.isArray(rows) && rows.every((row) => isRecord(row));
520
+ }) && Object.values(value.schema).every((schemaInfo) => {
521
+ if (!isRecord(schemaInfo) || !Array.isArray(schemaInfo.columns)) return false;
522
+ if (!schemaInfo.columns.every((column) => typeof column === "string")) return false;
523
+ return schemaInfo.types === void 0 || isStringRecord(schemaInfo.types);
524
+ });
525
+ }
526
+ function parseSnapshot(value) {
527
+ if (!isSnapshot(value)) throw new Error("Snapshot response has invalid shape");
528
+ return value;
529
+ }
530
+ function parseStoredPreviewParams(value) {
531
+ if (!value) return null;
532
+ const parts = decodeURIComponent(value).split("\n");
533
+ if (parts.length !== 3) return null;
534
+ return {
535
+ source: parts[0] ?? "",
536
+ exp: parts[1] ?? "",
537
+ sig: parts[2] ?? ""
538
+ };
539
+ }
540
+ function buildParamsRedirect(url, params) {
541
+ if (!params || !params.source || !params.exp || !params.sig) return null;
542
+ const reloadUrl = new URL(url.pathname + url.search, url.origin);
543
+ reloadUrl.searchParams.set("source", params.source);
544
+ reloadUrl.searchParams.set("exp", params.exp);
545
+ reloadUrl.searchParams.set("sig", params.sig);
546
+ return reloadUrl.pathname + reloadUrl.search;
547
+ }
548
+ async function injectPreviewToolbar(response, config) {
549
+ if (!response.headers.get("content-type")?.includes("text/html")) return response;
550
+ const html = await response.text();
551
+ if (!html.includes("</body>")) return new Response(html, response);
552
+ const toolbarHtml = renderPreviewToolbar(config);
553
+ const injected = html.replace("</body>", `${toolbarHtml}</body>`);
554
+ return new Response(injected, {
555
+ status: response.status,
556
+ headers: response.headers
557
+ });
558
+ }
559
+ async function populateSessionFromSnapshot(session, options) {
560
+ const snapshotUrl = new URL(options.snapshotPath, options.sourceUrl);
561
+ const response = await options.fetchImpl(snapshotUrl, {
562
+ headers: { [SNAPSHOT_SIGNATURE_HEADER]: options.signature },
563
+ signal: AbortSignal.timeout(1e4)
564
+ });
565
+ if (!response.ok) {
566
+ const body = await response.text().catch(() => "");
567
+ throw new Error(`Snapshot fetch failed: ${response.status} ${response.statusText}${body ? ` — ${body}` : ""}`);
568
+ }
569
+ const snapshot = parseSnapshot(await response.json());
570
+ await applySnapshotToDatabase(session.db, snapshot, { reset: true });
571
+ }
572
+ function createFilePreviewMiddleware(config) {
573
+ const ttlSeconds = config.ttlSeconds ?? DEFAULT_TTL_SECONDS;
574
+ const cookieName = config.cookieName ?? DEFAULT_COOKIE_NAME;
575
+ const paramsCookieName = `${cookieName}_params`;
576
+ const snapshotPath = config.snapshotPath ?? DEFAULT_SNAPSHOT_PATH;
577
+ const sessionFactory = config.sessionFactory ?? new FileSessionDatabaseFactory({
578
+ rootDir: config.rootDir ?? (() => {
579
+ throw new Error("createFilePreviewMiddleware requires either rootDir or sessionFactory");
580
+ })(),
581
+ maxDiskBytes: config.maxSessionDiskBytes
582
+ });
583
+ const fetchImpl = config.fetch ?? globalThis.fetch;
584
+ return async function filePreviewMiddleware(context, next) {
585
+ const { url, cookies } = context;
586
+ if (url.pathname === "/_preview/reload") {
587
+ cookies.delete(cookieName, { path: "/" });
588
+ const redirectTo = buildParamsRedirect(url, parseStoredPreviewParams(cookies.get(paramsCookieName)?.value)) ?? "/";
589
+ return context.redirect(redirectTo);
590
+ }
591
+ if (isBlockedInPreview(url.pathname)) return Response.json({ error: {
592
+ code: "PREVIEW_MODE",
593
+ message: "Not available in preview mode"
594
+ } }, { status: 403 });
595
+ let sessionToken = cookies.get(cookieName)?.value;
596
+ let sourceUrl = null;
597
+ let signature = null;
598
+ let session = sessionToken ? await sessionFactory.open({ id: sessionToken }) : null;
599
+ if (sessionToken && !session) {
600
+ cookies.delete(cookieName, { path: "/" });
601
+ const redirectTo = buildParamsRedirect(url, parseStoredPreviewParams(cookies.get(paramsCookieName)?.value));
602
+ if (redirectTo) return context.redirect(redirectTo);
603
+ return new Response("Preview session expired", { status: 410 });
604
+ }
605
+ if (!sessionToken) {
606
+ const source = url.searchParams.get("source");
607
+ const exp = url.searchParams.get("exp");
608
+ const sig = url.searchParams.get("sig");
609
+ if (!source || !exp || !sig) return new Response("Missing preview parameters", { status: 400 });
610
+ const expNum = Number.parseInt(exp, 10);
611
+ if (!Number.isFinite(expNum) || expNum < Date.now() / 1e3) return new Response("Preview link expired", { status: 403 });
612
+ if (!await verifyPreviewSignature(source, expNum, sig, config.secret)) return new Response("Invalid preview signature", { status: 403 });
613
+ sessionToken = ulid();
614
+ sourceUrl = source;
615
+ signature = buildPreviewSignatureHeader({
616
+ source,
617
+ exp: expNum,
618
+ sig
619
+ });
620
+ session = await sessionFactory.openOrCreate({
621
+ id: sessionToken,
622
+ ttlMs: ttlSeconds * 1e3
623
+ });
624
+ }
625
+ if (!sessionToken || !session) return new Response("Preview session unavailable", { status: 500 });
626
+ let snapshotGeneratedAt;
627
+ let snapshotError;
628
+ if (sourceUrl && signature) try {
629
+ await populateSessionFromSnapshot(session, {
630
+ sourceUrl,
631
+ snapshotPath,
632
+ signature,
633
+ fetchImpl
634
+ });
635
+ snapshotGeneratedAt = (await getAppliedSnapshotMeta(session.db))?.generatedAt;
636
+ cookies.set(cookieName, sessionToken, {
637
+ httpOnly: true,
638
+ sameSite: "lax",
639
+ path: "/",
640
+ maxAge: ttlSeconds
641
+ });
642
+ cookies.set(paramsCookieName, `${sourceUrl}\n${url.searchParams.get("exp")}\n${url.searchParams.get("sig")}`, {
643
+ sameSite: "lax",
644
+ path: "/",
645
+ maxAge: ttlSeconds
646
+ });
647
+ const cleanUrl = new URL(url);
648
+ cleanUrl.searchParams.delete("source");
649
+ cleanUrl.searchParams.delete("exp");
650
+ cleanUrl.searchParams.delete("sig");
651
+ await session.close();
652
+ return context.redirect(cleanUrl.pathname + cleanUrl.search);
653
+ } catch (error) {
654
+ snapshotError = error instanceof Error ? error.message : String(error);
655
+ await session.close();
656
+ await sessionFactory.destroy(sessionToken);
657
+ return new Response(renderPreviewLoadingPage(), {
658
+ status: 503,
659
+ headers: {
660
+ "Content-Type": "text/html",
661
+ "Retry-After": "2"
662
+ }
663
+ });
664
+ }
665
+ const storedParams = parseStoredPreviewParams(cookies.get(paramsCookieName)?.value);
666
+ snapshotGeneratedAt = (await getAppliedSnapshotMeta(session.db))?.generatedAt;
667
+ try {
668
+ return await runWithContext({
669
+ editMode: false,
670
+ db: session.db
671
+ }, async () => {
672
+ return injectPreviewToolbar(await next(), {
673
+ generatedAt: snapshotGeneratedAt,
674
+ source: storedParams?.source,
675
+ error: snapshotError
676
+ });
677
+ });
678
+ } finally {
679
+ await session.close();
680
+ }
681
+ };
682
+ }
683
+
684
+ //#endregion
685
+ //#region src/preview/urls.ts
686
+ /**
687
+ * Preview URL generation
688
+ *
689
+ * Creates preview URLs that include a signed token for accessing draft content.
690
+ */
691
+ const REPEATED_SLASHES_PATTERN = /\/{2,}/g;
692
+ /**
693
+ * Generate a preview URL for content
694
+ *
695
+ * The URL includes a `_preview` query parameter with a signed token.
696
+ *
697
+ * @example
698
+ * ```ts
699
+ * const url = await getPreviewUrl({
700
+ * collection: "posts",
701
+ * id: "hello-world",
702
+ * secret: process.env.PREVIEW_SECRET!,
703
+ * });
704
+ * // Returns: /posts/hello-world?_preview=eyJj...
705
+ *
706
+ * // With base URL:
707
+ * const fullUrl = await getPreviewUrl({
708
+ * collection: "posts",
709
+ * id: "hello-world",
710
+ * secret: process.env.PREVIEW_SECRET!,
711
+ * baseUrl: "https://example.com",
712
+ * });
713
+ * // Returns: https://example.com/posts/hello-world?_preview=eyJj...
714
+ *
715
+ * // Custom path pattern:
716
+ * const customUrl = await getPreviewUrl({
717
+ * collection: "posts",
718
+ * id: "hello-world",
719
+ * secret: process.env.PREVIEW_SECRET!,
720
+ * pathPattern: "/blog/{id}",
721
+ * });
722
+ * // Returns: /blog/hello-world?_preview=eyJj...
723
+ * ```
724
+ */
725
+ async function getPreviewUrl(options) {
726
+ const { collection, id, secret, expiresIn = "1h", baseUrl, pathPattern = "/{collection}/{id}", locale = "" } = options;
727
+ const token = await generatePreviewToken({
728
+ contentId: `${collection}:${id}`,
729
+ expiresIn,
730
+ secret
731
+ });
732
+ let path = pathPattern.replace("{collection}", collection).replace("{id}", id).replace("{locale}", locale);
733
+ path = path.replace(REPEATED_SLASHES_PATTERN, "/");
734
+ if (path.length > 1 && path.endsWith("/")) path = path.slice(0, -1);
735
+ const url = new URL(path, baseUrl || "http://placeholder");
736
+ url.searchParams.set("_preview", token);
737
+ if (!baseUrl) return `${url.pathname}${url.search}`;
738
+ return url.toString();
739
+ }
740
+ /**
741
+ * Build a preview URL from a token (when you already have the token)
742
+ *
743
+ * @example
744
+ * ```ts
745
+ * const url = buildPreviewUrl({
746
+ * path: "/posts/hello-world",
747
+ * token: existingToken,
748
+ * });
749
+ * ```
750
+ */
751
+ function buildPreviewUrl(options) {
752
+ const { path, token, baseUrl } = options;
753
+ const url = new URL(path, baseUrl || "http://placeholder");
754
+ url.searchParams.set("_preview", token);
755
+ if (!baseUrl) return `${url.pathname}${url.search}`;
756
+ return url.toString();
757
+ }
758
+
759
+ //#endregion
760
+ //#region src/preview/helpers.ts
761
+ /**
762
+ * Preview helpers for Astro pages
763
+ */
764
+ /**
765
+ * Check if a request is a preview request
766
+ *
767
+ * @example
768
+ * ```ts
769
+ * const isPreview = isPreviewRequest(Astro.url);
770
+ * ```
771
+ */
772
+ function isPreviewRequest(url) {
773
+ return url.searchParams.has("_preview");
774
+ }
775
+ /**
776
+ * Get the preview token from a URL
777
+ *
778
+ * @example
779
+ * ```ts
780
+ * const token = getPreviewToken(Astro.url);
781
+ * ```
782
+ */
783
+ function getPreviewToken(url) {
784
+ return url.searchParams.get("_preview");
785
+ }
786
+
787
+ //#endregion
788
+ export { createFilePreviewMiddleware as a, dropSessionDatabaseTables as c, SessionDatabaseLimitError as d, isBlockedInPreview as f, getPreviewUrl as i, getAppliedSnapshotMeta as l, isPreviewRequest as n, renderPreviewToolbar as o, renderPreviewLoadingPage as p, buildPreviewUrl as r, applySnapshotToDatabase as s, getPreviewToken as t, FileSessionDatabaseFactory as u };