emdash 0.40.0 → 0.41.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 (1258) hide show
  1. package/dist/action-token-CbKDcPJi.mjs +26 -0
  2. package/dist/action-token-CbKDcPJi.mjs.map +1 -0
  3. package/dist/activation-PtniBLt9.mjs +382 -0
  4. package/dist/activation-PtniBLt9.mjs.map +1 -0
  5. package/dist/adapters-C_Tf5x90.d.mts +171 -0
  6. package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
  7. package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
  8. package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +46 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +10 -10
  14. package/dist/api-CXwQkV_m.mjs +5122 -0
  15. package/dist/api-CXwQkV_m.mjs.map +1 -0
  16. package/dist/api-tokens-89WlohEN.mjs +166 -0
  17. package/dist/api-tokens-89WlohEN.mjs.map +1 -0
  18. package/dist/apply-Do3KNnUk.mjs +1659 -0
  19. package/dist/apply-Do3KNnUk.mjs.map +1 -0
  20. package/dist/approvals-CAX9Yw33.mjs +460 -0
  21. package/dist/approvals-CAX9Yw33.mjs.map +1 -0
  22. package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
  23. package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
  24. package/dist/astro/index.d.mts +14 -14
  25. package/dist/astro/index.mjs +26 -30
  26. package/dist/astro/index.mjs.map +1 -1
  27. package/dist/astro/middleware/auth.d.mts +12 -12
  28. package/dist/astro/middleware/auth.mjs +10 -10
  29. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  30. package/dist/astro/middleware/redirect.mjs +7 -7
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +12 -12
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +110 -106
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  41. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  43. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  44. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  45. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
  46. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
  47. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  48. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  49. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  50. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  51. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  52. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  53. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  54. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  55. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  56. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  57. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  58. package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
  59. package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
  60. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  61. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  62. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  63. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  65. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  66. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
  67. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  69. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
  70. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
  72. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
  74. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
  76. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
  78. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
  79. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +81 -77
  81. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
  83. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
  85. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +83 -79
  87. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  89. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
  90. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
  93. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
  95. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  97. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
  98. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +5 -5
  100. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
  101. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  103. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
  104. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
  105. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
  106. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
  107. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
  108. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
  109. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
  110. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
  111. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
  112. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
  113. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
  114. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
  115. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
  116. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
  117. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
  118. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
  119. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
  121. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
  122. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
  124. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  125. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  126. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  127. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  128. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  129. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  130. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  131. package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
  132. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  133. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  134. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  135. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
  137. package/dist/astro/routes/api/auth/me.mjs +15 -15
  138. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
  148. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  154. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  156. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  157. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  160. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
  165. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  168. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  169. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
  170. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  175. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  176. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  177. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
  178. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  179. package/dist/astro/routes/api/dashboard.mjs +10 -9
  180. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  181. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  182. package/dist/astro/routes/api/health.mjs +6 -6
  183. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  184. package/dist/astro/routes/api/import/probe.mjs +23 -23
  185. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  186. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  187. package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
  188. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  189. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
  190. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  191. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  192. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
  193. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  194. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
  195. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  196. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
  197. package/dist/astro/routes/api/manifest.mjs +6 -6
  198. package/dist/astro/routes/api/mcp.mjs +98 -118
  199. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  200. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
  204. package/dist/astro/routes/api/media/_id_.mjs +31 -31
  205. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  207. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  208. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  209. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  210. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  211. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  212. package/dist/astro/routes/api/media/upload-url.mjs +18 -18
  213. package/dist/astro/routes/api/media.mjs +35 -35
  214. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
  215. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
  216. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
  217. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
  218. package/dist/astro/routes/api/menus/_name_.mjs +17 -17
  219. package/dist/astro/routes/api/menus/index.mjs +17 -17
  220. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  221. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  222. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  223. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  224. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  225. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  226. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  227. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  228. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  229. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  230. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  231. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  232. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  233. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  234. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  235. package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
  236. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  237. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
  238. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  239. package/dist/astro/routes/api/relations/index.mjs +36 -31
  240. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  241. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  242. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  243. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
  244. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  245. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
  246. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  247. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
  248. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
  250. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  251. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -67
  252. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -67
  254. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  255. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
  256. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
  258. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  259. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
  260. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/schema/index.mjs +16 -16
  262. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
  263. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
  265. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/search/enable.mjs +19 -19
  267. package/dist/astro/routes/api/search/index.mjs +18 -18
  268. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  269. package/dist/astro/routes/api/search/stats.mjs +9 -9
  270. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  271. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  272. package/dist/astro/routes/api/sections/index.mjs +18 -18
  273. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  274. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  275. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  276. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  277. package/dist/astro/routes/api/settings/email.mjs +6 -6
  278. package/dist/astro/routes/api/settings.mjs +21 -21
  279. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
  280. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  281. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
  282. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  283. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  284. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  285. package/dist/astro/routes/api/setup/index.mjs +80 -49
  286. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/setup/status.mjs +6 -6
  288. package/dist/astro/routes/api/snapshot.mjs +9 -9
  289. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  290. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
  291. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
  292. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
  293. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
  294. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
  295. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
  296. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
  297. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  298. package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
  299. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  300. package/dist/astro/routes/api/typegen.mjs +8 -8
  301. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  302. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
  303. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  304. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  305. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  306. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  307. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -16
  308. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  309. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  310. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  311. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  312. package/dist/astro/routes/api/widget-components.mjs +5 -5
  313. package/dist/astro/routes/robots.txt.mjs +6 -6
  314. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  315. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  316. package/dist/astro/types.d.mts +28 -18
  317. package/dist/astro/types.d.mts.map +1 -1
  318. package/dist/audit-CrgmE9LE.mjs +127 -0
  319. package/dist/audit-CrgmE9LE.mjs.map +1 -0
  320. package/dist/auth/providers/github.d.mts +1 -1
  321. package/dist/auth/providers/google.d.mts +1 -1
  322. package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
  323. package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
  324. package/dist/authorize-WgdKF8QY.mjs +49 -0
  325. package/dist/authorize-WgdKF8QY.mjs.map +1 -0
  326. package/dist/backup-Ck8_lMO3.mjs +246 -0
  327. package/dist/backup-Ck8_lMO3.mjs.map +1 -0
  328. package/dist/block-types-BQ90asVI.mjs +132 -0
  329. package/dist/block-types-BQ90asVI.mjs.map +1 -0
  330. package/dist/block-values-ACFqgB1D.mjs +175 -0
  331. package/dist/block-values-ACFqgB1D.mjs.map +1 -0
  332. package/dist/bundle-Db1iNMv_.mjs +667 -0
  333. package/dist/bundle-Db1iNMv_.mjs.map +1 -0
  334. package/dist/byline-BayaYGoj.mjs +909 -0
  335. package/dist/byline-BayaYGoj.mjs.map +1 -0
  336. package/dist/byline-fields-B8HH-35f.mjs +254 -0
  337. package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
  338. package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
  339. package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
  340. package/dist/byline-registry-B_EK_TQf.mjs +406 -0
  341. package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
  342. package/dist/bylines-DFAaFXWi.mjs +214 -0
  343. package/dist/bylines-DFAaFXWi.mjs.map +1 -0
  344. package/dist/bylines-DkIxUxmr.mjs +232 -0
  345. package/dist/bylines-DkIxUxmr.mjs.map +1 -0
  346. package/dist/cache-DkvhQ8XE.mjs +108 -0
  347. package/dist/cache-DkvhQ8XE.mjs.map +1 -0
  348. package/dist/canonical-CcSuuTlH.mjs +174 -0
  349. package/dist/canonical-CcSuuTlH.mjs.map +1 -0
  350. package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
  351. package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
  352. package/dist/challenge-store-CvBl81AQ.mjs +51 -0
  353. package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
  354. package/dist/checksum-CClweQzI.mjs +162 -0
  355. package/dist/checksum-CClweQzI.mjs.map +1 -0
  356. package/dist/chrome-tags-D5caJwwp.mjs +24 -0
  357. package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
  358. package/dist/chunks-DwBaj8aT.mjs +25 -0
  359. package/dist/chunks-DwBaj8aT.mjs.map +1 -0
  360. package/dist/cli/index.mjs +374 -761
  361. package/dist/cli/index.mjs.map +1 -1
  362. package/dist/client/cf-access.d.mts +1 -1
  363. package/dist/client/index.d.mts +18 -18
  364. package/dist/client/index.mjs +2 -2
  365. package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
  366. package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
  367. package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
  368. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
  369. package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
  370. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
  371. package/dist/comment-D2uvL63j.mjs +313 -0
  372. package/dist/comment-D2uvL63j.mjs.map +1 -0
  373. package/dist/comment-reaction-DevUuzg4.mjs +85 -0
  374. package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
  375. package/dist/comments-Cq0s7_hO.mjs +195 -0
  376. package/dist/comments-Cq0s7_hO.mjs.map +1 -0
  377. package/dist/comments-M4EDYAHw.mjs +99 -0
  378. package/dist/comments-M4EDYAHw.mjs.map +1 -0
  379. package/dist/components-CuIGwXMs.mjs +108 -0
  380. package/dist/components-CuIGwXMs.mjs.map +1 -0
  381. package/dist/config-52Ea5IWt.d.mts +39 -0
  382. package/dist/config-52Ea5IWt.d.mts.map +1 -0
  383. package/dist/config-CCz3xOLc.mjs +242 -0
  384. package/dist/config-CCz3xOLc.mjs.map +1 -0
  385. package/dist/config-D3d5Qudq.d.mts +6669 -0
  386. package/dist/config-D3d5Qudq.d.mts.map +1 -0
  387. package/dist/content-CbnufDsM.mjs +2018 -0
  388. package/dist/content-CbnufDsM.mjs.map +1 -0
  389. package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
  390. package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
  391. package/dist/content-policy-CYu6K1KB.mjs +46 -0
  392. package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
  393. package/dist/content-repair-DlDUgFGp.mjs +442 -0
  394. package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
  395. package/dist/context-CGQLA1-a.mjs +1922 -0
  396. package/dist/context-CGQLA1-a.mjs.map +1 -0
  397. package/dist/cron-c4D5C5Fx.mjs +284 -0
  398. package/dist/cron-c4D5C5Fx.mjs.map +1 -0
  399. package/dist/dashboard-CBq9kmOn.mjs +151 -0
  400. package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
  401. package/dist/db/index.d.mts +3 -3
  402. package/dist/db/index.mjs +1 -1
  403. package/dist/db/libsql-migrations.d.mts +1 -1
  404. package/dist/db/libsql-migrations.mjs +4 -4
  405. package/dist/db/libsql.d.mts +1 -1
  406. package/dist/db/postgres-migrations.d.mts +1 -1
  407. package/dist/db/postgres-migrations.mjs +4 -4
  408. package/dist/db/postgres.d.mts +1 -1
  409. package/dist/db/sqlite-migrations.d.mts +1 -1
  410. package/dist/db/sqlite-migrations.mjs +4 -4
  411. package/dist/db/sqlite.d.mts +1 -1
  412. package/dist/db/sqlite.mjs +1 -1
  413. package/dist/default-DPsys51U.mjs +81 -0
  414. package/dist/default-DPsys51U.mjs.map +1 -0
  415. package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
  416. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
  417. package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
  418. package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
  419. package/dist/device-flow-OcSqE9uY.mjs +521 -0
  420. package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
  421. package/dist/digest-DVZ--cE9.mjs +194 -0
  422. package/dist/digest-DVZ--cE9.mjs.map +1 -0
  423. package/dist/direct-executor-DyjAqkpT.mjs +104 -0
  424. package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
  425. package/dist/dist-FPR93_xf.mjs +810 -0
  426. package/dist/dist-FPR93_xf.mjs.map +1 -0
  427. package/dist/email-console-DyQIgEnz.mjs +50 -0
  428. package/dist/email-console-DyQIgEnz.mjs.map +1 -0
  429. package/dist/email-locale-BYb16rVd.mjs +25 -0
  430. package/dist/email-locale-BYb16rVd.mjs.map +1 -0
  431. package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
  432. package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
  433. package/dist/enrich-DBtCncE2.mjs +194 -0
  434. package/dist/enrich-DBtCncE2.mjs.map +1 -0
  435. package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
  436. package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
  437. package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
  438. package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
  439. package/dist/entry-lock-C6NcnZPV.mjs +163 -0
  440. package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
  441. package/dist/entry-locks-BTyQLdbC.mjs +167 -0
  442. package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
  443. package/dist/error-BfsNNrIE.mjs +90 -0
  444. package/dist/error-BfsNNrIE.mjs.map +1 -0
  445. package/dist/errors-BN1QAnEY.mjs +460 -0
  446. package/dist/errors-BN1QAnEY.mjs.map +1 -0
  447. package/dist/errors-Bt3goF8I.mjs +120 -0
  448. package/dist/errors-Bt3goF8I.mjs.map +1 -0
  449. package/dist/escape-BveidMa2.mjs +9 -0
  450. package/dist/escape-BveidMa2.mjs.map +1 -0
  451. package/dist/fence-Bb_IbCxI.mjs +162 -0
  452. package/dist/fence-Bb_IbCxI.mjs.map +1 -0
  453. package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
  454. package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
  455. package/dist/field-map-6m9rF49t.mjs +83 -0
  456. package/dist/field-map-6m9rF49t.mjs.map +1 -0
  457. package/dist/focal-point-CZ3d1wK5.mjs +23 -0
  458. package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
  459. package/dist/fts-manager-CCaZTp8y.mjs +443 -0
  460. package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
  461. package/dist/gc-xowRjczI.mjs +75 -0
  462. package/dist/gc-xowRjczI.mjs.map +1 -0
  463. package/dist/hash-COVK27Pc.mjs +37 -0
  464. package/dist/hash-COVK27Pc.mjs.map +1 -0
  465. package/dist/hook-result-CYSk0XFe.d.mts +31 -0
  466. package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
  467. package/dist/hreflang-CChPV7jx.mjs +105 -0
  468. package/dist/hreflang-CChPV7jx.mjs.map +1 -0
  469. package/dist/hreflang-DRslq3QI.d.mts +50 -0
  470. package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
  471. package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
  472. package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
  473. package/dist/identity-NVTOOQyq.mjs +35 -0
  474. package/dist/identity-NVTOOQyq.mjs.map +1 -0
  475. package/dist/import-wpSO2N0x.mjs +2020 -0
  476. package/dist/import-wpSO2N0x.mjs.map +1 -0
  477. package/dist/index-CDs2wq4X.d.mts +623 -0
  478. package/dist/index-CDs2wq4X.d.mts.map +1 -0
  479. package/dist/index.d.mts +24 -24
  480. package/dist/index.mjs +103 -101
  481. package/dist/install-finalization-D9R9R-W8.mjs +58 -0
  482. package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
  483. package/dist/keys-Bck6LBfF.mjs +61 -0
  484. package/dist/keys-Bck6LBfF.mjs.map +1 -0
  485. package/dist/kinds-CYmRESWj.mjs +974 -0
  486. package/dist/kinds-CYmRESWj.mjs.map +1 -0
  487. package/dist/lifecycle-C815ZQfV.mjs +25 -0
  488. package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
  489. package/dist/load-D99axixL.mjs +28 -0
  490. package/dist/load-D99axixL.mjs.map +1 -0
  491. package/dist/loader-CrRPfkHS.mjs +1197 -0
  492. package/dist/loader-CrRPfkHS.mjs.map +1 -0
  493. package/dist/loops-DMKlygqX.mjs +203 -0
  494. package/dist/loops-DMKlygqX.mjs.map +1 -0
  495. package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
  496. package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
  497. package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
  498. package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
  499. package/dist/media/image-endpoint.mjs +1 -1
  500. package/dist/media/index.d.mts +1 -1
  501. package/dist/media/index.mjs +4 -4
  502. package/dist/media/local-runtime.d.mts +14 -14
  503. package/dist/media/local-runtime.mjs +6 -6
  504. package/dist/media-BUQePMxP.mjs +373 -0
  505. package/dist/media-BUQePMxP.mjs.map +1 -0
  506. package/dist/media-DH8ibNlY.mjs +294 -0
  507. package/dist/media-DH8ibNlY.mjs.map +1 -0
  508. package/dist/media-OEIQ3bVc.mjs +408 -0
  509. package/dist/media-OEIQ3bVc.mjs.map +1 -0
  510. package/dist/media-allowlist-pYtaBA95.mjs +44 -0
  511. package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
  512. package/dist/media-folders-Bf8_s4de.mjs +210 -0
  513. package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
  514. package/dist/media-url-C6klEuNd.mjs +43 -0
  515. package/dist/media-url-C6klEuNd.mjs.map +1 -0
  516. package/dist/media-usage-D7Y64m6v.mjs +1629 -0
  517. package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
  518. package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
  519. package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
  520. package/dist/media-usage-work-DommYhYA.mjs +152 -0
  521. package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
  522. package/dist/media-usage-work-HU63hNDu.mjs +586 -0
  523. package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
  524. package/dist/menus-BQfusWEC.mjs +3608 -0
  525. package/dist/menus-BQfusWEC.mjs.map +1 -0
  526. package/dist/menus-BtwjQt5s.mjs +753 -0
  527. package/dist/menus-BtwjQt5s.mjs.map +1 -0
  528. package/dist/menus-p_M1V7J_.mjs +139 -0
  529. package/dist/menus-p_M1V7J_.mjs.map +1 -0
  530. package/dist/migrations/index.d.mts +1 -1
  531. package/dist/migrations/index.mjs +3 -3
  532. package/dist/mime-C94qBG-P.mjs +36 -0
  533. package/dist/mime-C94qBG-P.mjs.map +1 -0
  534. package/dist/mode-DpYW3w6U.mjs +23 -0
  535. package/dist/mode-DpYW3w6U.mjs.map +1 -0
  536. package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
  537. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
  538. package/dist/normalize-DduyxBjf.mjs +191 -0
  539. package/dist/normalize-DduyxBjf.mjs.map +1 -0
  540. package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
  541. package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
  542. package/dist/oauth-clients-DENiDQri.mjs +266 -0
  543. package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
  544. package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
  545. package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
  546. package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
  547. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
  548. package/dist/object-cache/memory.d.mts +1 -1
  549. package/dist/options-BYa1FgIM.d.mts +81 -0
  550. package/dist/options-BYa1FgIM.d.mts.map +1 -0
  551. package/dist/page/index.d.mts +2 -2
  552. package/dist/page/index.mjs +5 -5
  553. package/dist/parse-CORGGhHf.mjs +81 -0
  554. package/dist/parse-CORGGhHf.mjs.map +1 -0
  555. package/dist/parse-avNM1xWV.d.mts +168 -0
  556. package/dist/parse-avNM1xWV.d.mts.map +1 -0
  557. package/dist/passkey-config-Dih5YeIS.mjs +46 -0
  558. package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
  559. package/dist/paths-d51RFm8M.mjs +77 -0
  560. package/dist/paths-d51RFm8M.mjs.map +1 -0
  561. package/dist/patterns-CoqlXUvk.mjs +145 -0
  562. package/dist/patterns-CoqlXUvk.mjs.map +1 -0
  563. package/dist/placeholder-D2aksPMF.d.mts +306 -0
  564. package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
  565. package/dist/plan-DqeZKuaR.mjs +135 -0
  566. package/dist/plan-DqeZKuaR.mjs.map +1 -0
  567. package/dist/plugin-test-runtime.d.mts +14 -14
  568. package/dist/plugin-test-runtime.mjs +110 -107
  569. package/dist/plugin-types.d.mts +2 -2
  570. package/dist/plugin-utils.d.mts +12 -12
  571. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  572. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  573. package/dist/plugins/host.d.mts +5 -5
  574. package/dist/plugins/host.mjs +42 -41
  575. package/dist/plugins-Bb7oqjQA.mjs +277 -0
  576. package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
  577. package/dist/policy-BcEqut3n.mjs +45 -0
  578. package/dist/policy-BcEqut3n.mjs.map +1 -0
  579. package/dist/portable-text-DXE8ymtD.mjs +307 -0
  580. package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
  581. package/dist/preview-DEDWbwA_.mjs +107 -0
  582. package/dist/preview-DEDWbwA_.mjs.map +1 -0
  583. package/dist/protocol-BJbTzvwl.d.mts +61 -0
  584. package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
  585. package/dist/public-submission-D9c9S14m.mjs +250 -0
  586. package/dist/public-submission-D9c9S14m.mjs.map +1 -0
  587. package/dist/public-url-CIRe-2T6.mjs +101 -0
  588. package/dist/public-url-CIRe-2T6.mjs.map +1 -0
  589. package/dist/query-BzifXlPS.mjs +1156 -0
  590. package/dist/query-BzifXlPS.mjs.map +1 -0
  591. package/dist/query-OzMJ6vJP.mjs +41 -0
  592. package/dist/query-OzMJ6vJP.mjs.map +1 -0
  593. package/dist/rate-limit-Csp60Vik.mjs +120 -0
  594. package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
  595. package/dist/receipt-B-aU4hpJ.mjs +43 -0
  596. package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
  597. package/dist/redirect-CDSw1sU3.mjs +17 -0
  598. package/dist/redirect-CDSw1sU3.mjs.map +1 -0
  599. package/dist/redirect-D1ArbO85.mjs +411 -0
  600. package/dist/redirect-D1ArbO85.mjs.map +1 -0
  601. package/dist/redirects-BjTwDTsV.mjs +148 -0
  602. package/dist/redirects-BjTwDTsV.mjs.map +1 -0
  603. package/dist/redirects-Ck50kH3n.mjs +446 -0
  604. package/dist/redirects-Ck50kH3n.mjs.map +1 -0
  605. package/dist/registry/testing.mjs +3 -3
  606. package/dist/registry-CFcNCayZ.mjs +6754 -0
  607. package/dist/registry-CFcNCayZ.mjs.map +1 -0
  608. package/dist/relations-Cfaa1fDl.mjs +776 -0
  609. package/dist/relations-Cfaa1fDl.mjs.map +1 -0
  610. package/dist/request-cache-iHRlHx1d.mjs +104 -0
  611. package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
  612. package/dist/request-context.d.mts +1 -1
  613. package/dist/request-meta-D47mqyev.mjs +141 -0
  614. package/dist/request-meta-D47mqyev.mjs.map +1 -0
  615. package/dist/resolve-BPE8sMvx.mjs +99 -0
  616. package/dist/resolve-BPE8sMvx.mjs.map +1 -0
  617. package/dist/resolve-C0s1E_fH.mjs +199 -0
  618. package/dist/resolve-C0s1E_fH.mjs.map +1 -0
  619. package/dist/revision-j1p4-bOj.mjs +302 -0
  620. package/dist/revision-j1p4-bOj.mjs.map +1 -0
  621. package/dist/route-wire-C9PJV9aL.mjs +197 -0
  622. package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
  623. package/dist/routes-lyYw0mMf.mjs +272 -0
  624. package/dist/routes-lyYw0mMf.mjs.map +1 -0
  625. package/dist/runner-B3eyB9Gb.mjs +6121 -0
  626. package/dist/runner-B3eyB9Gb.mjs.map +1 -0
  627. package/dist/runner-DoYH2Jcu.d.mts +68 -0
  628. package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
  629. package/dist/runtime.d.mts +13 -13
  630. package/dist/runtime.mjs +3 -3
  631. package/dist/schema-BAayK46S.mjs +13 -0
  632. package/dist/schema-BAayK46S.mjs.map +1 -0
  633. package/dist/schema-Gqcl-8G4.mjs +815 -0
  634. package/dist/schema-Gqcl-8G4.mjs.map +1 -0
  635. package/dist/scopes-BqPOKoKf.mjs +34 -0
  636. package/dist/scopes-BqPOKoKf.mjs.map +1 -0
  637. package/dist/search-YJKPIEV6.mjs +448 -0
  638. package/dist/search-YJKPIEV6.mjs.map +1 -0
  639. package/dist/sections-BR_e-wK5.mjs +346 -0
  640. package/dist/sections-BR_e-wK5.mjs.map +1 -0
  641. package/dist/seed/index.d.mts +2 -2
  642. package/dist/seed/index.mjs +37 -31
  643. package/dist/seo/index.d.mts +3 -3
  644. package/dist/seo/index.mjs +22 -21
  645. package/dist/seo/index.mjs.map +1 -1
  646. package/dist/seo-Dsj8hy3j.mjs +114 -0
  647. package/dist/seo-Dsj8hy3j.mjs.map +1 -0
  648. package/dist/seo-XvH4LNNp.mjs +133 -0
  649. package/dist/seo-XvH4LNNp.mjs.map +1 -0
  650. package/dist/service-BsVG05gS.mjs +150 -0
  651. package/dist/service-BsVG05gS.mjs.map +1 -0
  652. package/dist/session-user-DgKbYrlj.mjs +51 -0
  653. package/dist/session-user-DgKbYrlj.mjs.map +1 -0
  654. package/dist/settings-CNPUntkh.mjs +51 -0
  655. package/dist/settings-CNPUntkh.mjs.map +1 -0
  656. package/dist/settings-D5EHi0Tk.mjs +439 -0
  657. package/dist/settings-D5EHi0Tk.mjs.map +1 -0
  658. package/dist/settings-DSfE7wOa.mjs +61 -0
  659. package/dist/settings-DSfE7wOa.mjs.map +1 -0
  660. package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
  661. package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
  662. package/dist/setup-nonce-DnSBP260.mjs +25 -0
  663. package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
  664. package/dist/site-settings-NGzdrt7O.mjs +50 -0
  665. package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
  666. package/dist/site-url-D6JB7tLW.mjs +16 -0
  667. package/dist/site-url-D6JB7tLW.mjs.map +1 -0
  668. package/dist/snapshot-CdcwwWAf.mjs +414 -0
  669. package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
  670. package/dist/ssrf-Dv0_tRpo.mjs +406 -0
  671. package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
  672. package/dist/stage-CUjhED3P.mjs +662 -0
  673. package/dist/stage-CUjhED3P.mjs.map +1 -0
  674. package/dist/staged-C36IWXff.mjs +659 -0
  675. package/dist/staged-C36IWXff.mjs.map +1 -0
  676. package/dist/state-CKouMCSY.mjs +153 -0
  677. package/dist/state-CKouMCSY.mjs.map +1 -0
  678. package/dist/status-lzyj4Uu7.mjs +30 -0
  679. package/dist/status-lzyj4Uu7.mjs.map +1 -0
  680. package/dist/storage/local.d.mts +1 -1
  681. package/dist/storage/local.mjs +1 -1
  682. package/dist/storage/s3.d.mts +1 -1
  683. package/dist/storage/s3.mjs +1 -1
  684. package/dist/storage-query-B-cWcTjJ.d.mts +1594 -0
  685. package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
  686. package/dist/tar-DsTXX6ch.mjs +449 -0
  687. package/dist/tar-DsTXX6ch.mjs.map +1 -0
  688. package/dist/target-DLQCwp_Z.mjs +27 -0
  689. package/dist/target-DLQCwp_Z.mjs.map +1 -0
  690. package/dist/taxonomies-BlAjr4BL.mjs +697 -0
  691. package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
  692. package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
  693. package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
  694. package/dist/taxonomy-CKDwM61Y.mjs +525 -0
  695. package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
  696. package/dist/tokens-BojXlk49.mjs +171 -0
  697. package/dist/tokens-BojXlk49.mjs.map +1 -0
  698. package/dist/transaction-DLPQWik1.mjs +29 -0
  699. package/dist/transaction-DLPQWik1.mjs.map +1 -0
  700. package/dist/transfer-XSTh2BCr.mjs +8706 -0
  701. package/dist/transfer-XSTh2BCr.mjs.map +1 -0
  702. package/dist/transfer-download-DkoCDA9d.mjs +33 -0
  703. package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
  704. package/dist/transfer-iQ26J-RT.mjs +166 -0
  705. package/dist/transfer-iQ26J-RT.mjs.map +1 -0
  706. package/dist/transformations-C7RQabKQ.mjs +196 -0
  707. package/dist/transformations-C7RQabKQ.mjs.map +1 -0
  708. package/dist/transport-D3RulfD6.mjs +136 -0
  709. package/dist/transport-D3RulfD6.mjs.map +1 -0
  710. package/dist/transport-DhlZlf4D.d.mts +42 -0
  711. package/dist/transport-DhlZlf4D.d.mts.map +1 -0
  712. package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
  713. package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
  714. package/dist/turnstile-lqUiY7lP.mjs +53 -0
  715. package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
  716. package/dist/types-4Dn9bZhu.mjs +77 -0
  717. package/dist/types-4Dn9bZhu.mjs.map +1 -0
  718. package/dist/types-5LSo7PPx.d.mts +85 -0
  719. package/dist/types-5LSo7PPx.d.mts.map +1 -0
  720. package/dist/types-BQ3hwYJT.d.mts +896 -0
  721. package/dist/types-BQ3hwYJT.d.mts.map +1 -0
  722. package/dist/types-BYEk7qo3.d.mts +198 -0
  723. package/dist/types-BYEk7qo3.d.mts.map +1 -0
  724. package/dist/types-CJKsWVFR.mjs +199 -0
  725. package/dist/types-CJKsWVFR.mjs.map +1 -0
  726. package/dist/types-Ca_w8mmY.d.mts +363 -0
  727. package/dist/types-Ca_w8mmY.d.mts.map +1 -0
  728. package/dist/types-CkE41ZAG.mjs +18 -0
  729. package/dist/types-CkE41ZAG.mjs.map +1 -0
  730. package/dist/types-D0aJW2uR.d.mts +1641 -0
  731. package/dist/types-D0aJW2uR.d.mts.map +1 -0
  732. package/dist/types-DbpN4Qto.d.mts +372 -0
  733. package/dist/types-DbpN4Qto.d.mts.map +1 -0
  734. package/dist/types-ILDI1sdY.mjs +16 -0
  735. package/dist/types-ILDI1sdY.mjs.map +1 -0
  736. package/dist/types-OC5c-edM.mjs +22 -0
  737. package/dist/types-OC5c-edM.mjs.map +1 -0
  738. package/dist/types-aOOxRSx6.mjs +103 -0
  739. package/dist/types-aOOxRSx6.mjs.map +1 -0
  740. package/dist/types-m1WbUffD.d.mts +198 -0
  741. package/dist/types-m1WbUffD.d.mts.map +1 -0
  742. package/dist/types-uxLoPBio.d.mts +124 -0
  743. package/dist/types-uxLoPBio.d.mts.map +1 -0
  744. package/dist/types-we5uR-tV.d.mts +287 -0
  745. package/dist/types-we5uR-tV.d.mts.map +1 -0
  746. package/dist/upload-attempts-DduMy6B0.mjs +32 -0
  747. package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
  748. package/dist/url-pattern-B3EwxAAk.mjs +33 -0
  749. package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
  750. package/dist/user-ElwQjTQT.mjs +171 -0
  751. package/dist/user-ElwQjTQT.mjs.map +1 -0
  752. package/dist/utils-BlAXmfOG.mjs +439 -0
  753. package/dist/utils-BlAXmfOG.mjs.map +1 -0
  754. package/dist/validate-CH0X5b2c.d.mts +468 -0
  755. package/dist/validate-CH0X5b2c.d.mts.map +1 -0
  756. package/dist/validate-CfgRpcjA.mjs +492 -0
  757. package/dist/validate-CfgRpcjA.mjs.map +1 -0
  758. package/dist/validation-DvYJtv4k.mjs +218 -0
  759. package/dist/validation-DvYJtv4k.mjs.map +1 -0
  760. package/dist/version-DgYjhTud.mjs +9 -0
  761. package/dist/version-DgYjhTud.mjs.map +1 -0
  762. package/dist/version-Dq71scUb.mjs +7 -0
  763. package/dist/version-Dq71scUb.mjs.map +1 -0
  764. package/dist/widgets-ChFIj0be.mjs +126 -0
  765. package/dist/widgets-ChFIj0be.mjs.map +1 -0
  766. package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
  767. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
  768. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
  769. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
  770. package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
  771. package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
  772. package/package.json +7 -6
  773. package/src/api/handlers/content.ts +593 -16
  774. package/src/api/handlers/device-flow.ts +74 -21
  775. package/src/api/handlers/index.ts +1 -0
  776. package/src/api/handlers/manifest.ts +79 -5
  777. package/src/api/handlers/media-upload.ts +17 -71
  778. package/src/api/handlers/media.ts +97 -3
  779. package/src/api/handlers/relations.ts +638 -157
  780. package/src/api/handlers/revision.ts +30 -0
  781. package/src/api/handlers/schema.ts +403 -1
  782. package/src/api/handlers/snapshot.ts +257 -3
  783. package/src/api/handlers/staged-references.ts +142 -0
  784. package/src/api/handlers/validate-references.ts +146 -0
  785. package/src/api/schemas/content.ts +13 -0
  786. package/src/api/schemas/relations.ts +54 -44
  787. package/src/api/schemas/schema.ts +14 -0
  788. package/src/astro/integration/routes.ts +15 -19
  789. package/src/astro/integration/vite-config.ts +10 -4
  790. package/src/astro/middleware.ts +1 -0
  791. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  792. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  793. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  794. package/src/astro/routes/api/relations/index.ts +4 -4
  795. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  796. package/src/astro/routes/api/setup/index.ts +66 -23
  797. package/src/astro/routes/api/snapshot.ts +2 -1
  798. package/src/astro/types.ts +10 -0
  799. package/src/cleanup.ts +10 -0
  800. package/src/cli/commands/export-seed.ts +510 -89
  801. package/src/components/Columns.astro +3 -1
  802. package/src/components/Cover.astro +3 -1
  803. package/src/components/WidgetArea.astro +3 -2
  804. package/src/database/migrations/086_relations_structural.ts +197 -0
  805. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  806. package/src/database/migrations/runner.ts +4 -0
  807. package/src/database/reference-backfill.ts +141 -0
  808. package/src/database/repositories/content.ts +43 -8
  809. package/src/database/repositories/media.ts +40 -1
  810. package/src/database/repositories/redirect.ts +17 -34
  811. package/src/database/repositories/relation.ts +620 -208
  812. package/src/database/repositories/revision.ts +16 -0
  813. package/src/database/repositories/types.ts +38 -0
  814. package/src/database/transaction.ts +12 -1
  815. package/src/database/types.ts +14 -5
  816. package/src/emdash-runtime.ts +114 -11
  817. package/src/index.ts +11 -0
  818. package/src/loader.ts +169 -22
  819. package/src/mcp/server.ts +13 -48
  820. package/src/query.ts +455 -25
  821. package/src/references/field-map.ts +115 -0
  822. package/src/references/resolve.ts +160 -0
  823. package/src/references/staged.ts +117 -0
  824. package/src/references/types.ts +16 -0
  825. package/src/registry/artifact-fetch.ts +45 -271
  826. package/src/schema/registry.ts +99 -24
  827. package/src/schema/types.ts +58 -0
  828. package/src/schema/zod-generator.ts +67 -1
  829. package/src/seed/apply.ts +841 -103
  830. package/src/seed/types.ts +36 -2
  831. package/src/seed/validate.ts +78 -2
  832. package/src/transfer/analyze/unique-keys.ts +3 -12
  833. package/src/transfer/analyze/validate.ts +65 -39
  834. package/src/transfer/analyze/values.ts +12 -1
  835. package/src/transfer/export/readers.ts +12 -8
  836. package/src/transfer/format/columns.ts +26 -6
  837. package/src/transfer/format/kinds.ts +21 -5
  838. package/src/transfer/import/context.ts +8 -1
  839. package/src/transfer/ops/package-index.ts +1 -1
  840. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  841. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  842. package/dist/activation-LOkDM5WT.mjs +0 -382
  843. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  844. package/dist/adapters-B64LbYcB.d.mts +0 -171
  845. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  846. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  847. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  848. package/dist/api-cFFZpyS0.mjs +0 -4718
  849. package/dist/api-cFFZpyS0.mjs.map +0 -1
  850. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  851. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  852. package/dist/apply-CoT603H3.mjs +0 -1163
  853. package/dist/apply-CoT603H3.mjs.map +0 -1
  854. package/dist/approvals-CqMfNxak.mjs +0 -460
  855. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  856. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  857. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  858. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  859. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  860. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  861. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  862. package/dist/audit-RfCugiSB.mjs +0 -127
  863. package/dist/audit-RfCugiSB.mjs.map +0 -1
  864. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  865. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  866. package/dist/authorize-seCifOMJ.mjs +0 -49
  867. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  868. package/dist/backup-CBu0LrXf.mjs +0 -246
  869. package/dist/backup-CBu0LrXf.mjs.map +0 -1
  870. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  871. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  872. package/dist/block-types-BmZmLmAD.mjs +0 -132
  873. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  874. package/dist/block-values-C_VIPr5t.mjs +0 -175
  875. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  876. package/dist/byline-DYmkXqvo.mjs +0 -909
  877. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  878. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  879. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  880. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  881. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  882. package/dist/bylines-BPwJqoYH.mjs +0 -232
  883. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  884. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  885. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  886. package/dist/cache-m7UEkRFV.mjs +0 -108
  887. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  888. package/dist/canonical-YhEQezjg.mjs +0 -174
  889. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  890. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  891. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  892. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  893. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  894. package/dist/checksum-B2IINIlN.mjs +0 -162
  895. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  896. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  897. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  898. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  899. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  900. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  901. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  902. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  903. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  904. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  905. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  906. package/dist/comment-CrBl22OF.mjs +0 -313
  907. package/dist/comment-CrBl22OF.mjs.map +0 -1
  908. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  909. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  910. package/dist/comments-2ah9du9y.mjs +0 -195
  911. package/dist/comments-2ah9du9y.mjs.map +0 -1
  912. package/dist/comments-fHZ8ON9O.mjs +0 -99
  913. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  914. package/dist/components-CXbq7CSM.mjs +0 -108
  915. package/dist/components-CXbq7CSM.mjs.map +0 -1
  916. package/dist/config-5ii2haYu.d.mts +0 -6528
  917. package/dist/config-5ii2haYu.d.mts.map +0 -1
  918. package/dist/config-IhybvkIQ.mjs +0 -242
  919. package/dist/config-IhybvkIQ.mjs.map +0 -1
  920. package/dist/config-Py43JK9r.d.mts +0 -39
  921. package/dist/config-Py43JK9r.d.mts.map +0 -1
  922. package/dist/content-DFaIEDj9.mjs +0 -2281
  923. package/dist/content-DFaIEDj9.mjs.map +0 -1
  924. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  925. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  926. package/dist/content-policy-DFNw91-d.mjs +0 -46
  927. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  928. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  929. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  930. package/dist/context-BeGccdUX.mjs +0 -1921
  931. package/dist/context-BeGccdUX.mjs.map +0 -1
  932. package/dist/cron-7DCJwPXq.mjs +0 -284
  933. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  934. package/dist/dashboard-DjrB-xxZ.mjs +0 -151
  935. package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
  936. package/dist/default-DQ6vsviu.mjs +0 -81
  937. package/dist/default-DQ6vsviu.mjs.map +0 -1
  938. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  939. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  940. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  941. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  942. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  943. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  944. package/dist/digest-BarSh-pN.mjs +0 -194
  945. package/dist/digest-BarSh-pN.mjs.map +0 -1
  946. package/dist/direct-executor-BmuFJJZV.mjs +0 -104
  947. package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
  948. package/dist/dist-BNwANFJR.mjs +0 -810
  949. package/dist/dist-BNwANFJR.mjs.map +0 -1
  950. package/dist/email-console-bJn3ctqA.mjs +0 -50
  951. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  952. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  953. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  954. package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
  955. package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
  956. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  957. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  958. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  959. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  960. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  961. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  962. package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
  963. package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
  964. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  965. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  966. package/dist/error-CfvOHP0M.mjs +0 -90
  967. package/dist/error-CfvOHP0M.mjs.map +0 -1
  968. package/dist/errors-BF0_LFhW.mjs +0 -460
  969. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  970. package/dist/errors-DgE1zJGG.mjs +0 -120
  971. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  972. package/dist/escape-CuaZhZvL.mjs +0 -9
  973. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  974. package/dist/fence-CMDXJYc_.mjs +0 -162
  975. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  976. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  977. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  978. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  979. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  980. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  981. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  982. package/dist/gc-DjKY0Ay1.mjs +0 -75
  983. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  984. package/dist/hash-SDAW6zC-.mjs +0 -37
  985. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  986. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  987. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  988. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  989. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  990. package/dist/hreflang-DMFBL2eb.mjs +0 -105
  991. package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
  992. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  993. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  994. package/dist/identity-IyNWwXr6.mjs +0 -35
  995. package/dist/identity-IyNWwXr6.mjs.map +0 -1
  996. package/dist/import-C3JZplWq.mjs +0 -2020
  997. package/dist/import-C3JZplWq.mjs.map +0 -1
  998. package/dist/index-D-hdtLe8.d.mts +0 -623
  999. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1000. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1001. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1002. package/dist/keys-yxLm5l35.mjs +0 -61
  1003. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1004. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1005. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1006. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1007. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1008. package/dist/load-XgJiE6_3.mjs +0 -28
  1009. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1010. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1011. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1012. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1013. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1014. package/dist/manifest-builder-B8zR-73J.mjs +0 -189
  1015. package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
  1016. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1017. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1018. package/dist/media-Pu1L6xir.mjs +0 -408
  1019. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1020. package/dist/media-Qp5S3eH3.mjs +0 -355
  1021. package/dist/media-Qp5S3eH3.mjs.map +0 -1
  1022. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1023. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1024. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1025. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1026. package/dist/media-h7tOiDLj.mjs +0 -221
  1027. package/dist/media-h7tOiDLj.mjs.map +0 -1
  1028. package/dist/media-url-jArBpzIG.mjs +0 -43
  1029. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1030. package/dist/media-usage-My-Vi-ex.mjs +0 -1629
  1031. package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
  1032. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1033. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1034. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1035. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1036. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1037. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1038. package/dist/menus-BM7BPLOb.mjs +0 -139
  1039. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1040. package/dist/menus-ITeAbcIF.mjs +0 -753
  1041. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1042. package/dist/menus-TsSGmSR4.mjs +0 -3608
  1043. package/dist/menus-TsSGmSR4.mjs.map +0 -1
  1044. package/dist/mime-ChLqYwDk.mjs +0 -36
  1045. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1046. package/dist/mode-CCuKXUci.mjs +0 -23
  1047. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1048. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1049. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1050. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1051. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1052. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1053. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1054. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1055. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1056. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1057. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1058. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1059. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1060. package/dist/options-SQCHQCPH.d.mts +0 -81
  1061. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1062. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1063. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1064. package/dist/parse-DY6OD1j_.mjs +0 -81
  1065. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1066. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1067. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1068. package/dist/paths-JxokKIbr.mjs +0 -77
  1069. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1070. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1071. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1072. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1073. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1074. package/dist/plan-xjcWrAah.mjs +0 -135
  1075. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1076. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1077. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1078. package/dist/policy-CUvwAARc.mjs +0 -45
  1079. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1080. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1081. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1082. package/dist/preview-CIUcPYr6.mjs +0 -107
  1083. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1084. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1085. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1086. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1087. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1088. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1089. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1090. package/dist/query-B48peoRT.mjs +0 -890
  1091. package/dist/query-B48peoRT.mjs.map +0 -1
  1092. package/dist/query-C4IH0uhR.mjs +0 -41
  1093. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1094. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1095. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1096. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1097. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1098. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1099. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1100. package/dist/redirect-iJf5fltD.mjs +0 -415
  1101. package/dist/redirect-iJf5fltD.mjs.map +0 -1
  1102. package/dist/redirects-CYu1u1aK.mjs +0 -446
  1103. package/dist/redirects-CYu1u1aK.mjs.map +0 -1
  1104. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1105. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1106. package/dist/relation-M4NUCb0b.mjs +0 -334
  1107. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1108. package/dist/relations-CCif47Oq.mjs +0 -403
  1109. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1110. package/dist/relations-CK9CYUyr.mjs +0 -310
  1111. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1112. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1113. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1114. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1115. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1116. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1117. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1118. package/dist/route-wire--1hLuACz.mjs +0 -197
  1119. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1120. package/dist/routes-CUsM40Cc.mjs +0 -272
  1121. package/dist/routes-CUsM40Cc.mjs.map +0 -1
  1122. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1123. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1124. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1125. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1126. package/dist/schema-BABiRdsH.mjs +0 -13
  1127. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1128. package/dist/schema-Du3MzCG0.mjs +0 -446
  1129. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1130. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1131. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1132. package/dist/search-Bt1PL1jf.mjs +0 -448
  1133. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1134. package/dist/sections-Ddptx_o9.mjs +0 -346
  1135. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1136. package/dist/seo-CZT2oLtT.mjs +0 -114
  1137. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1138. package/dist/seo-D5w3-Azy.mjs +0 -133
  1139. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1140. package/dist/service-DuykXPyW.mjs +0 -150
  1141. package/dist/service-DuykXPyW.mjs.map +0 -1
  1142. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1143. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1144. package/dist/settings-2xNYr90o.mjs +0 -51
  1145. package/dist/settings-2xNYr90o.mjs.map +0 -1
  1146. package/dist/settings-CgjRWGW9.mjs +0 -439
  1147. package/dist/settings-CgjRWGW9.mjs.map +0 -1
  1148. package/dist/settings-DYidIB26.mjs +0 -61
  1149. package/dist/settings-DYidIB26.mjs.map +0 -1
  1150. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1151. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1152. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1153. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1154. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1155. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1156. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1157. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1158. package/dist/snapshot-CugwUqKQ.mjs +0 -237
  1159. package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
  1160. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1161. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1162. package/dist/stage-DgrBz_du.mjs +0 -662
  1163. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1164. package/dist/state-DDiPySSG.mjs +0 -153
  1165. package/dist/state-DDiPySSG.mjs.map +0 -1
  1166. package/dist/status-DZKIG4a9.mjs +0 -30
  1167. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1168. package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
  1169. package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
  1170. package/dist/tar-_1AgTYFu.mjs +0 -449
  1171. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1172. package/dist/target-_7pn2Gbg.mjs +0 -27
  1173. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1174. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1175. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1176. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1177. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1178. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1179. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1180. package/dist/tokens-u78jETkX.mjs +0 -171
  1181. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1182. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1183. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1184. package/dist/transfer-BhUCrgDc.mjs +0 -8675
  1185. package/dist/transfer-BhUCrgDc.mjs.map +0 -1
  1186. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1187. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1188. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1189. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1190. package/dist/transformations-9gfpwY65.mjs +0 -196
  1191. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1192. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1193. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1194. package/dist/transport-DKWIq53q.mjs +0 -136
  1195. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1196. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1197. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1198. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1199. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1200. package/dist/types-B4sUC2p1.d.mts +0 -198
  1201. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1202. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1203. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1204. package/dist/types-BZakh7Ym.mjs +0 -22
  1205. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1206. package/dist/types-B_CppEmv.d.mts +0 -264
  1207. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1208. package/dist/types-BcrBrE6-.mjs +0 -159
  1209. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1210. package/dist/types-BkUg2yHx.mjs +0 -92
  1211. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1212. package/dist/types-CAZgq9fO.d.mts +0 -124
  1213. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1214. package/dist/types-Cd-O03VG.d.mts +0 -363
  1215. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1216. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1217. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1218. package/dist/types-D2fvWd1i.d.mts +0 -359
  1219. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1220. package/dist/types-D7HUsguf.mjs +0 -77
  1221. package/dist/types-D7HUsguf.mjs.map +0 -1
  1222. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1223. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1224. package/dist/types-DhV6Q5bP.mjs +0 -18
  1225. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1226. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1227. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1228. package/dist/types-VT4-BugW.mjs +0 -16
  1229. package/dist/types-VT4-BugW.mjs.map +0 -1
  1230. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1231. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1232. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1233. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1234. package/dist/user-DDSL-sGw.mjs +0 -171
  1235. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1236. package/dist/utils-DdhmO9w9.mjs +0 -439
  1237. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1238. package/dist/validate-CHosPEhs.mjs +0 -453
  1239. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1240. package/dist/validate-CM79QXYE.d.mts +0 -432
  1241. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1242. package/dist/validation-BFecQczG.mjs +0 -218
  1243. package/dist/validation-BFecQczG.mjs.map +0 -1
  1244. package/dist/version-BRZXVifl.mjs +0 -9
  1245. package/dist/version-BRZXVifl.mjs.map +0 -1
  1246. package/dist/version-DUQDHgrf.mjs +0 -7
  1247. package/dist/version-DUQDHgrf.mjs.map +0 -1
  1248. package/dist/widgets-WdV72brA.mjs +0 -126
  1249. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1250. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1251. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1252. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1253. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1254. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1255. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1256. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1257. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
  1258. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"stage-DgrBz_du.mjs","names":[],"sources":["../src/transfer/ops/operations.ts","../src/transfer/staging/stage.ts"],"sourcesContent":["/**\n * Transfer operation rows: creation, lease claims, and lease-fenced state\n * writes.\n *\n * Every step of a running operation happens under a lease: `claim` is one\n * `UPDATE … WHERE lease is free … RETURNING` statement that installs a fresh\n * ULID lease token, and every later write is fenced on that token and on the\n * lease still being live. A caller that loses its lease (expiry, another\n * caller took over) gets `TRANSFER_LEASE_LOST` and must stop without writing.\n */\n\nimport { sql, type Kysely, type Selectable, type UpdateObject } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport type { Database, TransferOperationTable } from \"../../database/types.js\";\nimport {\n\tTransferError,\n\ttransferErrorDetailSchema,\n\ttype TransferErrorCode,\n\ttype TransferErrorDetail,\n} from \"../errors.js\";\nimport { bumpRunningExportWriteEpochs } from \"../fence.js\";\nimport { isSha256Digest, type Sha256Digest } from \"../format/digest.js\";\nimport { TRANSFER_LIMITS } from \"../format/limits.js\";\nimport { siteImportReceiptSchema, type SiteImportReceipt } from \"../format/receipt.js\";\nimport {\n\tEXECUTING_IMPORT_STATES,\n\tisTransferOperationKind,\n\tisTransferOperationState,\n\tPRE_EXECUTION_IMPORT_STATES,\n\tTERMINAL_IMPORT_STATES,\n\tTRANSFER_RUNTIME_GENERATION,\n\ttransferCursorSchema,\n\ttransferProgressSchema,\n\ttype TransferCursor,\n\ttype TransferOperationKind,\n\ttype TransferOperationState,\n\ttype TransferProgress,\n} from \"./states.js\";\nimport {\n\ttimestampIsDue,\n\ttimestampIsLive,\n\ttimestampIsOlderThan,\n\ttimestampNow,\n\ttimestampOffset,\n} from \"./time.js\";\n\ntype OperationRow = Selectable<TransferOperationTable>;\ntype OperationUpdate = UpdateObject<Database, \"_emdash_transfer_operations\">;\n\nexport interface TransferOperation {\n\tid: string;\n\tkind: TransferOperationKind;\n\tstate: TransferOperationState;\n\tstage: string | null;\n\tcursor: TransferCursor | null;\n\tprogress: TransferProgress | null;\n\toptions: unknown;\n\tidempotencyKey: string | null;\n\tpackageDigest: Sha256Digest | null;\n\tplanDigest: Sha256Digest | null;\n\toriginSiteId: string | null;\n\t/**\n\t * 128-bit hex secret in the operation's staging prefix. Internal only:\n\t * serialize operations for clients with {@link toPublicOperation}.\n\t */\n\tstagingSecret: string;\n\treceipt: SiteImportReceipt | null;\n\terrorCode: string | null;\n\terrorDetail: TransferErrorDetail | null;\n\twriteEpoch: number;\n\tattemptCount: number;\n\tleaseToken: string | null;\n\tleaseExpiresAt: string | null;\n\truntimeGeneration: number;\n\tcancelRequestedAt: string | null;\n\tmutationStartedAt: string | null;\n\tcreatedBy: string;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tcompletedAt: string | null;\n\texpiresAt: string | null;\n\tstagingCollectedAt: string | null;\n}\n\n/**\n * An operation as it may be shown to API clients: without the staging secret\n * and lease token.\n */\nexport type PublicTransferOperation = Omit<TransferOperation, \"stagingSecret\" | \"leaseToken\">;\n\nexport function toPublicOperation(operation: TransferOperation): PublicTransferOperation {\n\tconst { stagingSecret: _secret, leaseToken: _lease, ...rest } = operation;\n\treturn rest;\n}\n\nexport interface CreateTransferOperationInput {\n\tkind: TransferOperationKind;\n\tcreatedBy: string;\n\tidempotencyKey?: string;\n\t/** For imports, the digest of the manifest the operation was created with. */\n\tpackageDigest?: Sha256Digest;\n\toriginSiteId?: string;\n\toptions?: unknown;\n\t/** Seconds until the operation expires if it does not finish. */\n\tttlSeconds?: number;\n}\n\nexport type ClaimResult =\n\t| { outcome: \"claimed\"; operation: TransferOperation; leaseToken: string }\n\t| { outcome: \"lease_active\"; operation: TransferOperation }\n\t| { outcome: \"invalid_state\"; operation: TransferOperation };\n\nexport interface OperationPatch {\n\tstate?: TransferOperationState;\n\tstage?: string | null;\n\tcursor?: TransferCursor | null;\n\tprogress?: TransferProgress | null;\n\tpackageDigest?: Sha256Digest;\n\tplanDigest?: Sha256Digest | null;\n\toriginSiteId?: string;\n\t/** Record that the importer is about to write to the target (idempotent). */\n\tmarkMutationStarted?: true;\n\t/** Reset `expires_at` to now + this many seconds. */\n\tttlSeconds?: number;\n\t/**\n\t * Record the retryable failure of the last step on a non-terminal\n\t * operation in `error_code`/`error_detail`, or clear it with null.\n\t */\n\tretryError?: { code: TransferErrorCode; detail?: TransferErrorDetail } | null;\n}\n\nconst MAX_IDEMPOTENCY_KEY_LENGTH = 255;\n\nfunction parseJson(value: string | null): unknown {\n\tif (value === null) return null;\n\treturn JSON.parse(value);\n}\n\nfunction toOperation(row: OperationRow): TransferOperation {\n\tconst { kind, state } = row;\n\tif (!isTransferOperationKind(kind) || !isTransferOperationState(state)) {\n\t\tthrow new TransferError(\"TRANSFER_INVALID_STATE\", \"Unknown transfer operation kind or state\");\n\t}\n\tconst cursor = parseJson(row.cursor);\n\tconst progress = parseJson(row.progress);\n\tconst receipt = parseJson(row.receipt);\n\tconst errorDetail = parseJson(row.error_detail);\n\treturn {\n\t\tid: row.id,\n\t\tkind,\n\t\tstate,\n\t\tstage: row.stage,\n\t\tcursor: cursor === null ? null : transferCursorSchema.parse(cursor),\n\t\tprogress: progress === null ? null : transferProgressSchema.parse(progress),\n\t\toptions: parseJson(row.options),\n\t\tidempotencyKey: row.idempotency_key,\n\t\tpackageDigest: isSha256Digest(row.package_digest) ? row.package_digest : null,\n\t\tplanDigest: isSha256Digest(row.plan_digest) ? row.plan_digest : null,\n\t\toriginSiteId: row.origin_site_id,\n\t\tstagingSecret: row.staging_secret,\n\t\treceipt: receipt === null ? null : siteImportReceiptSchema.parse(receipt),\n\t\terrorCode: row.error_code,\n\t\terrorDetail: errorDetail === null ? null : transferErrorDetailSchema.parse(errorDetail),\n\t\twriteEpoch: Number(row.write_epoch),\n\t\tattemptCount: Number(row.attempt_count),\n\t\tleaseToken: row.lease_token,\n\t\tleaseExpiresAt: row.lease_expires_at,\n\t\truntimeGeneration: Number(row.runtime_generation),\n\t\tcancelRequestedAt: row.cancel_requested_at,\n\t\tmutationStartedAt: row.mutation_started_at,\n\t\tcreatedBy: row.created_by,\n\t\tcreatedAt: row.created_at,\n\t\tupdatedAt: row.updated_at,\n\t\tcompletedAt: row.completed_at,\n\t\texpiresAt: row.expires_at,\n\t\tstagingCollectedAt: row.staging_collected_at,\n\t};\n}\n\nexport function createStagingSecret(): string {\n\tconst bytes = new Uint8Array(16);\n\tcrypto.getRandomValues(bytes);\n\treturn Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport class TransferOperationRepository {\n\tconstructor(private readonly db: Kysely<Database>) {}\n\n\tasync get(id: string): Promise<TransferOperation | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_transfer_operations\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? toOperation(row) : null;\n\t}\n\n\tasync require(id: string): Promise<TransferOperation> {\n\t\tconst operation = await this.get(id);\n\t\tif (!operation) {\n\t\t\tthrow new TransferError(\"TRANSFER_OPERATION_NOT_FOUND\", \"Transfer operation not found\");\n\t\t}\n\t\treturn operation;\n\t}\n\n\t/**\n\t * Create an operation, or return the existing one for the same\n\t * `(createdBy, kind, idempotencyKey)`. Throws\n\t * `TRANSFER_IDEMPOTENCY_CONFLICT` when that key was used with a different\n\t * package digest, and `TRANSFER_IMPORT_IN_PROGRESS` when another import\n\t * already occupies the target.\n\t */\n\tasync create(\n\t\tinput: CreateTransferOperationInput,\n\t): Promise<{ operation: TransferOperation; created: boolean }> {\n\t\tif (\n\t\t\tinput.idempotencyKey !== undefined &&\n\t\t\t(input.idempotencyKey.length === 0 ||\n\t\t\t\tinput.idempotencyKey.length > MAX_IDEMPOTENCY_KEY_LENGTH)\n\t\t) {\n\t\t\tthrow new TransferError(\"TRANSFER_IDEMPOTENCY_CONFLICT\", \"Invalid idempotency key\");\n\t\t}\n\n\t\tif (input.idempotencyKey !== undefined) {\n\t\t\tconst existing = await this.findByIdempotencyKey(input);\n\t\t\tif (existing) return { operation: existing, created: false };\n\t\t}\n\n\t\tconst id = ulid();\n\t\tconst inserted = await this.db\n\t\t\t.insertInto(\"_emdash_transfer_operations\")\n\t\t\t.values({\n\t\t\t\tid,\n\t\t\t\tkind: input.kind,\n\t\t\t\tstate: input.kind === \"export\" ? \"pending\" : \"uploading\",\n\t\t\t\tidempotency_key: input.idempotencyKey ?? null,\n\t\t\t\tpackage_digest: input.packageDigest ?? null,\n\t\t\t\torigin_site_id: input.originSiteId ?? null,\n\t\t\t\toptions: input.options === undefined ? null : JSON.stringify(input.options),\n\t\t\t\tstaging_secret: createStagingSecret(),\n\t\t\t\truntime_generation: TRANSFER_RUNTIME_GENERATION,\n\t\t\t\tcreated_by: input.createdBy,\n\t\t\t\texpires_at: timestampOffset(this.db, input.ttlSeconds ?? defaultTtl(input.kind)),\n\t\t\t\tstage: null,\n\t\t\t\tcursor: null,\n\t\t\t\tprogress: null,\n\t\t\t\tplan_digest: null,\n\t\t\t\treceipt: null,\n\t\t\t\terror_code: null,\n\t\t\t\terror_detail: null,\n\t\t\t\tlease_token: null,\n\t\t\t\tlease_expires_at: null,\n\t\t\t\tcancel_requested_at: null,\n\t\t\t\tmutation_started_at: null,\n\t\t\t\tcompleted_at: null,\n\t\t\t\tstaging_collected_at: null,\n\t\t\t})\n\t\t\t.onConflict((conflict) => conflict.doNothing())\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (inserted) return { operation: toOperation(inserted), created: true };\n\n\t\tif (input.idempotencyKey !== undefined) {\n\t\t\tconst existing = await this.findByIdempotencyKey(input);\n\t\t\tif (existing) return { operation: existing, created: false };\n\t\t}\n\t\tthrow new TransferError(\n\t\t\t\"TRANSFER_IMPORT_IN_PROGRESS\",\n\t\t\t\"Another import is already in progress on this site\",\n\t\t);\n\t}\n\n\tprivate async findByIdempotencyKey(\n\t\tinput: CreateTransferOperationInput,\n\t): Promise<TransferOperation | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_transfer_operations\")\n\t\t\t.selectAll()\n\t\t\t.where(\"created_by\", \"=\", input.createdBy)\n\t\t\t.where(\"kind\", \"=\", input.kind)\n\t\t\t.where(\"idempotency_key\", \"=\", input.idempotencyKey ?? \"\")\n\t\t\t.executeTakeFirst();\n\t\tif (!row) return null;\n\t\tif (\n\t\t\tinput.packageDigest !== undefined &&\n\t\t\trow.package_digest !== null &&\n\t\t\trow.package_digest !== input.packageDigest\n\t\t) {\n\t\t\tthrow new TransferError(\n\t\t\t\t\"TRANSFER_IDEMPOTENCY_CONFLICT\",\n\t\t\t\t\"Idempotency key was already used for a different package\",\n\t\t\t);\n\t\t}\n\t\treturn toOperation(row);\n\t}\n\n\t/** The import that currently occupies the target, if any. */\n\tasync findOccupyingImport(): Promise<TransferOperation | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_emdash_transfer_operations\")\n\t\t\t.selectAll()\n\t\t\t.where(\"kind\", \"=\", \"import\")\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"state\", \"in\", [...PRE_EXECUTION_IMPORT_STATES, ...EXECUTING_IMPORT_STATES]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"state\", \"in\", [\"failed\", \"cancelled\"]),\n\t\t\t\t\t\teb(\"mutation_started_at\", \"is not\", null),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? toOperation(row) : null;\n\t}\n\n\t/**\n\t * Take the operation's lease if it is in one of `states` and no live lease\n\t * exists. Throws `TRANSFER_OPERATION_NOT_FOUND`, or\n\t * `TRANSFER_RUNTIME_MISMATCH` when the row was written by an incompatible\n\t * runtime generation.\n\t */\n\tasync claim(\n\t\tid: string,\n\t\tstates: readonly TransferOperationState[],\n\t\toptions: { leaseSeconds?: number } = {},\n\t): Promise<ClaimResult> {\n\t\tconst leaseToken = ulid();\n\t\tconst now = timestampNow(this.db);\n\t\tconst row = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({\n\t\t\t\tlease_token: leaseToken,\n\t\t\t\tlease_expires_at: timestampOffset(\n\t\t\t\t\tthis.db,\n\t\t\t\t\toptions.leaseSeconds ?? TRANSFER_LIMITS.leaseSeconds,\n\t\t\t\t),\n\t\t\t\tattempt_count: sql<number>`attempt_count + 1`,\n\t\t\t\tupdated_at: now,\n\t\t\t})\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"state\", \"in\", [...states])\n\t\t\t.where(\"runtime_generation\", \"=\", TRANSFER_RUNTIME_GENERATION)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb(\"lease_expires_at\", \"is\", null),\n\t\t\t\t\ttimestampIsDue(this.db, \"lease_expires_at\"),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (row) return { outcome: \"claimed\", operation: toOperation(row), leaseToken };\n\n\t\tconst current = await this.require(id);\n\t\tif (current.runtimeGeneration !== TRANSFER_RUNTIME_GENERATION) {\n\t\t\tthrow new TransferError(\n\t\t\t\t\"TRANSFER_RUNTIME_MISMATCH\",\n\t\t\t\t\"Transfer operation was created by an incompatible EmDash version\",\n\t\t\t);\n\t\t}\n\t\tif (!states.includes(current.state)) return { outcome: \"invalid_state\", operation: current };\n\t\treturn { outcome: \"lease_active\", operation: current };\n\t}\n\n\t/**\n\t * Write state under the lease and extend it. Throws `TRANSFER_LEASE_LOST`\n\t * when the lease is gone.\n\t */\n\tasync advance(id: string, leaseToken: string, patch: OperationPatch): Promise<TransferOperation> {\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\t...this.patchValues(patch),\n\t\t\tlease_expires_at: timestampOffset(this.db, TRANSFER_LIMITS.leaseSeconds),\n\t\t});\n\t}\n\n\t/** Write state and give up the lease so the next step can claim it. */\n\tasync release(\n\t\tid: string,\n\t\tleaseToken: string,\n\t\tpatch: OperationPatch = {},\n\t): Promise<TransferOperation> {\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\t...this.patchValues(patch),\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t});\n\t}\n\n\t/**\n\t * Write `patch`, move to `state`, and give up the lease; when a cancel was\n\t * requested while the lease was held, move to `cancelled` instead. One\n\t * statement decides, so a cancel racing the release is never lost.\n\t */\n\tasync releaseUnlessCancelled(\n\t\tid: string,\n\t\tleaseToken: string,\n\t\tstate: TransferOperationState,\n\t\tpatch: Omit<OperationPatch, \"state\"> = {},\n\t): Promise<TransferOperation> {\n\t\tconst now = timestampNow(this.db);\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\t...this.patchValues(patch),\n\t\t\tstate: sql<string>`CASE WHEN cancel_requested_at IS NULL THEN ${state} ELSE 'cancelled' END`,\n\t\t\tcompleted_at: sql<\n\t\t\t\tstring | null\n\t\t\t>`CASE WHEN cancel_requested_at IS NULL THEN completed_at ELSE ${now} END`,\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t});\n\t}\n\n\tasync complete(\n\t\tid: string,\n\t\tleaseToken: string,\n\t\tresult: { receipt?: SiteImportReceipt; ttlSeconds?: number; progress?: TransferProgress } = {},\n\t): Promise<TransferOperation> {\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\tstate: \"complete\",\n\t\t\treceipt: result.receipt === undefined ? undefined : JSON.stringify(result.receipt),\n\t\t\tprogress: result.progress === undefined ? undefined : JSON.stringify(result.progress),\n\t\t\tcompleted_at: timestampNow(this.db),\n\t\t\texpires_at:\n\t\t\t\tresult.ttlSeconds === undefined ? undefined : timestampOffset(this.db, result.ttlSeconds),\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t});\n\t}\n\n\tasync fail(\n\t\tid: string,\n\t\tleaseToken: string,\n\t\terror: { code: TransferErrorCode; detail?: TransferErrorDetail },\n\t): Promise<TransferOperation> {\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\tstate: \"failed\",\n\t\t\terror_code: error.code,\n\t\t\terror_detail: error.detail === undefined ? null : JSON.stringify(error.detail),\n\t\t\tcompleted_at: timestampNow(this.db),\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t});\n\t}\n\n\t/** Finish a cancellation the lease holder observed via `cancelRequestedAt`. */\n\tasync finishCancelled(id: string, leaseToken: string): Promise<TransferOperation> {\n\t\treturn this.fencedUpdate(id, leaseToken, {\n\t\t\tstate: \"cancelled\",\n\t\t\tcompleted_at: timestampNow(this.db),\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t});\n\t}\n\n\t/**\n\t * Cancel an import. Without a live lease the operation becomes `cancelled`\n\t * immediately; otherwise `cancel_requested_at` is set and the lease holder\n\t * stops after its current batch. Returns the updated operation.\n\t */\n\tasync requestCancel(id: string): Promise<TransferOperation> {\n\t\tconst cancellable = [...PRE_EXECUTION_IMPORT_STATES, ...EXECUTING_IMPORT_STATES];\n\t\tconst now = timestampNow(this.db);\n\t\tconst immediate = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({\n\t\t\t\tstate: \"cancelled\",\n\t\t\t\tcancel_requested_at: now,\n\t\t\t\tcompleted_at: now,\n\t\t\t\tupdated_at: now,\n\t\t\t\tlease_token: null,\n\t\t\t\tlease_expires_at: null,\n\t\t\t})\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"kind\", \"=\", \"import\")\n\t\t\t.where(\"state\", \"in\", cancellable)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb(\"lease_expires_at\", \"is\", null),\n\t\t\t\t\ttimestampIsDue(this.db, \"lease_expires_at\"),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (immediate) return toOperation(immediate);\n\n\t\tconst flagged = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({ cancel_requested_at: now, updated_at: now })\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"kind\", \"=\", \"import\")\n\t\t\t.where(\"state\", \"in\", cancellable)\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (flagged) return toOperation(flagged);\n\n\t\tawait this.require(id);\n\t\tthrow new TransferError(\"TRANSFER_INVALID_STATE\", \"Transfer operation cannot be cancelled\");\n\t}\n\n\t/**\n\t * Mark a failed or cancelled import abandoned. Lifts the write fence; never\n\t * deletes imported data.\n\t */\n\tasync abandon(id: string): Promise<TransferOperation> {\n\t\tconst now = timestampNow(this.db);\n\t\tconst row = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({ state: \"abandoned\", updated_at: now })\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"kind\", \"=\", \"import\")\n\t\t\t.where(\"state\", \"in\", [\"failed\", \"cancelled\"])\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb(\"lease_expires_at\", \"is\", null),\n\t\t\t\t\ttimestampIsDue(this.db, \"lease_expires_at\"),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (row) return toOperation(row);\n\t\tawait this.require(id);\n\t\tthrow new TransferError(\n\t\t\t\"TRANSFER_INVALID_STATE\",\n\t\t\t\"Only a failed or cancelled import can be abandoned\",\n\t\t);\n\t}\n\n\t/**\n\t * Move operations past their `expires_at` to `expired` (pre-execution\n\t * imports and every non-expired export) when no live lease holds them.\n\t * Returns the expired operations so their staging can be collected.\n\t */\n\tasync expireDue(\n\t\tlimit = 50,\n\t): Promise<Array<Pick<TransferOperation, \"id\" | \"kind\" | \"stagingSecret\">>> {\n\t\tconst candidates = await this.db\n\t\t\t.selectFrom(\"_emdash_transfer_operations\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"expires_at\", \"is not\", null)\n\t\t\t.where(timestampIsDue(this.db, \"expires_at\"))\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"kind\", \"=\", \"import\"),\n\t\t\t\t\t\teb(\"state\", \"in\", [...PRE_EXECUTION_IMPORT_STATES]),\n\t\t\t\t\t\teb(\"mutation_started_at\", \"is\", null),\n\t\t\t\t\t]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"kind\", \"=\", \"export\"),\n\t\t\t\t\t\teb(\"state\", \"in\", [\"pending\", \"running\", \"complete\", \"failed\"]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb(\"lease_expires_at\", \"is\", null),\n\t\t\t\t\ttimestampIsDue(this.db, \"lease_expires_at\"),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.orderBy(\"expires_at\")\n\t\t\t.limit(limit)\n\t\t\t.execute();\n\t\tif (candidates.length === 0) return [];\n\t\tconst now = timestampNow(this.db);\n\t\tconst rows = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({ state: \"expired\", updated_at: now, lease_token: null, lease_expires_at: null })\n\t\t\t.where(\n\t\t\t\t\"id\",\n\t\t\t\t\"in\",\n\t\t\t\tcandidates.map((candidate) => candidate.id),\n\t\t\t)\n\t\t\t.where(timestampIsDue(this.db, \"expires_at\"))\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"kind\", \"=\", \"import\"),\n\t\t\t\t\t\teb(\"state\", \"in\", [...PRE_EXECUTION_IMPORT_STATES]),\n\t\t\t\t\t\teb(\"mutation_started_at\", \"is\", null),\n\t\t\t\t\t]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"kind\", \"=\", \"export\"),\n\t\t\t\t\t\teb(\"state\", \"in\", [\"pending\", \"running\", \"complete\", \"failed\"]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.returning([\"id\", \"kind\", \"staging_secret\"])\n\t\t\t.execute();\n\t\treturn rows.flatMap((row) =>\n\t\t\tisTransferOperationKind(row.kind)\n\t\t\t\t? [{ id: row.id, kind: row.kind, stagingSecret: row.staging_secret }]\n\t\t\t\t: [],\n\t\t);\n\t}\n\n\t/**\n\t * Operations whose staging area can be collected and has not been yet:\n\t * imports in a terminal state, and exports that failed or expired\n\t * (complete exports stay downloadable until they expire). Oldest first.\n\t * A collector deletes staged objects with `TransferStage.deleteSome` until\n\t * it returns 0, deletes child rows with {@link deleteChildRows} until it\n\t * returns 0, then calls {@link markCollected}; a crash anywhere in between\n\t * leaves the operation listed here, so collection resumes.\n\t *\n\t * `importRetentionSeconds` keeps a finished import's staging for that long\n\t * after its last state change; expired imports are listed at once.\n\t */\n\tasync listUncollected(\n\t\tlimit = 20,\n\t\toptions: { importRetentionSeconds?: number } = {},\n\t): Promise<Array<Pick<TransferOperation, \"id\" | \"kind\" | \"state\" | \"stagingSecret\">>> {\n\t\tconst retention = options.importRetentionSeconds ?? 0;\n\t\tconst retainedStates = TERMINAL_IMPORT_STATES.filter((state) => state !== \"expired\");\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"_emdash_transfer_operations\")\n\t\t\t.select([\"id\", \"kind\", \"state\", \"staging_secret\"])\n\t\t\t.where(\"staging_collected_at\", \"is\", null)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb.and([eb(\"kind\", \"=\", \"import\"), eb(\"state\", \"=\", \"expired\")]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"kind\", \"=\", \"import\"),\n\t\t\t\t\t\teb(\"state\", \"in\", retainedStates),\n\t\t\t\t\t\ttimestampIsOlderThan(this.db, \"updated_at\", retention),\n\t\t\t\t\t]),\n\t\t\t\t\teb.and([eb(\"kind\", \"=\", \"export\"), eb(\"state\", \"in\", [\"failed\", \"expired\"])]),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb(\"lease_expires_at\", \"is\", null),\n\t\t\t\t\ttimestampIsDue(this.db, \"lease_expires_at\"),\n\t\t\t\t]),\n\t\t\t)\n\t\t\t.orderBy(\"updated_at\")\n\t\t\t.orderBy(\"id\")\n\t\t\t.limit(Math.min(Math.max(limit, 1), 100))\n\t\t\t.execute();\n\t\treturn rows.flatMap((row) =>\n\t\t\tisTransferOperationKind(row.kind) && isTransferOperationState(row.state)\n\t\t\t\t? [{ id: row.id, kind: row.kind, state: row.state, stagingSecret: row.staging_secret }]\n\t\t\t\t: [],\n\t\t);\n\t}\n\n\t/** Record that an operation's staging area and child rows are gone. */\n\tasync markCollected(id: string): Promise<void> {\n\t\tawait this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({ staging_collected_at: timestampNow(this.db) })\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"staging_collected_at\", \"is\", null)\n\t\t\t.execute();\n\t}\n\n\t/**\n\t * Delete up to `limit` child rows of each child table of an operation\n\t * (staged files, package index, media blobs), one bounded statement per\n\t * table. Returns the number deleted; call until it returns 0. Always drain\n\t * children this way before deleting an operation row: an `ON DELETE\n\t * CASCADE` over millions of child rows in one statement exceeds D1's\n\t * limits.\n\t */\n\tasync deleteChildRows(operationId: string, limit = 500): Promise<number> {\n\t\tconst bounded = Math.min(Math.max(Math.trunc(limit), 1), 5000);\n\t\tconst staged = await sql`\n\t\t\tDELETE FROM _emdash_transfer_staged_files\n\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\tAND path IN (\n\t\t\t\t\tSELECT path FROM _emdash_transfer_staged_files\n\t\t\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\t\tLIMIT ${bounded}\n\t\t\t\t)\n\t\t`.execute(this.db);\n\t\tconst indexed = await sql`\n\t\t\tDELETE FROM _emdash_transfer_package_index\n\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\tAND (kind, id) IN (\n\t\t\t\t\tSELECT kind, id FROM _emdash_transfer_package_index\n\t\t\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\t\tLIMIT ${bounded}\n\t\t\t\t)\n\t\t`.execute(this.db);\n\t\tconst blobs = await sql`\n\t\t\tDELETE FROM _emdash_transfer_media_blobs\n\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\tAND media_id IN (\n\t\t\t\t\tSELECT media_id FROM _emdash_transfer_media_blobs\n\t\t\t\t\tWHERE operation_id = ${operationId}\n\t\t\t\t\tLIMIT ${bounded}\n\t\t\t\t)\n\t\t`.execute(this.db);\n\t\treturn [staged, indexed, blobs].reduce(\n\t\t\t(sum, result) => sum + Number(result.numAffectedRows ?? 0n),\n\t\t\t0,\n\t\t);\n\t}\n\n\t/**\n\t * Delete a collected operation row once it has no child rows left.\n\t * Returns false, deleting nothing, otherwise. Identity-map rows are kept.\n\t */\n\tasync deleteIfChildless(id: string): Promise<boolean> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"_emdash_transfer_operations\")\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"staging_collected_at\", \"is not\", null)\n\t\t\t.where((eb) =>\n\t\t\t\teb.and([\n\t\t\t\t\teb.not(\n\t\t\t\t\t\teb.exists(\n\t\t\t\t\t\t\teb\n\t\t\t\t\t\t\t\t.selectFrom(\"_emdash_transfer_staged_files\")\n\t\t\t\t\t\t\t\t.select(\"path\")\n\t\t\t\t\t\t\t\t.where(\"_emdash_transfer_staged_files.operation_id\", \"=\", id),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\teb.not(\n\t\t\t\t\t\teb.exists(\n\t\t\t\t\t\t\teb\n\t\t\t\t\t\t\t\t.selectFrom(\"_emdash_transfer_package_index\")\n\t\t\t\t\t\t\t\t.select(\"kind\")\n\t\t\t\t\t\t\t\t.where(\"_emdash_transfer_package_index.operation_id\", \"=\", id),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\teb.not(\n\t\t\t\t\t\teb.exists(\n\t\t\t\t\t\t\teb\n\t\t\t\t\t\t\t\t.selectFrom(\"_emdash_transfer_media_blobs\")\n\t\t\t\t\t\t\t\t.select(\"media_id\")\n\t\t\t\t\t\t\t\t.where(\"_emdash_transfer_media_blobs.operation_id\", \"=\", id),\n\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.executeTakeFirst();\n\t\treturn Number(result.numDeletedRows ?? 0n) > 0;\n\t}\n\n\t/**\n\t * Bump `write_epoch` on every running export. Fenced write paths call this\n\t * so an export's consistency fence notices writes to tables that have no\n\t * `updated_at`. Returns the number of exports touched.\n\t */\n\tasync recordWriteForRunningExports(): Promise<number> {\n\t\treturn bumpRunningExportWriteEpochs(this.db);\n\t}\n\n\t/** Operations newest first, `{ items, nextCursor }` over `(created_at, id)`. */\n\tasync list(\n\t\toptions: {\n\t\t\tkind?: TransferOperationKind;\n\t\t\tcreatedBy?: string;\n\t\t\tlimit?: number;\n\t\t\tcursor?: { createdAt: string; id: string };\n\t\t} = {},\n\t): Promise<{ items: PublicTransferOperation[]; next?: { createdAt: string; id: string } }> {\n\t\tconst limit = Math.min(Math.max(options.limit ?? 50, 1), 100);\n\t\tlet query = this.db.selectFrom(\"_emdash_transfer_operations\").selectAll();\n\t\tif (options.kind) query = query.where(\"kind\", \"=\", options.kind);\n\t\tif (options.createdBy) query = query.where(\"created_by\", \"=\", options.createdBy);\n\t\tconst cursor = options.cursor;\n\t\tif (cursor) {\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"created_at\", \"<\", cursor.createdAt),\n\t\t\t\t\teb.and([eb(\"created_at\", \"=\", cursor.createdAt), eb(\"id\", \"<\", cursor.id)]),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\t\tconst rows = await query\n\t\t\t.orderBy(\"created_at\", \"desc\")\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(limit + 1)\n\t\t\t.execute();\n\t\tconst items = rows.slice(0, limit).map((row) => toPublicOperation(toOperation(row)));\n\t\tconst last = items.at(-1);\n\t\treturn rows.length > limit && last\n\t\t\t? { items, next: { createdAt: last.createdAt, id: last.id } }\n\t\t\t: { items };\n\t}\n\n\tprivate patchValues(patch: OperationPatch): OperationUpdate {\n\t\tconst values: OperationUpdate = {};\n\t\tif (patch.state !== undefined) values.state = patch.state;\n\t\tif (patch.stage !== undefined) values.stage = patch.stage;\n\t\tif (patch.cursor !== undefined) {\n\t\t\tvalues.cursor =\n\t\t\t\tpatch.cursor === null ? null : JSON.stringify(transferCursorSchema.parse(patch.cursor));\n\t\t}\n\t\tif (patch.progress !== undefined) {\n\t\t\tvalues.progress =\n\t\t\t\tpatch.progress === null\n\t\t\t\t\t? null\n\t\t\t\t\t: JSON.stringify(transferProgressSchema.parse(patch.progress));\n\t\t}\n\t\tif (patch.packageDigest !== undefined) values.package_digest = patch.packageDigest;\n\t\tif (patch.planDigest !== undefined) values.plan_digest = patch.planDigest;\n\t\tif (patch.originSiteId !== undefined) values.origin_site_id = patch.originSiteId;\n\t\tif (patch.markMutationStarted) {\n\t\t\tvalues.mutation_started_at = sql<string>`COALESCE(mutation_started_at, ${timestampNow(this.db)})`;\n\t\t}\n\t\tif (patch.ttlSeconds !== undefined)\n\t\t\tvalues.expires_at = timestampOffset(this.db, patch.ttlSeconds);\n\t\tif (patch.retryError !== undefined) {\n\t\t\tvalues.error_code = patch.retryError?.code ?? null;\n\t\t\tvalues.error_detail =\n\t\t\t\tpatch.retryError?.detail === undefined ? null : JSON.stringify(patch.retryError.detail);\n\t\t}\n\t\treturn values;\n\t}\n\n\tprivate async fencedUpdate(\n\t\tid: string,\n\t\tleaseToken: string,\n\t\tvalues: OperationUpdate,\n\t): Promise<TransferOperation> {\n\t\tconst row = await this.db\n\t\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t\t.set({ ...values, updated_at: timestampNow(this.db) })\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.where(\"lease_token\", \"=\", leaseToken)\n\t\t\t.where(\"lease_expires_at\", \"is not\", null)\n\t\t\t.where(timestampIsLive(this.db, \"lease_expires_at\"))\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\t\tif (!row) {\n\t\t\tthrow new TransferError(\"TRANSFER_LEASE_LOST\", \"Transfer operation lease was lost\");\n\t\t}\n\t\treturn toOperation(row);\n\t}\n}\n\nfunction defaultTtl(kind: TransferOperationKind): number {\n\treturn kind === \"export\"\n\t\t? TRANSFER_LIMITS.exportTtlSeconds\n\t\t: TRANSFER_LIMITS.pendingImportTtlSeconds;\n}\n","/**\n * Byte-level access to one operation's staging area.\n */\n\nimport type { DownloadResult, Storage } from \"../../storage/types.js\";\nimport { TransferError, isTransferError } from \"../errors.js\";\nimport { createHashingStream, createSha256 } from \"../format/digest.js\";\nimport { stagingAuxKey, stagingKey, type StagingAuxFile } from \"./keys.js\";\n\ntype FixedLengthStreamConstructor = new (\n\texpectedLength: number | bigint,\n) => TransformStream<ArrayBufferView | ArrayBuffer, Uint8Array>;\n\ndeclare const FixedLengthStream: FixedLengthStreamConstructor | undefined;\n\nexport interface ExpectedFile {\n\tbytes: number;\n\t/** Lowercase hex SHA-256. */\n\tsha256: string;\n}\n\nexport interface PutVerifiedOptions {\n\tcontentType?: string;\n\t/**\n\t * Called before deleting the object after a failed upload; return true to\n\t * keep it (the path was already verified by another upload).\n\t */\n\tkeepExistingOnFailure?: () => Promise<boolean>;\n}\n\nconst PACKAGE_CONTENT_TYPE = \"application/octet-stream\";\n\nfunction oversizeError(): TransferError {\n\treturn new TransferError(\"TRANSFER_FILE_SIZE_MISMATCH\", \"File is larger than declared\");\n}\n\nfunction toStream(body: ReadableStream<Uint8Array> | Uint8Array): ReadableStream<Uint8Array> {\n\tif (body instanceof Uint8Array) {\n\t\treturn new ReadableStream<Uint8Array>({\n\t\t\tstart(controller) {\n\t\t\t\tif (body.byteLength > 0) controller.enqueue(body);\n\t\t\t\tcontroller.close();\n\t\t\t},\n\t\t});\n\t}\n\treturn body;\n}\n\n/**\n * Stream `body` into `key`, hashing and counting as it goes. The object is\n * kept only if exactly `expected.bytes` bytes with digest `expected.sha256`\n * were written; otherwise it is deleted and `TRANSFER_FILE_SIZE_MISMATCH` or\n * `TRANSFER_FILE_DIGEST_MISMATCH` is thrown. Where the runtime provides\n * `FixedLengthStream` (workerd), the upload is wrapped in one so R2 receives\n * a known length.\n *\n * Callers staging a package file must check its staged-files row first and\n * refuse the upload when it is already `verified` and its object still\n * matches, and must pass `keepExistingOnFailure` returning true once the row\n * is verified: a failed retry or concurrent upload of the same path must not\n * delete the object a successful upload stored. A failing upload that\n * already overwrote the object can still leave bad bytes behind a verified\n * row, so readers verify sizes and digests again when they read staged\n * files, and a later upload of that path replaces the bad object.\n */\nexport async function putVerified(\n\tstorage: Storage,\n\tkey: string,\n\tbody: ReadableStream<Uint8Array> | Uint8Array,\n\texpected: ExpectedFile,\n\toptions: PutVerifiedOptions = {},\n): Promise<void> {\n\tconst discard = async () => {\n\t\tif (options.keepExistingOnFailure && (await options.keepExistingOnFailure())) return;\n\t\tawait storage.delete(key).catch(() => undefined);\n\t};\n\tif (!Number.isSafeInteger(expected.bytes) || expected.bytes < 0) {\n\t\tthrow new TransferError(\"TRANSFER_FILE_SIZE_MISMATCH\", \"Invalid declared size\");\n\t}\n\tconst hasher = await createSha256();\n\tconst hashing = createHashingStream(hasher, {\n\t\tmaxBytes: expected.bytes,\n\t\tonLimitExceeded: oversizeError,\n\t});\n\tlet stream = toStream(body).pipeThrough(hashing.stream);\n\tif (typeof FixedLengthStream !== \"undefined\") {\n\t\tstream = stream.pipeThrough(new FixedLengthStream(expected.bytes));\n\t}\n\n\ttry {\n\t\tawait storage.upload({\n\t\t\tkey,\n\t\t\tbody: stream,\n\t\t\tcontentType: options.contentType ?? PACKAGE_CONTENT_TYPE,\n\t\t});\n\t} catch (error) {\n\t\tawait discard();\n\t\tif (isTransferError(error)) throw error;\n\t\tconst cause = findTransferError(error);\n\t\tif (cause) throw cause;\n\t\tif (hashing.bytes() !== expected.bytes) {\n\t\t\tthrow new TransferError(\"TRANSFER_FILE_SIZE_MISMATCH\", \"File size does not match\", {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tthrow new TransferError(\"TRANSFER_STORAGE_ERROR\", \"Failed to store file\", { cause: error });\n\t}\n\n\tconst digest = await hasher.digest();\n\tif (hashing.bytes() !== expected.bytes) {\n\t\tawait discard();\n\t\tthrow new TransferError(\"TRANSFER_FILE_SIZE_MISMATCH\", \"File size does not match\", {\n\t\t\tdetail: { expected: expected.bytes, actual: hashing.bytes() },\n\t\t});\n\t}\n\tif (digest !== expected.sha256) {\n\t\tawait discard();\n\t\tthrow new TransferError(\"TRANSFER_FILE_DIGEST_MISMATCH\", \"File digest does not match\");\n\t}\n}\n\nfunction findTransferError(error: unknown): TransferError | null {\n\tlet current: unknown = error;\n\tfor (let depth = 0; depth < 5 && current instanceof Error; depth++) {\n\t\tif (current instanceof TransferError) return current;\n\t\tcurrent = current.cause;\n\t}\n\treturn null;\n}\n\n/** Read a whole stream, failing once it exceeds `maxBytes`. */\nexport async function readStreamBytes(\n\tstream: ReadableStream<Uint8Array>,\n\tmaxBytes: number,\n): Promise<Uint8Array> {\n\tconst reader = stream.getReader();\n\tconst parts: Uint8Array[] = [];\n\tlet total = 0;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\ttotal += value.byteLength;\n\t\t\tif (total > maxBytes) {\n\t\t\t\tthrow new TransferError(\"TRANSFER_LIMIT_EXCEEDED\", \"File exceeds its size limit\", {\n\t\t\t\t\tdetail: { limit: maxBytes },\n\t\t\t\t});\n\t\t\t}\n\t\t\tparts.push(value);\n\t\t}\n\t} catch (error) {\n\t\tawait reader.cancel().catch(() => undefined);\n\t\tthrow error;\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\tconst bytes = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const part of parts) {\n\t\tbytes.set(part, offset);\n\t\toffset += part.byteLength;\n\t}\n\treturn bytes;\n}\n\n/** One operation's staging area in `storage` under `prefix` (see keys.ts). */\nexport class TransferStage {\n\tconstructor(\n\t\treadonly storage: Storage,\n\t\treadonly prefix: string,\n\t) {}\n\n\tkeyFor(path: string): string {\n\t\treturn stagingKey(this.prefix, path);\n\t}\n\n\tasync putVerified(\n\t\tpath: string,\n\t\tbody: ReadableStream<Uint8Array> | Uint8Array,\n\t\tbytes: number,\n\t\tsha256: string,\n\t\toptions: PutVerifiedOptions = {},\n\t): Promise<void> {\n\t\tawait putVerified(this.storage, this.keyFor(path), body, { bytes, sha256 }, options);\n\t}\n\n\tasync exists(path: string): Promise<boolean> {\n\t\treturn this.storage.exists(this.keyFor(path));\n\t}\n\n\tasync open(path: string): Promise<DownloadResult> {\n\t\ttry {\n\t\t\treturn await this.storage.download(this.keyFor(path));\n\t\t} catch (error) {\n\t\t\tthrow new TransferError(\"TRANSFER_FILE_MISSING\", \"Staged file is missing\", {\n\t\t\t\tdetail: { path },\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync readBytes(path: string, maxBytes: number): Promise<Uint8Array> {\n\t\tconst file = await this.open(path);\n\t\treturn readStreamBytes(file.body, maxBytes);\n\t}\n\n\tasync putAux(file: StagingAuxFile, content: string): Promise<void> {\n\t\tawait this.storage.upload({\n\t\t\tkey: stagingAuxKey(this.prefix, file),\n\t\t\tbody: new TextEncoder().encode(content),\n\t\t\tcontentType: \"application/json\",\n\t\t});\n\t}\n\n\tasync readAux(file: StagingAuxFile, maxBytes: number): Promise<string | null> {\n\t\tconst key = stagingAuxKey(this.prefix, file);\n\t\tif (!(await this.storage.exists(key))) return null;\n\t\tconst download = await this.storage.download(key);\n\t\treturn new TextDecoder().decode(await readStreamBytes(download.body, maxBytes));\n\t}\n\n\t/**\n\t * Delete up to `limit` staged objects. Returns the number deleted; call\n\t * again until it returns 0.\n\t */\n\tasync deleteSome(limit = 100): Promise<number> {\n\t\tconst listing = await this.storage.list({ prefix: this.prefix, limit });\n\t\tfor (const file of listing.files) await this.storage.delete(file.key);\n\t\treturn listing.files.length;\n\t}\n}\n"],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- //#region src/plugins/state.ts
2
- const TIMEZONE_SUFFIX = /(?:z|[+-]\d{2}(?::?\d{2})?)$/i;
3
- const HOUR_OFFSET_SUFFIX = /\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?[+-]\d{2}$/i;
4
- function parseDatabaseTimestamp(value) {
5
- let normalized = value.trim().replace(" ", "T");
6
- if (HOUR_OFFSET_SUFFIX.test(normalized)) normalized += ":00";
7
- else if (!TIMEZONE_SUFFIX.test(normalized)) normalized += "Z";
8
- return new Date(normalized);
9
- }
10
- function toPluginStatus(value) {
11
- if (value === "active") return "active";
12
- return "inactive";
13
- }
14
- function toPluginSource(value) {
15
- if (value === "marketplace") return "marketplace";
16
- if (value === "registry") return "registry";
17
- return "config";
18
- }
19
- /**
20
- * Repository for plugin state in the database
21
- */
22
- var PluginStateRepository = class {
23
- constructor(db) {
24
- this.db = db;
25
- }
26
- /**
27
- * Get state for a specific plugin
28
- */
29
- async get(pluginId) {
30
- const row = await this.db.selectFrom("_plugin_state").selectAll().where("plugin_id", "=", pluginId).executeTakeFirst();
31
- if (!row) return null;
32
- return rowToPluginState(row);
33
- }
34
- /**
35
- * Get all plugin states
36
- */
37
- async getAll() {
38
- return (await this.db.selectFrom("_plugin_state").selectAll().execute()).map(rowToPluginState);
39
- }
40
- /**
41
- * Get all marketplace-installed plugin states
42
- */
43
- async getMarketplacePlugins() {
44
- return (await this.db.selectFrom("_plugin_state").selectAll().where("source", "=", "marketplace").execute()).map(rowToPluginState);
45
- }
46
- /**
47
- * Get all registry-installed plugin states.
48
- *
49
- * The runtime's registry sync path uses this to discover which
50
- * registry plugins should be loaded into the sandbox on this worker.
51
- */
52
- async getRegistryPlugins() {
53
- return (await this.db.selectFrom("_plugin_state").selectAll().where("source", "=", "registry").execute()).map(rowToPluginState);
54
- }
55
- /**
56
- * Create or update plugin state
57
- */
58
- async upsert(pluginId, version, status, opts) {
59
- const now = (/* @__PURE__ */ new Date()).toISOString();
60
- const existing = await this.get(pluginId);
61
- if (existing) {
62
- const updates = {
63
- status,
64
- version
65
- };
66
- if (status === "active" && existing.status !== "active") updates.activated_at = now;
67
- else if (status === "inactive" && existing.status !== "inactive") updates.deactivated_at = now;
68
- if (opts?.source) updates.source = opts.source;
69
- if (opts?.marketplaceVersion !== void 0) updates.marketplace_version = opts.marketplaceVersion;
70
- if (opts?.displayName !== void 0) updates.display_name = opts.displayName;
71
- if (opts?.description !== void 0) updates.description = opts.description;
72
- if (opts?.registryPublisherDid !== void 0) updates.registry_publisher_did = opts.registryPublisherDid;
73
- if (opts?.registrySlug !== void 0) updates.registry_slug = opts.registrySlug;
74
- if (opts?.mcpToolsEnabled !== void 0) updates.mcp_tools_enabled = opts.mcpToolsEnabled ? 1 : 0;
75
- if (opts?.mcpToolsConsent !== void 0) updates.mcp_tools_consent = opts.mcpToolsConsent;
76
- await this.db.updateTable("_plugin_state").set(updates).where("plugin_id", "=", pluginId).execute();
77
- } else await this.db.insertInto("_plugin_state").values({
78
- plugin_id: pluginId,
79
- status,
80
- version,
81
- installed_at: now,
82
- activated_at: status === "active" ? now : null,
83
- deactivated_at: null,
84
- data: null,
85
- source: opts?.source ?? "config",
86
- marketplace_version: opts?.marketplaceVersion ?? null,
87
- display_name: opts?.displayName ?? null,
88
- description: opts?.description ?? null,
89
- registry_publisher_did: opts?.registryPublisherDid ?? null,
90
- registry_slug: opts?.registrySlug ?? null,
91
- mcp_tools_enabled: opts?.mcpToolsEnabled ? 1 : 0,
92
- mcp_tools_consent: opts?.mcpToolsConsent ?? null
93
- }).execute();
94
- return await this.get(pluginId);
95
- }
96
- async restoreIfVersion(expectedVersion, state) {
97
- return ((await this.db.updateTable("_plugin_state").set({
98
- version: state.version,
99
- status: state.status,
100
- installed_at: state.installedAt.toISOString(),
101
- activated_at: state.activatedAt?.toISOString() ?? null,
102
- deactivated_at: state.deactivatedAt?.toISOString() ?? null,
103
- source: state.source,
104
- marketplace_version: state.marketplaceVersion,
105
- display_name: state.displayName,
106
- description: state.description,
107
- registry_publisher_did: state.registryPublisherDid,
108
- registry_slug: state.registrySlug,
109
- mcp_tools_enabled: state.mcpToolsEnabled ? 1 : 0,
110
- mcp_tools_consent: state.mcpToolsConsent
111
- }).where("plugin_id", "=", state.pluginId).where("version", "=", expectedVersion).where("source", "=", state.source).executeTakeFirst()).numUpdatedRows ?? 0n) > 0n;
112
- }
113
- /**
114
- * Enable a plugin
115
- */
116
- async enable(pluginId, version) {
117
- return this.upsert(pluginId, version, "active");
118
- }
119
- /**
120
- * Disable a plugin
121
- */
122
- async disable(pluginId, version) {
123
- return this.upsert(pluginId, version, "inactive");
124
- }
125
- /**
126
- * Delete plugin state
127
- */
128
- async delete(pluginId) {
129
- return ((await this.db.deleteFrom("_plugin_state").where("plugin_id", "=", pluginId).executeTakeFirst()).numDeletedRows ?? 0) > 0;
130
- }
131
- };
132
- function rowToPluginState(row) {
133
- return {
134
- pluginId: row.plugin_id,
135
- status: toPluginStatus(row.status),
136
- version: row.version,
137
- installedAt: parseDatabaseTimestamp(row.installed_at),
138
- activatedAt: row.activated_at ? parseDatabaseTimestamp(row.activated_at) : null,
139
- deactivatedAt: row.deactivated_at ? parseDatabaseTimestamp(row.deactivated_at) : null,
140
- source: toPluginSource(row.source),
141
- marketplaceVersion: row.marketplace_version ?? null,
142
- displayName: row.display_name ?? null,
143
- description: row.description ?? null,
144
- registryPublisherDid: row.registry_publisher_did ?? null,
145
- registrySlug: row.registry_slug ?? null,
146
- mcpToolsEnabled: row.mcp_tools_enabled === 1,
147
- mcpToolsConsent: row.mcp_tools_consent ?? null
148
- };
149
- }
150
-
151
- //#endregion
152
- export { PluginStateRepository as t };
153
- //# sourceMappingURL=state-DDiPySSG.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-DDiPySSG.mjs","names":[],"sources":["../src/plugins/state.ts"],"sourcesContent":["/**\n * Plugin State Repository\n *\n * Database-backed storage for plugin activation state.\n * Used by the admin API to persist plugin enable/disable across restarts.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../database/types.js\";\n\nexport type PluginStatus = \"active\" | \"inactive\";\nexport type PluginSource = \"config\" | \"marketplace\" | \"registry\";\n\nconst TIMEZONE_SUFFIX = /(?:z|[+-]\\d{2}(?::?\\d{2})?)$/i;\nconst HOUR_OFFSET_SUFFIX = /\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?[+-]\\d{2}$/i;\n\nfunction parseDatabaseTimestamp(value: string): Date {\n\tlet normalized = value.trim().replace(\" \", \"T\");\n\tif (HOUR_OFFSET_SUFFIX.test(normalized)) normalized += \":00\";\n\telse if (!TIMEZONE_SUFFIX.test(normalized)) normalized += \"Z\";\n\treturn new Date(normalized);\n}\n\nfunction toPluginStatus(value: string): PluginStatus {\n\tif (value === \"active\") return \"active\";\n\treturn \"inactive\";\n}\n\nfunction toPluginSource(value: string | undefined | null): PluginSource {\n\tif (value === \"marketplace\") return \"marketplace\";\n\tif (value === \"registry\") return \"registry\";\n\treturn \"config\";\n}\n\nexport interface PluginState {\n\tpluginId: string;\n\tstatus: PluginStatus;\n\tversion: string;\n\tinstalledAt: Date;\n\tactivatedAt: Date | null;\n\tdeactivatedAt: Date | null;\n\tsource: PluginSource;\n\tmarketplaceVersion: string | null;\n\tdisplayName: string | null;\n\tdescription: string | null;\n\t/**\n\t * Publisher DID this plugin was published under. Populated only when\n\t * `source === \"registry\"`; null otherwise.\n\t */\n\tregistryPublisherDid: string | null;\n\t/**\n\t * Slug under which the plugin was published in the publisher's repo\n\t * (the rkey of the `pm.fair.package.profile` record). Populated only\n\t * when `source === \"registry\"`; null otherwise.\n\t *\n\t * The opaque `pluginId` for registry installs is derived from\n\t * `(registryPublisherDid, registrySlug)` -- see\n\t * `packages/core/src/registry/plugin-id.ts`.\n\t */\n\tregistrySlug: string | null;\n\tmcpToolsEnabled: boolean;\n\tmcpToolsConsent: string | null;\n}\n\n/**\n * Repository for plugin state in the database\n */\nexport class PluginStateRepository {\n\tconstructor(private db: Kysely<Database>) {}\n\n\t/**\n\t * Get state for a specific plugin\n\t */\n\tasync get(pluginId: string): Promise<PluginState | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"_plugin_state\")\n\t\t\t.selectAll()\n\t\t\t.where(\"plugin_id\", \"=\", pluginId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!row) return null;\n\n\t\treturn rowToPluginState(row);\n\t}\n\n\t/**\n\t * Get all plugin states\n\t */\n\tasync getAll(): Promise<PluginState[]> {\n\t\tconst rows = await this.db.selectFrom(\"_plugin_state\").selectAll().execute();\n\t\treturn rows.map(rowToPluginState);\n\t}\n\n\t/**\n\t * Get all marketplace-installed plugin states\n\t */\n\tasync getMarketplacePlugins(): Promise<PluginState[]> {\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"_plugin_state\")\n\t\t\t.selectAll()\n\t\t\t.where(\"source\", \"=\", \"marketplace\")\n\t\t\t.execute();\n\t\treturn rows.map(rowToPluginState);\n\t}\n\n\t/**\n\t * Get all registry-installed plugin states.\n\t *\n\t * The runtime's registry sync path uses this to discover which\n\t * registry plugins should be loaded into the sandbox on this worker.\n\t */\n\tasync getRegistryPlugins(): Promise<PluginState[]> {\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"_plugin_state\")\n\t\t\t.selectAll()\n\t\t\t.where(\"source\", \"=\", \"registry\")\n\t\t\t.execute();\n\t\treturn rows.map(rowToPluginState);\n\t}\n\n\t/**\n\t * Create or update plugin state\n\t */\n\tasync upsert(\n\t\tpluginId: string,\n\t\tversion: string,\n\t\tstatus: PluginStatus,\n\t\topts?: {\n\t\t\tsource?: PluginSource;\n\t\t\tmarketplaceVersion?: string;\n\t\t\tdisplayName?: string;\n\t\t\tdescription?: string;\n\t\t\tregistryPublisherDid?: string;\n\t\t\tregistrySlug?: string;\n\t\t\tmcpToolsEnabled?: boolean;\n\t\t\tmcpToolsConsent?: string | null;\n\t\t},\n\t): Promise<PluginState> {\n\t\tconst now = new Date().toISOString();\n\t\tconst existing = await this.get(pluginId);\n\n\t\tif (existing) {\n\t\t\t// Update existing state\n\t\t\tconst updates: Record<string, string | number | null> = {\n\t\t\t\tstatus,\n\t\t\t\tversion,\n\t\t\t};\n\n\t\t\tif (status === \"active\" && existing.status !== \"active\") {\n\t\t\t\tupdates.activated_at = now;\n\t\t\t} else if (status === \"inactive\" && existing.status !== \"inactive\") {\n\t\t\t\tupdates.deactivated_at = now;\n\t\t\t}\n\n\t\t\tif (opts?.source) updates.source = opts.source;\n\t\t\tif (opts?.marketplaceVersion !== undefined) {\n\t\t\t\tupdates.marketplace_version = opts.marketplaceVersion;\n\t\t\t}\n\t\t\tif (opts?.displayName !== undefined) {\n\t\t\t\tupdates.display_name = opts.displayName;\n\t\t\t}\n\t\t\tif (opts?.description !== undefined) {\n\t\t\t\tupdates.description = opts.description;\n\t\t\t}\n\t\t\tif (opts?.registryPublisherDid !== undefined) {\n\t\t\t\tupdates.registry_publisher_did = opts.registryPublisherDid;\n\t\t\t}\n\t\t\tif (opts?.registrySlug !== undefined) {\n\t\t\t\tupdates.registry_slug = opts.registrySlug;\n\t\t\t}\n\t\t\tif (opts?.mcpToolsEnabled !== undefined) {\n\t\t\t\tupdates.mcp_tools_enabled = opts.mcpToolsEnabled ? 1 : 0;\n\t\t\t}\n\t\t\tif (opts?.mcpToolsConsent !== undefined) {\n\t\t\t\tupdates.mcp_tools_consent = opts.mcpToolsConsent;\n\t\t\t}\n\n\t\t\tawait this.db\n\t\t\t\t.updateTable(\"_plugin_state\")\n\t\t\t\t.set(updates)\n\t\t\t\t.where(\"plugin_id\", \"=\", pluginId)\n\t\t\t\t.execute();\n\t\t} else {\n\t\t\t// Create new state\n\t\t\tawait this.db\n\t\t\t\t.insertInto(\"_plugin_state\")\n\t\t\t\t.values({\n\t\t\t\t\tplugin_id: pluginId,\n\t\t\t\t\tstatus,\n\t\t\t\t\tversion,\n\t\t\t\t\tinstalled_at: now,\n\t\t\t\t\tactivated_at: status === \"active\" ? now : null,\n\t\t\t\t\tdeactivated_at: null,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tsource: opts?.source ?? \"config\",\n\t\t\t\t\tmarketplace_version: opts?.marketplaceVersion ?? null,\n\t\t\t\t\tdisplay_name: opts?.displayName ?? null,\n\t\t\t\t\tdescription: opts?.description ?? null,\n\t\t\t\t\tregistry_publisher_did: opts?.registryPublisherDid ?? null,\n\t\t\t\t\tregistry_slug: opts?.registrySlug ?? null,\n\t\t\t\t\tmcp_tools_enabled: opts?.mcpToolsEnabled ? 1 : 0,\n\t\t\t\t\tmcp_tools_consent: opts?.mcpToolsConsent ?? null,\n\t\t\t\t})\n\t\t\t\t.execute();\n\t\t}\n\n\t\treturn (await this.get(pluginId))!;\n\t}\n\n\tasync restoreIfVersion(expectedVersion: string, state: PluginState): Promise<boolean> {\n\t\tconst result = await this.db\n\t\t\t.updateTable(\"_plugin_state\")\n\t\t\t.set({\n\t\t\t\tversion: state.version,\n\t\t\t\tstatus: state.status,\n\t\t\t\tinstalled_at: state.installedAt.toISOString(),\n\t\t\t\tactivated_at: state.activatedAt?.toISOString() ?? null,\n\t\t\t\tdeactivated_at: state.deactivatedAt?.toISOString() ?? null,\n\t\t\t\tsource: state.source,\n\t\t\t\tmarketplace_version: state.marketplaceVersion,\n\t\t\t\tdisplay_name: state.displayName,\n\t\t\t\tdescription: state.description,\n\t\t\t\tregistry_publisher_did: state.registryPublisherDid,\n\t\t\t\tregistry_slug: state.registrySlug,\n\t\t\t\tmcp_tools_enabled: state.mcpToolsEnabled ? 1 : 0,\n\t\t\t\tmcp_tools_consent: state.mcpToolsConsent,\n\t\t\t})\n\t\t\t.where(\"plugin_id\", \"=\", state.pluginId)\n\t\t\t.where(\"version\", \"=\", expectedVersion)\n\t\t\t.where(\"source\", \"=\", state.source)\n\t\t\t.executeTakeFirst();\n\n\t\treturn (result.numUpdatedRows ?? 0n) > 0n;\n\t}\n\n\t/**\n\t * Enable a plugin\n\t */\n\tasync enable(pluginId: string, version: string): Promise<PluginState> {\n\t\treturn this.upsert(pluginId, version, \"active\");\n\t}\n\n\t/**\n\t * Disable a plugin\n\t */\n\tasync disable(pluginId: string, version: string): Promise<PluginState> {\n\t\treturn this.upsert(pluginId, version, \"inactive\");\n\t}\n\n\t/**\n\t * Delete plugin state\n\t */\n\tasync delete(pluginId: string): Promise<boolean> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"_plugin_state\")\n\t\t\t.where(\"plugin_id\", \"=\", pluginId)\n\t\t\t.executeTakeFirst();\n\n\t\treturn (result.numDeletedRows ?? 0) > 0;\n\t}\n}\n\n/**\n * Internal: map a `_plugin_state` row to the public `PluginState` shape.\n *\n * Kept at module scope so the three select paths (`get`, `getAll`,\n * `getMarketplacePlugins`, `getRegistryPlugins`) stay byte-identical in\n * their handling of nullable columns -- adding a new column to the table\n * means changing this function and nothing else.\n */\ninterface PluginStateRow {\n\tplugin_id: string;\n\tstatus: string;\n\tversion: string;\n\tinstalled_at: string;\n\tactivated_at: string | null;\n\tdeactivated_at: string | null;\n\tsource: string;\n\tmarketplace_version: string | null;\n\tdisplay_name: string | null;\n\tdescription: string | null;\n\tregistry_publisher_did: string | null;\n\tregistry_slug: string | null;\n\tmcp_tools_enabled: number;\n\tmcp_tools_consent: string | null;\n}\n\nfunction rowToPluginState(row: PluginStateRow): PluginState {\n\treturn {\n\t\tpluginId: row.plugin_id,\n\t\tstatus: toPluginStatus(row.status),\n\t\tversion: row.version,\n\t\tinstalledAt: parseDatabaseTimestamp(row.installed_at),\n\t\tactivatedAt: row.activated_at ? parseDatabaseTimestamp(row.activated_at) : null,\n\t\tdeactivatedAt: row.deactivated_at ? parseDatabaseTimestamp(row.deactivated_at) : null,\n\t\tsource: toPluginSource(row.source),\n\t\tmarketplaceVersion: row.marketplace_version ?? null,\n\t\tdisplayName: row.display_name ?? null,\n\t\tdescription: row.description ?? null,\n\t\tregistryPublisherDid: row.registry_publisher_did ?? null,\n\t\tregistrySlug: row.registry_slug ?? null,\n\t\tmcpToolsEnabled: row.mcp_tools_enabled === 1,\n\t\tmcpToolsConsent: row.mcp_tools_consent ?? null,\n\t};\n}\n"],"mappings":";AAcA,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAE3B,SAAS,uBAAuB,OAAqB;CACpD,IAAI,aAAa,MAAM,MAAM,CAAC,QAAQ,KAAK,IAAI;AAC/C,KAAI,mBAAmB,KAAK,WAAW,CAAE,eAAc;UAC9C,CAAC,gBAAgB,KAAK,WAAW,CAAE,eAAc;AAC1D,QAAO,IAAI,KAAK,WAAW;;AAG5B,SAAS,eAAe,OAA6B;AACpD,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAGR,SAAS,eAAe,OAAgD;AACvE,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,WAAY,QAAO;AACjC,QAAO;;;;;AAoCR,IAAa,wBAAb,MAAmC;CAClC,YAAY,AAAQ,IAAsB;EAAtB;;;;;CAKpB,MAAM,IAAI,UAA+C;EACxD,MAAM,MAAM,MAAM,KAAK,GACrB,WAAW,gBAAgB,CAC3B,WAAW,CACX,MAAM,aAAa,KAAK,SAAS,CACjC,kBAAkB;AAEpB,MAAI,CAAC,IAAK,QAAO;AAEjB,SAAO,iBAAiB,IAAI;;;;;CAM7B,MAAM,SAAiC;AAEtC,UADa,MAAM,KAAK,GAAG,WAAW,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAChE,IAAI,iBAAiB;;;;;CAMlC,MAAM,wBAAgD;AAMrD,UALa,MAAM,KAAK,GACtB,WAAW,gBAAgB,CAC3B,WAAW,CACX,MAAM,UAAU,KAAK,cAAc,CACnC,SAAS,EACC,IAAI,iBAAiB;;;;;;;;CASlC,MAAM,qBAA6C;AAMlD,UALa,MAAM,KAAK,GACtB,WAAW,gBAAgB,CAC3B,WAAW,CACX,MAAM,UAAU,KAAK,WAAW,CAChC,SAAS,EACC,IAAI,iBAAiB;;;;;CAMlC,MAAM,OACL,UACA,SACA,QACA,MAUuB;EACvB,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;EACpC,MAAM,WAAW,MAAM,KAAK,IAAI,SAAS;AAEzC,MAAI,UAAU;GAEb,MAAM,UAAkD;IACvD;IACA;IACA;AAED,OAAI,WAAW,YAAY,SAAS,WAAW,SAC9C,SAAQ,eAAe;YACb,WAAW,cAAc,SAAS,WAAW,WACvD,SAAQ,iBAAiB;AAG1B,OAAI,MAAM,OAAQ,SAAQ,SAAS,KAAK;AACxC,OAAI,MAAM,uBAAuB,OAChC,SAAQ,sBAAsB,KAAK;AAEpC,OAAI,MAAM,gBAAgB,OACzB,SAAQ,eAAe,KAAK;AAE7B,OAAI,MAAM,gBAAgB,OACzB,SAAQ,cAAc,KAAK;AAE5B,OAAI,MAAM,yBAAyB,OAClC,SAAQ,yBAAyB,KAAK;AAEvC,OAAI,MAAM,iBAAiB,OAC1B,SAAQ,gBAAgB,KAAK;AAE9B,OAAI,MAAM,oBAAoB,OAC7B,SAAQ,oBAAoB,KAAK,kBAAkB,IAAI;AAExD,OAAI,MAAM,oBAAoB,OAC7B,SAAQ,oBAAoB,KAAK;AAGlC,SAAM,KAAK,GACT,YAAY,gBAAgB,CAC5B,IAAI,QAAQ,CACZ,MAAM,aAAa,KAAK,SAAS,CACjC,SAAS;QAGX,OAAM,KAAK,GACT,WAAW,gBAAgB,CAC3B,OAAO;GACP,WAAW;GACX;GACA;GACA,cAAc;GACd,cAAc,WAAW,WAAW,MAAM;GAC1C,gBAAgB;GAChB,MAAM;GACN,QAAQ,MAAM,UAAU;GACxB,qBAAqB,MAAM,sBAAsB;GACjD,cAAc,MAAM,eAAe;GACnC,aAAa,MAAM,eAAe;GAClC,wBAAwB,MAAM,wBAAwB;GACtD,eAAe,MAAM,gBAAgB;GACrC,mBAAmB,MAAM,kBAAkB,IAAI;GAC/C,mBAAmB,MAAM,mBAAmB;GAC5C,CAAC,CACD,SAAS;AAGZ,SAAQ,MAAM,KAAK,IAAI,SAAS;;CAGjC,MAAM,iBAAiB,iBAAyB,OAAsC;AAuBrF,WAtBe,MAAM,KAAK,GACxB,YAAY,gBAAgB,CAC5B,IAAI;GACJ,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,cAAc,MAAM,YAAY,aAAa;GAC7C,cAAc,MAAM,aAAa,aAAa,IAAI;GAClD,gBAAgB,MAAM,eAAe,aAAa,IAAI;GACtD,QAAQ,MAAM;GACd,qBAAqB,MAAM;GAC3B,cAAc,MAAM;GACpB,aAAa,MAAM;GACnB,wBAAwB,MAAM;GAC9B,eAAe,MAAM;GACrB,mBAAmB,MAAM,kBAAkB,IAAI;GAC/C,mBAAmB,MAAM;GACzB,CAAC,CACD,MAAM,aAAa,KAAK,MAAM,SAAS,CACvC,MAAM,WAAW,KAAK,gBAAgB,CACtC,MAAM,UAAU,KAAK,MAAM,OAAO,CAClC,kBAAkB,EAEL,kBAAkB,MAAM;;;;;CAMxC,MAAM,OAAO,UAAkB,SAAuC;AACrE,SAAO,KAAK,OAAO,UAAU,SAAS,SAAS;;;;;CAMhD,MAAM,QAAQ,UAAkB,SAAuC;AACtE,SAAO,KAAK,OAAO,UAAU,SAAS,WAAW;;;;;CAMlD,MAAM,OAAO,UAAoC;AAMhD,WALe,MAAM,KAAK,GACxB,WAAW,gBAAgB,CAC3B,MAAM,aAAa,KAAK,SAAS,CACjC,kBAAkB,EAEL,kBAAkB,KAAK;;;AA6BxC,SAAS,iBAAiB,KAAkC;AAC3D,QAAO;EACN,UAAU,IAAI;EACd,QAAQ,eAAe,IAAI,OAAO;EAClC,SAAS,IAAI;EACb,aAAa,uBAAuB,IAAI,aAAa;EACrD,aAAa,IAAI,eAAe,uBAAuB,IAAI,aAAa,GAAG;EAC3E,eAAe,IAAI,iBAAiB,uBAAuB,IAAI,eAAe,GAAG;EACjF,QAAQ,eAAe,IAAI,OAAO;EAClC,oBAAoB,IAAI,uBAAuB;EAC/C,aAAa,IAAI,gBAAgB;EACjC,aAAa,IAAI,eAAe;EAChC,sBAAsB,IAAI,0BAA0B;EACpD,cAAc,IAAI,iBAAiB;EACnC,iBAAiB,IAAI,sBAAsB;EAC3C,iBAAiB,IAAI,qBAAqB;EAC1C"}
@@ -1,30 +0,0 @@
1
- //#region src/redirects/status.ts
2
- /**
3
- * Redirect rule status codes.
4
- *
5
- * A redirect rule's `type` is either a *redirect* status (issues a `Location`
6
- * header) or a *terminal* status (serves the status with no target). Terminal
7
- * statuses let editors mark a URL as intentionally gone:
8
- * - `410 Gone` — permanently and intentionally deleted (Google deindexes it
9
- * faster than a 404).
10
- * - `451 Unavailable For Legal Reasons`.
11
- */
12
- /** Statuses that issue an HTTP redirect (require a destination). */
13
- const REDIRECT_STATUSES = [
14
- 301,
15
- 302,
16
- 307,
17
- 308
18
- ];
19
- /** Terminal statuses that serve a status with no `Location` / no destination. */
20
- const TERMINAL_STATUSES = [410, 451];
21
- /** All values accepted as a redirect rule `type`. */
22
- const REDIRECT_RULE_STATUSES = [...REDIRECT_STATUSES, ...TERMINAL_STATUSES];
23
- /** True for terminal statuses (410/451) — served directly, with no target. */
24
- function isTerminalStatus(type) {
25
- return TERMINAL_STATUSES.includes(type);
26
- }
27
-
28
- //#endregion
29
- export { isTerminalStatus as n, REDIRECT_RULE_STATUSES as t };
30
- //# sourceMappingURL=status-DZKIG4a9.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-DZKIG4a9.mjs","names":[],"sources":["../src/redirects/status.ts"],"sourcesContent":["/**\n * Redirect rule status codes.\n *\n * A redirect rule's `type` is either a *redirect* status (issues a `Location`\n * header) or a *terminal* status (serves the status with no target). Terminal\n * statuses let editors mark a URL as intentionally gone:\n * - `410 Gone` — permanently and intentionally deleted (Google deindexes it\n * faster than a 404).\n * - `451 Unavailable For Legal Reasons`.\n */\n\n/** Statuses that issue an HTTP redirect (require a destination). */\nexport const REDIRECT_STATUSES = [301, 302, 307, 308] as const;\n\n/** Terminal statuses that serve a status with no `Location` / no destination. */\nexport const TERMINAL_STATUSES = [410, 451] as const;\n\n/** All values accepted as a redirect rule `type`. */\nexport const REDIRECT_RULE_STATUSES: readonly number[] = [\n\t...REDIRECT_STATUSES,\n\t...TERMINAL_STATUSES,\n];\n\n/** True for terminal statuses (410/451) — served directly, with no target. */\nexport function isTerminalStatus(type: number): boolean {\n\treturn (TERMINAL_STATUSES as readonly number[]).includes(type);\n}\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,oBAAoB;CAAC;CAAK;CAAK;CAAK;CAAI;;AAGrD,MAAa,oBAAoB,CAAC,KAAK,IAAI;;AAG3C,MAAa,yBAA4C,CACxD,GAAG,mBACH,GAAG,kBACH;;AAGD,SAAgB,iBAAiB,MAAuB;AACvD,QAAQ,kBAAwC,SAAS,KAAK"}