emdash 1.2.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 (1436) 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.mjs +47 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +1 -1
  13. package/dist/api/schemas/index.mjs +9 -9
  14. package/dist/api-D-7BNHoz.mjs +5025 -0
  15. package/dist/api-D-7BNHoz.mjs.map +1 -0
  16. package/dist/api-tokens-Bx38ZCQp.mjs +173 -0
  17. package/dist/api-tokens-Bx38ZCQp.mjs.map +1 -0
  18. package/dist/apply-T7ATgzCh.mjs +1702 -0
  19. package/dist/apply-T7ATgzCh.mjs.map +1 -0
  20. package/dist/approvals-D-m6wvGl.mjs +460 -0
  21. package/dist/approvals-D-m6wvGl.mjs.map +1 -0
  22. package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
  23. package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
  24. package/dist/artifacts-htGyfCSt.mjs +307 -0
  25. package/dist/artifacts-htGyfCSt.mjs.map +1 -0
  26. package/dist/astro/index.d.mts +14 -14
  27. package/dist/astro/index.d.mts.map +1 -1
  28. package/dist/astro/index.mjs +109 -18
  29. package/dist/astro/index.mjs.map +1 -1
  30. package/dist/astro/middleware/auth.d.mts +12 -12
  31. package/dist/astro/middleware/auth.d.mts.map +1 -1
  32. package/dist/astro/middleware/auth.mjs +12 -11
  33. package/dist/astro/middleware/auth.mjs.map +1 -1
  34. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  35. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  36. package/dist/astro/middleware/redirect.mjs +60 -40
  37. package/dist/astro/middleware/redirect.mjs.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +49 -15
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +12 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +116 -408
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  48. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  49. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +16 -16
  51. package/dist/astro/routes/api/admin/byline-fields/index.mjs +16 -16
  52. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +16 -16
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  54. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  56. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  58. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  60. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  61. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  62. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  63. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  64. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  65. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  66. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  67. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  68. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
  69. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
  70. package/dist/astro/routes/api/admin/media-usage/progress.mjs +23 -22
  71. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -28
  73. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
  75. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
  76. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  77. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  78. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  79. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  80. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +71 -69
  81. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  83. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +70 -68
  84. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -69
  86. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +79 -78
  88. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/index.mjs +71 -69
  90. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +70 -68
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +78 -77
  95. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +70 -68
  97. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -69
  99. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +80 -79
  101. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  103. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +72 -71
  105. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  107. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +71 -69
  108. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/updates.mjs +70 -68
  110. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  112. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +70 -68
  113. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  114. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  115. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +70 -68
  116. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  118. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +38 -37
  119. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +38 -37
  121. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +40 -39
  123. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +40 -39
  125. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +40 -39
  127. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  128. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +41 -40
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +41 -40
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +40 -39
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +41 -40
  135. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +42 -41
  137. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +40 -39
  139. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +40 -39
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +42 -41
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +40 -39
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +42 -41
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +40 -39
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +40 -39
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +42 -41
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +40 -39
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +40 -39
  157. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  158. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +42 -41
  159. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  160. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  161. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  162. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -14
  163. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  164. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  165. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  166. package/dist/astro/routes/api/auth/handover.mjs +6 -6
  167. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  168. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
  169. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  170. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  171. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  172. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  173. package/dist/astro/routes/api/auth/magic-link/verify.mjs +15 -15
  174. package/dist/astro/routes/api/auth/me.mjs +15 -15
  175. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  176. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  177. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  178. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  179. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  180. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  181. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  182. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  183. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -19
  184. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
  185. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  186. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  187. package/dist/astro/routes/api/calendar.mjs +15 -15
  188. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  189. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  190. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  191. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  192. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  193. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  194. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
  195. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  196. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +20 -17
  197. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  198. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
  200. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  202. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +30 -29
  203. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  204. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  206. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +34 -33
  208. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  209. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -33
  210. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  211. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
  213. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  215. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  216. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -18
  217. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  218. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +30 -25
  220. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  221. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  222. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  223. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  224. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  226. package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -20
  227. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  229. package/dist/astro/routes/api/content/_collection_/index.mjs +18 -21
  230. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  231. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  232. package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
  233. package/dist/astro/routes/api/dashboard.mjs +17 -11
  234. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  235. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  236. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
  237. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
  238. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +140 -0
  239. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
  240. package/dist/astro/routes/api/health.mjs +6 -6
  241. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  242. package/dist/astro/routes/api/import/probe.mjs +24 -22
  243. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  244. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  245. package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -20
  246. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  247. package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
  248. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  249. package/dist/astro/routes/api/import/wordpress/execute.mjs +28 -29
  250. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  252. package/dist/astro/routes/api/import/wordpress/media.mjs +17 -17
  253. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -17
  254. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  255. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  256. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -26
  257. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  258. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  259. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -22
  260. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  261. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  262. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  263. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +55 -34
  264. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  265. package/dist/astro/routes/api/manifest.mjs +6 -6
  266. package/dist/astro/routes/api/mcp.mjs +135 -101
  267. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_/confirm.mjs +17 -17
  269. package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
  270. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  271. package/dist/astro/routes/api/media/_id_/usage.mjs +31 -30
  272. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  273. package/dist/astro/routes/api/media/_id_.mjs +29 -28
  274. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  275. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  276. package/dist/astro/routes/api/media/file/_...key_.mjs +10 -10
  277. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  278. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  279. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  280. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  281. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  282. package/dist/astro/routes/api/media/upload-url.mjs +17 -17
  283. package/dist/astro/routes/api/media.mjs +30 -29
  284. package/dist/astro/routes/api/media.mjs.map +1 -1
  285. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  286. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  287. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  288. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  289. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -17
  290. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  291. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -17
  293. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  295. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -17
  296. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  297. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  298. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  299. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  300. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  301. package/dist/astro/routes/api/menus/index.mjs +18 -17
  302. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  303. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  304. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  305. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  306. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  307. package/dist/astro/routes/api/oauth/register.mjs +7 -7
  308. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  309. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  310. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  311. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  312. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  313. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  314. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  315. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  316. package/dist/astro/routes/api/redirects/_id_.mjs +32 -23
  317. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  318. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  319. package/dist/astro/routes/api/redirects/index.mjs +24 -21
  320. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  321. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -33
  322. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  323. package/dist/astro/routes/api/relations/index.mjs +34 -33
  324. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  325. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  326. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +16 -16
  327. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +70 -68
  328. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +70 -68
  330. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  331. package/dist/astro/routes/api/schema/block-types/index.mjs +70 -68
  332. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  333. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +70 -68
  334. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  335. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +70 -68
  336. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  337. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +70 -68
  338. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  339. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +70 -68
  340. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  341. package/dist/astro/routes/api/schema/collections/index.mjs +70 -68
  342. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  343. package/dist/astro/routes/api/schema/collections/reorder.mjs +70 -68
  344. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/index.mjs +16 -15
  346. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +70 -68
  348. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  349. package/dist/astro/routes/api/schema/orphans/index.mjs +70 -68
  350. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/search/enable.mjs +19 -18
  352. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  353. package/dist/astro/routes/api/search/index.mjs +18 -17
  354. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  355. package/dist/astro/routes/api/search/rebuild.mjs +19 -18
  356. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  357. package/dist/astro/routes/api/search/stats.mjs +9 -8
  358. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  359. package/dist/astro/routes/api/search/suggest.mjs +18 -17
  360. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  361. package/dist/astro/routes/api/sections/_slug_.mjs +18 -17
  362. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  363. package/dist/astro/routes/api/sections/index.mjs +18 -17
  364. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  365. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  366. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  367. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  368. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  369. package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
  370. package/dist/astro/routes/api/settings/domain.d.mts.map +1 -1
  371. package/dist/astro/routes/api/settings/domain.mjs +17 -14
  372. package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
  373. package/dist/astro/routes/api/settings/email.mjs +6 -6
  374. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  375. package/dist/astro/routes/api/settings.mjs +23 -20
  376. package/dist/astro/routes/api/settings.mjs.map +1 -1
  377. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  378. package/dist/astro/routes/api/setup/admin-verify.mjs +25 -21
  379. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  380. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  381. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -40
  382. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  383. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  384. package/dist/astro/routes/api/setup/index.mjs +48 -46
  385. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/setup/status.mjs +6 -6
  387. package/dist/astro/routes/api/site/domain-proof.mjs +11 -9
  388. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
  389. package/dist/astro/routes/api/snapshot.mjs +8 -8
  390. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  391. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -21
  392. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  393. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  394. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -21
  395. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  396. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  397. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +24 -22
  398. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  399. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  400. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -21
  401. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  402. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +21 -20
  403. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  404. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  405. package/dist/astro/routes/api/taxonomies/_name_.mjs +24 -22
  406. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  407. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +34 -33
  408. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  409. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  410. package/dist/astro/routes/api/taxonomies/index.mjs +23 -21
  411. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  412. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  413. package/dist/astro/routes/api/typegen.mjs +6 -6
  414. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  415. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +18 -18
  416. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  417. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  418. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  419. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  420. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  421. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  422. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  423. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  424. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +21 -19
  425. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  426. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  427. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -18
  428. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  429. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  430. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  431. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  432. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  433. package/dist/astro/routes/api/widget-areas/index.mjs +20 -18
  434. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  435. package/dist/astro/routes/api/widget-components.mjs +5 -5
  436. package/dist/astro/routes/robots.txt.d.mts.map +1 -1
  437. package/dist/astro/routes/robots.txt.mjs +38 -5
  438. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  439. package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -8
  440. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  441. package/dist/astro/routes/sitemap.xml.mjs +11 -6
  442. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  443. package/dist/astro/types.d.mts +19 -17
  444. package/dist/astro/types.d.mts.map +1 -1
  445. package/dist/audit-_gieLVGU.mjs +127 -0
  446. package/dist/audit-_gieLVGU.mjs.map +1 -0
  447. package/dist/auth/providers/github.d.mts +1 -1
  448. package/dist/auth/providers/google.d.mts +1 -1
  449. package/dist/auth/providers/microsoft.d.mts +1 -1
  450. package/dist/authoritative-records-CQlB3JzE.mjs +5183 -0
  451. package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
  452. package/dist/authorize-DPFBGbE6.mjs +74 -0
  453. package/dist/authorize-DPFBGbE6.mjs.map +1 -0
  454. package/dist/backup-3FgVxiDJ.mjs +246 -0
  455. package/dist/backup-3FgVxiDJ.mjs.map +1 -0
  456. package/dist/block-types-CYcG56JB.mjs +132 -0
  457. package/dist/block-types-CYcG56JB.mjs.map +1 -0
  458. package/dist/block-values-gCX4HBSl.mjs +215 -0
  459. package/dist/block-values-gCX4HBSl.mjs.map +1 -0
  460. package/dist/byline-BR1qhyiw.mjs +909 -0
  461. package/dist/byline-BR1qhyiw.mjs.map +1 -0
  462. package/dist/byline-fields-4ClDC88c.mjs +123 -0
  463. package/dist/byline-fields-4ClDC88c.mjs.map +1 -0
  464. package/dist/byline-fields-BLXZnX7N.mjs +280 -0
  465. package/dist/byline-fields-BLXZnX7N.mjs.map +1 -0
  466. package/dist/bylines-CVOvRUL7.mjs +234 -0
  467. package/dist/bylines-CVOvRUL7.mjs.map +1 -0
  468. package/dist/bylines-DxOs9B7z.mjs +150 -0
  469. package/dist/bylines-DxOs9B7z.mjs.map +1 -0
  470. package/dist/cache-CEU9wo_h.mjs +151 -0
  471. package/dist/cache-CEU9wo_h.mjs.map +1 -0
  472. package/dist/canonical-BudtH-Fx.mjs +174 -0
  473. package/dist/canonical-BudtH-Fx.mjs.map +1 -0
  474. package/dist/capture-triggers-CT6dK9zd.mjs +362 -0
  475. package/dist/capture-triggers-CT6dK9zd.mjs.map +1 -0
  476. package/dist/challenge-store-C17BYx2-.mjs +51 -0
  477. package/dist/challenge-store-C17BYx2-.mjs.map +1 -0
  478. package/dist/checksum-CEqvfxGX.mjs +162 -0
  479. package/dist/checksum-CEqvfxGX.mjs.map +1 -0
  480. package/dist/chunks-xC4UD5-S.mjs +25 -0
  481. package/dist/chunks-xC4UD5-S.mjs.map +1 -0
  482. package/dist/cli/index.mjs +127 -113
  483. package/dist/cli/index.mjs.map +1 -1
  484. package/dist/client/cf-access.d.mts +1 -1
  485. package/dist/client/index.d.mts +47 -47
  486. package/dist/client/index.d.mts.map +1 -1
  487. package/dist/client/index.mjs +12 -10
  488. package/dist/client/index.mjs.map +1 -1
  489. package/dist/collection-slugs-cache-e09QeJQt.mjs +85 -0
  490. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +1 -0
  491. package/dist/comment-UvIWDKcW.mjs +325 -0
  492. package/dist/comment-UvIWDKcW.mjs.map +1 -0
  493. package/dist/comment-reaction-dGp6_FRo.mjs +85 -0
  494. package/dist/comment-reaction-dGp6_FRo.mjs.map +1 -0
  495. package/dist/comments-pej-_BUO.mjs +195 -0
  496. package/dist/comments-pej-_BUO.mjs.map +1 -0
  497. package/dist/comments-yiRFx3w5.mjs +99 -0
  498. package/dist/comments-yiRFx3w5.mjs.map +1 -0
  499. package/dist/components-Brp__9xo.mjs +112 -0
  500. package/dist/components-Brp__9xo.mjs.map +1 -0
  501. package/dist/config-Bsm_u_oE.d.mts +6799 -0
  502. package/dist/config-Bsm_u_oE.d.mts.map +1 -0
  503. package/dist/config-CFMojMFK.d.mts +39 -0
  504. package/dist/config-CFMojMFK.d.mts.map +1 -0
  505. package/dist/config-DBU6iUQB.mjs +228 -0
  506. package/dist/config-DBU6iUQB.mjs.map +1 -0
  507. package/dist/connection-BtEN_lP9.mjs +36 -0
  508. package/dist/connection-BtEN_lP9.mjs.map +1 -0
  509. package/dist/content-DQSRZTVw.mjs +2075 -0
  510. package/dist/content-DQSRZTVw.mjs.map +1 -0
  511. package/dist/content-list-query-CYKcY6Vi.d.mts +26 -0
  512. package/dist/content-list-query-CYKcY6Vi.d.mts.map +1 -0
  513. package/dist/content-repair-DNh5--x5.mjs +442 -0
  514. package/dist/content-repair-DNh5--x5.mjs.map +1 -0
  515. package/dist/context-BYptmCN0.mjs +2090 -0
  516. package/dist/context-BYptmCN0.mjs.map +1 -0
  517. package/dist/credits-B9iORdWB.mjs +110 -0
  518. package/dist/credits-B9iORdWB.mjs.map +1 -0
  519. package/dist/cron-D7obTIfk.mjs +306 -0
  520. package/dist/cron-D7obTIfk.mjs.map +1 -0
  521. package/dist/dashboard-D0jcgBD7.mjs +167 -0
  522. package/dist/dashboard-D0jcgBD7.mjs.map +1 -0
  523. package/dist/database/migration-lock.d.mts +17 -4
  524. package/dist/database/migration-lock.d.mts.map +1 -1
  525. package/dist/database/migration-lock.mjs +32 -5
  526. package/dist/database/migration-lock.mjs.map +1 -1
  527. package/dist/db/index.d.mts +3 -3
  528. package/dist/db/index.mjs +1 -1
  529. package/dist/db/libsql-migrations.d.mts +1 -1
  530. package/dist/db/libsql-migrations.mjs +4 -4
  531. package/dist/db/libsql.d.mts +1 -1
  532. package/dist/db/postgres-migrations.d.mts +1 -1
  533. package/dist/db/postgres-migrations.mjs +4 -4
  534. package/dist/db/postgres.d.mts +1 -1
  535. package/dist/db/sqlite-migrations.d.mts +1 -1
  536. package/dist/db/sqlite-migrations.mjs +4 -4
  537. package/dist/db/sqlite.d.mts +1 -1
  538. package/dist/db/sqlite.mjs +1 -1
  539. package/dist/default-C0W-PhAp.mjs +81 -0
  540. package/dist/default-C0W-PhAp.mjs.map +1 -0
  541. package/dist/deferred-tasks-ZvUECSzI.d.mts +9 -0
  542. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +1 -0
  543. package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
  544. package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
  545. package/dist/device-flow-BkFKBoAn.mjs +521 -0
  546. package/dist/device-flow-BkFKBoAn.mjs.map +1 -0
  547. package/dist/digest-DJ1tHCgy.mjs +194 -0
  548. package/dist/digest-DJ1tHCgy.mjs.map +1 -0
  549. package/dist/direct-executor-Cbxzg4qe.mjs +117 -0
  550. package/dist/direct-executor-Cbxzg4qe.mjs.map +1 -0
  551. package/dist/email-console-FFVJWb9N.mjs +50 -0
  552. package/dist/email-console-FFVJWb9N.mjs.map +1 -0
  553. package/dist/email-locale-BJ8DjTzZ.mjs +25 -0
  554. package/dist/email-locale-BJ8DjTzZ.mjs.map +1 -0
  555. package/dist/emdash-runtime-DVi7vtXC.mjs +4379 -0
  556. package/dist/emdash-runtime-DVi7vtXC.mjs.map +1 -0
  557. package/dist/entry-lock-C7VX0NGK.d.mts +4568 -0
  558. package/dist/entry-lock-C7VX0NGK.d.mts.map +1 -0
  559. package/dist/entry-lock-DLxCffFW.mjs +163 -0
  560. package/dist/entry-lock-DLxCffFW.mjs.map +1 -0
  561. package/dist/entry-lock-Df6-XhIu.mjs +1211 -0
  562. package/dist/entry-lock-Df6-XhIu.mjs.map +1 -0
  563. package/dist/env-types-C3FCVBWe.mjs +38 -0
  564. package/dist/env-types-C3FCVBWe.mjs.map +1 -0
  565. package/dist/error-CVWeIOku.mjs +90 -0
  566. package/dist/error-CVWeIOku.mjs.map +1 -0
  567. package/dist/errors-B4f4It-2.mjs +120 -0
  568. package/dist/errors-B4f4It-2.mjs.map +1 -0
  569. package/dist/errors-BOYNdIo3.mjs +479 -0
  570. package/dist/errors-BOYNdIo3.mjs.map +1 -0
  571. package/dist/escape-lsNq38PP.mjs +9 -0
  572. package/dist/escape-lsNq38PP.mjs.map +1 -0
  573. package/dist/fence-C3MUitUN.mjs +162 -0
  574. package/dist/fence-C3MUitUN.mjs.map +1 -0
  575. package/dist/field-defs-cache-Dez5iWJJ.mjs +77 -0
  576. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +1 -0
  577. package/dist/field-map-Bft9LKak.mjs +83 -0
  578. package/dist/field-map-Bft9LKak.mjs.map +1 -0
  579. package/dist/fts-manager-Beg3e4bI.mjs +443 -0
  580. package/dist/fts-manager-Beg3e4bI.mjs.map +1 -0
  581. package/dist/gc-ByyAYiYE.mjs +75 -0
  582. package/dist/gc-ByyAYiYE.mjs.map +1 -0
  583. package/dist/hash-BJaeek87.mjs +37 -0
  584. package/dist/hash-BJaeek87.mjs.map +1 -0
  585. package/dist/hook-result-BrdLyOdI.d.mts +31 -0
  586. package/dist/hook-result-BrdLyOdI.d.mts.map +1 -0
  587. package/dist/hreflang-C8Jb-hrf.mjs +105 -0
  588. package/dist/hreflang-C8Jb-hrf.mjs.map +1 -0
  589. package/dist/hreflang-CY_F5OjF.d.mts +50 -0
  590. package/dist/hreflang-CY_F5OjF.d.mts.map +1 -0
  591. package/dist/http-route-dispatch-CyeW6iPv.mjs +342 -0
  592. package/dist/http-route-dispatch-CyeW6iPv.mjs.map +1 -0
  593. package/dist/identity-Cael5uTT.mjs +35 -0
  594. package/dist/identity-Cael5uTT.mjs.map +1 -0
  595. package/dist/import-BUXjdZUn.mjs +2126 -0
  596. package/dist/import-BUXjdZUn.mjs.map +1 -0
  597. package/dist/index-BB9sVisO.d.mts +623 -0
  598. package/dist/index-BB9sVisO.d.mts.map +1 -0
  599. package/dist/index.d.mts +23 -23
  600. package/dist/index.mjs +96 -94
  601. package/dist/install-finalization-3JX5qQEA.mjs +58 -0
  602. package/dist/install-finalization-3JX5qQEA.mjs.map +1 -0
  603. package/dist/json-recordset-BUjxhr77.mjs +12 -0
  604. package/dist/json-recordset-BUjxhr77.mjs.map +1 -0
  605. package/dist/json-schema-v_D_pPNG.mjs +15 -0
  606. package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
  607. package/dist/keys-CifIkT0N.mjs +61 -0
  608. package/dist/keys-CifIkT0N.mjs.map +1 -0
  609. package/dist/kinds-B_Qcl5pz.mjs +974 -0
  610. package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
  611. package/dist/lifecycle-7vUJeFRe.mjs +25 -0
  612. package/dist/lifecycle-7vUJeFRe.mjs.map +1 -0
  613. package/dist/load-CdAG9wz-.mjs +28 -0
  614. package/dist/load-CdAG9wz-.mjs.map +1 -0
  615. package/dist/loader-CswroUbe.mjs +1380 -0
  616. package/dist/loader-CswroUbe.mjs.map +1 -0
  617. package/dist/loops-uA4iTOzd.mjs +205 -0
  618. package/dist/loops-uA4iTOzd.mjs.map +1 -0
  619. package/dist/manifest-builder-B8zjuH3f.mjs +189 -0
  620. package/dist/manifest-builder-B8zjuH3f.mjs.map +1 -0
  621. package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
  622. package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
  623. package/dist/marketplace-CqbgeIa7.mjs +257 -0
  624. package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
  625. package/dist/media/index.d.mts +1 -1
  626. package/dist/media/local-runtime.d.mts +14 -14
  627. package/dist/media/local-runtime.mjs +10 -5
  628. package/dist/media/local-runtime.mjs.map +1 -1
  629. package/dist/media--dJRU6i2.mjs +294 -0
  630. package/dist/media--dJRU6i2.mjs.map +1 -0
  631. package/dist/media-1WC65OCB.mjs +416 -0
  632. package/dist/media-1WC65OCB.mjs.map +1 -0
  633. package/dist/media-Bws9f18T.mjs +373 -0
  634. package/dist/media-Bws9f18T.mjs.map +1 -0
  635. package/dist/media-allowlist-BJB7MFx6.mjs +45 -0
  636. package/dist/media-allowlist-BJB7MFx6.mjs.map +1 -0
  637. package/dist/media-folders-Dn3C16B8.mjs +210 -0
  638. package/dist/media-folders-Dn3C16B8.mjs.map +1 -0
  639. package/dist/media-url-BQgKvpQ5.mjs +43 -0
  640. package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
  641. package/dist/media-usage-CF0WVcLO.mjs +282 -0
  642. package/dist/media-usage-CF0WVcLO.mjs.map +1 -0
  643. package/dist/media-usage-activation-C9HwVw5w.mjs +78 -0
  644. package/dist/media-usage-activation-C9HwVw5w.mjs.map +1 -0
  645. package/dist/media-usage-work-CkLa5-nc.mjs +1036 -0
  646. package/dist/media-usage-work-CkLa5-nc.mjs.map +1 -0
  647. package/dist/media-usage-work-m3AWTmmC.mjs +151 -0
  648. package/dist/media-usage-work-m3AWTmmC.mjs.map +1 -0
  649. package/dist/menus-BCVSSp1z.mjs +753 -0
  650. package/dist/menus-BCVSSp1z.mjs.map +1 -0
  651. package/dist/menus-BSzwObhV.mjs +92 -0
  652. package/dist/menus-BSzwObhV.mjs.map +1 -0
  653. package/dist/menus-Cl4kwdt7.mjs +3721 -0
  654. package/dist/menus-Cl4kwdt7.mjs.map +1 -0
  655. package/dist/migrations/index.d.mts +1 -1
  656. package/dist/migrations/index.d.mts.map +1 -1
  657. package/dist/migrations/index.mjs +3 -3
  658. package/dist/mode-C-D3qICy.mjs +23 -0
  659. package/dist/mode-C-D3qICy.mjs.map +1 -0
  660. package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
  661. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
  662. package/dist/oauth-authorization-TpEJrYB7.mjs +274 -0
  663. package/dist/oauth-authorization-TpEJrYB7.mjs.map +1 -0
  664. package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
  665. package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
  666. package/dist/oauth-state-store-CHMn_mwc.mjs +50 -0
  667. package/dist/oauth-state-store-CHMn_mwc.mjs.map +1 -0
  668. package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
  669. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
  670. package/dist/object-cache/memory.d.mts +1 -1
  671. package/dist/options-DJWaq3Ie.d.mts +81 -0
  672. package/dist/options-DJWaq3Ie.d.mts.map +1 -0
  673. package/dist/ownership-MiyA7qKO.mjs +12 -0
  674. package/dist/ownership-MiyA7qKO.mjs.map +1 -0
  675. package/dist/page/index.d.mts +2 -2
  676. package/dist/page/index.mjs +9 -4
  677. package/dist/page/index.mjs.map +1 -1
  678. package/dist/parse-CWHOFc6z.d.mts +176 -0
  679. package/dist/parse-CWHOFc6z.d.mts.map +1 -0
  680. package/dist/parse-DgQ2NABT.mjs +81 -0
  681. package/dist/parse-DgQ2NABT.mjs.map +1 -0
  682. package/dist/passkey-config-D0kdzEao.mjs +46 -0
  683. package/dist/passkey-config-D0kdzEao.mjs.map +1 -0
  684. package/dist/paths-biDzFTY2.mjs +77 -0
  685. package/dist/paths-biDzFTY2.mjs.map +1 -0
  686. package/dist/placeholder-D41vk11_.d.mts +306 -0
  687. package/dist/placeholder-D41vk11_.d.mts.map +1 -0
  688. package/dist/plan-CCoqxNoU.mjs +135 -0
  689. package/dist/plan-CCoqxNoU.mjs.map +1 -0
  690. package/dist/plugin-test-runtime.d.mts +14 -14
  691. package/dist/plugin-test-runtime.mjs +109 -107
  692. package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
  693. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
  694. package/dist/plugin-types.d.mts +2 -2
  695. package/dist/plugin-utils.d.mts +12 -12
  696. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  697. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  698. package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
  699. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  700. package/dist/plugins/host.d.mts +5 -5
  701. package/dist/plugins/host.mjs +45 -41
  702. package/dist/plugins-COJ2L49n.mjs +261 -0
  703. package/dist/plugins-COJ2L49n.mjs.map +1 -0
  704. package/dist/policy-DLQ--Hnm.mjs +45 -0
  705. package/dist/policy-DLQ--Hnm.mjs.map +1 -0
  706. package/dist/portable-text-BH4zgkSm.mjs +311 -0
  707. package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
  708. package/dist/preview-DLexxwp3.mjs +107 -0
  709. package/dist/preview-DLexxwp3.mjs.map +1 -0
  710. package/dist/protocol-79kUO7jP.d.mts +65 -0
  711. package/dist/protocol-79kUO7jP.d.mts.map +1 -0
  712. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +316 -0
  713. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +1 -0
  714. package/dist/public-submission-Di3TsgzX.mjs +251 -0
  715. package/dist/public-submission-Di3TsgzX.mjs.map +1 -0
  716. package/dist/public-url-Bt98vysr.mjs +101 -0
  717. package/dist/public-url-Bt98vysr.mjs.map +1 -0
  718. package/dist/query-CpnRlBh8.mjs +1156 -0
  719. package/dist/query-CpnRlBh8.mjs.map +1 -0
  720. package/dist/query-haKvLAWl.mjs +41 -0
  721. package/dist/query-haKvLAWl.mjs.map +1 -0
  722. package/dist/range-CYfeXgGK.mjs +51 -0
  723. package/dist/range-CYfeXgGK.mjs.map +1 -0
  724. package/dist/rate-limit-Xp4d0NBY.mjs +127 -0
  725. package/dist/rate-limit-Xp4d0NBY.mjs.map +1 -0
  726. package/dist/receipt-BUsQCOeM.mjs +43 -0
  727. package/dist/receipt-BUsQCOeM.mjs.map +1 -0
  728. package/dist/redirect-CQAV7mCo.mjs +19 -0
  729. package/dist/redirect-CQAV7mCo.mjs.map +1 -0
  730. package/dist/redirect-DiS_3mA4.mjs +423 -0
  731. package/dist/redirect-DiS_3mA4.mjs.map +1 -0
  732. package/dist/redirect-paths-CNYq7w80.mjs +36 -0
  733. package/dist/redirect-paths-CNYq7w80.mjs.map +1 -0
  734. package/dist/redirects-BEVSRMa2.mjs +148 -0
  735. package/dist/redirects-BEVSRMa2.mjs.map +1 -0
  736. package/dist/redirects-BHpy-VsZ.mjs +446 -0
  737. package/dist/redirects-BHpy-VsZ.mjs.map +1 -0
  738. package/dist/registry/testing.mjs +3 -3
  739. package/dist/registry-TUVaid9Z.mjs +8369 -0
  740. package/dist/registry-TUVaid9Z.mjs.map +1 -0
  741. package/dist/relations-CA_QuMTU.mjs +776 -0
  742. package/dist/relations-CA_QuMTU.mjs.map +1 -0
  743. package/dist/request-context.d.mts +1 -1
  744. package/dist/request-meta-bwZ_NsvU.mjs +141 -0
  745. package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
  746. package/dist/resolve-DwNM-CXl.mjs +101 -0
  747. package/dist/resolve-DwNM-CXl.mjs.map +1 -0
  748. package/dist/revision-BVp8S0e_.mjs +374 -0
  749. package/dist/revision-BVp8S0e_.mjs.map +1 -0
  750. package/dist/route-cache-QSOyDEw0.mjs +20 -0
  751. package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
  752. package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
  753. package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
  754. package/dist/routes-BerZFrvV.mjs +272 -0
  755. package/dist/routes-BerZFrvV.mjs.map +1 -0
  756. package/dist/runner-BObHz5FC.d.mts +68 -0
  757. package/dist/runner-BObHz5FC.d.mts.map +1 -0
  758. package/dist/runner-C5NeAkBQ.mjs +6595 -0
  759. package/dist/runner-C5NeAkBQ.mjs.map +1 -0
  760. package/dist/runtime.d.mts +13 -13
  761. package/dist/runtime.mjs +3 -2
  762. package/dist/runtime.mjs.map +1 -1
  763. package/dist/schema/project-env-types.mjs +39 -35
  764. package/dist/schema/project-env-types.mjs.map +1 -1
  765. package/dist/schema-C4OBuv6Z.mjs +13 -0
  766. package/dist/schema-C4OBuv6Z.mjs.map +1 -0
  767. package/dist/schema-DJRfvM_o.mjs +815 -0
  768. package/dist/schema-DJRfvM_o.mjs.map +1 -0
  769. package/dist/scopes-BU03K7Uo.mjs +34 -0
  770. package/dist/scopes-BU03K7Uo.mjs.map +1 -0
  771. package/dist/search-DfVzks89.mjs +450 -0
  772. package/dist/search-DfVzks89.mjs.map +1 -0
  773. package/dist/sections-BMy4JVUz.mjs +346 -0
  774. package/dist/sections-BMy4JVUz.mjs.map +1 -0
  775. package/dist/seed/index.d.mts +2 -2
  776. package/dist/seed/index.mjs +37 -33
  777. package/dist/seo/index.d.mts +3 -3
  778. package/dist/seo/index.mjs +24 -20
  779. package/dist/seo/index.mjs.map +1 -1
  780. package/dist/seo-ClB-dw9w.mjs +188 -0
  781. package/dist/seo-ClB-dw9w.mjs.map +1 -0
  782. package/dist/seo-VZYOEy8f.mjs +133 -0
  783. package/dist/seo-VZYOEy8f.mjs.map +1 -0
  784. package/dist/service-Bo_usgSk.mjs +150 -0
  785. package/dist/service-Bo_usgSk.mjs.map +1 -0
  786. package/dist/session-user-DlpPdf8L.mjs +61 -0
  787. package/dist/session-user-DlpPdf8L.mjs.map +1 -0
  788. package/dist/settings-CWb84sDm.mjs +452 -0
  789. package/dist/settings-CWb84sDm.mjs.map +1 -0
  790. package/dist/settings-DS914jjE.mjs +66 -0
  791. package/dist/settings-DS914jjE.mjs.map +1 -0
  792. package/dist/settings-Dd1uivmQ.mjs +73 -0
  793. package/dist/settings-Dd1uivmQ.mjs.map +1 -0
  794. package/dist/setup-complete-BuNxAUiN.mjs +65 -0
  795. package/dist/setup-complete-BuNxAUiN.mjs.map +1 -0
  796. package/dist/setup-nonce-BnEAX0iy.mjs +25 -0
  797. package/dist/setup-nonce-BnEAX0iy.mjs.map +1 -0
  798. package/dist/site-domain-Bq5j5bVg.mjs +131 -0
  799. package/dist/site-domain-Bq5j5bVg.mjs.map +1 -0
  800. package/dist/site-settings-DRHfX7bq.mjs +50 -0
  801. package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
  802. package/dist/site-url-MB685I5X.mjs +45 -0
  803. package/dist/site-url-MB685I5X.mjs.map +1 -0
  804. package/dist/sitemap-name-BTg2NJJv.mjs +26 -0
  805. package/dist/sitemap-name-BTg2NJJv.mjs.map +1 -0
  806. package/dist/slug-aVnUV4SL.mjs +16 -0
  807. package/dist/slug-aVnUV4SL.mjs.map +1 -0
  808. package/dist/snapshot-DYsG4uOq.mjs +414 -0
  809. package/dist/snapshot-DYsG4uOq.mjs.map +1 -0
  810. package/dist/ssrf-BcYjyM4M.mjs +406 -0
  811. package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
  812. package/dist/stage-D8DWgPcO.mjs +662 -0
  813. package/dist/stage-D8DWgPcO.mjs.map +1 -0
  814. package/dist/staged-CD_imitH.mjs +686 -0
  815. package/dist/staged-CD_imitH.mjs.map +1 -0
  816. package/dist/state-CFbGZziM.mjs +178 -0
  817. package/dist/state-CFbGZziM.mjs.map +1 -0
  818. package/dist/status-BFNdxzKc.mjs +30 -0
  819. package/dist/status-BFNdxzKc.mjs.map +1 -0
  820. package/dist/storage/local.d.mts +1 -1
  821. package/dist/storage/local.mjs +3 -3
  822. package/dist/storage/s3.d.mts +1 -1
  823. package/dist/storage/s3.mjs +1 -1
  824. package/dist/storage-query-DRyu3bSU.d.mts +1615 -0
  825. package/dist/storage-query-DRyu3bSU.d.mts.map +1 -0
  826. package/dist/tar-DFjExb9X.mjs +449 -0
  827. package/dist/tar-DFjExb9X.mjs.map +1 -0
  828. package/dist/target-CWZs2-o6.mjs +27 -0
  829. package/dist/target-CWZs2-o6.mjs.map +1 -0
  830. package/dist/taxonomies-ChnU7Mc8.mjs +697 -0
  831. package/dist/taxonomies-ChnU7Mc8.mjs.map +1 -0
  832. package/dist/taxonomies-Dd9JJv_a.mjs +939 -0
  833. package/dist/taxonomies-Dd9JJv_a.mjs.map +1 -0
  834. package/dist/taxonomy-C_C_LBAU.mjs +550 -0
  835. package/dist/taxonomy-C_C_LBAU.mjs.map +1 -0
  836. package/dist/tokens-BnhSnGwJ.mjs +171 -0
  837. package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
  838. package/dist/transfer-ClH6w6BV.mjs +8873 -0
  839. package/dist/transfer-ClH6w6BV.mjs.map +1 -0
  840. package/dist/transfer-WmWiR3xf.mjs +166 -0
  841. package/dist/transfer-WmWiR3xf.mjs.map +1 -0
  842. package/dist/transfer-download--ofRj9Cw.mjs +33 -0
  843. package/dist/transfer-download--ofRj9Cw.mjs.map +1 -0
  844. package/dist/transformations-Bx4lYY0Y.mjs +196 -0
  845. package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
  846. package/dist/transport-BjbqNiPI.mjs +136 -0
  847. package/dist/transport-BjbqNiPI.mjs.map +1 -0
  848. package/dist/transport-DxiXnbXk.d.mts +42 -0
  849. package/dist/transport-DxiXnbXk.d.mts.map +1 -0
  850. package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
  851. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
  852. package/dist/turnstile-CJwvsOqw.mjs +58 -0
  853. package/dist/turnstile-CJwvsOqw.mjs.map +1 -0
  854. package/dist/types-BA3ey2QH.d.mts +87 -0
  855. package/dist/types-BA3ey2QH.d.mts.map +1 -0
  856. package/dist/types-Bwpzb5o6.d.mts +227 -0
  857. package/dist/types-Bwpzb5o6.d.mts.map +1 -0
  858. package/dist/types-CNB-dj6F.d.mts +289 -0
  859. package/dist/types-CNB-dj6F.d.mts.map +1 -0
  860. package/dist/types-CgfFGfO5.mjs +16 -0
  861. package/dist/types-CgfFGfO5.mjs.map +1 -0
  862. package/dist/types-D2NEXtgB.mjs +127 -0
  863. package/dist/types-D2NEXtgB.mjs.map +1 -0
  864. package/dist/types-DCFavOii.d.mts +916 -0
  865. package/dist/types-DCFavOii.d.mts.map +1 -0
  866. package/dist/types-DHO7Pd25.d.mts +366 -0
  867. package/dist/types-DHO7Pd25.d.mts.map +1 -0
  868. package/dist/types-DvqVxZXa.d.mts +125 -0
  869. package/dist/types-DvqVxZXa.d.mts.map +1 -0
  870. package/dist/types-QoPHm-2w.d.mts +1741 -0
  871. package/dist/types-QoPHm-2w.d.mts.map +1 -0
  872. package/dist/types-RLgeIpnF.d.mts +374 -0
  873. package/dist/types-RLgeIpnF.d.mts.map +1 -0
  874. package/dist/types-qHVygneX.mjs +77 -0
  875. package/dist/types-qHVygneX.mjs.map +1 -0
  876. package/dist/types-sUHaH7lC.mjs +37 -0
  877. package/dist/types-sUHaH7lC.mjs.map +1 -0
  878. package/dist/types-slSqujQL.d.mts +204 -0
  879. package/dist/types-slSqujQL.d.mts.map +1 -0
  880. package/dist/update-check-BxNg9T6N.mjs +161 -0
  881. package/dist/update-check-BxNg9T6N.mjs.map +1 -0
  882. package/dist/upload-attempts-DPFC4COv.mjs +32 -0
  883. package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
  884. package/dist/url-pattern-QATUE_rv.mjs +41 -0
  885. package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
  886. package/dist/user-BlCTKVAm.mjs +171 -0
  887. package/dist/user-BlCTKVAm.mjs.map +1 -0
  888. package/dist/utils-TPt7w2cS.mjs +442 -0
  889. package/dist/utils-TPt7w2cS.mjs.map +1 -0
  890. package/dist/validate-DxYhJQA-.mjs +524 -0
  891. package/dist/validate-DxYhJQA-.mjs.map +1 -0
  892. package/dist/validate-emKxGC5F.d.mts +468 -0
  893. package/dist/validate-emKxGC5F.d.mts.map +1 -0
  894. package/dist/validation-Ckq4vsVg.mjs +220 -0
  895. package/dist/validation-Ckq4vsVg.mjs.map +1 -0
  896. package/dist/version-BZj18Q7G.mjs +9 -0
  897. package/dist/version-BZj18Q7G.mjs.map +1 -0
  898. package/dist/version-DHmGpcch.mjs +7 -0
  899. package/dist/version-DHmGpcch.mjs.map +1 -0
  900. package/dist/video-DytCnw3L.mjs +54 -0
  901. package/dist/video-DytCnw3L.mjs.map +1 -0
  902. package/dist/virtual-modules-DO954n7P.mjs +515 -0
  903. package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
  904. package/dist/widgets-DA5XmvVC.mjs +121 -0
  905. package/dist/widgets-DA5XmvVC.mjs.map +1 -0
  906. package/dist/wxr-taxonomies-CrMonejI.d.mts +34 -0
  907. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +1 -0
  908. package/dist/wxr-taxonomies-RgRG0d5e.mjs +453 -0
  909. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +1 -0
  910. package/dist/zod-generator-D0JKy94C.mjs +424 -0
  911. package/dist/zod-generator-D0JKy94C.mjs.map +1 -0
  912. package/package.json +7 -6
  913. package/src/api/authorize.ts +42 -0
  914. package/src/api/handlers/dashboard.ts +33 -10
  915. package/src/api/handlers/manifest.ts +1 -0
  916. package/src/api/handlers/plugins.ts +1 -0
  917. package/src/api/handlers/revision.ts +6 -2
  918. package/src/api/handlers/site-domain.ts +26 -10
  919. package/src/api/schemas/settings.ts +2 -0
  920. package/src/api/types.ts +2 -0
  921. package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
  922. package/src/astro/integration/index.ts +48 -1
  923. package/src/astro/integration/routes.ts +8 -0
  924. package/src/astro/integration/runtime.ts +2 -1
  925. package/src/astro/integration/virtual-modules.ts +9 -16
  926. package/src/astro/integration/vite-config.ts +4 -15
  927. package/src/astro/middleware/auth.ts +3 -1
  928. package/src/astro/middleware/redirect.ts +71 -42
  929. package/src/astro/middleware.ts +18 -3
  930. package/src/astro/prefetch.ts +7 -5
  931. package/src/astro/public-plugin-api-routes.ts +10 -2
  932. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
  933. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
  934. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
  935. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
  936. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
  937. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  938. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
  939. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
  940. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +5 -4
  941. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
  942. package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
  943. package/src/astro/routes/api/content/[collection]/index.ts +1 -5
  944. package/src/astro/routes/api/dashboard.ts +4 -1
  945. package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
  946. package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
  947. package/src/astro/routes/api/import/wordpress/execute.ts +8 -3
  948. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
  949. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +34 -5
  950. package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
  951. package/src/astro/routes/api/menus/[name]/items.ts +2 -1
  952. package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
  953. package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
  954. package/src/astro/routes/api/menus/[name].ts +3 -2
  955. package/src/astro/routes/api/menus/index.ts +2 -1
  956. package/src/astro/routes/api/redirects/[id].ts +15 -2
  957. package/src/astro/routes/api/redirects/index.ts +5 -1
  958. package/src/astro/routes/api/settings/domain.ts +2 -1
  959. package/src/astro/routes/api/settings.ts +2 -1
  960. package/src/astro/routes/api/setup/admin-verify.ts +7 -1
  961. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
  962. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
  963. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
  964. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
  965. package/src/astro/routes/api/taxonomies/[name].ts +3 -2
  966. package/src/astro/routes/api/taxonomies/index.ts +2 -1
  967. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
  968. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
  969. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  970. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  971. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  972. package/src/astro/routes/robots.txt.ts +33 -2
  973. package/src/astro/types.ts +10 -1
  974. package/src/auth/types.ts +4 -4
  975. package/src/cache/redirect-paths.ts +56 -0
  976. package/src/cache/route-cache.ts +22 -0
  977. package/src/cli/commands/import/wordpress.ts +3 -27
  978. package/src/cli/commands/login.ts +35 -43
  979. package/src/cli/commands/migrate.ts +36 -4
  980. package/src/cli/commands/seed.ts +18 -8
  981. package/src/cli/wxr/parser.ts +2 -2
  982. package/src/client/index.ts +12 -2
  983. package/src/client/portable-text.ts +21 -7
  984. package/src/comments/query.ts +8 -2
  985. package/src/components/CommentForm.astro +2 -2
  986. package/src/components/Comments.astro +1 -1
  987. package/src/components/InlinePortableTextEditor.tsx +152 -1325
  988. package/src/components/inline-block-types.ts +278 -0
  989. package/src/components/inline-bubble-menu.tsx +696 -0
  990. package/src/components/inline-editor-ui.tsx +1192 -0
  991. package/src/components/inline-image.tsx +722 -0
  992. package/src/components/inline-media-picker.tsx +1221 -0
  993. package/src/components/inline-slash-menu.tsx +556 -0
  994. package/src/database/collection-cleanup.ts +30 -0
  995. package/src/database/datetime-storage.ts +337 -60
  996. package/src/database/migration-lock.ts +43 -7
  997. package/src/database/repositories/content.ts +3 -1
  998. package/src/database/repositories/plugin-storage.ts +109 -8
  999. package/src/database/repositories/revision.ts +24 -6
  1000. package/src/database/repositories/types.ts +65 -7
  1001. package/src/emdash-runtime.ts +176 -160
  1002. package/src/import/index.ts +1 -0
  1003. package/src/import/registry.ts +17 -0
  1004. package/src/import/sources/wordpress-plugin.ts +151 -9
  1005. package/src/import/types.ts +3 -0
  1006. package/src/import/utils.ts +5 -0
  1007. package/src/loader.ts +36 -2
  1008. package/src/mcp/json-schema.ts +14 -0
  1009. package/src/mcp/plugin-tool-name.ts +36 -0
  1010. package/src/mcp/server.ts +74 -15
  1011. package/src/media/usage/collection-deletion.ts +4 -0
  1012. package/src/migrations/direct-executor.ts +42 -12
  1013. package/src/migrations/protocol.ts +6 -2
  1014. package/src/plugins/adapt-sandbox-entry.ts +16 -6
  1015. package/src/plugins/state.ts +5 -8
  1016. package/src/query.ts +51 -10
  1017. package/src/redirects/cache.ts +34 -2
  1018. package/src/schema/block-values.ts +80 -17
  1019. package/src/schema/registry.ts +9 -1
  1020. package/src/search/query.ts +3 -1
  1021. package/src/seed/apply.ts +32 -8
  1022. package/src/settings/index.ts +20 -0
  1023. package/src/settings/types.ts +2 -0
  1024. package/src/visual-editing/toolbar.ts +46 -12
  1025. package/dist/action-token-BdWad2YG.mjs +0 -26
  1026. package/dist/action-token-BdWad2YG.mjs.map +0 -1
  1027. package/dist/activation-xomsCMJg.mjs +0 -387
  1028. package/dist/activation-xomsCMJg.mjs.map +0 -1
  1029. package/dist/adapters-B4-nbElt.d.mts +0 -173
  1030. package/dist/adapters-B4-nbElt.d.mts.map +0 -1
  1031. package/dist/allowed-origins-CLpHGGlc.mjs +0 -116
  1032. package/dist/allowed-origins-CLpHGGlc.mjs.map +0 -1
  1033. package/dist/api-DBw_IWoi.mjs +0 -5024
  1034. package/dist/api-DBw_IWoi.mjs.map +0 -1
  1035. package/dist/api-tokens-B0ZipcZ-.mjs +0 -173
  1036. package/dist/api-tokens-B0ZipcZ-.mjs.map +0 -1
  1037. package/dist/apply-Cx48saFC.mjs +0 -1680
  1038. package/dist/apply-Cx48saFC.mjs.map +0 -1
  1039. package/dist/approvals-BXgtXA2s.mjs +0 -460
  1040. package/dist/approvals-BXgtXA2s.mjs.map +0 -1
  1041. package/dist/artifact-fetch-DsRczRGG.mjs +0 -659
  1042. package/dist/artifact-fetch-DsRczRGG.mjs.map +0 -1
  1043. package/dist/artifacts-D-O-qj9C.mjs +0 -307
  1044. package/dist/artifacts-D-O-qj9C.mjs.map +0 -1
  1045. package/dist/audit-CCH3MA4Y.mjs +0 -127
  1046. package/dist/audit-CCH3MA4Y.mjs.map +0 -1
  1047. package/dist/authoritative-records-Dcs7l2H5.mjs +0 -5183
  1048. package/dist/authoritative-records-Dcs7l2H5.mjs.map +0 -1
  1049. package/dist/authorize-TdIGpRSE.mjs +0 -49
  1050. package/dist/authorize-TdIGpRSE.mjs.map +0 -1
  1051. package/dist/backup-CZt5Mzwx.mjs +0 -246
  1052. package/dist/backup-CZt5Mzwx.mjs.map +0 -1
  1053. package/dist/block-types-DHnkzE6u.mjs +0 -132
  1054. package/dist/block-types-DHnkzE6u.mjs.map +0 -1
  1055. package/dist/block-values-C4N_F2-G.mjs +0 -175
  1056. package/dist/block-values-C4N_F2-G.mjs.map +0 -1
  1057. package/dist/byline-BmVKOQ8l.mjs +0 -909
  1058. package/dist/byline-BmVKOQ8l.mjs.map +0 -1
  1059. package/dist/byline-fields-B8SDs3M_.mjs +0 -123
  1060. package/dist/byline-fields-B8SDs3M_.mjs.map +0 -1
  1061. package/dist/byline-fields-Bze3ZdAw.mjs +0 -280
  1062. package/dist/byline-fields-Bze3ZdAw.mjs.map +0 -1
  1063. package/dist/bylines-CHhR28r9.mjs +0 -150
  1064. package/dist/bylines-CHhR28r9.mjs.map +0 -1
  1065. package/dist/bylines-DZS4OflA.mjs +0 -234
  1066. package/dist/bylines-DZS4OflA.mjs.map +0 -1
  1067. package/dist/cache-x0z8t_m9.mjs +0 -133
  1068. package/dist/cache-x0z8t_m9.mjs.map +0 -1
  1069. package/dist/canonical-BUcKRYpG.mjs +0 -174
  1070. package/dist/canonical-BUcKRYpG.mjs.map +0 -1
  1071. package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
  1072. package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
  1073. package/dist/challenge-store-BHgdPVze.mjs +0 -51
  1074. package/dist/challenge-store-BHgdPVze.mjs.map +0 -1
  1075. package/dist/checksum-BYR5i7qe.mjs +0 -162
  1076. package/dist/checksum-BYR5i7qe.mjs.map +0 -1
  1077. package/dist/chunks-Dr5Vr0zA.mjs +0 -25
  1078. package/dist/chunks-Dr5Vr0zA.mjs.map +0 -1
  1079. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
  1080. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
  1081. package/dist/comment-CWla6OHV.mjs +0 -325
  1082. package/dist/comment-CWla6OHV.mjs.map +0 -1
  1083. package/dist/comment-reaction-RZrcs5cW.mjs +0 -85
  1084. package/dist/comment-reaction-RZrcs5cW.mjs.map +0 -1
  1085. package/dist/comments-BzmIKVb2.mjs +0 -99
  1086. package/dist/comments-BzmIKVb2.mjs.map +0 -1
  1087. package/dist/comments-Da_dI2O1.mjs +0 -195
  1088. package/dist/comments-Da_dI2O1.mjs.map +0 -1
  1089. package/dist/components-oFXumpf5.mjs +0 -112
  1090. package/dist/components-oFXumpf5.mjs.map +0 -1
  1091. package/dist/config--wamYxBW.d.mts +0 -39
  1092. package/dist/config--wamYxBW.d.mts.map +0 -1
  1093. package/dist/config-Bo4eOOdV.mjs +0 -228
  1094. package/dist/config-Bo4eOOdV.mjs.map +0 -1
  1095. package/dist/config-C4-UxIk7.d.mts +0 -6790
  1096. package/dist/config-C4-UxIk7.d.mts.map +0 -1
  1097. package/dist/connection-UpzYxtE2.mjs +0 -36
  1098. package/dist/connection-UpzYxtE2.mjs.map +0 -1
  1099. package/dist/content-CcHrqkgp.mjs +0 -2072
  1100. package/dist/content-CcHrqkgp.mjs.map +0 -1
  1101. package/dist/content-list-query-Bxxdd9fv.d.mts +0 -26
  1102. package/dist/content-list-query-Bxxdd9fv.d.mts.map +0 -1
  1103. package/dist/content-repair-havk1F0-.mjs +0 -442
  1104. package/dist/content-repair-havk1F0-.mjs.map +0 -1
  1105. package/dist/context-CvhgHgSH.mjs +0 -2043
  1106. package/dist/context-CvhgHgSH.mjs.map +0 -1
  1107. package/dist/credits-CygUrPOi.mjs +0 -110
  1108. package/dist/credits-CygUrPOi.mjs.map +0 -1
  1109. package/dist/cron-C6ytTOLw.mjs +0 -306
  1110. package/dist/cron-C6ytTOLw.mjs.map +0 -1
  1111. package/dist/dashboard-7_FYfafc.mjs +0 -151
  1112. package/dist/dashboard-7_FYfafc.mjs.map +0 -1
  1113. package/dist/default-CHCUkV4Z.mjs +0 -81
  1114. package/dist/default-CHCUkV4Z.mjs.map +0 -1
  1115. package/dist/deferred-tasks-G0xhcJTl.d.mts +0 -9
  1116. package/dist/deferred-tasks-G0xhcJTl.d.mts.map +0 -1
  1117. package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
  1118. package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
  1119. package/dist/device-flow-CzDJmQ1q.mjs +0 -521
  1120. package/dist/device-flow-CzDJmQ1q.mjs.map +0 -1
  1121. package/dist/digest-xJmyPv2r.mjs +0 -194
  1122. package/dist/digest-xJmyPv2r.mjs.map +0 -1
  1123. package/dist/direct-executor-BXiYIVJ9.mjs +0 -104
  1124. package/dist/direct-executor-BXiYIVJ9.mjs.map +0 -1
  1125. package/dist/email-console-7ZPApLlm.mjs +0 -50
  1126. package/dist/email-console-7ZPApLlm.mjs.map +0 -1
  1127. package/dist/email-locale-DFdUA6UF.mjs +0 -25
  1128. package/dist/email-locale-DFdUA6UF.mjs.map +0 -1
  1129. package/dist/emdash-runtime-C4oFeVpN.mjs +0 -4363
  1130. package/dist/emdash-runtime-C4oFeVpN.mjs.map +0 -1
  1131. package/dist/entry-lock-B4n0HdQ_.mjs +0 -163
  1132. package/dist/entry-lock-B4n0HdQ_.mjs.map +0 -1
  1133. package/dist/entry-lock-BAAlKYrz.d.mts +0 -4566
  1134. package/dist/entry-lock-BAAlKYrz.d.mts.map +0 -1
  1135. package/dist/entry-lock-Cjz0h45X.mjs +0 -1209
  1136. package/dist/entry-lock-Cjz0h45X.mjs.map +0 -1
  1137. package/dist/env-types-4bkF6Bqg.mjs +0 -38
  1138. package/dist/env-types-4bkF6Bqg.mjs.map +0 -1
  1139. package/dist/error-DxgQdaZ_.mjs +0 -90
  1140. package/dist/error-DxgQdaZ_.mjs.map +0 -1
  1141. package/dist/errors-CjtE5aWF.mjs +0 -120
  1142. package/dist/errors-CjtE5aWF.mjs.map +0 -1
  1143. package/dist/errors-hskQ0C8G.mjs +0 -479
  1144. package/dist/errors-hskQ0C8G.mjs.map +0 -1
  1145. package/dist/escape-ESFhYzwG.mjs +0 -9
  1146. package/dist/escape-ESFhYzwG.mjs.map +0 -1
  1147. package/dist/fence-vc3aHgRA.mjs +0 -162
  1148. package/dist/fence-vc3aHgRA.mjs.map +0 -1
  1149. package/dist/field-defs-cache-zoow36nz.mjs +0 -77
  1150. package/dist/field-defs-cache-zoow36nz.mjs.map +0 -1
  1151. package/dist/field-map-JD1wG0Tq.mjs +0 -83
  1152. package/dist/field-map-JD1wG0Tq.mjs.map +0 -1
  1153. package/dist/fts-manager-WJCN8uU6.mjs +0 -443
  1154. package/dist/fts-manager-WJCN8uU6.mjs.map +0 -1
  1155. package/dist/gc-CsGZiKdH.mjs +0 -75
  1156. package/dist/gc-CsGZiKdH.mjs.map +0 -1
  1157. package/dist/hash-C4DFoJ7Z.mjs +0 -37
  1158. package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
  1159. package/dist/hook-result-CXjtMk7Q.d.mts +0 -31
  1160. package/dist/hook-result-CXjtMk7Q.d.mts.map +0 -1
  1161. package/dist/hreflang-BAma7iRr.mjs +0 -105
  1162. package/dist/hreflang-BAma7iRr.mjs.map +0 -1
  1163. package/dist/hreflang-BsYo4x_M.d.mts +0 -50
  1164. package/dist/hreflang-BsYo4x_M.d.mts.map +0 -1
  1165. package/dist/http-route-dispatch-C8G7hAK6.mjs +0 -342
  1166. package/dist/http-route-dispatch-C8G7hAK6.mjs.map +0 -1
  1167. package/dist/identity-BwBKM1fH.mjs +0 -35
  1168. package/dist/identity-BwBKM1fH.mjs.map +0 -1
  1169. package/dist/import-DJ3Z2wxE.mjs +0 -2021
  1170. package/dist/import-DJ3Z2wxE.mjs.map +0 -1
  1171. package/dist/index-DYsn97dY.d.mts +0 -623
  1172. package/dist/index-DYsn97dY.d.mts.map +0 -1
  1173. package/dist/install-finalization-DCFnFSHv.mjs +0 -58
  1174. package/dist/install-finalization-DCFnFSHv.mjs.map +0 -1
  1175. package/dist/keys-CGvAndSp.mjs +0 -61
  1176. package/dist/keys-CGvAndSp.mjs.map +0 -1
  1177. package/dist/kinds-DT1W4T4Y.mjs +0 -974
  1178. package/dist/kinds-DT1W4T4Y.mjs.map +0 -1
  1179. package/dist/lifecycle-BzglCSY0.mjs +0 -25
  1180. package/dist/lifecycle-BzglCSY0.mjs.map +0 -1
  1181. package/dist/load-DjUqmf3s.mjs +0 -28
  1182. package/dist/load-DjUqmf3s.mjs.map +0 -1
  1183. package/dist/loader-CetY659y.mjs +0 -1355
  1184. package/dist/loader-CetY659y.mjs.map +0 -1
  1185. package/dist/loops-DkT1zkPH.mjs +0 -205
  1186. package/dist/loops-DkT1zkPH.mjs.map +0 -1
  1187. package/dist/manifest-builder-BOFCd9rX.mjs +0 -189
  1188. package/dist/manifest-builder-BOFCd9rX.mjs.map +0 -1
  1189. package/dist/manifest-schema-BiFBPEsp.mjs +0 -497
  1190. package/dist/manifest-schema-BiFBPEsp.mjs.map +0 -1
  1191. package/dist/marketplace-CUlenvZm.mjs +0 -257
  1192. package/dist/marketplace-CUlenvZm.mjs.map +0 -1
  1193. package/dist/media-CRKsKlfK.mjs +0 -416
  1194. package/dist/media-CRKsKlfK.mjs.map +0 -1
  1195. package/dist/media-C_z7sRuC.mjs +0 -294
  1196. package/dist/media-C_z7sRuC.mjs.map +0 -1
  1197. package/dist/media-IT8hQleU.mjs +0 -373
  1198. package/dist/media-IT8hQleU.mjs.map +0 -1
  1199. package/dist/media-allowlist-Ct6wvnT2.mjs +0 -45
  1200. package/dist/media-allowlist-Ct6wvnT2.mjs.map +0 -1
  1201. package/dist/media-folders-DtMt-vAA.mjs +0 -210
  1202. package/dist/media-folders-DtMt-vAA.mjs.map +0 -1
  1203. package/dist/media-url-BpXLqCmf.mjs +0 -43
  1204. package/dist/media-url-BpXLqCmf.mjs.map +0 -1
  1205. package/dist/media-usage-DEPHZZ9X.mjs +0 -282
  1206. package/dist/media-usage-DEPHZZ9X.mjs.map +0 -1
  1207. package/dist/media-usage-activation-V2Siabtw.mjs +0 -78
  1208. package/dist/media-usage-activation-V2Siabtw.mjs.map +0 -1
  1209. package/dist/media-usage-work-Cv1OE59F.mjs +0 -151
  1210. package/dist/media-usage-work-Cv1OE59F.mjs.map +0 -1
  1211. package/dist/media-usage-work-cgDYGvrt.mjs +0 -1015
  1212. package/dist/media-usage-work-cgDYGvrt.mjs.map +0 -1
  1213. package/dist/menus-CvVYfsuk.mjs +0 -753
  1214. package/dist/menus-CvVYfsuk.mjs.map +0 -1
  1215. package/dist/menus-D1HC8npj.mjs +0 -92
  1216. package/dist/menus-D1HC8npj.mjs.map +0 -1
  1217. package/dist/menus-DL8IPIcm.mjs +0 -3721
  1218. package/dist/menus-DL8IPIcm.mjs.map +0 -1
  1219. package/dist/mode-eieqAWLe.mjs +0 -23
  1220. package/dist/mode-eieqAWLe.mjs.map +0 -1
  1221. package/dist/node-sqlite-compat-VuyzJw1b.mjs +0 -63
  1222. package/dist/node-sqlite-compat-VuyzJw1b.mjs.map +0 -1
  1223. package/dist/oauth-authorization-B6ZJbMd2.mjs +0 -274
  1224. package/dist/oauth-authorization-B6ZJbMd2.mjs.map +0 -1
  1225. package/dist/oauth-clients-DVjRc9v3.mjs +0 -266
  1226. package/dist/oauth-clients-DVjRc9v3.mjs.map +0 -1
  1227. package/dist/oauth-state-store-CnmYYsVQ.mjs +0 -50
  1228. package/dist/oauth-state-store-CnmYYsVQ.mjs.map +0 -1
  1229. package/dist/oauth-user-lookup-Dz1_R5vT.mjs +0 -26
  1230. package/dist/oauth-user-lookup-Dz1_R5vT.mjs.map +0 -1
  1231. package/dist/options-BR9XZl7h.d.mts +0 -81
  1232. package/dist/options-BR9XZl7h.d.mts.map +0 -1
  1233. package/dist/ownership-COPyVysP.mjs +0 -12
  1234. package/dist/ownership-COPyVysP.mjs.map +0 -1
  1235. package/dist/parse-BOGhrwSq.d.mts +0 -174
  1236. package/dist/parse-BOGhrwSq.d.mts.map +0 -1
  1237. package/dist/parse-Cn5aSk1N.mjs +0 -81
  1238. package/dist/parse-Cn5aSk1N.mjs.map +0 -1
  1239. package/dist/passkey-config-mMFRQUCj.mjs +0 -46
  1240. package/dist/passkey-config-mMFRQUCj.mjs.map +0 -1
  1241. package/dist/paths-BmcAdBo9.mjs +0 -77
  1242. package/dist/paths-BmcAdBo9.mjs.map +0 -1
  1243. package/dist/placeholder-nOep3_Gn.d.mts +0 -306
  1244. package/dist/placeholder-nOep3_Gn.d.mts.map +0 -1
  1245. package/dist/plan-CDY4K8CH.mjs +0 -135
  1246. package/dist/plan-CDY4K8CH.mjs.map +0 -1
  1247. package/dist/plugins-DFBpfbO3.mjs +0 -261
  1248. package/dist/plugins-DFBpfbO3.mjs.map +0 -1
  1249. package/dist/policy-B_2qnHSy.mjs +0 -45
  1250. package/dist/policy-B_2qnHSy.mjs.map +0 -1
  1251. package/dist/portable-text-Dc2YAusw.mjs +0 -307
  1252. package/dist/portable-text-Dc2YAusw.mjs.map +0 -1
  1253. package/dist/preview-BtzikJ9O.mjs +0 -107
  1254. package/dist/preview-BtzikJ9O.mjs.map +0 -1
  1255. package/dist/protocol-M268ox8L.d.mts +0 -61
  1256. package/dist/protocol-M268ox8L.d.mts.map +0 -1
  1257. package/dist/public-submission-BQZavgZU.mjs +0 -251
  1258. package/dist/public-submission-BQZavgZU.mjs.map +0 -1
  1259. package/dist/public-url-uT1Ok2Tu.mjs +0 -101
  1260. package/dist/public-url-uT1Ok2Tu.mjs.map +0 -1
  1261. package/dist/query-BGG3sDEd.mjs +0 -1127
  1262. package/dist/query-BGG3sDEd.mjs.map +0 -1
  1263. package/dist/query-C_CWlifp.mjs +0 -41
  1264. package/dist/query-C_CWlifp.mjs.map +0 -1
  1265. package/dist/range-CXK_kDbI.mjs +0 -51
  1266. package/dist/range-CXK_kDbI.mjs.map +0 -1
  1267. package/dist/rate-limit-Dvamvay-.mjs +0 -127
  1268. package/dist/rate-limit-Dvamvay-.mjs.map +0 -1
  1269. package/dist/receipt-BmQGzquP.mjs +0 -43
  1270. package/dist/receipt-BmQGzquP.mjs.map +0 -1
  1271. package/dist/redirect-B39kTQ_0.mjs +0 -423
  1272. package/dist/redirect-B39kTQ_0.mjs.map +0 -1
  1273. package/dist/redirect-BguJ00Pv.mjs +0 -19
  1274. package/dist/redirect-BguJ00Pv.mjs.map +0 -1
  1275. package/dist/redirects-C8G4BsfP.mjs +0 -446
  1276. package/dist/redirects-C8G4BsfP.mjs.map +0 -1
  1277. package/dist/redirects-DFT7Wr-e.mjs +0 -148
  1278. package/dist/redirects-DFT7Wr-e.mjs.map +0 -1
  1279. package/dist/registry-DeZ27gVi.mjs +0 -8374
  1280. package/dist/registry-DeZ27gVi.mjs.map +0 -1
  1281. package/dist/relations-DBB1bRJW.mjs +0 -776
  1282. package/dist/relations-DBB1bRJW.mjs.map +0 -1
  1283. package/dist/request-meta-BSvkhIBX.mjs +0 -141
  1284. package/dist/request-meta-BSvkhIBX.mjs.map +0 -1
  1285. package/dist/resolve-BxH64HN9.mjs +0 -100
  1286. package/dist/resolve-BxH64HN9.mjs.map +0 -1
  1287. package/dist/revision-BWEH2qQB.mjs +0 -368
  1288. package/dist/revision-BWEH2qQB.mjs.map +0 -1
  1289. package/dist/route-wire-CwbWB_6O.mjs +0 -197
  1290. package/dist/route-wire-CwbWB_6O.mjs.map +0 -1
  1291. package/dist/routes-BfIxc7ft.mjs +0 -272
  1292. package/dist/routes-BfIxc7ft.mjs.map +0 -1
  1293. package/dist/runner-DkeafPBA.d.mts +0 -68
  1294. package/dist/runner-DkeafPBA.d.mts.map +0 -1
  1295. package/dist/runner-wqt4BrIW.mjs +0 -6383
  1296. package/dist/runner-wqt4BrIW.mjs.map +0 -1
  1297. package/dist/schema-BXIW-JHi.mjs +0 -815
  1298. package/dist/schema-BXIW-JHi.mjs.map +0 -1
  1299. package/dist/schema-I74JwYte.mjs +0 -13
  1300. package/dist/schema-I74JwYte.mjs.map +0 -1
  1301. package/dist/scopes-RWZ5ft_Z.mjs +0 -34
  1302. package/dist/scopes-RWZ5ft_Z.mjs.map +0 -1
  1303. package/dist/search-DxwagyWS.mjs +0 -450
  1304. package/dist/search-DxwagyWS.mjs.map +0 -1
  1305. package/dist/sections-Ccq9ZgyD.mjs +0 -346
  1306. package/dist/sections-Ccq9ZgyD.mjs.map +0 -1
  1307. package/dist/seo-CCnfPWAQ.mjs +0 -133
  1308. package/dist/seo-CCnfPWAQ.mjs.map +0 -1
  1309. package/dist/seo-QCtJ1jjV.mjs +0 -188
  1310. package/dist/seo-QCtJ1jjV.mjs.map +0 -1
  1311. package/dist/service-DX84s2rw.mjs +0 -150
  1312. package/dist/service-DX84s2rw.mjs.map +0 -1
  1313. package/dist/session-user-1dtJc2zv.mjs +0 -61
  1314. package/dist/session-user-1dtJc2zv.mjs.map +0 -1
  1315. package/dist/settings-B1jOxAIl.mjs +0 -443
  1316. package/dist/settings-B1jOxAIl.mjs.map +0 -1
  1317. package/dist/settings-Bc1IBl1t.mjs +0 -66
  1318. package/dist/settings-Bc1IBl1t.mjs.map +0 -1
  1319. package/dist/settings-GaZ5sVgg.mjs +0 -73
  1320. package/dist/settings-GaZ5sVgg.mjs.map +0 -1
  1321. package/dist/setup-complete-DidMAWJS.mjs +0 -65
  1322. package/dist/setup-complete-DidMAWJS.mjs.map +0 -1
  1323. package/dist/setup-nonce-DKl4S4c6.mjs +0 -25
  1324. package/dist/setup-nonce-DKl4S4c6.mjs.map +0 -1
  1325. package/dist/site-domain-CbI51Pc2.mjs +0 -113
  1326. package/dist/site-domain-CbI51Pc2.mjs.map +0 -1
  1327. package/dist/site-settings-CDdT4mVm.mjs +0 -50
  1328. package/dist/site-settings-CDdT4mVm.mjs.map +0 -1
  1329. package/dist/site-url-CrDZaAvo.mjs +0 -45
  1330. package/dist/site-url-CrDZaAvo.mjs.map +0 -1
  1331. package/dist/sitemap-name-W3BTor6X.mjs +0 -26
  1332. package/dist/sitemap-name-W3BTor6X.mjs.map +0 -1
  1333. package/dist/slug-BJhHKoOH.mjs +0 -16
  1334. package/dist/slug-BJhHKoOH.mjs.map +0 -1
  1335. package/dist/snapshot-BuI_2uDe.mjs +0 -414
  1336. package/dist/snapshot-BuI_2uDe.mjs.map +0 -1
  1337. package/dist/ssrf-LM_0wpGA.mjs +0 -406
  1338. package/dist/ssrf-LM_0wpGA.mjs.map +0 -1
  1339. package/dist/stage-DhzZuYaT.mjs +0 -662
  1340. package/dist/stage-DhzZuYaT.mjs.map +0 -1
  1341. package/dist/staged-DboEaWsV.mjs +0 -686
  1342. package/dist/staged-DboEaWsV.mjs.map +0 -1
  1343. package/dist/state-DCXDzjHq.mjs +0 -178
  1344. package/dist/state-DCXDzjHq.mjs.map +0 -1
  1345. package/dist/status-Dl85BK39.mjs +0 -30
  1346. package/dist/status-Dl85BK39.mjs.map +0 -1
  1347. package/dist/storage-query-BOBmeDMD.d.mts +0 -1615
  1348. package/dist/storage-query-BOBmeDMD.d.mts.map +0 -1
  1349. package/dist/tar-K40edFMt.mjs +0 -449
  1350. package/dist/tar-K40edFMt.mjs.map +0 -1
  1351. package/dist/target-BOighEY1.mjs +0 -27
  1352. package/dist/target-BOighEY1.mjs.map +0 -1
  1353. package/dist/taxonomies-DQSywBvX.mjs +0 -697
  1354. package/dist/taxonomies-DQSywBvX.mjs.map +0 -1
  1355. package/dist/taxonomies-Dj5eaobC.mjs +0 -939
  1356. package/dist/taxonomies-Dj5eaobC.mjs.map +0 -1
  1357. package/dist/taxonomy-QrNmTfIZ.mjs +0 -550
  1358. package/dist/taxonomy-QrNmTfIZ.mjs.map +0 -1
  1359. package/dist/tokens-j5L0as2H.mjs +0 -171
  1360. package/dist/tokens-j5L0as2H.mjs.map +0 -1
  1361. package/dist/transfer-CYEw8Tu4.mjs +0 -8873
  1362. package/dist/transfer-CYEw8Tu4.mjs.map +0 -1
  1363. package/dist/transfer-DDX10hkD.mjs +0 -166
  1364. package/dist/transfer-DDX10hkD.mjs.map +0 -1
  1365. package/dist/transfer-download-BAqq6GJv.mjs +0 -33
  1366. package/dist/transfer-download-BAqq6GJv.mjs.map +0 -1
  1367. package/dist/transformations-De44wqV_.mjs +0 -196
  1368. package/dist/transformations-De44wqV_.mjs.map +0 -1
  1369. package/dist/transport-1QjUhCRO.d.mts +0 -42
  1370. package/dist/transport-1QjUhCRO.d.mts.map +0 -1
  1371. package/dist/transport-Ds5pVX7p.mjs +0 -136
  1372. package/dist/transport-Ds5pVX7p.mjs.map +0 -1
  1373. package/dist/trusted-proxy-d4Tk6biT.mjs +0 -51
  1374. package/dist/trusted-proxy-d4Tk6biT.mjs.map +0 -1
  1375. package/dist/turnstile-DaFLtyrs.mjs +0 -58
  1376. package/dist/turnstile-DaFLtyrs.mjs.map +0 -1
  1377. package/dist/types-B4-1P2DK.d.mts +0 -227
  1378. package/dist/types-B4-1P2DK.d.mts.map +0 -1
  1379. package/dist/types-BKXA0f-c.mjs +0 -16
  1380. package/dist/types-BKXA0f-c.mjs.map +0 -1
  1381. package/dist/types-BiHcpUoO.d.mts +0 -374
  1382. package/dist/types-BiHcpUoO.d.mts.map +0 -1
  1383. package/dist/types-BihhvkyN.d.mts +0 -85
  1384. package/dist/types-BihhvkyN.d.mts.map +0 -1
  1385. package/dist/types-Bq9Wohd7.d.mts +0 -363
  1386. package/dist/types-Bq9Wohd7.d.mts.map +0 -1
  1387. package/dist/types-C-Xp0CcN.mjs +0 -103
  1388. package/dist/types-C-Xp0CcN.mjs.map +0 -1
  1389. package/dist/types-C4P7F1Vq.d.mts +0 -1741
  1390. package/dist/types-C4P7F1Vq.d.mts.map +0 -1
  1391. package/dist/types-CGaqwHw4.mjs +0 -37
  1392. package/dist/types-CGaqwHw4.mjs.map +0 -1
  1393. package/dist/types-D4ECCE4X.mjs +0 -77
  1394. package/dist/types-D4ECCE4X.mjs.map +0 -1
  1395. package/dist/types-DcRJp0vS.d.mts +0 -125
  1396. package/dist/types-DcRJp0vS.d.mts.map +0 -1
  1397. package/dist/types-Ff85fTzU.d.mts +0 -289
  1398. package/dist/types-Ff85fTzU.d.mts.map +0 -1
  1399. package/dist/types-UKr5Sf4y.d.mts +0 -916
  1400. package/dist/types-UKr5Sf4y.d.mts.map +0 -1
  1401. package/dist/types-YpN8hZW7.d.mts +0 -204
  1402. package/dist/types-YpN8hZW7.d.mts.map +0 -1
  1403. package/dist/update-check-DrlsK-tt.mjs +0 -161
  1404. package/dist/update-check-DrlsK-tt.mjs.map +0 -1
  1405. package/dist/upload-attempts-D8CPPvRU.mjs +0 -32
  1406. package/dist/upload-attempts-D8CPPvRU.mjs.map +0 -1
  1407. package/dist/url-pattern-Di4Nn3vP.mjs +0 -41
  1408. package/dist/url-pattern-Di4Nn3vP.mjs.map +0 -1
  1409. package/dist/user-B-ZdGjhI.mjs +0 -171
  1410. package/dist/user-B-ZdGjhI.mjs.map +0 -1
  1411. package/dist/utils-D7wL3r6-.mjs +0 -437
  1412. package/dist/utils-D7wL3r6-.mjs.map +0 -1
  1413. package/dist/validate-BSZbSUDk.mjs +0 -524
  1414. package/dist/validate-BSZbSUDk.mjs.map +0 -1
  1415. package/dist/validate-Dfv0DpZi.d.mts +0 -468
  1416. package/dist/validate-Dfv0DpZi.d.mts.map +0 -1
  1417. package/dist/validation-DRyC_Vm5.mjs +0 -219
  1418. package/dist/validation-DRyC_Vm5.mjs.map +0 -1
  1419. package/dist/version-C4kz0PcO.mjs +0 -7
  1420. package/dist/version-C4kz0PcO.mjs.map +0 -1
  1421. package/dist/version-jhs2BRtl.mjs +0 -9
  1422. package/dist/version-jhs2BRtl.mjs.map +0 -1
  1423. package/dist/video-DReZ48Un.mjs +0 -54
  1424. package/dist/video-DReZ48Un.mjs.map +0 -1
  1425. package/dist/virtual-modules-D0e6VbEv.mjs +0 -516
  1426. package/dist/virtual-modules-D0e6VbEv.mjs.map +0 -1
  1427. package/dist/widgets-BkcMzKct.mjs +0 -121
  1428. package/dist/widgets-BkcMzKct.mjs.map +0 -1
  1429. package/dist/wxr-taxonomies-BxI0CbTg.mjs +0 -453
  1430. package/dist/wxr-taxonomies-BxI0CbTg.mjs.map +0 -1
  1431. package/dist/wxr-taxonomies-Dad33GJi.d.mts +0 -34
  1432. package/dist/wxr-taxonomies-Dad33GJi.d.mts.map +0 -1
  1433. package/dist/zod-generator-BQilAboC.mjs +0 -424
  1434. package/dist/zod-generator-BQilAboC.mjs.map +0 -1
  1435. /package/dist/{api-tokens-D2zgAIEt.mjs → api-tokens-CdP49zVF.mjs} +0 -0
  1436. /package/dist/{ssrf-BvNItdxk.mjs → ssrf-DM0E-D_8.mjs} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifact-fetch-DsRczRGG.mjs","names":["TRAILING_DOT"],"sources":["../../registry-verification/dist/fetch-B66dZAfm.js","../../registry-verification/dist/artifact.js","../src/registry/artifact-fetch.ts"],"sourcesContent":["import { n as verificationError } from \"./errors-D3_zxvwe.js\";\n\n//#region src/fetch.ts\nconst DIGITS = /^\\d+$/;\nconst IPV4_LITERAL = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/;\nconst IPV4_PART = /^\\d{1,3}$/;\nconst IPV6_PART = /^[0-9a-f]{1,4}$/i;\nconst TRAILING_DOT = /\\.+$/;\nconst DEFAULT_FETCH_LIMITS = {\n\theaderTimeoutMs: 1e4,\n\ttotalTimeoutMs: 3e4,\n\tmaxBytes: 25 * 1024 * 1024,\n\tmaxRedirects: 3\n};\nasync function fetchVerifiedResource(value, options) {\n\tconst limits = {\n\t\theaderTimeoutMs: options.headerTimeoutMs ?? DEFAULT_FETCH_LIMITS.headerTimeoutMs,\n\t\ttotalTimeoutMs: options.totalTimeoutMs ?? DEFAULT_FETCH_LIMITS.totalTimeoutMs,\n\t\tmaxBytes: options.maxBytes ?? DEFAULT_FETCH_LIMITS.maxBytes,\n\t\tmaxRedirects: options.maxRedirects ?? DEFAULT_FETCH_LIMITS.maxRedirects\n\t};\n\tif (!areValidLimits(limits)) return verificationError(\"INVALID_URL\", \"Fetch limits must be positive integers.\");\n\tconst startedAt = Date.now();\n\tlet currentUrl = parseAndValidateUrl(value, void 0, options.allowHttpLocalhost === true);\n\tif (!currentUrl.success) return currentUrl;\n\tfor (let redirects = 0;; redirects += 1) {\n\t\tconst remaining = limits.totalTimeoutMs - (Date.now() - startedAt);\n\t\tif (remaining <= 0) return verificationError(\"RESOURCE_TIMEOUT\", \"The resource fetch exceeded its total timeout.\");\n\t\tconst host = isAllowedLoopback(currentUrl.value, options.allowHttpLocalhost === true) ? {\n\t\t\tsuccess: true,\n\t\t\tvalue: true\n\t\t} : await validateHost(currentUrl.value, options.resolveHostname, remaining);\n\t\tif (!host.success) return host;\n\t\tconst remainingAfterResolution = limits.totalTimeoutMs - (Date.now() - startedAt);\n\t\tif (remainingAfterResolution <= 0) return verificationError(\"RESOURCE_TIMEOUT\", \"The resource fetch exceeded its total timeout.\");\n\t\tconst response = await fetchResponse(options.fetch, currentUrl.value, Math.min(remainingAfterResolution, limits.headerTimeoutMs));\n\t\tif (!response.success) return response;\n\t\tif (isRedirect(response.value.status)) {\n\t\t\tif (redirects >= limits.maxRedirects) return verificationError(\"REDIRECT_LIMIT_EXCEEDED\", \"The resource exceeded the redirect limit.\");\n\t\t\tconst location = response.value.headers.get(\"location\");\n\t\t\tif (location === null) return verificationError(\"REDIRECT_LOCATION_MISSING\", \"The redirect response has no location header.\");\n\t\t\tcurrentUrl = parseAndValidateUrl(location, currentUrl.value, options.allowHttpLocalhost === true);\n\t\t\tif (!currentUrl.success) return currentUrl;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!response.value.ok && !options.allowedStatuses?.includes(response.value.status)) return verificationError(\"RESOURCE_STATUS_ERROR\", `The resource returned HTTP ${response.value.status}.`);\n\t\tconst contentLength = response.value.headers.get(\"content-length\");\n\t\tif (contentLength !== null && (!DIGITS.test(contentLength) || Number(contentLength) > limits.maxBytes)) return verificationError(\"RESOURCE_SIZE_EXCEEDED\", \"The resource exceeds the byte limit.\");\n\t\tconst bytes = await readResponse(response.value, limits.maxBytes, startedAt, limits.totalTimeoutMs);\n\t\tif (!bytes.success) return bytes;\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: {\n\t\t\t\tbytes: bytes.value,\n\t\t\t\turl: currentUrl.value,\n\t\t\t\tstatus: response.value.status,\n\t\t\t\theaders: response.value.headers\n\t\t\t}\n\t\t};\n\t}\n}\nfunction parseAndValidateUrl(value, base, allowHttpLocalhost = false) {\n\tlet url;\n\ttry {\n\t\turl = new URL(value, base);\n\t} catch {\n\t\treturn verificationError(\"INVALID_URL\", \"The resource URL is invalid.\");\n\t}\n\tif (url.protocol !== \"https:\" && !isAllowedLoopback(url, allowHttpLocalhost) || url.username !== \"\" || url.password !== \"\") return verificationError(\"INVALID_URL\", \"Resource URLs must use HTTPS and cannot include credentials.\");\n\tif (!isAllowedLoopback(url, allowHttpLocalhost) && (isIpLiteral(url.hostname) || isLocalHostname(url.hostname))) return verificationError(\"HOST_REJECTED\", \"The resource host is not permitted.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: url\n\t};\n}\nfunction isAllowedLoopback(url, enabled) {\n\tif (!enabled || url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\n\tconst hostname = url.hostname.toLowerCase().replace(TRAILING_DOT, \"\");\n\treturn hostname === \"localhost\" || hostname.endsWith(\".localhost\") || hostname === \"127.0.0.1\" || hostname === \"[::1]\" || hostname === \"::1\";\n}\nasync function validateHost(url, resolver, timeoutMs) {\n\ttry {\n\t\tconst addresses = await withTimeout(Promise.resolve().then(() => resolver(url.hostname)), timeoutMs);\n\t\tif (addresses.length === 0 || addresses.some(isForbiddenAddress)) return verificationError(\"HOST_REJECTED\", \"The resource host resolved to a forbidden address.\");\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: true\n\t\t};\n\t} catch (error) {\n\t\tif (isAbortError(error)) return verificationError(\"RESOURCE_TIMEOUT\", \"The resource fetch exceeded its total timeout.\");\n\t\treturn verificationError(\"HOST_REJECTED\", \"The resource host could not be validated.\");\n\t}\n}\nasync function fetchResponse(fetchImplementation, url, timeoutMs) {\n\tconst controller = new AbortController();\n\ttry {\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: await withTimeout(Promise.resolve().then(() => fetchImplementation(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tredirect: \"manual\",\n\t\t\t\tsignal: controller.signal\n\t\t\t})), timeoutMs, () => controller.abort())\n\t\t};\n\t} catch (error) {\n\t\tif (controller.signal.aborted || isAbortError(error)) return verificationError(\"RESOURCE_TIMEOUT\", \"The resource response headers timed out.\");\n\t\treturn verificationError(\"FETCH_FAILED\", \"The resource request failed.\");\n\t}\n}\nasync function readResponse(response, maximumBytes, startedAt, totalTimeoutMs) {\n\tif (response.body === null) return {\n\t\tsuccess: true,\n\t\tvalue: new Uint8Array()\n\t};\n\tconst reader = response.body.getReader();\n\tconst chunks = [];\n\tlet length = 0;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst remaining = totalTimeoutMs - (Date.now() - startedAt);\n\t\t\tif (remaining <= 0) {\n\t\t\t\tawait reader.cancel();\n\t\t\t\treturn verificationError(\"RESOURCE_TIMEOUT\", \"The resource fetch exceeded its total timeout.\");\n\t\t\t}\n\t\t\tconst chunk = await readWithTimeout(reader, remaining);\n\t\t\tif (!chunk.success) {\n\t\t\t\tawait reader.cancel();\n\t\t\t\treturn chunk;\n\t\t\t}\n\t\t\tif (chunk.value.done) break;\n\t\t\tconst value = chunk.value.value;\n\t\t\tlength += value.length;\n\t\t\tif (length > maximumBytes) {\n\t\t\t\tawait reader.cancel();\n\t\t\t\treturn verificationError(\"RESOURCE_SIZE_EXCEEDED\", \"The resource exceeds the byte limit.\");\n\t\t\t}\n\t\t\tchunks.push(value);\n\t\t}\n\t} catch {\n\t\treturn verificationError(\"FETCH_FAILED\", \"The resource response could not be read.\");\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\tconst output = new Uint8Array(length);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\toutput.set(chunk, offset);\n\t\toffset += chunk.length;\n\t}\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: output\n\t};\n}\nasync function readWithTimeout(reader, timeoutMs) {\n\ttry {\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: await withTimeout(Promise.resolve().then(() => reader.read()), timeoutMs)\n\t\t};\n\t} catch (error) {\n\t\tif (isAbortError(error)) return verificationError(\"RESOURCE_TIMEOUT\", \"The resource fetch exceeded its total timeout.\");\n\t\treturn verificationError(\"FETCH_FAILED\", \"The resource response could not be read.\");\n\t}\n}\n/**\n* Every operation has both fulfillment and rejection handlers, so an operation\n* that loses the timeout race cannot later become an unhandled rejection.\n*/\nfunction withTimeout(operation, timeoutMs, onTimeout) {\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tconst timeout = setTimeout(() => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tonTimeout?.();\n\t\t\treject(new DOMException(\"Timed out\", \"AbortError\"));\n\t\t}, timeoutMs);\n\t\toperation.then((value) => {\n\t\t\tif (settled) return void 0;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(timeout);\n\t\t\tresolve(value);\n\t\t}, (error) => {\n\t\t\tif (settled) return void 0;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(timeout);\n\t\t\treject(error);\n\t\t});\n\t});\n}\nfunction areValidLimits(limits) {\n\treturn Object.values(limits).every((value) => Number.isSafeInteger(value) && value > 0);\n}\nfunction isRedirect(status) {\n\treturn status === 301 || status === 302 || status === 303 || status === 307 || status === 308;\n}\nfunction isAbortError(error) {\n\treturn error instanceof DOMException && error.name === \"AbortError\";\n}\nfunction isIpLiteral(hostname) {\n\treturn IPV4_LITERAL.test(hostname) || hostname.includes(\":\");\n}\nfunction isLocalHostname(hostname) {\n\tconst normalized = hostname.toLowerCase();\n\treturn normalized === \"localhost\" || normalized.endsWith(\".localhost\") || normalized.endsWith(\".local\") || normalized.endsWith(\".internal\");\n}\nfunction isForbiddenAddress(address) {\n\tconst ipv4 = parseIpv4(address);\n\tif (ipv4 !== null) {\n\t\tconst [a, b] = ipv4;\n\t\treturn a === 0 || a === 10 || a === 127 || a === 100 && b >= 64 && b <= 127 || a === 169 && b === 254 || a === 172 && b >= 16 && b <= 31 || a === 192 && (b === 0 || b === 168) || a === 198 && (b === 18 || b === 19) || a >= 224;\n\t}\n\tconst ipv6 = parseIpv6(address);\n\tif (ipv6 === null) return true;\n\tconst first = ipv6[0];\n\tconst isUnspecified = ipv6.every((part) => part === 0);\n\tconst isLoopback = ipv6.slice(0, 7).every((part) => part === 0) && ipv6[7] === 1;\n\tconst isPrivate = (first & 65024) === 64512;\n\tconst isLinkLocal = (first & 65472) === 65152;\n\tconst isMulticast = (first & 65280) === 65280;\n\tif (ipv6.slice(0, 5).every((part) => part === 0) && ipv6[5] === 65535) return isForbiddenAddress(`${ipv6[6] >>> 8}.${ipv6[6] & 255}.${ipv6[7] >>> 8}.${ipv6[7] & 255}`);\n\treturn isUnspecified || isLoopback || isPrivate || isLinkLocal || isMulticast;\n}\nfunction parseIpv4(value) {\n\tconst parts = value.split(\".\");\n\tif (parts.length !== 4) return null;\n\tconst numbers = parts.map((part) => IPV4_PART.test(part) ? Number(part) : NaN);\n\tif (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 255)) return null;\n\treturn [\n\t\tnumbers[0],\n\t\tnumbers[1],\n\t\tnumbers[2],\n\t\tnumbers[3]\n\t];\n}\nfunction parseIpv6(value) {\n\tif (value.includes(\":::\") || value.split(\"::\").length > 2) return null;\n\tconst [before = \"\", after = \"\"] = value.split(\"::\");\n\tconst head = before === \"\" ? [] : before.split(\":\");\n\tconst tail = after === \"\" ? [] : after.split(\":\");\n\tconst parts = [...head, ...tail];\n\tif (parts.some((part) => !IPV6_PART.test(part)) || parts.length > 8) return null;\n\tif (!value.includes(\"::\") && parts.length !== 8) return null;\n\tconst zeroes = value.includes(\"::\") ? 8 - parts.length : 0;\n\treturn [\n\t\t...head,\n\t\t...Array.from({ length: zeroes }).fill(\"0\"),\n\t\t...tail\n\t].map((part) => Number.parseInt(part, 16));\n}\n\n//#endregion\nexport { fetchVerifiedResource as n, DEFAULT_FETCH_LIMITS as t };\n//# sourceMappingURL=fetch-B66dZAfm.js.map","import { n as unsupportedAuthDetails, t as UNSUPPORTED_AUTH_MESSAGE } from \"./auth-B730dpJ4.js\";\nimport { n as verificationError } from \"./errors-D3_zxvwe.js\";\nimport { multihashFromBlobCid, verifyMultihash } from \"./checksum.js\";\nimport { n as fetchVerifiedResource, t as DEFAULT_FETCH_LIMITS } from \"./fetch-B66dZAfm.js\";\nimport { RECORD_SCOPED_BLOB_CACHE_TYPE } from \"@emdash-cms/registry-lexicons\";\n\n//#region src/artifact.ts\nconst DID_DOCUMENT_MAX_BYTES = 256 * 1024;\nconst PLC_DID_PATTERN = /^did:plc:[a-z2-7]{24}$/;\nconst CID_PATTERN = /^b[a-z2-7]+$/;\nconst UNSAFE_PATH_SEGMENT = /[/\\\\?#]/;\nasync function fetchReleaseArtifact(input, options) {\n\tconst deadline = Date.now() + (options.totalTimeoutMs ?? DEFAULT_FETCH_LIMITS.totalTimeoutMs);\n\tconst { artifact } = input;\n\tif (!artifact.blob && !artifact.url) return verificationError(\"RELEASE_ARTIFACT_SOURCE_MISSING\", \"The release artifact must provide a blob or URL.\");\n\tif (artifact.requiresAuth === true || input.auth !== void 0) return unsupportedAuth(input.auth);\n\tconst blobCid = modernBlobCid(artifact.blob);\n\tconst blobMetadata = blobCid && artifact.blob && \"ref\" in artifact.blob ? artifact.blob : void 0;\n\tif (artifact.blob && !blobCid) return verificationError(\"BLOB_REF_INVALID\", \"Legacy blob references are not supported.\");\n\tif (blobCid) {\n\t\tconst expected = multihashFromBlobCid(blobCid);\n\t\tif (!expected.success) return expected;\n\t\tif (expected.value !== artifact.checksum) return verificationError(\"CHECKSUM_MISMATCH\", \"The artifact checksum does not match its blob reference CID.\");\n\t}\n\tlet lastError;\n\tfor (const cache of input.artifactCaches ?? []) {\n\t\tconst serviceEndpoint = recordScopedCacheEndpoint(cache);\n\t\tif (!serviceEndpoint || !blobCid) continue;\n\t\tconst cacheUrl = recordScopedBlobCacheUrl(serviceEndpoint, input.record, blobCid);\n\t\tif (!cacheUrl.success) {\n\t\t\tlastError = cacheUrl.error;\n\t\t\tcontinue;\n\t\t}\n\t\tconst attemptOptions = withinDeadline(options, deadline);\n\t\tif (!attemptOptions) return timedOut();\n\t\tconst result = await fetchAndVerify(\"artifact-cache\", cacheUrl.value, artifact.checksum, withBlobSizeLimit(attemptOptions, blobMetadata), blobMetadata);\n\t\tif (result.success) return result;\n\t\tlastError = result.error;\n\t}\n\tif (blobCid) {\n\t\tconst resolutionOptions = withinDeadline(options, deadline);\n\t\tif (!resolutionOptions) return timedOut();\n\t\tconst pds = input.pdsEndpoint ? {\n\t\t\tsuccess: true,\n\t\t\tvalue: input.pdsEndpoint\n\t\t} : await resolvePublisherPdsEndpoint(input.record.did, resolutionOptions);\n\t\tif (pds.success) {\n\t\t\tconst url = blobUrl(pds.value, input.record.did, blobCid);\n\t\t\tif (url.success) {\n\t\t\t\tconst attemptOptions = withinDeadline(options, deadline);\n\t\t\t\tif (!attemptOptions) return timedOut();\n\t\t\t\tconst result = await fetchAndVerify(\"blob\", url.value, artifact.checksum, withBlobSizeLimit(attemptOptions, blobMetadata), blobMetadata);\n\t\t\t\tif (result.success) return result;\n\t\t\t\tlastError = result.error;\n\t\t\t} else lastError = url.error;\n\t\t} else lastError = pds.error;\n\t}\n\tif (artifact.url) {\n\t\tconst attemptOptions = withinDeadline(options, deadline);\n\t\tif (!attemptOptions) return timedOut();\n\t\tconst result = await fetchAndVerify(\"url\", artifact.url, artifact.checksum, withBlobSizeLimit(attemptOptions, blobMetadata), blobMetadata);\n\t\tif (result.success) return result;\n\t\tlastError = result.error;\n\t}\n\treturn lastError ? {\n\t\tsuccess: false,\n\t\terror: lastError\n\t} : verificationError(\"FETCH_FAILED\", \"The release artifact could not be fetched.\");\n}\nfunction recordScopedBlobCacheUrl(serviceEndpoint, record, blobCid) {\n\ttry {\n\t\tconst endpoint = new URL(serviceEndpoint);\n\t\tif (endpoint.protocol !== \"https:\" || endpoint.username || endpoint.password || endpoint.pathname !== \"/\" || endpoint.search || endpoint.hash) throw new Error();\n\t\tconst segments = [\n\t\t\t\"r\",\n\t\t\trecord.did,\n\t\t\trecord.collection,\n\t\t\trecord.rkey,\n\t\t\trecord.cid,\n\t\t\tblobCid\n\t\t];\n\t\tif (!CID_PATTERN.test(record.cid) || !CID_PATTERN.test(blobCid) || segments.some((segment) => !isSafePathSegment(segment))) throw new Error();\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: new URL(segments.join(\"/\"), endpoint)\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"INVALID_URL\", \"The record-scoped blob cache endpoint is invalid.\");\n\t}\n}\nfunction recordScopedImageCacheUrl(serviceEndpoint, preset, record, blobCid) {\n\tconst raw = recordScopedBlobCacheUrl(serviceEndpoint, record, blobCid);\n\tif (!raw.success) return raw;\n\tconst url = new URL(raw.value);\n\turl.pathname = `/img/${preset}${url.pathname}`;\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: url\n\t};\n}\nasync function resolvePublisherPdsEndpoint(publisherDid, options) {\n\tconst documentUrl = didDocumentUrl(publisherDid);\n\tif (!documentUrl) return verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID is not supported.\");\n\tconst fetched = await fetchVerifiedResource(documentUrl, {\n\t\t...options,\n\t\tmaxBytes: DID_DOCUMENT_MAX_BYTES\n\t});\n\tif (!fetched.success) return verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID document could not be fetched.\");\n\tlet document;\n\ttry {\n\t\tdocument = JSON.parse(new TextDecoder().decode(fetched.value.bytes));\n\t} catch {\n\t\treturn verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID document is malformed.\");\n\t}\n\tif (!isRecord(document) || document.id !== publisherDid || !Array.isArray(document.service)) return verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID document has no valid PDS service.\");\n\tconst service = document.service.find((value) => isRecord(value) && (value.id === `${publisherDid}#atproto_pds` || value.id === \"#atproto_pds\") && value.type === \"AtprotoPersonalDataServer\" && typeof value.serviceEndpoint === \"string\");\n\tif (!isRecord(service) || typeof service.serviceEndpoint !== \"string\") return verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID document has no valid PDS service.\");\n\ttry {\n\t\tconst endpoint = new URL(service.serviceEndpoint);\n\t\tif (!(options.allowHttpLocalhost === true && endpoint.protocol === \"http:\" && (endpoint.hostname === \"localhost\" || endpoint.hostname === \"127.0.0.1\")) && endpoint.protocol !== \"https:\" || endpoint.username || endpoint.password) throw new Error();\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: endpoint.href\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher DID document has no valid PDS service.\");\n\t}\n}\nasync function fetchAndVerify(source, url, checksum, options, blobMetadata) {\n\tconst fetched = await fetchVerifiedResource(url, options);\n\tif (!fetched.success) return blobMetadata && fetched.error.code === \"RESOURCE_SIZE_EXCEEDED\" ? verificationError(\"BLOB_METADATA_MISMATCH\", \"The fetched artifact size does not match its signed blob metadata.\") : fetched;\n\tconst verified = await verifyMultihash(fetched.value.bytes, checksum);\n\tif (!verified.success) return verified;\n\tconst contentType = fetched.value.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n\tif (blobMetadata && (fetched.value.bytes.byteLength !== blobMetadata.size || contentType !== void 0 && contentType !== blobMetadata.mimeType)) return verificationError(\"BLOB_METADATA_MISMATCH\", \"The fetched artifact does not match its signed blob metadata.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: {\n\t\t\tbytes: fetched.value.bytes,\n\t\t\tsource,\n\t\t\turl: fetched.value.url\n\t\t}\n\t};\n}\nfunction withBlobSizeLimit(options, blobMetadata) {\n\tif (!blobMetadata) return options;\n\treturn {\n\t\t...options,\n\t\tmaxBytes: Math.min(options.maxBytes ?? DEFAULT_FETCH_LIMITS.maxBytes, blobMetadata.size)\n\t};\n}\nfunction blobUrl(pdsEndpoint, publisherDid, cid) {\n\ttry {\n\t\tconst url = new URL(\"/xrpc/com.atproto.sync.getBlob\", pdsEndpoint);\n\t\turl.searchParams.set(\"did\", publisherDid);\n\t\turl.searchParams.set(\"cid\", cid);\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: url\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"PDS_RESOLUTION_FAILED\", \"The publisher PDS endpoint is invalid.\");\n\t}\n}\nfunction didDocumentUrl(did) {\n\tif (PLC_DID_PATTERN.test(did)) return `https://plc.directory/${encodeURIComponent(did)}`;\n\tif (!did.startsWith(\"did:web:\")) return null;\n\ttry {\n\t\tconst parts = did.slice(8).split(\":\").map(decodeURIComponent);\n\t\tconst host = parts.shift();\n\t\tif (!host || parts.some((part) => part === \"\" || part === \".\" || part === \"..\")) return null;\n\t\tconst path = parts.length === 0 ? \"/.well-known/did.json\" : `/${parts.join(\"/\")}/did.json`;\n\t\treturn new URL(path, `https://${host}`).href;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction unsupportedAuth(auth) {\n\treturn verificationError(\"AUTH_METHOD_UNSUPPORTED\", UNSUPPORTED_AUTH_MESSAGE, unsupportedAuthDetails(auth));\n}\nfunction withinDeadline(options, deadline) {\n\tconst remaining = deadline - Date.now();\n\tif (remaining <= 0) return null;\n\treturn {\n\t\t...options,\n\t\ttotalTimeoutMs: remaining\n\t};\n}\nfunction timedOut() {\n\treturn verificationError(\"RESOURCE_TIMEOUT\", \"Artifact retrieval exceeded its total timeout.\");\n}\nfunction isRecord(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction modernBlobCid(blob) {\n\tif (!blob || !(\"ref\" in blob) || typeof blob.ref?.$link !== \"string\") return null;\n\treturn blob.ref.$link;\n}\nfunction recordScopedCacheEndpoint(value) {\n\tif (!isRecord(value) || value.$type !== RECORD_SCOPED_BLOB_CACHE_TYPE) return null;\n\treturn typeof value.serviceEndpoint === \"string\" ? value.serviceEndpoint : null;\n}\nfunction isSafePathSegment(value) {\n\tif (value.length === 0 || UNSAFE_PATH_SEGMENT.test(value)) return false;\n\tfor (const character of value) {\n\t\tconst codePoint = character.codePointAt(0);\n\t\tif (codePoint !== void 0 && (codePoint <= 31 || codePoint === 127)) return false;\n\t}\n\treturn true;\n}\n\n//#endregion\nexport { fetchReleaseArtifact, recordScopedBlobCacheUrl, recordScopedImageCacheUrl, resolvePublisherPdsEndpoint };\n//# sourceMappingURL=artifact.js.map","import type { ClientRequest, IncomingMessage } from \"node:http\";\nimport type { RequestOptions } from \"node:https\";\n\nimport { resolveAndValidateExternalUrlTarget, SsrfError } from \"../security/ssrf.js\";\n\nconst TRAILING_DOT = /\\.+$/;\nconst LOCALHOST_HOSTNAMES = new Set([\n\t\"localhost\",\n\t\"localhost.localdomain\",\n\t\"ip6-localhost\",\n\t\"ip6-loopback\",\n]);\n\nexport interface RegistryArtifactTransportInput {\n\turl: URL;\n\tallowedAddresses: readonly string[];\n\tsignal: AbortSignal;\n\tmaxResponseBytes: number;\n}\n\nexport interface RegistryArtifactTransport {\n\tfetch(input: RegistryArtifactTransportInput): Promise<{\n\t\tresponse: Response;\n\t\t/** Workers Fetch does not expose its connected peer; DNS validation still runs before dispatch. */\n\t\tconnectedAddress: string | null;\n\t}>;\n}\n\nexport interface RegistryArtifactFetchOptions {\n\tsignal: AbortSignal;\n\tmaxResponseBytes: number;\n}\n\nlet defaultTransport: RegistryArtifactTransport | null = null;\n\nexport function setDefaultRegistryArtifactTransport(\n\ttransport: RegistryArtifactTransport | null,\n): RegistryArtifactTransport | null {\n\tconst previous = defaultTransport;\n\tdefaultTransport = transport;\n\treturn previous;\n}\n\nfunction isLocalhostHostname(hostname: string): boolean {\n\tconst normalized = hostname.toLowerCase().replace(TRAILING_DOT, \"\");\n\treturn (\n\t\tLOCALHOST_HOSTNAMES.has(normalized) ||\n\t\tnormalized.endsWith(\".localhost\") ||\n\t\tnormalized === \"127.0.0.1\" ||\n\t\tnormalized === \"::1\" ||\n\t\tnormalized === \"[::1]\" ||\n\t\tnormalized.startsWith(\"::ffff:127.\") ||\n\t\tnormalized.startsWith(\"::ffff:7f00:\")\n\t);\n}\n\nasync function resolveSafeArtifactTarget(urlString: string): Promise<{\n\turl: URL;\n\taddresses: readonly string[];\n}> {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(urlString);\n\t} catch {\n\t\tthrow new Error(`Invalid artifact URL: ${urlString}`);\n\t}\n\tif (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n\t\tthrow new Error(`Artifact URL protocol not allowed: ${url.protocol}`);\n\t}\n\tif (url.username || url.password) {\n\t\tthrow new Error(\"Artifact URL must not contain embedded credentials\");\n\t}\n\n\tconst rawHostname = url.hostname.toLowerCase().replace(TRAILING_DOT, \"\");\n\tconst hostname = stripIpv6Brackets(rawHostname);\n\tconst localhost = isLocalhostHostname(hostname);\n\n\tif (!import.meta.env.DEV) {\n\t\tif (url.protocol === \"http:\") {\n\t\t\tthrow new Error(\"Artifact URL must use https\");\n\t\t}\n\t\tif (localhost) {\n\t\t\tthrow new Error(`Artifact URL points to localhost: ${hostname}`);\n\t\t}\n\t} else if (url.protocol === \"http:\" && !localhost) {\n\t\tthrow new Error(\"Artifact URL must use https (http allowed only for localhost in dev)\");\n\t}\n\n\tif (localhost) {\n\t\treturn { url, addresses: [] };\n\t}\n\n\ttry {\n\t\treturn await resolveAndValidateExternalUrlTarget(url.href);\n\t} catch (error) {\n\t\tif (error instanceof SsrfError) {\n\t\t\tthrow new Error(`Artifact URL rejected: ${error.message}`, { cause: error });\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function assertSafeArtifactUrl(urlString: string): Promise<URL> {\n\treturn (await resolveSafeArtifactTarget(urlString)).url;\n}\n\nexport async function fetchRegistryArtifactUrl(\n\turlString: string,\n\toptions: RegistryArtifactFetchOptions,\n): Promise<Response> {\n\tif (!Number.isSafeInteger(options.maxResponseBytes) || options.maxResponseBytes < 0) {\n\t\tthrow new TypeError(\"Registry artifact response limit is invalid\");\n\t}\n\tconst target = await resolveSafeArtifactTarget(urlString);\n\tif (target.addresses.length === 0) {\n\t\treturn globalThis.fetch(target.url, { redirect: \"manual\", signal: options.signal });\n\t}\n\n\tconst transport = defaultTransport ?? (await createRuntimeRegistryArtifactTransport());\n\tconst result = await transport.fetch({\n\t\turl: target.url,\n\t\tallowedAddresses: target.addresses,\n\t\tsignal: options.signal,\n\t\tmaxResponseBytes: options.maxResponseBytes,\n\t});\n\tif (result.connectedAddress !== null && !target.addresses.includes(result.connectedAddress)) {\n\t\tawait result.response.body?.cancel().catch(() => undefined);\n\t\tthrow new Error(\"Registry artifact transport connected outside the validated address set\");\n\t}\n\treturn result.response;\n}\n\nasync function createRuntimeRegistryArtifactTransport(): Promise<RegistryArtifactTransport> {\n\treturn isCloudflareWorkersRuntime()\n\t\t? createWorkersRegistryArtifactTransport()\n\t\t: createNodeRegistryArtifactTransport();\n}\n\nexport function createWorkersRegistryArtifactTransport(\n\tworkerFetch: typeof globalThis.fetch = globalThis.fetch,\n): RegistryArtifactTransport {\n\treturn {\n\t\tasync fetch(input) {\n\t\t\tconst response = await workerFetch(input.url, {\n\t\t\t\tredirect: \"manual\",\n\t\t\t\tsignal: input.signal,\n\t\t\t\theaders: { \"Accept-Encoding\": \"identity\" },\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tresponse: limitResponseBody(response, input.maxResponseBytes),\n\t\t\t\tconnectedAddress: null,\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction isCloudflareWorkersRuntime(): boolean {\n\treturn (\n\t\ttypeof navigator !== \"undefined\" &&\n\t\ttypeof navigator.userAgent === \"string\" &&\n\t\tnavigator.userAgent.includes(\"Cloudflare-Workers\")\n\t);\n}\n\nfunction limitResponseBody(response: Response, maxBytes: number): Response {\n\tif (!response.body) return response;\n\tlet received = 0;\n\tconst body = response.body.pipeThrough(\n\t\tnew TransformStream<Uint8Array, Uint8Array>({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\treceived += chunk.byteLength;\n\t\t\t\tif (received > maxBytes) {\n\t\t\t\t\tcontroller.error(new RangeError(\"Registry artifact response exceeds its byte limit\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t}),\n\t);\n\treturn new Response(body, {\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\theaders: response.headers,\n\t});\n}\n\nexport type RegistryArtifactNodeRequest = (\n\toptions: RequestOptions,\n\tcallback: (response: IncomingMessage) => void,\n) => ClientRequest;\n\nexport async function createNodeRegistryArtifactTransport(\n\tnodeRequest?: RegistryArtifactNodeRequest,\n): Promise<RegistryArtifactTransport> {\n\tconst request = nodeRequest ?? (await import(\"node:https\")).request;\n\treturn {\n\t\tasync fetch(input) {\n\t\t\tlet lastError: unknown;\n\t\t\tfor (const address of input.allowedAddresses) {\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await new Promise<Response>((resolve, reject) => {\n\t\t\t\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\t\t\t\tlet total = 0;\n\t\t\t\t\t\tconst req = request(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tprotocol: \"https:\",\n\t\t\t\t\t\t\t\thostname: stripIpv6Brackets(input.url.hostname),\n\t\t\t\t\t\t\t\tport: parseHttpsPort(input.url),\n\t\t\t\t\t\t\t\tpath: `${input.url.pathname}${input.url.search}`,\n\t\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t\t\t// A pooled socket may have been opened for the same hostname\n\t\t\t\t\t\t\t\t// before this address set was resolved.\n\t\t\t\t\t\t\t\tagent: false,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\tHost: input.url.host,\n\t\t\t\t\t\t\t\t\tConnection: \"close\",\n\t\t\t\t\t\t\t\t\t\"Accept-Encoding\": \"identity\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tlookup: (_hostname, options, callback) => {\n\t\t\t\t\t\t\t\t\tconst family = address.includes(\":\") ? 6 : 4;\n\t\t\t\t\t\t\t\t\t// Node's default autoSelectFamily asks with `all: true` and expects a list.\n\t\t\t\t\t\t\t\t\tif (options.all) callback(null, [{ address, family }]);\n\t\t\t\t\t\t\t\t\telse callback(null, address, family);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal: input.signal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(upstream) => {\n\t\t\t\t\t\t\t\tconst contentEncoding = upstream.headers[\"content-encoding\"];\n\t\t\t\t\t\t\t\tif (contentEncoding && contentEncoding.toLowerCase() !== \"identity\") {\n\t\t\t\t\t\t\t\t\tupstream.destroy(\n\t\t\t\t\t\t\t\t\t\tnew Error(\"Registry artifact response content encoding is unsupported\"),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tupstream.on(\"data\", (chunk: Uint8Array) => {\n\t\t\t\t\t\t\t\t\ttotal += chunk.byteLength;\n\t\t\t\t\t\t\t\t\tif (total > input.maxResponseBytes) {\n\t\t\t\t\t\t\t\t\t\tupstream.destroy(\n\t\t\t\t\t\t\t\t\t\t\tnew RangeError(\"Registry artifact response exceeds its byte limit\"),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchunks.push(new Uint8Array(chunk));\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tupstream.once(\"error\", reject);\n\t\t\t\t\t\t\t\tupstream.once(\"end\", () => {\n\t\t\t\t\t\t\t\t\tconst bytes = concatBytes(chunks, total);\n\t\t\t\t\t\t\t\t\tconst headers = new Headers();\n\t\t\t\t\t\t\t\t\tfor (let index = 0; index < upstream.rawHeaders.length; index += 2) {\n\t\t\t\t\t\t\t\t\t\theaders.append(upstream.rawHeaders[index], upstream.rawHeaders[index + 1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t\tparsedResponseToWebResponse({\n\t\t\t\t\t\t\t\t\t\t\tstatus: upstream.statusCode ?? 502,\n\t\t\t\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t\t\t\t\tbody: bytes,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\treq.once(\"error\", reject);\n\t\t\t\t\t\treq.end();\n\t\t\t\t\t});\n\t\t\t\t\treturn { response, connectedAddress: address };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (input.signal.aborted) throw error;\n\t\t\t\t\tlastError = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error(\"Registry artifact transport could not connect to an approved address\", {\n\t\t\t\tcause: lastError,\n\t\t\t});\n\t\t},\n\t};\n}\n\ninterface ParsedHttpResponse {\n\tstatus: number;\n\theaders: Headers;\n\tbody: Uint8Array;\n}\n\nfunction parsedResponseToWebResponse(parsed: ParsedHttpResponse): Response {\n\tconst bodyAllowed = ![204, 205, 304].includes(parsed.status);\n\tlet body: ArrayBuffer | null = null;\n\tif (bodyAllowed) {\n\t\tbody = new ArrayBuffer(parsed.body.byteLength);\n\t\tnew Uint8Array(body).set(parsed.body);\n\t}\n\treturn new Response(body, {\n\t\tstatus: parsed.status,\n\t\theaders: parsed.headers,\n\t});\n}\n\nfunction concatBytes(chunks: readonly Uint8Array[], total: number): Uint8Array {\n\tconst bytes = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tbytes.set(chunk, offset);\n\t\toffset += chunk.byteLength;\n\t}\n\treturn bytes;\n}\n\nfunction parseHttpsPort(url: URL): number {\n\tconst port = url.port === \"\" ? 443 : Number(url.port);\n\tif (!Number.isSafeInteger(port) || port < 1 || port > 65_535) {\n\t\tthrow new TypeError(\"Registry artifact HTTPS port is invalid\");\n\t}\n\treturn port;\n}\n\nfunction stripIpv6Brackets(hostname: string): string {\n\treturn hostname.startsWith(\"[\") && hostname.endsWith(\"]\") ? hostname.slice(1, -1) : hostname;\n}\n"],"mappings":"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"}
@@ -1,307 +0,0 @@
1
- import { d as __exportAll } from "./runner-wqt4BrIW.mjs";
2
- import { n as isMissingTableError } from "./db-errors-CBD5yMro.mjs";
3
- import { t as after } from "./after-PcEvMY_6.mjs";
4
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-Dr5Vr0zA.mjs";
5
- import { t as withTransaction } from "./transaction-BVYIo_yu.mjs";
6
- import { t as RedirectRepository } from "./redirect-B39kTQ_0.mjs";
7
- import { n as invalidateRedirectCache } from "./cache-x0z8t_m9.mjs";
8
-
9
- //#region src/redirects/artifacts.ts
10
- var artifacts_exports = /* @__PURE__ */ __exportAll({
11
- createRedirectSource: () => createRedirectSource,
12
- publishRedirectArtifacts: () => publishRedirectArtifacts,
13
- publishRedirectChanges: () => publishRedirectChanges
14
- });
15
- const ARTIFACT_TARGET_BYTES = 64 * 1024;
16
- const GENERATION_PREFIX = "emdash-redirects-v1";
17
- const REPAIR_LEASE_MS = 6e4;
18
- /** Three bound parameters per link row keeps each insert within D1's limit. */
19
- const LINK_BATCH_SIZE = 30;
20
- const encoder = new TextEncoder();
21
- async function sha256Hex(value) {
22
- const digest = await crypto.subtle.digest("SHA-256", encoder.encode(value));
23
- return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
24
- }
25
- function fnv1a(value) {
26
- let hash = 2166136261;
27
- for (let i = 0; i < value.length; i++) {
28
- hash ^= value.charCodeAt(i);
29
- hash = Math.imul(hash, 16777619);
30
- }
31
- return hash >>> 0;
32
- }
33
- function toEntry(rule) {
34
- return [
35
- rule.id,
36
- rule.source,
37
- rule.destination,
38
- rule.type
39
- ];
40
- }
41
- function entryBytes(entry) {
42
- return encoder.encode(JSON.stringify(entry)).byteLength + 1;
43
- }
44
- async function createArtifact(kind, entries) {
45
- const payload = JSON.stringify(entries);
46
- return {
47
- digest: await sha256Hex(`${kind}\n${payload}`),
48
- kind,
49
- payload
50
- };
51
- }
52
- function generationId(digests) {
53
- return sha256Hex([GENERATION_PREFIX, ...digests].join("\n"));
54
- }
55
- /** Splits enabled rows, in precedence order, into exact and pattern rules. */
56
- function toRuleSet(rows, version) {
57
- const exact = [];
58
- const patterns = [];
59
- for (const { isPattern, ...rule } of rows) (isPattern ? patterns : exact).push(rule);
60
- return {
61
- version,
62
- exact,
63
- patterns
64
- };
65
- }
66
- /**
67
- * Builds the artifacts for a rule set. Exact rules keep the last rule per
68
- * source, matching lookup semantics, and are sorted so the shards are
69
- * deterministic. Pattern rules keep precedence order across chunks.
70
- */
71
- async function buildArtifacts(rules) {
72
- const bySource = /* @__PURE__ */ new Map();
73
- for (const rule of rules.exact) bySource.set(rule.source, toEntry(rule));
74
- const exact = [...bySource.values()].toSorted((a, b) => a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0);
75
- const exactBytes = exact.reduce((total, entry) => total + entryBytes(entry), 0);
76
- const shardCount = Math.max(1, Math.ceil(exactBytes / ARTIFACT_TARGET_BYTES));
77
- const shards = Array.from({ length: shardCount }, () => []);
78
- for (const entry of exact) shards[fnv1a(entry[1]) % shardCount].push(entry);
79
- const artifacts = [];
80
- for (const shard of shards) if (shard.length > 0) artifacts.push(await createArtifact("exact", shard));
81
- let chunk = [];
82
- let chunkBytes = 0;
83
- for (const rule of rules.patterns) {
84
- const entry = toEntry(rule);
85
- const bytes = entryBytes(entry);
86
- if (chunk.length > 0 && chunkBytes + bytes > ARTIFACT_TARGET_BYTES) {
87
- artifacts.push(await createArtifact("pattern", chunk));
88
- chunk = [];
89
- chunkBytes = 0;
90
- }
91
- chunk.push(entry);
92
- chunkBytes += bytes;
93
- }
94
- if (chunk.length > 0) artifacts.push(await createArtifact("pattern", chunk));
95
- return {
96
- generation: await generationId(artifacts.map((artifact) => artifact.digest)),
97
- artifacts
98
- };
99
- }
100
- /**
101
- * Publishes the enabled redirect rules as the active generation.
102
- *
103
- * The revision is read before the rules, so the published generation holds
104
- * at least the changes up to the revision it is labelled with. A publish at
105
- * the active revision replaces the active generation, which repairs a damaged
106
- * one; losing the compare-and-set to a newer revision leaves that publish
107
- * active.
108
- */
109
- async function publishRedirectArtifacts(db) {
110
- const state = await db.selectFrom("_emdash_redirect_state").select("revision").where("id", "=", 1).executeTakeFirst();
111
- if (!state) throw new Error("Redirect state row is missing");
112
- const revision = Number(state.revision);
113
- const { generation, artifacts } = await buildArtifacts(toRuleSet((await db.selectFrom("_emdash_redirects").select([
114
- "id",
115
- "source",
116
- "destination",
117
- "type",
118
- "is_pattern"
119
- ]).where("enabled", "=", 1).orderBy("created_at", (order) => order.asc().nullsFirst()).orderBy("id", "asc").execute()).map((row) => ({
120
- id: row.id,
121
- source: row.source,
122
- destination: row.destination,
123
- type: Number(row.type),
124
- isPattern: Number(row.is_pattern) === 1
125
- })), null));
126
- await withTransaction(db, async (trx) => {
127
- const digests = [...new Set(artifacts.map((artifact) => artifact.digest))];
128
- const stored = /* @__PURE__ */ new Map();
129
- for (const batch of chunks(digests, SQL_BATCH_SIZE)) {
130
- const found = await trx.selectFrom("_emdash_redirect_artifacts").select([
131
- "digest",
132
- "kind",
133
- "payload"
134
- ]).where("digest", "in", batch).execute();
135
- for (const row of found) stored.set(row.digest, `${row.kind}\n${row.payload}`);
136
- }
137
- for (const artifact of artifacts) {
138
- const content = `${artifact.kind}\n${artifact.payload}`;
139
- if (stored.get(artifact.digest) === content) continue;
140
- stored.set(artifact.digest, content);
141
- await trx.insertInto("_emdash_redirect_artifacts").values(artifact).onConflict((conflict) => conflict.column("digest").doUpdateSet({
142
- kind: artifact.kind,
143
- payload: artifact.payload
144
- })).execute();
145
- }
146
- const links = artifacts.map((artifact, position) => ({
147
- generation,
148
- position,
149
- digest: artifact.digest
150
- }));
151
- for (const batch of chunks(links, LINK_BATCH_SIZE)) await trx.insertInto("_emdash_redirect_generation_artifacts").values(batch).onConflict((conflict) => conflict.columns(["generation", "position"]).doUpdateSet((eb) => ({ digest: eb.ref("excluded.digest") }))).execute();
152
- await trx.deleteFrom("_emdash_redirect_generation_artifacts").where("generation", "=", generation).where("position", ">=", links.length).execute();
153
- const activated = await trx.updateTable("_emdash_redirect_state").set({
154
- generation,
155
- generation_revision: revision
156
- }).where("id", "=", 1).where("generation_revision", "<=", revision).executeTakeFirst();
157
- if (BigInt(activated.numUpdatedRows) === 0n) return;
158
- await trx.deleteFrom("_emdash_redirect_generation_artifacts").where((eb) => eb("generation", "<>", eb.selectFrom("_emdash_redirect_state").select("generation").where("id", "=", 1))).execute();
159
- await trx.deleteFrom("_emdash_redirect_artifacts").where(({ exists, not, selectFrom }) => not(exists(selectFrom("_emdash_redirect_generation_artifacts").select("_emdash_redirect_generation_artifacts.digest").whereRef("_emdash_redirect_generation_artifacts.digest", "=", "_emdash_redirect_artifacts.digest")))).execute();
160
- });
161
- }
162
- /**
163
- * Publishes after a redirect write, then invalidates this isolate's cache. A
164
- * failed publish is logged rather than failing the write: readers fall back
165
- * to the rules table and repair the stale generation.
166
- */
167
- async function publishRedirectChanges(db) {
168
- try {
169
- await publishRedirectArtifacts(db);
170
- } catch (error) {
171
- console.error("[emdash:redirects] publishing redirect artifacts failed:", error);
172
- }
173
- invalidateRedirectCache();
174
- }
175
- function isArtifactEntry(value) {
176
- return Array.isArray(value) && value.length === 4 && typeof value[0] === "string" && typeof value[1] === "string" && typeof value[2] === "string" && typeof value[3] === "number";
177
- }
178
- function parseEntries(payload) {
179
- try {
180
- const parsed = JSON.parse(payload);
181
- return Array.isArray(parsed) && parsed.every(isArtifactEntry) ? parsed : null;
182
- } catch {
183
- return null;
184
- }
185
- }
186
- /**
187
- * Loads and verifies the active generation. Returns null when nothing is
188
- * published, the generation is stale, or any artifact is missing, altered, or
189
- * out of place.
190
- */
191
- async function loadPublishedRedirects(db) {
192
- const rows = await db.selectFrom("_emdash_redirect_state as state").leftJoin("_emdash_redirect_generation_artifacts as link", "link.generation", "state.generation").leftJoin("_emdash_redirect_artifacts as artifact", "artifact.digest", "link.digest").select([
193
- "state.revision",
194
- "state.generation",
195
- "state.generation_revision",
196
- "link.position",
197
- "link.digest",
198
- "artifact.kind",
199
- "artifact.payload"
200
- ]).where("state.id", "=", 1).orderBy("link.position", "asc").execute();
201
- const state = rows[0];
202
- if (!state?.generation) return null;
203
- if (Number(state.revision) > Number(state.generation_revision)) return null;
204
- const exact = [];
205
- const patterns = [];
206
- const digests = [];
207
- const links = rows.filter((row) => row.position !== null);
208
- for (const [index, link] of links.entries()) {
209
- if (Number(link.position) !== index || !link.digest || link.payload === null || link.kind !== "exact" && link.kind !== "pattern") return null;
210
- if (await sha256Hex(`${link.kind}\n${link.payload}`) !== link.digest) return null;
211
- const entries = parseEntries(link.payload);
212
- if (!entries) return null;
213
- const target = link.kind === "exact" ? exact : patterns;
214
- for (const [id, source, destination, type] of entries) target.push({
215
- id,
216
- source,
217
- destination,
218
- type
219
- });
220
- digests.push(link.digest);
221
- }
222
- if (await generationId(digests) !== state.generation) return null;
223
- return {
224
- version: state.generation,
225
- exact,
226
- patterns
227
- };
228
- }
229
- async function loadRulesTable(db) {
230
- return toRuleSet((await new RedirectRepository(db).findAllEnabled()).map(({ id, source, destination, type, isPattern }) => ({
231
- id,
232
- source,
233
- destination,
234
- type,
235
- isPattern
236
- })), null);
237
- }
238
- const REPAIR_STATE_KEY = Symbol.for("emdash:redirect-artifact-repair");
239
- const g = globalThis;
240
- const repairState = g[REPAIR_STATE_KEY] ?? (() => {
241
- const state = { runningUntil: 0 };
242
- g[REPAIR_STATE_KEY] = state;
243
- return state;
244
- })();
245
- /**
246
- * Republishes the artifacts under a database lease so one isolate repairs a
247
- * stale or damaged generation while the others keep serving.
248
- */
249
- async function repairRedirectArtifacts(db) {
250
- const now = Date.now();
251
- const expiresAt = now + REPAIR_LEASE_MS;
252
- const lease = await db.updateTable("_emdash_redirect_state").set({ repair_expires_at: expiresAt }).where("id", "=", 1).where("repair_expires_at", "<", now).executeTakeFirst();
253
- if (BigInt(lease.numUpdatedRows) === 0n) return;
254
- try {
255
- await publishRedirectArtifacts(db);
256
- } finally {
257
- await db.updateTable("_emdash_redirect_state").set({ repair_expires_at: 0 }).where("id", "=", 1).where("repair_expires_at", "=", expiresAt).execute();
258
- }
259
- }
260
- function scheduleRedirectRepair(db) {
261
- const now = Date.now();
262
- if (repairState.runningUntil > now) return;
263
- const runningUntil = now + REPAIR_LEASE_MS;
264
- repairState.runningUntil = runningUntil;
265
- after(async () => {
266
- try {
267
- await repairRedirectArtifacts(db);
268
- } catch (error) {
269
- console.error("[emdash:redirects] repairing redirect artifacts failed:", error);
270
- } finally {
271
- if (repairState.runningUntil === runningUntil) repairState.runningUntil = 0;
272
- }
273
- });
274
- }
275
- /**
276
- * The rule source the middleware caches: the published generation when it is
277
- * current and verifies, otherwise the rules table. Before the artifact tables exist the
278
- * rules table is read directly.
279
- */
280
- function createRedirectSource(db) {
281
- return {
282
- async load() {
283
- let published;
284
- try {
285
- published = await loadPublishedRedirects(db);
286
- } catch (error) {
287
- if (isMissingTableError(error)) return loadRulesTable(db);
288
- throw error;
289
- }
290
- if (published) return published;
291
- scheduleRedirectRepair(db);
292
- return loadRulesTable(db);
293
- },
294
- async isCurrent(version) {
295
- const state = await db.selectFrom("_emdash_redirect_state").select([
296
- "revision",
297
- "generation",
298
- "generation_revision"
299
- ]).where("id", "=", 1).executeTakeFirst();
300
- return state?.generation === version && Number(state.revision) <= Number(state.generation_revision);
301
- }
302
- };
303
- }
304
-
305
- //#endregion
306
- export { createRedirectSource as n, publishRedirectChanges as r, artifacts_exports as t };
307
- //# sourceMappingURL=artifacts-D-O-qj9C.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifacts-D-O-qj9C.mjs","names":[],"sources":["../src/redirects/artifacts.ts"],"sourcesContent":["/**\n * Published redirect artifacts.\n *\n * Enabled redirect rules are published as compact, content-addressed JSON\n * artifacts grouped into a generation. The middleware loads the active\n * generation in one query and afterwards only polls the small state row, so a\n * site with many redirects never rescans `_emdash_redirects` on the read path.\n *\n * Exact rules are sharded by a hash of their source and pattern rules are\n * chunked in precedence order, so a single rule change usually rewrites one\n * artifact. Writers bump `_emdash_redirect_state.revision` through triggers.\n * A generation that is stale or fails verification is never served: readers\n * fall back to the rules table and schedule a repair.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport { after } from \"../after.js\";\nimport { RedirectRepository } from \"../database/repositories/redirect.js\";\nimport { withTransaction } from \"../database/transaction.js\";\nimport type { Database } from \"../database/types.js\";\nimport { chunks, SQL_BATCH_SIZE } from \"../utils/chunks.js\";\nimport { isMissingTableError } from \"../utils/db-errors.js\";\nimport {\n\tinvalidateRedirectCache,\n\ttype RedirectRule,\n\ttype RedirectRuleSet,\n\ttype RedirectSource,\n} from \"./cache.js\";\n\ntype ArtifactKind = \"exact\" | \"pattern\";\ntype ArtifactEntry = [id: string, source: string, destination: string, type: number];\n\ninterface RedirectArtifact {\n\tdigest: string;\n\tkind: ArtifactKind;\n\tpayload: string;\n}\n\ninterface RuleRow {\n\tid: string;\n\tsource: string;\n\tdestination: string;\n\ttype: number;\n\tis_pattern: number;\n}\n\nconst ARTIFACT_TARGET_BYTES = 64 * 1024;\nconst GENERATION_PREFIX = \"emdash-redirects-v1\";\nconst REPAIR_LEASE_MS = 60_000;\n/** Three bound parameters per link row keeps each insert within D1's limit. */\nconst LINK_BATCH_SIZE = 30;\n\nconst encoder = new TextEncoder();\n\nasync function sha256Hex(value: string): Promise<string> {\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", encoder.encode(value));\n\treturn Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction fnv1a(value: string): number {\n\tlet hash = 0x811c9dc5;\n\tfor (let i = 0; i < value.length; i++) {\n\t\thash ^= value.charCodeAt(i);\n\t\thash = Math.imul(hash, 0x01000193);\n\t}\n\treturn hash >>> 0;\n}\n\nfunction toEntry(rule: RedirectRule): ArtifactEntry {\n\treturn [rule.id, rule.source, rule.destination, rule.type];\n}\n\nfunction entryBytes(entry: ArtifactEntry): number {\n\treturn encoder.encode(JSON.stringify(entry)).byteLength + 1;\n}\n\nasync function createArtifact(kind: ArtifactKind, entries: ArtifactEntry[]) {\n\tconst payload = JSON.stringify(entries);\n\treturn { digest: await sha256Hex(`${kind}\\n${payload}`), kind, payload };\n}\n\nfunction generationId(digests: string[]): Promise<string> {\n\treturn sha256Hex([GENERATION_PREFIX, ...digests].join(\"\\n\"));\n}\n\n/** Splits enabled rows, in precedence order, into exact and pattern rules. */\nfunction toRuleSet(\n\trows: Array<RedirectRule & { isPattern: boolean }>,\n\tversion: string | null,\n): RedirectRuleSet {\n\tconst exact: RedirectRule[] = [];\n\tconst patterns: RedirectRule[] = [];\n\tfor (const { isPattern, ...rule } of rows) {\n\t\t(isPattern ? patterns : exact).push(rule);\n\t}\n\treturn { version, exact, patterns };\n}\n\n/**\n * Builds the artifacts for a rule set. Exact rules keep the last rule per\n * source, matching lookup semantics, and are sorted so the shards are\n * deterministic. Pattern rules keep precedence order across chunks.\n */\nasync function buildArtifacts(\n\trules: RedirectRuleSet,\n): Promise<{ generation: string; artifacts: RedirectArtifact[] }> {\n\tconst bySource = new Map<string, ArtifactEntry>();\n\tfor (const rule of rules.exact) bySource.set(rule.source, toEntry(rule));\n\tconst exact = [...bySource.values()].toSorted((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0));\n\tconst exactBytes = exact.reduce((total, entry) => total + entryBytes(entry), 0);\n\tconst shardCount = Math.max(1, Math.ceil(exactBytes / ARTIFACT_TARGET_BYTES));\n\tconst shards: ArtifactEntry[][] = Array.from({ length: shardCount }, () => []);\n\tfor (const entry of exact) shards[fnv1a(entry[1]) % shardCount].push(entry);\n\n\tconst artifacts: RedirectArtifact[] = [];\n\tfor (const shard of shards) {\n\t\tif (shard.length > 0) artifacts.push(await createArtifact(\"exact\", shard));\n\t}\n\n\tlet chunk: ArtifactEntry[] = [];\n\tlet chunkBytes = 0;\n\tfor (const rule of rules.patterns) {\n\t\tconst entry = toEntry(rule);\n\t\tconst bytes = entryBytes(entry);\n\t\tif (chunk.length > 0 && chunkBytes + bytes > ARTIFACT_TARGET_BYTES) {\n\t\t\tartifacts.push(await createArtifact(\"pattern\", chunk));\n\t\t\tchunk = [];\n\t\t\tchunkBytes = 0;\n\t\t}\n\t\tchunk.push(entry);\n\t\tchunkBytes += bytes;\n\t}\n\tif (chunk.length > 0) artifacts.push(await createArtifact(\"pattern\", chunk));\n\n\treturn {\n\t\tgeneration: await generationId(artifacts.map((artifact) => artifact.digest)),\n\t\tartifacts,\n\t};\n}\n\n/**\n * Publishes the enabled redirect rules as the active generation.\n *\n * The revision is read before the rules, so the published generation holds\n * at least the changes up to the revision it is labelled with. A publish at\n * the active revision replaces the active generation, which repairs a damaged\n * one; losing the compare-and-set to a newer revision leaves that publish\n * active.\n */\nexport async function publishRedirectArtifacts(db: Kysely<Database>): Promise<void> {\n\tconst state = await db\n\t\t.selectFrom(\"_emdash_redirect_state\")\n\t\t.select(\"revision\")\n\t\t.where(\"id\", \"=\", 1)\n\t\t.executeTakeFirst();\n\tif (!state) throw new Error(\"Redirect state row is missing\");\n\tconst revision = Number(state.revision);\n\n\tconst rows: RuleRow[] = await db\n\t\t.selectFrom(\"_emdash_redirects\")\n\t\t.select([\"id\", \"source\", \"destination\", \"type\", \"is_pattern\"])\n\t\t.where(\"enabled\", \"=\", 1)\n\t\t.orderBy(\"created_at\", (order) => order.asc().nullsFirst())\n\t\t.orderBy(\"id\", \"asc\")\n\t\t.execute();\n\tconst { generation, artifacts } = await buildArtifacts(\n\t\ttoRuleSet(\n\t\t\trows.map((row) => ({\n\t\t\t\tid: row.id,\n\t\t\t\tsource: row.source,\n\t\t\t\tdestination: row.destination,\n\t\t\t\ttype: Number(row.type),\n\t\t\t\tisPattern: Number(row.is_pattern) === 1,\n\t\t\t})),\n\t\t\tnull,\n\t\t),\n\t);\n\n\tawait withTransaction(db, async (trx) => {\n\t\tconst digests = [...new Set(artifacts.map((artifact) => artifact.digest))];\n\t\tconst stored = new Map<string, string>();\n\t\tfor (const batch of chunks(digests, SQL_BATCH_SIZE)) {\n\t\t\tconst found = await trx\n\t\t\t\t.selectFrom(\"_emdash_redirect_artifacts\")\n\t\t\t\t.select([\"digest\", \"kind\", \"payload\"])\n\t\t\t\t.where(\"digest\", \"in\", batch)\n\t\t\t\t.execute();\n\t\t\tfor (const row of found) stored.set(row.digest, `${row.kind}\\n${row.payload}`);\n\t\t}\n\t\tfor (const artifact of artifacts) {\n\t\t\tconst content = `${artifact.kind}\\n${artifact.payload}`;\n\t\t\tif (stored.get(artifact.digest) === content) continue;\n\t\t\tstored.set(artifact.digest, content);\n\t\t\t// A stored row that does not match its digest was damaged; rewrite it.\n\t\t\tawait trx\n\t\t\t\t.insertInto(\"_emdash_redirect_artifacts\")\n\t\t\t\t.values(artifact)\n\t\t\t\t.onConflict((conflict) =>\n\t\t\t\t\tconflict.column(\"digest\").doUpdateSet({ kind: artifact.kind, payload: artifact.payload }),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t}\n\n\t\tconst links = artifacts.map((artifact, position) => ({\n\t\t\tgeneration,\n\t\t\tposition,\n\t\t\tdigest: artifact.digest,\n\t\t}));\n\t\tfor (const batch of chunks(links, LINK_BATCH_SIZE)) {\n\t\t\tawait trx\n\t\t\t\t.insertInto(\"_emdash_redirect_generation_artifacts\")\n\t\t\t\t.values(batch)\n\t\t\t\t.onConflict((conflict) =>\n\t\t\t\t\tconflict\n\t\t\t\t\t\t.columns([\"generation\", \"position\"])\n\t\t\t\t\t\t.doUpdateSet((eb) => ({ digest: eb.ref(\"excluded.digest\") })),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t}\n\t\tawait trx\n\t\t\t.deleteFrom(\"_emdash_redirect_generation_artifacts\")\n\t\t\t.where(\"generation\", \"=\", generation)\n\t\t\t.where(\"position\", \">=\", links.length)\n\t\t\t.execute();\n\n\t\tconst activated = await trx\n\t\t\t.updateTable(\"_emdash_redirect_state\")\n\t\t\t.set({ generation, generation_revision: revision })\n\t\t\t.where(\"id\", \"=\", 1)\n\t\t\t.where(\"generation_revision\", \"<=\", revision)\n\t\t\t.executeTakeFirst();\n\t\tif (BigInt(activated.numUpdatedRows) === 0n) return;\n\n\t\t// Another publish may have activated since this one; keep the active generation.\n\t\tawait trx\n\t\t\t.deleteFrom(\"_emdash_redirect_generation_artifacts\")\n\t\t\t.where((eb) =>\n\t\t\t\teb(\n\t\t\t\t\t\"generation\",\n\t\t\t\t\t\"<>\",\n\t\t\t\t\teb.selectFrom(\"_emdash_redirect_state\").select(\"generation\").where(\"id\", \"=\", 1),\n\t\t\t\t),\n\t\t\t)\n\t\t\t.execute();\n\t\tawait trx\n\t\t\t.deleteFrom(\"_emdash_redirect_artifacts\")\n\t\t\t.where(({ exists, not, selectFrom }) =>\n\t\t\t\tnot(\n\t\t\t\t\texists(\n\t\t\t\t\t\tselectFrom(\"_emdash_redirect_generation_artifacts\")\n\t\t\t\t\t\t\t.select(\"_emdash_redirect_generation_artifacts.digest\")\n\t\t\t\t\t\t\t.whereRef(\n\t\t\t\t\t\t\t\t\"_emdash_redirect_generation_artifacts.digest\",\n\t\t\t\t\t\t\t\t\"=\",\n\t\t\t\t\t\t\t\t\"_emdash_redirect_artifacts.digest\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t\t\t.execute();\n\t});\n}\n\n/**\n * Publishes after a redirect write, then invalidates this isolate's cache. A\n * failed publish is logged rather than failing the write: readers fall back\n * to the rules table and repair the stale generation.\n */\nexport async function publishRedirectChanges(db: Kysely<Database>): Promise<void> {\n\ttry {\n\t\tawait publishRedirectArtifacts(db);\n\t} catch (error) {\n\t\tconsole.error(\"[emdash:redirects] publishing redirect artifacts failed:\", error);\n\t}\n\tinvalidateRedirectCache();\n}\n\nfunction isArtifactEntry(value: unknown): value is ArtifactEntry {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 4 &&\n\t\ttypeof value[0] === \"string\" &&\n\t\ttypeof value[1] === \"string\" &&\n\t\ttypeof value[2] === \"string\" &&\n\t\ttypeof value[3] === \"number\"\n\t);\n}\n\nfunction parseEntries(payload: string): ArtifactEntry[] | null {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(payload);\n\t\treturn Array.isArray(parsed) && parsed.every(isArtifactEntry) ? parsed : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Loads and verifies the active generation. Returns null when nothing is\n * published, the generation is stale, or any artifact is missing, altered, or\n * out of place.\n */\nasync function loadPublishedRedirects(db: Kysely<Database>): Promise<RedirectRuleSet | null> {\n\tconst rows = await db\n\t\t.selectFrom(\"_emdash_redirect_state as state\")\n\t\t.leftJoin(\n\t\t\t\"_emdash_redirect_generation_artifacts as link\",\n\t\t\t\"link.generation\",\n\t\t\t\"state.generation\",\n\t\t)\n\t\t.leftJoin(\"_emdash_redirect_artifacts as artifact\", \"artifact.digest\", \"link.digest\")\n\t\t.select([\n\t\t\t\"state.revision\",\n\t\t\t\"state.generation\",\n\t\t\t\"state.generation_revision\",\n\t\t\t\"link.position\",\n\t\t\t\"link.digest\",\n\t\t\t\"artifact.kind\",\n\t\t\t\"artifact.payload\",\n\t\t])\n\t\t.where(\"state.id\", \"=\", 1)\n\t\t.orderBy(\"link.position\", \"asc\")\n\t\t.execute();\n\n\tconst state = rows[0];\n\tif (!state?.generation) return null;\n\tif (Number(state.revision) > Number(state.generation_revision)) return null;\n\n\tconst exact: RedirectRule[] = [];\n\tconst patterns: RedirectRule[] = [];\n\tconst digests: string[] = [];\n\tconst links = rows.filter((row) => row.position !== null);\n\tfor (const [index, link] of links.entries()) {\n\t\tif (\n\t\t\tNumber(link.position) !== index ||\n\t\t\t!link.digest ||\n\t\t\tlink.payload === null ||\n\t\t\t(link.kind !== \"exact\" && link.kind !== \"pattern\")\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tif ((await sha256Hex(`${link.kind}\\n${link.payload}`)) !== link.digest) {\n\t\t\treturn null;\n\t\t}\n\t\tconst entries = parseEntries(link.payload);\n\t\tif (!entries) return null;\n\t\tconst target = link.kind === \"exact\" ? exact : patterns;\n\t\tfor (const [id, source, destination, type] of entries) {\n\t\t\ttarget.push({ id, source, destination, type });\n\t\t}\n\t\tdigests.push(link.digest);\n\t}\n\tif ((await generationId(digests)) !== state.generation) return null;\n\n\treturn { version: state.generation, exact, patterns };\n}\n\nasync function loadRulesTable(db: Kysely<Database>): Promise<RedirectRuleSet> {\n\tconst redirects = await new RedirectRepository(db).findAllEnabled();\n\treturn toRuleSet(\n\t\tredirects.map(({ id, source, destination, type, isPattern }) => ({\n\t\t\tid,\n\t\t\tsource,\n\t\t\tdestination,\n\t\t\ttype,\n\t\t\tisPattern,\n\t\t})),\n\t\tnull,\n\t);\n}\n\ninterface RepairState {\n\trunningUntil: number;\n}\n\nconst REPAIR_STATE_KEY = Symbol.for(\"emdash:redirect-artifact-repair\");\nconst g = globalThis as Record<symbol, unknown>;\nconst repairState: RepairState =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[REPAIR_STATE_KEY] as RepairState | undefined) ??\n\t(() => {\n\t\tconst state: RepairState = { runningUntil: 0 };\n\t\tg[REPAIR_STATE_KEY] = state;\n\t\treturn state;\n\t})();\n\n/**\n * Republishes the artifacts under a database lease so one isolate repairs a\n * stale or damaged generation while the others keep serving.\n */\nasync function repairRedirectArtifacts(db: Kysely<Database>): Promise<void> {\n\tconst now = Date.now();\n\tconst expiresAt = now + REPAIR_LEASE_MS;\n\tconst lease = await db\n\t\t.updateTable(\"_emdash_redirect_state\")\n\t\t.set({ repair_expires_at: expiresAt })\n\t\t.where(\"id\", \"=\", 1)\n\t\t.where(\"repair_expires_at\", \"<\", now)\n\t\t.executeTakeFirst();\n\tif (BigInt(lease.numUpdatedRows) === 0n) return;\n\ttry {\n\t\tawait publishRedirectArtifacts(db);\n\t} finally {\n\t\tawait db\n\t\t\t.updateTable(\"_emdash_redirect_state\")\n\t\t\t.set({ repair_expires_at: 0 })\n\t\t\t.where(\"id\", \"=\", 1)\n\t\t\t.where(\"repair_expires_at\", \"=\", expiresAt)\n\t\t\t.execute();\n\t}\n}\n\nfunction scheduleRedirectRepair(db: Kysely<Database>): void {\n\tconst now = Date.now();\n\tif (repairState.runningUntil > now) return;\n\tconst runningUntil = now + REPAIR_LEASE_MS;\n\trepairState.runningUntil = runningUntil;\n\tafter(async () => {\n\t\ttry {\n\t\t\tawait repairRedirectArtifacts(db);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[emdash:redirects] repairing redirect artifacts failed:\", error);\n\t\t} finally {\n\t\t\tif (repairState.runningUntil === runningUntil) repairState.runningUntil = 0;\n\t\t}\n\t});\n}\n\n/**\n * The rule source the middleware caches: the published generation when it is\n * current and verifies, otherwise the rules table. Before the artifact tables exist the\n * rules table is read directly.\n */\nexport function createRedirectSource(db: Kysely<Database>): RedirectSource {\n\treturn {\n\t\tasync load() {\n\t\t\tlet published: RedirectRuleSet | null;\n\t\t\ttry {\n\t\t\t\tpublished = await loadPublishedRedirects(db);\n\t\t\t} catch (error) {\n\t\t\t\tif (isMissingTableError(error)) return loadRulesTable(db);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (published) return published;\n\t\t\tscheduleRedirectRepair(db);\n\t\t\treturn loadRulesTable(db);\n\t\t},\n\t\tasync isCurrent(version) {\n\t\t\tconst state = await db\n\t\t\t\t.selectFrom(\"_emdash_redirect_state\")\n\t\t\t\t.select([\"revision\", \"generation\", \"generation_revision\"])\n\t\t\t\t.where(\"id\", \"=\", 1)\n\t\t\t\t.executeTakeFirst();\n\t\t\treturn (\n\t\t\t\tstate?.generation === version && Number(state.revision) <= Number(state.generation_revision)\n\t\t\t);\n\t\t},\n\t};\n}\n"],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- import { c as encodeCursor, s as decodeCursor } from "./types-C-Xp0CcN.mjs";
2
- import { ulid } from "ulidx";
3
-
4
- //#region src/database/repositories/audit.ts
5
- /**
6
- * Audit repository for logging system events
7
- *
8
- * Tracks user actions for security, debugging, and compliance.
9
- * All mutations should create an audit log entry.
10
- */
11
- var AuditRepository = class {
12
- constructor(db) {
13
- this.db = db;
14
- }
15
- /**
16
- * Create an audit log entry
17
- */
18
- async log(input) {
19
- const id = ulid();
20
- const row = {
21
- id,
22
- actor_id: input.actorId ?? null,
23
- actor_ip: input.actorIp ?? null,
24
- action: input.action,
25
- resource_type: input.resourceType ?? null,
26
- resource_id: input.resourceId ?? null,
27
- details: input.details ? JSON.stringify(input.details) : null,
28
- status: input.status ?? null
29
- };
30
- await this.db.insertInto("audit_logs").values(row).execute();
31
- const log = await this.findById(id);
32
- if (!log) throw new Error("Failed to create audit log");
33
- return log;
34
- }
35
- /**
36
- * Find audit log by ID
37
- */
38
- async findById(id) {
39
- const row = await this.db.selectFrom("audit_logs").selectAll().where("id", "=", id).executeTakeFirst();
40
- return row ? this.rowToAuditLog(row) : null;
41
- }
42
- /**
43
- * Query audit logs with filters and cursor-based pagination
44
- */
45
- async findMany(query = {}) {
46
- const limit = Math.min(Math.max(1, query.limit || 50), 100);
47
- let q = this.db.selectFrom("audit_logs").selectAll().orderBy("timestamp", "desc").orderBy("id", "desc").limit(limit + 1);
48
- if (query.actorId) q = q.where("actor_id", "=", query.actorId);
49
- if (query.action) q = q.where("action", "=", query.action);
50
- if (query.resourceType) q = q.where("resource_type", "=", query.resourceType);
51
- if (query.resourceId) q = q.where("resource_id", "=", query.resourceId);
52
- if (query.status) q = q.where("status", "=", query.status);
53
- if (query.since) q = q.where("timestamp", ">=", query.since);
54
- if (query.until) q = q.where("timestamp", "<=", query.until);
55
- if (query.cursor) {
56
- const decoded = decodeCursor(query.cursor);
57
- q = q.where((eb) => eb.or([eb("timestamp", "<", decoded.orderValue), eb.and([eb("timestamp", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
58
- }
59
- const rows = await q.execute();
60
- const items = rows.slice(0, limit).map((row) => this.rowToAuditLog(row));
61
- const result = { items };
62
- if (rows.length > limit && items.length > 0) {
63
- const last = items.at(-1);
64
- result.nextCursor = encodeCursor(last.timestamp, last.id);
65
- }
66
- return result;
67
- }
68
- /**
69
- * Get all logs for a specific resource
70
- */
71
- async findByResource(resourceType, resourceId, options = {}) {
72
- let query = this.db.selectFrom("audit_logs").selectAll().where("resource_type", "=", resourceType).where("resource_id", "=", resourceId).orderBy("timestamp", "desc");
73
- if (options.limit) query = query.limit(options.limit);
74
- return (await query.execute()).map((row) => this.rowToAuditLog(row));
75
- }
76
- /**
77
- * Get all logs for a specific user
78
- */
79
- async findByActor(actorId, options = {}) {
80
- let query = this.db.selectFrom("audit_logs").selectAll().where("actor_id", "=", actorId).orderBy("timestamp", "desc");
81
- if (options.since) query = query.where("timestamp", ">=", options.since);
82
- if (options.limit) query = query.limit(options.limit);
83
- return (await query.execute()).map((row) => this.rowToAuditLog(row));
84
- }
85
- /**
86
- * Count logs matching a query
87
- */
88
- async count(query = {}) {
89
- let q = this.db.selectFrom("audit_logs").select((eb) => eb.fn.count("id").as("count"));
90
- if (query.actorId) q = q.where("actor_id", "=", query.actorId);
91
- if (query.action) q = q.where("action", "=", query.action);
92
- if (query.resourceType) q = q.where("resource_type", "=", query.resourceType);
93
- if (query.resourceId) q = q.where("resource_id", "=", query.resourceId);
94
- if (query.status) q = q.where("status", "=", query.status);
95
- if (query.since) q = q.where("timestamp", ">=", query.since);
96
- if (query.until) q = q.where("timestamp", "<=", query.until);
97
- const result = await q.executeTakeFirst();
98
- return Number(result?.count || 0);
99
- }
100
- /**
101
- * Delete old audit logs (for retention policy)
102
- */
103
- async deleteOlderThan(date) {
104
- const result = await this.db.deleteFrom("audit_logs").where("timestamp", "<", date).executeTakeFirst();
105
- return Number(result.numDeletedRows ?? 0);
106
- }
107
- /**
108
- * Convert database row to AuditLog object
109
- */
110
- rowToAuditLog(row) {
111
- return {
112
- id: row.id,
113
- timestamp: row.timestamp,
114
- actorId: row.actor_id,
115
- actorIp: row.actor_ip,
116
- action: row.action,
117
- resourceType: row.resource_type,
118
- resourceId: row.resource_id,
119
- details: row.details ? JSON.parse(row.details) : null,
120
- status: row.status
121
- };
122
- }
123
- };
124
-
125
- //#endregion
126
- export { AuditRepository as t };
127
- //# sourceMappingURL=audit-CCH3MA4Y.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-CCH3MA4Y.mjs","names":[],"sources":["../src/database/repositories/audit.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport type { Database, AuditLogTable } from \"../types.js\";\nimport { encodeCursor, decodeCursor, type FindManyResult } from \"./types.js\";\n\nexport type AuditAction =\n\t| \"create\"\n\t| \"update\"\n\t| \"delete\"\n\t| \"publish\"\n\t| \"unpublish\"\n\t| \"login\"\n\t| \"logout\"\n\t| \"password_change\"\n\t| \"settings_update\"\n\t| \"schema_change\"\n\t| \"plugin_tool_invoke\"\n\t| \"transfer_export_create\"\n\t| \"transfer_import_create\"\n\t| \"transfer_import_execute\"\n\t| \"transfer_import_cancel\"\n\t| \"transfer_import_abandon\"\n\t| \"transfer_import_complete\"\n\t| \"transfer_import_fail\"\n\t| \"transfer_approval_approve\"\n\t| \"transfer_approval_deny\";\n\nexport type AuditStatus = \"success\" | \"failure\" | \"denied\";\n\nexport interface AuditLog {\n\tid: string;\n\ttimestamp: string;\n\tactorId: string | null;\n\tactorIp: string | null;\n\taction: AuditAction;\n\tresourceType: string | null;\n\tresourceId: string | null;\n\tdetails: Record<string, unknown> | null;\n\tstatus: AuditStatus | null;\n}\n\nexport interface CreateAuditLogInput {\n\tactorId?: string;\n\tactorIp?: string;\n\taction: AuditAction;\n\tresourceType?: string;\n\tresourceId?: string;\n\tdetails?: Record<string, unknown>;\n\tstatus?: AuditStatus;\n}\n\nexport interface AuditLogQuery {\n\tactorId?: string;\n\taction?: AuditAction;\n\tresourceType?: string;\n\tresourceId?: string;\n\tstatus?: AuditStatus;\n\tsince?: string; // ISO date\n\tuntil?: string; // ISO date\n\tlimit?: number;\n\tcursor?: string;\n}\n\n/**\n * Audit repository for logging system events\n *\n * Tracks user actions for security, debugging, and compliance.\n * All mutations should create an audit log entry.\n */\nexport class AuditRepository {\n\tconstructor(private db: Kysely<Database>) {}\n\n\t/**\n\t * Create an audit log entry\n\t */\n\tasync log(input: CreateAuditLogInput): Promise<AuditLog> {\n\t\tconst id = ulid();\n\n\t\tconst row: Omit<AuditLogTable, \"timestamp\"> = {\n\t\t\tid,\n\t\t\tactor_id: input.actorId ?? null,\n\t\t\tactor_ip: input.actorIp ?? null,\n\t\t\taction: input.action,\n\t\t\tresource_type: input.resourceType ?? null,\n\t\t\tresource_id: input.resourceId ?? null,\n\t\t\tdetails: input.details ? JSON.stringify(input.details) : null,\n\t\t\tstatus: input.status ?? null,\n\t\t};\n\n\t\tawait this.db.insertInto(\"audit_logs\").values(row).execute();\n\n\t\tconst log = await this.findById(id);\n\t\tif (!log) {\n\t\t\tthrow new Error(\"Failed to create audit log\");\n\t\t}\n\t\treturn log;\n\t}\n\n\t/**\n\t * Find audit log by ID\n\t */\n\tasync findById(id: string): Promise<AuditLog | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"audit_logs\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.rowToAuditLog(row) : null;\n\t}\n\n\t/**\n\t * Query audit logs with filters and cursor-based pagination\n\t */\n\tasync findMany(query: AuditLogQuery = {}): Promise<FindManyResult<AuditLog>> {\n\t\tconst limit = Math.min(Math.max(1, query.limit || 50), 100);\n\n\t\tlet q = this.db\n\t\t\t.selectFrom(\"audit_logs\")\n\t\t\t.selectAll()\n\t\t\t.orderBy(\"timestamp\", \"desc\")\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(limit + 1);\n\n\t\tif (query.actorId) {\n\t\t\tq = q.where(\"actor_id\", \"=\", query.actorId);\n\t\t}\n\n\t\tif (query.action) {\n\t\t\tq = q.where(\"action\", \"=\", query.action);\n\t\t}\n\n\t\tif (query.resourceType) {\n\t\t\tq = q.where(\"resource_type\", \"=\", query.resourceType);\n\t\t}\n\n\t\tif (query.resourceId) {\n\t\t\tq = q.where(\"resource_id\", \"=\", query.resourceId);\n\t\t}\n\n\t\tif (query.status) {\n\t\t\tq = q.where(\"status\", \"=\", query.status);\n\t\t}\n\n\t\tif (query.since) {\n\t\t\tq = q.where(\"timestamp\", \">=\", query.since);\n\t\t}\n\n\t\tif (query.until) {\n\t\t\tq = q.where(\"timestamp\", \"<=\", query.until);\n\t\t}\n\n\t\tif (query.cursor) {\n\t\t\tconst decoded = decodeCursor(query.cursor);\n\t\t\tq = q.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"timestamp\", \"<\", decoded.orderValue),\n\t\t\t\t\teb.and([eb(\"timestamp\", \"=\", decoded.orderValue), eb(\"id\", \"<\", decoded.id)]),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tconst rows = await q.execute();\n\t\tconst items = rows.slice(0, limit).map((row) => this.rowToAuditLog(row));\n\t\tconst result: FindManyResult<AuditLog> = { items };\n\n\t\tif (rows.length > limit && items.length > 0) {\n\t\t\tconst last = items.at(-1)!;\n\t\t\tresult.nextCursor = encodeCursor(last.timestamp, last.id);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get all logs for a specific resource\n\t */\n\tasync findByResource(\n\t\tresourceType: string,\n\t\tresourceId: string,\n\t\toptions: { limit?: number } = {},\n\t): Promise<AuditLog[]> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"audit_logs\")\n\t\t\t.selectAll()\n\t\t\t.where(\"resource_type\", \"=\", resourceType)\n\t\t\t.where(\"resource_id\", \"=\", resourceId)\n\t\t\t.orderBy(\"timestamp\", \"desc\");\n\n\t\tif (options.limit) {\n\t\t\tquery = query.limit(options.limit);\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row) => this.rowToAuditLog(row));\n\t}\n\n\t/**\n\t * Get all logs for a specific user\n\t */\n\tasync findByActor(\n\t\tactorId: string,\n\t\toptions: { limit?: number; since?: string } = {},\n\t): Promise<AuditLog[]> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"audit_logs\")\n\t\t\t.selectAll()\n\t\t\t.where(\"actor_id\", \"=\", actorId)\n\t\t\t.orderBy(\"timestamp\", \"desc\");\n\n\t\tif (options.since) {\n\t\t\tquery = query.where(\"timestamp\", \">=\", options.since);\n\t\t}\n\n\t\tif (options.limit) {\n\t\t\tquery = query.limit(options.limit);\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row) => this.rowToAuditLog(row));\n\t}\n\n\t/**\n\t * Count logs matching a query\n\t */\n\tasync count(query: Omit<AuditLogQuery, \"limit\" | \"cursor\"> = {}): Promise<number> {\n\t\tlet q = this.db.selectFrom(\"audit_logs\").select((eb) => eb.fn.count(\"id\").as(\"count\"));\n\n\t\tif (query.actorId) {\n\t\t\tq = q.where(\"actor_id\", \"=\", query.actorId);\n\t\t}\n\n\t\tif (query.action) {\n\t\t\tq = q.where(\"action\", \"=\", query.action);\n\t\t}\n\n\t\tif (query.resourceType) {\n\t\t\tq = q.where(\"resource_type\", \"=\", query.resourceType);\n\t\t}\n\n\t\tif (query.resourceId) {\n\t\t\tq = q.where(\"resource_id\", \"=\", query.resourceId);\n\t\t}\n\n\t\tif (query.status) {\n\t\t\tq = q.where(\"status\", \"=\", query.status);\n\t\t}\n\n\t\tif (query.since) {\n\t\t\tq = q.where(\"timestamp\", \">=\", query.since);\n\t\t}\n\n\t\tif (query.until) {\n\t\t\tq = q.where(\"timestamp\", \"<=\", query.until);\n\t\t}\n\n\t\tconst result = await q.executeTakeFirst();\n\t\treturn Number(result?.count || 0);\n\t}\n\n\t/**\n\t * Delete old audit logs (for retention policy)\n\t */\n\tasync deleteOlderThan(date: string): Promise<number> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"audit_logs\")\n\t\t\t.where(\"timestamp\", \"<\", date)\n\t\t\t.executeTakeFirst();\n\n\t\treturn Number(result.numDeletedRows ?? 0);\n\t}\n\n\t/**\n\t * Convert database row to AuditLog object\n\t */\n\tprivate rowToAuditLog(row: {\n\t\tid: string;\n\t\ttimestamp: string;\n\t\tactor_id: string | null;\n\t\tactor_ip: string | null;\n\t\taction: string;\n\t\tresource_type: string | null;\n\t\tresource_id: string | null;\n\t\tdetails: string | null;\n\t\tstatus: string | null;\n\t}): AuditLog {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\ttimestamp: row.timestamp,\n\t\t\tactorId: row.actor_id,\n\t\t\tactorIp: row.actor_ip,\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- DB stores string; validated at insert but linter can't follow\n\t\t\taction: row.action as AuditAction,\n\t\t\tresourceType: row.resource_type,\n\t\t\tresourceId: row.resource_id,\n\t\t\tdetails: row.details ? JSON.parse(row.details) : null,\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- DB stores string; validated at insert but linter can't follow\n\t\t\tstatus: row.status as AuditStatus | null,\n\t\t};\n\t}\n}\n"],"mappings":"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"}