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
@@ -1,693 +1,19 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
- import { r as RevisionRepository, t as ContentRepository } from "./content-DWi4d0rT.mjs";
3
- import { t as MediaRepository } from "./media-DMTr80Gv.mjs";
4
- import { t as withTransaction } from "./transaction-Cn2rjY78.mjs";
5
- import { t as RedirectRepository } from "./redirect-DnEWAkVg.mjs";
6
- import { t as BylineRepository } from "./byline-OhH2dlRu.mjs";
7
- import { i as FTSManager, n as SchemaRegistry } from "./registry-C0zjeB9P.mjs";
8
- import { n as getDb } from "./loader-sMG4TZ-u.mjs";
9
- import { n as requestCached, t as peekRequestCache } from "./request-cache-Dk5qPSOx.mjs";
10
- import { t as validateSeed } from "./validate-BZ5wnLLp.mjs";
11
- import { sql } from "kysely";
2
+ import { r as RevisionRepository, t as ContentRepository } from "./content-CyLkb-qH.mjs";
3
+ import { t as MediaRepository } from "./media-_7Fxdu45.mjs";
4
+ import { t as TaxonomyRepository } from "./taxonomy-D5cbhc8u.mjs";
5
+ import { t as withTransaction } from "./transaction-x2tJQ-A1.mjs";
6
+ import { t as RedirectRepository } from "./redirect-CGl64yOX.mjs";
7
+ import { t as BylineRepository } from "./byline-naZxOPSa.mjs";
8
+ import { t as FTSManager } from "./fts-manager-B1pTNEG_.mjs";
9
+ import { n as SchemaRegistry } from "./registry-C-_hxLqa.mjs";
10
+ import { o as setSiteSettings } from "./settings-4XnpVMOS.mjs";
11
+ import { a as validateExternalUrl, r as ssrfSafeFetch } from "./ssrf-CmM76lLV.mjs";
12
+ import { t as validateSeed } from "./validate-BJgA6TW_.mjs";
12
13
  import { ulid } from "ulidx";
13
14
  import { imageSize } from "image-size";
14
- import { lookup } from "node:dns/promises";
15
15
  import mime from "mime/lite";
16
16
 
17
- //#region src/database/repositories/taxonomy.ts
18
- /**
19
- * Taxonomy repository for categories, tags, and other classification
20
- *
21
- * Taxonomies are hierarchical (via parentId) and can be attached to content entries.
22
- */
23
- var TaxonomyRepository = class {
24
- constructor(db) {
25
- this.db = db;
26
- }
27
- /**
28
- * Create a new taxonomy term
29
- */
30
- async create(input) {
31
- const id = ulid();
32
- const row = {
33
- id,
34
- name: input.name,
35
- slug: input.slug,
36
- label: input.label,
37
- parent_id: input.parentId ?? null,
38
- data: input.data ? JSON.stringify(input.data) : null
39
- };
40
- await this.db.insertInto("taxonomies").values(row).execute();
41
- const taxonomy = await this.findById(id);
42
- if (!taxonomy) throw new Error("Failed to create taxonomy");
43
- return taxonomy;
44
- }
45
- /**
46
- * Find taxonomy by ID
47
- */
48
- async findById(id) {
49
- const row = await this.db.selectFrom("taxonomies").selectAll().where("id", "=", id).executeTakeFirst();
50
- return row ? this.rowToTaxonomy(row) : null;
51
- }
52
- /**
53
- * Find taxonomy by name and slug (unique constraint)
54
- */
55
- async findBySlug(name, slug) {
56
- const row = await this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("slug", "=", slug).executeTakeFirst();
57
- return row ? this.rowToTaxonomy(row) : null;
58
- }
59
- /**
60
- * Get all terms for a taxonomy (e.g., all categories)
61
- */
62
- async findByName(name, options = {}) {
63
- let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).orderBy("label", "asc");
64
- if (options.parentId !== void 0) if (options.parentId === null) query = query.where("parent_id", "is", null);
65
- else query = query.where("parent_id", "=", options.parentId);
66
- return (await query.execute()).map((row) => this.rowToTaxonomy(row));
67
- }
68
- /**
69
- * Get children of a taxonomy term
70
- */
71
- async findChildren(parentId) {
72
- return (await this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", parentId).orderBy("label", "asc").execute()).map((row) => this.rowToTaxonomy(row));
73
- }
74
- /**
75
- * Update a taxonomy term
76
- */
77
- async update(id, input) {
78
- if (!await this.findById(id)) return null;
79
- const updates = {};
80
- if (input.slug !== void 0) updates.slug = input.slug;
81
- if (input.label !== void 0) updates.label = input.label;
82
- if (input.parentId !== void 0) updates.parent_id = input.parentId;
83
- if (input.data !== void 0) updates.data = JSON.stringify(input.data);
84
- if (Object.keys(updates).length > 0) await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
85
- return this.findById(id);
86
- }
87
- /**
88
- * Delete a taxonomy term
89
- */
90
- async delete(id) {
91
- await this.db.deleteFrom("content_taxonomies").where("taxonomy_id", "=", id).execute();
92
- return ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0) > 0;
93
- }
94
- /**
95
- * Attach a taxonomy term to a content entry
96
- */
97
- async attachToEntry(collection, entryId, taxonomyId) {
98
- const row = {
99
- collection,
100
- entry_id: entryId,
101
- taxonomy_id: taxonomyId
102
- };
103
- await this.db.insertInto("content_taxonomies").values(row).onConflict((oc) => oc.doNothing()).execute();
104
- }
105
- /**
106
- * Detach a taxonomy term from a content entry
107
- */
108
- async detachFromEntry(collection, entryId, taxonomyId) {
109
- await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", taxonomyId).execute();
110
- }
111
- /**
112
- * Get all taxonomy terms for a content entry
113
- */
114
- async getTermsForEntry(collection, entryId, taxonomyName) {
115
- let query = this.db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.id", "content_taxonomies.taxonomy_id").selectAll("taxonomies").where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId);
116
- if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
117
- return (await query.execute()).map((row) => this.rowToTaxonomy(row));
118
- }
119
- /**
120
- * Set all taxonomy terms for a content entry (replaces existing)
121
- * Uses batch operations to avoid N+1 queries.
122
- */
123
- async setTermsForEntry(collection, entryId, taxonomyName, taxonomyIds) {
124
- const current = await this.getTermsForEntry(collection, entryId, taxonomyName);
125
- const currentIds = new Set(current.map((t) => t.id));
126
- const newIds = new Set(taxonomyIds);
127
- const toRemove = current.filter((t) => !newIds.has(t.id)).map((t) => t.id);
128
- if (toRemove.length > 0) await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", toRemove).execute();
129
- const toAdd = taxonomyIds.filter((id) => !currentIds.has(id));
130
- if (toAdd.length > 0) await this.db.insertInto("content_taxonomies").values(toAdd.map((taxonomy_id) => ({
131
- collection,
132
- entry_id: entryId,
133
- taxonomy_id
134
- }))).onConflict((oc) => oc.doNothing()).execute();
135
- }
136
- /**
137
- * Remove all taxonomy associations for an entry (use when entry is deleted)
138
- */
139
- async clearEntryTerms(collection, entryId) {
140
- const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
141
- return Number(result.numDeletedRows ?? 0);
142
- }
143
- /**
144
- * Count entries that have a specific taxonomy term
145
- */
146
- async countEntriesWithTerm(taxonomyId) {
147
- const result = await this.db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", taxonomyId).executeTakeFirst();
148
- return Number(result?.count || 0);
149
- }
150
- /**
151
- * Convert database row to Taxonomy object
152
- */
153
- rowToTaxonomy(row) {
154
- return {
155
- id: row.id,
156
- name: row.name,
157
- slug: row.slug,
158
- label: row.label,
159
- parentId: row.parent_id,
160
- data: row.data ? JSON.parse(row.data) : null
161
- };
162
- }
163
- };
164
-
165
- //#endregion
166
- //#region src/database/repositories/options.ts
167
- function escapeLike(value) {
168
- return value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
169
- }
170
- /**
171
- * Options repository for key-value settings storage
172
- *
173
- * Used for site settings, plugin configuration, and other arbitrary key-value data.
174
- * Values are stored as JSON for flexibility.
175
- */
176
- var OptionsRepository = class {
177
- constructor(db) {
178
- this.db = db;
179
- }
180
- /**
181
- * Get an option value
182
- */
183
- async get(name) {
184
- const row = await this.db.selectFrom("options").select("value").where("name", "=", name).executeTakeFirst();
185
- if (!row) return null;
186
- return JSON.parse(row.value);
187
- }
188
- /**
189
- * Get an option value with a default
190
- */
191
- async getOrDefault(name, defaultValue) {
192
- return await this.get(name) ?? defaultValue;
193
- }
194
- /**
195
- * Set an option value (creates or updates)
196
- */
197
- async set(name, value) {
198
- const row = {
199
- name,
200
- value: JSON.stringify(value)
201
- };
202
- await this.db.insertInto("options").values(row).onConflict((oc) => oc.column("name").doUpdateSet({ value: row.value })).execute();
203
- }
204
- /**
205
- * Set an option value only if no row with that name exists.
206
- *
207
- * Returns true when the row was inserted, false when a row already existed,
208
- * regardless of its value.
209
- */
210
- async setIfAbsent(name, value) {
211
- const row = {
212
- name,
213
- value: JSON.stringify(value)
214
- };
215
- return ((await this.db.insertInto("options").values(row).onConflict((oc) => oc.column("name").doNothing()).executeTakeFirst()).numInsertedOrUpdatedRows ?? 0n) > 0n;
216
- }
217
- /**
218
- * Delete an option
219
- */
220
- async delete(name) {
221
- return ((await this.db.deleteFrom("options").where("name", "=", name).executeTakeFirst()).numDeletedRows ?? 0) > 0;
222
- }
223
- /**
224
- * Check if an option exists
225
- */
226
- async exists(name) {
227
- return !!await this.db.selectFrom("options").select("name").where("name", "=", name).executeTakeFirst();
228
- }
229
- /**
230
- * Get multiple options at once
231
- */
232
- async getMany(names) {
233
- if (names.length === 0) return /* @__PURE__ */ new Map();
234
- const rows = await this.db.selectFrom("options").select(["name", "value"]).where("name", "in", names).execute();
235
- const result = /* @__PURE__ */ new Map();
236
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
237
- return result;
238
- }
239
- /**
240
- * Set multiple options at once
241
- */
242
- async setMany(options) {
243
- const entries = Object.entries(options);
244
- if (entries.length === 0) return;
245
- for (const [name, value] of entries) await this.set(name, value);
246
- }
247
- /**
248
- * Get all options (use sparingly)
249
- */
250
- async getAll() {
251
- const rows = await this.db.selectFrom("options").select(["name", "value"]).execute();
252
- const result = /* @__PURE__ */ new Map();
253
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
254
- return result;
255
- }
256
- /**
257
- * Get all options matching a prefix
258
- */
259
- async getByPrefix(prefix) {
260
- const pattern = `${escapeLike(prefix)}%`;
261
- const rows = await this.db.selectFrom("options").select(["name", "value"]).where(sql`name LIKE ${pattern} ESCAPE '\\'`).execute();
262
- const result = /* @__PURE__ */ new Map();
263
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
264
- return result;
265
- }
266
- /**
267
- * Delete all options matching a prefix
268
- */
269
- async deleteByPrefix(prefix) {
270
- const pattern = `${escapeLike(prefix)}%`;
271
- const result = await this.db.deleteFrom("options").where(sql`name LIKE ${pattern} ESCAPE '\\'`).executeTakeFirst();
272
- return Number(result.numDeletedRows ?? 0);
273
- }
274
- };
275
-
276
- //#endregion
277
- //#region src/settings/index.ts
278
- /** Prefix for site settings in the options table */
279
- const SETTINGS_PREFIX = "site:";
280
- /**
281
- * Type guard for MediaReference values
282
- */
283
- function isMediaReference(value) {
284
- return typeof value === "object" && value !== null && "mediaId" in value;
285
- }
286
- /**
287
- * Resolve a media reference to include the full URL
288
- */
289
- async function resolveMediaReference(mediaRef, db, _storage) {
290
- if (!mediaRef?.mediaId) return mediaRef;
291
- try {
292
- const media = await new MediaRepository(db).findById(mediaRef.mediaId);
293
- if (media) return {
294
- ...mediaRef,
295
- url: `/_dineway/api/media/file/${media.storageKey}`
296
- };
297
- } catch {}
298
- return mediaRef;
299
- }
300
- /**
301
- * Get a single site setting by key
302
- *
303
- * Returns `undefined` if the setting has not been configured.
304
- * For media settings (logo, favicon), the URL is resolved automatically.
305
- *
306
- * @param key - The setting key (e.g., "title", "logo", "social")
307
- * @returns The setting value, or undefined if not set
308
- *
309
- * @example
310
- * ```ts
311
- * import { getSiteSetting } from "dineway";
312
- *
313
- * const title = await getSiteSetting("title");
314
- * const logo = await getSiteSetting("logo");
315
- * console.log(logo?.url); // Resolved URL
316
- * ```
317
- */
318
- async function getSiteSetting(key) {
319
- const primed = peekRequestCache("siteSettings");
320
- if (primed) return (await primed)[key];
321
- return requestCached(`siteSetting:${key}`, async () => {
322
- return getSiteSettingWithDb(key, await getDb());
323
- });
324
- }
325
- /**
326
- * Get a single site setting by key (with explicit db)
327
- *
328
- * @internal Use `getSiteSetting()` in templates. This variant is for admin routes
329
- * that already have a database handle.
330
- */
331
- async function getSiteSettingWithDb(key, db, storage = null) {
332
- const value = await new OptionsRepository(db).get(`${SETTINGS_PREFIX}${key}`);
333
- if (!value) return;
334
- if ((key === "logo" || key === "favicon") && isMediaReference(value)) return await resolveMediaReference(value, db, storage);
335
- return value;
336
- }
337
- /**
338
- * Get all site settings
339
- *
340
- * Returns all configured settings. Unset values are undefined.
341
- * Media references (logo/favicon) are resolved to include URLs.
342
- *
343
- * @example
344
- * ```ts
345
- * import { getSiteSettings } from "dineway";
346
- *
347
- * const settings = await getSiteSettings();
348
- * console.log(settings.title); // "My Site"
349
- * console.log(settings.logo?.url); // "/_dineway/api/media/file/abc123"
350
- * ```
351
- */
352
- async function getSiteSettings() {
353
- return requestCached("siteSettings", async () => {
354
- return getSiteSettingsWithDb(await getDb());
355
- });
356
- }
357
- /**
358
- * Get all site settings (with explicit db)
359
- *
360
- * @internal Use `getSiteSettings()` in templates. This variant is for admin routes
361
- * that already have a database handle.
362
- */
363
- async function getSiteSettingsWithDb(db, storage = null) {
364
- const allOptions = await new OptionsRepository(db).getByPrefix(SETTINGS_PREFIX);
365
- const settings = {};
366
- for (const [key, value] of allOptions) {
367
- const settingKey = key.replace(SETTINGS_PREFIX, "");
368
- settings[settingKey] = value;
369
- }
370
- const typedSettings = settings;
371
- if (typedSettings.logo) typedSettings.logo = await resolveMediaReference(typedSettings.logo, db, storage);
372
- if (typedSettings.favicon) typedSettings.favicon = await resolveMediaReference(typedSettings.favicon, db, storage);
373
- return typedSettings;
374
- }
375
- /**
376
- * Set site settings (internal function used by admin API)
377
- *
378
- * Merges provided settings with existing ones. Only provided fields are updated.
379
- * Media references should include just the mediaId; URLs are resolved on read.
380
- *
381
- * @param settings - Partial settings object with values to update
382
- * @param db - Kysely database instance
383
- * @returns Promise that resolves when settings are saved
384
- *
385
- * @internal
386
- *
387
- * @example
388
- * ```ts
389
- * // Update multiple settings at once
390
- * await setSiteSettings({
391
- * title: "My Site",
392
- * tagline: "Welcome",
393
- * logo: { mediaId: "med_123", alt: "Logo" }
394
- * }, db);
395
- * ```
396
- */
397
- async function setSiteSettings(settings, db) {
398
- const options = new OptionsRepository(db);
399
- const updates = {};
400
- for (const [key, value] of Object.entries(settings)) if (value !== void 0) updates[`${SETTINGS_PREFIX}${key}`] = value;
401
- await options.setMany(updates);
402
- }
403
- /**
404
- * Get a single plugin setting by key.
405
- *
406
- * Plugin settings are stored in the options table under
407
- * `plugin:<pluginId>:settings:<key>`.
408
- */
409
- async function getPluginSetting(pluginId, key) {
410
- return getPluginSettingWithDb(pluginId, key, await getDb());
411
- }
412
- /**
413
- * Get a single plugin setting by key (with explicit db).
414
- *
415
- * @internal Use `getPluginSetting()` in templates and plugin rendering code.
416
- */
417
- async function getPluginSettingWithDb(pluginId, key, db) {
418
- return await new OptionsRepository(db).get(`plugin:${pluginId}:settings:${key}`) ?? void 0;
419
- }
420
- /**
421
- * Get all persisted plugin settings for a plugin.
422
- *
423
- * Defaults declared in `admin.settingsSchema` are not materialized
424
- * automatically; callers should apply their own fallback defaults.
425
- */
426
- async function getPluginSettings(pluginId) {
427
- return getPluginSettingsWithDb(pluginId, await getDb());
428
- }
429
- /**
430
- * Get all persisted plugin settings for a plugin (with explicit db).
431
- *
432
- * @internal Use `getPluginSettings()` in templates and plugin rendering code.
433
- */
434
- async function getPluginSettingsWithDb(pluginId, db) {
435
- const prefix = `plugin:${pluginId}:settings:`;
436
- const allOptions = await new OptionsRepository(db).getByPrefix(prefix);
437
- const settings = {};
438
- for (const [key, value] of allOptions) {
439
- if (!key.startsWith(prefix)) continue;
440
- settings[key.slice(prefix.length)] = value;
441
- }
442
- return settings;
443
- }
444
-
445
- //#endregion
446
- //#region src/import/ssrf.ts
447
- /**
448
- * SSRF protection for import URLs.
449
- *
450
- * Validates that URLs don't target internal/private network addresses.
451
- * Applied before any fetch() call in the import pipeline.
452
- */
453
- const IPV4_MAPPED_IPV6_DOTTED_PATTERN = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/i;
454
- const IPV4_MAPPED_IPV6_HEX_PATTERN = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i;
455
- const IPV4_TRANSLATED_HEX_PATTERN = /^::ffff:0:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i;
456
- const IPV6_EXPANDED_MAPPED_PATTERN = /^0{0,4}:0{0,4}:0{0,4}:0{0,4}:0{0,4}:ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i;
457
- const IPV6_ULA_FC_PATTERN = /^fc[0-9a-f]{2}:/;
458
- const IPV6_ULA_FD_PATTERN = /^fd[0-9a-f]{2}:/;
459
- const TRAILING_DOT_PATTERN = /\.+$/;
460
- /**
461
- * IPv4-compatible (deprecated) addresses: ::XXXX:XXXX
462
- *
463
- * The WHATWG URL parser normalizes [::127.0.0.1] to [::7f00:1] (no ffff prefix).
464
- * These are deprecated but still parsed, and bypass the ffff-based checks.
465
- */
466
- const IPV4_COMPATIBLE_HEX_PATTERN = /^::([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i;
467
- /**
468
- * NAT64 prefix (RFC 6052): 64:ff9b::XXXX:XXXX
469
- *
470
- * Used by NAT64 gateways to embed IPv4 addresses in IPv6.
471
- * [64:ff9b::127.0.0.1] normalizes to [64:ff9b::7f00:1].
472
- */
473
- const NAT64_HEX_PATTERN = /^64:ff9b::([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i;
474
- const IPV6_BRACKET_PATTERN = /^\[|\]$/g;
475
- /**
476
- * Private and reserved IP ranges that should never be fetched.
477
- *
478
- * Includes:
479
- * - Loopback (127.0.0.0/8)
480
- * - Private (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
481
- * - Link-local (169.254.0.0/16)
482
- * - Cloud metadata (169.254.169.254 — AWS/GCP/Azure)
483
- * - IPv6 loopback and link-local
484
- */
485
- const BLOCKED_PATTERNS = [
486
- {
487
- start: ip4ToNum(127, 0, 0, 0),
488
- end: ip4ToNum(127, 255, 255, 255)
489
- },
490
- {
491
- start: ip4ToNum(10, 0, 0, 0),
492
- end: ip4ToNum(10, 255, 255, 255)
493
- },
494
- {
495
- start: ip4ToNum(172, 16, 0, 0),
496
- end: ip4ToNum(172, 31, 255, 255)
497
- },
498
- {
499
- start: ip4ToNum(192, 168, 0, 0),
500
- end: ip4ToNum(192, 168, 255, 255)
501
- },
502
- {
503
- start: ip4ToNum(169, 254, 0, 0),
504
- end: ip4ToNum(169, 254, 255, 255)
505
- },
506
- {
507
- start: ip4ToNum(0, 0, 0, 0),
508
- end: ip4ToNum(0, 255, 255, 255)
509
- }
510
- ];
511
- const BLOCKED_HOSTNAMES = new Set([
512
- "localhost",
513
- "metadata.google.internal",
514
- "metadata.google",
515
- "::1"
516
- ]);
517
- const BLOCKED_HOSTNAME_SUFFIXES = [
518
- "nip.io",
519
- "sslip.io",
520
- "xip.io",
521
- "traefik.me",
522
- "lvh.me",
523
- "localtest.me"
524
- ];
525
- /** Blocked URL schemes */
526
- const ALLOWED_SCHEMES = new Set(["http:", "https:"]);
527
- let defaultDnsResolver = null;
528
- function ip4ToNum(a, b, c, d) {
529
- return (a << 24 | b << 16 | c << 8 | d) >>> 0;
530
- }
531
- function parseIpv4(ip) {
532
- const parts = ip.split(".");
533
- if (parts.length !== 4) return null;
534
- const nums = parts.map(Number);
535
- if (nums.some((n) => isNaN(n) || n < 0 || n > 255)) return null;
536
- return ip4ToNum(nums[0], nums[1], nums[2], nums[3]);
537
- }
538
- function getNormalizedHostname(parsed) {
539
- return parsed.hostname.replace(IPV6_BRACKET_PATTERN, "").toLowerCase().replace(TRAILING_DOT_PATTERN, "");
540
- }
541
- /**
542
- * Convert IPv4-mapped/translated IPv6 addresses from hex form back to IPv4.
543
- *
544
- * The WHATWG URL parser normalizes dotted-decimal to hex:
545
- * [::ffff:127.0.0.1] -> [::ffff:7f00:1]
546
- * [::ffff:169.254.169.254] -> [::ffff:a9fe:a9fe]
547
- *
548
- * Without this conversion, the hex forms bypass isPrivateIp() regex checks.
549
- */
550
- function normalizeIPv6MappedToIPv4(ip) {
551
- let match = ip.match(IPV4_MAPPED_IPV6_HEX_PATTERN);
552
- if (!match) match = ip.match(IPV4_TRANSLATED_HEX_PATTERN);
553
- if (!match) match = ip.match(IPV6_EXPANDED_MAPPED_PATTERN);
554
- if (!match) match = ip.match(IPV4_COMPATIBLE_HEX_PATTERN);
555
- if (!match) match = ip.match(NAT64_HEX_PATTERN);
556
- if (match) {
557
- const high = parseInt(match[1] ?? "", 16);
558
- const low = parseInt(match[2] ?? "", 16);
559
- return `${high >> 8 & 255}.${high & 255}.${low >> 8 & 255}.${low & 255}`;
560
- }
561
- return null;
562
- }
563
- function isPrivateIp(ip) {
564
- const normalized = ip.toLowerCase();
565
- if (normalized === "::1" || normalized === "::ffff:127.0.0.1") return true;
566
- const hexIpv4 = normalizeIPv6MappedToIPv4(normalized);
567
- if (hexIpv4) return isPrivateIp(hexIpv4);
568
- const v4Match = normalized.match(IPV4_MAPPED_IPV6_DOTTED_PATTERN);
569
- const num = parseIpv4(v4Match ? v4Match[1] : normalized);
570
- if (num === null) return normalized.startsWith("fe80:") || IPV6_ULA_FC_PATTERN.test(normalized) || IPV6_ULA_FD_PATTERN.test(normalized);
571
- return BLOCKED_PATTERNS.some((range) => num >= range.start && num <= range.end);
572
- }
573
- function isIpLiteral(hostname) {
574
- return parseIpv4(hostname) !== null || hostname.includes(":");
575
- }
576
- /**
577
- * Error thrown when SSRF protection blocks a URL.
578
- */
579
- var SsrfError = class extends Error {
580
- code = "SSRF_BLOCKED";
581
- constructor(message) {
582
- super(message);
583
- this.name = "SsrfError";
584
- }
585
- };
586
- /**
587
- * Validate that a URL is safe to fetch (not targeting internal networks).
588
- *
589
- * Checks:
590
- * 1. URL is well-formed with http/https scheme
591
- * 2. Hostname is not a known internal name (localhost, metadata endpoints)
592
- * 3. If hostname is an IP literal, it's not in a private range
593
- *
594
- * Use resolveAndValidateExternalUrl() or ssrfSafeFetch() before network I/O so
595
- * hostnames are also checked after DNS resolution.
596
- *
597
- * @throws SsrfError if the URL targets an internal address
598
- */
599
- /** Maximum number of redirects to follow in ssrfSafeFetch */
600
- const MAX_REDIRECTS = 5;
601
- function validateExternalUrl(url) {
602
- let parsed;
603
- try {
604
- parsed = new URL(url);
605
- } catch {
606
- throw new SsrfError("Invalid URL");
607
- }
608
- if (!ALLOWED_SCHEMES.has(parsed.protocol)) throw new SsrfError(`Scheme '${parsed.protocol}' is not allowed`);
609
- const hostname = getNormalizedHostname(parsed);
610
- if (BLOCKED_HOSTNAMES.has(hostname)) throw new SsrfError("URLs targeting internal hosts are not allowed");
611
- for (const suffix of BLOCKED_HOSTNAME_SUFFIXES) if (hostname === suffix || hostname.endsWith(`.${suffix}`)) throw new SsrfError("URLs targeting wildcard DNS services are not allowed");
612
- if (isPrivateIp(hostname)) throw new SsrfError("URLs targeting private IP addresses are not allowed");
613
- return parsed;
614
- }
615
- const nodeDnsResolver = async (hostname) => {
616
- return (await lookup(hostname, { all: true })).map((entry) => entry.address);
617
- };
618
- /**
619
- * Validate a URL and resolve hostnames before network I/O.
620
- *
621
- * Fails closed if DNS resolution fails, returns no addresses, or any resolved
622
- * address targets a private/internal range.
623
- */
624
- async function resolveAndValidateExternalUrl(url, options = {}) {
625
- const parsed = validateExternalUrl(url);
626
- const hostname = getNormalizedHostname(parsed);
627
- if (isIpLiteral(hostname)) return parsed;
628
- const resolver = options.resolver ?? defaultDnsResolver ?? nodeDnsResolver;
629
- let addresses;
630
- try {
631
- addresses = await resolver(hostname);
632
- } catch {
633
- throw new SsrfError(`Could not resolve hostname: ${hostname}`);
634
- }
635
- if (addresses.length === 0) throw new SsrfError("Hostname resolved to no addresses");
636
- for (const address of addresses) {
637
- const normalizedAddress = address.replace(IPV6_BRACKET_PATTERN, "").toLowerCase();
638
- if (!isIpLiteral(normalizedAddress)) throw new SsrfError("Hostname resolved to an invalid address");
639
- if (isPrivateIp(normalizedAddress)) throw new SsrfError("Hostname resolves to a private IP address");
640
- }
641
- return parsed;
642
- }
643
- /**
644
- * Fetch a URL with SSRF protection on redirects.
645
- *
646
- * Uses `redirect: "manual"` to intercept redirects and re-validate each
647
- * redirect target against SSRF rules before following it. This prevents
648
- * an attacker from setting up an allowed external URL that redirects to
649
- * an internal IP (e.g. 169.254.169.254 for cloud metadata).
650
- *
651
- * @throws SsrfError if the initial URL or any redirect target is internal
652
- */
653
- /** Headers that must be stripped when a redirect crosses origins */
654
- const CREDENTIAL_HEADERS = [
655
- "authorization",
656
- "cookie",
657
- "proxy-authorization"
658
- ];
659
- async function ssrfSafeFetch(url, init, options = {}) {
660
- let currentUrl = url;
661
- let currentInit = init;
662
- for (let i = 0; i <= MAX_REDIRECTS; i++) {
663
- await resolveAndValidateExternalUrl(currentUrl, options);
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 SsrfError(`Too many redirects (max ${MAX_REDIRECTS})`);
676
- }
677
- /**
678
- * Return a copy of init with credential headers removed.
679
- */
680
- function stripCredentialHeaders(init) {
681
- if (!init.headers) return init;
682
- const headers = new Headers(init.headers);
683
- for (const name of CREDENTIAL_HEADERS) headers.delete(name);
684
- return {
685
- ...init,
686
- headers
687
- };
688
- }
689
-
690
- //#endregion
691
17
  //#region src/seed/apply.ts
692
18
  /**
693
19
  * Seed engine - applies seed files to database
@@ -1120,9 +446,9 @@ async function applySeed(db, seed, options = {}) {
1120
446
  }
1121
447
  }
1122
448
  }
1123
- const { invalidateBylineCache } = await import("./bylines-BGpD9_hy.mjs").then((n) => n.t);
1124
- const { invalidateUrlPatternCache } = await import("./query-kDmwCsHh.mjs").then((n) => n.o);
1125
- const { invalidateRedirectCache } = await import("./cache-BdSY-gQN.mjs").then((n) => n.t);
449
+ const { invalidateBylineCache } = await import("./bylines-BcOPh6Ej.mjs").then((n) => n.t);
450
+ const { invalidateUrlPatternCache } = await import("./query-RiobVwB5.mjs").then((n) => n.o);
451
+ const { invalidateRedirectCache } = await import("./cache-DEbQ13c9.mjs").then((n) => n.t);
1126
452
  invalidateBylineCache();
1127
453
  invalidateUrlPatternCache();
1128
454
  invalidateRedirectCache();
@@ -1429,4 +755,4 @@ function getImageDimensions(buffer) {
1429
755
  }
1430
756
 
1431
757
  //#endregion
1432
- export { ssrfSafeFetch as a, getPluginSetting as c, getSiteSettings as d, setSiteSettings as f, resolveAndValidateExternalUrl as i, getPluginSettings as l, TaxonomyRepository as m, apply_exports as n, stripCredentialHeaders as o, OptionsRepository as p, SsrfError as r, validateExternalUrl as s, applySeed as t, getSiteSetting as u };
758
+ export { apply_exports as n, applySeed as t };