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,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 };