dineway 0.1.9 → 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 (689) hide show
  1. package/README.md +63 -17
  2. package/dist/activity-events-BsMaXdJa.mjs +540 -0
  3. package/dist/allowed-origins-DG86sH8U.mjs +68 -0
  4. package/dist/api/route-utils.d.mts +41 -0
  5. package/dist/api/route-utils.mjs +26 -0
  6. package/dist/api/schemas/index.d.mts +3 -0
  7. package/dist/api/schemas/index.mjs +6 -0
  8. package/dist/api/schemas/setup.d.mts +42 -0
  9. package/dist/api/schemas/setup.mjs +39 -0
  10. package/dist/api-Cmy8Rjk5.mjs +2704 -0
  11. package/dist/api-tokens-Bu3ez1MO.mjs +153 -0
  12. package/dist/api-tokens-DzloJxuh.mjs +3 -0
  13. package/dist/{apply-iVSqz2qs.mjs → apply-Co5imxxT.mjs} +15 -689
  14. package/dist/astro/index.d.mts +10 -6
  15. package/dist/astro/index.mjs +86 -11
  16. package/dist/astro/middleware/auth.d.mts +10 -7
  17. package/dist/astro/middleware/auth.mjs +19 -104
  18. package/dist/astro/middleware/redirect.mjs +24 -14
  19. package/dist/astro/middleware/request-context.mjs +9 -6
  20. package/dist/astro/middleware/setup.mjs +1 -1
  21. package/dist/astro/middleware.mjs +86 -145
  22. package/dist/astro/routes/PluginRegistry.d.mts +14 -0
  23. package/dist/astro/routes/PluginRegistry.mjs +24 -0
  24. package/dist/astro/routes/api/admin/allowed-domains/_domain_.d.mts +14 -0
  25. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +65 -0
  26. package/dist/astro/routes/api/admin/allowed-domains/index.d.mts +14 -0
  27. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +65 -0
  28. package/dist/astro/routes/api/admin/api-tokens/_id_.d.mts +10 -0
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +33 -0
  30. package/dist/astro/routes/api/admin/api-tokens/index.d.mts +16 -0
  31. package/dist/astro/routes/api/admin/api-tokens/index.mjs +59 -0
  32. package/dist/astro/routes/api/admin/briefing.d.mts +7 -0
  33. package/dist/astro/routes/api/admin/briefing.mjs +71 -0
  34. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts +9 -0
  35. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +74 -0
  36. package/dist/astro/routes/api/admin/bylines/index.d.mts +8 -0
  37. package/dist/astro/routes/api/admin/bylines/index.mjs +61 -0
  38. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts +7 -0
  39. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +80 -0
  40. package/dist/astro/routes/api/admin/comments/_id_.d.mts +14 -0
  41. package/dist/astro/routes/api/admin/comments/_id_.mjs +46 -0
  42. package/dist/astro/routes/api/admin/comments/bulk.d.mts +7 -0
  43. package/dist/astro/routes/api/admin/comments/bulk.mjs +36 -0
  44. package/dist/astro/routes/api/admin/comments/counts.d.mts +7 -0
  45. package/dist/astro/routes/api/admin/comments/counts.mjs +24 -0
  46. package/dist/astro/routes/api/admin/comments/index.d.mts +10 -0
  47. package/dist/astro/routes/api/admin/comments/index.mjs +40 -0
  48. package/dist/astro/routes/api/admin/context/_id_/history.d.mts +7 -0
  49. package/dist/astro/routes/api/admin/context/_id_/history.mjs +45 -0
  50. package/dist/astro/routes/api/admin/context/_id_/index.d.mts +7 -0
  51. package/dist/astro/routes/api/admin/context/_id_/index.mjs +45 -0
  52. package/dist/astro/routes/api/admin/context/_id_/review.d.mts +7 -0
  53. package/dist/astro/routes/api/admin/context/_id_/review.mjs +60 -0
  54. package/dist/astro/routes/api/admin/context/_id_/supersede.d.mts +7 -0
  55. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +63 -0
  56. package/dist/astro/routes/api/admin/context/diff.d.mts +7 -0
  57. package/dist/astro/routes/api/admin/context/diff.mjs +49 -0
  58. package/dist/astro/routes/api/admin/context/index.d.mts +8 -0
  59. package/dist/astro/routes/api/admin/context/index.mjs +71 -0
  60. package/dist/astro/routes/api/admin/context/stale.d.mts +7 -0
  61. package/dist/astro/routes/api/admin/context/stale.mjs +49 -0
  62. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.d.mts +7 -0
  63. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +51 -0
  64. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.d.mts +7 -0
  65. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +67 -0
  66. package/dist/astro/routes/api/admin/hitl-requests/index.d.mts +7 -0
  67. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +55 -0
  68. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts +7 -0
  69. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +98 -0
  70. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts +7 -0
  71. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +33 -0
  72. package/dist/astro/routes/api/admin/oauth-clients/_id_.d.mts +18 -0
  73. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +79 -0
  74. package/dist/astro/routes/api/admin/oauth-clients/index.d.mts +14 -0
  75. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +58 -0
  76. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts +7 -0
  77. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +89 -0
  78. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts +7 -0
  79. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +89 -0
  80. package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts +7 -0
  81. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +54 -0
  82. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts +7 -0
  83. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +98 -0
  84. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts +7 -0
  85. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +131 -0
  86. package/dist/astro/routes/api/admin/plugins/index.d.mts +7 -0
  87. package/dist/astro/routes/api/admin/plugins/index.mjs +52 -0
  88. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts +7 -0
  89. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +36 -0
  90. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.d.mts +7 -0
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +54 -0
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts +7 -0
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +128 -0
  94. package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts +7 -0
  95. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +61 -0
  96. package/dist/astro/routes/api/admin/plugins/updates.d.mts +7 -0
  97. package/dist/astro/routes/api/admin/plugins/updates.mjs +52 -0
  98. package/dist/astro/routes/api/admin/review-requests/_id_/index.d.mts +7 -0
  99. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +26 -0
  100. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.d.mts +7 -0
  101. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +97 -0
  102. package/dist/astro/routes/api/admin/review-requests/index.d.mts +7 -0
  103. package/dist/astro/routes/api/admin/review-requests/index.mjs +31 -0
  104. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.d.mts +7 -0
  105. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +54 -0
  106. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts +7 -0
  107. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +36 -0
  108. package/dist/astro/routes/api/admin/themes/marketplace/index.d.mts +7 -0
  109. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +70 -0
  110. package/dist/astro/routes/api/admin/users/_id_/disable.d.mts +7 -0
  111. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +38 -0
  112. package/dist/astro/routes/api/admin/users/_id_/enable.d.mts +7 -0
  113. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +29 -0
  114. package/dist/astro/routes/api/admin/users/_id_/index.d.mts +8 -0
  115. package/dist/astro/routes/api/admin/users/_id_/index.mjs +104 -0
  116. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts +7 -0
  117. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +43 -0
  118. package/dist/astro/routes/api/admin/users/index.d.mts +7 -0
  119. package/dist/astro/routes/api/admin/users/index.mjs +54 -0
  120. package/dist/astro/routes/api/auth/dev-bypass.d.mts +8 -0
  121. package/dist/astro/routes/api/auth/dev-bypass.mjs +81 -0
  122. package/dist/astro/routes/api/auth/invite/accept.d.mts +7 -0
  123. package/dist/astro/routes/api/auth/invite/accept.mjs +31 -0
  124. package/dist/astro/routes/api/auth/invite/complete.d.mts +7 -0
  125. package/dist/astro/routes/api/auth/invite/complete.mjs +54 -0
  126. package/dist/astro/routes/api/auth/invite/index.d.mts +7 -0
  127. package/dist/astro/routes/api/auth/invite/index.mjs +51 -0
  128. package/dist/astro/routes/api/auth/invite/register-options.d.mts +7 -0
  129. package/dist/astro/routes/api/auth/invite/register-options.mjs +44 -0
  130. package/dist/astro/routes/api/auth/logout.d.mts +7 -0
  131. package/dist/astro/routes/api/auth/logout.mjs +24 -0
  132. package/dist/astro/routes/api/auth/magic-link/send.d.mts +7 -0
  133. package/dist/astro/routes/api/auth/magic-link/send.mjs +48 -0
  134. package/dist/astro/routes/api/auth/magic-link/verify.d.mts +7 -0
  135. package/dist/astro/routes/api/auth/magic-link/verify.mjs +32 -0
  136. package/dist/astro/routes/api/auth/me.d.mts +13 -0
  137. package/dist/astro/routes/api/auth/me.mjs +41 -0
  138. package/dist/astro/routes/api/auth/mode.d.mts +7 -0
  139. package/dist/astro/routes/api/auth/mode.mjs +28 -0
  140. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts +7 -0
  141. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +114 -0
  142. package/dist/astro/routes/api/auth/oauth/_provider_.d.mts +7 -0
  143. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +58 -0
  144. package/dist/astro/routes/api/auth/passkey/_id_.d.mts +14 -0
  145. package/dist/astro/routes/api/auth/passkey/_id_.mjs +62 -0
  146. package/dist/astro/routes/api/auth/passkey/index.d.mts +7 -0
  147. package/dist/astro/routes/api/auth/passkey/index.mjs +25 -0
  148. package/dist/astro/routes/api/auth/passkey/options.d.mts +7 -0
  149. package/dist/astro/routes/api/auth/passkey/options.mjs +46 -0
  150. package/dist/astro/routes/api/auth/passkey/register/options.d.mts +7 -0
  151. package/dist/astro/routes/api/auth/passkey/register/options.mjs +44 -0
  152. package/dist/astro/routes/api/auth/passkey/register/verify.d.mts +7 -0
  153. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +59 -0
  154. package/dist/astro/routes/api/auth/passkey/verify.d.mts +7 -0
  155. package/dist/astro/routes/api/auth/passkey/verify.mjs +47 -0
  156. package/dist/astro/routes/api/auth/signup/complete.d.mts +7 -0
  157. package/dist/astro/routes/api/auth/signup/complete.mjs +55 -0
  158. package/dist/astro/routes/api/auth/signup/request.d.mts +7 -0
  159. package/dist/astro/routes/api/auth/signup/request.mjs +44 -0
  160. package/dist/astro/routes/api/auth/signup/verify.d.mts +7 -0
  161. package/dist/astro/routes/api/auth/signup/verify.mjs +32 -0
  162. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +14 -0
  163. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +193 -0
  164. package/dist/astro/routes/api/content/_collection_/_id_/compare.d.mts +7 -0
  165. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +17 -0
  166. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts +7 -0
  167. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +36 -0
  168. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.d.mts +7 -0
  169. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +39 -0
  170. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts +7 -0
  171. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +31 -0
  172. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts +7 -0
  173. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +78 -0
  174. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +7 -0
  175. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +92 -0
  176. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts +7 -0
  177. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +36 -0
  178. package/dist/astro/routes/api/content/_collection_/_id_/revisions.d.mts +7 -0
  179. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +19 -0
  180. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts +8 -0
  181. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +75 -0
  182. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts +14 -0
  183. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +85 -0
  184. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts +7 -0
  185. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +40 -0
  186. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts +7 -0
  187. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +36 -0
  188. package/dist/astro/routes/api/content/_collection_/_id_.d.mts +9 -0
  189. package/dist/astro/routes/api/content/_collection_/_id_.mjs +114 -0
  190. package/dist/astro/routes/api/content/_collection_/index.d.mts +8 -0
  191. package/dist/astro/routes/api/content/_collection_/index.mjs +74 -0
  192. package/dist/astro/routes/api/content/_collection_/trash.d.mts +7 -0
  193. package/dist/astro/routes/api/content/_collection_/trash.mjs +23 -0
  194. package/dist/astro/routes/api/dashboard.d.mts +7 -0
  195. package/dist/astro/routes/api/dashboard.mjs +26 -0
  196. package/dist/astro/routes/api/dev/emails.d.mts +8 -0
  197. package/dist/astro/routes/api/dev/emails.mjs +17 -0
  198. package/dist/astro/routes/api/health.d.mts +7 -0
  199. package/dist/astro/routes/api/health.mjs +34 -0
  200. package/dist/astro/routes/api/import/probe.d.mts +17 -0
  201. package/dist/astro/routes/api/import/probe.mjs +33 -0
  202. package/dist/astro/routes/api/import/wordpress/analyze.d.mts +87 -0
  203. package/dist/astro/routes/api/import/wordpress/analyze.mjs +305 -0
  204. package/dist/astro/routes/api/import/wordpress/execute.d.mts +37 -0
  205. package/dist/astro/routes/api/import/wordpress/execute.mjs +197 -0
  206. package/dist/astro/routes/api/import/wordpress/media.d.mts +35 -0
  207. package/dist/astro/routes/api/import/wordpress/media.mjs +222 -0
  208. package/dist/astro/routes/api/import/wordpress/prepare.d.mts +19 -0
  209. package/dist/astro/routes/api/import/wordpress/prepare.mjs +155 -0
  210. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +21 -0
  211. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +289 -0
  212. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +15 -0
  213. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +69 -0
  214. package/dist/astro/routes/api/import/wordpress-plugin/callback.d.mts +7 -0
  215. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +28 -0
  216. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +19 -0
  217. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +268 -0
  218. package/dist/astro/routes/api/manifest.d.mts +7 -0
  219. package/dist/astro/routes/api/manifest.mjs +50 -0
  220. package/dist/astro/routes/api/mcp.d.mts +15 -0
  221. package/dist/astro/routes/api/mcp.mjs +2700 -0
  222. package/dist/astro/routes/api/media/_id_/confirm.d.mts +10 -0
  223. package/dist/astro/routes/api/media/_id_/confirm.mjs +59 -0
  224. package/dist/astro/routes/api/media/_id_.d.mts +22 -0
  225. package/dist/astro/routes/api/media/_id_.mjs +81 -0
  226. package/dist/astro/routes/api/media/file/_...key_.d.mts +7 -0
  227. package/dist/astro/routes/api/media/file/_...key_.mjs +49 -0
  228. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.d.mts +14 -0
  229. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +49 -0
  230. package/dist/astro/routes/api/media/providers/_providerId_/index.d.mts +14 -0
  231. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +72 -0
  232. package/dist/astro/routes/api/media/providers/index.d.mts +10 -0
  233. package/dist/astro/routes/api/media/providers/index.mjs +18 -0
  234. package/dist/astro/routes/api/media/upload-url.d.mts +10 -0
  235. package/dist/astro/routes/api/media/upload-url.mjs +82 -0
  236. package/dist/astro/routes/api/media.d.mts +16 -0
  237. package/dist/astro/routes/api/media.mjs +137 -0
  238. package/dist/astro/routes/api/menus/_name_/items.d.mts +9 -0
  239. package/{src/astro/routes/api/menus/[name]/items.ts → dist/astro/routes/api/menus/_name_/items.mjs} +63 -105
  240. package/dist/astro/routes/api/menus/_name_/reorder.d.mts +7 -0
  241. package/dist/astro/routes/api/menus/_name_/reorder.mjs +77 -0
  242. package/dist/astro/routes/api/menus/_name_.d.mts +9 -0
  243. package/dist/astro/routes/api/menus/_name_.mjs +123 -0
  244. package/dist/astro/routes/api/menus/index.d.mts +8 -0
  245. package/dist/astro/routes/api/menus/index.mjs +84 -0
  246. package/dist/astro/routes/api/oauth/authorize.d.mts +8 -0
  247. package/dist/astro/routes/api/oauth/authorize.mjs +265 -0
  248. package/dist/astro/routes/api/oauth/device/authorize.d.mts +7 -0
  249. package/dist/astro/routes/api/oauth/device/authorize.mjs +30 -0
  250. package/dist/astro/routes/api/oauth/device/code.d.mts +7 -0
  251. package/dist/astro/routes/api/oauth/device/code.mjs +34 -0
  252. package/dist/astro/routes/api/oauth/device/token.d.mts +7 -0
  253. package/dist/astro/routes/api/oauth/device/token.mjs +45 -0
  254. package/dist/astro/routes/api/oauth/register.d.mts +8 -0
  255. package/dist/astro/routes/api/oauth/register.mjs +115 -0
  256. package/dist/astro/routes/api/oauth/token/refresh.d.mts +7 -0
  257. package/dist/astro/routes/api/oauth/token/refresh.mjs +28 -0
  258. package/dist/astro/routes/api/oauth/token/revoke.d.mts +7 -0
  259. package/dist/astro/routes/api/oauth/token/revoke.mjs +25 -0
  260. package/dist/astro/routes/api/oauth/token.d.mts +8 -0
  261. package/dist/astro/routes/api/oauth/token.mjs +138 -0
  262. package/dist/astro/routes/api/openapi.json.d.mts +7 -0
  263. package/dist/astro/routes/api/openapi.json.mjs +2638 -0
  264. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +11 -0
  265. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +77 -0
  266. package/dist/astro/routes/api/redirects/404s/index.d.mts +9 -0
  267. package/dist/astro/routes/api/redirects/404s/index.mjs +62 -0
  268. package/dist/astro/routes/api/redirects/404s/summary.d.mts +7 -0
  269. package/dist/astro/routes/api/redirects/404s/summary.mjs +34 -0
  270. package/dist/astro/routes/api/redirects/_id_.d.mts +9 -0
  271. package/dist/astro/routes/api/redirects/_id_.mjs +152 -0
  272. package/dist/astro/routes/api/redirects/index.d.mts +8 -0
  273. package/dist/astro/routes/api/redirects/index.mjs +97 -0
  274. package/dist/astro/routes/api/revisions/_revisionId_/index.d.mts +7 -0
  275. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +16 -0
  276. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts +7 -0
  277. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +23 -0
  278. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts +9 -0
  279. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +98 -0
  280. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts +8 -0
  281. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +80 -0
  282. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.d.mts +7 -0
  283. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +67 -0
  284. package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts +9 -0
  285. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +97 -0
  286. package/dist/astro/routes/api/schema/collections/index.d.mts +8 -0
  287. package/dist/astro/routes/api/schema/collections/index.mjs +77 -0
  288. package/dist/astro/routes/api/schema/index.d.mts +7 -0
  289. package/dist/astro/routes/api/schema/index.mjs +79 -0
  290. package/dist/astro/routes/api/schema/orphans/_slug_.d.mts +7 -0
  291. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +58 -0
  292. package/dist/astro/routes/api/schema/orphans/index.d.mts +7 -0
  293. package/dist/astro/routes/api/schema/orphans/index.mjs +53 -0
  294. package/dist/astro/routes/api/search/enable.d.mts +15 -0
  295. package/dist/astro/routes/api/search/enable.mjs +55 -0
  296. package/dist/astro/routes/api/search/index.d.mts +16 -0
  297. package/dist/astro/routes/api/search/index.mjs +52 -0
  298. package/dist/astro/routes/api/search/rebuild.d.mts +13 -0
  299. package/dist/astro/routes/api/search/rebuild.mjs +48 -0
  300. package/dist/astro/routes/api/search/stats.d.mts +10 -0
  301. package/dist/astro/routes/api/search/stats.mjs +28 -0
  302. package/dist/astro/routes/api/search/suggest.d.mts +15 -0
  303. package/dist/astro/routes/api/search/suggest.mjs +43 -0
  304. package/dist/astro/routes/api/sections/_slug_.d.mts +9 -0
  305. package/dist/astro/routes/api/sections/_slug_.mjs +156 -0
  306. package/dist/astro/routes/api/sections/index.d.mts +8 -0
  307. package/dist/astro/routes/api/sections/index.mjs +99 -0
  308. package/dist/astro/routes/api/settings/email.d.mts +17 -0
  309. package/dist/astro/routes/api/settings/email.mjs +102 -0
  310. package/dist/astro/routes/api/settings.d.mts +20 -0
  311. package/dist/astro/routes/api/settings.mjs +101 -0
  312. package/dist/astro/routes/api/setup/admin-verify.d.mts +7 -0
  313. package/dist/astro/routes/api/setup/admin-verify.mjs +67 -0
  314. package/dist/astro/routes/api/setup/admin.d.mts +7 -0
  315. package/dist/astro/routes/api/setup/admin.mjs +68 -0
  316. package/dist/astro/routes/api/setup/dev-bypass.d.mts +8 -0
  317. package/dist/astro/routes/api/setup/dev-bypass.mjs +137 -0
  318. package/dist/astro/routes/api/setup/dev-reset.d.mts +7 -0
  319. package/dist/astro/routes/api/setup/dev-reset.mjs +22 -0
  320. package/dist/astro/routes/api/setup/index.d.mts +7 -0
  321. package/dist/astro/routes/api/setup/index.mjs +93 -0
  322. package/dist/astro/routes/api/setup/status.d.mts +7 -0
  323. package/dist/astro/routes/api/setup/status.mjs +57 -0
  324. package/dist/astro/routes/api/snapshot.d.mts +7 -0
  325. package/dist/astro/routes/api/snapshot.mjs +227 -0
  326. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts +18 -0
  327. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +189 -0
  328. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts +14 -0
  329. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +113 -0
  330. package/dist/astro/routes/api/taxonomies/index.d.mts +14 -0
  331. package/dist/astro/routes/api/taxonomies/index.mjs +103 -0
  332. package/dist/astro/routes/api/themes/preview.d.mts +7 -0
  333. package/dist/astro/routes/api/themes/preview.mjs +47 -0
  334. package/dist/astro/routes/api/typegen.d.mts +17 -0
  335. package/dist/astro/routes/api/typegen.mjs +75 -0
  336. package/dist/astro/routes/api/well-known/auth.d.mts +7 -0
  337. package/dist/astro/routes/api/well-known/auth.mjs +42 -0
  338. package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts +7 -0
  339. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +33 -0
  340. package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts +7 -0
  341. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +21 -0
  342. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts +7 -0
  343. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +88 -0
  344. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts +8 -0
  345. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +158 -0
  346. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts +7 -0
  347. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +104 -0
  348. package/dist/astro/routes/api/widget-areas/_name_.d.mts +8 -0
  349. package/dist/astro/routes/api/widget-areas/_name_.mjs +99 -0
  350. package/dist/astro/routes/api/widget-areas/index.d.mts +8 -0
  351. package/dist/astro/routes/api/widget-areas/index.mjs +108 -0
  352. package/dist/astro/routes/api/widget-components.d.mts +7 -0
  353. package/dist/astro/routes/api/widget-components.mjs +15 -0
  354. package/dist/astro/routes/robots.txt.d.mts +7 -0
  355. package/dist/astro/routes/robots.txt.mjs +60 -0
  356. package/dist/astro/routes/sitemap-_collection_.xml.d.mts +7 -0
  357. package/dist/astro/routes/sitemap-_collection_.xml.mjs +70 -0
  358. package/dist/astro/routes/sitemap.xml.d.mts +7 -0
  359. package/dist/astro/routes/sitemap.xml.mjs +63 -0
  360. package/dist/astro/types.d.mts +41 -9
  361. package/dist/auth/providers/github-admin.d.mts +9 -0
  362. package/dist/auth/providers/github-admin.mjs +27 -0
  363. package/dist/auth/providers/github.d.mts +12 -0
  364. package/dist/auth/providers/github.mjs +17 -0
  365. package/dist/auth/providers/google-admin.d.mts +9 -0
  366. package/dist/auth/providers/google-admin.mjs +43 -0
  367. package/dist/auth/providers/google.d.mts +12 -0
  368. package/dist/auth/providers/google.mjs +17 -0
  369. package/dist/auth-control-guard-DKUe_1oa.mjs +13 -0
  370. package/dist/authorize-BBj8C6Y8.mjs +36 -0
  371. package/dist/briefing-BrXCuMEE.mjs +1294 -0
  372. package/dist/briefing-ClWw4mc9.mjs +29 -0
  373. package/dist/{byline-OhH2dlRu.mjs → byline-naZxOPSa.mjs} +3 -3
  374. package/dist/{bylines-BGpD9_hy.mjs → bylines-BcOPh6Ej.mjs} +20 -53
  375. package/dist/bylines-HfUKum_j.d.mts +2023 -0
  376. package/dist/{cache-BdSY-gQN.mjs → cache-DEbQ13c9.mjs} +21 -11
  377. package/dist/challenge-store-DHMgBGOq.mjs +48 -0
  378. package/dist/cli/index.mjs +142 -22
  379. package/dist/client/external-auth-headers.d.mts +1 -1
  380. package/dist/client/index.d.mts +1 -1
  381. package/dist/client/index.mjs +3 -3
  382. package/dist/comment-DFO-gWDH.mjs +246 -0
  383. package/dist/comments-Gy3zLBaP.mjs +186 -0
  384. package/dist/components-DND2rd3D.mjs +107 -0
  385. package/dist/{content-DWi4d0rT.mjs → content-CyLkb-qH.mjs} +33 -44
  386. package/dist/context-bE5Kyvcj.mjs +184 -0
  387. package/dist/context-nxMyOe3p.mjs +849 -0
  388. package/dist/context-route-helpers-D-6uCQ0S.mjs +45 -0
  389. package/dist/context-types-C-LwdAxx.mjs +23 -0
  390. package/dist/cron-DGzVTtJp.mjs +263 -0
  391. package/dist/dashboard-DqnYU8EU.mjs +120 -0
  392. package/dist/db/index.d.mts +3 -3
  393. package/dist/db/libsql.d.mts +1 -1
  394. package/dist/db/libsql.mjs +3 -3
  395. package/dist/db/postgres.d.mts +1 -1
  396. package/dist/db/sqlite.d.mts +1 -1
  397. package/dist/db/sqlite.mjs +1 -2
  398. package/dist/device-flow-7AhWNwCK.mjs +487 -0
  399. package/dist/email-console-CgLVZbcn.mjs +36 -0
  400. package/dist/entity-aliases-C0v-yNET.mjs +51 -0
  401. package/dist/error-DEGjx2Xw.mjs +435 -0
  402. package/dist/escape-mNZr4t2A.mjs +8 -0
  403. package/dist/experimental-workflows-DldxJlqV.mjs +38 -0
  404. package/dist/fts-manager-B1pTNEG_.mjs +297 -0
  405. package/dist/hash-CDX7M0ze.mjs +32 -0
  406. package/dist/hitl-requests-Bx3Bkk9l.mjs +118 -0
  407. package/dist/hitl-route-helpers-DMmJRS7B.mjs +96 -0
  408. package/dist/import-DD3f2jkc.mjs +243 -0
  409. package/dist/import-DVZcYlDp.mjs +1323 -0
  410. package/dist/index-CkljPf5F.d.mts +227 -0
  411. package/dist/index.d.mts +15 -11
  412. package/dist/index.mjs +60 -22
  413. package/dist/{loader-sMG4TZ-u.mjs → loader-PZnPxFLc.mjs} +42 -5
  414. package/dist/{manifest-schema-D1MSVnoI.mjs → manifest-schema-DYoCQ5np.mjs} +22 -10
  415. package/dist/media/index.d.mts +1 -1
  416. package/dist/media/index.mjs +2 -1
  417. package/dist/media/local-runtime.d.mts +11 -7
  418. package/dist/media/local-runtime.mjs +3 -3
  419. package/dist/{media-DMTr80Gv.mjs → media-_7Fxdu45.mjs} +1 -1
  420. package/dist/menus-BacxVCCo.mjs +312 -0
  421. package/dist/menus-CrzHokKj.mjs +3502 -0
  422. package/dist/normalize-C49G_o1k.mjs +126 -0
  423. package/dist/oauth-authorization-C1qiw4hd.mjs +283 -0
  424. package/dist/oauth-clients-CvWatf5p.mjs +298 -0
  425. package/dist/oauth-state-store-hSdzxsEe.mjs +48 -0
  426. package/dist/oauth-user-lookup-B4OcmsLV.mjs +25 -0
  427. package/dist/options-z8VVg1Ll.mjs +114 -0
  428. package/dist/page/index.d.mts +2 -2
  429. package/dist/parse-BeQXIt1U.mjs +88 -0
  430. package/dist/passkey-config-Daqs5fjq.mjs +42 -0
  431. package/dist/{patterns-CrCYkMBb.mjs → patterns-K0DLqWir.mjs} +53 -1
  432. package/dist/{placeholder-Cp8g5Emj.mjs → placeholder-C2P5fKa4.mjs} +1 -126
  433. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -5
  434. package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
  435. package/dist/preview-C_4DyVox.mjs +788 -0
  436. package/dist/public-url-BB_umF5G.mjs +71 -0
  437. package/dist/{query-kDmwCsHh.mjs → query-RiobVwB5.mjs} +93 -19
  438. package/dist/rate-limit-CbJoj_fT.mjs +112 -0
  439. package/dist/{redirect-DnEWAkVg.mjs → redirect-CGl64yOX.mjs} +9 -5
  440. package/dist/redirect-ClSmMOtC.mjs +16 -0
  441. package/dist/redirects-B69T59hK.mjs +499 -0
  442. package/dist/redirects-CqaxraTO.mjs +1070 -0
  443. package/dist/{registry-C0zjeB9P.mjs → registry-C-_hxLqa.mjs} +26 -294
  444. package/dist/request-meta-Bd0mQfiS.mjs +130 -0
  445. package/dist/review-requests-C2DIHwlJ.mjs +148 -0
  446. package/dist/review-requests-DIyjw-K_.mjs +79 -0
  447. package/dist/{runner-CFI6B6J2.d.mts → runner-9eIQXuc2.d.mts} +1 -1
  448. package/dist/{index-yvc6E_17.d.mts → runtime-C4-7y7xK.d.mts} +1539 -2007
  449. package/dist/runtime.d.mts +10 -6
  450. package/dist/runtime.mjs +3 -3
  451. package/dist/schema-BNpI53of.mjs +40 -0
  452. package/dist/search-DM6CVti3.mjs +337 -0
  453. package/dist/secrets-dI8zzTV7.mjs +160 -0
  454. package/dist/sections-DZFyAQXd.mjs +338 -0
  455. package/dist/seed/index.d.mts +2 -2
  456. package/dist/seed/index.mjs +18 -13
  457. package/dist/seo/index.d.mts +1 -1
  458. package/dist/seo-BBgTCOYU.mjs +85 -0
  459. package/dist/seo-CUQctrog.mjs +129 -0
  460. package/dist/service-CSfcQguB.mjs +194 -0
  461. package/dist/settings-4XnpVMOS.mjs +223 -0
  462. package/dist/settings-Bw93cLfe.mjs +50 -0
  463. package/dist/setup-complete-DidsDQ1e.mjs +21 -0
  464. package/dist/setup-nonce-pml1PMKo.mjs +17 -0
  465. package/dist/sidecar-client-vzwV98K4.mjs +66 -0
  466. package/dist/site-activity-B8FjLIVh.mjs +104 -0
  467. package/dist/site-context-Bpu_Paur.mjs +4122 -0
  468. package/dist/site-url-CYIcO0Tj.mjs +12 -0
  469. package/dist/slugify-PDTDtMXp.mjs +30 -0
  470. package/dist/ssrf-CmM76lLV.mjs +248 -0
  471. package/dist/storage/local.d.mts +1 -1
  472. package/dist/storage/local.mjs +1 -1
  473. package/dist/storage/s3.d.mts +1 -1
  474. package/dist/storage/s3.mjs +2 -2
  475. package/dist/{taxonomies-1s5PaS_8.mjs → taxonomies-BvBgfzn3.mjs} +11 -7
  476. package/dist/taxonomies-CpqGcIJD.mjs +355 -0
  477. package/dist/taxonomy-D5cbhc8u.mjs +165 -0
  478. package/dist/{tokens-CJz9ubV6.mjs → tokens-DLTo4dO2.mjs} +1 -1
  479. package/dist/{transport-DB5eDN4x.mjs → transport-C9e_h-BF.mjs} +5 -4
  480. package/dist/trusted-proxy-Bi0Cuk5n.mjs +30 -0
  481. package/dist/{types-BawVha09.mjs → types-Bs6lTBBW.mjs} +1 -1
  482. package/dist/types-C982qI5I.d.mts +344 -0
  483. package/dist/types-D4XVOt01.d.mts +165 -0
  484. package/dist/{types-Cj0KMIZV.d.mts → types-DgfUZqcd.d.mts} +54 -16
  485. package/dist/{types-BuMDPy5C.d.mts → types-IPACEM14.d.mts} +6 -0
  486. package/dist/user-CcXq-zoL.mjs +154 -0
  487. package/dist/utils-D2in-zwy.mjs +285 -0
  488. package/dist/{validate-BZ5wnLLp.mjs → validate-BJgA6TW_.mjs} +1 -1
  489. package/dist/{validate-IPf8n4Fj.d.mts → validate-JCZihRIa.d.mts} +3 -3
  490. package/dist/version-DH53KCQd.mjs +6 -0
  491. package/dist/widgets-B7Q_7bxN.mjs +104 -0
  492. package/dist/wordpress-slugs-BevajWrC.mjs +14 -0
  493. package/dist/zod-generator-DBVP8D0P.mjs +132 -0
  494. package/locals.d.ts +1 -6
  495. package/package.json +67 -11
  496. package/src/components/DinewayHead.astro +8 -4
  497. package/src/components/DinewayImage.astro +7 -5
  498. package/src/components/DinewayMedia.astro +9 -3
  499. package/src/components/Gallery.astro +5 -3
  500. package/src/components/Image.astro +5 -1
  501. package/src/components/InlinePortableTextEditor.tsx +68 -19
  502. package/dist/error-BmL6QipT.mjs +0 -30
  503. package/dist/search-DxopAWxs.mjs +0 -11200
  504. package/dist/version-BPz1imu2.mjs +0 -6
  505. package/src/astro/routes/PluginRegistry.tsx +0 -21
  506. package/src/astro/routes/api/admin/allowed-domains/[domain].ts +0 -112
  507. package/src/astro/routes/api/admin/allowed-domains/index.ts +0 -108
  508. package/src/astro/routes/api/admin/api-tokens/[id].ts +0 -44
  509. package/src/astro/routes/api/admin/api-tokens/index.ts +0 -90
  510. package/src/astro/routes/api/admin/briefing.ts +0 -76
  511. package/src/astro/routes/api/admin/bylines/[id]/index.ts +0 -90
  512. package/src/astro/routes/api/admin/bylines/index.ts +0 -74
  513. package/src/astro/routes/api/admin/comments/[id]/status.ts +0 -120
  514. package/src/astro/routes/api/admin/comments/[id].ts +0 -64
  515. package/src/astro/routes/api/admin/comments/bulk.ts +0 -42
  516. package/src/astro/routes/api/admin/comments/counts.ts +0 -30
  517. package/src/astro/routes/api/admin/comments/index.ts +0 -46
  518. package/src/astro/routes/api/admin/context/[id]/history.ts +0 -35
  519. package/src/astro/routes/api/admin/context/[id]/index.ts +0 -35
  520. package/src/astro/routes/api/admin/context/[id]/review.ts +0 -57
  521. package/src/astro/routes/api/admin/context/[id]/supersede.ts +0 -58
  522. package/src/astro/routes/api/admin/context/diff.ts +0 -35
  523. package/src/astro/routes/api/admin/context/index.ts +0 -69
  524. package/src/astro/routes/api/admin/context/stale.ts +0 -35
  525. package/src/astro/routes/api/admin/hitl-requests/[id]/index.ts +0 -38
  526. package/src/astro/routes/api/admin/hitl-requests/[id]/resolve.ts +0 -54
  527. package/src/astro/routes/api/admin/hitl-requests/index.ts +0 -38
  528. package/src/astro/routes/api/admin/hooks/exclusive/[hookName].ts +0 -132
  529. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +0 -51
  530. package/src/astro/routes/api/admin/oauth-clients/[id].ts +0 -137
  531. package/src/astro/routes/api/admin/oauth-clients/index.ts +0 -95
  532. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +0 -91
  533. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +0 -91
  534. package/src/astro/routes/api/admin/plugins/[id]/index.ts +0 -38
  535. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +0 -98
  536. package/src/astro/routes/api/admin/plugins/[id]/update.ts +0 -154
  537. package/src/astro/routes/api/admin/plugins/index.ts +0 -32
  538. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +0 -62
  539. package/src/astro/routes/api/admin/plugins/marketplace/[id]/index.ts +0 -33
  540. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +0 -135
  541. package/src/astro/routes/api/admin/plugins/marketplace/index.ts +0 -38
  542. package/src/astro/routes/api/admin/plugins/updates.ts +0 -28
  543. package/src/astro/routes/api/admin/review-requests/[id]/index.ts +0 -35
  544. package/src/astro/routes/api/admin/review-requests/[id]/resolve.ts +0 -52
  545. package/src/astro/routes/api/admin/review-requests/index.ts +0 -35
  546. package/src/astro/routes/api/admin/themes/marketplace/[id]/index.ts +0 -33
  547. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +0 -62
  548. package/src/astro/routes/api/admin/themes/marketplace/index.ts +0 -45
  549. package/src/astro/routes/api/admin/users/[id]/disable.ts +0 -72
  550. package/src/astro/routes/api/admin/users/[id]/enable.ts +0 -48
  551. package/src/astro/routes/api/admin/users/[id]/index.ts +0 -166
  552. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +0 -72
  553. package/src/astro/routes/api/admin/users/index.ts +0 -66
  554. package/src/astro/routes/api/auth/dev-bypass.ts +0 -139
  555. package/src/astro/routes/api/auth/invite/accept.ts +0 -52
  556. package/src/astro/routes/api/auth/invite/complete.ts +0 -86
  557. package/src/astro/routes/api/auth/invite/index.ts +0 -99
  558. package/src/astro/routes/api/auth/invite/register-options.ts +0 -73
  559. package/src/astro/routes/api/auth/logout.ts +0 -40
  560. package/src/astro/routes/api/auth/magic-link/send.ts +0 -90
  561. package/src/astro/routes/api/auth/magic-link/verify.ts +0 -71
  562. package/src/astro/routes/api/auth/me.ts +0 -60
  563. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +0 -221
  564. package/src/astro/routes/api/auth/oauth/[provider].ts +0 -120
  565. package/src/astro/routes/api/auth/passkey/[id].ts +0 -124
  566. package/src/astro/routes/api/auth/passkey/index.ts +0 -54
  567. package/src/astro/routes/api/auth/passkey/options.ts +0 -85
  568. package/src/astro/routes/api/auth/passkey/register/options.ts +0 -88
  569. package/src/astro/routes/api/auth/passkey/register/verify.ts +0 -119
  570. package/src/astro/routes/api/auth/passkey/verify.ts +0 -72
  571. package/src/astro/routes/api/auth/signup/complete.ts +0 -87
  572. package/src/astro/routes/api/auth/signup/request.ts +0 -89
  573. package/src/astro/routes/api/auth/signup/verify.ts +0 -53
  574. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +0 -310
  575. package/src/astro/routes/api/content/[collection]/[id]/compare.ts +0 -28
  576. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +0 -68
  577. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +0 -77
  578. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +0 -42
  579. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +0 -107
  580. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +0 -100
  581. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +0 -64
  582. package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +0 -31
  583. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +0 -129
  584. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +0 -143
  585. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +0 -50
  586. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +0 -69
  587. package/src/astro/routes/api/content/[collection]/[id].ts +0 -173
  588. package/src/astro/routes/api/content/[collection]/index.ts +0 -103
  589. package/src/astro/routes/api/content/[collection]/trash.ts +0 -33
  590. package/src/astro/routes/api/dashboard.ts +0 -32
  591. package/src/astro/routes/api/dev/emails.ts +0 -36
  592. package/src/astro/routes/api/health.ts +0 -54
  593. package/src/astro/routes/api/import/probe.ts +0 -47
  594. package/src/astro/routes/api/import/wordpress/analyze.ts +0 -523
  595. package/src/astro/routes/api/import/wordpress/execute.ts +0 -330
  596. package/src/astro/routes/api/import/wordpress/media.ts +0 -338
  597. package/src/astro/routes/api/import/wordpress/prepare.ts +0 -212
  598. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +0 -425
  599. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +0 -111
  600. package/src/astro/routes/api/import/wordpress-plugin/callback.ts +0 -58
  601. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +0 -399
  602. package/src/astro/routes/api/manifest.ts +0 -75
  603. package/src/astro/routes/api/mcp.ts +0 -125
  604. package/src/astro/routes/api/media/[id]/confirm.ts +0 -93
  605. package/src/astro/routes/api/media/[id].ts +0 -145
  606. package/src/astro/routes/api/media/file/[...key].ts +0 -79
  607. package/src/astro/routes/api/media/providers/[providerId]/[itemId].ts +0 -91
  608. package/src/astro/routes/api/media/providers/[providerId]/index.ts +0 -111
  609. package/src/astro/routes/api/media/providers/index.ts +0 -30
  610. package/src/astro/routes/api/media/upload-url.ts +0 -146
  611. package/src/astro/routes/api/media.ts +0 -204
  612. package/src/astro/routes/api/menus/[name]/reorder.ts +0 -79
  613. package/src/astro/routes/api/menus/[name].ts +0 -145
  614. package/src/astro/routes/api/menus/index.ts +0 -91
  615. package/src/astro/routes/api/oauth/authorize.ts +0 -430
  616. package/src/astro/routes/api/oauth/device/authorize.ts +0 -45
  617. package/src/astro/routes/api/oauth/device/code.ts +0 -56
  618. package/src/astro/routes/api/oauth/device/token.ts +0 -70
  619. package/src/astro/routes/api/oauth/register.ts +0 -182
  620. package/src/astro/routes/api/oauth/token/refresh.ts +0 -38
  621. package/src/astro/routes/api/oauth/token/revoke.ts +0 -38
  622. package/src/astro/routes/api/oauth/token.ts +0 -195
  623. package/src/astro/routes/api/openapi.json.ts +0 -33
  624. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +0 -109
  625. package/src/astro/routes/api/redirects/404s/index.ts +0 -72
  626. package/src/astro/routes/api/redirects/404s/summary.ts +0 -33
  627. package/src/astro/routes/api/redirects/[id].ts +0 -183
  628. package/src/astro/routes/api/redirects/index.ts +0 -100
  629. package/src/astro/routes/api/revisions/[revisionId]/index.ts +0 -29
  630. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +0 -62
  631. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +0 -104
  632. package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +0 -67
  633. package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +0 -45
  634. package/src/astro/routes/api/schema/collections/[slug]/index.ts +0 -107
  635. package/src/astro/routes/api/schema/collections/index.ts +0 -61
  636. package/src/astro/routes/api/schema/index.ts +0 -109
  637. package/src/astro/routes/api/schema/orphans/[slug].ts +0 -36
  638. package/src/astro/routes/api/schema/orphans/index.ts +0 -26
  639. package/src/astro/routes/api/search/enable.ts +0 -64
  640. package/src/astro/routes/api/search/index.ts +0 -52
  641. package/src/astro/routes/api/search/rebuild.ts +0 -72
  642. package/src/astro/routes/api/search/stats.ts +0 -35
  643. package/src/astro/routes/api/search/suggest.ts +0 -50
  644. package/src/astro/routes/api/sections/[slug].ts +0 -203
  645. package/src/astro/routes/api/sections/index.ts +0 -107
  646. package/src/astro/routes/api/settings/email.ts +0 -150
  647. package/src/astro/routes/api/settings.ts +0 -116
  648. package/src/astro/routes/api/setup/admin-verify.ts +0 -122
  649. package/src/astro/routes/api/setup/admin.ts +0 -104
  650. package/src/astro/routes/api/setup/dev-bypass.ts +0 -200
  651. package/src/astro/routes/api/setup/dev-reset.ts +0 -40
  652. package/src/astro/routes/api/setup/index.ts +0 -128
  653. package/src/astro/routes/api/setup/status.ts +0 -122
  654. package/src/astro/routes/api/snapshot.ts +0 -76
  655. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +0 -232
  656. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +0 -131
  657. package/src/astro/routes/api/taxonomies/index.ts +0 -114
  658. package/src/astro/routes/api/themes/preview.ts +0 -78
  659. package/src/astro/routes/api/typegen.ts +0 -114
  660. package/src/astro/routes/api/well-known/auth.ts +0 -71
  661. package/src/astro/routes/api/well-known/oauth-authorization-server.ts +0 -48
  662. package/src/astro/routes/api/well-known/oauth-protected-resource.ts +0 -39
  663. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +0 -114
  664. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +0 -213
  665. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +0 -126
  666. package/src/astro/routes/api/widget-areas/[name].ts +0 -135
  667. package/src/astro/routes/api/widget-areas/index.ts +0 -149
  668. package/src/astro/routes/api/widget-components.ts +0 -22
  669. package/src/astro/routes/robots.txt.ts +0 -81
  670. package/src/astro/routes/sitemap-[collection].xml.ts +0 -104
  671. package/src/astro/routes/sitemap.xml.ts +0 -92
  672. /package/dist/{adapters-C2ypTrZZ.d.mts → adapters-BLDldpJg.d.mts} +0 -0
  673. /package/{src → dist}/astro/routes/admin.astro +0 -0
  674. /package/dist/{base64-F8-DUraK.mjs → base64-Cz-aU0X1.mjs} +0 -0
  675. /package/dist/{chunks--4F8ddV4.mjs → chunks-D_jVet6z.mjs} +0 -0
  676. /package/dist/{config-BXwuX8Bx.mjs → config-CAMFxGaV.mjs} +0 -0
  677. /package/dist/{db-errors-CEqD7qH9.mjs → db-errors-DKUg_NgF.mjs} +0 -0
  678. /package/dist/{default-VjJyuuG9.mjs → default-C3PZN-bz.mjs} +0 -0
  679. /package/dist/{load-Coc9HpHH.mjs → load-D-9NhLmF.mjs} +0 -0
  680. /package/dist/{mode-47goXBBK.mjs → mode-C80mAZQv.mjs} +0 -0
  681. /package/dist/{placeholder--wOi4TbO.d.mts → placeholder-CHkLckzK.d.mts} +0 -0
  682. /package/dist/{request-cache-Dk5qPSOx.mjs → request-cache-DHMRr2Lf.mjs} +0 -0
  683. /package/dist/{transaction-Cn2rjY78.mjs → transaction-x2tJQ-A1.mjs} +0 -0
  684. /package/dist/{transport-Wge_IzKl.d.mts → transport-6RefuBdV.d.mts} +0 -0
  685. /package/dist/{types-griIBQOQ.mjs → types-B9gKVOHk.mjs} +0 -0
  686. /package/dist/{types-CWbdtiux.d.mts → types-B9qVtiHb.d.mts} +0 -0
  687. /package/dist/{types-COeOq9nK.mjs → types-DL7Y8D_t.mjs} +0 -0
  688. /package/dist/{types-BzcUjoqg.d.mts → types-Djdp0cZO.d.mts} +0 -0
  689. /package/dist/{types-DOrVigru.d.mts → types-Du8jreyC.d.mts} +0 -0
@@ -0,0 +1,849 @@
1
+ import { n as validateJsonFieldName } from "./validate-VPnKoIzW.mjs";
2
+ import { o as jsonExtractExpr } from "./dialect-helpers-DhTzaUxP.mjs";
3
+ import { t as ContentRepository } from "./content-CyLkb-qH.mjs";
4
+ import { n as decodeCursor, r as encodeCursor } from "./types-Bs6lTBBW.mjs";
5
+ import { t as MediaRepository } from "./media-_7Fxdu45.mjs";
6
+ import { t as UserRepository } from "./user-CcXq-zoL.mjs";
7
+ import { t as OptionsRepository } from "./options-z8VVg1Ll.mjs";
8
+ import { t as withTransaction } from "./transaction-x2tJQ-A1.mjs";
9
+ import { t as SeoRepository } from "./seo-CUQctrog.mjs";
10
+ import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-CmM76lLV.mjs";
11
+ import { t as CronAccessImpl } from "./cron-DGzVTtJp.mjs";
12
+ import { sql } from "kysely";
13
+ import { ulid } from "ulidx";
14
+
15
+ //#region src/plugins/storage-query.ts
16
+ /**
17
+ * Error thrown when querying non-indexed fields
18
+ */
19
+ var StorageQueryError = class extends Error {
20
+ constructor(message, field, suggestion) {
21
+ super(message);
22
+ this.field = field;
23
+ this.suggestion = suggestion;
24
+ this.name = "StorageQueryError";
25
+ }
26
+ };
27
+ /**
28
+ * Check if a value is a range filter
29
+ */
30
+ function isRangeFilter(value) {
31
+ if (typeof value !== "object" || value === null) return false;
32
+ return "gt" in value || "gte" in value || "lt" in value || "lte" in value;
33
+ }
34
+ /**
35
+ * Check if a value is an IN filter
36
+ */
37
+ function isInFilter(value) {
38
+ if (typeof value !== "object" || value === null) return false;
39
+ return "in" in value && Array.isArray(value.in);
40
+ }
41
+ /**
42
+ * Check if a value is a startsWith filter
43
+ */
44
+ function isStartsWithFilter(value) {
45
+ if (typeof value !== "object" || value === null) return false;
46
+ return "startsWith" in value && typeof value.startsWith === "string";
47
+ }
48
+ /**
49
+ * Get the set of indexed fields from index declarations
50
+ */
51
+ function getIndexedFields(indexes) {
52
+ const fields = /* @__PURE__ */ new Set();
53
+ for (const index of indexes) if (Array.isArray(index)) for (const field of index) fields.add(field);
54
+ else fields.add(index);
55
+ return fields;
56
+ }
57
+ /**
58
+ * Validate that all fields in a where clause are indexed
59
+ */
60
+ function validateWhereClause(where, indexedFields, pluginId, collection) {
61
+ for (const field of Object.keys(where)) if (!indexedFields.has(field)) throw new StorageQueryError(`Cannot query on non-indexed field '${field}'.`, field, `Add '${field}' to storage.${collection}.indexes in plugin '${pluginId}' to enable this query.`);
62
+ }
63
+ /**
64
+ * Validate orderBy fields are indexed
65
+ */
66
+ function validateOrderByClause(orderBy, indexedFields, pluginId, collection) {
67
+ for (const field of Object.keys(orderBy)) if (!indexedFields.has(field)) throw new StorageQueryError(`Cannot order by non-indexed field '${field}'.`, field, `Add '${field}' to storage.${collection}.indexes in plugin '${pluginId}' to enable ordering by this field.`);
68
+ }
69
+ /**
70
+ * SQL expression for extracting JSON field.
71
+ *
72
+ * Validates the field name before interpolation to prevent SQL injection
73
+ * via crafted JSON path expressions.
74
+ */
75
+ function jsonExtract(db, field) {
76
+ validateJsonFieldName(field, "query field name");
77
+ return jsonExtractExpr(db, "data", field);
78
+ }
79
+ /**
80
+ * Build a WHERE clause condition for a single field
81
+ */
82
+ function buildCondition(db, field, value) {
83
+ const extract = jsonExtract(db, field);
84
+ if (value === null) return {
85
+ sql: `${extract} IS NULL`,
86
+ params: []
87
+ };
88
+ if (typeof value === "string" || typeof value === "number") return {
89
+ sql: `${extract} = ?`,
90
+ params: [value]
91
+ };
92
+ if (typeof value === "boolean") return {
93
+ sql: `${extract} = ?`,
94
+ params: [value]
95
+ };
96
+ if (isInFilter(value)) return {
97
+ sql: `${extract} IN (${value.in.map(() => "?").join(", ")})`,
98
+ params: value.in
99
+ };
100
+ if (isStartsWithFilter(value)) return {
101
+ sql: `${extract} LIKE ?`,
102
+ params: [`${value.startsWith}%`]
103
+ };
104
+ if (isRangeFilter(value)) {
105
+ const conditions = [];
106
+ const params = [];
107
+ if (value.gt !== void 0) {
108
+ conditions.push(`${extract} > ?`);
109
+ params.push(value.gt);
110
+ }
111
+ if (value.gte !== void 0) {
112
+ conditions.push(`${extract} >= ?`);
113
+ params.push(value.gte);
114
+ }
115
+ if (value.lt !== void 0) {
116
+ conditions.push(`${extract} < ?`);
117
+ params.push(value.lt);
118
+ }
119
+ if (value.lte !== void 0) {
120
+ conditions.push(`${extract} <= ?`);
121
+ params.push(value.lte);
122
+ }
123
+ return {
124
+ sql: conditions.join(" AND "),
125
+ params
126
+ };
127
+ }
128
+ throw new StorageQueryError(`Unknown filter type for field '${field}'`);
129
+ }
130
+ /**
131
+ * Build a complete WHERE clause from a WhereClause object
132
+ */
133
+ function buildWhereClause(db, where) {
134
+ const conditions = [];
135
+ const params = [];
136
+ for (const [field, value] of Object.entries(where)) {
137
+ const condition = buildCondition(db, field, value);
138
+ conditions.push(condition.sql);
139
+ params.push(...condition.params);
140
+ }
141
+ if (conditions.length === 0) return {
142
+ sql: "",
143
+ params: []
144
+ };
145
+ return {
146
+ sql: conditions.join(" AND "),
147
+ params
148
+ };
149
+ }
150
+
151
+ //#endregion
152
+ //#region src/database/repositories/plugin-storage.ts
153
+ /**
154
+ * Plugin Storage Repository
155
+ *
156
+ * Implements the StorageCollection interface for a specific plugin and collection.
157
+ */
158
+ var PluginStorageRepository = class {
159
+ indexedFields;
160
+ constructor(db, pluginId, collection, indexes) {
161
+ this.db = db;
162
+ this.pluginId = pluginId;
163
+ this.collection = collection;
164
+ this.indexedFields = getIndexedFields(indexes);
165
+ }
166
+ /**
167
+ * Get a document by ID
168
+ */
169
+ async get(id) {
170
+ const row = await this.db.selectFrom("_plugin_storage").select("data").where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection).where("id", "=", id).executeTakeFirst();
171
+ if (!row) return null;
172
+ return JSON.parse(row.data);
173
+ }
174
+ /**
175
+ * Store a document
176
+ */
177
+ async put(id, data) {
178
+ const now = (/* @__PURE__ */ new Date()).toISOString();
179
+ const jsonData = JSON.stringify(data);
180
+ await this.db.insertInto("_plugin_storage").values({
181
+ plugin_id: this.pluginId,
182
+ collection: this.collection,
183
+ id,
184
+ data: jsonData,
185
+ created_at: now,
186
+ updated_at: now
187
+ }).onConflict((oc) => oc.columns([
188
+ "plugin_id",
189
+ "collection",
190
+ "id"
191
+ ]).doUpdateSet({
192
+ data: jsonData,
193
+ updated_at: now
194
+ })).execute();
195
+ }
196
+ /**
197
+ * Delete a document
198
+ */
199
+ async delete(id) {
200
+ return ((await this.db.deleteFrom("_plugin_storage").where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection).where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0) > 0;
201
+ }
202
+ /**
203
+ * Check if a document exists
204
+ */
205
+ async exists(id) {
206
+ return !!await this.db.selectFrom("_plugin_storage").select("id").where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection).where("id", "=", id).executeTakeFirst();
207
+ }
208
+ /**
209
+ * Get multiple documents by ID
210
+ */
211
+ async getMany(ids) {
212
+ if (ids.length === 0) return /* @__PURE__ */ new Map();
213
+ const rows = await this.db.selectFrom("_plugin_storage").select(["id", "data"]).where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection).where("id", "in", ids).execute();
214
+ const result = /* @__PURE__ */ new Map();
215
+ for (const row of rows) result.set(row.id, JSON.parse(row.data));
216
+ return result;
217
+ }
218
+ /**
219
+ * Store multiple documents
220
+ */
221
+ async putMany(items) {
222
+ if (items.length === 0) return;
223
+ const now = (/* @__PURE__ */ new Date()).toISOString();
224
+ await withTransaction(this.db, async (trx) => {
225
+ for (const item of items) {
226
+ const jsonData = JSON.stringify(item.data);
227
+ await trx.insertInto("_plugin_storage").values({
228
+ plugin_id: this.pluginId,
229
+ collection: this.collection,
230
+ id: item.id,
231
+ data: jsonData,
232
+ created_at: now,
233
+ updated_at: now
234
+ }).onConflict((oc) => oc.columns([
235
+ "plugin_id",
236
+ "collection",
237
+ "id"
238
+ ]).doUpdateSet({
239
+ data: jsonData,
240
+ updated_at: now
241
+ })).execute();
242
+ }
243
+ });
244
+ }
245
+ /**
246
+ * Delete multiple documents
247
+ */
248
+ async deleteMany(ids) {
249
+ if (ids.length === 0) return 0;
250
+ const result = await this.db.deleteFrom("_plugin_storage").where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection).where("id", "in", ids).executeTakeFirst();
251
+ return Number(result.numDeletedRows ?? 0);
252
+ }
253
+ /**
254
+ * Query documents with filters
255
+ */
256
+ async query(options = {}) {
257
+ const { where = {}, orderBy = {}, cursor } = options;
258
+ const limit = Math.min(options.limit ?? 50, 100);
259
+ validateWhereClause(where, this.indexedFields, this.pluginId, this.collection);
260
+ if (Object.keys(orderBy).length > 0) validateOrderByClause(orderBy, this.indexedFields, this.pluginId, this.collection);
261
+ let query = this.db.selectFrom("_plugin_storage").select([
262
+ "id",
263
+ "data",
264
+ "created_at"
265
+ ]).where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection);
266
+ const whereResult = buildWhereClause(this.db, where);
267
+ if (whereResult.sql) {
268
+ const whereSqlParts = [];
269
+ let paramIndex = 0;
270
+ const sqlParts = whereResult.sql.split("?");
271
+ for (let i = 0; i < sqlParts.length; i++) {
272
+ if (i > 0) whereSqlParts.push(sql`${whereResult.params[paramIndex++]}`);
273
+ if (sqlParts[i]) whereSqlParts.push(sql.raw(sqlParts[i]));
274
+ }
275
+ query = query.where(({ eb }) => eb(sql.join(whereSqlParts, sql.raw("")), "=", sql.raw("1")));
276
+ }
277
+ if (cursor) {
278
+ const decoded = decodeCursor(cursor);
279
+ if (decoded) query = query.where(({ eb }) => eb(sql`(created_at, id)`, ">", sql`(${decoded.orderValue}, ${decoded.id})`));
280
+ }
281
+ if (Object.keys(orderBy).length > 0) for (const [field, direction] of Object.entries(orderBy)) {
282
+ const extract = jsonExtract(this.db, field);
283
+ const orderExpr = direction === "desc" ? sql`${sql.raw(extract)} desc` : sql`${sql.raw(extract)} asc`;
284
+ query = query.orderBy(orderExpr);
285
+ }
286
+ else query = query.orderBy("created_at", "asc").orderBy("id", "asc");
287
+ query = query.limit(limit + 1);
288
+ const rows = await query.execute();
289
+ const hasMore = rows.length > limit;
290
+ const items = rows.slice(0, limit).map((row) => ({
291
+ id: row.id,
292
+ data: JSON.parse(row.data)
293
+ }));
294
+ let nextCursor;
295
+ if (hasMore) {
296
+ const lastItem = rows[limit - 1];
297
+ if (lastItem) nextCursor = encodeCursor(lastItem.created_at, lastItem.id);
298
+ }
299
+ return {
300
+ items,
301
+ cursor: nextCursor,
302
+ hasMore
303
+ };
304
+ }
305
+ /**
306
+ * Count documents matching a filter
307
+ */
308
+ async count(where) {
309
+ if (where && Object.keys(where).length > 0) validateWhereClause(where, this.indexedFields, this.pluginId, this.collection);
310
+ let query = this.db.selectFrom("_plugin_storage").select(sql`COUNT(*)`.as("count")).where("plugin_id", "=", this.pluginId).where("collection", "=", this.collection);
311
+ if (where && Object.keys(where).length > 0) {
312
+ const whereResult = buildWhereClause(this.db, where);
313
+ if (whereResult.sql) {
314
+ const whereSqlParts = [];
315
+ let paramIndex = 0;
316
+ const sqlParts = whereResult.sql.split("?");
317
+ for (let i = 0; i < sqlParts.length; i++) {
318
+ if (i > 0) whereSqlParts.push(sql`${whereResult.params[paramIndex++]}`);
319
+ if (sqlParts[i]) whereSqlParts.push(sql.raw(sqlParts[i]));
320
+ }
321
+ query = query.where(({ eb }) => eb(sql.join(whereSqlParts, sql.raw("")), "=", sql.raw("1")));
322
+ }
323
+ }
324
+ return (await query.executeTakeFirst())?.count ?? 0;
325
+ }
326
+ };
327
+
328
+ //#endregion
329
+ //#region src/plugins/context.ts
330
+ /**
331
+ * Create KV accessor for a plugin
332
+ * All keys are automatically prefixed with the plugin ID
333
+ */
334
+ function createKVAccess(optionsRepo, pluginId) {
335
+ const prefix = `plugin:${pluginId}:`;
336
+ return {
337
+ async get(key) {
338
+ return optionsRepo.get(`${prefix}${key}`);
339
+ },
340
+ async set(key, value) {
341
+ await optionsRepo.set(`${prefix}${key}`, value);
342
+ },
343
+ async delete(key) {
344
+ return optionsRepo.delete(`${prefix}${key}`);
345
+ },
346
+ async list(keyPrefix) {
347
+ const fullPrefix = `${prefix}${keyPrefix ?? ""}`;
348
+ const entriesMap = await optionsRepo.getByPrefix(fullPrefix);
349
+ const result = [];
350
+ for (const [fullKey, value] of entriesMap) result.push({
351
+ key: fullKey.slice(prefix.length),
352
+ value
353
+ });
354
+ return result;
355
+ }
356
+ };
357
+ }
358
+ /**
359
+ * Create storage collection accessor for a plugin
360
+ * Wraps PluginStorageRepository with the v2 interface (no async iterators)
361
+ */
362
+ function createStorageCollection(db, pluginId, collectionName, indexes) {
363
+ const repo = new PluginStorageRepository(db, pluginId, collectionName, indexes);
364
+ return {
365
+ get: (id) => repo.get(id),
366
+ put: (id, data) => repo.put(id, data),
367
+ delete: (id) => repo.delete(id),
368
+ exists: (id) => repo.exists(id),
369
+ getMany: (ids) => repo.getMany(ids),
370
+ putMany: (items) => repo.putMany(items),
371
+ deleteMany: (ids) => repo.deleteMany(ids),
372
+ count: (where) => repo.count(where),
373
+ async query(options) {
374
+ const result = await repo.query({
375
+ where: options?.where,
376
+ orderBy: options?.orderBy,
377
+ limit: options?.limit,
378
+ cursor: options?.cursor
379
+ });
380
+ return {
381
+ items: result.items,
382
+ cursor: result.cursor,
383
+ hasMore: result.hasMore
384
+ };
385
+ }
386
+ };
387
+ }
388
+ /**
389
+ * Create storage accessor with all declared collections
390
+ */
391
+ function createStorageAccess(db, pluginId, storageConfig) {
392
+ const storage = {};
393
+ for (const [collectionName, config] of Object.entries(storageConfig)) storage[collectionName] = createStorageCollection(db, pluginId, collectionName, [...config.indexes, ...config.uniqueIndexes ?? []]);
394
+ return storage;
395
+ }
396
+ /**
397
+ * Extract `seo` from a plugin-supplied content write input and return both
398
+ * parts. Mutates nothing — returns a new field map without the `seo` key.
399
+ */
400
+ function splitSeoFromInput(input) {
401
+ const { seo, ...fields } = input;
402
+ if (seo !== void 0 && (seo === null || typeof seo !== "object" || Array.isArray(seo))) throw new Error("content.seo must be an object");
403
+ return {
404
+ fields,
405
+ seo
406
+ };
407
+ }
408
+ /**
409
+ * Reject writing SEO to a collection that does not have it enabled.
410
+ * Matches the REST API behavior (VALIDATION_ERROR).
411
+ */
412
+ async function assertSeoEnabled(seoRepo, collection, seo) {
413
+ const hasSeo = await seoRepo.isEnabled(collection);
414
+ if (seo !== void 0 && !hasSeo) throw new Error(`Collection "${collection}" does not have SEO enabled. Remove the seo field or enable SEO on this collection.`);
415
+ return hasSeo;
416
+ }
417
+ function toPluginContentItem(item) {
418
+ return {
419
+ id: item.id,
420
+ type: item.type,
421
+ slug: item.slug,
422
+ status: item.status,
423
+ data: item.data,
424
+ createdAt: item.createdAt,
425
+ updatedAt: item.updatedAt,
426
+ publishedAt: item.publishedAt,
427
+ locale: item.locale
428
+ };
429
+ }
430
+ /**
431
+ * Create read-only content access
432
+ */
433
+ function createContentAccess(db) {
434
+ const contentRepo = new ContentRepository(db);
435
+ const seoRepo = new SeoRepository(db);
436
+ return {
437
+ async get(collection, id) {
438
+ const item = await contentRepo.findById(collection, id);
439
+ if (!item) return null;
440
+ const result = toPluginContentItem(item);
441
+ if (await seoRepo.isEnabled(collection)) result.seo = await seoRepo.get(collection, item.id);
442
+ return result;
443
+ },
444
+ async list(collection, options) {
445
+ let orderBy;
446
+ if (options?.orderBy) {
447
+ const first = Object.entries(options.orderBy)[0];
448
+ if (first) orderBy = {
449
+ field: first[0],
450
+ direction: first[1]
451
+ };
452
+ }
453
+ const result = await contentRepo.findMany(collection, {
454
+ limit: options?.limit ?? 50,
455
+ cursor: options?.cursor,
456
+ orderBy,
457
+ where: options?.where
458
+ });
459
+ const items = result.items.map(toPluginContentItem);
460
+ if (items.length > 0 && await seoRepo.isEnabled(collection)) {
461
+ const seoMap = await seoRepo.getMany(collection, items.map((i) => i.id));
462
+ for (const item of items) {
463
+ const seo = seoMap.get(item.id);
464
+ if (seo) item.seo = seo;
465
+ }
466
+ }
467
+ return {
468
+ items,
469
+ cursor: result.nextCursor,
470
+ hasMore: !!result.nextCursor
471
+ };
472
+ }
473
+ };
474
+ }
475
+ /**
476
+ * Create full content access with write operations.
477
+ *
478
+ * `create` and `update` accept a reserved `seo` key in their `data`
479
+ * argument. When present, it is routed to the core SEO panel
480
+ * (`_dineway_seo`) via `SeoRepository.upsert`, in the same transaction as
481
+ * the content write. The returned `ContentItem.seo` reflects the resulting
482
+ * SEO state for SEO-enabled collections.
483
+ */
484
+ function createContentAccessWithWrite(db) {
485
+ return {
486
+ ...createContentAccess(db),
487
+ async create(collection, data) {
488
+ const { fields, seo } = splitSeoFromInput(data);
489
+ return withTransaction(db, async (trx) => {
490
+ const trxContentRepo = new ContentRepository(trx);
491
+ const trxSeoRepo = new SeoRepository(trx);
492
+ const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
493
+ const item = await trxContentRepo.create({
494
+ type: collection,
495
+ data: fields
496
+ });
497
+ const result = toPluginContentItem(item);
498
+ if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
499
+ return result;
500
+ });
501
+ },
502
+ async update(collection, id, data) {
503
+ const { fields, seo } = splitSeoFromInput(data);
504
+ return withTransaction(db, async (trx) => {
505
+ const trxContentRepo = new ContentRepository(trx);
506
+ const trxSeoRepo = new SeoRepository(trx);
507
+ const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
508
+ const item = Object.keys(fields).length > 0 ? await trxContentRepo.update(collection, id, { data: fields }) : await (async () => {
509
+ const existing = await trxContentRepo.findById(collection, id);
510
+ if (!existing) throw new Error("Content not found");
511
+ return existing;
512
+ })();
513
+ const result = toPluginContentItem(item);
514
+ if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
515
+ return result;
516
+ });
517
+ },
518
+ async delete(collection, id) {
519
+ return new ContentRepository(db).delete(collection, id);
520
+ }
521
+ };
522
+ }
523
+ /**
524
+ * Create read-only media access
525
+ */
526
+ function createMediaAccess(db) {
527
+ const mediaRepo = new MediaRepository(db);
528
+ return {
529
+ async get(id) {
530
+ const item = await mediaRepo.findById(id);
531
+ if (!item) return null;
532
+ return {
533
+ id: item.id,
534
+ filename: item.filename,
535
+ mimeType: item.mimeType,
536
+ size: item.size,
537
+ url: `/media/${item.id}/${item.filename}`,
538
+ createdAt: item.createdAt
539
+ };
540
+ },
541
+ async list(options) {
542
+ const result = await mediaRepo.findMany({
543
+ limit: options?.limit ?? 50,
544
+ cursor: options?.cursor,
545
+ mimeType: options?.mimeType
546
+ });
547
+ return {
548
+ items: result.items.map((item) => ({
549
+ id: item.id,
550
+ filename: item.filename,
551
+ mimeType: item.mimeType,
552
+ size: item.size,
553
+ url: `/media/${item.id}/${item.filename}`,
554
+ createdAt: item.createdAt
555
+ })),
556
+ cursor: result.nextCursor,
557
+ hasMore: !!result.nextCursor
558
+ };
559
+ }
560
+ };
561
+ }
562
+ /**
563
+ * Create full media access with write operations.
564
+ * If storage is not provided, upload() will throw at call time.
565
+ */
566
+ function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
567
+ const mediaRepo = new MediaRepository(db);
568
+ return {
569
+ ...createMediaAccess(db),
570
+ getUploadUrl: getUploadUrlFn,
571
+ async upload(filename, contentType, bytes) {
572
+ if (!storage) throw new Error("Media upload() requires a storage backend. Configure storage in PluginContextFactoryOptions.");
573
+ const keyPrefix = ulid();
574
+ const basename = filename.split("/").pop() ?? filename;
575
+ const dotIdx = basename.lastIndexOf(".");
576
+ const storageKey = `${keyPrefix}${dotIdx > 0 ? basename.slice(dotIdx).toLowerCase() : ""}`;
577
+ await storage.upload({
578
+ key: storageKey,
579
+ body: new Uint8Array(bytes),
580
+ contentType
581
+ });
582
+ let media;
583
+ try {
584
+ media = await mediaRepo.create({
585
+ filename: basename,
586
+ mimeType: contentType,
587
+ size: bytes.byteLength,
588
+ storageKey,
589
+ status: "ready"
590
+ });
591
+ } catch (error) {
592
+ try {
593
+ await storage.delete(storageKey);
594
+ } catch {}
595
+ throw error;
596
+ }
597
+ return {
598
+ mediaId: media.id,
599
+ storageKey,
600
+ url: `/_dineway/api/media/file/${storageKey}`
601
+ };
602
+ },
603
+ async delete(id) {
604
+ return mediaRepo.delete(id);
605
+ }
606
+ };
607
+ }
608
+ /** Maximum number of redirects to follow in plugin HTTP access */
609
+ const MAX_PLUGIN_REDIRECTS = 5;
610
+ function isHostAllowed(host, allowedHosts) {
611
+ return allowedHosts.some((pattern) => {
612
+ if (pattern === "*") return true;
613
+ if (pattern.startsWith("*.")) {
614
+ const suffix = pattern.slice(1);
615
+ return host.endsWith(suffix) || host === pattern.slice(2);
616
+ }
617
+ return host === pattern;
618
+ });
619
+ }
620
+ /**
621
+ * Create HTTP access with host validation.
622
+ *
623
+ * Uses redirect: "manual" to re-validate each redirect target against
624
+ * the allowedHosts list, preventing redirects to unauthorized hosts.
625
+ */
626
+ function createHttpAccess(pluginId, allowedHosts) {
627
+ return { async fetch(url, init) {
628
+ if (allowedHosts.length === 0) throw new Error(`Plugin "${pluginId}" has no allowed hosts configured. Add hosts to the plugin's allowedHosts array to enable HTTP requests.`);
629
+ let currentUrl = url;
630
+ let currentInit = init;
631
+ for (let i = 0; i <= MAX_PLUGIN_REDIRECTS; i++) {
632
+ const hostname = new URL(currentUrl).hostname;
633
+ if (!isHostAllowed(hostname, allowedHosts)) throw new Error(`Plugin "${pluginId}" is not allowed to fetch from host "${hostname}". Allowed hosts: ${allowedHosts.join(", ")}`);
634
+ const response = await globalThis.fetch(currentUrl, {
635
+ ...currentInit,
636
+ redirect: "manual"
637
+ });
638
+ if (response.status < 300 || response.status >= 400) return response;
639
+ const location = response.headers.get("Location");
640
+ if (!location) return response;
641
+ const previousOrigin = new URL(currentUrl).origin;
642
+ currentUrl = new URL(location, currentUrl).href;
643
+ if (previousOrigin !== new URL(currentUrl).origin && currentInit) currentInit = stripCredentialHeaders(currentInit);
644
+ }
645
+ throw new Error(`Plugin "${pluginId}": too many redirects (max ${MAX_PLUGIN_REDIRECTS})`);
646
+ } };
647
+ }
648
+ /**
649
+ * Create unrestricted HTTP access (for plugins with network:request:unrestricted capability).
650
+ * No host validation, but applies SSRF protection on redirect targets to
651
+ * prevent plugins from being tricked into reaching internal services.
652
+ */
653
+ function createUnrestrictedHttpAccess(pluginId) {
654
+ return { async fetch(url, init) {
655
+ let currentUrl = url;
656
+ let currentInit = init;
657
+ for (let i = 0; i <= MAX_PLUGIN_REDIRECTS; i++) {
658
+ try {
659
+ validateExternalUrl(currentUrl);
660
+ } catch (e) {
661
+ const msg = e instanceof SsrfError ? e.message : "SSRF validation failed";
662
+ throw new Error(`Plugin "${pluginId}": blocked fetch to "${new URL(currentUrl).hostname}": ${msg}`, { cause: e });
663
+ }
664
+ const response = await globalThis.fetch(currentUrl, {
665
+ ...currentInit,
666
+ redirect: "manual"
667
+ });
668
+ if (response.status < 300 || response.status >= 400) return response;
669
+ const location = response.headers.get("Location");
670
+ if (!location) return response;
671
+ const previousOrigin = new URL(currentUrl).origin;
672
+ currentUrl = new URL(location, currentUrl).href;
673
+ if (previousOrigin !== new URL(currentUrl).origin && currentInit) currentInit = stripCredentialHeaders(currentInit);
674
+ }
675
+ throw new Error(`Plugin "${pluginId}": too many redirects (max ${MAX_PLUGIN_REDIRECTS})`);
676
+ } };
677
+ }
678
+ /**
679
+ * Create logger for a plugin
680
+ */
681
+ function createLogAccess(pluginId) {
682
+ const prefix = `[plugin:${pluginId}]`;
683
+ return {
684
+ debug(message, data) {
685
+ if (data !== void 0) console.debug(prefix, message, data);
686
+ else console.debug(prefix, message);
687
+ },
688
+ info(message, data) {
689
+ if (data !== void 0) console.info(prefix, message, data);
690
+ else console.info(prefix, message);
691
+ },
692
+ warn(message, data) {
693
+ if (data !== void 0) console.warn(prefix, message, data);
694
+ else console.warn(prefix, message);
695
+ },
696
+ error(message, data) {
697
+ if (data !== void 0) console.error(prefix, message, data);
698
+ else console.error(prefix, message);
699
+ }
700
+ };
701
+ }
702
+ const TRAILING_SLASH_RE = /\/$/;
703
+ /**
704
+ * Create site info from config and settings.
705
+ *
706
+ * Resolution order for URL:
707
+ * 1. options table (dineway:site_url)
708
+ * 2. Astro `site` config
709
+ * 3. fallback to empty string
710
+ */
711
+ function createSiteInfo(options) {
712
+ return {
713
+ name: options.siteName ?? "",
714
+ url: (options.siteUrl ?? "").replace(TRAILING_SLASH_RE, ""),
715
+ locale: options.locale ?? "en"
716
+ };
717
+ }
718
+ /**
719
+ * Create a URL helper that generates absolute URLs from relative paths.
720
+ * Validates that path starts with "/" and rejects protocol-relative paths ("//").
721
+ */
722
+ function createUrlHelper(siteUrl) {
723
+ const base = siteUrl.replace(TRAILING_SLASH_RE, "");
724
+ return (path) => {
725
+ if (!path.startsWith("/")) throw new Error(`URL path must start with "/", got: "${path}"`);
726
+ if (path.startsWith("//")) throw new Error(`URL path must not be protocol-relative, got: "${path}"`);
727
+ return `${base}${path}`;
728
+ };
729
+ }
730
+ /**
731
+ * Convert a UserRepository user to the plugin-facing UserInfo shape.
732
+ * Strips sensitive fields (avatarUrl, emailVerified, data).
733
+ */
734
+ function toUserInfo(user) {
735
+ return {
736
+ id: user.id,
737
+ email: user.email,
738
+ name: user.name,
739
+ role: user.role,
740
+ createdAt: user.createdAt
741
+ };
742
+ }
743
+ /**
744
+ * Create read-only user access for plugins.
745
+ * Excludes sensitive fields (password hashes, sessions, passkeys, avatar URL, data).
746
+ */
747
+ function createUserAccess(db) {
748
+ const userRepo = new UserRepository(db);
749
+ return {
750
+ async get(id) {
751
+ const user = await userRepo.findById(id);
752
+ if (!user) return null;
753
+ return toUserInfo(user);
754
+ },
755
+ async getByEmail(email) {
756
+ const user = await userRepo.findByEmail(email);
757
+ if (!user) return null;
758
+ return toUserInfo(user);
759
+ },
760
+ async list(opts) {
761
+ const result = await userRepo.findMany({
762
+ role: opts?.role,
763
+ cursor: opts?.cursor,
764
+ limit: opts?.limit
765
+ });
766
+ return {
767
+ items: result.items.map(toUserInfo),
768
+ nextCursor: result.nextCursor
769
+ };
770
+ }
771
+ };
772
+ }
773
+ /**
774
+ * Factory for creating plugin contexts
775
+ */
776
+ var PluginContextFactory = class {
777
+ optionsRepo;
778
+ db;
779
+ storage;
780
+ getUploadUrl;
781
+ site;
782
+ urlHelper;
783
+ cronReschedule;
784
+ emailPipeline;
785
+ constructor(options) {
786
+ this.db = options.db;
787
+ this.optionsRepo = new OptionsRepository(options.db);
788
+ this.storage = options.storage;
789
+ this.getUploadUrl = options.getUploadUrl;
790
+ this.site = createSiteInfo(options.siteInfo ?? {});
791
+ this.urlHelper = createUrlHelper(this.site.url);
792
+ this.cronReschedule = options.cronReschedule;
793
+ this.emailPipeline = options.emailPipeline;
794
+ }
795
+ /**
796
+ * Create the unified plugin context
797
+ */
798
+ createContext(plugin) {
799
+ const capabilities = new Set(plugin.capabilities);
800
+ const kv = createKVAccess(this.optionsRepo, plugin.id);
801
+ const log = createLogAccess(plugin.id);
802
+ const storage = createStorageAccess(this.db, plugin.id, plugin.storage);
803
+ let content;
804
+ if (capabilities.has("content:write")) content = createContentAccessWithWrite(this.db);
805
+ else if (capabilities.has("content:read")) content = createContentAccess(this.db);
806
+ let media;
807
+ if (capabilities.has("media:write") && this.getUploadUrl) media = createMediaAccessWithWrite(this.db, this.getUploadUrl, this.storage);
808
+ else if (capabilities.has("media:read")) media = createMediaAccess(this.db);
809
+ let http;
810
+ if (capabilities.has("network:request:unrestricted")) http = createUnrestrictedHttpAccess(plugin.id);
811
+ else if (capabilities.has("network:request")) http = createHttpAccess(plugin.id, plugin.allowedHosts);
812
+ let users;
813
+ if (capabilities.has("users:read")) users = createUserAccess(this.db);
814
+ let cron;
815
+ if (this.cronReschedule) cron = new CronAccessImpl(this.db, plugin.id, this.cronReschedule);
816
+ let email;
817
+ if (capabilities.has("email:send") && this.emailPipeline?.isAvailable()) {
818
+ const pipeline = this.emailPipeline;
819
+ const pluginId = plugin.id;
820
+ email = { send: (message) => pipeline.send(message, pluginId) };
821
+ }
822
+ return {
823
+ plugin: {
824
+ id: plugin.id,
825
+ version: plugin.version
826
+ },
827
+ storage,
828
+ kv,
829
+ content,
830
+ media,
831
+ http,
832
+ log,
833
+ site: this.site,
834
+ url: this.urlHelper,
835
+ users,
836
+ cron,
837
+ email
838
+ };
839
+ }
840
+ };
841
+ /**
842
+ * Create a plugin context for a resolved plugin
843
+ */
844
+ function createPluginContext(options, plugin) {
845
+ return new PluginContextFactory(options).createContext(plugin);
846
+ }
847
+
848
+ //#endregion
849
+ export { createPluginContext as n, createStorageAccess as r, PluginContextFactory as t };