emdash 1.1.0 → 1.3.0

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 (1571) hide show
  1. package/dist/action-token-SK8zyN7w.mjs +26 -0
  2. package/dist/action-token-SK8zyN7w.mjs.map +1 -0
  3. package/dist/activation-Dim4YMM7.mjs +387 -0
  4. package/dist/activation-Dim4YMM7.mjs.map +1 -0
  5. package/dist/adapters-F_xorvWv.d.mts +173 -0
  6. package/dist/adapters-F_xorvWv.d.mts.map +1 -0
  7. package/dist/allowed-origins-CEug-p0t.mjs +116 -0
  8. package/dist/allowed-origins-CEug-p0t.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.d.mts.map +1 -1
  11. package/dist/api/route-utils.mjs +48 -46
  12. package/dist/api/route-utils.mjs.map +1 -1
  13. package/dist/api/schemas/index.d.mts +2 -2
  14. package/dist/api/schemas/index.mjs +10 -10
  15. package/dist/api-D-7BNHoz.mjs +5025 -0
  16. package/dist/api-D-7BNHoz.mjs.map +1 -0
  17. package/dist/api-tokens-Bx38ZCQp.mjs +173 -0
  18. package/dist/api-tokens-Bx38ZCQp.mjs.map +1 -0
  19. package/dist/apply-T7ATgzCh.mjs +1702 -0
  20. package/dist/apply-T7ATgzCh.mjs.map +1 -0
  21. package/dist/approvals-D-m6wvGl.mjs +460 -0
  22. package/dist/approvals-D-m6wvGl.mjs.map +1 -0
  23. package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
  24. package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
  25. package/dist/artifacts-htGyfCSt.mjs +307 -0
  26. package/dist/artifacts-htGyfCSt.mjs.map +1 -0
  27. package/dist/astro/image-endpoint.d.mts.map +1 -1
  28. package/dist/astro/image-endpoint.mjs +26 -6
  29. package/dist/astro/image-endpoint.mjs.map +1 -1
  30. package/dist/astro/index.d.mts +14 -14
  31. package/dist/astro/index.d.mts.map +1 -1
  32. package/dist/astro/index.mjs +324 -23
  33. package/dist/astro/index.mjs.map +1 -1
  34. package/dist/astro/middleware/auth.d.mts +12 -12
  35. package/dist/astro/middleware/auth.d.mts.map +1 -1
  36. package/dist/astro/middleware/auth.mjs +18 -13
  37. package/dist/astro/middleware/auth.mjs.map +1 -1
  38. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  39. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  40. package/dist/astro/middleware/redirect.mjs +81 -46
  41. package/dist/astro/middleware/redirect.mjs.map +1 -1
  42. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  43. package/dist/astro/middleware/request-context.mjs +117 -56
  44. package/dist/astro/middleware/request-context.mjs.map +1 -1
  45. package/dist/astro/middleware/setup.mjs +1 -1
  46. package/dist/astro/middleware.d.mts +12 -12
  47. package/dist/astro/middleware.d.mts.map +1 -1
  48. package/dist/astro/middleware.mjs +145 -415
  49. package/dist/astro/middleware.mjs.map +1 -1
  50. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  51. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  52. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +7 -6
  53. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/api-tokens/index.mjs +8 -7
  55. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  57. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +16 -16
  58. package/dist/astro/routes/api/admin/byline-fields/index.mjs +16 -16
  59. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +16 -16
  60. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  61. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  63. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  64. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  65. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  69. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  70. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  71. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  72. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  73. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  74. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  75. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
  76. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
  77. package/dist/astro/routes/api/admin/media-usage/progress.mjs +23 -22
  78. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -28
  80. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
  82. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
  83. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  84. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  85. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  86. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  87. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -70
  88. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  90. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -69
  91. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +71 -70
  93. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +80 -79
  95. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -70
  97. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  99. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -69
  100. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +79 -78
  102. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -69
  104. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +71 -70
  106. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +81 -80
  108. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  110. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +73 -72
  112. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  114. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -70
  115. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  116. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -69
  117. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  119. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -69
  120. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  122. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -69
  123. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  125. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +38 -37
  126. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +38 -37
  128. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +40 -39
  130. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  131. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +40 -39
  132. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +40 -39
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +41 -40
  136. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +41 -40
  138. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  139. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +40 -39
  140. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +41 -40
  142. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  143. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +42 -41
  144. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +40 -39
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +40 -39
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +42 -41
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +40 -39
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +42 -41
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +40 -39
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  157. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +40 -39
  158. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  159. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +42 -41
  160. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  161. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +40 -39
  162. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  163. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +40 -39
  164. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  165. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +42 -41
  166. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  167. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  168. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  169. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -14
  170. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  171. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  172. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  173. package/dist/astro/routes/api/auth/handover.d.mts +8 -0
  174. package/dist/astro/routes/api/auth/handover.d.mts.map +1 -0
  175. package/dist/astro/routes/api/auth/handover.mjs +49 -0
  176. package/dist/astro/routes/api/auth/handover.mjs.map +1 -0
  177. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  178. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
  179. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  180. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  181. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  182. package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
  183. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  184. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  185. package/dist/astro/routes/api/auth/magic-link/verify.mjs +23 -17
  186. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  187. package/dist/astro/routes/api/auth/me.mjs +15 -15
  188. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  189. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  190. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  191. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  192. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  193. package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
  194. package/dist/astro/routes/api/auth/passkey/options.mjs +27 -20
  195. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  196. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  197. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  198. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -19
  199. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
  200. package/dist/astro/routes/api/auth/signup/request.mjs +18 -17
  201. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  202. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  203. package/dist/astro/routes/api/calendar.mjs +15 -15
  204. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  205. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  206. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  207. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  208. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  209. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
  211. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +20 -17
  213. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
  215. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
  216. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  218. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +30 -29
  219. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  220. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  221. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  222. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  223. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +35 -34
  224. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +35 -34
  226. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  227. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
  229. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  230. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  231. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  232. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -18
  233. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  234. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  235. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +31 -26
  236. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  237. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  238. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  239. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  240. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  241. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  242. package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -20
  243. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  244. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  245. package/dist/astro/routes/api/content/_collection_/index.mjs +18 -21
  246. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  247. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  248. package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
  249. package/dist/astro/routes/api/dashboard.mjs +18 -12
  250. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  251. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  252. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
  253. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
  254. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +140 -0
  255. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
  256. package/dist/astro/routes/api/health.mjs +6 -6
  257. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  258. package/dist/astro/routes/api/import/probe.mjs +25 -23
  259. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  260. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  261. package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -20
  262. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  263. package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
  264. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  265. package/dist/astro/routes/api/import/wordpress/execute.mjs +36 -30
  266. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  267. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  268. package/dist/astro/routes/api/import/wordpress/media.mjs +17 -17
  269. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -17
  270. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  271. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +8 -0
  272. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
  273. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +67 -31
  274. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
  275. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  276. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -26
  277. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  278. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  279. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +26 -23
  280. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  281. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  282. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  283. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +63 -35
  284. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  285. package/dist/astro/routes/api/manifest.mjs +9 -6
  286. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  287. package/dist/astro/routes/api/mcp.mjs +135 -101
  288. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  289. package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
  290. package/dist/astro/routes/api/media/_id_/confirm.mjs +34 -18
  291. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  292. package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
  293. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  294. package/dist/astro/routes/api/media/_id_/usage.mjs +31 -30
  295. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  296. package/dist/astro/routes/api/media/_id_.mjs +29 -28
  297. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  298. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  299. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  300. package/dist/astro/routes/api/media/file/_...key_.mjs +45 -15
  301. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  302. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  303. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  304. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  305. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  306. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  307. package/dist/astro/routes/api/media/upload-url.mjs +40 -20
  308. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  309. package/dist/astro/routes/api/media.d.mts.map +1 -1
  310. package/dist/astro/routes/api/media.mjs +40 -29
  311. package/dist/astro/routes/api/media.mjs.map +1 -1
  312. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  313. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  314. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  315. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  316. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -17
  317. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  318. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  319. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -17
  320. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  321. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  322. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -17
  323. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  324. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  325. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  326. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  327. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  328. package/dist/astro/routes/api/menus/index.mjs +18 -17
  329. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  330. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  331. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  332. package/dist/astro/routes/api/oauth/device/code.mjs +12 -11
  333. package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
  334. package/dist/astro/routes/api/oauth/device/token.mjs +11 -10
  335. package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
  336. package/dist/astro/routes/api/oauth/register.mjs +8 -7
  337. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  338. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  339. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  340. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  341. package/dist/astro/routes/api/openapi.json.mjs +22 -22
  342. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  343. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  344. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  345. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  346. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  347. package/dist/astro/routes/api/redirects/_id_.mjs +32 -23
  348. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  349. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  350. package/dist/astro/routes/api/redirects/index.mjs +24 -21
  351. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  352. package/dist/astro/routes/api/relations/_id_/index.mjs +35 -34
  353. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  354. package/dist/astro/routes/api/relations/index.mjs +35 -34
  355. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  356. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  357. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +16 -16
  358. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -69
  359. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  360. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -69
  361. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  362. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -69
  363. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  364. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +71 -69
  365. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  366. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -69
  367. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  368. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -69
  369. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  370. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -69
  371. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  372. package/dist/astro/routes/api/schema/collections/index.mjs +71 -69
  373. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  374. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -69
  375. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  376. package/dist/astro/routes/api/schema/index.mjs +17 -16
  377. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  378. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -69
  379. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  380. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -69
  381. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  382. package/dist/astro/routes/api/search/enable.mjs +19 -18
  383. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  384. package/dist/astro/routes/api/search/index.mjs +18 -17
  385. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/search/rebuild.mjs +19 -18
  387. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  388. package/dist/astro/routes/api/search/stats.mjs +9 -8
  389. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  390. package/dist/astro/routes/api/search/suggest.mjs +18 -17
  391. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  392. package/dist/astro/routes/api/sections/_slug_.mjs +18 -17
  393. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  394. package/dist/astro/routes/api/sections/index.mjs +18 -17
  395. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  396. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  397. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  398. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  399. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  400. package/dist/astro/routes/api/settings/domain-notify.d.mts +8 -0
  401. package/dist/astro/routes/api/settings/domain-notify.d.mts.map +1 -0
  402. package/dist/astro/routes/api/settings/domain-notify.mjs +125 -0
  403. package/dist/astro/routes/api/settings/domain-notify.mjs.map +1 -0
  404. package/dist/astro/routes/api/settings/domain.d.mts +9 -0
  405. package/dist/astro/routes/api/settings/domain.d.mts.map +1 -0
  406. package/dist/astro/routes/api/settings/domain.mjs +64 -0
  407. package/dist/astro/routes/api/settings/domain.mjs.map +1 -0
  408. package/dist/astro/routes/api/settings/email.mjs +6 -6
  409. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  410. package/dist/astro/routes/api/settings.mjs +23 -20
  411. package/dist/astro/routes/api/settings.mjs.map +1 -1
  412. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  413. package/dist/astro/routes/api/setup/admin-verify.mjs +25 -21
  414. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  415. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  416. package/dist/astro/routes/api/setup/dev-bypass.mjs +43 -41
  417. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  418. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  419. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  420. package/dist/astro/routes/api/setup/index.mjs +53 -47
  421. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  422. package/dist/astro/routes/api/setup/status.mjs +6 -6
  423. package/dist/astro/routes/api/site/domain-proof.d.mts +8 -0
  424. package/dist/astro/routes/api/site/domain-proof.d.mts.map +1 -0
  425. package/dist/astro/routes/api/site/domain-proof.mjs +35 -0
  426. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -0
  427. package/dist/astro/routes/api/snapshot.mjs +8 -8
  428. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  429. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +24 -22
  430. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  431. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  432. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +24 -22
  433. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  434. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  435. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -23
  436. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  437. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  438. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +24 -22
  439. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  440. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
  441. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  442. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  443. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -23
  444. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  445. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -34
  446. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  447. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  448. package/dist/astro/routes/api/taxonomies/index.mjs +24 -22
  449. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  450. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  451. package/dist/astro/routes/api/typegen.mjs +6 -6
  452. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  453. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +18 -18
  454. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  455. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  456. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  457. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  458. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  459. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  460. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  461. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  462. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +21 -19
  463. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  464. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  465. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -18
  466. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  467. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  468. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  469. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  470. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  471. package/dist/astro/routes/api/widget-areas/index.mjs +20 -18
  472. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  473. package/dist/astro/routes/api/widget-components.mjs +5 -5
  474. package/dist/astro/routes/robots.txt.d.mts.map +1 -1
  475. package/dist/astro/routes/robots.txt.mjs +38 -5
  476. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  477. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  478. package/dist/astro/routes/sitemap-_collection_.xml.mjs +33 -11
  479. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  480. package/dist/astro/routes/sitemap.xml.d.mts.map +1 -1
  481. package/dist/astro/routes/sitemap.xml.mjs +17 -11
  482. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  483. package/dist/astro/types.d.mts +32 -18
  484. package/dist/astro/types.d.mts.map +1 -1
  485. package/dist/audit-_gieLVGU.mjs +127 -0
  486. package/dist/audit-_gieLVGU.mjs.map +1 -0
  487. package/dist/auth/providers/github.d.mts +1 -1
  488. package/dist/auth/providers/google.d.mts +1 -1
  489. package/dist/auth/providers/microsoft.d.mts +1 -1
  490. package/dist/authoritative-records-CQlB3JzE.mjs +5183 -0
  491. package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
  492. package/dist/authorize-DPFBGbE6.mjs +74 -0
  493. package/dist/authorize-DPFBGbE6.mjs.map +1 -0
  494. package/dist/backup-3FgVxiDJ.mjs +246 -0
  495. package/dist/backup-3FgVxiDJ.mjs.map +1 -0
  496. package/dist/block-types-CYcG56JB.mjs +132 -0
  497. package/dist/block-types-CYcG56JB.mjs.map +1 -0
  498. package/dist/block-values-gCX4HBSl.mjs +215 -0
  499. package/dist/block-values-gCX4HBSl.mjs.map +1 -0
  500. package/dist/byline-BR1qhyiw.mjs +909 -0
  501. package/dist/byline-BR1qhyiw.mjs.map +1 -0
  502. package/dist/byline-fields-4ClDC88c.mjs +123 -0
  503. package/dist/byline-fields-4ClDC88c.mjs.map +1 -0
  504. package/dist/byline-fields-BLXZnX7N.mjs +280 -0
  505. package/dist/byline-fields-BLXZnX7N.mjs.map +1 -0
  506. package/dist/bylines-CVOvRUL7.mjs +234 -0
  507. package/dist/bylines-CVOvRUL7.mjs.map +1 -0
  508. package/dist/bylines-DxOs9B7z.mjs +150 -0
  509. package/dist/bylines-DxOs9B7z.mjs.map +1 -0
  510. package/dist/cache-CEU9wo_h.mjs +151 -0
  511. package/dist/cache-CEU9wo_h.mjs.map +1 -0
  512. package/dist/canonical-BudtH-Fx.mjs +174 -0
  513. package/dist/canonical-BudtH-Fx.mjs.map +1 -0
  514. package/dist/capture-triggers-CT6dK9zd.mjs +362 -0
  515. package/dist/capture-triggers-CT6dK9zd.mjs.map +1 -0
  516. package/dist/challenge-store-C17BYx2-.mjs +51 -0
  517. package/dist/challenge-store-C17BYx2-.mjs.map +1 -0
  518. package/dist/checksum-CEqvfxGX.mjs +162 -0
  519. package/dist/checksum-CEqvfxGX.mjs.map +1 -0
  520. package/dist/chunks-xC4UD5-S.mjs +25 -0
  521. package/dist/chunks-xC4UD5-S.mjs.map +1 -0
  522. package/dist/cli/index.mjs +134 -118
  523. package/dist/cli/index.mjs.map +1 -1
  524. package/dist/client/cf-access.d.mts +1 -1
  525. package/dist/client/index.d.mts +122 -122
  526. package/dist/client/index.d.mts.map +1 -1
  527. package/dist/client/index.mjs +12 -10
  528. package/dist/client/index.mjs.map +1 -1
  529. package/dist/collection-slugs-cache-e09QeJQt.mjs +85 -0
  530. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +1 -0
  531. package/dist/comment-UvIWDKcW.mjs +325 -0
  532. package/dist/comment-UvIWDKcW.mjs.map +1 -0
  533. package/dist/comment-reaction-dGp6_FRo.mjs +85 -0
  534. package/dist/comment-reaction-dGp6_FRo.mjs.map +1 -0
  535. package/dist/comments-pej-_BUO.mjs +195 -0
  536. package/dist/comments-pej-_BUO.mjs.map +1 -0
  537. package/dist/comments-yiRFx3w5.mjs +99 -0
  538. package/dist/comments-yiRFx3w5.mjs.map +1 -0
  539. package/dist/components-Brp__9xo.mjs +112 -0
  540. package/dist/components-Brp__9xo.mjs.map +1 -0
  541. package/dist/config-Bsm_u_oE.d.mts +6799 -0
  542. package/dist/config-Bsm_u_oE.d.mts.map +1 -0
  543. package/dist/config-CFMojMFK.d.mts +39 -0
  544. package/dist/config-CFMojMFK.d.mts.map +1 -0
  545. package/dist/config-DBU6iUQB.mjs +228 -0
  546. package/dist/config-DBU6iUQB.mjs.map +1 -0
  547. package/dist/connection-BtEN_lP9.mjs +36 -0
  548. package/dist/connection-BtEN_lP9.mjs.map +1 -0
  549. package/dist/content-DQSRZTVw.mjs +2075 -0
  550. package/dist/content-DQSRZTVw.mjs.map +1 -0
  551. package/dist/content-list-query-CYKcY6Vi.d.mts +26 -0
  552. package/dist/content-list-query-CYKcY6Vi.d.mts.map +1 -0
  553. package/dist/content-repair-DNh5--x5.mjs +442 -0
  554. package/dist/content-repair-DNh5--x5.mjs.map +1 -0
  555. package/dist/context-BYptmCN0.mjs +2090 -0
  556. package/dist/context-BYptmCN0.mjs.map +1 -0
  557. package/dist/credits-B9iORdWB.mjs +110 -0
  558. package/dist/credits-B9iORdWB.mjs.map +1 -0
  559. package/dist/cron-D7obTIfk.mjs +306 -0
  560. package/dist/cron-D7obTIfk.mjs.map +1 -0
  561. package/dist/dashboard-D0jcgBD7.mjs +167 -0
  562. package/dist/dashboard-D0jcgBD7.mjs.map +1 -0
  563. package/dist/database/migration-lock.d.mts +17 -4
  564. package/dist/database/migration-lock.d.mts.map +1 -1
  565. package/dist/database/migration-lock.mjs +32 -5
  566. package/dist/database/migration-lock.mjs.map +1 -1
  567. package/dist/db/index.d.mts +3 -3
  568. package/dist/db/index.mjs +1 -1
  569. package/dist/db/libsql-migrations.d.mts +1 -1
  570. package/dist/db/libsql-migrations.mjs +4 -4
  571. package/dist/db/libsql.d.mts +1 -1
  572. package/dist/db/postgres-migrations.d.mts +1 -1
  573. package/dist/db/postgres-migrations.mjs +4 -4
  574. package/dist/db/postgres.d.mts +1 -1
  575. package/dist/db/sqlite-migrations.d.mts +1 -1
  576. package/dist/db/sqlite-migrations.mjs +4 -4
  577. package/dist/db/sqlite.d.mts +1 -1
  578. package/dist/db/sqlite.mjs +1 -1
  579. package/dist/default-C0W-PhAp.mjs +81 -0
  580. package/dist/default-C0W-PhAp.mjs.map +1 -0
  581. package/dist/deferred-tasks-ZvUECSzI.d.mts +9 -0
  582. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +1 -0
  583. package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
  584. package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
  585. package/dist/device-flow-BkFKBoAn.mjs +521 -0
  586. package/dist/device-flow-BkFKBoAn.mjs.map +1 -0
  587. package/dist/digest-DJ1tHCgy.mjs +194 -0
  588. package/dist/digest-DJ1tHCgy.mjs.map +1 -0
  589. package/dist/direct-executor-Cbxzg4qe.mjs +117 -0
  590. package/dist/direct-executor-Cbxzg4qe.mjs.map +1 -0
  591. package/dist/email-console-FFVJWb9N.mjs +50 -0
  592. package/dist/email-console-FFVJWb9N.mjs.map +1 -0
  593. package/dist/email-locale-BJ8DjTzZ.mjs +25 -0
  594. package/dist/email-locale-BJ8DjTzZ.mjs.map +1 -0
  595. package/dist/emdash-runtime-DVi7vtXC.mjs +4379 -0
  596. package/dist/emdash-runtime-DVi7vtXC.mjs.map +1 -0
  597. package/dist/entry-lock-C7VX0NGK.d.mts +4568 -0
  598. package/dist/entry-lock-C7VX0NGK.d.mts.map +1 -0
  599. package/dist/entry-lock-DLxCffFW.mjs +163 -0
  600. package/dist/entry-lock-DLxCffFW.mjs.map +1 -0
  601. package/dist/entry-lock-Df6-XhIu.mjs +1211 -0
  602. package/dist/entry-lock-Df6-XhIu.mjs.map +1 -0
  603. package/dist/env-types-C3FCVBWe.mjs +38 -0
  604. package/dist/env-types-C3FCVBWe.mjs.map +1 -0
  605. package/dist/error-CVWeIOku.mjs +90 -0
  606. package/dist/error-CVWeIOku.mjs.map +1 -0
  607. package/dist/errors-B4f4It-2.mjs +120 -0
  608. package/dist/errors-B4f4It-2.mjs.map +1 -0
  609. package/dist/errors-BOYNdIo3.mjs +479 -0
  610. package/dist/errors-BOYNdIo3.mjs.map +1 -0
  611. package/dist/escape-lsNq38PP.mjs +9 -0
  612. package/dist/escape-lsNq38PP.mjs.map +1 -0
  613. package/dist/fence-C3MUitUN.mjs +162 -0
  614. package/dist/fence-C3MUitUN.mjs.map +1 -0
  615. package/dist/field-defs-cache-Dez5iWJJ.mjs +77 -0
  616. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +1 -0
  617. package/dist/field-map-Bft9LKak.mjs +83 -0
  618. package/dist/field-map-Bft9LKak.mjs.map +1 -0
  619. package/dist/fts-manager-Beg3e4bI.mjs +443 -0
  620. package/dist/fts-manager-Beg3e4bI.mjs.map +1 -0
  621. package/dist/gc-ByyAYiYE.mjs +75 -0
  622. package/dist/gc-ByyAYiYE.mjs.map +1 -0
  623. package/dist/hash-BJaeek87.mjs +37 -0
  624. package/dist/hash-BJaeek87.mjs.map +1 -0
  625. package/dist/hook-result-BrdLyOdI.d.mts +31 -0
  626. package/dist/hook-result-BrdLyOdI.d.mts.map +1 -0
  627. package/dist/hreflang-C8Jb-hrf.mjs +105 -0
  628. package/dist/hreflang-C8Jb-hrf.mjs.map +1 -0
  629. package/dist/hreflang-CY_F5OjF.d.mts +50 -0
  630. package/dist/hreflang-CY_F5OjF.d.mts.map +1 -0
  631. package/dist/http-route-dispatch-CyeW6iPv.mjs +342 -0
  632. package/dist/http-route-dispatch-CyeW6iPv.mjs.map +1 -0
  633. package/dist/identity-Cael5uTT.mjs +35 -0
  634. package/dist/identity-Cael5uTT.mjs.map +1 -0
  635. package/dist/import-BUXjdZUn.mjs +2126 -0
  636. package/dist/import-BUXjdZUn.mjs.map +1 -0
  637. package/dist/index-BB9sVisO.d.mts +623 -0
  638. package/dist/index-BB9sVisO.d.mts.map +1 -0
  639. package/dist/index.d.mts +24 -24
  640. package/dist/index.mjs +97 -95
  641. package/dist/install-finalization-3JX5qQEA.mjs +58 -0
  642. package/dist/install-finalization-3JX5qQEA.mjs.map +1 -0
  643. package/dist/json-recordset-BUjxhr77.mjs +12 -0
  644. package/dist/json-recordset-BUjxhr77.mjs.map +1 -0
  645. package/dist/json-schema-v_D_pPNG.mjs +15 -0
  646. package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
  647. package/dist/keys-CifIkT0N.mjs +61 -0
  648. package/dist/keys-CifIkT0N.mjs.map +1 -0
  649. package/dist/kinds-B_Qcl5pz.mjs +974 -0
  650. package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
  651. package/dist/lifecycle-7vUJeFRe.mjs +25 -0
  652. package/dist/lifecycle-7vUJeFRe.mjs.map +1 -0
  653. package/dist/load-CdAG9wz-.mjs +28 -0
  654. package/dist/load-CdAG9wz-.mjs.map +1 -0
  655. package/dist/loader-CswroUbe.mjs +1380 -0
  656. package/dist/loader-CswroUbe.mjs.map +1 -0
  657. package/dist/loops-uA4iTOzd.mjs +205 -0
  658. package/dist/loops-uA4iTOzd.mjs.map +1 -0
  659. package/dist/manifest-builder-B8zjuH3f.mjs +189 -0
  660. package/dist/manifest-builder-B8zjuH3f.mjs.map +1 -0
  661. package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
  662. package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
  663. package/dist/marketplace-CqbgeIa7.mjs +257 -0
  664. package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
  665. package/dist/media/image-endpoint.d.mts +26 -2
  666. package/dist/media/image-endpoint.d.mts.map +1 -1
  667. package/dist/media/image-endpoint.mjs +73 -3
  668. package/dist/media/image-endpoint.mjs.map +1 -1
  669. package/dist/media/index.d.mts +1 -1
  670. package/dist/media/local-runtime.d.mts +14 -14
  671. package/dist/media/local-runtime.mjs +10 -5
  672. package/dist/media/local-runtime.mjs.map +1 -1
  673. package/dist/media--dJRU6i2.mjs +294 -0
  674. package/dist/media--dJRU6i2.mjs.map +1 -0
  675. package/dist/media-1WC65OCB.mjs +416 -0
  676. package/dist/media-1WC65OCB.mjs.map +1 -0
  677. package/dist/media-Bws9f18T.mjs +373 -0
  678. package/dist/media-Bws9f18T.mjs.map +1 -0
  679. package/dist/media-allowlist-BJB7MFx6.mjs +45 -0
  680. package/dist/media-allowlist-BJB7MFx6.mjs.map +1 -0
  681. package/dist/media-folders-Dn3C16B8.mjs +210 -0
  682. package/dist/media-folders-Dn3C16B8.mjs.map +1 -0
  683. package/dist/media-url-BQgKvpQ5.mjs +43 -0
  684. package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
  685. package/dist/media-usage-CF0WVcLO.mjs +282 -0
  686. package/dist/media-usage-CF0WVcLO.mjs.map +1 -0
  687. package/dist/media-usage-activation-C9HwVw5w.mjs +78 -0
  688. package/dist/media-usage-activation-C9HwVw5w.mjs.map +1 -0
  689. package/dist/media-usage-work-CkLa5-nc.mjs +1036 -0
  690. package/dist/media-usage-work-CkLa5-nc.mjs.map +1 -0
  691. package/dist/media-usage-work-m3AWTmmC.mjs +151 -0
  692. package/dist/media-usage-work-m3AWTmmC.mjs.map +1 -0
  693. package/dist/menus-BCVSSp1z.mjs +753 -0
  694. package/dist/menus-BCVSSp1z.mjs.map +1 -0
  695. package/dist/menus-BSzwObhV.mjs +92 -0
  696. package/dist/menus-BSzwObhV.mjs.map +1 -0
  697. package/dist/menus-Cl4kwdt7.mjs +3721 -0
  698. package/dist/menus-Cl4kwdt7.mjs.map +1 -0
  699. package/dist/migrations/index.d.mts +1 -1
  700. package/dist/migrations/index.d.mts.map +1 -1
  701. package/dist/migrations/index.mjs +3 -3
  702. package/dist/mode-C-D3qICy.mjs +23 -0
  703. package/dist/mode-C-D3qICy.mjs.map +1 -0
  704. package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
  705. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
  706. package/dist/oauth-authorization-TpEJrYB7.mjs +274 -0
  707. package/dist/oauth-authorization-TpEJrYB7.mjs.map +1 -0
  708. package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
  709. package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
  710. package/dist/oauth-state-store-CHMn_mwc.mjs +50 -0
  711. package/dist/oauth-state-store-CHMn_mwc.mjs.map +1 -0
  712. package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
  713. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
  714. package/dist/object-cache/memory.d.mts +1 -1
  715. package/dist/options-DJWaq3Ie.d.mts +81 -0
  716. package/dist/options-DJWaq3Ie.d.mts.map +1 -0
  717. package/dist/ownership-MiyA7qKO.mjs +12 -0
  718. package/dist/ownership-MiyA7qKO.mjs.map +1 -0
  719. package/dist/page/index.d.mts +2 -2
  720. package/dist/page/index.mjs +9 -4
  721. package/dist/page/index.mjs.map +1 -1
  722. package/dist/parse-CWHOFc6z.d.mts +176 -0
  723. package/dist/parse-CWHOFc6z.d.mts.map +1 -0
  724. package/dist/parse-DgQ2NABT.mjs +81 -0
  725. package/dist/parse-DgQ2NABT.mjs.map +1 -0
  726. package/dist/passkey-config-D0kdzEao.mjs +46 -0
  727. package/dist/passkey-config-D0kdzEao.mjs.map +1 -0
  728. package/dist/paths-biDzFTY2.mjs +77 -0
  729. package/dist/paths-biDzFTY2.mjs.map +1 -0
  730. package/dist/patterns-CMNnYCgf.mjs +159 -0
  731. package/dist/patterns-CMNnYCgf.mjs.map +1 -0
  732. package/dist/placeholder-D41vk11_.d.mts +306 -0
  733. package/dist/placeholder-D41vk11_.d.mts.map +1 -0
  734. package/dist/plan-CCoqxNoU.mjs +135 -0
  735. package/dist/plan-CCoqxNoU.mjs.map +1 -0
  736. package/dist/plugin-test-runtime.d.mts +14 -14
  737. package/dist/plugin-test-runtime.d.mts.map +1 -1
  738. package/dist/plugin-test-runtime.mjs +110 -108
  739. package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
  740. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
  741. package/dist/plugin-types.d.mts +2 -2
  742. package/dist/plugin-utils.d.mts +12 -12
  743. package/dist/plugin-utils.mjs +1 -1
  744. package/dist/plugin-utils.mjs.map +1 -1
  745. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  746. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  747. package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
  748. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  749. package/dist/plugins/host.d.mts +5 -5
  750. package/dist/plugins/host.mjs +46 -42
  751. package/dist/plugins-COJ2L49n.mjs +261 -0
  752. package/dist/plugins-COJ2L49n.mjs.map +1 -0
  753. package/dist/policy-DLQ--Hnm.mjs +45 -0
  754. package/dist/policy-DLQ--Hnm.mjs.map +1 -0
  755. package/dist/portable-text-BH4zgkSm.mjs +311 -0
  756. package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
  757. package/dist/preview-DLexxwp3.mjs +107 -0
  758. package/dist/preview-DLexxwp3.mjs.map +1 -0
  759. package/dist/protocol-79kUO7jP.d.mts +65 -0
  760. package/dist/protocol-79kUO7jP.d.mts.map +1 -0
  761. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +316 -0
  762. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +1 -0
  763. package/dist/public-submission-Di3TsgzX.mjs +251 -0
  764. package/dist/public-submission-Di3TsgzX.mjs.map +1 -0
  765. package/dist/public-url-Bt98vysr.mjs +101 -0
  766. package/dist/public-url-Bt98vysr.mjs.map +1 -0
  767. package/dist/query-CpnRlBh8.mjs +1156 -0
  768. package/dist/query-CpnRlBh8.mjs.map +1 -0
  769. package/dist/query-haKvLAWl.mjs +41 -0
  770. package/dist/query-haKvLAWl.mjs.map +1 -0
  771. package/dist/range-CYfeXgGK.mjs +51 -0
  772. package/dist/range-CYfeXgGK.mjs.map +1 -0
  773. package/dist/rate-limit-Xp4d0NBY.mjs +127 -0
  774. package/dist/rate-limit-Xp4d0NBY.mjs.map +1 -0
  775. package/dist/receipt-BUsQCOeM.mjs +43 -0
  776. package/dist/receipt-BUsQCOeM.mjs.map +1 -0
  777. package/dist/redirect-CQAV7mCo.mjs +19 -0
  778. package/dist/redirect-CQAV7mCo.mjs.map +1 -0
  779. package/dist/redirect-DiS_3mA4.mjs +423 -0
  780. package/dist/redirect-DiS_3mA4.mjs.map +1 -0
  781. package/dist/redirect-paths-CNYq7w80.mjs +36 -0
  782. package/dist/redirect-paths-CNYq7w80.mjs.map +1 -0
  783. package/dist/redirects-BEVSRMa2.mjs +148 -0
  784. package/dist/redirects-BEVSRMa2.mjs.map +1 -0
  785. package/dist/redirects-BHpy-VsZ.mjs +446 -0
  786. package/dist/redirects-BHpy-VsZ.mjs.map +1 -0
  787. package/dist/registry/testing.mjs +3 -3
  788. package/dist/registry-TUVaid9Z.mjs +8369 -0
  789. package/dist/registry-TUVaid9Z.mjs.map +1 -0
  790. package/dist/relations-CA_QuMTU.mjs +776 -0
  791. package/dist/relations-CA_QuMTU.mjs.map +1 -0
  792. package/dist/request-context.d.mts +1 -1
  793. package/dist/request-meta-bwZ_NsvU.mjs +141 -0
  794. package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
  795. package/dist/resolve-DwNM-CXl.mjs +101 -0
  796. package/dist/resolve-DwNM-CXl.mjs.map +1 -0
  797. package/dist/revision-BVp8S0e_.mjs +374 -0
  798. package/dist/revision-BVp8S0e_.mjs.map +1 -0
  799. package/dist/route-cache-QSOyDEw0.mjs +20 -0
  800. package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
  801. package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
  802. package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
  803. package/dist/routes-BerZFrvV.mjs +272 -0
  804. package/dist/routes-BerZFrvV.mjs.map +1 -0
  805. package/dist/runner-BObHz5FC.d.mts +68 -0
  806. package/dist/runner-BObHz5FC.d.mts.map +1 -0
  807. package/dist/runner-C5NeAkBQ.mjs +6595 -0
  808. package/dist/runner-C5NeAkBQ.mjs.map +1 -0
  809. package/dist/runtime.d.mts +13 -13
  810. package/dist/runtime.mjs +3 -2
  811. package/dist/runtime.mjs.map +1 -1
  812. package/dist/schema/project-env-types.mjs +40 -36
  813. package/dist/schema/project-env-types.mjs.map +1 -1
  814. package/dist/schema-C4OBuv6Z.mjs +13 -0
  815. package/dist/schema-C4OBuv6Z.mjs.map +1 -0
  816. package/dist/schema-DJRfvM_o.mjs +815 -0
  817. package/dist/schema-DJRfvM_o.mjs.map +1 -0
  818. package/dist/scopes-BU03K7Uo.mjs +34 -0
  819. package/dist/scopes-BU03K7Uo.mjs.map +1 -0
  820. package/dist/search-DfVzks89.mjs +450 -0
  821. package/dist/search-DfVzks89.mjs.map +1 -0
  822. package/dist/sections-BMy4JVUz.mjs +346 -0
  823. package/dist/sections-BMy4JVUz.mjs.map +1 -0
  824. package/dist/seed/index.d.mts +2 -2
  825. package/dist/seed/index.mjs +38 -34
  826. package/dist/seo/index.d.mts +3 -3
  827. package/dist/seo/index.mjs +25 -21
  828. package/dist/seo/index.mjs.map +1 -1
  829. package/dist/seo-ClB-dw9w.mjs +188 -0
  830. package/dist/seo-ClB-dw9w.mjs.map +1 -0
  831. package/dist/seo-VZYOEy8f.mjs +133 -0
  832. package/dist/seo-VZYOEy8f.mjs.map +1 -0
  833. package/dist/service-Bo_usgSk.mjs +150 -0
  834. package/dist/service-Bo_usgSk.mjs.map +1 -0
  835. package/dist/session-user-DlpPdf8L.mjs +61 -0
  836. package/dist/session-user-DlpPdf8L.mjs.map +1 -0
  837. package/dist/settings-CWb84sDm.mjs +452 -0
  838. package/dist/settings-CWb84sDm.mjs.map +1 -0
  839. package/dist/settings-DS914jjE.mjs +66 -0
  840. package/dist/settings-DS914jjE.mjs.map +1 -0
  841. package/dist/settings-Dd1uivmQ.mjs +73 -0
  842. package/dist/settings-Dd1uivmQ.mjs.map +1 -0
  843. package/dist/setup-complete-BuNxAUiN.mjs +65 -0
  844. package/dist/setup-complete-BuNxAUiN.mjs.map +1 -0
  845. package/dist/setup-nonce-BnEAX0iy.mjs +25 -0
  846. package/dist/setup-nonce-BnEAX0iy.mjs.map +1 -0
  847. package/dist/site-domain-Bq5j5bVg.mjs +131 -0
  848. package/dist/site-domain-Bq5j5bVg.mjs.map +1 -0
  849. package/dist/site-settings-DRHfX7bq.mjs +50 -0
  850. package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
  851. package/dist/site-url-MB685I5X.mjs +45 -0
  852. package/dist/site-url-MB685I5X.mjs.map +1 -0
  853. package/dist/sitemap-name-BTg2NJJv.mjs +26 -0
  854. package/dist/sitemap-name-BTg2NJJv.mjs.map +1 -0
  855. package/dist/slug-aVnUV4SL.mjs +16 -0
  856. package/dist/slug-aVnUV4SL.mjs.map +1 -0
  857. package/dist/slugify-bu2-jKia.mjs +22 -0
  858. package/dist/slugify-bu2-jKia.mjs.map +1 -0
  859. package/dist/snapshot-DYsG4uOq.mjs +414 -0
  860. package/dist/snapshot-DYsG4uOq.mjs.map +1 -0
  861. package/dist/ssrf-BcYjyM4M.mjs +406 -0
  862. package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
  863. package/dist/stage-D8DWgPcO.mjs +662 -0
  864. package/dist/stage-D8DWgPcO.mjs.map +1 -0
  865. package/dist/staged-CD_imitH.mjs +686 -0
  866. package/dist/staged-CD_imitH.mjs.map +1 -0
  867. package/dist/state-CFbGZziM.mjs +178 -0
  868. package/dist/state-CFbGZziM.mjs.map +1 -0
  869. package/dist/status-BFNdxzKc.mjs +30 -0
  870. package/dist/status-BFNdxzKc.mjs.map +1 -0
  871. package/dist/storage/local.d.mts +2 -2
  872. package/dist/storage/local.d.mts.map +1 -1
  873. package/dist/storage/local.mjs +12 -5
  874. package/dist/storage/local.mjs.map +1 -1
  875. package/dist/storage/s3.d.mts +4 -2
  876. package/dist/storage/s3.d.mts.map +1 -1
  877. package/dist/storage/s3.mjs +56 -9
  878. package/dist/storage/s3.mjs.map +1 -1
  879. package/dist/storage-query-DRyu3bSU.d.mts +1615 -0
  880. package/dist/storage-query-DRyu3bSU.d.mts.map +1 -0
  881. package/dist/tar-DFjExb9X.mjs +449 -0
  882. package/dist/tar-DFjExb9X.mjs.map +1 -0
  883. package/dist/target-CWZs2-o6.mjs +27 -0
  884. package/dist/target-CWZs2-o6.mjs.map +1 -0
  885. package/dist/taxonomies-ChnU7Mc8.mjs +697 -0
  886. package/dist/taxonomies-ChnU7Mc8.mjs.map +1 -0
  887. package/dist/taxonomies-Dd9JJv_a.mjs +939 -0
  888. package/dist/taxonomies-Dd9JJv_a.mjs.map +1 -0
  889. package/dist/taxonomy-C_C_LBAU.mjs +550 -0
  890. package/dist/taxonomy-C_C_LBAU.mjs.map +1 -0
  891. package/dist/tokens-BnhSnGwJ.mjs +171 -0
  892. package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
  893. package/dist/transfer-ClH6w6BV.mjs +8873 -0
  894. package/dist/transfer-ClH6w6BV.mjs.map +1 -0
  895. package/dist/transfer-WmWiR3xf.mjs +166 -0
  896. package/dist/transfer-WmWiR3xf.mjs.map +1 -0
  897. package/dist/transfer-download--ofRj9Cw.mjs +33 -0
  898. package/dist/transfer-download--ofRj9Cw.mjs.map +1 -0
  899. package/dist/transformations-Bx4lYY0Y.mjs +196 -0
  900. package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
  901. package/dist/transport-BjbqNiPI.mjs +136 -0
  902. package/dist/transport-BjbqNiPI.mjs.map +1 -0
  903. package/dist/transport-DxiXnbXk.d.mts +42 -0
  904. package/dist/transport-DxiXnbXk.d.mts.map +1 -0
  905. package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
  906. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
  907. package/dist/turnstile-CJwvsOqw.mjs +58 -0
  908. package/dist/turnstile-CJwvsOqw.mjs.map +1 -0
  909. package/dist/types-BA3ey2QH.d.mts +87 -0
  910. package/dist/types-BA3ey2QH.d.mts.map +1 -0
  911. package/dist/types-Bwpzb5o6.d.mts +227 -0
  912. package/dist/types-Bwpzb5o6.d.mts.map +1 -0
  913. package/dist/types-CNB-dj6F.d.mts +289 -0
  914. package/dist/types-CNB-dj6F.d.mts.map +1 -0
  915. package/dist/types-CgfFGfO5.mjs +16 -0
  916. package/dist/types-CgfFGfO5.mjs.map +1 -0
  917. package/dist/types-D2NEXtgB.mjs +127 -0
  918. package/dist/types-D2NEXtgB.mjs.map +1 -0
  919. package/dist/types-DCFavOii.d.mts +916 -0
  920. package/dist/types-DCFavOii.d.mts.map +1 -0
  921. package/dist/types-DHO7Pd25.d.mts +366 -0
  922. package/dist/types-DHO7Pd25.d.mts.map +1 -0
  923. package/dist/types-DvqVxZXa.d.mts +125 -0
  924. package/dist/types-DvqVxZXa.d.mts.map +1 -0
  925. package/dist/types-QoPHm-2w.d.mts +1741 -0
  926. package/dist/types-QoPHm-2w.d.mts.map +1 -0
  927. package/dist/types-RLgeIpnF.d.mts +374 -0
  928. package/dist/types-RLgeIpnF.d.mts.map +1 -0
  929. package/dist/types-qHVygneX.mjs +77 -0
  930. package/dist/types-qHVygneX.mjs.map +1 -0
  931. package/dist/types-sUHaH7lC.mjs +37 -0
  932. package/dist/types-sUHaH7lC.mjs.map +1 -0
  933. package/dist/types-slSqujQL.d.mts +204 -0
  934. package/dist/types-slSqujQL.d.mts.map +1 -0
  935. package/dist/update-check-BxNg9T6N.mjs +161 -0
  936. package/dist/update-check-BxNg9T6N.mjs.map +1 -0
  937. package/dist/upload-attempts-DPFC4COv.mjs +32 -0
  938. package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
  939. package/dist/url-pattern-QATUE_rv.mjs +41 -0
  940. package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
  941. package/dist/user-BlCTKVAm.mjs +171 -0
  942. package/dist/user-BlCTKVAm.mjs.map +1 -0
  943. package/dist/utils-TPt7w2cS.mjs +442 -0
  944. package/dist/utils-TPt7w2cS.mjs.map +1 -0
  945. package/dist/validate-DxYhJQA-.mjs +524 -0
  946. package/dist/validate-DxYhJQA-.mjs.map +1 -0
  947. package/dist/validate-emKxGC5F.d.mts +468 -0
  948. package/dist/validate-emKxGC5F.d.mts.map +1 -0
  949. package/dist/validation-Ckq4vsVg.mjs +220 -0
  950. package/dist/validation-Ckq4vsVg.mjs.map +1 -0
  951. package/dist/version-BZj18Q7G.mjs +9 -0
  952. package/dist/version-BZj18Q7G.mjs.map +1 -0
  953. package/dist/version-DHmGpcch.mjs +7 -0
  954. package/dist/version-DHmGpcch.mjs.map +1 -0
  955. package/dist/video-DytCnw3L.mjs +54 -0
  956. package/dist/video-DytCnw3L.mjs.map +1 -0
  957. package/dist/virtual-modules-DO954n7P.mjs +515 -0
  958. package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
  959. package/dist/widgets-DA5XmvVC.mjs +121 -0
  960. package/dist/widgets-DA5XmvVC.mjs.map +1 -0
  961. package/dist/wxr-taxonomies-CrMonejI.d.mts +34 -0
  962. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +1 -0
  963. package/dist/wxr-taxonomies-RgRG0d5e.mjs +453 -0
  964. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +1 -0
  965. package/dist/zod-generator-D0JKy94C.mjs +424 -0
  966. package/dist/zod-generator-D0JKy94C.mjs.map +1 -0
  967. package/package.json +15 -11
  968. package/src/api/authorize.ts +42 -0
  969. package/src/api/errors.ts +9 -0
  970. package/src/api/handlers/api-tokens.ts +12 -6
  971. package/src/api/handlers/content.ts +57 -8
  972. package/src/api/handlers/dashboard.ts +33 -10
  973. package/src/api/handlers/domain-move-notice.ts +94 -0
  974. package/src/api/handlers/index.ts +2 -0
  975. package/src/api/handlers/manifest.ts +6 -0
  976. package/src/api/handlers/media-usage.ts +2 -1
  977. package/src/api/handlers/media.ts +1 -0
  978. package/src/api/handlers/plugins.ts +1 -0
  979. package/src/api/handlers/revision.ts +6 -2
  980. package/src/api/handlers/seo.ts +155 -59
  981. package/src/api/handlers/settings.ts +31 -1
  982. package/src/api/handlers/site-domain.ts +159 -0
  983. package/src/api/openapi/document.ts +2 -2
  984. package/src/api/public-url.ts +1 -1
  985. package/src/api/schemas/content.ts +20 -0
  986. package/src/api/schemas/media-usage.ts +7 -1
  987. package/src/api/schemas/media.ts +12 -0
  988. package/src/api/schemas/settings.ts +2 -0
  989. package/src/api/site-url.ts +53 -5
  990. package/src/api/types.ts +4 -0
  991. package/src/astro/image-endpoint.ts +46 -4
  992. package/src/astro/integration/admin-locales.ts +168 -0
  993. package/src/astro/integration/dev-env.ts +84 -0
  994. package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
  995. package/src/astro/integration/index.ts +97 -10
  996. package/src/astro/integration/routes.ts +28 -0
  997. package/src/astro/integration/runtime.ts +17 -1
  998. package/src/astro/integration/virtual-modules.ts +9 -16
  999. package/src/astro/integration/vite-config.ts +22 -16
  1000. package/src/astro/middleware/auth.ts +19 -4
  1001. package/src/astro/middleware/csp.ts +1 -0
  1002. package/src/astro/middleware/redirect.ts +94 -50
  1003. package/src/astro/middleware/request-context.ts +12 -6
  1004. package/src/astro/middleware.ts +71 -17
  1005. package/src/astro/prefetch.ts +7 -5
  1006. package/src/astro/public-plugin-api-routes.ts +10 -2
  1007. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
  1008. package/src/astro/routes/api/auth/handover.ts +58 -0
  1009. package/src/astro/routes/api/auth/magic-link/verify.ts +11 -3
  1010. package/src/astro/routes/api/auth/passkey/options.ts +10 -2
  1011. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
  1012. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
  1013. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
  1014. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
  1015. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  1016. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
  1017. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
  1018. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +5 -4
  1019. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
  1020. package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
  1021. package/src/astro/routes/api/content/[collection]/index.ts +1 -5
  1022. package/src/astro/routes/api/dashboard.ts +4 -1
  1023. package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
  1024. package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
  1025. package/src/astro/routes/api/import/wordpress/execute.ts +27 -3
  1026. package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +80 -42
  1027. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
  1028. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +49 -5
  1029. package/src/astro/routes/api/manifest.ts +10 -0
  1030. package/src/astro/routes/api/media/[id]/confirm.ts +19 -0
  1031. package/src/astro/routes/api/media/file/[...key].ts +60 -12
  1032. package/src/astro/routes/api/media/upload-url.ts +28 -4
  1033. package/src/astro/routes/api/media.ts +15 -0
  1034. package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
  1035. package/src/astro/routes/api/menus/[name]/items.ts +2 -1
  1036. package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
  1037. package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
  1038. package/src/astro/routes/api/menus/[name].ts +3 -2
  1039. package/src/astro/routes/api/menus/index.ts +2 -1
  1040. package/src/astro/routes/api/redirects/[id].ts +15 -2
  1041. package/src/astro/routes/api/redirects/index.ts +5 -1
  1042. package/src/astro/routes/api/schema/index.ts +1 -1
  1043. package/src/astro/routes/api/settings/domain-notify.ts +76 -0
  1044. package/src/astro/routes/api/settings/domain.ts +64 -0
  1045. package/src/astro/routes/api/settings.ts +2 -1
  1046. package/src/astro/routes/api/setup/admin-verify.ts +7 -1
  1047. package/src/astro/routes/api/setup/index.ts +7 -0
  1048. package/src/astro/routes/api/site/domain-proof.ts +28 -0
  1049. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
  1050. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
  1051. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
  1052. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
  1053. package/src/astro/routes/api/taxonomies/[name].ts +3 -2
  1054. package/src/astro/routes/api/taxonomies/index.ts +2 -1
  1055. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
  1056. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
  1057. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  1058. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  1059. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  1060. package/src/astro/routes/robots.txt.ts +33 -2
  1061. package/src/astro/routes/sitemap-[collection].xml.ts +31 -8
  1062. package/src/astro/routes/sitemap.xml.ts +12 -10
  1063. package/src/astro/types.ts +23 -2
  1064. package/src/auth/rate-limit.ts +18 -13
  1065. package/src/auth/types.ts +11 -4
  1066. package/src/aws-sdk.d.ts +2 -1
  1067. package/src/cache/redirect-paths.ts +56 -0
  1068. package/src/cache/route-cache.ts +22 -0
  1069. package/src/cleanup.ts +26 -0
  1070. package/src/cli/commands/export-seed.ts +2 -0
  1071. package/src/cli/commands/import/wordpress.ts +3 -27
  1072. package/src/cli/commands/login.ts +35 -43
  1073. package/src/cli/commands/migrate.ts +36 -4
  1074. package/src/cli/commands/seed.ts +23 -12
  1075. package/src/cli/wxr/parser.ts +2 -2
  1076. package/src/client/index.ts +18 -3
  1077. package/src/client/portable-text.ts +21 -7
  1078. package/src/comments/public-submission.ts +15 -8
  1079. package/src/comments/query.ts +8 -2
  1080. package/src/components/CommentForm.astro +50 -10
  1081. package/src/components/Comments.astro +51 -29
  1082. package/src/components/EmDashImage.astro +6 -4
  1083. package/src/components/Gallery.astro +4 -3
  1084. package/src/components/Image.astro +4 -3
  1085. package/src/components/InlinePortableTextEditor.tsx +269 -1320
  1086. package/src/components/Video.astro +100 -0
  1087. package/src/components/index.ts +4 -1
  1088. package/src/components/inline-block-types.ts +278 -0
  1089. package/src/components/inline-bubble-menu.tsx +696 -0
  1090. package/src/components/inline-code-block.tsx +8 -0
  1091. package/src/components/inline-editor-ui.tsx +1192 -0
  1092. package/src/components/inline-image.tsx +722 -0
  1093. package/src/components/inline-media-picker.tsx +1221 -0
  1094. package/src/components/inline-slash-menu.tsx +556 -0
  1095. package/src/components/webmcp-search.ts +15 -19
  1096. package/src/components/widgets/RecentPosts.astro +57 -17
  1097. package/src/content/converters/mark-safety.ts +3 -3
  1098. package/src/content/converters/portable-text-identity.ts +1 -0
  1099. package/src/content/converters/portable-text-to-prosemirror.ts +7 -0
  1100. package/src/content/converters/prosemirror-to-portable-text.ts +16 -0
  1101. package/src/content/converters/types.ts +22 -0
  1102. package/src/content/converters/video.ts +77 -0
  1103. package/src/database/collection-cleanup.ts +30 -0
  1104. package/src/database/datetime-storage.ts +337 -60
  1105. package/src/database/migration-lock.ts +43 -7
  1106. package/src/database/migrations/runner.ts +13 -1
  1107. package/src/database/repositories/comment.ts +17 -3
  1108. package/src/database/repositories/content.ts +25 -4
  1109. package/src/database/repositories/plugin-storage.ts +137 -27
  1110. package/src/database/repositories/redirect.ts +24 -2
  1111. package/src/database/repositories/revision.ts +24 -6
  1112. package/src/database/repositories/taxonomy.ts +61 -46
  1113. package/src/database/repositories/types.ts +67 -7
  1114. package/src/emdash-runtime.ts +393 -228
  1115. package/src/import/index.ts +1 -0
  1116. package/src/import/registry.ts +17 -0
  1117. package/src/import/sources/wordpress-plugin.ts +154 -11
  1118. package/src/import/types.ts +3 -0
  1119. package/src/import/utils.ts +7 -3
  1120. package/src/index.ts +3 -0
  1121. package/src/loader.ts +170 -45
  1122. package/src/mcp/json-schema.ts +14 -0
  1123. package/src/mcp/plugin-tool-name.ts +36 -0
  1124. package/src/mcp/server.ts +74 -15
  1125. package/src/media/image-endpoint.ts +101 -1
  1126. package/src/media/responsive.ts +14 -7
  1127. package/src/media/usage/collection-deletion.ts +4 -0
  1128. package/src/media/usage/extractor.ts +19 -2
  1129. package/src/media/usage/types.ts +5 -1
  1130. package/src/migrations/direct-executor.ts +42 -12
  1131. package/src/migrations/protocol.ts +6 -2
  1132. package/src/plugin-utils.ts +1 -1
  1133. package/src/plugins/adapt-sandbox-entry.ts +16 -6
  1134. package/src/plugins/context.ts +3 -7
  1135. package/src/plugins/hooks.ts +1 -1
  1136. package/src/plugins/http-route-dispatch.ts +5 -1
  1137. package/src/plugins/manifest-schema.ts +1 -0
  1138. package/src/plugins/route-error.ts +14 -0
  1139. package/src/plugins/routes.ts +2 -2
  1140. package/src/plugins/state.ts +41 -8
  1141. package/src/plugins/types.ts +6 -0
  1142. package/src/query.ts +59 -10
  1143. package/src/redirects/cache.ts +34 -2
  1144. package/src/redirects/patterns.ts +26 -2
  1145. package/src/schema/block-values.ts +80 -17
  1146. package/src/schema/registry.ts +16 -5
  1147. package/src/schema/slug.ts +19 -0
  1148. package/src/search/query.ts +3 -1
  1149. package/src/search/text-extraction.ts +6 -1
  1150. package/src/seed/apply.ts +32 -8
  1151. package/src/seed/validate.ts +31 -0
  1152. package/src/seo/sitemap-name.ts +22 -0
  1153. package/src/settings/index.ts +20 -0
  1154. package/src/settings/types.ts +2 -0
  1155. package/src/storage/index.ts +2 -0
  1156. package/src/storage/local.ts +10 -2
  1157. package/src/storage/range.ts +54 -0
  1158. package/src/storage/s3.ts +52 -8
  1159. package/src/storage/types.ts +30 -3
  1160. package/src/ui.ts +1 -0
  1161. package/src/utils/slugify.ts +6 -1
  1162. package/src/visual-editing/toolbar.ts +126 -47
  1163. package/src/widgets/components.ts +4 -0
  1164. package/src/widgets/index.ts +74 -82
  1165. package/src/widgets/recent-posts.ts +62 -0
  1166. package/dist/action-token-AgOs1UWD.mjs +0 -26
  1167. package/dist/action-token-AgOs1UWD.mjs.map +0 -1
  1168. package/dist/activation-xomsCMJg.mjs +0 -387
  1169. package/dist/activation-xomsCMJg.mjs.map +0 -1
  1170. package/dist/adapters-DM1oyHIN.d.mts +0 -173
  1171. package/dist/adapters-DM1oyHIN.d.mts.map +0 -1
  1172. package/dist/allowed-origins-CFtudhyw.mjs +0 -116
  1173. package/dist/allowed-origins-CFtudhyw.mjs.map +0 -1
  1174. package/dist/api-CltsXhiX.mjs +0 -4980
  1175. package/dist/api-CltsXhiX.mjs.map +0 -1
  1176. package/dist/api-tokens-P3mAaQgr.mjs +0 -166
  1177. package/dist/api-tokens-P3mAaQgr.mjs.map +0 -1
  1178. package/dist/apply-Q7uvzBWW.mjs +0 -1680
  1179. package/dist/apply-Q7uvzBWW.mjs.map +0 -1
  1180. package/dist/approvals-DycwI6lZ.mjs +0 -460
  1181. package/dist/approvals-DycwI6lZ.mjs.map +0 -1
  1182. package/dist/artifact-fetch-CWxyELVI.mjs +0 -659
  1183. package/dist/artifact-fetch-CWxyELVI.mjs.map +0 -1
  1184. package/dist/artifacts-UzWbysb8.mjs +0 -307
  1185. package/dist/artifacts-UzWbysb8.mjs.map +0 -1
  1186. package/dist/audit-CCH3MA4Y.mjs +0 -127
  1187. package/dist/audit-CCH3MA4Y.mjs.map +0 -1
  1188. package/dist/authoritative-records-dSvXCfzb.mjs +0 -5172
  1189. package/dist/authoritative-records-dSvXCfzb.mjs.map +0 -1
  1190. package/dist/authorize-DeWfk--K.mjs +0 -49
  1191. package/dist/authorize-DeWfk--K.mjs.map +0 -1
  1192. package/dist/backup-CFnbdTSJ.mjs +0 -246
  1193. package/dist/backup-CFnbdTSJ.mjs.map +0 -1
  1194. package/dist/block-types-C0YFSfR7.mjs +0 -132
  1195. package/dist/block-types-C0YFSfR7.mjs.map +0 -1
  1196. package/dist/block-values-H4E0XwE8.mjs +0 -175
  1197. package/dist/block-values-H4E0XwE8.mjs.map +0 -1
  1198. package/dist/byline-BhVslYLz.mjs +0 -909
  1199. package/dist/byline-BhVslYLz.mjs.map +0 -1
  1200. package/dist/byline-fields-DHJs0Mja.mjs +0 -280
  1201. package/dist/byline-fields-DHJs0Mja.mjs.map +0 -1
  1202. package/dist/byline-fields-xdxE9kxZ.mjs +0 -123
  1203. package/dist/byline-fields-xdxE9kxZ.mjs.map +0 -1
  1204. package/dist/bylines-B_nN9liM.mjs +0 -234
  1205. package/dist/bylines-B_nN9liM.mjs.map +0 -1
  1206. package/dist/bylines-C71YACkL.mjs +0 -150
  1207. package/dist/bylines-C71YACkL.mjs.map +0 -1
  1208. package/dist/cache-aTYCL9nK.mjs +0 -133
  1209. package/dist/cache-aTYCL9nK.mjs.map +0 -1
  1210. package/dist/canonical-Y1dpjCnp.mjs +0 -174
  1211. package/dist/canonical-Y1dpjCnp.mjs.map +0 -1
  1212. package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
  1213. package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
  1214. package/dist/challenge-store-CxZxPqaw.mjs +0 -51
  1215. package/dist/challenge-store-CxZxPqaw.mjs.map +0 -1
  1216. package/dist/checksum-DtH6m5uk.mjs +0 -162
  1217. package/dist/checksum-DtH6m5uk.mjs.map +0 -1
  1218. package/dist/chunks-zlGB5IQP.mjs +0 -25
  1219. package/dist/chunks-zlGB5IQP.mjs.map +0 -1
  1220. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
  1221. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
  1222. package/dist/comment-Bu08Wvr3.mjs +0 -313
  1223. package/dist/comment-Bu08Wvr3.mjs.map +0 -1
  1224. package/dist/comment-reaction-B8SfT-yM.mjs +0 -85
  1225. package/dist/comment-reaction-B8SfT-yM.mjs.map +0 -1
  1226. package/dist/comments-BRtp992B.mjs +0 -99
  1227. package/dist/comments-BRtp992B.mjs.map +0 -1
  1228. package/dist/comments-DVUYqdyC.mjs +0 -195
  1229. package/dist/comments-DVUYqdyC.mjs.map +0 -1
  1230. package/dist/components-CQY-Sgm-.mjs +0 -108
  1231. package/dist/components-CQY-Sgm-.mjs.map +0 -1
  1232. package/dist/config-B-uePMLj.d.mts +0 -39
  1233. package/dist/config-B-uePMLj.d.mts.map +0 -1
  1234. package/dist/config-B6BDSsz2.d.mts +0 -6712
  1235. package/dist/config-B6BDSsz2.d.mts.map +0 -1
  1236. package/dist/config-BsJHiQxC.mjs +0 -228
  1237. package/dist/config-BsJHiQxC.mjs.map +0 -1
  1238. package/dist/connection-B9pIasFd.mjs +0 -36
  1239. package/dist/connection-B9pIasFd.mjs.map +0 -1
  1240. package/dist/content-Dji9vEiW.mjs +0 -2063
  1241. package/dist/content-Dji9vEiW.mjs.map +0 -1
  1242. package/dist/content-list-query-DiNwyKtd.d.mts +0 -26
  1243. package/dist/content-list-query-DiNwyKtd.d.mts.map +0 -1
  1244. package/dist/content-repair-B7wnbzhN.mjs +0 -442
  1245. package/dist/content-repair-B7wnbzhN.mjs.map +0 -1
  1246. package/dist/context-Ctcxc8Ia.mjs +0 -2026
  1247. package/dist/context-Ctcxc8Ia.mjs.map +0 -1
  1248. package/dist/credits-Bu7dlobo.mjs +0 -110
  1249. package/dist/credits-Bu7dlobo.mjs.map +0 -1
  1250. package/dist/cron-xe5XKqA-.mjs +0 -306
  1251. package/dist/cron-xe5XKqA-.mjs.map +0 -1
  1252. package/dist/dashboard-B5hVHOtf.mjs +0 -151
  1253. package/dist/dashboard-B5hVHOtf.mjs.map +0 -1
  1254. package/dist/default-DaoYyFRS.mjs +0 -81
  1255. package/dist/default-DaoYyFRS.mjs.map +0 -1
  1256. package/dist/deferred-tasks-BYcDx2o_.d.mts +0 -9
  1257. package/dist/deferred-tasks-BYcDx2o_.d.mts.map +0 -1
  1258. package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
  1259. package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
  1260. package/dist/device-flow-Ma5P5d2e.mjs +0 -521
  1261. package/dist/device-flow-Ma5P5d2e.mjs.map +0 -1
  1262. package/dist/digest-xIpR3o64.mjs +0 -194
  1263. package/dist/digest-xIpR3o64.mjs.map +0 -1
  1264. package/dist/direct-executor-DMWwCey3.mjs +0 -104
  1265. package/dist/direct-executor-DMWwCey3.mjs.map +0 -1
  1266. package/dist/email-console-DmqVF5J_.mjs +0 -50
  1267. package/dist/email-console-DmqVF5J_.mjs.map +0 -1
  1268. package/dist/email-locale-Cc5YSXfJ.mjs +0 -25
  1269. package/dist/email-locale-Cc5YSXfJ.mjs.map +0 -1
  1270. package/dist/emdash-runtime-BlybX9Ui.mjs +0 -4249
  1271. package/dist/emdash-runtime-BlybX9Ui.mjs.map +0 -1
  1272. package/dist/entry-lock-De1L8qUQ.mjs +0 -163
  1273. package/dist/entry-lock-De1L8qUQ.mjs.map +0 -1
  1274. package/dist/entry-lock-esmMbgI9.d.mts +0 -4551
  1275. package/dist/entry-lock-esmMbgI9.d.mts.map +0 -1
  1276. package/dist/entry-lock-sxz2PGAT.mjs +0 -1197
  1277. package/dist/entry-lock-sxz2PGAT.mjs.map +0 -1
  1278. package/dist/env-types-BkjCtN13.mjs +0 -38
  1279. package/dist/env-types-BkjCtN13.mjs.map +0 -1
  1280. package/dist/error-B0rgPgsQ.mjs +0 -90
  1281. package/dist/error-B0rgPgsQ.mjs.map +0 -1
  1282. package/dist/errors-CuHQRiBW.mjs +0 -120
  1283. package/dist/errors-CuHQRiBW.mjs.map +0 -1
  1284. package/dist/errors-DTE6C3K_.mjs +0 -470
  1285. package/dist/errors-DTE6C3K_.mjs.map +0 -1
  1286. package/dist/escape-nJW7dR0s.mjs +0 -9
  1287. package/dist/escape-nJW7dR0s.mjs.map +0 -1
  1288. package/dist/fence-CGw57S4v.mjs +0 -162
  1289. package/dist/fence-CGw57S4v.mjs.map +0 -1
  1290. package/dist/field-defs-cache-Bw8w499w.mjs +0 -77
  1291. package/dist/field-defs-cache-Bw8w499w.mjs.map +0 -1
  1292. package/dist/field-map-hn-D-SyH.mjs +0 -83
  1293. package/dist/field-map-hn-D-SyH.mjs.map +0 -1
  1294. package/dist/fts-manager-DacCYIe4.mjs +0 -443
  1295. package/dist/fts-manager-DacCYIe4.mjs.map +0 -1
  1296. package/dist/gc-BBplHrv6.mjs +0 -75
  1297. package/dist/gc-BBplHrv6.mjs.map +0 -1
  1298. package/dist/hash-C4DFoJ7Z.mjs +0 -37
  1299. package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
  1300. package/dist/hook-result-DSRRxu_-.d.mts +0 -31
  1301. package/dist/hook-result-DSRRxu_-.d.mts.map +0 -1
  1302. package/dist/hreflang-CKPunvU0.mjs +0 -105
  1303. package/dist/hreflang-CKPunvU0.mjs.map +0 -1
  1304. package/dist/hreflang-egumj6WF.d.mts +0 -50
  1305. package/dist/hreflang-egumj6WF.d.mts.map +0 -1
  1306. package/dist/http-route-dispatch-DjNFZcJ2.mjs +0 -339
  1307. package/dist/http-route-dispatch-DjNFZcJ2.mjs.map +0 -1
  1308. package/dist/identity-Dfrx2_Bc.mjs +0 -35
  1309. package/dist/identity-Dfrx2_Bc.mjs.map +0 -1
  1310. package/dist/import-ROBvhbNc.mjs +0 -2021
  1311. package/dist/import-ROBvhbNc.mjs.map +0 -1
  1312. package/dist/index-B4sIdCAT.d.mts +0 -623
  1313. package/dist/index-B4sIdCAT.d.mts.map +0 -1
  1314. package/dist/install-finalization-CPM7Gged.mjs +0 -58
  1315. package/dist/install-finalization-CPM7Gged.mjs.map +0 -1
  1316. package/dist/keys-DxqxcAD4.mjs +0 -61
  1317. package/dist/keys-DxqxcAD4.mjs.map +0 -1
  1318. package/dist/kinds-BQl5gN6e.mjs +0 -974
  1319. package/dist/kinds-BQl5gN6e.mjs.map +0 -1
  1320. package/dist/lifecycle-DGQI7itS.mjs +0 -25
  1321. package/dist/lifecycle-DGQI7itS.mjs.map +0 -1
  1322. package/dist/load-DMxRl4VK.mjs +0 -28
  1323. package/dist/load-DMxRl4VK.mjs.map +0 -1
  1324. package/dist/loader-1DMiOq5s.mjs +0 -1303
  1325. package/dist/loader-1DMiOq5s.mjs.map +0 -1
  1326. package/dist/loops-Dn1i16FP.mjs +0 -205
  1327. package/dist/loops-Dn1i16FP.mjs.map +0 -1
  1328. package/dist/manifest-builder-CTw4FmZk.mjs +0 -189
  1329. package/dist/manifest-builder-CTw4FmZk.mjs.map +0 -1
  1330. package/dist/manifest-schema-gy37bD_D.mjs +0 -496
  1331. package/dist/manifest-schema-gy37bD_D.mjs.map +0 -1
  1332. package/dist/marketplace-tHWSsCUo.mjs +0 -257
  1333. package/dist/marketplace-tHWSsCUo.mjs.map +0 -1
  1334. package/dist/media-Bw-Q65ve.mjs +0 -294
  1335. package/dist/media-Bw-Q65ve.mjs.map +0 -1
  1336. package/dist/media-BzUDu7nl.mjs +0 -373
  1337. package/dist/media-BzUDu7nl.mjs.map +0 -1
  1338. package/dist/media-aahnKHze.mjs +0 -408
  1339. package/dist/media-aahnKHze.mjs.map +0 -1
  1340. package/dist/media-allowlist-RMrjo8TU.mjs +0 -45
  1341. package/dist/media-allowlist-RMrjo8TU.mjs.map +0 -1
  1342. package/dist/media-folders-kabR1oJf.mjs +0 -210
  1343. package/dist/media-folders-kabR1oJf.mjs.map +0 -1
  1344. package/dist/media-url-DloW2xrP.mjs +0 -43
  1345. package/dist/media-url-DloW2xrP.mjs.map +0 -1
  1346. package/dist/media-usage-CHHpV7ee.mjs +0 -282
  1347. package/dist/media-usage-CHHpV7ee.mjs.map +0 -1
  1348. package/dist/media-usage-activation-BinYqC_r.mjs +0 -78
  1349. package/dist/media-usage-activation-BinYqC_r.mjs.map +0 -1
  1350. package/dist/media-usage-work-C734aq6s.mjs +0 -1015
  1351. package/dist/media-usage-work-C734aq6s.mjs.map +0 -1
  1352. package/dist/media-usage-work-lxvV0-UO.mjs +0 -151
  1353. package/dist/media-usage-work-lxvV0-UO.mjs.map +0 -1
  1354. package/dist/menus-6RHNq4ZK.mjs +0 -753
  1355. package/dist/menus-6RHNq4ZK.mjs.map +0 -1
  1356. package/dist/menus-AuCTaO9W.mjs +0 -3704
  1357. package/dist/menus-AuCTaO9W.mjs.map +0 -1
  1358. package/dist/menus-BQKqf0Up.mjs +0 -92
  1359. package/dist/menus-BQKqf0Up.mjs.map +0 -1
  1360. package/dist/mode-nh0ppSX5.mjs +0 -23
  1361. package/dist/mode-nh0ppSX5.mjs.map +0 -1
  1362. package/dist/node-sqlite-compat-CDOEcc97.mjs +0 -63
  1363. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +0 -1
  1364. package/dist/oauth-authorization-BtYQ80uU.mjs +0 -274
  1365. package/dist/oauth-authorization-BtYQ80uU.mjs.map +0 -1
  1366. package/dist/oauth-clients-C1S4NQHh.mjs +0 -266
  1367. package/dist/oauth-clients-C1S4NQHh.mjs.map +0 -1
  1368. package/dist/oauth-state-store-CpGi2FZH.mjs +0 -50
  1369. package/dist/oauth-state-store-CpGi2FZH.mjs.map +0 -1
  1370. package/dist/oauth-user-lookup-BNp1aFAr.mjs +0 -26
  1371. package/dist/oauth-user-lookup-BNp1aFAr.mjs.map +0 -1
  1372. package/dist/options-B41aLm1I.d.mts +0 -81
  1373. package/dist/options-B41aLm1I.d.mts.map +0 -1
  1374. package/dist/ownership-DoeAIuTg.mjs +0 -12
  1375. package/dist/ownership-DoeAIuTg.mjs.map +0 -1
  1376. package/dist/parse-CmFDTGzp.mjs +0 -81
  1377. package/dist/parse-CmFDTGzp.mjs.map +0 -1
  1378. package/dist/parse-QVS0t5oR.d.mts +0 -172
  1379. package/dist/parse-QVS0t5oR.d.mts.map +0 -1
  1380. package/dist/passkey-config-C-MxsV22.mjs +0 -46
  1381. package/dist/passkey-config-C-MxsV22.mjs.map +0 -1
  1382. package/dist/paths-kr8hAMMI.mjs +0 -77
  1383. package/dist/paths-kr8hAMMI.mjs.map +0 -1
  1384. package/dist/patterns-DyZJ67I7.mjs +0 -140
  1385. package/dist/patterns-DyZJ67I7.mjs.map +0 -1
  1386. package/dist/placeholder-Dn7MMdWr.d.mts +0 -306
  1387. package/dist/placeholder-Dn7MMdWr.d.mts.map +0 -1
  1388. package/dist/plan-CuQOeU9g.mjs +0 -135
  1389. package/dist/plan-CuQOeU9g.mjs.map +0 -1
  1390. package/dist/plugins-CGb-G98c.mjs +0 -261
  1391. package/dist/plugins-CGb-G98c.mjs.map +0 -1
  1392. package/dist/policy-C5wrDXYV.mjs +0 -45
  1393. package/dist/policy-C5wrDXYV.mjs.map +0 -1
  1394. package/dist/portable-text-BnRuiR1-.mjs +0 -307
  1395. package/dist/portable-text-BnRuiR1-.mjs.map +0 -1
  1396. package/dist/preview-xWNSR1Li.mjs +0 -107
  1397. package/dist/preview-xWNSR1Li.mjs.map +0 -1
  1398. package/dist/protocol-ClxN-m1e.d.mts +0 -61
  1399. package/dist/protocol-ClxN-m1e.d.mts.map +0 -1
  1400. package/dist/public-submission-CkmT2SKv.mjs +0 -250
  1401. package/dist/public-submission-CkmT2SKv.mjs.map +0 -1
  1402. package/dist/public-url-B5a0QAh6.mjs +0 -101
  1403. package/dist/public-url-B5a0QAh6.mjs.map +0 -1
  1404. package/dist/query-DHqFiqqH.mjs +0 -41
  1405. package/dist/query-DHqFiqqH.mjs.map +0 -1
  1406. package/dist/query-DT85BehD.mjs +0 -1125
  1407. package/dist/query-DT85BehD.mjs.map +0 -1
  1408. package/dist/rate-limit-iMvcu3eu.mjs +0 -120
  1409. package/dist/rate-limit-iMvcu3eu.mjs.map +0 -1
  1410. package/dist/receipt-Dpp1uaX9.mjs +0 -43
  1411. package/dist/receipt-Dpp1uaX9.mjs.map +0 -1
  1412. package/dist/redirect-BRoLiWQE.mjs +0 -19
  1413. package/dist/redirect-BRoLiWQE.mjs.map +0 -1
  1414. package/dist/redirect-xZNpBoGp.mjs +0 -417
  1415. package/dist/redirect-xZNpBoGp.mjs.map +0 -1
  1416. package/dist/redirects-D4EWeXAo.mjs +0 -148
  1417. package/dist/redirects-D4EWeXAo.mjs.map +0 -1
  1418. package/dist/redirects-DCKqwiWp.mjs +0 -446
  1419. package/dist/redirects-DCKqwiWp.mjs.map +0 -1
  1420. package/dist/registry-DaXmUsD4.mjs +0 -8369
  1421. package/dist/registry-DaXmUsD4.mjs.map +0 -1
  1422. package/dist/relations-JvBP8nGP.mjs +0 -776
  1423. package/dist/relations-JvBP8nGP.mjs.map +0 -1
  1424. package/dist/request-meta-B6blULFY.mjs +0 -141
  1425. package/dist/request-meta-B6blULFY.mjs.map +0 -1
  1426. package/dist/resolve-DAhHi5tn.mjs +0 -100
  1427. package/dist/resolve-DAhHi5tn.mjs.map +0 -1
  1428. package/dist/revision-BWEH2qQB.mjs +0 -368
  1429. package/dist/revision-BWEH2qQB.mjs.map +0 -1
  1430. package/dist/route-wire-DK600v4u.mjs +0 -197
  1431. package/dist/route-wire-DK600v4u.mjs.map +0 -1
  1432. package/dist/routes-BeZyaCzv.mjs +0 -272
  1433. package/dist/routes-BeZyaCzv.mjs.map +0 -1
  1434. package/dist/runner-CskI4Hmq.mjs +0 -6372
  1435. package/dist/runner-CskI4Hmq.mjs.map +0 -1
  1436. package/dist/runner-J3Cj6DGk.d.mts +0 -68
  1437. package/dist/runner-J3Cj6DGk.d.mts.map +0 -1
  1438. package/dist/schema-CK0ihqMR.mjs +0 -815
  1439. package/dist/schema-CK0ihqMR.mjs.map +0 -1
  1440. package/dist/schema-VtaZSrC-.mjs +0 -13
  1441. package/dist/schema-VtaZSrC-.mjs.map +0 -1
  1442. package/dist/scopes-BRnGlL9t.mjs +0 -34
  1443. package/dist/scopes-BRnGlL9t.mjs.map +0 -1
  1444. package/dist/search-D6-XK1Sn.mjs +0 -448
  1445. package/dist/search-D6-XK1Sn.mjs.map +0 -1
  1446. package/dist/sections-CBDCf7qR.mjs +0 -346
  1447. package/dist/sections-CBDCf7qR.mjs.map +0 -1
  1448. package/dist/seo-BdeEPDNW.mjs +0 -133
  1449. package/dist/seo-BdeEPDNW.mjs.map +0 -1
  1450. package/dist/seo-C61bnPuV.mjs +0 -114
  1451. package/dist/seo-C61bnPuV.mjs.map +0 -1
  1452. package/dist/service-BuRKLMxa.mjs +0 -150
  1453. package/dist/service-BuRKLMxa.mjs.map +0 -1
  1454. package/dist/session-user-CqkPtrPL.mjs +0 -61
  1455. package/dist/session-user-CqkPtrPL.mjs.map +0 -1
  1456. package/dist/settings-0u0lTthS.mjs +0 -51
  1457. package/dist/settings-0u0lTthS.mjs.map +0 -1
  1458. package/dist/settings-WHr45II1.mjs +0 -61
  1459. package/dist/settings-WHr45II1.mjs.map +0 -1
  1460. package/dist/settings-m5tIYnF0.mjs +0 -443
  1461. package/dist/settings-m5tIYnF0.mjs.map +0 -1
  1462. package/dist/setup-complete-B2_dhZZz.mjs +0 -65
  1463. package/dist/setup-complete-B2_dhZZz.mjs.map +0 -1
  1464. package/dist/setup-nonce-CJV9ftSK.mjs +0 -25
  1465. package/dist/setup-nonce-CJV9ftSK.mjs.map +0 -1
  1466. package/dist/site-settings-KJOqJW6W.mjs +0 -50
  1467. package/dist/site-settings-KJOqJW6W.mjs.map +0 -1
  1468. package/dist/site-url-Ceq_AUK0.mjs +0 -16
  1469. package/dist/site-url-Ceq_AUK0.mjs.map +0 -1
  1470. package/dist/slugify-T5GHH42D.mjs +0 -17
  1471. package/dist/slugify-T5GHH42D.mjs.map +0 -1
  1472. package/dist/snapshot-Dzsn3NZa.mjs +0 -414
  1473. package/dist/snapshot-Dzsn3NZa.mjs.map +0 -1
  1474. package/dist/ssrf-DsmvZB80.mjs +0 -406
  1475. package/dist/ssrf-DsmvZB80.mjs.map +0 -1
  1476. package/dist/stage-Csnh_yEd.mjs +0 -662
  1477. package/dist/stage-Csnh_yEd.mjs.map +0 -1
  1478. package/dist/staged-Q7pnEVvI.mjs +0 -686
  1479. package/dist/staged-Q7pnEVvI.mjs.map +0 -1
  1480. package/dist/state-kGdOMQRY.mjs +0 -153
  1481. package/dist/state-kGdOMQRY.mjs.map +0 -1
  1482. package/dist/status-D39Fpy8R.mjs +0 -30
  1483. package/dist/status-D39Fpy8R.mjs.map +0 -1
  1484. package/dist/storage-query-C7iy6eUb.d.mts +0 -1615
  1485. package/dist/storage-query-C7iy6eUb.d.mts.map +0 -1
  1486. package/dist/tar-BWiraSUY.mjs +0 -449
  1487. package/dist/tar-BWiraSUY.mjs.map +0 -1
  1488. package/dist/target-DOFs5oUC.mjs +0 -27
  1489. package/dist/target-DOFs5oUC.mjs.map +0 -1
  1490. package/dist/taxonomies-BS40Wxvi.mjs +0 -939
  1491. package/dist/taxonomies-BS40Wxvi.mjs.map +0 -1
  1492. package/dist/taxonomies-DAZU9VDd.mjs +0 -697
  1493. package/dist/taxonomies-DAZU9VDd.mjs.map +0 -1
  1494. package/dist/taxonomy-XzLE95Vx.mjs +0 -525
  1495. package/dist/taxonomy-XzLE95Vx.mjs.map +0 -1
  1496. package/dist/tokens-DSQan4p7.mjs +0 -171
  1497. package/dist/tokens-DSQan4p7.mjs.map +0 -1
  1498. package/dist/transfer-BcCVxDgf.mjs +0 -166
  1499. package/dist/transfer-BcCVxDgf.mjs.map +0 -1
  1500. package/dist/transfer-OMrancOt.mjs +0 -8873
  1501. package/dist/transfer-OMrancOt.mjs.map +0 -1
  1502. package/dist/transfer-download-Dc-ltjZY.mjs +0 -33
  1503. package/dist/transfer-download-Dc-ltjZY.mjs.map +0 -1
  1504. package/dist/transformations-Ddx7UtrY.mjs +0 -196
  1505. package/dist/transformations-Ddx7UtrY.mjs.map +0 -1
  1506. package/dist/transport-flR-Zmds.d.mts +0 -42
  1507. package/dist/transport-flR-Zmds.d.mts.map +0 -1
  1508. package/dist/transport-umzEbgYO.mjs +0 -136
  1509. package/dist/transport-umzEbgYO.mjs.map +0 -1
  1510. package/dist/trusted-proxy-BqfQFs6a.mjs +0 -51
  1511. package/dist/trusted-proxy-BqfQFs6a.mjs.map +0 -1
  1512. package/dist/turnstile-Do60baId.mjs +0 -58
  1513. package/dist/turnstile-Do60baId.mjs.map +0 -1
  1514. package/dist/types-BT1p3uyb.d.mts +0 -1735
  1515. package/dist/types-BT1p3uyb.d.mts.map +0 -1
  1516. package/dist/types-BYaPWs_F.d.mts +0 -198
  1517. package/dist/types-BYaPWs_F.d.mts.map +0 -1
  1518. package/dist/types-C-Xp0CcN.mjs +0 -103
  1519. package/dist/types-C-Xp0CcN.mjs.map +0 -1
  1520. package/dist/types-CLTQ9b_r.d.mts +0 -374
  1521. package/dist/types-CLTQ9b_r.d.mts.map +0 -1
  1522. package/dist/types-CPkQw2T2.d.mts +0 -85
  1523. package/dist/types-CPkQw2T2.d.mts.map +0 -1
  1524. package/dist/types-CQLvuXoZ.d.mts +0 -198
  1525. package/dist/types-CQLvuXoZ.d.mts.map +0 -1
  1526. package/dist/types-CV5xszpF.d.mts +0 -363
  1527. package/dist/types-CV5xszpF.d.mts.map +0 -1
  1528. package/dist/types-CdEMurNh.mjs +0 -77
  1529. package/dist/types-CdEMurNh.mjs.map +0 -1
  1530. package/dist/types-CxwtnuSS.mjs +0 -37
  1531. package/dist/types-CxwtnuSS.mjs.map +0 -1
  1532. package/dist/types-DGw8KMX_.mjs +0 -16
  1533. package/dist/types-DGw8KMX_.mjs.map +0 -1
  1534. package/dist/types-DOfVMPoo.d.mts +0 -125
  1535. package/dist/types-DOfVMPoo.d.mts.map +0 -1
  1536. package/dist/types-LtS0SM4F.d.mts +0 -287
  1537. package/dist/types-LtS0SM4F.d.mts.map +0 -1
  1538. package/dist/types-ifgOkcBa.d.mts +0 -916
  1539. package/dist/types-ifgOkcBa.d.mts.map +0 -1
  1540. package/dist/update-check-DOc2aBIU.mjs +0 -161
  1541. package/dist/update-check-DOc2aBIU.mjs.map +0 -1
  1542. package/dist/upload-attempts-nzdc3cay.mjs +0 -32
  1543. package/dist/upload-attempts-nzdc3cay.mjs.map +0 -1
  1544. package/dist/url-pattern-hVbqpXs6.mjs +0 -41
  1545. package/dist/url-pattern-hVbqpXs6.mjs.map +0 -1
  1546. package/dist/user-Dnp53zTq.mjs +0 -171
  1547. package/dist/user-Dnp53zTq.mjs.map +0 -1
  1548. package/dist/utils-CoV-PYhg.mjs +0 -439
  1549. package/dist/utils-CoV-PYhg.mjs.map +0 -1
  1550. package/dist/validate-CfQ9_YlD.d.mts +0 -468
  1551. package/dist/validate-CfQ9_YlD.d.mts.map +0 -1
  1552. package/dist/validate-DBX3DKtL.mjs +0 -516
  1553. package/dist/validate-DBX3DKtL.mjs.map +0 -1
  1554. package/dist/validation-BJMiDhB1.mjs +0 -219
  1555. package/dist/validation-BJMiDhB1.mjs.map +0 -1
  1556. package/dist/version-BaT8yKIT.mjs +0 -7
  1557. package/dist/version-BaT8yKIT.mjs.map +0 -1
  1558. package/dist/version-BwEGkqkx.mjs +0 -9
  1559. package/dist/version-BwEGkqkx.mjs.map +0 -1
  1560. package/dist/virtual-modules-B6vJW15k.mjs +0 -516
  1561. package/dist/virtual-modules-B6vJW15k.mjs.map +0 -1
  1562. package/dist/widgets-BkxBAgZ_.mjs +0 -126
  1563. package/dist/widgets-BkxBAgZ_.mjs.map +0 -1
  1564. package/dist/wxr-taxonomies-D7gAJyOF.mjs +0 -453
  1565. package/dist/wxr-taxonomies-D7gAJyOF.mjs.map +0 -1
  1566. package/dist/wxr-taxonomies-DM5J9AsT.d.mts +0 -34
  1567. package/dist/wxr-taxonomies-DM5J9AsT.d.mts.map +0 -1
  1568. package/dist/zod-generator-BQilAboC.mjs +0 -424
  1569. package/dist/zod-generator-BQilAboC.mjs.map +0 -1
  1570. /package/dist/{api-tokens-BLz2MtQs.mjs → api-tokens-CdP49zVF.mjs} +0 -0
  1571. /package/dist/{ssrf-tA45vIPX.mjs → ssrf-DM0E-D_8.mjs} +0 -0
@@ -1,417 +0,0 @@
1
- import { o as currentTimestampValue, u as isPostgres } from "./dialect-helpers-7_IqPdh9.mjs";
2
- import { c as encodeCursor, s as decodeCursor } from "./types-C-Xp0CcN.mjs";
3
- import { t as interpolateUrlPattern } from "./resolve-D-kqyKns.mjs";
4
- import { t as isSiteRelativeDestination } from "./destination-r2zIAZ2S.mjs";
5
- import { i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-DyZJ67I7.mjs";
6
- import { sql } from "kysely";
7
- import { ulid } from "ulidx";
8
-
9
- //#region src/database/repositories/redirect.ts
10
- /**
11
- * Hard cap on rows stored in `_emdash_404_log`. Scheduled maintenance evicts
12
- * the oldest rows by `last_seen_at` without adding a read-amplifying count to
13
- * the anonymous request path.
14
- */
15
- const MAX_404_LOG_ROWS = 1e4;
16
- /** Max stored length for the `Referer` header — truncated on insert. */
17
- const REFERRER_MAX_LENGTH = 512;
18
- /** Max stored length for the `User-Agent` header — truncated on insert. */
19
- const USER_AGENT_MAX_LENGTH = 256;
20
- /** Pattern to escape LIKE wildcards: %, _, and backslash */
21
- const LIKE_ESCAPE_RE = /[\\%_]/g;
22
- /**
23
- * Truncate a header-derived string to `max` chars, preserving `null`/`undefined`
24
- * as `null`. Empty strings stay empty (the caller decides whether to coerce).
25
- */
26
- function truncateOrNull(value, max) {
27
- if (value === null || value === void 0) return null;
28
- return value.length > max ? value.slice(0, max) : value;
29
- }
30
- var RedirectWriteBusyError = class extends Error {
31
- name = "RedirectWriteBusyError";
32
- };
33
- const REDIRECT_WRITE_LOCK_ID = 1;
34
- const REDIRECT_WRITE_LEASE_MS = 3e4;
35
- const REDIRECT_WRITE_LOCK_ATTEMPTS = 5;
36
- const POSTGRES_REDIRECT_LOCK_KEY = 1168624763;
37
- function rowToRedirect(row) {
38
- return {
39
- id: row.id,
40
- source: row.source,
41
- destination: row.destination,
42
- type: row.type,
43
- isPattern: row.is_pattern === 1,
44
- enabled: row.enabled === 1,
45
- hits: row.hits,
46
- lastHitAt: row.last_hit_at,
47
- groupName: row.group_name,
48
- auto: row.auto === 1,
49
- createdAt: row.created_at,
50
- updatedAt: row.updated_at
51
- };
52
- }
53
- var RedirectRepository = class RedirectRepository {
54
- constructor(db) {
55
- this.db = db;
56
- }
57
- async findById(id) {
58
- return (await this.findVersionedById(id))?.redirect ?? null;
59
- }
60
- async findVersionedById(id) {
61
- const row = await this.db.selectFrom("_emdash_redirects").selectAll().where("id", "=", id).executeTakeFirst();
62
- return row ? {
63
- redirect: rowToRedirect(row),
64
- configRevision: row.config_revision
65
- } : null;
66
- }
67
- async findBySource(source) {
68
- const row = await this.db.selectFrom("_emdash_redirects").selectAll().where("source", "=", source).executeTakeFirst();
69
- return row ? rowToRedirect(row) : null;
70
- }
71
- async findConfigRevision(id) {
72
- return (await this.db.selectFrom("_emdash_redirects").select("config_revision").where("id", "=", id).executeTakeFirst())?.config_revision ?? null;
73
- }
74
- async withWriteLock(action) {
75
- if (isPostgres(this.db)) {
76
- if (this.db.isTransaction) {
77
- await sql`SELECT pg_advisory_xact_lock(${POSTGRES_REDIRECT_LOCK_KEY})`.execute(this.db);
78
- return this.withLease(action);
79
- }
80
- return this.db.transaction().execute(async (transaction) => {
81
- await sql`SELECT pg_advisory_xact_lock(${POSTGRES_REDIRECT_LOCK_KEY})`.execute(transaction);
82
- return new RedirectRepository(transaction).withLease(action);
83
- });
84
- }
85
- return this.withLease(action);
86
- }
87
- async withLease(action) {
88
- const token = ulid();
89
- let fence;
90
- for (let attempt = 0; attempt < REDIRECT_WRITE_LOCK_ATTEMPTS; attempt++) {
91
- const now = Date.now();
92
- const result = await this.db.updateTable("_emdash_redirect_write_lock").set({
93
- token,
94
- expires_at: now + REDIRECT_WRITE_LEASE_MS,
95
- generation: sql`generation + 1`
96
- }).where("id", "=", REDIRECT_WRITE_LOCK_ID).where((eb) => eb.or([eb("token", "=", ""), eb("expires_at", "<", now)])).returning("generation").executeTakeFirst();
97
- if (result) {
98
- fence = {
99
- token,
100
- generation: result.generation
101
- };
102
- break;
103
- }
104
- await new Promise((resolve) => setTimeout(resolve, 10 * 2 ** attempt));
105
- }
106
- if (!fence) throw new RedirectWriteBusyError("Another redirect change is in progress");
107
- try {
108
- return await action(fence, this);
109
- } finally {
110
- try {
111
- await this.db.updateTable("_emdash_redirect_write_lock").set({
112
- token: "",
113
- expires_at: 0
114
- }).where("id", "=", REDIRECT_WRITE_LOCK_ID).where("token", "=", token).execute();
115
- } catch (error) {
116
- console.error("Failed to release redirect write lock:", error);
117
- }
118
- }
119
- }
120
- async findMany(opts) {
121
- const limit = Math.min(Math.max(opts.limit ?? 50, 1), 100);
122
- let query = this.db.selectFrom("_emdash_redirects").selectAll().orderBy("created_at", "desc").orderBy("id", "desc").limit(limit + 1);
123
- if (opts.search) {
124
- const term = `%${opts.search.replace(LIKE_ESCAPE_RE, (c) => `\\${c}`)}%`;
125
- query = query.where((eb) => eb.or([sql`source LIKE ${term} ESCAPE '\\'`, sql`destination LIKE ${term} ESCAPE '\\'`]));
126
- }
127
- if (opts.group !== void 0) query = query.where("group_name", "=", opts.group);
128
- if (opts.enabled !== void 0) query = query.where("enabled", "=", opts.enabled ? 1 : 0);
129
- if (opts.auto !== void 0) query = query.where("auto", "=", opts.auto ? 1 : 0);
130
- if (opts.cursor) {
131
- const decoded = decodeCursor(opts.cursor);
132
- query = query.where((eb) => eb.or([eb("created_at", "<", decoded.orderValue), eb.and([eb("created_at", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
133
- }
134
- const rows = await query.execute();
135
- const items = rows.slice(0, limit).map(rowToRedirect);
136
- const result = { items };
137
- if (rows.length > limit) {
138
- const last = items.at(-1);
139
- result.nextCursor = encodeCursor(last.createdAt, last.id);
140
- }
141
- return result;
142
- }
143
- async create(input, fence) {
144
- if (!fence) return this.withWriteLock((currentFence, repository) => repository.create(input, currentFence));
145
- const id = ulid();
146
- const now = (/* @__PURE__ */ new Date()).toISOString();
147
- const patternFlag = input.isPattern ?? isPattern(input.source);
148
- await this.db.insertInto("_emdash_redirects").values({
149
- id,
150
- source: input.source,
151
- destination: input.destination,
152
- type: input.type ?? 301,
153
- is_pattern: patternFlag ? 1 : 0,
154
- enabled: input.enabled !== false ? 1 : 0,
155
- hits: 0,
156
- last_hit_at: null,
157
- group_name: input.groupName ?? null,
158
- auto: input.auto ? 1 : 0,
159
- config_revision: ulid(),
160
- source_guard: 1,
161
- write_generation: fence?.generation ?? 0,
162
- created_at: now,
163
- updated_at: now
164
- }).execute();
165
- return await this.findById(id);
166
- }
167
- async update(id, input, expectedRevision, fence) {
168
- if (!fence) return this.withWriteLock((currentFence, repository) => repository.update(id, input, expectedRevision, currentFence));
169
- const existing = await this.findById(id);
170
- if (!existing) return null;
171
- const values = {
172
- updated_at: new Date(Math.max(Date.now(), new Date(existing.updatedAt).getTime() + 1)).toISOString(),
173
- config_revision: ulid()
174
- };
175
- if (fence) values.write_generation = fence.generation;
176
- if (input.source !== void 0) {
177
- values.source = input.source;
178
- values.source_guard = 1;
179
- values.is_pattern = input.isPattern !== void 0 ? input.isPattern ? 1 : 0 : isPattern(input.source) ? 1 : 0;
180
- } else if (input.isPattern !== void 0) values.is_pattern = input.isPattern ? 1 : 0;
181
- if (input.destination !== void 0) values.destination = input.destination;
182
- if (input.type !== void 0) values.type = input.type;
183
- if (input.enabled !== void 0) values.enabled = input.enabled ? 1 : 0;
184
- if (input.groupName !== void 0) values.group_name = input.groupName;
185
- let query = this.db.updateTable("_emdash_redirects").set(values).where("id", "=", id);
186
- if (expectedRevision !== void 0) query = query.where("config_revision", "=", expectedRevision);
187
- if (fence) query = query.where((eb) => eb.exists(eb.selectFrom("_emdash_redirect_write_lock").select("id").where("id", "=", REDIRECT_WRITE_LOCK_ID).where("token", "=", fence.token).where("generation", "=", fence.generation)));
188
- const result = await query.executeTakeFirst();
189
- if (BigInt(result.numUpdatedRows) === 0n) return null;
190
- return await this.findById(id);
191
- }
192
- async delete(id, expectedRevision, fence) {
193
- if (!fence) return this.withWriteLock((currentFence, repository) => repository.delete(id, expectedRevision, currentFence));
194
- let query = this.db.deleteFrom("_emdash_redirects").where("id", "=", id);
195
- if (expectedRevision !== void 0) query = query.where("config_revision", "=", expectedRevision);
196
- if (fence) query = query.where((eb) => eb.exists(eb.selectFrom("_emdash_redirect_write_lock").select("id").where("id", "=", REDIRECT_WRITE_LOCK_ID).where("token", "=", fence.token).where("generation", "=", fence.generation)));
197
- const result = await query.executeTakeFirst();
198
- return BigInt(result.numDeletedRows) > 0n;
199
- }
200
- /**
201
- * Fetch all enabled redirects (for loop detection graph building).
202
- * Not paginated — returns the full set. Ordered oldest first: the earliest
203
- * matching pattern rule wins, so this order is match precedence.
204
- */
205
- async findAllEnabled() {
206
- return (await this.db.selectFrom("_emdash_redirects").selectAll().where("enabled", "=", 1).orderBy("created_at", (order) => order.asc().nullsFirst()).orderBy("id", "asc").execute()).map(rowToRedirect);
207
- }
208
- async findExactMatch(path) {
209
- const row = await this.db.selectFrom("_emdash_redirects").selectAll().where("source", "=", path).where("enabled", "=", 1).where("is_pattern", "=", 0).executeTakeFirst();
210
- return row ? rowToRedirect(row) : null;
211
- }
212
- async findEnabledPatternRules() {
213
- return (await this.db.selectFrom("_emdash_redirects").selectAll().where("enabled", "=", 1).where("is_pattern", "=", 1).orderBy("created_at", (order) => order.asc().nullsFirst()).orderBy("id", "asc").execute()).map(rowToRedirect);
214
- }
215
- /**
216
- * Match a request path against all enabled redirect rules.
217
- * Checks exact matches first (indexed), then pattern rules.
218
- * Returns the matched redirect and the resolved destination URL.
219
- */
220
- async matchPath(path) {
221
- const exact = await this.findExactMatch(path);
222
- if (exact && isSiteRelativeDestination(exact.destination)) return {
223
- redirect: exact,
224
- resolvedDestination: exact.destination
225
- };
226
- const patterns = await this.findEnabledPatternRules();
227
- for (const redirect of patterns) {
228
- if (validatePattern(redirect.source)) continue;
229
- const params = matchPattern(compilePattern(redirect.source), path);
230
- if (params) {
231
- const resolved = interpolateDestination(redirect.destination, params);
232
- if (isSiteRelativeDestination(resolved)) return {
233
- redirect,
234
- resolvedDestination: resolved
235
- };
236
- }
237
- }
238
- return null;
239
- }
240
- async recordHit(id) {
241
- await sql`
242
- UPDATE _emdash_redirects
243
- SET hits = hits + 1, last_hit_at = ${currentTimestampValue(this.db)}, updated_at = ${currentTimestampValue(this.db)}
244
- WHERE id = ${id}
245
- `.execute(this.db);
246
- }
247
- /**
248
- * Create an auto-redirect when a content slug changes.
249
- * Uses the collection's URL pattern to compute old/new URLs.
250
- * Collapses existing redirect chains pointing to the old URL and
251
- * removes redirects that would shadow the now-live new URL, so a
252
- * rename that is later reverted cannot form a loop (#1986).
253
- *
254
- * Returns null when old and new URL are identical (nothing to redirect).
255
- */
256
- async createAutoRedirect(collection, oldSlug, newSlug, contentId, urlPattern, oldPublishedAt, newPublishedAt) {
257
- return this.withWriteLock(async (fence, repository) => {
258
- const oldUrl = interpolateUrlPattern({
259
- pattern: urlPattern,
260
- collection,
261
- slug: oldSlug,
262
- id: contentId,
263
- date: oldPublishedAt
264
- });
265
- const newUrl = interpolateUrlPattern({
266
- pattern: urlPattern,
267
- collection,
268
- slug: newSlug,
269
- id: contentId,
270
- date: newPublishedAt
271
- });
272
- if (oldUrl === newUrl) return null;
273
- await repository.db.deleteFrom("_emdash_redirects").where("source", "=", newUrl).where((eb) => eb.exists(eb.selectFrom("_emdash_redirect_write_lock").select("id").where("id", "=", REDIRECT_WRITE_LOCK_ID).where("token", "=", fence.token).where("generation", "=", fence.generation))).execute();
274
- await repository.collapseChains(oldUrl, newUrl, fence);
275
- const existing = await repository.findBySource(oldUrl);
276
- if (existing) return await repository.update(existing.id, { destination: newUrl }, void 0, fence);
277
- return repository.create({
278
- source: oldUrl,
279
- destination: newUrl,
280
- type: 301,
281
- isPattern: false,
282
- auto: true,
283
- groupName: "Auto: slug change"
284
- }, fence);
285
- });
286
- }
287
- /**
288
- * Update all redirects whose destination matches oldDestination
289
- * to point to newDestination instead. Prevents redirect chains.
290
- * Returns the number of updated rows.
291
- */
292
- async collapseChains(oldDestination, newDestination, fence) {
293
- if (!fence) return this.withWriteLock((currentFence, repository) => repository.collapseChains(oldDestination, newDestination, currentFence));
294
- let query = this.db.updateTable("_emdash_redirects").set({
295
- destination: newDestination,
296
- updated_at: (/* @__PURE__ */ new Date()).toISOString(),
297
- config_revision: ulid(),
298
- ...fence ? { write_generation: fence.generation } : {}
299
- }).where("destination", "=", oldDestination);
300
- if (fence) query = query.where((eb) => eb.exists(eb.selectFrom("_emdash_redirect_write_lock").select("id").where("id", "=", REDIRECT_WRITE_LOCK_ID).where("token", "=", fence.token).where("generation", "=", fence.generation)));
301
- const result = await query.executeTakeFirst();
302
- return Number(result.numUpdatedRows);
303
- }
304
- /**
305
- * Record a 404 hit for `entry.path`.
306
- *
307
- * Dedups by path: repeat hits increment `hits` and refresh `last_seen_at`
308
- * on the existing row instead of inserting a new one. Referrer and
309
- * user-agent are truncated to bounded lengths so a malicious client can't
310
- * blow up storage with huge headers. When the table would exceed
311
- * MAX_404_LOG_ROWS, the oldest entries (by `last_seen_at`) are evicted.
312
- *
313
- * This is called from the public redirect middleware on every 404 and
314
- * must never throw for an unauthenticated caller — failures bubble up to
315
- * the middleware, which swallows them.
316
- */
317
- async log404(entry) {
318
- const now = (/* @__PURE__ */ new Date()).toISOString();
319
- const referrer = truncateOrNull(entry.referrer, REFERRER_MAX_LENGTH);
320
- const userAgent = truncateOrNull(entry.userAgent, USER_AGENT_MAX_LENGTH);
321
- const ip = entry.ip ?? null;
322
- const id = ulid();
323
- await this.db.insertInto("_emdash_404_log").values({
324
- id,
325
- path: entry.path,
326
- referrer,
327
- user_agent: userAgent,
328
- ip,
329
- hits: 1,
330
- last_seen_at: now,
331
- created_at: now
332
- }).onConflict((oc) => oc.column("path").doUpdateSet({
333
- hits: sql`${sql.ref("_emdash_404_log.hits")} + 1`,
334
- last_seen_at: now,
335
- referrer,
336
- user_agent: userAgent,
337
- ip
338
- })).execute();
339
- }
340
- /**
341
- * Delete the oldest rows from `_emdash_404_log` if the row count exceeds
342
- * MAX_404_LOG_ROWS. "Oldest" is by `last_seen_at`, so a path that keeps
343
- * getting hit stays in the table even if it was first seen long ago.
344
- *
345
- * Called by scheduled system cleanup, never by the anonymous request path.
346
- */
347
- async cleanup404Log() {
348
- const result = await this.db.deleteFrom("_emdash_404_log").where("id", "not in", this.db.selectFrom("_emdash_404_log").select("id").orderBy("last_seen_at", "desc").orderBy("id", "desc").limit(MAX_404_LOG_ROWS)).executeTakeFirst();
349
- return Number(result.numDeletedRows);
350
- }
351
- async find404s(opts) {
352
- const limit = Math.min(Math.max(opts.limit ?? 50, 1), 100);
353
- let query = this.db.selectFrom("_emdash_404_log").selectAll().orderBy("created_at", "desc").orderBy("id", "desc").limit(limit + 1);
354
- if (opts.search) {
355
- const term = `%${opts.search.replace(LIKE_ESCAPE_RE, (c) => `\\${c}`)}%`;
356
- query = query.where(sql`path LIKE ${term} ESCAPE '\\'`);
357
- }
358
- if (opts.cursor) {
359
- const decoded = decodeCursor(opts.cursor);
360
- query = query.where((eb) => eb.or([eb("created_at", "<", decoded.orderValue), eb.and([eb("created_at", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
361
- }
362
- const rows = await query.execute();
363
- const items = rows.slice(0, limit).map((row) => ({
364
- id: row.id,
365
- path: row.path,
366
- referrer: row.referrer,
367
- userAgent: row.user_agent,
368
- ip: row.ip,
369
- createdAt: row.created_at
370
- }));
371
- const result = { items };
372
- if (rows.length > limit) {
373
- const last = items.at(-1);
374
- result.nextCursor = encodeCursor(last.createdAt, last.id);
375
- }
376
- return result;
377
- }
378
- async get404Summary(limit = 50) {
379
- return (await sql`
380
- SELECT
381
- path,
382
- SUM(hits) as count,
383
- MAX(last_seen_at) as last_seen,
384
- (
385
- SELECT referrer FROM _emdash_404_log AS inner_log
386
- WHERE inner_log.path = _emdash_404_log.path
387
- AND referrer IS NOT NULL AND referrer != ''
388
- LIMIT 1
389
- ) as top_referrer
390
- FROM _emdash_404_log
391
- GROUP BY path
392
- ORDER BY count DESC
393
- LIMIT ${limit}
394
- `.execute(this.db)).rows.map((row) => ({
395
- path: row.path,
396
- count: Number(row.count),
397
- lastSeen: row.last_seen,
398
- topReferrer: row.top_referrer
399
- }));
400
- }
401
- async delete404(id) {
402
- const result = await this.db.deleteFrom("_emdash_404_log").where("id", "=", id).executeTakeFirst();
403
- return BigInt(result.numDeletedRows) > 0n;
404
- }
405
- async clear404s() {
406
- const result = await this.db.deleteFrom("_emdash_404_log").executeTakeFirst();
407
- return Number(result.numDeletedRows);
408
- }
409
- async prune404s(olderThan) {
410
- const result = await this.db.deleteFrom("_emdash_404_log").where("created_at", "<", olderThan).executeTakeFirst();
411
- return Number(result.numDeletedRows);
412
- }
413
- };
414
-
415
- //#endregion
416
- export { RedirectWriteBusyError as n, RedirectRepository as t };
417
- //# sourceMappingURL=redirect-xZNpBoGp.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redirect-xZNpBoGp.mjs","names":[],"sources":["../src/database/repositories/redirect.ts"],"sourcesContent":["import { sql, type Kysely } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport { interpolateUrlPattern } from \"../../i18n/resolve.js\";\nimport { isSiteRelativeDestination } from \"../../redirects/destination.js\";\nimport {\n\tcompilePattern,\n\tmatchPattern,\n\tinterpolateDestination,\n\tisPattern,\n\tvalidatePattern,\n} from \"../../redirects/patterns.js\";\nimport { currentTimestampValue, isPostgres } from \"../dialect-helpers.js\";\nimport type { Database, RedirectTable } from \"../types.js\";\nimport { encodeCursor, decodeCursor, type FindManyResult } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Bounded 404 logging\n// ---------------------------------------------------------------------------\n\n/**\n * Hard cap on rows stored in `_emdash_404_log`. Scheduled maintenance evicts\n * the oldest rows by `last_seen_at` without adding a read-amplifying count to\n * the anonymous request path.\n */\nexport const MAX_404_LOG_ROWS = 10_000;\n\n/** Max stored length for the `Referer` header — truncated on insert. */\nexport const REFERRER_MAX_LENGTH = 512;\n\n/** Max stored length for the `User-Agent` header — truncated on insert. */\nexport const USER_AGENT_MAX_LENGTH = 256;\n\n/** Pattern to escape LIKE wildcards: %, _, and backslash */\nconst LIKE_ESCAPE_RE = /[\\\\%_]/g;\n\n/**\n * Truncate a header-derived string to `max` chars, preserving `null`/`undefined`\n * as `null`. Empty strings stay empty (the caller decides whether to coerce).\n */\nfunction truncateOrNull(value: string | null | undefined, max: number): string | null {\n\tif (value === null || value === undefined) return null;\n\treturn value.length > max ? value.slice(0, max) : value;\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface Redirect {\n\tid: string;\n\tsource: string;\n\tdestination: string;\n\ttype: number;\n\tisPattern: boolean;\n\tenabled: boolean;\n\thits: number;\n\tlastHitAt: string | null;\n\tgroupName: string | null;\n\tauto: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\nexport interface CreateRedirectInput {\n\tsource: string;\n\tdestination: string;\n\ttype?: number;\n\tisPattern?: boolean;\n\tenabled?: boolean;\n\tgroupName?: string | null;\n\tauto?: boolean;\n}\n\nexport interface UpdateRedirectInput {\n\tsource?: string;\n\tdestination?: string;\n\ttype?: number;\n\tisPattern?: boolean;\n\tenabled?: boolean;\n\tgroupName?: string | null;\n}\n\nexport interface NotFoundEntry {\n\tid: string;\n\tpath: string;\n\treferrer: string | null;\n\tuserAgent: string | null;\n\tip: string | null;\n\tcreatedAt: string;\n}\n\nexport interface NotFoundSummary {\n\tpath: string;\n\tcount: number;\n\tlastSeen: string;\n\ttopReferrer: string | null;\n}\n\nexport interface RedirectMatch {\n\tredirect: Redirect;\n\tresolvedDestination: string;\n}\n\nexport interface VersionedRedirectRecord {\n\tredirect: Redirect;\n\tconfigRevision: string;\n}\n\nexport class RedirectWriteBusyError extends Error {\n\toverride readonly name = \"RedirectWriteBusyError\";\n}\n\nexport interface RedirectWriteFence {\n\ttoken: string;\n\tgeneration: number;\n}\n\nconst REDIRECT_WRITE_LOCK_ID = 1;\nconst REDIRECT_WRITE_LEASE_MS = 30_000;\nconst REDIRECT_WRITE_LOCK_ATTEMPTS = 5;\nconst POSTGRES_REDIRECT_LOCK_KEY = 1_168_624_763;\n\n// ---------------------------------------------------------------------------\n// Row mapping\n// ---------------------------------------------------------------------------\n\nfunction rowToRedirect(row: RedirectTable): Redirect {\n\treturn {\n\t\tid: row.id,\n\t\tsource: row.source,\n\t\tdestination: row.destination,\n\t\ttype: row.type,\n\t\tisPattern: row.is_pattern === 1,\n\t\tenabled: row.enabled === 1,\n\t\thits: row.hits,\n\t\tlastHitAt: row.last_hit_at,\n\t\tgroupName: row.group_name,\n\t\tauto: row.auto === 1,\n\t\tcreatedAt: row.created_at,\n\t\tupdatedAt: row.updated_at,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Repository\n// ---------------------------------------------------------------------------\n\nexport class RedirectRepository {\n\tconstructor(readonly db: Kysely<Database>) {}\n\n\t// --- CRUD ---------------------------------------------------------------\n\n\tasync findById(id: string): Promise<Redirect | null> {\n\t\treturn (await this.findVersionedById(id))?.redirect ?? null;\n\t}\n\n\tasync findVersionedById(id: string): Promise<VersionedRedirectRecord | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? { redirect: rowToRedirect(row), configRevision: row.config_revision } : null;\n\t}\n\n\tasync findBySource(source: string): Promise<Redirect | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.where(\"source\", \"=\", source)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? rowToRedirect(row) : null;\n\t}\n\n\tasync findConfigRevision(id: string): Promise<string | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.select(\"config_revision\")\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\treturn row?.config_revision ?? null;\n\t}\n\n\tasync withWriteLock<T>(\n\t\taction: (fence: RedirectWriteFence, repository: RedirectRepository) => Promise<T>,\n\t): Promise<T> {\n\t\tif (isPostgres(this.db)) {\n\t\t\tif (this.db.isTransaction) {\n\t\t\t\tawait sql`SELECT pg_advisory_xact_lock(${POSTGRES_REDIRECT_LOCK_KEY})`.execute(this.db);\n\t\t\t\treturn this.withLease(action);\n\t\t\t}\n\t\t\treturn this.db.transaction().execute(async (transaction) => {\n\t\t\t\tawait sql`SELECT pg_advisory_xact_lock(${POSTGRES_REDIRECT_LOCK_KEY})`.execute(transaction);\n\t\t\t\tconst repository = new RedirectRepository(transaction);\n\t\t\t\treturn repository.withLease(action);\n\t\t\t});\n\t\t}\n\t\treturn this.withLease(action);\n\t}\n\n\tprivate async withLease<T>(\n\t\taction: (fence: RedirectWriteFence, repository: RedirectRepository) => Promise<T>,\n\t): Promise<T> {\n\t\tconst token = ulid();\n\t\tlet fence: RedirectWriteFence | undefined;\n\t\tfor (let attempt = 0; attempt < REDIRECT_WRITE_LOCK_ATTEMPTS; attempt++) {\n\t\t\tconst now = Date.now();\n\t\t\tconst result = await this.db\n\t\t\t\t.updateTable(\"_emdash_redirect_write_lock\")\n\t\t\t\t.set({\n\t\t\t\t\ttoken,\n\t\t\t\t\texpires_at: now + REDIRECT_WRITE_LEASE_MS,\n\t\t\t\t\tgeneration: sql`generation + 1`,\n\t\t\t\t})\n\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t.where((eb) => eb.or([eb(\"token\", \"=\", \"\"), eb(\"expires_at\", \"<\", now)]))\n\t\t\t\t.returning(\"generation\")\n\t\t\t\t.executeTakeFirst();\n\t\t\tif (result) {\n\t\t\t\tfence = { token, generation: result.generation };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10 * 2 ** attempt));\n\t\t}\n\t\tif (!fence) {\n\t\t\tthrow new RedirectWriteBusyError(\"Another redirect change is in progress\");\n\t\t}\n\t\ttry {\n\t\t\treturn await action(fence, this);\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait this.db\n\t\t\t\t\t.updateTable(\"_emdash_redirect_write_lock\")\n\t\t\t\t\t.set({ token: \"\", expires_at: 0 })\n\t\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t\t.where(\"token\", \"=\", token)\n\t\t\t\t\t.execute();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to release redirect write lock:\", error);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findMany(opts: {\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t\tsearch?: string;\n\t\tgroup?: string;\n\t\tenabled?: boolean;\n\t\tauto?: boolean;\n\t}): Promise<FindManyResult<Redirect>> {\n\t\tconst limit = Math.min(Math.max(opts.limit ?? 50, 1), 100);\n\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.orderBy(\"created_at\", \"desc\")\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(limit + 1);\n\n\t\tif (opts.search) {\n\t\t\t// Escape LIKE wildcards in the search term to prevent injection.\n\t\t\t// Must include ESCAPE clause for SQLite to recognize backslash as escape char.\n\t\t\tconst escaped = opts.search.replace(LIKE_ESCAPE_RE, (c) => `\\\\${c}`);\n\t\t\tconst term = `%${escaped}%`;\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\tsql<boolean>`source LIKE ${term} ESCAPE '\\\\'`,\n\t\t\t\t\tsql<boolean>`destination LIKE ${term} ESCAPE '\\\\'`,\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tif (opts.group !== undefined) {\n\t\t\tquery = query.where(\"group_name\", \"=\", opts.group);\n\t\t}\n\n\t\tif (opts.enabled !== undefined) {\n\t\t\tquery = query.where(\"enabled\", \"=\", opts.enabled ? 1 : 0);\n\t\t}\n\n\t\tif (opts.auto !== undefined) {\n\t\t\tquery = query.where(\"auto\", \"=\", opts.auto ? 1 : 0);\n\t\t}\n\n\t\tif (opts.cursor) {\n\t\t\tconst decoded = decodeCursor(opts.cursor);\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"created_at\", \"<\", decoded.orderValue),\n\t\t\t\t\teb.and([eb(\"created_at\", \"=\", decoded.orderValue), eb(\"id\", \"<\", decoded.id)]),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\tconst items = rows.slice(0, limit).map(rowToRedirect);\n\t\tconst result: FindManyResult<Redirect> = { items };\n\n\t\tif (rows.length > limit) {\n\t\t\tconst last = items.at(-1)!;\n\t\t\tresult.nextCursor = encodeCursor(last.createdAt, last.id);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync create(input: CreateRedirectInput, fence?: RedirectWriteFence): Promise<Redirect> {\n\t\tif (!fence) {\n\t\t\treturn this.withWriteLock((currentFence, repository) =>\n\t\t\t\trepository.create(input, currentFence),\n\t\t\t);\n\t\t}\n\t\tconst id = ulid();\n\t\tconst now = new Date().toISOString();\n\t\tconst patternFlag = input.isPattern ?? isPattern(input.source);\n\n\t\tawait this.db\n\t\t\t.insertInto(\"_emdash_redirects\")\n\t\t\t.values({\n\t\t\t\tid,\n\t\t\t\tsource: input.source,\n\t\t\t\tdestination: input.destination,\n\t\t\t\ttype: input.type ?? 301,\n\t\t\t\tis_pattern: patternFlag ? 1 : 0,\n\t\t\t\tenabled: input.enabled !== false ? 1 : 0,\n\t\t\t\thits: 0,\n\t\t\t\tlast_hit_at: null,\n\t\t\t\tgroup_name: input.groupName ?? null,\n\t\t\t\tauto: input.auto ? 1 : 0,\n\t\t\t\tconfig_revision: ulid(),\n\t\t\t\tsource_guard: 1,\n\t\t\t\twrite_generation: fence?.generation ?? 0,\n\t\t\t\tcreated_at: now,\n\t\t\t\tupdated_at: now,\n\t\t\t})\n\t\t\t.execute();\n\n\t\treturn (await this.findById(id))!;\n\t}\n\n\tasync update(\n\t\tid: string,\n\t\tinput: UpdateRedirectInput,\n\t\texpectedRevision?: string,\n\t\tfence?: RedirectWriteFence,\n\t): Promise<Redirect | null> {\n\t\tif (!fence) {\n\t\t\treturn this.withWriteLock((currentFence, repository) =>\n\t\t\t\trepository.update(id, input, expectedRevision, currentFence),\n\t\t\t);\n\t\t}\n\t\tconst existing = await this.findById(id);\n\t\tif (!existing) return null;\n\n\t\tconst now = new Date(\n\t\t\tMath.max(Date.now(), new Date(existing.updatedAt).getTime() + 1),\n\t\t).toISOString();\n\t\tconst values: Record<string, unknown> = { updated_at: now, config_revision: ulid() };\n\t\tif (fence) values.write_generation = fence.generation;\n\n\t\tif (input.source !== undefined) {\n\t\t\tvalues.source = input.source;\n\t\t\tvalues.source_guard = 1;\n\t\t\tvalues.is_pattern =\n\t\t\t\tinput.isPattern !== undefined ? (input.isPattern ? 1 : 0) : isPattern(input.source) ? 1 : 0;\n\t\t} else if (input.isPattern !== undefined) {\n\t\t\tvalues.is_pattern = input.isPattern ? 1 : 0;\n\t\t}\n\n\t\tif (input.destination !== undefined) values.destination = input.destination;\n\t\tif (input.type !== undefined) values.type = input.type;\n\t\tif (input.enabled !== undefined) values.enabled = input.enabled ? 1 : 0;\n\t\tif (input.groupName !== undefined) values.group_name = input.groupName;\n\n\t\tlet query = this.db.updateTable(\"_emdash_redirects\").set(values).where(\"id\", \"=\", id);\n\t\tif (expectedRevision !== undefined) {\n\t\t\tquery = query.where(\"config_revision\", \"=\", expectedRevision);\n\t\t}\n\t\tif (fence) {\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.exists(\n\t\t\t\t\teb\n\t\t\t\t\t\t.selectFrom(\"_emdash_redirect_write_lock\")\n\t\t\t\t\t\t.select(\"id\")\n\t\t\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t\t\t.where(\"token\", \"=\", fence.token)\n\t\t\t\t\t\t.where(\"generation\", \"=\", fence.generation),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst result = await query.executeTakeFirst();\n\t\tif (BigInt(result.numUpdatedRows) === 0n) return null;\n\n\t\treturn (await this.findById(id))!;\n\t}\n\n\tasync delete(\n\t\tid: string,\n\t\texpectedRevision?: string,\n\t\tfence?: RedirectWriteFence,\n\t): Promise<boolean> {\n\t\tif (!fence) {\n\t\t\treturn this.withWriteLock((currentFence, repository) =>\n\t\t\t\trepository.delete(id, expectedRevision, currentFence),\n\t\t\t);\n\t\t}\n\t\tlet query = this.db.deleteFrom(\"_emdash_redirects\").where(\"id\", \"=\", id);\n\t\tif (expectedRevision !== undefined) {\n\t\t\tquery = query.where(\"config_revision\", \"=\", expectedRevision);\n\t\t}\n\t\tif (fence) {\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.exists(\n\t\t\t\t\teb\n\t\t\t\t\t\t.selectFrom(\"_emdash_redirect_write_lock\")\n\t\t\t\t\t\t.select(\"id\")\n\t\t\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t\t\t.where(\"token\", \"=\", fence.token)\n\t\t\t\t\t\t.where(\"generation\", \"=\", fence.generation),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst result = await query.executeTakeFirst();\n\t\treturn BigInt(result.numDeletedRows) > 0n;\n\t}\n\n\t/**\n\t * Fetch all enabled redirects (for loop detection graph building).\n\t * Not paginated — returns the full set. Ordered oldest first: the earliest\n\t * matching pattern rule wins, so this order is match precedence.\n\t */\n\tasync findAllEnabled(): Promise<Redirect[]> {\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.where(\"enabled\", \"=\", 1)\n\t\t\t.orderBy(\"created_at\", (order) => order.asc().nullsFirst())\n\t\t\t.orderBy(\"id\", \"asc\")\n\t\t\t.execute();\n\t\treturn rows.map(rowToRedirect);\n\t}\n\n\t// --- Matching -----------------------------------------------------------\n\n\tasync findExactMatch(path: string): Promise<Redirect | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.where(\"source\", \"=\", path)\n\t\t\t.where(\"enabled\", \"=\", 1)\n\t\t\t.where(\"is_pattern\", \"=\", 0)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? rowToRedirect(row) : null;\n\t}\n\n\tasync findEnabledPatternRules(): Promise<Redirect[]> {\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"_emdash_redirects\")\n\t\t\t.selectAll()\n\t\t\t.where(\"enabled\", \"=\", 1)\n\t\t\t.where(\"is_pattern\", \"=\", 1)\n\t\t\t.orderBy(\"created_at\", (order) => order.asc().nullsFirst())\n\t\t\t.orderBy(\"id\", \"asc\")\n\t\t\t.execute();\n\t\treturn rows.map(rowToRedirect);\n\t}\n\n\t/**\n\t * Match a request path against all enabled redirect rules.\n\t * Checks exact matches first (indexed), then pattern rules.\n\t * Returns the matched redirect and the resolved destination URL.\n\t */\n\tasync matchPath(path: string): Promise<RedirectMatch | null> {\n\t\t// 1. Exact match (fast, indexed)\n\t\tconst exact = await this.findExactMatch(path);\n\t\tif (exact && isSiteRelativeDestination(exact.destination)) {\n\t\t\treturn { redirect: exact, resolvedDestination: exact.destination };\n\t\t}\n\n\t\t// 2. Pattern match\n\t\tconst patterns = await this.findEnabledPatternRules();\n\t\tfor (const redirect of patterns) {\n\t\t\tif (validatePattern(redirect.source)) continue;\n\t\t\tconst compiled = compilePattern(redirect.source);\n\t\t\tconst params = matchPattern(compiled, path);\n\t\t\tif (params) {\n\t\t\t\tconst resolved = interpolateDestination(redirect.destination, params);\n\t\t\t\tif (isSiteRelativeDestination(resolved)) {\n\t\t\t\t\treturn { redirect, resolvedDestination: resolved };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// --- Hit tracking -------------------------------------------------------\n\n\tasync recordHit(id: string): Promise<void> {\n\t\tawait sql`\n\t\t\tUPDATE _emdash_redirects\n\t\t\tSET hits = hits + 1, last_hit_at = ${currentTimestampValue(this.db)}, updated_at = ${currentTimestampValue(this.db)}\n\t\t\tWHERE id = ${id}\n\t\t`.execute(this.db);\n\t}\n\n\t// --- Auto-redirects (slug change) ---------------------------------------\n\n\t/**\n\t * Create an auto-redirect when a content slug changes.\n\t * Uses the collection's URL pattern to compute old/new URLs.\n\t * Collapses existing redirect chains pointing to the old URL and\n\t * removes redirects that would shadow the now-live new URL, so a\n\t * rename that is later reverted cannot form a loop (#1986).\n\t *\n\t * Returns null when old and new URL are identical (nothing to redirect).\n\t */\n\tasync createAutoRedirect(\n\t\tcollection: string,\n\t\toldSlug: string,\n\t\tnewSlug: string,\n\t\tcontentId: string,\n\t\turlPattern: string | null,\n\t\toldPublishedAt?: string | null,\n\t\tnewPublishedAt?: string | null,\n\t): Promise<Redirect | null> {\n\t\treturn this.withWriteLock(async (fence, repository) => {\n\t\t\tconst oldUrl = interpolateUrlPattern({\n\t\t\t\tpattern: urlPattern,\n\t\t\t\tcollection,\n\t\t\t\tslug: oldSlug,\n\t\t\t\tid: contentId,\n\t\t\t\tdate: oldPublishedAt,\n\t\t\t});\n\t\t\tconst newUrl = interpolateUrlPattern({\n\t\t\t\tpattern: urlPattern,\n\t\t\t\tcollection,\n\t\t\t\tslug: newSlug,\n\t\t\t\tid: contentId,\n\t\t\t\tdate: newPublishedAt,\n\t\t\t});\n\n\t\t\t// A redirect from a URL to itself would make the page unreachable\n\t\t\tif (oldUrl === newUrl) return null;\n\n\t\t\t// The new URL serves live content again — any redirect from it would\n\t\t\tawait repository.db\n\t\t\t\t.deleteFrom(\"_emdash_redirects\")\n\t\t\t\t.where(\"source\", \"=\", newUrl)\n\t\t\t\t.where((eb) =>\n\t\t\t\t\teb.exists(\n\t\t\t\t\t\teb\n\t\t\t\t\t\t\t.selectFrom(\"_emdash_redirect_write_lock\")\n\t\t\t\t\t\t\t.select(\"id\")\n\t\t\t\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t\t\t\t.where(\"token\", \"=\", fence.token)\n\t\t\t\t\t\t\t.where(\"generation\", \"=\", fence.generation),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\t// Collapse chains: update any existing redirects pointing to the old URL\n\t\t\tawait repository.collapseChains(oldUrl, newUrl, fence);\n\n\t\t\t// Check if a redirect from this source already exists\n\t\t\tconst existing = await repository.findBySource(oldUrl);\n\t\t\tif (existing) {\n\t\t\t\t// Update the existing redirect to point to the new URL\n\t\t\t\treturn (await repository.update(existing.id, { destination: newUrl }, undefined, fence))!;\n\t\t\t}\n\n\t\t\treturn repository.create(\n\t\t\t\t{\n\t\t\t\t\tsource: oldUrl,\n\t\t\t\t\tdestination: newUrl,\n\t\t\t\t\ttype: 301,\n\t\t\t\t\tisPattern: false,\n\t\t\t\t\tauto: true,\n\t\t\t\t\tgroupName: \"Auto: slug change\",\n\t\t\t\t},\n\t\t\t\tfence,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Update all redirects whose destination matches oldDestination\n\t * to point to newDestination instead. Prevents redirect chains.\n\t * Returns the number of updated rows.\n\t */\n\tasync collapseChains(\n\t\toldDestination: string,\n\t\tnewDestination: string,\n\t\tfence?: RedirectWriteFence,\n\t): Promise<number> {\n\t\tif (!fence) {\n\t\t\treturn this.withWriteLock((currentFence, repository) =>\n\t\t\t\trepository.collapseChains(oldDestination, newDestination, currentFence),\n\t\t\t);\n\t\t}\n\t\tlet query = this.db\n\t\t\t.updateTable(\"_emdash_redirects\")\n\t\t\t.set({\n\t\t\t\tdestination: newDestination,\n\t\t\t\tupdated_at: new Date().toISOString(),\n\t\t\t\tconfig_revision: ulid(),\n\t\t\t\t...(fence ? { write_generation: fence.generation } : {}),\n\t\t\t})\n\t\t\t.where(\"destination\", \"=\", oldDestination);\n\t\tif (fence) {\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.exists(\n\t\t\t\t\teb\n\t\t\t\t\t\t.selectFrom(\"_emdash_redirect_write_lock\")\n\t\t\t\t\t\t.select(\"id\")\n\t\t\t\t\t\t.where(\"id\", \"=\", REDIRECT_WRITE_LOCK_ID)\n\t\t\t\t\t\t.where(\"token\", \"=\", fence.token)\n\t\t\t\t\t\t.where(\"generation\", \"=\", fence.generation),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tconst result = await query.executeTakeFirst();\n\t\treturn Number(result.numUpdatedRows);\n\t}\n\n\t// --- 404 log ------------------------------------------------------------\n\n\t/**\n\t * Record a 404 hit for `entry.path`.\n\t *\n\t * Dedups by path: repeat hits increment `hits` and refresh `last_seen_at`\n\t * on the existing row instead of inserting a new one. Referrer and\n\t * user-agent are truncated to bounded lengths so a malicious client can't\n\t * blow up storage with huge headers. When the table would exceed\n\t * MAX_404_LOG_ROWS, the oldest entries (by `last_seen_at`) are evicted.\n\t *\n\t * This is called from the public redirect middleware on every 404 and\n\t * must never throw for an unauthenticated caller — failures bubble up to\n\t * the middleware, which swallows them.\n\t */\n\tasync log404(entry: {\n\t\tpath: string;\n\t\treferrer?: string | null;\n\t\tuserAgent?: string | null;\n\t\tip?: string | null;\n\t}): Promise<void> {\n\t\tconst now = new Date().toISOString();\n\t\tconst referrer = truncateOrNull(entry.referrer, REFERRER_MAX_LENGTH);\n\t\tconst userAgent = truncateOrNull(entry.userAgent, USER_AGENT_MAX_LENGTH);\n\t\tconst ip = entry.ip ?? null;\n\t\tconst id = ulid();\n\n\t\t// Atomic upsert by path. The UNIQUE index on `path` makes this safe\n\t\t// under concurrency: two requests for the same new path can't both\n\t\t// insert — the second one hits the conflict branch and increments\n\t\t// hits instead of failing with a uniqueness error.\n\t\tawait this.db\n\t\t\t.insertInto(\"_emdash_404_log\")\n\t\t\t.values({\n\t\t\t\tid,\n\t\t\t\tpath: entry.path,\n\t\t\t\treferrer,\n\t\t\t\tuser_agent: userAgent,\n\t\t\t\tip,\n\t\t\t\thits: 1,\n\t\t\t\tlast_seen_at: now,\n\t\t\t\tcreated_at: now,\n\t\t\t})\n\t\t\t.onConflict((oc) =>\n\t\t\t\toc.column(\"path\").doUpdateSet({\n\t\t\t\t\thits: sql`${sql.ref(\"_emdash_404_log.hits\")} + 1`,\n\t\t\t\t\tlast_seen_at: now,\n\t\t\t\t\treferrer,\n\t\t\t\t\tuser_agent: userAgent,\n\t\t\t\t\tip,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.execute();\n\t}\n\n\t/**\n\t * Delete the oldest rows from `_emdash_404_log` if the row count exceeds\n\t * MAX_404_LOG_ROWS. \"Oldest\" is by `last_seen_at`, so a path that keeps\n\t * getting hit stays in the table even if it was first seen long ago.\n\t *\n\t * Called by scheduled system cleanup, never by the anonymous request path.\n\t */\n\tasync cleanup404Log(): Promise<number> {\n\t\t// Keep the newest rows in one statement. Deriving the victims inside the\n\t\t// DELETE makes overlapping cleanup runs idempotent: each statement\n\t\t// evaluates the current newest set instead of acting on a stale count.\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"_emdash_404_log\")\n\t\t\t.where(\n\t\t\t\t\"id\",\n\t\t\t\t\"not in\",\n\t\t\t\tthis.db\n\t\t\t\t\t.selectFrom(\"_emdash_404_log\")\n\t\t\t\t\t.select(\"id\")\n\t\t\t\t\t.orderBy(\"last_seen_at\", \"desc\")\n\t\t\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t\t\t.limit(MAX_404_LOG_ROWS),\n\t\t\t)\n\t\t\t.executeTakeFirst();\n\t\treturn Number(result.numDeletedRows);\n\t}\n\n\tasync find404s(opts: {\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t\tsearch?: string;\n\t}): Promise<FindManyResult<NotFoundEntry>> {\n\t\tconst limit = Math.min(Math.max(opts.limit ?? 50, 1), 100);\n\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"_emdash_404_log\")\n\t\t\t.selectAll()\n\t\t\t.orderBy(\"created_at\", \"desc\")\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(limit + 1);\n\n\t\tif (opts.search) {\n\t\t\tconst escaped = opts.search.replace(LIKE_ESCAPE_RE, (c) => `\\\\${c}`);\n\t\t\tconst term = `%${escaped}%`;\n\t\t\tquery = query.where(sql<boolean>`path LIKE ${term} ESCAPE '\\\\'`);\n\t\t}\n\n\t\tif (opts.cursor) {\n\t\t\tconst decoded = decodeCursor(opts.cursor);\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"created_at\", \"<\", decoded.orderValue),\n\t\t\t\t\teb.and([eb(\"created_at\", \"=\", decoded.orderValue), eb(\"id\", \"<\", decoded.id)]),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\tconst items: NotFoundEntry[] = rows.slice(0, limit).map((row) => ({\n\t\t\tid: row.id,\n\t\t\tpath: row.path,\n\t\t\treferrer: row.referrer,\n\t\t\tuserAgent: row.user_agent,\n\t\t\tip: row.ip,\n\t\t\tcreatedAt: row.created_at,\n\t\t}));\n\n\t\tconst result: FindManyResult<NotFoundEntry> = { items };\n\t\tif (rows.length > limit) {\n\t\t\tconst last = items.at(-1)!;\n\t\t\tresult.nextCursor = encodeCursor(last.createdAt, last.id);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync get404Summary(limit = 50): Promise<NotFoundSummary[]> {\n\t\t// Since rows are now deduped by path, each path has exactly one row\n\t\t// with `hits` as the running count and `last_seen_at` as the latest\n\t\t// timestamp. The subquery for `top_referrer` collapses to a simple\n\t\t// pick of the row's stored referrer (the most recent one seen).\n\t\tconst rows = await sql<{\n\t\t\tpath: string;\n\t\t\tcount: number;\n\t\t\tlast_seen: string;\n\t\t\ttop_referrer: string | null;\n\t\t}>`\n\t\t\tSELECT\n\t\t\t\tpath,\n\t\t\t\tSUM(hits) as count,\n\t\t\t\tMAX(last_seen_at) as last_seen,\n\t\t\t\t(\n\t\t\t\t\tSELECT referrer FROM _emdash_404_log AS inner_log\n\t\t\t\t\tWHERE inner_log.path = _emdash_404_log.path\n\t\t\t\t\t\tAND referrer IS NOT NULL AND referrer != ''\n\t\t\t\t\tLIMIT 1\n\t\t\t\t) as top_referrer\n\t\t\tFROM _emdash_404_log\n\t\t\tGROUP BY path\n\t\t\tORDER BY count DESC\n\t\t\tLIMIT ${limit}\n\t\t`.execute(this.db);\n\n\t\treturn rows.rows.map((row) => ({\n\t\t\tpath: row.path,\n\t\t\tcount: Number(row.count),\n\t\t\tlastSeen: row.last_seen,\n\t\t\ttopReferrer: row.top_referrer,\n\t\t}));\n\t}\n\n\tasync delete404(id: string): Promise<boolean> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"_emdash_404_log\")\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\treturn BigInt(result.numDeletedRows) > 0n;\n\t}\n\n\tasync clear404s(): Promise<number> {\n\t\tconst result = await this.db.deleteFrom(\"_emdash_404_log\").executeTakeFirst();\n\t\treturn Number(result.numDeletedRows);\n\t}\n\n\tasync prune404s(olderThan: string): Promise<number> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"_emdash_404_log\")\n\t\t\t.where(\"created_at\", \"<\", olderThan)\n\t\t\t.executeTakeFirst();\n\t\treturn Number(result.numDeletedRows);\n\t}\n}\n"],"mappings":"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"}
@@ -1,148 +0,0 @@
1
- import { t as LOCALE_CODE_PATTERN } from "./config-CvmjJcVw.mjs";
2
- import { n as isTerminalStatus, t as REDIRECT_RULE_STATUSES } from "./status-D39Fpy8R.mjs";
3
- import { z } from "zod";
4
-
5
- //#region src/api/schemas/common.ts
6
- /** Valid role level values */
7
- const VALID_ROLE_LEVELS = new Set([
8
- 10,
9
- 20,
10
- 30,
11
- 40,
12
- 50
13
- ]);
14
- /** Role level — coerces string/number to valid RoleLevel (10|20|30|40|50) */
15
- const roleLevel = z.coerce.number().int().refine((n) => VALID_ROLE_LEVELS.has(n), { message: "Invalid role level. Must be 10, 20, 30, 40, or 50" });
16
- /** Pagination query params — cursor-based */
17
- const cursorPaginationQuery = z.object({
18
- cursor: z.string().max(2048).optional().meta({ description: "Opaque cursor for pagination" }),
19
- limit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({ description: "Maximum number of items to return (1-100, default 50)" })
20
- }).meta({ id: "CursorPaginationQuery" });
21
- /** Pagination query params — offset-based */
22
- const offsetPaginationQuery = z.object({
23
- limit: z.coerce.number().int().min(1).max(100).optional().default(50),
24
- offset: z.coerce.number().int().min(0).optional().default(0)
25
- }).meta({ id: "OffsetPaginationQuery" });
26
- /** Slug pattern: lowercase letters, digits, underscores; starts with letter */
27
- const slugPattern = /^[a-z][a-z0-9_]*$/;
28
- /** Matches http(s) scheme at start of URL */
29
- const HTTP_SCHEME_RE = /^https?:\/\//i;
30
- /** Validates that a URL string uses http or https scheme. Rejects javascript:/data: URI XSS vectors. */
31
- const httpUrl = z.url().refine((url) => HTTP_SCHEME_RE.test(url), "URL must use http or https");
32
- /**
33
- * BCP 47 locale code — language with optional script/region subtags (e.g. en, en-US, pt-BR, es-419, zh-Hant).
34
- * Validation is case-insensitive, but the value is preserved verbatim because the site config, stored
35
- * `locale` columns, and public query path all keep the raw BCP-47 casing.
36
- */
37
- const localeCode = z.string().regex(LOCALE_CODE_PATTERN, "Invalid locale code");
38
- /** Shared `?locale=xx` query shape for endpoints that filter by locale. */
39
- const localeFilterQuery = z.object({ locale: localeCode.optional() }).meta({ id: "LocaleFilterQuery" });
40
- /** Standard API error response */
41
- const apiErrorSchema = z.object({
42
- success: z.literal(false).meta({ description: "Discriminant: always false for errors" }),
43
- error: z.object({
44
- code: z.string().meta({
45
- description: "Machine-readable error code",
46
- examples: ["NOT_FOUND"]
47
- }),
48
- message: z.string().meta({ description: "Human-readable error message" })
49
- })
50
- }).meta({ id: "ApiError" });
51
- /** Wrap a data schema in the standard success envelope: { success: true, data: T } */
52
- function successEnvelope(dataSchema) {
53
- return z.object({
54
- success: z.literal(true).meta({ description: "Discriminant: always true for success" }),
55
- data: dataSchema
56
- });
57
- }
58
- /** Standard delete response */
59
- const deleteResponseSchema = z.object({ deleted: z.literal(true) }).meta({ id: "DeleteResponse" });
60
- /** Media delete response: `storageDeleted` is false when the stored file survived and is retried by cleanup */
61
- const mediaDeleteResponseSchema = deleteResponseSchema.extend({ storageDeleted: z.boolean() }).meta({ id: "MediaDeleteResponse" });
62
- /** Standard count response */
63
- const countResponseSchema = z.object({ count: z.number().int().min(0) }).meta({ id: "CountResponse" });
64
-
65
- //#endregion
66
- //#region src/api/schemas/redirects.ts
67
- const redirectType = z.coerce.number().int().refine((n) => REDIRECT_RULE_STATUSES.includes(n), { message: "Redirect type must be 301, 302, 307, 308, 410, or 451" });
68
- /** Matches CR or LF characters */
69
- const CRLF = /[\r\n]/;
70
- /** Path must start with / and not be protocol-relative, contain no CRLF, and no path traversal */
71
- const urlPath = z.string().min(1).refine((s) => s.startsWith("/") && !s.startsWith("//"), { message: "Must be a path starting with / (no protocol-relative URLs)" }).refine((s) => !CRLF.test(s), { message: "URL must not contain newline characters" }).refine((s) => {
72
- try {
73
- return !decodeURIComponent(s).split("/").includes("..");
74
- } catch {
75
- return false;
76
- }
77
- }, { message: "URL must not contain path traversal segments" });
78
- const createRedirectBody = z.object({
79
- source: urlPath,
80
- destination: z.union([urlPath, z.literal("")]).optional(),
81
- type: redirectType.optional().default(301),
82
- enabled: z.boolean().optional().default(true),
83
- groupName: z.string().nullish()
84
- }).refine((o) => isTerminalStatus(o.type ?? 301) || !!o.destination, {
85
- message: "destination is required for redirect types (301, 302, 307, 308)",
86
- path: ["destination"]
87
- }).meta({ id: "CreateRedirectBody" });
88
- const updateRedirectBody = z.object({
89
- source: urlPath.optional(),
90
- destination: z.union([urlPath, z.literal("")]).optional(),
91
- type: redirectType.optional(),
92
- enabled: z.boolean().optional(),
93
- groupName: z.string().nullish()
94
- }).refine((o) => Object.values(o).some((v) => v !== void 0), { message: "At least one field must be provided" }).meta({ id: "UpdateRedirectBody" });
95
- const redirectsListQuery = cursorPaginationQuery.extend({
96
- search: z.string().optional(),
97
- group: z.string().optional(),
98
- enabled: z.enum(["true", "false"]).transform((v) => v === "true").optional(),
99
- auto: z.enum(["true", "false"]).transform((v) => v === "true").optional()
100
- }).meta({ id: "RedirectsListQuery" });
101
- const notFoundListQuery = cursorPaginationQuery.extend({ search: z.string().optional() }).meta({ id: "NotFoundListQuery" });
102
- const notFoundSummaryQuery = z.object({ limit: z.coerce.number().int().min(1).max(100).optional().default(50) });
103
- const notFoundPruneBody = z.object({ olderThan: z.iso.datetime({ message: "olderThan must be an ISO 8601 datetime" }).or(z.iso.datetime({
104
- precision: -1,
105
- message: "olderThan must be an ISO 8601 datetime"
106
- })) }).meta({ id: "NotFoundPruneBody" });
107
- const redirectSchema = z.object({
108
- id: z.string(),
109
- source: z.string(),
110
- destination: z.string(),
111
- type: z.number().int(),
112
- isPattern: z.boolean(),
113
- enabled: z.boolean(),
114
- hits: z.number().int(),
115
- lastHitAt: z.string().nullable(),
116
- groupName: z.string().nullable(),
117
- auto: z.boolean(),
118
- createdAt: z.string(),
119
- updatedAt: z.string()
120
- }).meta({ id: "Redirect" });
121
- const redirectListResponseSchema = z.object({
122
- items: z.array(redirectSchema),
123
- nextCursor: z.string().optional(),
124
- loopRedirectIds: z.array(z.string()).optional()
125
- }).meta({ id: "RedirectListResponse" });
126
- const notFoundEntrySchema = z.object({
127
- id: z.string(),
128
- path: z.string(),
129
- referrer: z.string().nullable(),
130
- userAgent: z.string().nullable(),
131
- ip: z.string().nullable(),
132
- createdAt: z.string()
133
- }).meta({ id: "NotFoundEntry" });
134
- const notFoundListResponseSchema = z.object({
135
- items: z.array(notFoundEntrySchema),
136
- nextCursor: z.string().optional()
137
- }).meta({ id: "NotFoundListResponse" });
138
- const notFoundSummarySchema = z.object({
139
- path: z.string(),
140
- count: z.number().int(),
141
- lastSeen: z.string(),
142
- topReferrer: z.string().nullable()
143
- }).meta({ id: "NotFoundSummary" });
144
- const notFoundSummaryResponseSchema = z.object({ items: z.array(notFoundSummarySchema) }).meta({ id: "NotFoundSummaryResponse" });
145
-
146
- //#endregion
147
- export { roleLevel as C, offsetPaginationQuery as S, successEnvelope as T, deleteResponseSchema as _, notFoundPruneBody as a, localeFilterQuery as b, notFoundSummarySchema as c, redirectsListQuery as d, updateRedirectBody as f, cursorPaginationQuery as g, countResponseSchema as h, notFoundListResponseSchema as i, redirectListResponseSchema as l, apiErrorSchema as m, notFoundEntrySchema as n, notFoundSummaryQuery as o, VALID_ROLE_LEVELS as p, notFoundListQuery as r, notFoundSummaryResponseSchema as s, createRedirectBody as t, redirectSchema as u, httpUrl as v, slugPattern as w, mediaDeleteResponseSchema as x, localeCode as y };
148
- //# sourceMappingURL=redirects-D4EWeXAo.mjs.map