dineway 0.1.9 → 0.1.12

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 (720) hide show
  1. package/README.md +63 -17
  2. package/dist/activity-events-B4wp7CrU.mjs +540 -0
  3. package/dist/allowed-origins-C1AKK9AT.mjs +68 -0
  4. package/dist/api/route-utils.d.mts +42 -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-BR7Y0GBo.mjs +2704 -0
  11. package/dist/api-tokens-CPjC3zf8.mjs +3 -0
  12. package/dist/api-tokens-D7UjLbdt.mjs +153 -0
  13. package/dist/{apply-iVSqz2qs.mjs → apply-Bm5QgdrE.mjs} +15 -689
  14. package/dist/astro/index.d.mts +11 -6
  15. package/dist/astro/index.mjs +86 -11
  16. package/dist/astro/middleware/auth.d.mts +11 -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 +88 -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 +46 -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 +46 -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 +61 -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 +64 -0
  56. package/dist/astro/routes/api/admin/context/diff.d.mts +7 -0
  57. package/dist/astro/routes/api/admin/context/diff.mjs +50 -0
  58. package/dist/astro/routes/api/admin/context/index.d.mts +8 -0
  59. package/dist/astro/routes/api/admin/context/index.mjs +72 -0
  60. package/dist/astro/routes/api/admin/context/stale.d.mts +7 -0
  61. package/dist/astro/routes/api/admin/context/stale.mjs +50 -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 +52 -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 +68 -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 +56 -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 +99 -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 +90 -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 +90 -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 +55 -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 +99 -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 +132 -0
  86. package/dist/astro/routes/api/admin/plugins/index.d.mts +7 -0
  87. package/dist/astro/routes/api/admin/plugins/index.mjs +53 -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 +55 -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 +129 -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 +62 -0
  96. package/dist/astro/routes/api/admin/plugins/updates.d.mts +7 -0
  97. package/dist/astro/routes/api/admin/plugins/updates.mjs +53 -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 +98 -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 +55 -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 +71 -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 +93 -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 +198 -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 +156 -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 +290 -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 +269 -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 +2701 -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/dist/astro/routes/api/menus/_name_/items.mjs +165 -0
  240. package/dist/astro/routes/api/menus/_name_/reorder.d.mts +7 -0
  241. package/dist/astro/routes/api/menus/_name_/reorder.mjs +78 -0
  242. package/dist/astro/routes/api/menus/_name_.d.mts +9 -0
  243. package/dist/astro/routes/api/menus/_name_.mjs +124 -0
  244. package/dist/astro/routes/api/menus/index.d.mts +8 -0
  245. package/dist/astro/routes/api/menus/index.mjs +85 -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 +153 -0
  272. package/dist/astro/routes/api/redirects/index.d.mts +8 -0
  273. package/dist/astro/routes/api/redirects/index.mjs +98 -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 +99 -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 +81 -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 +68 -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 +98 -0
  286. package/dist/astro/routes/api/schema/collections/index.d.mts +8 -0
  287. package/dist/astro/routes/api/schema/collections/index.mjs +78 -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 +59 -0
  292. package/dist/astro/routes/api/schema/orphans/index.d.mts +7 -0
  293. package/dist/astro/routes/api/schema/orphans/index.mjs +54 -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 +157 -0
  306. package/dist/astro/routes/api/sections/index.d.mts +8 -0
  307. package/dist/astro/routes/api/sections/index.mjs +100 -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 +102 -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 +190 -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 +114 -0
  330. package/dist/astro/routes/api/taxonomies/index.d.mts +14 -0
  331. package/dist/astro/routes/api/taxonomies/index.mjs +104 -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 +89 -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 +159 -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 +105 -0
  348. package/dist/astro/routes/api/widget-areas/_name_.d.mts +8 -0
  349. package/dist/astro/routes/api/widget-areas/_name_.mjs +100 -0
  350. package/dist/astro/routes/api/widget-areas/index.d.mts +8 -0
  351. package/dist/astro/routes/api/widget-areas/index.mjs +109 -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 +42 -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-DOZ3UCsP.mjs +13 -0
  370. package/dist/authorize-BAdbMCwC.mjs +36 -0
  371. package/dist/briefing-MVYe_Uyf.mjs +1294 -0
  372. package/dist/briefing-rty4O-wa.mjs +29 -0
  373. package/dist/{byline-OhH2dlRu.mjs → byline-naZxOPSa.mjs} +3 -3
  374. package/dist/{bylines-BGpD9_hy.mjs → bylines-C4LIBOOO.mjs} +20 -53
  375. package/dist/bylines-eVVCuOe4.d.mts +2023 -0
  376. package/dist/{cache-BdSY-gQN.mjs → cache-DEbQ13c9.mjs} +21 -11
  377. package/dist/challenge-store-DDTbisbf.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--BsZ9pqA.mjs +186 -0
  384. package/dist/components-BPknylYg.mjs +107 -0
  385. package/dist/{content-DWi4d0rT.mjs → content-CyLkb-qH.mjs} +33 -44
  386. package/dist/context-CNIkMzot.mjs +849 -0
  387. package/dist/context-DNfcm853.mjs +184 -0
  388. package/dist/context-route-helpers-MurhoxWF.mjs +45 -0
  389. package/dist/context-types-C-LwdAxx.mjs +23 -0
  390. package/dist/cron-CKxvBrRT.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-BGEH5jfn.mjs +487 -0
  399. package/dist/email-console-CuefUXfX.mjs +36 -0
  400. package/dist/entity-aliases-C0v-yNET.mjs +51 -0
  401. package/dist/error-BMUPwxgx.mjs +435 -0
  402. package/dist/escape-BRVaw1Ai.mjs +8 -0
  403. package/dist/experimental-workflows-C9X7yblQ.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-ChT32Ilo.mjs +118 -0
  407. package/dist/hitl-route-helpers-CSit54Ru.mjs +96 -0
  408. package/dist/import-BHRLhXAn.mjs +1323 -0
  409. package/dist/import-CNcKWTbp.mjs +243 -0
  410. package/dist/index-CYfhYgXd.d.mts +227 -0
  411. package/dist/index-EUAWaIxW.d.mts +835 -0
  412. package/dist/index.d.mts +17 -11
  413. package/dist/index.mjs +63 -22
  414. package/dist/jsonld-D2gUY4kA.d.mts +141 -0
  415. package/dist/{loader-sMG4TZ-u.mjs → loader-PZnPxFLc.mjs} +42 -5
  416. package/dist/{manifest-schema-D1MSVnoI.mjs → manifest-schema-CgFJAp0H.mjs} +22 -10
  417. package/dist/media/index.d.mts +2 -1
  418. package/dist/media/index.mjs +2 -1
  419. package/dist/media/local-runtime.d.mts +12 -7
  420. package/dist/media/local-runtime.mjs +3 -3
  421. package/dist/{media-DMTr80Gv.mjs → media-_7Fxdu45.mjs} +1 -1
  422. package/dist/menus-DS3_5nWY.mjs +312 -0
  423. package/dist/menus-DYW_UHjv.mjs +256 -0
  424. package/dist/normalize-C49G_o1k.mjs +126 -0
  425. package/dist/oauth-authorization-DxGjiWKL.mjs +283 -0
  426. package/dist/oauth-clients-DxO_NO7k.mjs +298 -0
  427. package/dist/oauth-state-store-C5UFhzwD.mjs +48 -0
  428. package/dist/oauth-user-lookup-Bi0ek9eM.mjs +25 -0
  429. package/dist/options-z8VVg1Ll.mjs +114 -0
  430. package/dist/page/index.d.mts +2 -139
  431. package/dist/page/index.mjs +1 -427
  432. package/dist/parse-C9106ehs.mjs +88 -0
  433. package/dist/passkey-config-BRSZx4pW.mjs +42 -0
  434. package/dist/{patterns-CrCYkMBb.mjs → patterns-K0DLqWir.mjs} +53 -1
  435. package/dist/placeholder-Bh1dfUOd.d.mts +40 -0
  436. package/dist/{placeholder-Cp8g5Emj.mjs → placeholder-C2P5fKa4.mjs} +1 -126
  437. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -5
  438. package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
  439. package/dist/plugins-D7-ILNib.mjs +3249 -0
  440. package/dist/preview-DvYRU-Oy.mjs +788 -0
  441. package/dist/provider-loader-BiQ6lNmf.d.mts +20 -0
  442. package/dist/provider-loader-C21b9OpH.mjs +36 -0
  443. package/dist/public-url-Cun8N3NU.mjs +71 -0
  444. package/dist/{query-kDmwCsHh.mjs → query-B9BO5goQ.mjs} +93 -19
  445. package/dist/query-CsbOywSY.mjs +35 -0
  446. package/dist/rate-limit-DmVTHI5v.mjs +112 -0
  447. package/dist/{redirect-DnEWAkVg.mjs → redirect-CGl64yOX.mjs} +9 -5
  448. package/dist/redirect-COZy-3iY.mjs +16 -0
  449. package/dist/redirects-Cgi_cZfN.mjs +499 -0
  450. package/dist/redirects-lrlmYXVE.mjs +1023 -0
  451. package/dist/{registry-C0zjeB9P.mjs → registry-C-_hxLqa.mjs} +26 -294
  452. package/dist/request-meta-DixlNKKa.mjs +130 -0
  453. package/dist/review-requests-C2DIHwlJ.mjs +148 -0
  454. package/dist/review-requests-DIyjw-K_.mjs +79 -0
  455. package/dist/{runner-CFI6B6J2.d.mts → runner-BU6Lo1ZS.d.mts} +1 -1
  456. package/dist/{index-yvc6E_17.d.mts → runtime-Db4LbNVZ.d.mts} +1188 -2484
  457. package/dist/runtime.d.mts +11 -24
  458. package/dist/runtime.mjs +4 -38
  459. package/dist/schema-BECjUhP8.mjs +8 -0
  460. package/dist/search-DqTHQqtV.mjs +337 -0
  461. package/dist/secrets-CkoJ9zN0.mjs +160 -0
  462. package/dist/sections-B61OxnfB.mjs +338 -0
  463. package/dist/seed/index.d.mts +2 -2
  464. package/dist/seed/index.mjs +18 -13
  465. package/dist/seo/index.d.mts +1 -1
  466. package/dist/seo-C007Luwn.mjs +85 -0
  467. package/dist/seo-CUQctrog.mjs +129 -0
  468. package/dist/seo-contributions-B1fWCnqY.mjs +429 -0
  469. package/dist/service-CyOsm0R6.mjs +194 -0
  470. package/dist/settings-DGtLLSaz.mjs +237 -0
  471. package/dist/settings-Dzgswvg4.mjs +50 -0
  472. package/dist/setup-complete-ChilE-da.mjs +21 -0
  473. package/dist/setup-nonce-BpmLXAuu.mjs +17 -0
  474. package/dist/sidecar-client-B1C6Cf80.mjs +66 -0
  475. package/dist/site-activity-B8FjLIVh.mjs +104 -0
  476. package/dist/site-context-WBxoD99D.mjs +4122 -0
  477. package/dist/site-url-BP7k7OCe.mjs +12 -0
  478. package/dist/slugify-PDTDtMXp.mjs +30 -0
  479. package/dist/ssrf-DDwRxF6B.mjs +248 -0
  480. package/dist/storage/local.d.mts +1 -1
  481. package/dist/storage/local.mjs +1 -1
  482. package/dist/storage/s3.d.mts +1 -1
  483. package/dist/storage/s3.mjs +2 -2
  484. package/dist/{taxonomies-1s5PaS_8.mjs → taxonomies-D2aZGuns.mjs} +11 -7
  485. package/dist/taxonomies-z6Lz91BC.mjs +355 -0
  486. package/dist/taxonomy-D5cbhc8u.mjs +165 -0
  487. package/dist/{tokens-CJz9ubV6.mjs → tokens-BOJw-D9F.mjs} +1 -1
  488. package/dist/{transport-DB5eDN4x.mjs → transport-D3i4yWRE.mjs} +5 -4
  489. package/dist/trusted-proxy-BbaZfkT9.mjs +30 -0
  490. package/dist/types-0Vr68fc2.d.mts +344 -0
  491. package/dist/types-BFmjniC2.d.mts +165 -0
  492. package/dist/{types-BawVha09.mjs → types-Bs6lTBBW.mjs} +1 -1
  493. package/dist/{types-BuMDPy5C.d.mts → types-C0mmVRJN.d.mts} +6 -0
  494. package/dist/{placeholder--wOi4TbO.d.mts → types-OPs5Q_sX.d.mts} +1 -38
  495. package/dist/{types-Cj0KMIZV.d.mts → types-Q616b2Hn.d.mts} +54 -16
  496. package/dist/ui/client-runtime.d.mts +12 -0
  497. package/dist/ui/client-runtime.mjs +32 -0
  498. package/dist/ui/server-runtime.d.mts +33 -0
  499. package/dist/ui/server-runtime.mjs +80 -0
  500. package/dist/url-DNjT2abR.mjs +49 -0
  501. package/dist/user-CcXq-zoL.mjs +154 -0
  502. package/dist/utils-C0ONdBul.mjs +285 -0
  503. package/dist/{validate-IPf8n4Fj.d.mts → validate-BwmQEbu8.d.mts} +3 -3
  504. package/dist/{validate-BZ5wnLLp.mjs → validate-C7TzfamJ.mjs} +1 -1
  505. package/dist/version-D3vDb22n.mjs +6 -0
  506. package/dist/widgets-B7DRpZvy.mjs +104 -0
  507. package/dist/wordpress-slugs-CnporCYH.mjs +14 -0
  508. package/dist/zod-generator-DBVP8D0P.mjs +132 -0
  509. package/locals.d.ts +1 -6
  510. package/package.json +81 -11
  511. package/src/components/Button.astro +1 -1
  512. package/src/components/CommentForm.astro +1 -1
  513. package/src/components/Comments.astro +1 -3
  514. package/src/components/DinewayBodyEnd.astro +5 -3
  515. package/src/components/DinewayBodyStart.astro +5 -3
  516. package/src/components/DinewayHead.astro +15 -9
  517. package/src/components/DinewayImage.astro +12 -8
  518. package/src/components/DinewayMedia.astro +15 -6
  519. package/src/components/Embed.astro +1 -2
  520. package/src/components/File.astro +1 -1
  521. package/src/components/Gallery.astro +5 -3
  522. package/src/components/HtmlBlock.astro +1 -1
  523. package/src/components/Image.astro +9 -3
  524. package/src/components/InlinePortableTextEditor.tsx +69 -20
  525. package/src/components/PortableText.astro +1 -1
  526. package/src/components/WidgetArea.astro +1 -1
  527. package/src/components/WidgetRenderer.astro +1 -3
  528. package/src/components/marks/Link.astro +1 -1
  529. package/src/components/widgets/Archives.astro +1 -1
  530. package/src/components/widgets/Categories.astro +1 -1
  531. package/src/components/widgets/RecentPosts.astro +1 -1
  532. package/src/components/widgets/Tags.astro +1 -1
  533. package/dist/error-BmL6QipT.mjs +0 -30
  534. package/dist/search-DxopAWxs.mjs +0 -11200
  535. package/dist/version-BPz1imu2.mjs +0 -6
  536. package/src/astro/routes/PluginRegistry.tsx +0 -21
  537. package/src/astro/routes/api/admin/allowed-domains/[domain].ts +0 -112
  538. package/src/astro/routes/api/admin/allowed-domains/index.ts +0 -108
  539. package/src/astro/routes/api/admin/api-tokens/[id].ts +0 -44
  540. package/src/astro/routes/api/admin/api-tokens/index.ts +0 -90
  541. package/src/astro/routes/api/admin/briefing.ts +0 -76
  542. package/src/astro/routes/api/admin/bylines/[id]/index.ts +0 -90
  543. package/src/astro/routes/api/admin/bylines/index.ts +0 -74
  544. package/src/astro/routes/api/admin/comments/[id]/status.ts +0 -120
  545. package/src/astro/routes/api/admin/comments/[id].ts +0 -64
  546. package/src/astro/routes/api/admin/comments/bulk.ts +0 -42
  547. package/src/astro/routes/api/admin/comments/counts.ts +0 -30
  548. package/src/astro/routes/api/admin/comments/index.ts +0 -46
  549. package/src/astro/routes/api/admin/context/[id]/history.ts +0 -35
  550. package/src/astro/routes/api/admin/context/[id]/index.ts +0 -35
  551. package/src/astro/routes/api/admin/context/[id]/review.ts +0 -57
  552. package/src/astro/routes/api/admin/context/[id]/supersede.ts +0 -58
  553. package/src/astro/routes/api/admin/context/diff.ts +0 -35
  554. package/src/astro/routes/api/admin/context/index.ts +0 -69
  555. package/src/astro/routes/api/admin/context/stale.ts +0 -35
  556. package/src/astro/routes/api/admin/hitl-requests/[id]/index.ts +0 -38
  557. package/src/astro/routes/api/admin/hitl-requests/[id]/resolve.ts +0 -54
  558. package/src/astro/routes/api/admin/hitl-requests/index.ts +0 -38
  559. package/src/astro/routes/api/admin/hooks/exclusive/[hookName].ts +0 -132
  560. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +0 -51
  561. package/src/astro/routes/api/admin/oauth-clients/[id].ts +0 -137
  562. package/src/astro/routes/api/admin/oauth-clients/index.ts +0 -95
  563. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +0 -91
  564. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +0 -91
  565. package/src/astro/routes/api/admin/plugins/[id]/index.ts +0 -38
  566. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +0 -98
  567. package/src/astro/routes/api/admin/plugins/[id]/update.ts +0 -154
  568. package/src/astro/routes/api/admin/plugins/index.ts +0 -32
  569. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +0 -62
  570. package/src/astro/routes/api/admin/plugins/marketplace/[id]/index.ts +0 -33
  571. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +0 -135
  572. package/src/astro/routes/api/admin/plugins/marketplace/index.ts +0 -38
  573. package/src/astro/routes/api/admin/plugins/updates.ts +0 -28
  574. package/src/astro/routes/api/admin/review-requests/[id]/index.ts +0 -35
  575. package/src/astro/routes/api/admin/review-requests/[id]/resolve.ts +0 -52
  576. package/src/astro/routes/api/admin/review-requests/index.ts +0 -35
  577. package/src/astro/routes/api/admin/themes/marketplace/[id]/index.ts +0 -33
  578. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +0 -62
  579. package/src/astro/routes/api/admin/themes/marketplace/index.ts +0 -45
  580. package/src/astro/routes/api/admin/users/[id]/disable.ts +0 -72
  581. package/src/astro/routes/api/admin/users/[id]/enable.ts +0 -48
  582. package/src/astro/routes/api/admin/users/[id]/index.ts +0 -166
  583. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +0 -72
  584. package/src/astro/routes/api/admin/users/index.ts +0 -66
  585. package/src/astro/routes/api/auth/dev-bypass.ts +0 -139
  586. package/src/astro/routes/api/auth/invite/accept.ts +0 -52
  587. package/src/astro/routes/api/auth/invite/complete.ts +0 -86
  588. package/src/astro/routes/api/auth/invite/index.ts +0 -99
  589. package/src/astro/routes/api/auth/invite/register-options.ts +0 -73
  590. package/src/astro/routes/api/auth/logout.ts +0 -40
  591. package/src/astro/routes/api/auth/magic-link/send.ts +0 -90
  592. package/src/astro/routes/api/auth/magic-link/verify.ts +0 -71
  593. package/src/astro/routes/api/auth/me.ts +0 -60
  594. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +0 -221
  595. package/src/astro/routes/api/auth/oauth/[provider].ts +0 -120
  596. package/src/astro/routes/api/auth/passkey/[id].ts +0 -124
  597. package/src/astro/routes/api/auth/passkey/index.ts +0 -54
  598. package/src/astro/routes/api/auth/passkey/options.ts +0 -85
  599. package/src/astro/routes/api/auth/passkey/register/options.ts +0 -88
  600. package/src/astro/routes/api/auth/passkey/register/verify.ts +0 -119
  601. package/src/astro/routes/api/auth/passkey/verify.ts +0 -72
  602. package/src/astro/routes/api/auth/signup/complete.ts +0 -87
  603. package/src/astro/routes/api/auth/signup/request.ts +0 -89
  604. package/src/astro/routes/api/auth/signup/verify.ts +0 -53
  605. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +0 -310
  606. package/src/astro/routes/api/content/[collection]/[id]/compare.ts +0 -28
  607. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +0 -68
  608. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +0 -77
  609. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +0 -42
  610. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +0 -107
  611. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +0 -100
  612. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +0 -64
  613. package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +0 -31
  614. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +0 -129
  615. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +0 -143
  616. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +0 -50
  617. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +0 -69
  618. package/src/astro/routes/api/content/[collection]/[id].ts +0 -173
  619. package/src/astro/routes/api/content/[collection]/index.ts +0 -103
  620. package/src/astro/routes/api/content/[collection]/trash.ts +0 -33
  621. package/src/astro/routes/api/dashboard.ts +0 -32
  622. package/src/astro/routes/api/dev/emails.ts +0 -36
  623. package/src/astro/routes/api/health.ts +0 -54
  624. package/src/astro/routes/api/import/probe.ts +0 -47
  625. package/src/astro/routes/api/import/wordpress/analyze.ts +0 -523
  626. package/src/astro/routes/api/import/wordpress/execute.ts +0 -330
  627. package/src/astro/routes/api/import/wordpress/media.ts +0 -338
  628. package/src/astro/routes/api/import/wordpress/prepare.ts +0 -212
  629. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +0 -425
  630. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +0 -111
  631. package/src/astro/routes/api/import/wordpress-plugin/callback.ts +0 -58
  632. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +0 -399
  633. package/src/astro/routes/api/manifest.ts +0 -75
  634. package/src/astro/routes/api/mcp.ts +0 -125
  635. package/src/astro/routes/api/media/[id]/confirm.ts +0 -93
  636. package/src/astro/routes/api/media/[id].ts +0 -145
  637. package/src/astro/routes/api/media/file/[...key].ts +0 -79
  638. package/src/astro/routes/api/media/providers/[providerId]/[itemId].ts +0 -91
  639. package/src/astro/routes/api/media/providers/[providerId]/index.ts +0 -111
  640. package/src/astro/routes/api/media/providers/index.ts +0 -30
  641. package/src/astro/routes/api/media/upload-url.ts +0 -146
  642. package/src/astro/routes/api/media.ts +0 -204
  643. package/src/astro/routes/api/menus/[name]/items.ts +0 -206
  644. package/src/astro/routes/api/menus/[name]/reorder.ts +0 -79
  645. package/src/astro/routes/api/menus/[name].ts +0 -145
  646. package/src/astro/routes/api/menus/index.ts +0 -91
  647. package/src/astro/routes/api/oauth/authorize.ts +0 -430
  648. package/src/astro/routes/api/oauth/device/authorize.ts +0 -45
  649. package/src/astro/routes/api/oauth/device/code.ts +0 -56
  650. package/src/astro/routes/api/oauth/device/token.ts +0 -70
  651. package/src/astro/routes/api/oauth/register.ts +0 -182
  652. package/src/astro/routes/api/oauth/token/refresh.ts +0 -38
  653. package/src/astro/routes/api/oauth/token/revoke.ts +0 -38
  654. package/src/astro/routes/api/oauth/token.ts +0 -195
  655. package/src/astro/routes/api/openapi.json.ts +0 -33
  656. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +0 -109
  657. package/src/astro/routes/api/redirects/404s/index.ts +0 -72
  658. package/src/astro/routes/api/redirects/404s/summary.ts +0 -33
  659. package/src/astro/routes/api/redirects/[id].ts +0 -183
  660. package/src/astro/routes/api/redirects/index.ts +0 -100
  661. package/src/astro/routes/api/revisions/[revisionId]/index.ts +0 -29
  662. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +0 -62
  663. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +0 -104
  664. package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +0 -67
  665. package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +0 -45
  666. package/src/astro/routes/api/schema/collections/[slug]/index.ts +0 -107
  667. package/src/astro/routes/api/schema/collections/index.ts +0 -61
  668. package/src/astro/routes/api/schema/index.ts +0 -109
  669. package/src/astro/routes/api/schema/orphans/[slug].ts +0 -36
  670. package/src/astro/routes/api/schema/orphans/index.ts +0 -26
  671. package/src/astro/routes/api/search/enable.ts +0 -64
  672. package/src/astro/routes/api/search/index.ts +0 -52
  673. package/src/astro/routes/api/search/rebuild.ts +0 -72
  674. package/src/astro/routes/api/search/stats.ts +0 -35
  675. package/src/astro/routes/api/search/suggest.ts +0 -50
  676. package/src/astro/routes/api/sections/[slug].ts +0 -203
  677. package/src/astro/routes/api/sections/index.ts +0 -107
  678. package/src/astro/routes/api/settings/email.ts +0 -150
  679. package/src/astro/routes/api/settings.ts +0 -116
  680. package/src/astro/routes/api/setup/admin-verify.ts +0 -122
  681. package/src/astro/routes/api/setup/admin.ts +0 -104
  682. package/src/astro/routes/api/setup/dev-bypass.ts +0 -200
  683. package/src/astro/routes/api/setup/dev-reset.ts +0 -40
  684. package/src/astro/routes/api/setup/index.ts +0 -128
  685. package/src/astro/routes/api/setup/status.ts +0 -122
  686. package/src/astro/routes/api/snapshot.ts +0 -76
  687. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +0 -232
  688. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +0 -131
  689. package/src/astro/routes/api/taxonomies/index.ts +0 -114
  690. package/src/astro/routes/api/themes/preview.ts +0 -78
  691. package/src/astro/routes/api/typegen.ts +0 -114
  692. package/src/astro/routes/api/well-known/auth.ts +0 -71
  693. package/src/astro/routes/api/well-known/oauth-authorization-server.ts +0 -48
  694. package/src/astro/routes/api/well-known/oauth-protected-resource.ts +0 -39
  695. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +0 -114
  696. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +0 -213
  697. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +0 -126
  698. package/src/astro/routes/api/widget-areas/[name].ts +0 -135
  699. package/src/astro/routes/api/widget-areas/index.ts +0 -149
  700. package/src/astro/routes/api/widget-components.ts +0 -22
  701. package/src/astro/routes/robots.txt.ts +0 -81
  702. package/src/astro/routes/sitemap-[collection].xml.ts +0 -104
  703. package/src/astro/routes/sitemap.xml.ts +0 -92
  704. /package/dist/{adapters-C2ypTrZZ.d.mts → adapters-DuLQZhRY.d.mts} +0 -0
  705. /package/{src → dist}/astro/routes/admin.astro +0 -0
  706. /package/dist/{base64-F8-DUraK.mjs → base64-Cz-aU0X1.mjs} +0 -0
  707. /package/dist/{chunks--4F8ddV4.mjs → chunks-D_jVet6z.mjs} +0 -0
  708. /package/dist/{config-BXwuX8Bx.mjs → config-CAMFxGaV.mjs} +0 -0
  709. /package/dist/{db-errors-CEqD7qH9.mjs → db-errors-DyZkswzF.mjs} +0 -0
  710. /package/dist/{default-VjJyuuG9.mjs → default-D4ngTpW8.mjs} +0 -0
  711. /package/dist/{load-Coc9HpHH.mjs → load-B2XtDw__.mjs} +0 -0
  712. /package/dist/{mode-47goXBBK.mjs → mode-DUhxwUhv.mjs} +0 -0
  713. /package/dist/{request-cache-Dk5qPSOx.mjs → request-cache-DHMRr2Lf.mjs} +0 -0
  714. /package/dist/{transaction-Cn2rjY78.mjs → transaction-x2tJQ-A1.mjs} +0 -0
  715. /package/dist/{transport-Wge_IzKl.d.mts → transport-BXe1AM79.d.mts} +0 -0
  716. /package/dist/{types-CWbdtiux.d.mts → types-B7kpsMJ3.d.mts} +0 -0
  717. /package/dist/{types-BzcUjoqg.d.mts → types-DJlpx5Ay.d.mts} +0 -0
  718. /package/dist/{types-COeOq9nK.mjs → types-DL7Y8D_t.mjs} +0 -0
  719. /package/dist/{types-DOrVigru.d.mts → types-DZPw8Rru.d.mts} +0 -0
  720. /package/dist/{types-griIBQOQ.mjs → types-fAInWQDO.mjs} +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-DDwRxF6B.mjs";
11
+ import { t as CronAccessImpl } from "./cron-CKxvBrRT.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 };