emdash 0.39.1 → 0.40.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 (1649) hide show
  1. package/dist/action-token-DYwe4Pk0.mjs +26 -0
  2. package/dist/action-token-DYwe4Pk0.mjs.map +1 -0
  3. package/dist/activation-LOkDM5WT.mjs +382 -0
  4. package/dist/activation-LOkDM5WT.mjs.map +1 -0
  5. package/dist/adapters-B64LbYcB.d.mts +171 -0
  6. package/dist/adapters-B64LbYcB.d.mts.map +1 -0
  7. package/dist/allowed-origins-CHB8oZNM.mjs +116 -0
  8. package/dist/allowed-origins-CHB8oZNM.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +49 -40
  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 +11 -7
  14. package/dist/api-cFFZpyS0.mjs +4718 -0
  15. package/dist/api-cFFZpyS0.mjs.map +1 -0
  16. package/dist/api-tokens-CE1ECIg0.mjs +3 -0
  17. package/dist/api-tokens-s4i4aUp_.mjs +166 -0
  18. package/dist/api-tokens-s4i4aUp_.mjs.map +1 -0
  19. package/dist/apply-CoT603H3.mjs +1163 -0
  20. package/dist/apply-CoT603H3.mjs.map +1 -0
  21. package/dist/approvals-CqMfNxak.mjs +460 -0
  22. package/dist/approvals-CqMfNxak.mjs.map +1 -0
  23. package/dist/artifact-fetch-DZMOGZ3-.mjs +818 -0
  24. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -14
  26. package/dist/astro/index.mjs +62 -12
  27. package/dist/astro/index.mjs.map +1 -1
  28. package/dist/astro/middleware/auth.d.mts +14 -12
  29. package/dist/astro/middleware/auth.d.mts.map +1 -1
  30. package/dist/astro/middleware/auth.mjs +26 -11
  31. package/dist/astro/middleware/auth.mjs.map +1 -1
  32. package/dist/astro/middleware/media-usage-write-fence.d.mts +9 -1
  33. package/dist/astro/middleware/media-usage-write-fence.d.mts.map +1 -1
  34. package/dist/astro/middleware/media-usage-write-fence.mjs +95 -13
  35. package/dist/astro/middleware/media-usage-write-fence.mjs.map +1 -1
  36. package/dist/astro/middleware/redirect.mjs +8 -8
  37. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +145 -47
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +12 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +129 -123
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -8
  46. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -8
  48. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  49. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -3
  50. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
  51. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -4
  52. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -4
  54. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -11
  56. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -11
  58. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -11
  60. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -19
  62. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -19
  64. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  65. package/dist/astro/routes/api/admin/bylines/index.mjs +25 -19
  66. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +19 -13
  68. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -5
  70. package/dist/astro/routes/api/admin/comments/_id_.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -12
  72. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -5
  74. package/dist/astro/routes/api/admin/comments/counts.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/comments/index.mjs +18 -12
  76. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -4
  78. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts.map +1 -1
  80. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -6
  81. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -15
  83. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -17
  85. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -17
  87. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/media-usage/progress.mjs +26 -15
  89. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  90. package/dist/astro/routes/api/admin/media-usage/repair.mjs +32 -19
  91. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -17
  93. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -17
  95. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -3
  97. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -3
  99. package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +10 -8
  102. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +10 -8
  105. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -62
  107. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -4
  109. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -61
  111. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  112. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +74 -64
  114. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  116. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +84 -74
  117. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -62
  119. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -2
  121. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -61
  123. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  125. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +83 -73
  126. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -61
  128. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +74 -64
  131. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +85 -75
  133. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +8 -6
  135. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +76 -66
  137. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.d.mts +8 -0
  139. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.d.mts.map +1 -0
  140. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +221 -0
  141. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs.map +1 -0
  142. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -62
  143. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -61
  145. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -4
  147. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -61
  149. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -2
  151. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -61
  153. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/_...path_.d.mts +12 -0
  155. package/dist/astro/routes/api/admin/transfer/_...path_.d.mts.map +1 -0
  156. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +144 -0
  157. package/dist/astro/routes/api/admin/transfer/_...path_.mjs.map +1 -0
  158. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.d.mts +8 -0
  159. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.d.mts.map +1 -0
  160. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +68 -0
  161. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -0
  162. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.d.mts +8 -0
  163. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.d.mts.map +1 -0
  164. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +68 -0
  165. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -0
  166. package/dist/astro/routes/api/admin/transfer/approvals/index.d.mts +8 -0
  167. package/dist/astro/routes/api/admin/transfer/approvals/index.d.mts.map +1 -0
  168. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +67 -0
  169. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -0
  170. package/dist/astro/routes/api/admin/transfer/capabilities.d.mts +8 -0
  171. package/dist/astro/routes/api/admin/transfer/capabilities.d.mts.map +1 -0
  172. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +70 -0
  173. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -0
  174. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.d.mts +8 -0
  175. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.d.mts.map +1 -0
  176. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +67 -0
  177. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -0
  178. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.d.mts +8 -0
  179. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.d.mts.map +1 -0
  180. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +70 -0
  181. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -0
  182. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.d.mts +8 -0
  183. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.d.mts.map +1 -0
  184. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +69 -0
  185. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -0
  186. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.d.mts +8 -0
  187. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.d.mts.map +1 -0
  188. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +66 -0
  189. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -0
  190. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.d.mts +8 -0
  191. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.d.mts.map +1 -0
  192. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +69 -0
  193. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -0
  194. package/dist/astro/routes/api/admin/transfer/exports/index.d.mts +9 -0
  195. package/dist/astro/routes/api/admin/transfer/exports/index.d.mts.map +1 -0
  196. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +91 -0
  197. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -0
  198. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.d.mts +8 -0
  199. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.d.mts.map +1 -0
  200. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +66 -0
  201. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -0
  202. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.d.mts +8 -0
  203. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.d.mts.map +1 -0
  204. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +70 -0
  205. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -0
  206. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.d.mts +8 -0
  207. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.d.mts.map +1 -0
  208. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +78 -0
  209. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -0
  210. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.d.mts +8 -0
  211. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.d.mts.map +1 -0
  212. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +66 -0
  213. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -0
  214. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.d.mts +8 -0
  215. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.d.mts.map +1 -0
  216. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +77 -0
  217. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -0
  218. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.d.mts +8 -0
  219. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.d.mts.map +1 -0
  220. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +77 -0
  221. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -0
  222. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.d.mts +8 -0
  223. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.d.mts.map +1 -0
  224. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +66 -0
  225. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -0
  226. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.d.mts +8 -0
  227. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.d.mts.map +1 -0
  228. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +70 -0
  229. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -0
  230. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.d.mts +8 -0
  231. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.d.mts.map +1 -0
  232. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +67 -0
  233. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -0
  234. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.d.mts +8 -0
  235. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.d.mts.map +1 -0
  236. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +66 -0
  237. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -0
  238. package/dist/astro/routes/api/admin/transfer/imports/index.d.mts +9 -0
  239. package/dist/astro/routes/api/admin/transfer/imports/index.d.mts.map +1 -0
  240. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +99 -0
  241. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -0
  242. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -1
  243. package/dist/astro/routes/api/admin/users/_id_/disable.mjs.map +1 -1
  244. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -1
  245. package/dist/astro/routes/api/admin/users/_id_/enable.mjs.map +1 -1
  246. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -8
  247. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  248. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts.map +1 -1
  249. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +16 -6
  250. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -1
  251. package/dist/astro/routes/api/admin/users/index.mjs +14 -8
  252. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -3
  254. package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
  255. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -1
  256. package/dist/astro/routes/api/auth/invite/accept.mjs.map +1 -1
  257. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -13
  258. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  259. package/dist/astro/routes/api/auth/invite/index.d.mts.map +1 -1
  260. package/dist/astro/routes/api/auth/invite/index.mjs +24 -12
  261. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  262. package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -12
  263. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  264. package/dist/astro/routes/api/auth/logout.mjs +4 -2
  265. package/dist/astro/routes/api/auth/logout.mjs.map +1 -1
  266. package/dist/astro/routes/api/auth/magic-link/send.d.mts.map +1 -1
  267. package/dist/astro/routes/api/auth/magic-link/send.mjs +29 -15
  268. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  269. package/dist/astro/routes/api/auth/magic-link/verify.d.mts +2 -1
  270. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  271. package/dist/astro/routes/api/auth/magic-link/verify.mjs +37 -17
  272. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  273. package/dist/astro/routes/api/auth/me.mjs +15 -9
  274. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  275. package/dist/astro/routes/api/auth/mode.mjs +4 -2
  276. package/dist/astro/routes/api/auth/mode.mjs.map +1 -1
  277. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  278. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  279. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -8
  280. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  281. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -1
  282. package/dist/astro/routes/api/auth/passkey/index.mjs.map +1 -1
  283. package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
  284. package/dist/astro/routes/api/auth/passkey/options.mjs +21 -24
  285. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  286. package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -12
  287. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  288. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -13
  289. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  290. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -13
  291. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  292. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -13
  293. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  294. package/dist/astro/routes/api/auth/signup/request.mjs +18 -12
  295. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  296. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -1
  297. package/dist/astro/routes/api/auth/signup/verify.mjs.map +1 -1
  298. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -11
  299. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  300. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +21 -15
  301. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  302. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -2
  303. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs.map +1 -1
  304. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -13
  305. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  306. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -3
  307. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  308. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +18 -13
  309. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  310. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -2
  311. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  312. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +10 -8
  313. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -1
  314. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts.map +1 -1
  315. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +68 -16
  316. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  317. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -13
  318. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  319. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +31 -22
  320. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  321. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +31 -22
  322. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  323. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -3
  324. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  325. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -2
  326. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs.map +1 -1
  327. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -13
  328. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  329. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  330. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +38 -19
  331. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  332. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -2
  333. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  334. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -13
  335. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  336. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -13
  337. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  338. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -2
  339. package/dist/astro/routes/api/content/_collection_/authors.mjs.map +1 -1
  340. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -10
  341. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  342. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -9
  343. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  344. package/dist/astro/routes/api/dashboard.mjs +11 -9
  345. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  346. package/dist/astro/routes/api/dev/emails.mjs +4 -2
  347. package/dist/astro/routes/api/dev/emails.mjs.map +1 -1
  348. package/dist/astro/routes/api/health.mjs +5 -3
  349. package/dist/astro/routes/api/health.mjs.map +1 -1
  350. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  351. package/dist/astro/routes/api/import/probe.mjs +27 -21
  352. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  353. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -3
  354. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  355. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  356. package/dist/astro/routes/api/import/wordpress/execute.mjs +18 -16
  357. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  358. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  359. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -13
  360. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  361. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -12
  362. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  363. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +5 -1
  364. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
  365. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +4 -2
  366. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
  367. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  368. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -15
  369. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  370. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  371. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +27 -21
  372. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  373. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  374. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +38 -32
  375. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  376. package/dist/astro/routes/api/manifest.mjs +6 -4
  377. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  378. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  379. package/dist/astro/routes/api/mcp.mjs +717 -67
  380. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  381. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -13
  382. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  383. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -10
  384. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  385. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -6
  386. package/dist/astro/routes/api/media/_id_/upload.mjs.map +1 -1
  387. package/dist/astro/routes/api/media/_id_/usage.mjs +34 -21
  388. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  389. package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
  390. package/dist/astro/routes/api/media/_id_.mjs +37 -26
  391. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  392. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -3
  393. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -1
  394. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  395. package/dist/astro/routes/api/media/file/_...key_.mjs +31 -2
  396. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  397. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -10
  398. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  399. package/dist/astro/routes/api/media/folders/index.mjs +16 -10
  400. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  401. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -2
  402. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs.map +1 -1
  403. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -2
  404. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs.map +1 -1
  405. package/dist/astro/routes/api/media/providers/index.mjs +4 -2
  406. package/dist/astro/routes/api/media/providers/index.mjs.map +1 -1
  407. package/dist/astro/routes/api/media/upload-url.mjs +18 -12
  408. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  409. package/dist/astro/routes/api/media.mjs +36 -24
  410. package/dist/astro/routes/api/media.mjs.map +1 -1
  411. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +18 -12
  412. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  413. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -12
  414. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  415. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -12
  416. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  417. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -12
  418. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  419. package/dist/astro/routes/api/menus/_name_.mjs +18 -12
  420. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  421. package/dist/astro/routes/api/menus/index.mjs +18 -12
  422. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  423. package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -1
  424. package/dist/astro/routes/api/oauth/authorize.mjs +9 -6
  425. package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -1
  426. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -5
  427. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  428. package/dist/astro/routes/api/oauth/device/code.mjs +10 -8
  429. package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
  430. package/dist/astro/routes/api/oauth/device/token.mjs +9 -7
  431. package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
  432. package/dist/astro/routes/api/oauth/register.mjs +4 -2
  433. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  434. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -5
  435. package/dist/astro/routes/api/oauth/token/refresh.mjs.map +1 -1
  436. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -5
  437. package/dist/astro/routes/api/oauth/token/revoke.mjs.map +1 -1
  438. package/dist/astro/routes/api/oauth/token.mjs +7 -5
  439. package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
  440. package/dist/astro/routes/api/openapi.json.mjs +497 -12
  441. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  442. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +10 -8
  443. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  444. package/dist/astro/routes/api/redirects/404s/index.mjs +21 -15
  445. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  446. package/dist/astro/routes/api/redirects/404s/summary.mjs +21 -15
  447. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  448. package/dist/astro/routes/api/redirects/_id_.mjs +21 -15
  449. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  450. package/dist/astro/routes/api/redirects/index.mjs +21 -15
  451. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  452. package/dist/astro/routes/api/relations/_id_/index.mjs +31 -22
  453. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  454. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -16
  455. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  456. package/dist/astro/routes/api/relations/index.mjs +31 -22
  457. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  458. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -2
  459. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs.map +1 -1
  460. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +4 -3
  461. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
  462. package/dist/astro/routes/api/schema/block-types/_slug_/index.d.mts +9 -0
  463. package/dist/astro/routes/api/schema/block-types/_slug_/index.d.mts.map +1 -0
  464. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +102 -0
  465. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -0
  466. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.d.mts +8 -0
  467. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.d.mts.map +1 -0
  468. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +96 -0
  469. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -0
  470. package/dist/astro/routes/api/schema/block-types/index.d.mts +9 -0
  471. package/dist/astro/routes/api/schema/block-types/index.d.mts.map +1 -0
  472. package/dist/astro/routes/api/schema/block-types/index.mjs +102 -0
  473. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -0
  474. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +71 -61
  475. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  476. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -61
  477. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  478. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -61
  479. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  480. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -61
  481. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  482. package/dist/astro/routes/api/schema/collections/index.mjs +71 -61
  483. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  484. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -61
  485. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  486. package/dist/astro/routes/api/schema/index.mjs +17 -14
  487. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  488. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -61
  489. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  490. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -61
  491. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  492. package/dist/astro/routes/api/search/enable.mjs +20 -14
  493. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  494. package/dist/astro/routes/api/search/index.mjs +19 -13
  495. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  496. package/dist/astro/routes/api/search/rebuild.mjs +20 -14
  497. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  498. package/dist/astro/routes/api/search/stats.mjs +10 -8
  499. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  500. package/dist/astro/routes/api/search/suggest.mjs +19 -13
  501. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  502. package/dist/astro/routes/api/sections/_slug_.mjs +19 -13
  503. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  504. package/dist/astro/routes/api/sections/index.mjs +19 -13
  505. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  506. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +8 -7
  507. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
  508. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -6
  509. package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
  510. package/dist/astro/routes/api/settings/backups/export.mjs +8 -7
  511. package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
  512. package/dist/astro/routes/api/settings/backups/index.mjs +9 -8
  513. package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
  514. package/dist/astro/routes/api/settings/email.mjs +6 -4
  515. package/dist/astro/routes/api/settings/email.mjs.map +1 -1
  516. package/dist/astro/routes/api/settings.mjs +25 -19
  517. package/dist/astro/routes/api/settings.mjs.map +1 -1
  518. package/dist/astro/routes/api/setup/admin-verify.mjs +20 -14
  519. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  520. package/dist/astro/routes/api/setup/admin.mjs +19 -13
  521. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  522. package/dist/astro/routes/api/setup/dev-bypass.mjs +43 -37
  523. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  524. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -2
  525. package/dist/astro/routes/api/setup/dev-reset.mjs.map +1 -1
  526. package/dist/astro/routes/api/setup/index.mjs +48 -38
  527. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  528. package/dist/astro/routes/api/setup/status.mjs +5 -3
  529. package/dist/astro/routes/api/setup/status.mjs.map +1 -1
  530. package/dist/astro/routes/api/snapshot.mjs +10 -8
  531. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  532. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -19
  533. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  534. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -19
  535. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  536. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -19
  537. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  538. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -19
  539. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  540. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +24 -18
  541. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  542. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -19
  543. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  544. package/dist/astro/routes/api/taxonomies/bulk-tag.d.mts +8 -0
  545. package/dist/astro/routes/api/taxonomies/bulk-tag.d.mts.map +1 -0
  546. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +295 -0
  547. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -0
  548. package/dist/astro/routes/api/taxonomies/index.mjs +25 -19
  549. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  550. package/dist/astro/routes/api/themes/preview.mjs +7 -5
  551. package/dist/astro/routes/api/themes/preview.mjs.map +1 -1
  552. package/dist/astro/routes/api/typegen.d.mts.map +1 -1
  553. package/dist/astro/routes/api/typegen.mjs +12 -9
  554. package/dist/astro/routes/api/typegen.mjs.map +1 -1
  555. package/dist/astro/routes/api/visual-editing/action-token.mjs +7 -5
  556. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -1
  557. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +22 -16
  558. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
  559. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -1
  560. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -1
  561. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  562. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  563. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  564. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -10
  565. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  566. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -14
  567. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  568. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -14
  569. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  570. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  571. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  572. package/dist/astro/routes/api/widget-areas/index.mjs +20 -14
  573. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  574. package/dist/astro/routes/api/widget-components.mjs +4 -2
  575. package/dist/astro/routes/api/widget-components.mjs.map +1 -1
  576. package/dist/astro/routes/robots.txt.mjs +10 -10
  577. package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -13
  578. package/dist/astro/routes/sitemap.xml.mjs +11 -11
  579. package/dist/astro/types.d.mts +21 -17
  580. package/dist/astro/types.d.mts.map +1 -1
  581. package/dist/audit-RfCugiSB.mjs +127 -0
  582. package/dist/audit-RfCugiSB.mjs.map +1 -0
  583. package/dist/auth/providers/github.d.mts +1 -1
  584. package/dist/auth/providers/google.d.mts +1 -1
  585. package/dist/authoritative-records-CoJvBXAD.mjs +5172 -0
  586. package/dist/authoritative-records-CoJvBXAD.mjs.map +1 -0
  587. package/dist/authorize-seCifOMJ.mjs +49 -0
  588. package/dist/authorize-seCifOMJ.mjs.map +1 -0
  589. package/dist/backup-CBu0LrXf.mjs +246 -0
  590. package/dist/backup-CBu0LrXf.mjs.map +1 -0
  591. package/dist/block-type-registry-DUI_3KxT.mjs +6709 -0
  592. package/dist/block-type-registry-DUI_3KxT.mjs.map +1 -0
  593. package/dist/block-types-BmZmLmAD.mjs +132 -0
  594. package/dist/block-types-BmZmLmAD.mjs.map +1 -0
  595. package/dist/block-values-C_VIPr5t.mjs +175 -0
  596. package/dist/block-values-C_VIPr5t.mjs.map +1 -0
  597. package/dist/byline-DYmkXqvo.mjs +909 -0
  598. package/dist/byline-DYmkXqvo.mjs.map +1 -0
  599. package/dist/byline-fields-D28AT-Fh.mjs +123 -0
  600. package/dist/byline-fields-D28AT-Fh.mjs.map +1 -0
  601. package/dist/byline-registry-gnKscbQX.mjs +406 -0
  602. package/dist/byline-registry-gnKscbQX.mjs.map +1 -0
  603. package/dist/bylines-BPwJqoYH.mjs +232 -0
  604. package/dist/bylines-BPwJqoYH.mjs.map +1 -0
  605. package/dist/bylines-ukLaYpVZ.mjs +214 -0
  606. package/dist/bylines-ukLaYpVZ.mjs.map +1 -0
  607. package/dist/cache-m7UEkRFV.mjs +108 -0
  608. package/dist/cache-m7UEkRFV.mjs.map +1 -0
  609. package/dist/canonical-YhEQezjg.mjs +174 -0
  610. package/dist/canonical-YhEQezjg.mjs.map +1 -0
  611. package/dist/capture-triggers-kJyl_yyM.mjs +362 -0
  612. package/dist/capture-triggers-kJyl_yyM.mjs.map +1 -0
  613. package/dist/challenge-store-ppU6Uv13.mjs +51 -0
  614. package/dist/challenge-store-ppU6Uv13.mjs.map +1 -0
  615. package/dist/checksum-B2IINIlN.mjs +162 -0
  616. package/dist/checksum-B2IINIlN.mjs.map +1 -0
  617. package/dist/chrome-tags-DApCQSIk.mjs +24 -0
  618. package/dist/chrome-tags-DApCQSIk.mjs.map +1 -0
  619. package/dist/chunks-Dms7Uxbt.mjs +25 -0
  620. package/dist/chunks-Dms7Uxbt.mjs.map +1 -0
  621. package/dist/cli/index.mjs +1471 -56
  622. package/dist/cli/index.mjs.map +1 -1
  623. package/dist/client/cf-access.d.mts +1 -1
  624. package/dist/client/index.d.mts +1050 -4
  625. package/dist/client/index.d.mts.map +1 -1
  626. package/dist/client/index.mjs +193 -11
  627. package/dist/client/index.mjs.map +1 -1
  628. package/dist/collection-deletion-BIm28mo3.mjs +436 -0
  629. package/dist/collection-deletion-BIm28mo3.mjs.map +1 -0
  630. package/dist/collection-deletion-processor-Br6rxs3u.mjs +217 -0
  631. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +1 -0
  632. package/dist/collection-slugs-cache-CjGk__zp.mjs +85 -0
  633. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +1 -0
  634. package/dist/comment-CrBl22OF.mjs +313 -0
  635. package/dist/comment-CrBl22OF.mjs.map +1 -0
  636. package/dist/comment-reaction-JEQ2Fpd8.mjs +85 -0
  637. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +1 -0
  638. package/dist/comments-2ah9du9y.mjs +195 -0
  639. package/dist/comments-2ah9du9y.mjs.map +1 -0
  640. package/dist/comments-fHZ8ON9O.mjs +99 -0
  641. package/dist/comments-fHZ8ON9O.mjs.map +1 -0
  642. package/dist/components-CXbq7CSM.mjs +108 -0
  643. package/dist/components-CXbq7CSM.mjs.map +1 -0
  644. package/dist/config-5ii2haYu.d.mts +6528 -0
  645. package/dist/config-5ii2haYu.d.mts.map +1 -0
  646. package/dist/config-CvmjJcVw.mjs +73 -0
  647. package/dist/config-CvmjJcVw.mjs.map +1 -0
  648. package/dist/config-IhybvkIQ.mjs +242 -0
  649. package/dist/config-IhybvkIQ.mjs.map +1 -0
  650. package/dist/config-Py43JK9r.d.mts +39 -0
  651. package/dist/config-Py43JK9r.d.mts.map +1 -0
  652. package/dist/content-DFaIEDj9.mjs +2281 -0
  653. package/dist/content-DFaIEDj9.mjs.map +1 -0
  654. package/dist/content-list-query-Dra4Dalc.d.mts +26 -0
  655. package/dist/content-list-query-Dra4Dalc.d.mts.map +1 -0
  656. package/dist/content-policy-DFNw91-d.mjs +46 -0
  657. package/dist/content-policy-DFNw91-d.mjs.map +1 -0
  658. package/dist/content-repair-Q8IUrpLL.mjs +442 -0
  659. package/dist/content-repair-Q8IUrpLL.mjs.map +1 -0
  660. package/dist/context-BeGccdUX.mjs +1921 -0
  661. package/dist/context-BeGccdUX.mjs.map +1 -0
  662. package/dist/cron-7DCJwPXq.mjs +284 -0
  663. package/dist/cron-7DCJwPXq.mjs.map +1 -0
  664. package/dist/dashboard-DjrB-xxZ.mjs +151 -0
  665. package/dist/dashboard-DjrB-xxZ.mjs.map +1 -0
  666. package/dist/db/index.d.mts +3 -3
  667. package/dist/db/index.mjs +3 -3
  668. package/dist/db/libsql-migrations.d.mts +1 -1
  669. package/dist/db/libsql-migrations.mjs +6 -6
  670. package/dist/db/libsql.d.mts +1 -1
  671. package/dist/db/postgres-migrations.d.mts +1 -1
  672. package/dist/db/postgres-migrations.mjs +6 -6
  673. package/dist/db/postgres.d.mts +1 -1
  674. package/dist/db/sqlite-migrations.d.mts +1 -1
  675. package/dist/db/sqlite-migrations.mjs +6 -6
  676. package/dist/db/sqlite.d.mts +1 -1
  677. package/dist/db/sqlite.mjs +2 -2
  678. package/dist/db/sqlite.mjs.map +1 -1
  679. package/dist/default-DQ6vsviu.mjs +81 -0
  680. package/dist/default-DQ6vsviu.mjs.map +1 -0
  681. package/dist/deferred-tasks-BPxXUB4x.d.mts +9 -0
  682. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +1 -0
  683. package/dist/device-flow-CRd6DXmW.mjs +466 -0
  684. package/dist/device-flow-CRd6DXmW.mjs.map +1 -0
  685. package/dist/dialect-helpers-7_IqPdh9.mjs +307 -0
  686. package/dist/dialect-helpers-7_IqPdh9.mjs.map +1 -0
  687. package/dist/digest-BarSh-pN.mjs +194 -0
  688. package/dist/digest-BarSh-pN.mjs.map +1 -0
  689. package/dist/direct-executor-BmuFJJZV.mjs +104 -0
  690. package/dist/direct-executor-BmuFJJZV.mjs.map +1 -0
  691. package/dist/dist-BNwANFJR.mjs +810 -0
  692. package/dist/dist-BNwANFJR.mjs.map +1 -0
  693. package/dist/email-console-bJn3ctqA.mjs +50 -0
  694. package/dist/email-console-bJn3ctqA.mjs.map +1 -0
  695. package/dist/email-locale-CN6WAMx0.mjs +25 -0
  696. package/dist/email-locale-CN6WAMx0.mjs.map +1 -0
  697. package/dist/emdash-runtime-DAjghyEG.mjs +4186 -0
  698. package/dist/emdash-runtime-DAjghyEG.mjs.map +1 -0
  699. package/dist/enrich-Dl3kZ-lP.mjs +194 -0
  700. package/dist/enrich-Dl3kZ-lP.mjs.map +1 -0
  701. package/dist/entry-lock-BJYdBfXb.mjs +1097 -0
  702. package/dist/entry-lock-BJYdBfXb.mjs.map +1 -0
  703. package/dist/entry-lock-DHQOxN7R.mjs +163 -0
  704. package/dist/entry-lock-DHQOxN7R.mjs.map +1 -0
  705. package/dist/entry-lock-DVhCt49A.d.mts +4368 -0
  706. package/dist/entry-lock-DVhCt49A.d.mts.map +1 -0
  707. package/dist/entry-locks-D0foLdjQ.mjs +167 -0
  708. package/dist/entry-locks-D0foLdjQ.mjs.map +1 -0
  709. package/dist/error-CfvOHP0M.mjs +90 -0
  710. package/dist/error-CfvOHP0M.mjs.map +1 -0
  711. package/dist/errors-BF0_LFhW.mjs +460 -0
  712. package/dist/errors-BF0_LFhW.mjs.map +1 -0
  713. package/dist/errors-DgE1zJGG.mjs +120 -0
  714. package/dist/errors-DgE1zJGG.mjs.map +1 -0
  715. package/dist/escape-CuaZhZvL.mjs +9 -0
  716. package/dist/escape-CuaZhZvL.mjs.map +1 -0
  717. package/dist/fence-CMDXJYc_.mjs +162 -0
  718. package/dist/fence-CMDXJYc_.mjs.map +1 -0
  719. package/dist/field-defs-cache-HIgBbqZZ.mjs +77 -0
  720. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +1 -0
  721. package/dist/fts-manager-S-K0laoS.mjs +443 -0
  722. package/dist/fts-manager-S-K0laoS.mjs.map +1 -0
  723. package/dist/gc-DjKY0Ay1.mjs +75 -0
  724. package/dist/gc-DjKY0Ay1.mjs.map +1 -0
  725. package/dist/hash-SDAW6zC-.mjs +37 -0
  726. package/dist/hash-SDAW6zC-.mjs.map +1 -0
  727. package/dist/hook-result-B5bXDgS2.d.mts +31 -0
  728. package/dist/hook-result-B5bXDgS2.d.mts.map +1 -0
  729. package/dist/hreflang-D5uNnsGJ.d.mts +50 -0
  730. package/dist/hreflang-D5uNnsGJ.d.mts.map +1 -0
  731. package/dist/hreflang-DMFBL2eb.mjs +105 -0
  732. package/dist/hreflang-DMFBL2eb.mjs.map +1 -0
  733. package/dist/http-route-dispatch-BitqzwMy.mjs +339 -0
  734. package/dist/http-route-dispatch-BitqzwMy.mjs.map +1 -0
  735. package/dist/identity-IyNWwXr6.mjs +35 -0
  736. package/dist/identity-IyNWwXr6.mjs.map +1 -0
  737. package/dist/import-C3JZplWq.mjs +2020 -0
  738. package/dist/import-C3JZplWq.mjs.map +1 -0
  739. package/dist/index-D-hdtLe8.d.mts +623 -0
  740. package/dist/index-D-hdtLe8.d.mts.map +1 -0
  741. package/dist/index.d.mts +24 -24
  742. package/dist/index.mjs +105 -93
  743. package/dist/install-finalization-DfM1fj5x.mjs +58 -0
  744. package/dist/install-finalization-DfM1fj5x.mjs.map +1 -0
  745. package/dist/keys-yxLm5l35.mjs +61 -0
  746. package/dist/keys-yxLm5l35.mjs.map +1 -0
  747. package/dist/kinds-CRu_T5T5.mjs +961 -0
  748. package/dist/kinds-CRu_T5T5.mjs.map +1 -0
  749. package/dist/lifecycle-BzeGPeQ-.mjs +25 -0
  750. package/dist/lifecycle-BzeGPeQ-.mjs.map +1 -0
  751. package/dist/load-XgJiE6_3.mjs +28 -0
  752. package/dist/load-XgJiE6_3.mjs.map +1 -0
  753. package/dist/loader-BzqeR1ZN.mjs +1086 -0
  754. package/dist/loader-BzqeR1ZN.mjs.map +1 -0
  755. package/dist/loops-BQSzv5Zn.mjs +203 -0
  756. package/dist/loops-BQSzv5Zn.mjs.map +1 -0
  757. package/dist/manifest-builder-B8zR-73J.mjs +189 -0
  758. package/dist/manifest-builder-B8zR-73J.mjs.map +1 -0
  759. package/dist/manifest-schema-CY3zng_M.mjs +492 -0
  760. package/dist/manifest-schema-CY3zng_M.mjs.map +1 -0
  761. package/dist/media/image-endpoint.mjs +1 -1
  762. package/dist/media/index.d.mts +1 -1
  763. package/dist/media/index.mjs +3 -3
  764. package/dist/media/local-runtime.d.mts +14 -14
  765. package/dist/media/local-runtime.d.mts.map +1 -1
  766. package/dist/media/local-runtime.mjs +15 -16
  767. package/dist/media/local-runtime.mjs.map +1 -1
  768. package/dist/media-Pu1L6xir.mjs +408 -0
  769. package/dist/media-Pu1L6xir.mjs.map +1 -0
  770. package/dist/media-Qp5S3eH3.mjs +355 -0
  771. package/dist/media-Qp5S3eH3.mjs.map +1 -0
  772. package/dist/media-allowlist-BSoa9Vvm.mjs +44 -0
  773. package/dist/media-allowlist-BSoa9Vvm.mjs.map +1 -0
  774. package/dist/media-folders-BE0oo2eX.mjs +210 -0
  775. package/dist/media-folders-BE0oo2eX.mjs.map +1 -0
  776. package/dist/media-h7tOiDLj.mjs +221 -0
  777. package/dist/media-h7tOiDLj.mjs.map +1 -0
  778. package/dist/media-url-jArBpzIG.mjs +43 -0
  779. package/dist/media-url-jArBpzIG.mjs.map +1 -0
  780. package/dist/media-usage-My-Vi-ex.mjs +1629 -0
  781. package/dist/media-usage-My-Vi-ex.mjs.map +1 -0
  782. package/dist/media-usage-activation-HKp7zk7W.mjs +78 -0
  783. package/dist/media-usage-activation-HKp7zk7W.mjs.map +1 -0
  784. package/dist/media-usage-work-C2OZLCAd.mjs +586 -0
  785. package/dist/media-usage-work-C2OZLCAd.mjs.map +1 -0
  786. package/dist/media-usage-work-DwUNbgvS.mjs +152 -0
  787. package/dist/media-usage-work-DwUNbgvS.mjs.map +1 -0
  788. package/dist/menus-BM7BPLOb.mjs +139 -0
  789. package/dist/menus-BM7BPLOb.mjs.map +1 -0
  790. package/dist/menus-ITeAbcIF.mjs +753 -0
  791. package/dist/menus-ITeAbcIF.mjs.map +1 -0
  792. package/dist/menus-TsSGmSR4.mjs +3608 -0
  793. package/dist/menus-TsSGmSR4.mjs.map +1 -0
  794. package/dist/migrations/index.d.mts +1 -1
  795. package/dist/migrations/index.mjs +5 -5
  796. package/dist/mime-ChLqYwDk.mjs +36 -0
  797. package/dist/mime-ChLqYwDk.mjs.map +1 -0
  798. package/dist/mode-CCuKXUci.mjs +23 -0
  799. package/dist/mode-CCuKXUci.mjs.map +1 -0
  800. package/dist/node-sqlite-compat-CONMsl-x.mjs +46 -0
  801. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +1 -0
  802. package/dist/normalize-CO2P8-iE.mjs +191 -0
  803. package/dist/normalize-CO2P8-iE.mjs.map +1 -0
  804. package/dist/oauth-authorization-DlMIL5_h.mjs +274 -0
  805. package/dist/oauth-authorization-DlMIL5_h.mjs.map +1 -0
  806. package/dist/oauth-clients-Djq9r_KP.mjs +266 -0
  807. package/dist/oauth-clients-Djq9r_KP.mjs.map +1 -0
  808. package/dist/oauth-state-store-BbjnZXNC.mjs +50 -0
  809. package/dist/oauth-state-store-BbjnZXNC.mjs.map +1 -0
  810. package/dist/oauth-user-lookup-vue9a64A.mjs +26 -0
  811. package/dist/oauth-user-lookup-vue9a64A.mjs.map +1 -0
  812. package/dist/object-cache/memory.d.mts +1 -1
  813. package/dist/object-cache-CqWNY5uP.mjs +582 -0
  814. package/dist/object-cache-CqWNY5uP.mjs.map +1 -0
  815. package/dist/options-DhrI7eMv.mjs +208 -0
  816. package/dist/options-DhrI7eMv.mjs.map +1 -0
  817. package/dist/options-SQCHQCPH.d.mts +81 -0
  818. package/dist/options-SQCHQCPH.d.mts.map +1 -0
  819. package/dist/page/index.d.mts +2 -2
  820. package/dist/page/index.mjs +9 -9
  821. package/dist/parse-CVgO-Qai.d.mts +168 -0
  822. package/dist/parse-CVgO-Qai.d.mts.map +1 -0
  823. package/dist/parse-DY6OD1j_.mjs +81 -0
  824. package/dist/parse-DY6OD1j_.mjs.map +1 -0
  825. package/dist/passkey-config-X_H8128a.mjs +46 -0
  826. package/dist/passkey-config-X_H8128a.mjs.map +1 -0
  827. package/dist/paths-JxokKIbr.mjs +77 -0
  828. package/dist/paths-JxokKIbr.mjs.map +1 -0
  829. package/dist/patterns-BhAvqO0S.mjs +145 -0
  830. package/dist/patterns-BhAvqO0S.mjs.map +1 -0
  831. package/dist/placeholder-MSEd8gty.d.mts +306 -0
  832. package/dist/placeholder-MSEd8gty.d.mts.map +1 -0
  833. package/dist/plan-xjcWrAah.mjs +135 -0
  834. package/dist/plan-xjcWrAah.mjs.map +1 -0
  835. package/dist/plugin-test-runtime.d.mts +38 -15
  836. package/dist/plugin-test-runtime.d.mts.map +1 -1
  837. package/dist/plugin-test-runtime.mjs +112 -100
  838. package/dist/plugin-types.d.mts +2 -2
  839. package/dist/plugin-utils.d.mts +12 -12
  840. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  841. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  842. package/dist/plugins/host.d.mts +5 -5
  843. package/dist/plugins/host.mjs +45 -37
  844. package/dist/plugins-DUXUt8B9.mjs +277 -0
  845. package/dist/plugins-DUXUt8B9.mjs.map +1 -0
  846. package/dist/policy-CUvwAARc.mjs +45 -0
  847. package/dist/policy-CUvwAARc.mjs.map +1 -0
  848. package/dist/portable-text-5O_ZGUjB.mjs +307 -0
  849. package/dist/portable-text-5O_ZGUjB.mjs.map +1 -0
  850. package/dist/preview-CIUcPYr6.mjs +107 -0
  851. package/dist/preview-CIUcPYr6.mjs.map +1 -0
  852. package/dist/protocol-B97DZaFr.d.mts +61 -0
  853. package/dist/protocol-B97DZaFr.d.mts.map +1 -0
  854. package/dist/public-submission-BFBUrqst.mjs +250 -0
  855. package/dist/public-submission-BFBUrqst.mjs.map +1 -0
  856. package/dist/public-url-Bn7U0D7-.mjs +101 -0
  857. package/dist/public-url-Bn7U0D7-.mjs.map +1 -0
  858. package/dist/query-B48peoRT.mjs +890 -0
  859. package/dist/query-B48peoRT.mjs.map +1 -0
  860. package/dist/query-C4IH0uhR.mjs +41 -0
  861. package/dist/query-C4IH0uhR.mjs.map +1 -0
  862. package/dist/rate-limit-BZ6nybgc.mjs +120 -0
  863. package/dist/rate-limit-BZ6nybgc.mjs.map +1 -0
  864. package/dist/receipt-B4wJj5Jq.mjs +43 -0
  865. package/dist/receipt-B4wJj5Jq.mjs.map +1 -0
  866. package/dist/redirect-Cd1E7VUt.mjs +17 -0
  867. package/dist/redirect-Cd1E7VUt.mjs.map +1 -0
  868. package/dist/redirect-iJf5fltD.mjs +415 -0
  869. package/dist/redirect-iJf5fltD.mjs.map +1 -0
  870. package/dist/redirects-CYu1u1aK.mjs +446 -0
  871. package/dist/redirects-CYu1u1aK.mjs.map +1 -0
  872. package/dist/redirects-Cv9apQKj.mjs +148 -0
  873. package/dist/redirects-Cv9apQKj.mjs.map +1 -0
  874. package/dist/registry/testing.mjs +3 -3
  875. package/dist/relation-M4NUCb0b.mjs +334 -0
  876. package/dist/relation-M4NUCb0b.mjs.map +1 -0
  877. package/dist/relations-CCif47Oq.mjs +403 -0
  878. package/dist/relations-CCif47Oq.mjs.map +1 -0
  879. package/dist/relations-CK9CYUyr.mjs +310 -0
  880. package/dist/relations-CK9CYUyr.mjs.map +1 -0
  881. package/dist/request-cache-DzLYKm_x.mjs +104 -0
  882. package/dist/request-cache-DzLYKm_x.mjs.map +1 -0
  883. package/dist/request-context.d.mts +1 -1
  884. package/dist/request-meta-sZXt3sRo.mjs +141 -0
  885. package/dist/request-meta-sZXt3sRo.mjs.map +1 -0
  886. package/dist/resolve-2WbQsCvT.mjs +199 -0
  887. package/dist/resolve-2WbQsCvT.mjs.map +1 -0
  888. package/dist/route-wire--1hLuACz.mjs +197 -0
  889. package/dist/route-wire--1hLuACz.mjs.map +1 -0
  890. package/dist/routes-CUsM40Cc.mjs +272 -0
  891. package/dist/routes-CUsM40Cc.mjs.map +1 -0
  892. package/dist/runner-1y4J9fJB.mjs +5742 -0
  893. package/dist/runner-1y4J9fJB.mjs.map +1 -0
  894. package/dist/runner-D5_LzKXI.d.mts +68 -0
  895. package/dist/runner-D5_LzKXI.d.mts.map +1 -0
  896. package/dist/runtime.d.mts +13 -13
  897. package/dist/runtime.mjs +4 -4
  898. package/dist/schema-BABiRdsH.mjs +13 -0
  899. package/dist/schema-BABiRdsH.mjs.map +1 -0
  900. package/dist/schema-Du3MzCG0.mjs +446 -0
  901. package/dist/schema-Du3MzCG0.mjs.map +1 -0
  902. package/dist/scopes-Dbk-ElhT.mjs +34 -0
  903. package/dist/scopes-Dbk-ElhT.mjs.map +1 -0
  904. package/dist/search-Bt1PL1jf.mjs +448 -0
  905. package/dist/search-Bt1PL1jf.mjs.map +1 -0
  906. package/dist/secrets-CIi0nFiR.mjs +341 -0
  907. package/dist/secrets-CIi0nFiR.mjs.map +1 -0
  908. package/dist/sections-Ddptx_o9.mjs +346 -0
  909. package/dist/sections-Ddptx_o9.mjs.map +1 -0
  910. package/dist/seed/index.d.mts +2 -2
  911. package/dist/seed/index.mjs +35 -30
  912. package/dist/seo/index.d.mts +3 -3
  913. package/dist/seo/index.mjs +25 -21
  914. package/dist/seo/index.mjs.map +1 -1
  915. package/dist/seo-CZT2oLtT.mjs +114 -0
  916. package/dist/seo-CZT2oLtT.mjs.map +1 -0
  917. package/dist/seo-D5w3-Azy.mjs +133 -0
  918. package/dist/seo-D5w3-Azy.mjs.map +1 -0
  919. package/dist/service-DuykXPyW.mjs +150 -0
  920. package/dist/service-DuykXPyW.mjs.map +1 -0
  921. package/dist/session-user-BhaVp8w0.mjs +51 -0
  922. package/dist/session-user-BhaVp8w0.mjs.map +1 -0
  923. package/dist/settings-2xNYr90o.mjs +51 -0
  924. package/dist/settings-2xNYr90o.mjs.map +1 -0
  925. package/dist/settings-CgjRWGW9.mjs +439 -0
  926. package/dist/settings-CgjRWGW9.mjs.map +1 -0
  927. package/dist/settings-DYidIB26.mjs +61 -0
  928. package/dist/settings-DYidIB26.mjs.map +1 -0
  929. package/dist/setup-complete-bOogcHWG.mjs +26 -0
  930. package/dist/setup-complete-bOogcHWG.mjs.map +1 -0
  931. package/dist/setup-nonce-0EGuKM4s.mjs +25 -0
  932. package/dist/setup-nonce-0EGuKM4s.mjs.map +1 -0
  933. package/dist/site-settings-DOgRUoFX.mjs +50 -0
  934. package/dist/site-settings-DOgRUoFX.mjs.map +1 -0
  935. package/dist/site-url-BU_bbxwj.mjs +16 -0
  936. package/dist/site-url-BU_bbxwj.mjs.map +1 -0
  937. package/dist/snapshot-CugwUqKQ.mjs +237 -0
  938. package/dist/snapshot-CugwUqKQ.mjs.map +1 -0
  939. package/dist/ssrf-CJUnJymJ.mjs +406 -0
  940. package/dist/ssrf-CJUnJymJ.mjs.map +1 -0
  941. package/dist/stage-DgrBz_du.mjs +662 -0
  942. package/dist/stage-DgrBz_du.mjs.map +1 -0
  943. package/dist/state-DDiPySSG.mjs +153 -0
  944. package/dist/state-DDiPySSG.mjs.map +1 -0
  945. package/dist/status-DZKIG4a9.mjs +30 -0
  946. package/dist/status-DZKIG4a9.mjs.map +1 -0
  947. package/dist/storage/local.d.mts +1 -1
  948. package/dist/storage/local.mjs +1 -1
  949. package/dist/storage/s3.d.mts +1 -1
  950. package/dist/storage/s3.mjs +1 -1
  951. package/dist/storage-query-Bdv7A62k.d.mts +1576 -0
  952. package/dist/storage-query-Bdv7A62k.d.mts.map +1 -0
  953. package/dist/tar-_1AgTYFu.mjs +449 -0
  954. package/dist/tar-_1AgTYFu.mjs.map +1 -0
  955. package/dist/target-_7pn2Gbg.mjs +27 -0
  956. package/dist/target-_7pn2Gbg.mjs.map +1 -0
  957. package/dist/taxonomies-C1IwNe8Q.mjs +697 -0
  958. package/dist/taxonomies-C1IwNe8Q.mjs.map +1 -0
  959. package/dist/taxonomies-C_XMoRcX.mjs +939 -0
  960. package/dist/taxonomies-C_XMoRcX.mjs.map +1 -0
  961. package/dist/taxonomy-C3Fu1YeH.mjs +525 -0
  962. package/dist/taxonomy-C3Fu1YeH.mjs.map +1 -0
  963. package/dist/tokens-u78jETkX.mjs +171 -0
  964. package/dist/tokens-u78jETkX.mjs.map +1 -0
  965. package/dist/transfer-BhUCrgDc.mjs +8675 -0
  966. package/dist/transfer-BhUCrgDc.mjs.map +1 -0
  967. package/dist/transfer-DIGvR9Af.mjs +166 -0
  968. package/dist/transfer-DIGvR9Af.mjs.map +1 -0
  969. package/dist/transfer-download-Pml7RMio.mjs +33 -0
  970. package/dist/transfer-download-Pml7RMio.mjs.map +1 -0
  971. package/dist/transformations-9gfpwY65.mjs +196 -0
  972. package/dist/transformations-9gfpwY65.mjs.map +1 -0
  973. package/dist/transport-BIfH7_hx.d.mts +42 -0
  974. package/dist/transport-BIfH7_hx.d.mts.map +1 -0
  975. package/dist/transport-DKWIq53q.mjs +136 -0
  976. package/dist/transport-DKWIq53q.mjs.map +1 -0
  977. package/dist/trusted-proxy-tKiVtyTD.mjs +51 -0
  978. package/dist/trusted-proxy-tKiVtyTD.mjs.map +1 -0
  979. package/dist/turnstile-DpsoyOfg.mjs +53 -0
  980. package/dist/turnstile-DpsoyOfg.mjs.map +1 -0
  981. package/dist/types-B4sUC2p1.d.mts +198 -0
  982. package/dist/types-B4sUC2p1.d.mts.map +1 -0
  983. package/dist/types-B7Lmsh1E.d.mts +887 -0
  984. package/dist/types-B7Lmsh1E.d.mts.map +1 -0
  985. package/dist/types-BZakh7Ym.mjs +22 -0
  986. package/dist/types-BZakh7Ym.mjs.map +1 -0
  987. package/dist/types-B_CppEmv.d.mts +264 -0
  988. package/dist/types-B_CppEmv.d.mts.map +1 -0
  989. package/dist/types-BcrBrE6-.mjs +159 -0
  990. package/dist/types-BcrBrE6-.mjs.map +1 -0
  991. package/dist/types-CAZgq9fO.d.mts +124 -0
  992. package/dist/types-CAZgq9fO.d.mts.map +1 -0
  993. package/dist/types-Cd-O03VG.d.mts +363 -0
  994. package/dist/types-Cd-O03VG.d.mts.map +1 -0
  995. package/dist/types-Cr-Kg-3D.d.mts +1641 -0
  996. package/dist/types-Cr-Kg-3D.d.mts.map +1 -0
  997. package/dist/types-D2fvWd1i.d.mts +359 -0
  998. package/dist/types-D2fvWd1i.d.mts.map +1 -0
  999. package/dist/types-D7HUsguf.mjs +77 -0
  1000. package/dist/types-D7HUsguf.mjs.map +1 -0
  1001. package/dist/types-DA1Te3Oy.d.mts +198 -0
  1002. package/dist/types-DA1Te3Oy.d.mts.map +1 -0
  1003. package/dist/types-DhV6Q5bP.mjs +18 -0
  1004. package/dist/types-DhV6Q5bP.mjs.map +1 -0
  1005. package/dist/types-DnnVSl6Y.d.mts +85 -0
  1006. package/dist/types-DnnVSl6Y.d.mts.map +1 -0
  1007. package/dist/types-VT4-BugW.mjs +16 -0
  1008. package/dist/types-VT4-BugW.mjs.map +1 -0
  1009. package/dist/upload-attempts-B68ZGNu9.mjs +32 -0
  1010. package/dist/upload-attempts-B68ZGNu9.mjs.map +1 -0
  1011. package/dist/url-pattern-CCeZMGOh.mjs +33 -0
  1012. package/dist/url-pattern-CCeZMGOh.mjs.map +1 -0
  1013. package/dist/user-DDSL-sGw.mjs +171 -0
  1014. package/dist/user-DDSL-sGw.mjs.map +1 -0
  1015. package/dist/utils-DdhmO9w9.mjs +439 -0
  1016. package/dist/utils-DdhmO9w9.mjs.map +1 -0
  1017. package/dist/validate-CHosPEhs.mjs +453 -0
  1018. package/dist/validate-CHosPEhs.mjs.map +1 -0
  1019. package/dist/validate-CM79QXYE.d.mts +432 -0
  1020. package/dist/validate-CM79QXYE.d.mts.map +1 -0
  1021. package/dist/validation-BFecQczG.mjs +218 -0
  1022. package/dist/validation-BFecQczG.mjs.map +1 -0
  1023. package/dist/version-BRZXVifl.mjs +9 -0
  1024. package/dist/version-BRZXVifl.mjs.map +1 -0
  1025. package/dist/version-DUQDHgrf.mjs +7 -0
  1026. package/dist/version-DUQDHgrf.mjs.map +1 -0
  1027. package/dist/widgets-WdV72brA.mjs +126 -0
  1028. package/dist/widgets-WdV72brA.mjs.map +1 -0
  1029. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +34 -0
  1030. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +1 -0
  1031. package/dist/wxr-taxonomies-DP6ESgMN.mjs +372 -0
  1032. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +1 -0
  1033. package/dist/zod-generator-D6uE4WiS.mjs +389 -0
  1034. package/dist/zod-generator-D6uE4WiS.mjs.map +1 -0
  1035. package/package.json +6 -5
  1036. package/src/api/authorize.ts +17 -0
  1037. package/src/api/email-locale.ts +24 -0
  1038. package/src/api/errors.ts +16 -0
  1039. package/src/api/handlers/api-tokens.ts +18 -3
  1040. package/src/api/handlers/block-types.ts +129 -0
  1041. package/src/api/handlers/bulk-tag.ts +309 -0
  1042. package/src/api/handlers/comments.ts +0 -28
  1043. package/src/api/handlers/index.ts +10 -0
  1044. package/src/api/handlers/manifest.ts +8 -1
  1045. package/src/api/handlers/marketplace.ts +22 -16
  1046. package/src/api/handlers/media-usage.ts +31 -12
  1047. package/src/api/handlers/media.ts +19 -14
  1048. package/src/api/handlers/schema.ts +33 -8
  1049. package/src/api/handlers/settings.ts +2 -2
  1050. package/src/api/handlers/snapshot.ts +4 -0
  1051. package/src/api/handlers/taxonomies.ts +132 -83
  1052. package/src/api/handlers/transfer.ts +1347 -0
  1053. package/src/api/handlers/validate-media-fields.ts +124 -12
  1054. package/src/api/media-usage-write-fence.ts +5 -26
  1055. package/src/api/openapi/document.ts +614 -5
  1056. package/src/api/schemas/auth.ts +7 -1
  1057. package/src/api/schemas/common.ts +5 -0
  1058. package/src/api/schemas/content.ts +20 -1
  1059. package/src/api/schemas/media-usage.ts +11 -0
  1060. package/src/api/schemas/menus.ts +1 -1
  1061. package/src/api/schemas/schema.ts +117 -0
  1062. package/src/api/schemas/settings.ts +3 -3
  1063. package/src/api/schemas/taxonomies.ts +18 -0
  1064. package/src/api/schemas/transfer.ts +249 -0
  1065. package/src/api/transfer-download.ts +36 -0
  1066. package/src/api/types.ts +3 -0
  1067. package/src/astro/integration/routes.ts +31 -0
  1068. package/src/astro/integration/vite-config.ts +26 -0
  1069. package/src/astro/middleware/auth.ts +30 -7
  1070. package/src/astro/middleware/media-usage-write-fence.ts +106 -11
  1071. package/src/astro/middleware/request-context.ts +16 -2
  1072. package/src/astro/middleware.ts +38 -18
  1073. package/src/astro/routes/admin.astro +3 -1
  1074. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +1 -5
  1075. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +4 -3
  1076. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +4 -3
  1077. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +4 -3
  1078. package/src/astro/routes/api/admin/plugins/[id]/update.ts +4 -3
  1079. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +4 -3
  1080. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +4 -3
  1081. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +3 -3
  1082. package/src/astro/routes/api/admin/plugins/registry/install.ts +3 -3
  1083. package/src/astro/routes/api/admin/plugins/registry/publisher-handle.ts +59 -0
  1084. package/src/astro/routes/api/admin/transfer/[...path].ts +143 -0
  1085. package/src/astro/routes/api/admin/transfer/approvals/[id]/approve.ts +35 -0
  1086. package/src/astro/routes/api/admin/transfer/approvals/[id]/deny.ts +35 -0
  1087. package/src/astro/routes/api/admin/transfer/approvals/index.ts +33 -0
  1088. package/src/astro/routes/api/admin/transfer/capabilities.ts +36 -0
  1089. package/src/astro/routes/api/admin/transfer/exports/[id]/advance.ts +34 -0
  1090. package/src/astro/routes/api/admin/transfer/exports/[id]/archive.ts +35 -0
  1091. package/src/astro/routes/api/admin/transfer/exports/[id]/files/[...path].ts +40 -0
  1092. package/src/astro/routes/api/admin/transfer/exports/[id]/index.ts +25 -0
  1093. package/src/astro/routes/api/admin/transfer/exports/[id]/manifest.ts +38 -0
  1094. package/src/astro/routes/api/admin/transfer/exports/index.ts +64 -0
  1095. package/src/astro/routes/api/admin/transfer/imports/[id]/abandon.ts +28 -0
  1096. package/src/astro/routes/api/admin/transfer/imports/[id]/advance.ts +37 -0
  1097. package/src/astro/routes/api/admin/transfer/imports/[id]/analyze.ts +51 -0
  1098. package/src/astro/routes/api/admin/transfer/imports/[id]/cancel.ts +27 -0
  1099. package/src/astro/routes/api/admin/transfer/imports/[id]/execute.ts +48 -0
  1100. package/src/astro/routes/api/admin/transfer/imports/[id]/files/[...path].ts +54 -0
  1101. package/src/astro/routes/api/admin/transfer/imports/[id]/index.ts +25 -0
  1102. package/src/astro/routes/api/admin/transfer/imports/[id]/missing.ts +34 -0
  1103. package/src/astro/routes/api/admin/transfer/imports/[id]/plan.ts +29 -0
  1104. package/src/astro/routes/api/admin/transfer/imports/[id]/receipt.ts +25 -0
  1105. package/src/astro/routes/api/admin/transfer/imports/index.ts +85 -0
  1106. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +9 -1
  1107. package/src/astro/routes/api/auth/invite/index.ts +15 -1
  1108. package/src/astro/routes/api/auth/magic-link/send.ts +9 -1
  1109. package/src/astro/routes/api/auth/magic-link/verify.ts +37 -39
  1110. package/src/astro/routes/api/auth/passkey/options.ts +2 -21
  1111. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +64 -13
  1112. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +16 -1
  1113. package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +11 -4
  1114. package/src/astro/routes/api/mcp.ts +1 -0
  1115. package/src/astro/routes/api/media/[id].ts +5 -15
  1116. package/src/astro/routes/api/media/file/[...key].ts +30 -5
  1117. package/src/astro/routes/api/oauth/authorize.ts +4 -0
  1118. package/src/astro/routes/api/schema/block-types/[slug]/index.ts +29 -0
  1119. package/src/astro/routes/api/schema/block-types/[slug]/versions/[version]/activate.ts +31 -0
  1120. package/src/astro/routes/api/schema/block-types/index.ts +29 -0
  1121. package/src/astro/routes/api/taxonomies/bulk-tag.ts +29 -0
  1122. package/src/astro/routes/api/typegen.ts +8 -4
  1123. package/src/astro/types.ts +4 -0
  1124. package/src/auth/api-tokens.ts +1 -0
  1125. package/src/auth/rate-limit.ts +2 -1
  1126. package/src/auth/scopes.ts +11 -0
  1127. package/src/cleanup.ts +14 -0
  1128. package/src/cli/client-factory.ts +6 -1
  1129. package/src/cli/commands/export-seed.ts +41 -15
  1130. package/src/cli/commands/seed.ts +6 -2
  1131. package/src/cli/commands/site.ts +556 -0
  1132. package/src/cli/index.ts +2 -0
  1133. package/src/cli/site/archive.ts +273 -0
  1134. package/src/cli/site/export.ts +311 -0
  1135. package/src/cli/site/import.ts +815 -0
  1136. package/src/cli/site/shared.ts +241 -0
  1137. package/src/client/index.ts +414 -11
  1138. package/src/client/portable-text.ts +41 -0
  1139. package/src/comments/public-submission.ts +19 -11
  1140. package/src/components/Blocks.astro +46 -0
  1141. package/src/components/Gallery.astro +2 -1
  1142. package/src/components/Image.astro +51 -6
  1143. package/src/components/InlinePortableTextEditor.tsx +28 -18
  1144. package/src/components/blocks.ts +44 -0
  1145. package/src/components/index.ts +14 -4
  1146. package/src/content/converters/gallery.ts +54 -16
  1147. package/src/content/converters/image-link.ts +27 -0
  1148. package/src/content/converters/index.ts +1 -0
  1149. package/src/content/converters/portable-text-to-prosemirror.ts +10 -7
  1150. package/src/content/converters/prosemirror-to-portable-text.ts +14 -0
  1151. package/src/content/converters/types.ts +17 -0
  1152. package/src/database/content-datetime.ts +19 -2
  1153. package/src/database/migrations/035_bounded_404_log.ts +28 -39
  1154. package/src/database/migrations/083_block_types.ts +58 -0
  1155. package/src/database/migrations/084_site_transfer.ts +264 -0
  1156. package/src/database/migrations/085_taxonomy_def_groups.ts +155 -0
  1157. package/src/database/migrations/runner.ts +6 -0
  1158. package/src/database/repositories/audit.ts +10 -1
  1159. package/src/database/repositories/byline.ts +4 -1
  1160. package/src/database/repositories/content.ts +83 -11
  1161. package/src/database/repositories/media-usage.ts +43 -13
  1162. package/src/database/repositories/media.ts +32 -1
  1163. package/src/database/repositories/options.ts +12 -0
  1164. package/src/database/repositories/revision.ts +6 -3
  1165. package/src/database/repositories/taxonomy-def.ts +126 -0
  1166. package/src/database/repositories/taxonomy.ts +65 -26
  1167. package/src/database/types.ts +133 -1
  1168. package/src/db/sqlite.ts +1 -1
  1169. package/src/emdash-runtime.ts +287 -51
  1170. package/src/import/utils.ts +8 -1
  1171. package/src/import/wxr-taxonomies.ts +11 -67
  1172. package/src/index.ts +26 -1
  1173. package/src/loader.ts +9 -5
  1174. package/src/mcp/server.ts +521 -29
  1175. package/src/mcp/transfer.ts +569 -0
  1176. package/src/media/local-runtime.ts +5 -18
  1177. package/src/media/upload-attempts.ts +5 -0
  1178. package/src/media/url.ts +15 -0
  1179. package/src/media/usage/content-fields.ts +69 -5
  1180. package/src/media/usage/content-refresh.ts +13 -66
  1181. package/src/media/usage/content-repair.ts +10 -2
  1182. package/src/media/usage/extractor.ts +74 -3
  1183. package/src/media/usage/projection-fingerprint.ts +14 -0
  1184. package/src/media/usage/schema-invalidation.ts +72 -0
  1185. package/src/media/usage/site-settings.ts +52 -0
  1186. package/src/media/usage/types.ts +2 -0
  1187. package/src/object-cache/index.ts +69 -4
  1188. package/src/plugin-test-runtime.ts +1 -0
  1189. package/src/plugins/context.ts +104 -56
  1190. package/src/plugins/cron.ts +6 -4
  1191. package/src/plugins/define-plugin.ts +11 -1
  1192. package/src/plugins/email-console.ts +2 -0
  1193. package/src/plugins/email.ts +16 -0
  1194. package/src/plugins/hooks.ts +33 -9
  1195. package/src/plugins/manifest-schema.ts +1 -0
  1196. package/src/plugins/route-error.ts +57 -0
  1197. package/src/plugins/routes.ts +5 -60
  1198. package/src/plugins/sandbox/types.ts +22 -2
  1199. package/src/plugins/types.ts +4 -0
  1200. package/src/registry/artifact-fetch.ts +17 -4
  1201. package/src/registry/publisher-handle.ts +273 -0
  1202. package/src/schema/block-type-contract.ts +478 -0
  1203. package/src/schema/block-type-registry.ts +689 -0
  1204. package/src/schema/block-types.ts +110 -0
  1205. package/src/schema/block-values.ts +293 -0
  1206. package/src/schema/byline-registry.ts +1 -1
  1207. package/src/schema/index.ts +28 -0
  1208. package/src/schema/registry.ts +462 -12
  1209. package/src/schema/types.ts +12 -1
  1210. package/src/schema/zod-generator.ts +92 -9
  1211. package/src/search/fts-manager.ts +40 -0
  1212. package/src/seed/apply.ts +173 -49
  1213. package/src/seed/types.ts +23 -3
  1214. package/src/seed/validate.ts +131 -7
  1215. package/src/settings/index.ts +32 -9
  1216. package/src/settings/types.ts +15 -0
  1217. package/src/taxonomies/index.ts +72 -83
  1218. package/src/transfer/analyze/index.ts +45 -0
  1219. package/src/transfer/analyze/issues.ts +55 -0
  1220. package/src/transfer/analyze/plan.ts +327 -0
  1221. package/src/transfer/analyze/read.ts +134 -0
  1222. package/src/transfer/analyze/step.ts +551 -0
  1223. package/src/transfer/analyze/target.ts +269 -0
  1224. package/src/transfer/analyze/unique-keys.ts +228 -0
  1225. package/src/transfer/analyze/validate.ts +1412 -0
  1226. package/src/transfer/analyze/values.ts +227 -0
  1227. package/src/transfer/analyze/write-rules.ts +196 -0
  1228. package/src/transfer/audit.ts +38 -0
  1229. package/src/transfer/auth.ts +25 -0
  1230. package/src/transfer/container/tar.ts +242 -0
  1231. package/src/transfer/domain.ts +248 -0
  1232. package/src/transfer/errors.ts +134 -0
  1233. package/src/transfer/export/exporter.ts +1067 -0
  1234. package/src/transfer/export/fence.ts +84 -0
  1235. package/src/transfer/export/media.ts +165 -0
  1236. package/src/transfer/export/readers.ts +1164 -0
  1237. package/src/transfer/export/verify.ts +677 -0
  1238. package/src/transfer/fence.ts +193 -0
  1239. package/src/transfer/format/canonical.ts +151 -0
  1240. package/src/transfer/format/column-codec.ts +275 -0
  1241. package/src/transfer/format/columns.ts +707 -0
  1242. package/src/transfer/format/digest.ts +287 -0
  1243. package/src/transfer/format/features.ts +91 -0
  1244. package/src/transfer/format/issues.ts +39 -0
  1245. package/src/transfer/format/kinds.ts +936 -0
  1246. package/src/transfer/format/limits.ts +87 -0
  1247. package/src/transfer/format/manifest.ts +297 -0
  1248. package/src/transfer/format/media-refs.ts +716 -0
  1249. package/src/transfer/format/paths.ts +73 -0
  1250. package/src/transfer/format/plan.ts +162 -0
  1251. package/src/transfer/format/receipt.ts +43 -0
  1252. package/src/transfer/format/records.ts +127 -0
  1253. package/src/transfer/format/settings.ts +94 -0
  1254. package/src/transfer/format/transformations.ts +260 -0
  1255. package/src/transfer/format/version.ts +9 -0
  1256. package/src/transfer/gc.ts +103 -0
  1257. package/src/transfer/import/advance.ts +522 -0
  1258. package/src/transfer/import/context.ts +281 -0
  1259. package/src/transfer/import/entries.ts +186 -0
  1260. package/src/transfer/import/ids.ts +40 -0
  1261. package/src/transfer/import/index.ts +15 -0
  1262. package/src/transfer/import/media.ts +141 -0
  1263. package/src/transfer/import/rebuild.ts +300 -0
  1264. package/src/transfer/import/rows.ts +114 -0
  1265. package/src/transfer/import/scaffold.ts +221 -0
  1266. package/src/transfer/import/sql.ts +134 -0
  1267. package/src/transfer/import/stages.ts +329 -0
  1268. package/src/transfer/import/writers.ts +370 -0
  1269. package/src/transfer/index.ts +472 -0
  1270. package/src/transfer/ops/approvals.ts +359 -0
  1271. package/src/transfer/ops/budget.ts +82 -0
  1272. package/src/transfer/ops/collation.ts +21 -0
  1273. package/src/transfer/ops/identity-map.ts +142 -0
  1274. package/src/transfer/ops/media-blobs.ts +135 -0
  1275. package/src/transfer/ops/operations.ts +842 -0
  1276. package/src/transfer/ops/package-index.ts +159 -0
  1277. package/src/transfer/ops/staged-files.ts +231 -0
  1278. package/src/transfer/ops/states.ts +265 -0
  1279. package/src/transfer/ops/time.ts +54 -0
  1280. package/src/transfer/schema-importer.ts +34 -0
  1281. package/src/transfer/site-id.ts +30 -0
  1282. package/src/transfer/staging/assembler.ts +217 -0
  1283. package/src/transfer/staging/keys.ts +94 -0
  1284. package/src/transfer/staging/package.ts +229 -0
  1285. package/src/transfer/staging/stage.ts +231 -0
  1286. package/src/ui.ts +19 -0
  1287. package/src/visual-editing/toolbar.ts +125 -37
  1288. package/dist/action-token-On1sot_c.mjs +0 -26
  1289. package/dist/action-token-On1sot_c.mjs.map +0 -1
  1290. package/dist/activation-CaMfdBt1.mjs +0 -382
  1291. package/dist/activation-CaMfdBt1.mjs.map +0 -1
  1292. package/dist/adapters-Cq10K4_c.d.mts +0 -171
  1293. package/dist/adapters-Cq10K4_c.d.mts.map +0 -1
  1294. package/dist/allowed-origins-1Sa-2wZK.mjs +0 -116
  1295. package/dist/allowed-origins-1Sa-2wZK.mjs.map +0 -1
  1296. package/dist/api-BB5BoQbN.mjs +0 -4831
  1297. package/dist/api-BB5BoQbN.mjs.map +0 -1
  1298. package/dist/api-tokens-BIXItFKV.mjs +0 -163
  1299. package/dist/api-tokens-BIXItFKV.mjs.map +0 -1
  1300. package/dist/api-tokens-DS1VzN7_.mjs +0 -3
  1301. package/dist/apply-CsKm_5S5.mjs +0 -1005
  1302. package/dist/apply-CsKm_5S5.mjs.map +0 -1
  1303. package/dist/artifact-fetch-COiMhVgk.mjs +0 -813
  1304. package/dist/artifact-fetch-COiMhVgk.mjs.map +0 -1
  1305. package/dist/authoritative-records-DbqshfKD.mjs +0 -5172
  1306. package/dist/authoritative-records-DbqshfKD.mjs.map +0 -1
  1307. package/dist/authorize-BXpfMpp0.mjs +0 -40
  1308. package/dist/authorize-BXpfMpp0.mjs.map +0 -1
  1309. package/dist/backup-B4tByjBb.mjs +0 -246
  1310. package/dist/backup-B4tByjBb.mjs.map +0 -1
  1311. package/dist/byline-C8ndlnP0.mjs +0 -906
  1312. package/dist/byline-C8ndlnP0.mjs.map +0 -1
  1313. package/dist/byline-fields-CsrdvaLV.mjs +0 -123
  1314. package/dist/byline-fields-CsrdvaLV.mjs.map +0 -1
  1315. package/dist/byline-registry-D6lWzXk6.mjs +0 -406
  1316. package/dist/byline-registry-D6lWzXk6.mjs.map +0 -1
  1317. package/dist/bylines-CHP44GkL.mjs +0 -232
  1318. package/dist/bylines-CHP44GkL.mjs.map +0 -1
  1319. package/dist/bylines-DxjM4Usz.mjs +0 -214
  1320. package/dist/bylines-DxjM4Usz.mjs.map +0 -1
  1321. package/dist/cache-BByLKGPu.mjs +0 -108
  1322. package/dist/cache-BByLKGPu.mjs.map +0 -1
  1323. package/dist/capture-triggers-gxQxnxrJ.mjs +0 -362
  1324. package/dist/capture-triggers-gxQxnxrJ.mjs.map +0 -1
  1325. package/dist/challenge-store-CkRdSdd8.mjs +0 -51
  1326. package/dist/challenge-store-CkRdSdd8.mjs.map +0 -1
  1327. package/dist/checksum-Bsi2D9M1.mjs +0 -162
  1328. package/dist/checksum-Bsi2D9M1.mjs.map +0 -1
  1329. package/dist/chrome-tags-D7LGB91U.mjs +0 -24
  1330. package/dist/chrome-tags-D7LGB91U.mjs.map +0 -1
  1331. package/dist/chunks-DUK-cWXi.mjs +0 -25
  1332. package/dist/chunks-DUK-cWXi.mjs.map +0 -1
  1333. package/dist/collection-deletion-C-yQB9fq.mjs +0 -436
  1334. package/dist/collection-deletion-C-yQB9fq.mjs.map +0 -1
  1335. package/dist/collection-slugs-cache-D9auiKmI.mjs +0 -85
  1336. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +0 -1
  1337. package/dist/comment-DcT8qdPK.mjs +0 -313
  1338. package/dist/comment-DcT8qdPK.mjs.map +0 -1
  1339. package/dist/comment-reaction-B6KHCLYK.mjs +0 -85
  1340. package/dist/comment-reaction-B6KHCLYK.mjs.map +0 -1
  1341. package/dist/comments-B67VRNGw.mjs +0 -204
  1342. package/dist/comments-B67VRNGw.mjs.map +0 -1
  1343. package/dist/comments-BVzzt6x5.mjs +0 -99
  1344. package/dist/comments-BVzzt6x5.mjs.map +0 -1
  1345. package/dist/components-DIl9Qzh6.mjs +0 -108
  1346. package/dist/components-DIl9Qzh6.mjs.map +0 -1
  1347. package/dist/config-B2acLeC5.mjs +0 -242
  1348. package/dist/config-B2acLeC5.mjs.map +0 -1
  1349. package/dist/config-CGVeT8Hc.mjs +0 -73
  1350. package/dist/config-CGVeT8Hc.mjs.map +0 -1
  1351. package/dist/config-Cw1Xz_Br.d.mts +0 -6387
  1352. package/dist/config-Cw1Xz_Br.d.mts.map +0 -1
  1353. package/dist/config-D3HhLON3.d.mts +0 -39
  1354. package/dist/config-D3HhLON3.d.mts.map +0 -1
  1355. package/dist/content-C0Hl3ktM.mjs +0 -2216
  1356. package/dist/content-C0Hl3ktM.mjs.map +0 -1
  1357. package/dist/content-list-query-CbPdzsna.d.mts +0 -26
  1358. package/dist/content-list-query-CbPdzsna.d.mts.map +0 -1
  1359. package/dist/content-policy-CM4skrNi.mjs +0 -46
  1360. package/dist/content-policy-CM4skrNi.mjs.map +0 -1
  1361. package/dist/content-refresh-iRBhQHr5.mjs +0 -3599
  1362. package/dist/content-refresh-iRBhQHr5.mjs.map +0 -1
  1363. package/dist/content-repair-8uHRIJkd.mjs +0 -440
  1364. package/dist/content-repair-8uHRIJkd.mjs.map +0 -1
  1365. package/dist/context-DJP3aNeR.mjs +0 -1835
  1366. package/dist/context-DJP3aNeR.mjs.map +0 -1
  1367. package/dist/cron-BcR3RN4K.mjs +0 -282
  1368. package/dist/cron-BcR3RN4K.mjs.map +0 -1
  1369. package/dist/dashboard-B0s6QKgi.mjs +0 -151
  1370. package/dist/dashboard-B0s6QKgi.mjs.map +0 -1
  1371. package/dist/default-BtlxWgh9.mjs +0 -81
  1372. package/dist/default-BtlxWgh9.mjs.map +0 -1
  1373. package/dist/deferred-tasks-Ba9fphlE.d.mts +0 -9
  1374. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +0 -1
  1375. package/dist/device-flow-3E5l0fpH.mjs +0 -466
  1376. package/dist/device-flow-3E5l0fpH.mjs.map +0 -1
  1377. package/dist/dialect-helpers-CtYdsX4W.mjs +0 -307
  1378. package/dist/dialect-helpers-CtYdsX4W.mjs.map +0 -1
  1379. package/dist/direct-executor-CDr1quOq.mjs +0 -104
  1380. package/dist/direct-executor-CDr1quOq.mjs.map +0 -1
  1381. package/dist/dist-2hDLsLeq.mjs +0 -810
  1382. package/dist/dist-2hDLsLeq.mjs.map +0 -1
  1383. package/dist/email-console-gc-E3Eqj.mjs +0 -50
  1384. package/dist/email-console-gc-E3Eqj.mjs.map +0 -1
  1385. package/dist/emdash-runtime-CxxL05Z0.mjs +0 -4041
  1386. package/dist/emdash-runtime-CxxL05Z0.mjs.map +0 -1
  1387. package/dist/enrich-C2Mk0lwE.mjs +0 -194
  1388. package/dist/enrich-C2Mk0lwE.mjs.map +0 -1
  1389. package/dist/entry-lock-CwWdnFyR.mjs +0 -1520
  1390. package/dist/entry-lock-CwWdnFyR.mjs.map +0 -1
  1391. package/dist/entry-lock-D9rnj2Lu.mjs +0 -163
  1392. package/dist/entry-lock-D9rnj2Lu.mjs.map +0 -1
  1393. package/dist/entry-lock-DqkvBC6L.d.mts +0 -3503
  1394. package/dist/entry-lock-DqkvBC6L.d.mts.map +0 -1
  1395. package/dist/entry-locks-CO_KaoU5.mjs +0 -167
  1396. package/dist/entry-locks-CO_KaoU5.mjs.map +0 -1
  1397. package/dist/error-CCTCskie.mjs +0 -90
  1398. package/dist/error-CCTCskie.mjs.map +0 -1
  1399. package/dist/errors-W3PA8HqB.mjs +0 -447
  1400. package/dist/errors-W3PA8HqB.mjs.map +0 -1
  1401. package/dist/escape-DN4Qmjsl.mjs +0 -9
  1402. package/dist/escape-DN4Qmjsl.mjs.map +0 -1
  1403. package/dist/field-defs-cache-Db0pJgqn.mjs +0 -77
  1404. package/dist/field-defs-cache-Db0pJgqn.mjs.map +0 -1
  1405. package/dist/fts-manager-CjX0e5BR.mjs +0 -413
  1406. package/dist/fts-manager-CjX0e5BR.mjs.map +0 -1
  1407. package/dist/hash-CLVFzWvx.mjs +0 -37
  1408. package/dist/hash-CLVFzWvx.mjs.map +0 -1
  1409. package/dist/hook-result-KY1jq21o.d.mts +0 -31
  1410. package/dist/hook-result-KY1jq21o.d.mts.map +0 -1
  1411. package/dist/hreflang-BgS2FqhH.d.mts +0 -50
  1412. package/dist/hreflang-BgS2FqhH.d.mts.map +0 -1
  1413. package/dist/hreflang-DOQeTXpg.mjs +0 -105
  1414. package/dist/hreflang-DOQeTXpg.mjs.map +0 -1
  1415. package/dist/http-route-dispatch-MCVKiQCl.mjs +0 -339
  1416. package/dist/http-route-dispatch-MCVKiQCl.mjs.map +0 -1
  1417. package/dist/identity-vFbpuwfY.mjs +0 -35
  1418. package/dist/identity-vFbpuwfY.mjs.map +0 -1
  1419. package/dist/import-got6I69S.mjs +0 -2020
  1420. package/dist/import-got6I69S.mjs.map +0 -1
  1421. package/dist/index-CDwKDkTq.d.mts +0 -623
  1422. package/dist/index-CDwKDkTq.d.mts.map +0 -1
  1423. package/dist/install-finalization-5Os-QZ-2.mjs +0 -58
  1424. package/dist/install-finalization-5Os-QZ-2.mjs.map +0 -1
  1425. package/dist/lifecycle-7e-Lt_kX.mjs +0 -25
  1426. package/dist/lifecycle-7e-Lt_kX.mjs.map +0 -1
  1427. package/dist/load-C56XiwbV.mjs +0 -28
  1428. package/dist/load-C56XiwbV.mjs.map +0 -1
  1429. package/dist/loader-xhNQiT9T.mjs +0 -1004
  1430. package/dist/loader-xhNQiT9T.mjs.map +0 -1
  1431. package/dist/manifest-builder-Bz3nxVET.mjs +0 -189
  1432. package/dist/manifest-builder-Bz3nxVET.mjs.map +0 -1
  1433. package/dist/manifest-schema-Bkh8SeHd.mjs +0 -491
  1434. package/dist/manifest-schema-Bkh8SeHd.mjs.map +0 -1
  1435. package/dist/media-TBlKCwo7.mjs +0 -334
  1436. package/dist/media-TBlKCwo7.mjs.map +0 -1
  1437. package/dist/media-allowlist-s60eAIf6.mjs +0 -44
  1438. package/dist/media-allowlist-s60eAIf6.mjs.map +0 -1
  1439. package/dist/media-folders-ClIRLUQv.mjs +0 -210
  1440. package/dist/media-folders-ClIRLUQv.mjs.map +0 -1
  1441. package/dist/media-url-DY_ijO3B.mjs +0 -43
  1442. package/dist/media-url-DY_ijO3B.mjs.map +0 -1
  1443. package/dist/media-usage-Bd9rFPKN.mjs +0 -1833
  1444. package/dist/media-usage-Bd9rFPKN.mjs.map +0 -1
  1445. package/dist/media-usage-activation-CAhmb14O.mjs +0 -78
  1446. package/dist/media-usage-activation-CAhmb14O.mjs.map +0 -1
  1447. package/dist/media-usage-work-BPlRMOJv.mjs +0 -152
  1448. package/dist/media-usage-work-BPlRMOJv.mjs.map +0 -1
  1449. package/dist/media-usage-work-Cu5DqewW.mjs +0 -586
  1450. package/dist/media-usage-work-Cu5DqewW.mjs.map +0 -1
  1451. package/dist/media-usage-write-fence-DW5oHT7q.mjs +0 -42
  1452. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +0 -1
  1453. package/dist/menus-BUQdvXep.mjs +0 -3732
  1454. package/dist/menus-BUQdvXep.mjs.map +0 -1
  1455. package/dist/menus-DgSUodmF.mjs +0 -753
  1456. package/dist/menus-DgSUodmF.mjs.map +0 -1
  1457. package/dist/mime-CCYRC4r1.mjs +0 -36
  1458. package/dist/mime-CCYRC4r1.mjs.map +0 -1
  1459. package/dist/mode-CkmOhFqj.mjs +0 -23
  1460. package/dist/mode-CkmOhFqj.mjs.map +0 -1
  1461. package/dist/node-sqlite-compat-vpVaILnb.mjs +0 -46
  1462. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +0 -1
  1463. package/dist/normalize-dChXQjwS.mjs +0 -191
  1464. package/dist/normalize-dChXQjwS.mjs.map +0 -1
  1465. package/dist/oauth-authorization-DZ-R-hmx.mjs +0 -274
  1466. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +0 -1
  1467. package/dist/oauth-clients-BMPA8vjl.mjs +0 -266
  1468. package/dist/oauth-clients-BMPA8vjl.mjs.map +0 -1
  1469. package/dist/oauth-state-store-0gIdb48-.mjs +0 -50
  1470. package/dist/oauth-state-store-0gIdb48-.mjs.map +0 -1
  1471. package/dist/oauth-user-lookup-ChVW4UWu.mjs +0 -26
  1472. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +0 -1
  1473. package/dist/object-cache-DlSVbn5Y.mjs +0 -534
  1474. package/dist/object-cache-DlSVbn5Y.mjs.map +0 -1
  1475. package/dist/options-D5WcorD5.mjs +0 -200
  1476. package/dist/options-D5WcorD5.mjs.map +0 -1
  1477. package/dist/options-DAknChnw.d.mts +0 -77
  1478. package/dist/options-DAknChnw.d.mts.map +0 -1
  1479. package/dist/parse-Cr379Av9.mjs +0 -81
  1480. package/dist/parse-Cr379Av9.mjs.map +0 -1
  1481. package/dist/parse-tj9XLNO_.d.mts +0 -165
  1482. package/dist/parse-tj9XLNO_.d.mts.map +0 -1
  1483. package/dist/passkey-config-BD-wMaCf.mjs +0 -46
  1484. package/dist/passkey-config-BD-wMaCf.mjs.map +0 -1
  1485. package/dist/patterns-Do3iqi7N.mjs +0 -145
  1486. package/dist/patterns-Do3iqi7N.mjs.map +0 -1
  1487. package/dist/placeholder-CubPFn_L.d.mts +0 -306
  1488. package/dist/placeholder-CubPFn_L.d.mts.map +0 -1
  1489. package/dist/plugins-DHurtdXQ.mjs +0 -277
  1490. package/dist/plugins-DHurtdXQ.mjs.map +0 -1
  1491. package/dist/policy-pL9QLKZm.mjs +0 -45
  1492. package/dist/policy-pL9QLKZm.mjs.map +0 -1
  1493. package/dist/portable-text-oAwodbPS.mjs +0 -286
  1494. package/dist/portable-text-oAwodbPS.mjs.map +0 -1
  1495. package/dist/preview-Cup2bj8c.mjs +0 -107
  1496. package/dist/preview-Cup2bj8c.mjs.map +0 -1
  1497. package/dist/protocol-C1CNiKX4.d.mts +0 -61
  1498. package/dist/protocol-C1CNiKX4.d.mts.map +0 -1
  1499. package/dist/public-submission-Cs-pFMQK.mjs +0 -245
  1500. package/dist/public-submission-Cs-pFMQK.mjs.map +0 -1
  1501. package/dist/public-url-BWVHsfQv.mjs +0 -101
  1502. package/dist/public-url-BWVHsfQv.mjs.map +0 -1
  1503. package/dist/query-CxnFU6sz.mjs +0 -890
  1504. package/dist/query-CxnFU6sz.mjs.map +0 -1
  1505. package/dist/query-sgHYEgBW.mjs +0 -41
  1506. package/dist/query-sgHYEgBW.mjs.map +0 -1
  1507. package/dist/rate-limit-CqJn-w4h.mjs +0 -120
  1508. package/dist/rate-limit-CqJn-w4h.mjs.map +0 -1
  1509. package/dist/redirect-BrChFPIu.mjs +0 -17
  1510. package/dist/redirect-BrChFPIu.mjs.map +0 -1
  1511. package/dist/redirect-D2Yo-b6S.mjs +0 -415
  1512. package/dist/redirect-D2Yo-b6S.mjs.map +0 -1
  1513. package/dist/redirects-BCiTaIQ-.mjs +0 -146
  1514. package/dist/redirects-BCiTaIQ-.mjs.map +0 -1
  1515. package/dist/redirects-CAoL3r26.mjs +0 -644
  1516. package/dist/redirects-CAoL3r26.mjs.map +0 -1
  1517. package/dist/registry-xKzE-_m5.mjs +0 -1222
  1518. package/dist/registry-xKzE-_m5.mjs.map +0 -1
  1519. package/dist/relation-ClsWcYg2.mjs +0 -334
  1520. package/dist/relation-ClsWcYg2.mjs.map +0 -1
  1521. package/dist/relations-B4w-G5U9.mjs +0 -309
  1522. package/dist/relations-B4w-G5U9.mjs.map +0 -1
  1523. package/dist/relations-C3Td_mct.mjs +0 -403
  1524. package/dist/relations-C3Td_mct.mjs.map +0 -1
  1525. package/dist/request-cache-DaMhSQdx.mjs +0 -104
  1526. package/dist/request-cache-DaMhSQdx.mjs.map +0 -1
  1527. package/dist/request-meta-C8yl_sIs.mjs +0 -141
  1528. package/dist/request-meta-C8yl_sIs.mjs.map +0 -1
  1529. package/dist/resolve-BJIS8wKr.mjs +0 -199
  1530. package/dist/resolve-BJIS8wKr.mjs.map +0 -1
  1531. package/dist/route-wire-D66L2oaZ.mjs +0 -197
  1532. package/dist/route-wire-D66L2oaZ.mjs.map +0 -1
  1533. package/dist/routes-CWzxcZpn.mjs +0 -321
  1534. package/dist/routes-CWzxcZpn.mjs.map +0 -1
  1535. package/dist/runner-3gfxRsJG.d.mts +0 -68
  1536. package/dist/runner-3gfxRsJG.d.mts.map +0 -1
  1537. package/dist/runner-CIltKk4i.mjs +0 -5502
  1538. package/dist/runner-CIltKk4i.mjs.map +0 -1
  1539. package/dist/schema-DQIE9Htn.mjs +0 -420
  1540. package/dist/schema-DQIE9Htn.mjs.map +0 -1
  1541. package/dist/schema-ILPFMPW3.mjs +0 -9
  1542. package/dist/schema-ILPFMPW3.mjs.map +0 -1
  1543. package/dist/scopes-Bn8_rCSt.mjs +0 -27
  1544. package/dist/scopes-Bn8_rCSt.mjs.map +0 -1
  1545. package/dist/search-D6muneha.mjs +0 -448
  1546. package/dist/search-D6muneha.mjs.map +0 -1
  1547. package/dist/secrets-DNgVgz_e.mjs +0 -341
  1548. package/dist/secrets-DNgVgz_e.mjs.map +0 -1
  1549. package/dist/sections-BPCEGYWd.mjs +0 -346
  1550. package/dist/sections-BPCEGYWd.mjs.map +0 -1
  1551. package/dist/seo-BtU70b7l.mjs +0 -114
  1552. package/dist/seo-BtU70b7l.mjs.map +0 -1
  1553. package/dist/seo-rCk6pDwT.mjs +0 -133
  1554. package/dist/seo-rCk6pDwT.mjs.map +0 -1
  1555. package/dist/service-Bpy5iTX0.mjs +0 -150
  1556. package/dist/service-Bpy5iTX0.mjs.map +0 -1
  1557. package/dist/session-user-BQeS2Mrb.mjs +0 -51
  1558. package/dist/session-user-BQeS2Mrb.mjs.map +0 -1
  1559. package/dist/settings-CsoLiwpL.mjs +0 -420
  1560. package/dist/settings-CsoLiwpL.mjs.map +0 -1
  1561. package/dist/settings-DCnWtfSZ.mjs +0 -51
  1562. package/dist/settings-DCnWtfSZ.mjs.map +0 -1
  1563. package/dist/setup-complete-BrZaXpVV.mjs +0 -26
  1564. package/dist/setup-complete-BrZaXpVV.mjs.map +0 -1
  1565. package/dist/setup-nonce-Cb9-884O.mjs +0 -25
  1566. package/dist/setup-nonce-Cb9-884O.mjs.map +0 -1
  1567. package/dist/site-url-DjhYCaep.mjs +0 -16
  1568. package/dist/site-url-DjhYCaep.mjs.map +0 -1
  1569. package/dist/snapshot-C32Xuv3o.mjs +0 -233
  1570. package/dist/snapshot-C32Xuv3o.mjs.map +0 -1
  1571. package/dist/ssrf-Co1GGFZz.mjs +0 -406
  1572. package/dist/ssrf-Co1GGFZz.mjs.map +0 -1
  1573. package/dist/state-C7gCoiHr.mjs +0 -153
  1574. package/dist/state-C7gCoiHr.mjs.map +0 -1
  1575. package/dist/status-DLoBmcDz.mjs +0 -30
  1576. package/dist/status-DLoBmcDz.mjs.map +0 -1
  1577. package/dist/storage-query-CPctdMKX.d.mts +0 -1519
  1578. package/dist/storage-query-CPctdMKX.d.mts.map +0 -1
  1579. package/dist/target-CUKlGrXb.mjs +0 -27
  1580. package/dist/target-CUKlGrXb.mjs.map +0 -1
  1581. package/dist/taxonomies-Bs5dJVDJ.mjs +0 -899
  1582. package/dist/taxonomies-Bs5dJVDJ.mjs.map +0 -1
  1583. package/dist/taxonomies-DjGU22ur.mjs +0 -707
  1584. package/dist/taxonomies-DjGU22ur.mjs.map +0 -1
  1585. package/dist/taxonomy-c1Q8PMFF.mjs +0 -508
  1586. package/dist/taxonomy-c1Q8PMFF.mjs.map +0 -1
  1587. package/dist/tokens-Ns02GAma.mjs +0 -171
  1588. package/dist/tokens-Ns02GAma.mjs.map +0 -1
  1589. package/dist/transport-B8P1xsqk.mjs +0 -136
  1590. package/dist/transport-B8P1xsqk.mjs.map +0 -1
  1591. package/dist/transport-BLHZZcD_.d.mts +0 -42
  1592. package/dist/transport-BLHZZcD_.d.mts.map +0 -1
  1593. package/dist/trusted-proxy-Cg7SuD15.mjs +0 -51
  1594. package/dist/trusted-proxy-Cg7SuD15.mjs.map +0 -1
  1595. package/dist/turnstile-DWCSh_Qc.mjs +0 -53
  1596. package/dist/turnstile-DWCSh_Qc.mjs.map +0 -1
  1597. package/dist/types-B3RkqvDW.mjs +0 -156
  1598. package/dist/types-B3RkqvDW.mjs.map +0 -1
  1599. package/dist/types-BtuppOTV.mjs +0 -16
  1600. package/dist/types-BtuppOTV.mjs.map +0 -1
  1601. package/dist/types-CCR3ivXE.d.mts +0 -363
  1602. package/dist/types-CCR3ivXE.d.mts.map +0 -1
  1603. package/dist/types-CSHgU_-_.mjs +0 -18
  1604. package/dist/types-CSHgU_-_.mjs.map +0 -1
  1605. package/dist/types-CbwqGOXm.d.mts +0 -766
  1606. package/dist/types-CbwqGOXm.d.mts.map +0 -1
  1607. package/dist/types-D4RGIc2I.d.mts +0 -198
  1608. package/dist/types-D4RGIc2I.d.mts.map +0 -1
  1609. package/dist/types-DEHidMEk.d.mts +0 -1637
  1610. package/dist/types-DEHidMEk.d.mts.map +0 -1
  1611. package/dist/types-DQeU2SR7.d.mts +0 -279
  1612. package/dist/types-DQeU2SR7.d.mts.map +0 -1
  1613. package/dist/types-DxQWoQLA.d.mts +0 -264
  1614. package/dist/types-DxQWoQLA.d.mts.map +0 -1
  1615. package/dist/types-FBBnGZ2Y.d.mts +0 -198
  1616. package/dist/types-FBBnGZ2Y.d.mts.map +0 -1
  1617. package/dist/types-ZCnlropY.mjs +0 -69
  1618. package/dist/types-ZCnlropY.mjs.map +0 -1
  1619. package/dist/types-_Qtyawiy.d.mts +0 -124
  1620. package/dist/types-_Qtyawiy.d.mts.map +0 -1
  1621. package/dist/types-gC6FAoa_.d.mts +0 -75
  1622. package/dist/types-gC6FAoa_.d.mts.map +0 -1
  1623. package/dist/types-k--LneIF.mjs +0 -22
  1624. package/dist/types-k--LneIF.mjs.map +0 -1
  1625. package/dist/upload-attempts-2xdnoKGe.mjs +0 -27
  1626. package/dist/upload-attempts-2xdnoKGe.mjs.map +0 -1
  1627. package/dist/url-pattern-3m3reMzr.mjs +0 -33
  1628. package/dist/url-pattern-3m3reMzr.mjs.map +0 -1
  1629. package/dist/user-2R1gceFl.mjs +0 -171
  1630. package/dist/user-2R1gceFl.mjs.map +0 -1
  1631. package/dist/utils-CC2oNGV8.mjs +0 -435
  1632. package/dist/utils-CC2oNGV8.mjs.map +0 -1
  1633. package/dist/validate-CaFSi_Wa.mjs +0 -384
  1634. package/dist/validate-CaFSi_Wa.mjs.map +0 -1
  1635. package/dist/validate-CyQ7I3xF.d.mts +0 -410
  1636. package/dist/validate-CyQ7I3xF.d.mts.map +0 -1
  1637. package/dist/validation-nsX2uixg.mjs +0 -216
  1638. package/dist/validation-nsX2uixg.mjs.map +0 -1
  1639. package/dist/version-DGh4SL8e.mjs +0 -7
  1640. package/dist/version-DGh4SL8e.mjs.map +0 -1
  1641. package/dist/widgets-B7ued6f5.mjs +0 -126
  1642. package/dist/widgets-B7ued6f5.mjs.map +0 -1
  1643. package/dist/wxr-taxonomies-BtH3jYSg.mjs +0 -406
  1644. package/dist/wxr-taxonomies-BtH3jYSg.mjs.map +0 -1
  1645. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +0 -34
  1646. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +0 -1
  1647. package/dist/zod-generator-DuBjYyrI.mjs +0 -329
  1648. package/dist/zod-generator-DuBjYyrI.mjs.map +0 -1
  1649. /package/dist/{ssrf-BRpTDMV6.mjs → ssrf-DpBH7aOt.mjs} +0 -0
@@ -1,362 +0,0 @@
1
- import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
2
- import { l as isPostgres, v as tableExists } from "./dialect-helpers-CtYdsX4W.mjs";
3
- import { sql } from "kysely";
4
-
5
- //#region src/media/usage/capture-triggers.ts
6
- const POSTGRES_TRIGGER_FUNCTION = "emdash_media_usage_capture_work";
7
- const POSTGRES_IDENTIFIER_LIMIT = 63;
8
- const CAPTURE_TRIGGER_VERSION = 1;
9
- const OWNED_TRIGGER_PREFIX = "emdash_mu_";
10
- const MAX_OWNED_CAPTURE_TRIGGERS = 100;
11
- const WHITESPACE_PATTERN = /\s+/g;
12
- const TRAILING_SEMICOLON_PATTERN = /;$/;
13
- async function installMediaUsageCaptureTriggers(db, identity, options = {}) {
14
- const identifiers = await captureIdentifiers(identity);
15
- if (isPostgres(db)) await installPostgresFunction(db);
16
- const installedNames = await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1);
17
- if (installedNames.length > MAX_OWNED_CAPTURE_TRIGGERS) throw new Error("Media usage capture trigger set exceeds the activation limit");
18
- if (await hasExactCaptureTriggers(db, identifiers, identity, installedNames)) return;
19
- await assertCaptureLifecycle(db, identity, ["installing"]);
20
- const expectedNames = new Set(Object.values(identifiers.triggerNames));
21
- const retainedNames = new Set(options.replaceExisting === false ? installedNames.filter((name) => expectedNames.has(name)) : []);
22
- await removeCaptureTriggers(db, identifiers.tableName, installedNames.filter((name) => !retainedNames.has(name)));
23
- for (const operation of captureOperations) {
24
- if (retainedNames.has(identifiers.triggerNames[operation])) continue;
25
- if (isPostgres(db)) await postgresCreateTrigger(db, identifiers.tableName, identifiers.triggerNames[operation], operation, identity);
26
- else await sqliteCreateTrigger(db, identifiers.tableName, identifiers.triggerNames[operation], operation, identity);
27
- }
28
- await assertExpectedTriggerSet(db, identifiers, identity);
29
- }
30
- async function verifyMediaUsageCaptureTriggers(db, identity) {
31
- const identifiers = await captureIdentifiers(identity);
32
- if (!await tableExists(db, identifiers.tableName)) return false;
33
- return hasExactCaptureTriggers(db, identifiers, identity, await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1));
34
- }
35
- const captureOperations = [
36
- "insert",
37
- "update",
38
- "delete"
39
- ];
40
- async function captureIdentifiers(identity) {
41
- validateIdentifier(identity.collectionSlug, "collection slug");
42
- const tableName = `ec_${identity.collectionSlug}`;
43
- validateIdentifier(tableName, "content table");
44
- const digest = await identityDigest(`${CAPTURE_TRIGGER_VERSION}:${identity.collectionId}:${identity.collectionSlug}`);
45
- const triggerNames = {
46
- insert: `emdash_mu_${digest}_ai`,
47
- update: `emdash_mu_${digest}_au`,
48
- delete: `emdash_mu_${digest}_ad`
49
- };
50
- for (const triggerName of Object.values(triggerNames)) {
51
- validateIdentifier(triggerName, "media usage trigger");
52
- if (triggerName.length > POSTGRES_IDENTIFIER_LIMIT) throw new Error(`Media usage trigger name exceeds ${POSTGRES_IDENTIFIER_LIMIT} bytes`);
53
- }
54
- return {
55
- tableName,
56
- triggerNames
57
- };
58
- }
59
- async function identityDigest(value) {
60
- const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
61
- return Array.from(new Uint8Array(digest).slice(0, 16), (byte) => byte.toString(16).padStart(2, "0")).join("");
62
- }
63
- async function removeCaptureTriggers(db, tableName, triggerNames) {
64
- for (const triggerName of triggerNames) {
65
- validateIdentifier(triggerName, "media usage trigger");
66
- if (isPostgres(db)) await sql`
67
- DROP TRIGGER IF EXISTS ${sql.ref(triggerName)} ON ${sql.ref(tableName)}
68
- `.execute(db);
69
- else await sql`DROP TRIGGER IF EXISTS ${sql.ref(triggerName)}`.execute(db);
70
- }
71
- }
72
- async function listOwnedCaptureTriggers(db, tableName, limit) {
73
- const limitClause = limit === void 0 ? sql`` : sql`LIMIT ${limit}`;
74
- if (isPostgres(db)) return (await sql`
75
- SELECT trigger.tgname AS name
76
- FROM pg_trigger AS trigger
77
- INNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid
78
- INNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace
79
- WHERE namespace.nspname = current_schema()
80
- AND relation.relname = ${tableName}
81
- AND NOT trigger.tgisinternal
82
- AND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}
83
- ${limitClause}
84
- `.execute(db)).rows.map((row) => row.name);
85
- return (await sql`
86
- SELECT name
87
- FROM sqlite_master
88
- WHERE type = 'trigger'
89
- AND tbl_name = ${tableName}
90
- AND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}
91
- ${limitClause}
92
- `.execute(db)).rows.map((row) => row.name);
93
- }
94
- async function hasExactCaptureTriggers(db, identifiers, identity, installedNames) {
95
- const expectedNames = new Set(Object.values(identifiers.triggerNames));
96
- if (installedNames.length !== expectedNames.size || installedNames.some((name) => !expectedNames.has(name))) return false;
97
- if (isPostgres(db)) {
98
- const result = await sql`
99
- SELECT
100
- trigger.tgname AS name,
101
- trigger.tgtype AS trigger_type,
102
- procedure.proname AS function_name,
103
- encode(trigger.tgargs, 'hex') AS arguments_hex,
104
- trigger.tgenabled AS enabled,
105
- trigger.tgqual IS NOT NULL AS has_when
106
- FROM pg_trigger AS trigger
107
- INNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid
108
- INNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace
109
- INNER JOIN pg_proc AS procedure ON procedure.oid = trigger.tgfoid
110
- INNER JOIN pg_namespace AS function_namespace ON function_namespace.oid = procedure.pronamespace
111
- WHERE namespace.nspname = current_schema()
112
- AND function_namespace.nspname = current_schema()
113
- AND relation.relname = ${identifiers.tableName}
114
- AND NOT trigger.tgisinternal
115
- AND trigger.tgconstraint = 0
116
- AND NOT trigger.tgdeferrable
117
- AND NOT trigger.tginitdeferred
118
- AND trigger.tgattr = ''::int2vector
119
- AND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}
120
- `.execute(db);
121
- const expectedArguments = triggerArgumentsHex(identity);
122
- return captureOperations.every((operation) => {
123
- const row = result.rows.find((candidate) => candidate.name === identifiers.triggerNames[operation]);
124
- return row?.function_name === POSTGRES_TRIGGER_FUNCTION && Number(row.trigger_type) === postgresTriggerType(operation) && row.arguments_hex === expectedArguments && row.enabled === "O" && row.has_when === false;
125
- });
126
- }
127
- const result = await sql`
128
- SELECT name, sql AS definition
129
- FROM sqlite_master
130
- WHERE type = 'trigger'
131
- AND tbl_name = ${identifiers.tableName}
132
- AND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}
133
- `.execute(db);
134
- return captureOperations.every((operation) => {
135
- const row = result.rows.find((candidate) => candidate.name === identifiers.triggerNames[operation]);
136
- const contentId = operation === "delete" ? sql`OLD.id` : sql`NEW.id`;
137
- const expected = sqliteTriggerSql(identifiers.tableName, identifiers.triggerNames[operation], operationSql(operation), contentId, identity).compile(db).sql;
138
- return row ? normalizeDdl(row.definition) === normalizeDdl(expected) : false;
139
- });
140
- }
141
- function triggerArgumentsHex(identity) {
142
- const bytes = new TextEncoder().encode(`${identity.collectionId}\0${identity.collectionSlug}\0`);
143
- return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
144
- }
145
- function postgresTriggerType(operation) {
146
- switch (operation) {
147
- case "insert": return 5;
148
- case "update": return 17;
149
- case "delete": return 9;
150
- }
151
- }
152
- function normalizeDdl(definition) {
153
- return definition.replace(WHITESPACE_PATTERN, " ").trim().replace(TRAILING_SEMICOLON_PATTERN, "");
154
- }
155
- async function assertCaptureLifecycle(db, identity, allowedStates) {
156
- const lifecycle = await db.selectFrom("_emdash_media_usage_index_status").select("capture_state").where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", identity.collectionSlug).where("collection_id", "=", identity.collectionId).executeTakeFirst();
157
- if (!lifecycle?.capture_state || !allowedStates.includes(lifecycle.capture_state)) throw new Error("Media usage capture trigger changes require a fenced collection lifecycle");
158
- }
159
- async function assertExpectedTriggerSet(db, identifiers, identity) {
160
- if (!await hasExactCaptureTriggers(db, identifiers, identity, await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1))) throw new Error("Media usage capture trigger installation is incomplete");
161
- }
162
- async function installPostgresFunction(db) {
163
- await sql`
164
- CREATE OR REPLACE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}()
165
- RETURNS trigger
166
- LANGUAGE plpgsql
167
- AS $function$
168
- DECLARE
169
- v_collection_id text := TG_ARGV[0];
170
- v_collection_slug text := TG_ARGV[1];
171
- v_content_id text;
172
- v_epoch bigint;
173
- v_now text := to_char(
174
- clock_timestamp() AT TIME ZONE 'UTC',
175
- 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
176
- );
177
- BEGIN
178
- IF TG_OP = 'DELETE' THEN
179
- v_content_id := OLD.id;
180
- ELSE
181
- v_content_id := NEW.id;
182
- END IF;
183
-
184
- UPDATE _emdash_media_usage_index_status
185
- SET change_epoch = change_epoch + 1,
186
- status = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,
187
- completed_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,
188
- updated_at = v_now
189
- WHERE adapter_id = 'content-media'
190
- AND scope_type = 'collection'
191
- AND scope_key = v_collection_slug
192
- AND collection_id = v_collection_id
193
- AND capture_state = 'active'
194
- AND EXISTS (
195
- SELECT 1
196
- FROM _emdash_collections AS collection
197
- WHERE collection.id = v_collection_id
198
- AND collection.slug = v_collection_slug
199
- )
200
- RETURNING change_epoch INTO v_epoch;
201
-
202
- IF NOT FOUND THEN
203
- RAISE EXCEPTION USING
204
- ERRCODE = 'P0001',
205
- MESSAGE = 'media usage capture inactive';
206
- END IF;
207
-
208
- INSERT INTO _emdash_media_usage_work (
209
- collection_id,
210
- collection_slug,
211
- content_id,
212
- change_epoch,
213
- work_version,
214
- state,
215
- attempt_count,
216
- next_attempt_at,
217
- lease_token,
218
- lease_expires_at,
219
- last_attempted_at,
220
- last_error_code,
221
- created_at,
222
- updated_at
223
- )
224
- VALUES (
225
- v_collection_id,
226
- v_collection_slug,
227
- v_content_id,
228
- v_epoch,
229
- 1,
230
- 'pending',
231
- 0,
232
- v_now,
233
- NULL,
234
- NULL,
235
- NULL,
236
- NULL,
237
- v_now,
238
- v_now
239
- )
240
- ON CONFLICT (collection_id, content_id) DO UPDATE SET
241
- collection_slug = EXCLUDED.collection_slug,
242
- change_epoch = EXCLUDED.change_epoch,
243
- work_version = _emdash_media_usage_work.work_version + 1,
244
- state = 'pending',
245
- attempt_count = 0,
246
- next_attempt_at = EXCLUDED.next_attempt_at,
247
- lease_token = NULL,
248
- lease_expires_at = NULL,
249
- last_attempted_at = NULL,
250
- last_error_code = NULL,
251
- updated_at = EXCLUDED.updated_at;
252
-
253
- RETURN NULL;
254
- END;
255
- $function$
256
- `.execute(db);
257
- }
258
- async function postgresCreateTrigger(db, tableName, triggerName, operation, identity) {
259
- await sql`
260
- CREATE TRIGGER ${sql.ref(triggerName)}
261
- AFTER ${operationSql(operation)} ON ${sql.ref(tableName)}
262
- FOR EACH ROW
263
- EXECUTE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}(
264
- ${sql.lit(identity.collectionId)},
265
- ${sql.lit(identity.collectionSlug)}
266
- )
267
- `.execute(db);
268
- }
269
- async function sqliteCreateTrigger(db, tableName, triggerName, operation, identity) {
270
- const contentId = operation === "delete" ? sql`OLD.id` : sql`NEW.id`;
271
- await sqliteTriggerSql(tableName, triggerName, operationSql(operation), contentId, identity).execute(db);
272
- }
273
- function sqliteTriggerSql(tableName, triggerName, operation, contentId, identity) {
274
- return sql`
275
- CREATE TRIGGER ${sql.ref(triggerName)}
276
- AFTER ${operation} ON ${sql.ref(tableName)}
277
- FOR EACH ROW
278
- BEGIN
279
- UPDATE _emdash_media_usage_index_status
280
- SET change_epoch = change_epoch + 1,
281
- status = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,
282
- completed_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,
283
- updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
284
- WHERE adapter_id = 'content-media'
285
- AND scope_type = 'collection'
286
- AND scope_key = ${sql.lit(identity.collectionSlug)}
287
- AND collection_id = ${sql.lit(identity.collectionId)}
288
- AND capture_state = 'active'
289
- AND EXISTS (
290
- SELECT 1
291
- FROM _emdash_collections AS collection
292
- WHERE collection.id = ${sql.lit(identity.collectionId)}
293
- AND collection.slug = ${sql.lit(identity.collectionSlug)}
294
- );
295
-
296
- SELECT CASE
297
- WHEN changes() <> 1 THEN RAISE(ABORT, 'media usage capture inactive')
298
- END;
299
-
300
- INSERT INTO _emdash_media_usage_work (
301
- collection_id,
302
- collection_slug,
303
- content_id,
304
- change_epoch,
305
- work_version,
306
- state,
307
- attempt_count,
308
- next_attempt_at,
309
- lease_token,
310
- lease_expires_at,
311
- last_attempted_at,
312
- last_error_code,
313
- created_at,
314
- updated_at
315
- )
316
- SELECT
317
- ${sql.lit(identity.collectionId)},
318
- ${sql.lit(identity.collectionSlug)},
319
- ${contentId},
320
- change_epoch,
321
- 1,
322
- 'pending',
323
- 0,
324
- strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
325
- NULL,
326
- NULL,
327
- NULL,
328
- NULL,
329
- strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
330
- strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
331
- FROM _emdash_media_usage_index_status
332
- WHERE adapter_id = 'content-media'
333
- AND scope_type = 'collection'
334
- AND scope_key = ${sql.lit(identity.collectionSlug)}
335
- AND collection_id = ${sql.lit(identity.collectionId)}
336
- AND capture_state = 'active'
337
- ON CONFLICT (collection_id, content_id) DO UPDATE SET
338
- collection_slug = excluded.collection_slug,
339
- change_epoch = excluded.change_epoch,
340
- work_version = _emdash_media_usage_work.work_version + 1,
341
- state = 'pending',
342
- attempt_count = 0,
343
- next_attempt_at = excluded.next_attempt_at,
344
- lease_token = NULL,
345
- lease_expires_at = NULL,
346
- last_attempted_at = NULL,
347
- last_error_code = NULL,
348
- updated_at = excluded.updated_at;
349
- END
350
- `;
351
- }
352
- function operationSql(operation) {
353
- switch (operation) {
354
- case "insert": return sql`INSERT`;
355
- case "update": return sql`UPDATE`;
356
- case "delete": return sql`DELETE`;
357
- }
358
- }
359
-
360
- //#endregion
361
- export { verifyMediaUsageCaptureTriggers as n, installMediaUsageCaptureTriggers as t };
362
- //# sourceMappingURL=capture-triggers-gxQxnxrJ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capture-triggers-gxQxnxrJ.mjs","names":[],"sources":["../src/media/usage/capture-triggers.ts"],"sourcesContent":["import { sql, type Kysely, type RawBuilder } from \"kysely\";\n\nimport { isPostgres, tableExists } from \"../../database/dialect-helpers.js\";\nimport type { Database } from \"../../database/types.js\";\nimport { validateIdentifier } from \"../../database/validate.js\";\n\nconst POSTGRES_TRIGGER_FUNCTION = \"emdash_media_usage_capture_work\";\nconst POSTGRES_IDENTIFIER_LIMIT = 63;\nconst CAPTURE_TRIGGER_VERSION = 1;\nconst OWNED_TRIGGER_PREFIX = \"emdash_mu_\";\nconst MAX_OWNED_CAPTURE_TRIGGERS = 100;\nconst WHITESPACE_PATTERN = /\\s+/g;\nconst TRAILING_SEMICOLON_PATTERN = /;$/;\n\nexport interface MediaUsageCaptureIdentity {\n\tcollectionId: string;\n\tcollectionSlug: string;\n}\n\ntype CaptureOperation = \"insert\" | \"update\" | \"delete\";\n\nexport async function installMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n\toptions: { replaceExisting?: boolean } = {},\n): Promise<void> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (isPostgres(db)) await installPostgresFunction(db);\n\tconst installedNames = await listOwnedCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tMAX_OWNED_CAPTURE_TRIGGERS + 1,\n\t);\n\tif (installedNames.length > MAX_OWNED_CAPTURE_TRIGGERS) {\n\t\tthrow new Error(\"Media usage capture trigger set exceeds the activation limit\");\n\t}\n\tif (await hasExactCaptureTriggers(db, identifiers, identity, installedNames)) {\n\t\treturn;\n\t}\n\n\tawait assertCaptureLifecycle(db, identity, [\"installing\"]);\n\tconst expectedNames = new Set(Object.values(identifiers.triggerNames));\n\tconst retainedNames = new Set(\n\t\toptions.replaceExisting === false\n\t\t\t? installedNames.filter((name) => expectedNames.has(name))\n\t\t\t: [],\n\t);\n\tawait removeCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tinstalledNames.filter((name) => !retainedNames.has(name)),\n\t);\n\n\tfor (const operation of captureOperations) {\n\t\tif (retainedNames.has(identifiers.triggerNames[operation])) continue;\n\t\tif (isPostgres(db)) {\n\t\t\tawait postgresCreateTrigger(\n\t\t\t\tdb,\n\t\t\t\tidentifiers.tableName,\n\t\t\t\tidentifiers.triggerNames[operation],\n\t\t\t\toperation,\n\t\t\t\tidentity,\n\t\t\t);\n\t\t} else {\n\t\t\tawait sqliteCreateTrigger(\n\t\t\t\tdb,\n\t\t\t\tidentifiers.tableName,\n\t\t\t\tidentifiers.triggerNames[operation],\n\t\t\t\toperation,\n\t\t\t\tidentity,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait assertExpectedTriggerSet(db, identifiers, identity);\n}\n\nexport async function verifyMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<boolean> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (!(await tableExists(db, identifiers.tableName))) return false;\n\treturn hasExactCaptureTriggers(\n\t\tdb,\n\t\tidentifiers,\n\t\tidentity,\n\t\tawait listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1),\n\t);\n}\n\nexport async function removeMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (!(await tableExists(db, identifiers.tableName))) return;\n\tawait assertCaptureLifecycle(db, identity, [\"installing\", \"deleting\"]);\n\tawait removeCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tawait listOwnedCaptureTriggers(db, identifiers.tableName),\n\t);\n}\n\nconst captureOperations: readonly CaptureOperation[] = [\"insert\", \"update\", \"delete\"];\n\nasync function captureIdentifiers(identity: MediaUsageCaptureIdentity): Promise<{\n\ttableName: string;\n\ttriggerNames: Record<CaptureOperation, string>;\n}> {\n\tvalidateIdentifier(identity.collectionSlug, \"collection slug\");\n\tconst tableName = `ec_${identity.collectionSlug}`;\n\tvalidateIdentifier(tableName, \"content table\");\n\n\tconst digest = await identityDigest(\n\t\t`${CAPTURE_TRIGGER_VERSION}:${identity.collectionId}:${identity.collectionSlug}`,\n\t);\n\tconst triggerNames = {\n\t\tinsert: `emdash_mu_${digest}_ai`,\n\t\tupdate: `emdash_mu_${digest}_au`,\n\t\tdelete: `emdash_mu_${digest}_ad`,\n\t};\n\tfor (const triggerName of Object.values(triggerNames)) {\n\t\tvalidateIdentifier(triggerName, \"media usage trigger\");\n\t\tif (triggerName.length > POSTGRES_IDENTIFIER_LIMIT) {\n\t\t\tthrow new Error(`Media usage trigger name exceeds ${POSTGRES_IDENTIFIER_LIMIT} bytes`);\n\t\t}\n\t}\n\n\treturn { tableName, triggerNames };\n}\n\nasync function identityDigest(value: string): Promise<string> {\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value));\n\treturn Array.from(new Uint8Array(digest).slice(0, 16), (byte) =>\n\t\tbyte.toString(16).padStart(2, \"0\"),\n\t).join(\"\");\n}\n\nasync function removeCaptureTriggers(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerNames: readonly string[],\n): Promise<void> {\n\tfor (const triggerName of triggerNames) {\n\t\tvalidateIdentifier(triggerName, \"media usage trigger\");\n\t\tif (isPostgres(db)) {\n\t\t\tawait sql`\n\t\t\t\tDROP TRIGGER IF EXISTS ${sql.ref(triggerName)} ON ${sql.ref(tableName)}\n\t\t\t`.execute(db);\n\t\t} else {\n\t\t\tawait sql`DROP TRIGGER IF EXISTS ${sql.ref(triggerName)}`.execute(db);\n\t\t}\n\t}\n}\n\nasync function listOwnedCaptureTriggers(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\tlimit?: number,\n): Promise<string[]> {\n\tconst limitClause = limit === undefined ? sql`` : sql`LIMIT ${limit}`;\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{ name: string }>`\n\t\t\tSELECT trigger.tgname AS name\n\t\t\tFROM pg_trigger AS trigger\n\t\t\tINNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid\n\t\t\tINNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n\t\t\tWHERE namespace.nspname = current_schema()\n\t\t\t\tAND relation.relname = ${tableName}\n\t\t\t\tAND NOT trigger.tgisinternal\n\t\t\t\tAND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t\t${limitClause}\n\t\t`.execute(db);\n\t\treturn result.rows.map((row) => row.name);\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name\n\t\tFROM sqlite_master\n\t\tWHERE type = 'trigger'\n\t\t\tAND tbl_name = ${tableName}\n\t\t\tAND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t${limitClause}\n\t`.execute(db);\n\treturn result.rows.map((row) => row.name);\n}\n\nasync function hasExactCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentifiers: {\n\t\ttableName: string;\n\t\ttriggerNames: Record<CaptureOperation, string>;\n\t},\n\tidentity: MediaUsageCaptureIdentity,\n\tinstalledNames: readonly string[],\n): Promise<boolean> {\n\tconst expectedNames = new Set(Object.values(identifiers.triggerNames));\n\tif (\n\t\tinstalledNames.length !== expectedNames.size ||\n\t\tinstalledNames.some((name) => !expectedNames.has(name))\n\t) {\n\t\treturn false;\n\t}\n\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{\n\t\t\tname: string;\n\t\t\ttrigger_type: number;\n\t\t\tfunction_name: string;\n\t\t\targuments_hex: string;\n\t\t\tenabled: string;\n\t\t\thas_when: boolean;\n\t\t}>`\n\t\t\tSELECT\n\t\t\t\ttrigger.tgname AS name,\n\t\t\t\ttrigger.tgtype AS trigger_type,\n\t\t\t\tprocedure.proname AS function_name,\n\t\t\t\tencode(trigger.tgargs, 'hex') AS arguments_hex,\n\t\t\t\ttrigger.tgenabled AS enabled,\n\t\t\t\ttrigger.tgqual IS NOT NULL AS has_when\n\t\t\tFROM pg_trigger AS trigger\n\t\t\tINNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid\n\t\t\tINNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n\t\t\tINNER JOIN pg_proc AS procedure ON procedure.oid = trigger.tgfoid\n\t\t\tINNER JOIN pg_namespace AS function_namespace ON function_namespace.oid = procedure.pronamespace\n\t\t\tWHERE namespace.nspname = current_schema()\n\t\t\t\tAND function_namespace.nspname = current_schema()\n\t\t\t\tAND relation.relname = ${identifiers.tableName}\n\t\t\t\tAND NOT trigger.tgisinternal\n\t\t\t\tAND trigger.tgconstraint = 0\n\t\t\t\tAND NOT trigger.tgdeferrable\n\t\t\t\tAND NOT trigger.tginitdeferred\n\t\t\t\tAND trigger.tgattr = ''::int2vector\n\t\t\t\tAND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t`.execute(db);\n\t\tconst expectedArguments = triggerArgumentsHex(identity);\n\t\treturn captureOperations.every((operation) => {\n\t\t\tconst row = result.rows.find(\n\t\t\t\t(candidate) => candidate.name === identifiers.triggerNames[operation],\n\t\t\t);\n\t\t\treturn (\n\t\t\t\trow?.function_name === POSTGRES_TRIGGER_FUNCTION &&\n\t\t\t\tNumber(row.trigger_type) === postgresTriggerType(operation) &&\n\t\t\t\trow.arguments_hex === expectedArguments &&\n\t\t\t\trow.enabled === \"O\" &&\n\t\t\t\trow.has_when === false\n\t\t\t);\n\t\t});\n\t}\n\n\tconst result = await sql<{ name: string; definition: string }>`\n\t\tSELECT name, sql AS definition\n\t\tFROM sqlite_master\n\t\tWHERE type = 'trigger'\n\t\t\tAND tbl_name = ${identifiers.tableName}\n\t\t\tAND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}\n\t`.execute(db);\n\treturn captureOperations.every((operation) => {\n\t\tconst row = result.rows.find(\n\t\t\t(candidate) => candidate.name === identifiers.triggerNames[operation],\n\t\t);\n\t\tconst contentId = operation === \"delete\" ? sql`OLD.id` : sql`NEW.id`;\n\t\tconst expected = sqliteTriggerSql(\n\t\t\tidentifiers.tableName,\n\t\t\tidentifiers.triggerNames[operation],\n\t\t\toperationSql(operation),\n\t\t\tcontentId,\n\t\t\tidentity,\n\t\t).compile(db).sql;\n\t\treturn row ? normalizeDdl(row.definition) === normalizeDdl(expected) : false;\n\t});\n}\n\nfunction triggerArgumentsHex(identity: MediaUsageCaptureIdentity): string {\n\tconst bytes = new TextEncoder().encode(`${identity.collectionId}\\0${identity.collectionSlug}\\0`);\n\treturn Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction postgresTriggerType(operation: CaptureOperation): number {\n\tswitch (operation) {\n\t\tcase \"insert\":\n\t\t\treturn 5;\n\t\tcase \"update\":\n\t\t\treturn 17;\n\t\tcase \"delete\":\n\t\t\treturn 9;\n\t}\n}\n\nfunction normalizeDdl(definition: string): string {\n\treturn definition.replace(WHITESPACE_PATTERN, \" \").trim().replace(TRAILING_SEMICOLON_PATTERN, \"\");\n}\n\nasync function assertCaptureLifecycle(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n\tallowedStates: readonly string[],\n): Promise<void> {\n\tconst lifecycle = await db\n\t\t.selectFrom(\"_emdash_media_usage_index_status\")\n\t\t.select(\"capture_state\")\n\t\t.where(\"adapter_id\", \"=\", \"content-media\")\n\t\t.where(\"scope_type\", \"=\", \"collection\")\n\t\t.where(\"scope_key\", \"=\", identity.collectionSlug)\n\t\t.where(\"collection_id\", \"=\", identity.collectionId)\n\t\t.executeTakeFirst();\n\tif (!lifecycle?.capture_state || !allowedStates.includes(lifecycle.capture_state)) {\n\t\tthrow new Error(\"Media usage capture trigger changes require a fenced collection lifecycle\");\n\t}\n}\n\nasync function assertExpectedTriggerSet(\n\tdb: Kysely<Database>,\n\tidentifiers: {\n\t\ttableName: string;\n\t\ttriggerNames: Record<CaptureOperation, string>;\n\t},\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst actual = await listOwnedCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tMAX_OWNED_CAPTURE_TRIGGERS + 1,\n\t);\n\tif (!(await hasExactCaptureTriggers(db, identifiers, identity, actual))) {\n\t\tthrow new Error(\"Media usage capture trigger installation is incomplete\");\n\t}\n}\n\nasync function installPostgresFunction(db: Kysely<Database>): Promise<void> {\n\tawait sql`\n\t\tCREATE OR REPLACE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}()\n\t\tRETURNS trigger\n\t\tLANGUAGE plpgsql\n\t\tAS $function$\n\t\tDECLARE\n\t\t\tv_collection_id text := TG_ARGV[0];\n\t\t\tv_collection_slug text := TG_ARGV[1];\n\t\t\tv_content_id text;\n\t\t\tv_epoch bigint;\n\t\t\tv_now text := to_char(\n\t\t\t\tclock_timestamp() AT TIME ZONE 'UTC',\n\t\t\t\t'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'\n\t\t\t);\n\t\tBEGIN\n\t\t\tIF TG_OP = 'DELETE' THEN\n\t\t\t\tv_content_id := OLD.id;\n\t\t\tELSE\n\t\t\t\tv_content_id := NEW.id;\n\t\t\tEND IF;\n\n\t\t\tUPDATE _emdash_media_usage_index_status\n\t\t\tSET change_epoch = change_epoch + 1,\n\t\t\t\tstatus = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,\n\t\t\t\tcompleted_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,\n\t\t\t\tupdated_at = v_now\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = v_collection_slug\n\t\t\t\tAND collection_id = v_collection_id\n\t\t\t\tAND capture_state = 'active'\n\t\t\t\tAND EXISTS (\n\t\t\t\t\tSELECT 1\n\t\t\t\t\tFROM _emdash_collections AS collection\n\t\t\t\t\tWHERE collection.id = v_collection_id\n\t\t\t\t\t\tAND collection.slug = v_collection_slug\n\t\t\t\t)\n\t\t\tRETURNING change_epoch INTO v_epoch;\n\n\t\t\tIF NOT FOUND THEN\n\t\t\t\tRAISE EXCEPTION USING\n\t\t\t\t\tERRCODE = 'P0001',\n\t\t\t\t\tMESSAGE = 'media usage capture inactive';\n\t\t\tEND IF;\n\n\t\t\tINSERT INTO _emdash_media_usage_work (\n\t\t\t\tcollection_id,\n\t\t\t\tcollection_slug,\n\t\t\t\tcontent_id,\n\t\t\t\tchange_epoch,\n\t\t\t\twork_version,\n\t\t\t\tstate,\n\t\t\t\tattempt_count,\n\t\t\t\tnext_attempt_at,\n\t\t\t\tlease_token,\n\t\t\t\tlease_expires_at,\n\t\t\t\tlast_attempted_at,\n\t\t\t\tlast_error_code,\n\t\t\t\tcreated_at,\n\t\t\t\tupdated_at\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\tv_collection_id,\n\t\t\t\tv_collection_slug,\n\t\t\t\tv_content_id,\n\t\t\t\tv_epoch,\n\t\t\t\t1,\n\t\t\t\t'pending',\n\t\t\t\t0,\n\t\t\t\tv_now,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tv_now,\n\t\t\t\tv_now\n\t\t\t)\n\t\t\tON CONFLICT (collection_id, content_id) DO UPDATE SET\n\t\t\t\tcollection_slug = EXCLUDED.collection_slug,\n\t\t\t\tchange_epoch = EXCLUDED.change_epoch,\n\t\t\t\twork_version = _emdash_media_usage_work.work_version + 1,\n\t\t\t\tstate = 'pending',\n\t\t\t\tattempt_count = 0,\n\t\t\t\tnext_attempt_at = EXCLUDED.next_attempt_at,\n\t\t\t\tlease_token = NULL,\n\t\t\t\tlease_expires_at = NULL,\n\t\t\t\tlast_attempted_at = NULL,\n\t\t\t\tlast_error_code = NULL,\n\t\t\t\tupdated_at = EXCLUDED.updated_at;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$function$\n\t`.execute(db);\n}\n\nasync function postgresCreateTrigger(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerName: string,\n\toperation: CaptureOperation,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tawait sql`\n\t\tCREATE TRIGGER ${sql.ref(triggerName)}\n\t\tAFTER ${operationSql(operation)} ON ${sql.ref(tableName)}\n\t\tFOR EACH ROW\n\t\tEXECUTE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}(\n\t\t\t${sql.lit(identity.collectionId)},\n\t\t\t${sql.lit(identity.collectionSlug)}\n\t\t)\n\t`.execute(db);\n}\n\nasync function sqliteCreateTrigger(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerName: string,\n\toperation: CaptureOperation,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst contentId = operation === \"delete\" ? sql`OLD.id` : sql`NEW.id`;\n\tawait sqliteTriggerSql(\n\t\ttableName,\n\t\ttriggerName,\n\t\toperationSql(operation),\n\t\tcontentId,\n\t\tidentity,\n\t).execute(db);\n}\n\nfunction sqliteTriggerSql(\n\ttableName: string,\n\ttriggerName: string,\n\toperation: RawBuilder<unknown>,\n\tcontentId: RawBuilder<unknown>,\n\tidentity: MediaUsageCaptureIdentity,\n): RawBuilder<unknown> {\n\treturn sql`\n\t\tCREATE TRIGGER ${sql.ref(triggerName)}\n\t\tAFTER ${operation} ON ${sql.ref(tableName)}\n\t\tFOR EACH ROW\n\t\tBEGIN\n\t\t\tUPDATE _emdash_media_usage_index_status\n\t\t\tSET change_epoch = change_epoch + 1,\n\t\t\t\tstatus = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,\n\t\t\t\tcompleted_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,\n\t\t\t\tupdated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = ${sql.lit(identity.collectionSlug)}\n\t\t\t\tAND collection_id = ${sql.lit(identity.collectionId)}\n\t\t\t\tAND capture_state = 'active'\n\t\t\t\tAND EXISTS (\n\t\t\t\t\tSELECT 1\n\t\t\t\t\tFROM _emdash_collections AS collection\n\t\t\t\t\tWHERE collection.id = ${sql.lit(identity.collectionId)}\n\t\t\t\t\t\tAND collection.slug = ${sql.lit(identity.collectionSlug)}\n\t\t\t\t);\n\n\t\t\tSELECT CASE\n\t\t\t\tWHEN changes() <> 1 THEN RAISE(ABORT, 'media usage capture inactive')\n\t\t\tEND;\n\n\t\t\tINSERT INTO _emdash_media_usage_work (\n\t\t\t\tcollection_id,\n\t\t\t\tcollection_slug,\n\t\t\t\tcontent_id,\n\t\t\t\tchange_epoch,\n\t\t\t\twork_version,\n\t\t\t\tstate,\n\t\t\t\tattempt_count,\n\t\t\t\tnext_attempt_at,\n\t\t\t\tlease_token,\n\t\t\t\tlease_expires_at,\n\t\t\t\tlast_attempted_at,\n\t\t\t\tlast_error_code,\n\t\t\t\tcreated_at,\n\t\t\t\tupdated_at\n\t\t\t)\n\t\t\tSELECT\n\t\t\t\t${sql.lit(identity.collectionId)},\n\t\t\t\t${sql.lit(identity.collectionSlug)},\n\t\t\t\t${contentId},\n\t\t\t\tchange_epoch,\n\t\t\t\t1,\n\t\t\t\t'pending',\n\t\t\t\t0,\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now'),\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now'),\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now')\n\t\t\tFROM _emdash_media_usage_index_status\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = ${sql.lit(identity.collectionSlug)}\n\t\t\t\tAND collection_id = ${sql.lit(identity.collectionId)}\n\t\t\t\tAND capture_state = 'active'\n\t\t\tON CONFLICT (collection_id, content_id) DO UPDATE SET\n\t\t\t\tcollection_slug = excluded.collection_slug,\n\t\t\t\tchange_epoch = excluded.change_epoch,\n\t\t\t\twork_version = _emdash_media_usage_work.work_version + 1,\n\t\t\t\tstate = 'pending',\n\t\t\t\tattempt_count = 0,\n\t\t\t\tnext_attempt_at = excluded.next_attempt_at,\n\t\t\t\tlease_token = NULL,\n\t\t\t\tlease_expires_at = NULL,\n\t\t\t\tlast_attempted_at = NULL,\n\t\t\t\tlast_error_code = NULL,\n\t\t\t\tupdated_at = excluded.updated_at;\n\t\tEND\n\t`;\n}\n\nfunction operationSql(operation: CaptureOperation): RawBuilder<unknown> {\n\tswitch (operation) {\n\t\tcase \"insert\":\n\t\t\treturn sql`INSERT`;\n\t\tcase \"update\":\n\t\t\treturn sql`UPDATE`;\n\t\tcase \"delete\":\n\t\t\treturn sql`DELETE`;\n\t}\n}\n"],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- //#region src/auth/challenge-store.ts
2
- function createChallengeStore(db) {
3
- return {
4
- async set(challenge, data) {
5
- const expiresAt = new Date(data.expiresAt).toISOString();
6
- await db.insertInto("auth_challenges").values({
7
- challenge,
8
- type: data.type,
9
- user_id: data.userId ?? null,
10
- data: data.context ?? null,
11
- expires_at: expiresAt
12
- }).onConflict((oc) => oc.column("challenge").doUpdateSet({
13
- type: data.type,
14
- user_id: data.userId ?? null,
15
- data: data.context ?? null,
16
- expires_at: expiresAt
17
- })).execute();
18
- },
19
- async get(challenge) {
20
- const row = await db.selectFrom("auth_challenges").selectAll().where("challenge", "=", challenge).executeTakeFirst();
21
- if (!row) return null;
22
- const expiresAt = new Date(row.expires_at).getTime();
23
- if (expiresAt < Date.now()) {
24
- await this.delete(challenge);
25
- return null;
26
- }
27
- return {
28
- type: row.type === "registration" ? "registration" : "authentication",
29
- userId: row.user_id ?? void 0,
30
- expiresAt,
31
- ...row.data === null ? {} : { context: row.data }
32
- };
33
- },
34
- async delete(challenge) {
35
- await db.deleteFrom("auth_challenges").where("challenge", "=", challenge).execute();
36
- }
37
- };
38
- }
39
- /**
40
- * Clean up expired challenges.
41
- * Should be called periodically (e.g., on startup, or via cron).
42
- */
43
- async function cleanupExpiredChallenges(db) {
44
- const now = (/* @__PURE__ */ new Date()).toISOString();
45
- const result = await db.deleteFrom("auth_challenges").where("expires_at", "<", now).executeTakeFirst();
46
- return Number(result.numDeletedRows ?? 0);
47
- }
48
-
49
- //#endregion
50
- export { createChallengeStore as n, cleanupExpiredChallenges as t };
51
- //# sourceMappingURL=challenge-store-CkRdSdd8.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"challenge-store-CkRdSdd8.mjs","names":[],"sources":["../src/auth/challenge-store.ts"],"sourcesContent":["/**\n * Challenge store for WebAuthn\n *\n * Stores WebAuthn challenges in a dedicated table with automatic expiration.\n */\n\nimport type { ChallengeStore, ChallengeData } from \"@emdash-cms/auth/passkey\";\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../database/types.js\";\n\nexport function createChallengeStore(db: Kysely<Database>): ChallengeStore {\n\treturn {\n\t\tasync set(challenge: string, data: ChallengeData): Promise<void> {\n\t\t\tconst expiresAt = new Date(data.expiresAt).toISOString();\n\n\t\t\tawait db\n\t\t\t\t.insertInto(\"auth_challenges\")\n\t\t\t\t.values({\n\t\t\t\t\tchallenge,\n\t\t\t\t\ttype: data.type,\n\t\t\t\t\tuser_id: data.userId ?? null,\n\t\t\t\t\tdata: data.context ?? null,\n\t\t\t\t\texpires_at: expiresAt,\n\t\t\t\t})\n\t\t\t\t.onConflict((oc) =>\n\t\t\t\t\toc.column(\"challenge\").doUpdateSet({\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\tuser_id: data.userId ?? null,\n\t\t\t\t\t\tdata: data.context ?? null,\n\t\t\t\t\t\texpires_at: expiresAt,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t},\n\n\t\tasync get(challenge: string): Promise<ChallengeData | null> {\n\t\t\tconst row = await db\n\t\t\t\t.selectFrom(\"auth_challenges\")\n\t\t\t\t.selectAll()\n\t\t\t\t.where(\"challenge\", \"=\", challenge)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tif (!row) return null;\n\n\t\t\tconst expiresAt = new Date(row.expires_at).getTime();\n\n\t\t\t// Check expiration\n\t\t\tif (expiresAt < Date.now()) {\n\t\t\t\t// Expired, delete and return null\n\t\t\t\tawait this.delete(challenge);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: row.type === \"registration\" ? \"registration\" : \"authentication\",\n\t\t\t\tuserId: row.user_id ?? undefined,\n\t\t\t\texpiresAt,\n\t\t\t\t...(row.data === null ? {} : { context: row.data }),\n\t\t\t};\n\t\t},\n\n\t\tasync delete(challenge: string): Promise<void> {\n\t\t\tawait db.deleteFrom(\"auth_challenges\").where(\"challenge\", \"=\", challenge).execute();\n\t\t},\n\t};\n}\n\n/**\n * Clean up expired challenges.\n * Should be called periodically (e.g., on startup, or via cron).\n */\nexport async function cleanupExpiredChallenges(db: Kysely<Database>): Promise<number> {\n\tconst now = new Date().toISOString();\n\n\tconst result = await db\n\t\t.deleteFrom(\"auth_challenges\")\n\t\t.where(\"expires_at\", \"<\", now)\n\t\t.executeTakeFirst();\n\n\treturn Number(result.numDeletedRows ?? 0);\n}\n"],"mappings":";AAWA,SAAgB,qBAAqB,IAAsC;AAC1E,QAAO;EACN,MAAM,IAAI,WAAmB,MAAoC;GAChE,MAAM,YAAY,IAAI,KAAK,KAAK,UAAU,CAAC,aAAa;AAExD,SAAM,GACJ,WAAW,kBAAkB,CAC7B,OAAO;IACP;IACA,MAAM,KAAK;IACX,SAAS,KAAK,UAAU;IACxB,MAAM,KAAK,WAAW;IACtB,YAAY;IACZ,CAAC,CACD,YAAY,OACZ,GAAG,OAAO,YAAY,CAAC,YAAY;IAClC,MAAM,KAAK;IACX,SAAS,KAAK,UAAU;IACxB,MAAM,KAAK,WAAW;IACtB,YAAY;IACZ,CAAC,CACF,CACA,SAAS;;EAGZ,MAAM,IAAI,WAAkD;GAC3D,MAAM,MAAM,MAAM,GAChB,WAAW,kBAAkB,CAC7B,WAAW,CACX,MAAM,aAAa,KAAK,UAAU,CAClC,kBAAkB;AAEpB,OAAI,CAAC,IAAK,QAAO;GAEjB,MAAM,YAAY,IAAI,KAAK,IAAI,WAAW,CAAC,SAAS;AAGpD,OAAI,YAAY,KAAK,KAAK,EAAE;AAE3B,UAAM,KAAK,OAAO,UAAU;AAC5B,WAAO;;AAGR,UAAO;IACN,MAAM,IAAI,SAAS,iBAAiB,iBAAiB;IACrD,QAAQ,IAAI,WAAW;IACvB;IACA,GAAI,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,SAAS,IAAI,MAAM;IAClD;;EAGF,MAAM,OAAO,WAAkC;AAC9C,SAAM,GAAG,WAAW,kBAAkB,CAAC,MAAM,aAAa,KAAK,UAAU,CAAC,SAAS;;EAEpF;;;;;;AAOF,eAAsB,yBAAyB,IAAuC;CACrF,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;CAEpC,MAAM,SAAS,MAAM,GACnB,WAAW,kBAAkB,CAC7B,MAAM,cAAc,KAAK,IAAI,CAC7B,kBAAkB;AAEpB,QAAO,OAAO,OAAO,kBAAkB,EAAE"}
@@ -1,162 +0,0 @@
1
- //#region ../registry-verification/dist/auth-B730dpJ4.js
2
- const UNSUPPORTED_AUTH_MESSAGE = "This release requires an authentication method the client does not support.";
3
- function unsupportedAuthDetails(auth) {
4
- if (!isRecord(auth) || typeof auth.hint_url !== "string" || auth.hint_url.length > 2048) return;
5
- try {
6
- const url = new URL(auth.hint_url);
7
- if (url.protocol !== "https:" || url.username || url.password) return void 0;
8
- return { hintUrl: url.href };
9
- } catch {
10
- return;
11
- }
12
- }
13
- function isRecord(value) {
14
- return value !== null && typeof value === "object" && !Array.isArray(value);
15
- }
16
-
17
- //#endregion
18
- //#region ../registry-verification/dist/errors-D3_zxvwe.js
19
- function verificationError(code, message, details) {
20
- return {
21
- success: false,
22
- error: {
23
- code,
24
- message,
25
- ...details === void 0 ? {} : { details }
26
- }
27
- };
28
- }
29
-
30
- //#endregion
31
- //#region ../registry-verification/dist/checksum.js
32
- const SHA2_256_CODE = 18;
33
- const SHA2_256_LENGTH = 32;
34
- const BASE32_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
35
- /** Derive the required artifact checksum from a raw sha2-256 blob CID. */
36
- function multihashFromBlobCid(value) {
37
- if (!value.startsWith("b")) return verificationError("BLOB_REF_INVALID", "The blob reference CID is malformed.");
38
- const bytes = decodeBase32(value.slice(1));
39
- if (bytes === null || bytes.length !== 36 || bytes[0] !== 1 || bytes[1] !== 85) return verificationError("BLOB_REF_INVALID", "Blob references must use a CIDv1 raw sha2-256 CID.");
40
- const checksum = `b${encodeBase32(bytes.slice(2))}`;
41
- if (!decodeMultihash(checksum).success) return verificationError("BLOB_REF_INVALID", "Blob references must use a CIDv1 raw sha2-256 CID.");
42
- return {
43
- success: true,
44
- value: checksum
45
- };
46
- }
47
- /** Decodes a lowercase base32 multibase-encoded multihash. */
48
- function decodeMultihash(value) {
49
- if (!value.startsWith("b")) return verificationError("INVALID_MULTIHASH", "Checksums must be lowercase base32 multibase-encoded multihashes.");
50
- const bytes = decodeBase32(value.slice(1));
51
- if (bytes === null) return verificationError("INVALID_MULTIHASH", "The multibase checksum is malformed.");
52
- const code = readVarint(bytes, 0);
53
- if (code === null) return verificationError("INVALID_MULTIHASH", "The multihash algorithm code is malformed.");
54
- const length = readVarint(bytes, code.nextOffset);
55
- if (length === null || length.value !== bytes.length - length.nextOffset) return verificationError("INVALID_MULTIHASH", "The multihash digest length is malformed.");
56
- if (code.value !== SHA2_256_CODE) return verificationError("UNSUPPORTED_MULTIHASH", "The multihash algorithm is not supported.");
57
- if (length.value !== SHA2_256_LENGTH) return verificationError("INVALID_MULTIHASH", "The sha2-256 digest must be 32 bytes.");
58
- return {
59
- success: true,
60
- value: {
61
- algorithm: "sha2-256",
62
- digest: bytes.slice(length.nextOffset)
63
- }
64
- };
65
- }
66
- async function computeArtifactDigestCandidates(bytes) {
67
- const [sha256, sha384, sha512] = await Promise.all([
68
- crypto.subtle.digest("SHA-256", new Uint8Array(bytes)),
69
- crypto.subtle.digest("SHA-384", new Uint8Array(bytes)),
70
- crypto.subtle.digest("SHA-512", new Uint8Array(bytes))
71
- ]);
72
- return [
73
- new Uint8Array(sha256),
74
- new Uint8Array(sha384),
75
- new Uint8Array(sha512)
76
- ];
77
- }
78
- async function verifyMultihash(bytes, expected) {
79
- const decoded = decodeMultihash(expected);
80
- if (!decoded.success) return decoded;
81
- const actual = await computeDigest(bytes, decoded.value.algorithm);
82
- if (!actual.success) return actual;
83
- if (!compareDigestBytes(actual.value, decoded.value.digest)) return verificationError("CHECKSUM_MISMATCH", "The resource bytes do not match the expected checksum.");
84
- return {
85
- success: true,
86
- value: true
87
- };
88
- }
89
- /**
90
- * Compare public checksum digest bytes without early exit. Digests are public
91
- * integrity metadata, so a portable byte loop is preferable to a Node-only
92
- * timing primitive while still avoiding an ordinary equality short circuit.
93
- */
94
- function compareDigestBytes(left, right) {
95
- let difference = left.length ^ right.length;
96
- const maximumLength = Math.max(left.length, right.length);
97
- for (let index = 0; index < maximumLength; index += 1) difference |= (left[index] ?? 0) ^ (right[index] ?? 0);
98
- return difference === 0;
99
- }
100
- async function computeDigest(bytes, algorithm) {
101
- if (algorithm !== "sha2-256") return verificationError("UNSUPPORTED_MULTIHASH", "The multihash algorithm is not supported.");
102
- try {
103
- return {
104
- success: true,
105
- value: new Uint8Array(await crypto.subtle.digest("SHA-256", new Uint8Array(bytes)))
106
- };
107
- } catch {
108
- return verificationError("UNSUPPORTED_MULTIHASH", "The sha2-256 algorithm is unavailable.");
109
- }
110
- }
111
- function readVarint(bytes, offset) {
112
- let value = 0;
113
- let shift = 0;
114
- for (let index = offset; index < bytes.length && index < offset + 5; index += 1) {
115
- const byte = bytes[index];
116
- if (byte === void 0) return null;
117
- value |= (byte & 127) << shift;
118
- if ((byte & 128) === 0) return {
119
- value,
120
- nextOffset: index + 1
121
- };
122
- shift += 7;
123
- }
124
- return null;
125
- }
126
- function encodeBase32(bytes) {
127
- let result = "";
128
- let buffer = 0;
129
- let bits = 0;
130
- for (const byte of bytes) {
131
- buffer = buffer << 8 | byte;
132
- bits += 8;
133
- while (bits >= 5) {
134
- result += BASE32_ALPHABET[buffer >>> bits - 5 & 31] ?? "";
135
- bits -= 5;
136
- }
137
- }
138
- if (bits > 0) result += BASE32_ALPHABET[buffer << 5 - bits & 31] ?? "";
139
- return result;
140
- }
141
- function decodeBase32(value) {
142
- if (value.length === 0) return null;
143
- let buffer = 0;
144
- let bits = 0;
145
- const output = [];
146
- for (const character of value) {
147
- const digit = BASE32_ALPHABET.indexOf(character);
148
- if (digit === -1) return null;
149
- buffer = buffer << 5 | digit;
150
- bits += 5;
151
- if (bits >= 8) {
152
- output.push(buffer >>> bits - 8 & 255);
153
- bits -= 8;
154
- }
155
- }
156
- if (bits > 0 && (buffer & (1 << bits) - 1) !== 0) return null;
157
- return new Uint8Array(output);
158
- }
159
-
160
- //#endregion
161
- export { UNSUPPORTED_AUTH_MESSAGE as a, verificationError as i, multihashFromBlobCid as n, unsupportedAuthDetails as o, verifyMultihash as r, computeArtifactDigestCandidates as t };
162
- //# sourceMappingURL=checksum-Bsi2D9M1.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checksum-Bsi2D9M1.mjs","names":[],"sources":["../../registry-verification/dist/auth-B730dpJ4.js","../../registry-verification/dist/errors-D3_zxvwe.js","../../registry-verification/dist/checksum.js"],"sourcesContent":["//#region src/auth.ts\nconst UNSUPPORTED_AUTH_MESSAGE = \"This release requires an authentication method the client does not support.\";\nfunction unsupportedAuthDetails(auth) {\n\tif (!isRecord(auth) || typeof auth.hint_url !== \"string\" || auth.hint_url.length > 2048) return;\n\ttry {\n\t\tconst url = new URL(auth.hint_url);\n\t\tif (url.protocol !== \"https:\" || url.username || url.password) return void 0;\n\t\treturn { hintUrl: url.href };\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction isRecord(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n//#endregion\nexport { unsupportedAuthDetails as n, UNSUPPORTED_AUTH_MESSAGE as t };\n//# sourceMappingURL=auth-B730dpJ4.js.map","//#region src/errors.ts\n/** Stable, machine-readable failures returned by this package. */\nconst VERIFICATION_ERROR_CODES = [\n\t\"AUTH_METHOD_UNSUPPORTED\",\n\t\"BLOB_METADATA_MISMATCH\",\n\t\"BLOB_REF_INVALID\",\n\t\"BUNDLE_COMPRESSED_SIZE_EXCEEDED\",\n\t\"BUNDLE_DECOMPRESSED_SIZE_EXCEEDED\",\n\t\"BUNDLE_FILE_COUNT_EXCEEDED\",\n\t\"BUNDLE_FILE_SIZE_EXCEEDED\",\n\t\"BUNDLE_ID_MISMATCH\",\n\t\"BUNDLE_INVALID_ARCHIVE\",\n\t\"BUNDLE_INVALID_MANIFEST\",\n\t\"BUNDLE_INVALID_PATH\",\n\t\"BUNDLE_MISSING_BACKEND\",\n\t\"BUNDLE_MISSING_MANIFEST\",\n\t\"BUNDLE_PATH_COLLISION\",\n\t\"BUNDLE_UNSUPPORTED_ENTRY\",\n\t\"BUNDLE_VERSION_MISMATCH\",\n\t\"CHECKSUM_MISMATCH\",\n\t\"FETCH_FAILED\",\n\t\"HOST_REJECTED\",\n\t\"INVALID_MULTIHASH\",\n\t\"INVALID_URL\",\n\t\"PDS_RESOLUTION_FAILED\",\n\t\"PROFILE_EXTENSION_INVALID\",\n\t\"PROFILE_ID_MISMATCH\",\n\t\"PROFILE_LEXICON_INVALID\",\n\t\"PROFILE_POLICY_INVALID\",\n\t\"PROFILE_REPOSITORY_INVALID\",\n\t\"PROVENANCE_REQUIRED\",\n\t\"PROVENANCE_UNVERIFIABLE\",\n\t\"REDIRECT_LIMIT_EXCEEDED\",\n\t\"REDIRECT_LOCATION_MISSING\",\n\t\"RESOURCE_SIZE_EXCEEDED\",\n\t\"RESOURCE_STATUS_ERROR\",\n\t\"RESOURCE_TIMEOUT\",\n\t\"RELEASE_EXTENSION_INVALID\",\n\t\"RELEASE_EXTENSION_MISSING\",\n\t\"RELEASE_ARTIFACT_SOURCE_MISSING\",\n\t\"RELEASE_LEXICON_INVALID\",\n\t\"RELEASE_PACKAGE_MISMATCH\",\n\t\"RELEASE_RKEY_MISMATCH\",\n\t\"RELEASE_VERSION_INVALID\",\n\t\"RELEASE_VERSION_MISMATCH\",\n\t\"UNSUPPORTED_MULTIHASH\"\n];\nfunction verificationError(code, message, details) {\n\treturn {\n\t\tsuccess: false,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...details === void 0 ? {} : { details }\n\t\t}\n\t};\n}\n\n//#endregion\nexport { verificationError as n, VERIFICATION_ERROR_CODES as t };\n//# sourceMappingURL=errors-D3_zxvwe.js.map","import { n as verificationError } from \"./errors-D3_zxvwe.js\";\n\n//#region src/checksum.ts\nconst SHA2_256_CODE = 18;\nconst SHA2_256_LENGTH = 32;\nconst BASE32_ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n/** Derive the required artifact checksum from a raw sha2-256 blob CID. */\nfunction multihashFromBlobCid(value) {\n\tif (!value.startsWith(\"b\")) return verificationError(\"BLOB_REF_INVALID\", \"The blob reference CID is malformed.\");\n\tconst bytes = decodeBase32(value.slice(1));\n\tif (bytes === null || bytes.length !== 36 || bytes[0] !== 1 || bytes[1] !== 85) return verificationError(\"BLOB_REF_INVALID\", \"Blob references must use a CIDv1 raw sha2-256 CID.\");\n\tconst checksum = `b${encodeBase32(bytes.slice(2))}`;\n\tif (!decodeMultihash(checksum).success) return verificationError(\"BLOB_REF_INVALID\", \"Blob references must use a CIDv1 raw sha2-256 CID.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: checksum\n\t};\n}\n/** Decodes a lowercase base32 multibase-encoded multihash. */\nfunction decodeMultihash(value) {\n\tif (!value.startsWith(\"b\")) return verificationError(\"INVALID_MULTIHASH\", \"Checksums must be lowercase base32 multibase-encoded multihashes.\");\n\tconst bytes = decodeBase32(value.slice(1));\n\tif (bytes === null) return verificationError(\"INVALID_MULTIHASH\", \"The multibase checksum is malformed.\");\n\tconst code = readVarint(bytes, 0);\n\tif (code === null) return verificationError(\"INVALID_MULTIHASH\", \"The multihash algorithm code is malformed.\");\n\tconst length = readVarint(bytes, code.nextOffset);\n\tif (length === null || length.value !== bytes.length - length.nextOffset) return verificationError(\"INVALID_MULTIHASH\", \"The multihash digest length is malformed.\");\n\tif (code.value !== SHA2_256_CODE) return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\tif (length.value !== SHA2_256_LENGTH) return verificationError(\"INVALID_MULTIHASH\", \"The sha2-256 digest must be 32 bytes.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: {\n\t\t\talgorithm: \"sha2-256\",\n\t\t\tdigest: bytes.slice(length.nextOffset)\n\t\t}\n\t};\n}\nasync function computeMultihash(bytes, algorithm = \"sha2-256\") {\n\tif (algorithm !== \"sha2-256\") return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\ttry {\n\t\tconst digest = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)));\n\t\tconst multihash = new Uint8Array(2 + digest.length);\n\t\tmultihash[0] = SHA2_256_CODE;\n\t\tmultihash[1] = digest.length;\n\t\tmultihash.set(digest, 2);\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: `b${encodeBase32(multihash)}`\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"UNSUPPORTED_MULTIHASH\", \"The sha2-256 algorithm is unavailable.\");\n\t}\n}\nasync function computeArtifactDigestCandidates(bytes) {\n\tconst [sha256, sha384, sha512] = await Promise.all([\n\t\tcrypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)),\n\t\tcrypto.subtle.digest(\"SHA-384\", new Uint8Array(bytes)),\n\t\tcrypto.subtle.digest(\"SHA-512\", new Uint8Array(bytes))\n\t]);\n\treturn [\n\t\tnew Uint8Array(sha256),\n\t\tnew Uint8Array(sha384),\n\t\tnew Uint8Array(sha512)\n\t];\n}\nasync function verifyMultihash(bytes, expected) {\n\tconst decoded = decodeMultihash(expected);\n\tif (!decoded.success) return decoded;\n\tconst actual = await computeDigest(bytes, decoded.value.algorithm);\n\tif (!actual.success) return actual;\n\tif (!compareDigestBytes(actual.value, decoded.value.digest)) return verificationError(\"CHECKSUM_MISMATCH\", \"The resource bytes do not match the expected checksum.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: true\n\t};\n}\n/**\n* Compare public checksum digest bytes without early exit. Digests are public\n* integrity metadata, so a portable byte loop is preferable to a Node-only\n* timing primitive while still avoiding an ordinary equality short circuit.\n*/\nfunction compareDigestBytes(left, right) {\n\tlet difference = left.length ^ right.length;\n\tconst maximumLength = Math.max(left.length, right.length);\n\tfor (let index = 0; index < maximumLength; index += 1) difference |= (left[index] ?? 0) ^ (right[index] ?? 0);\n\treturn difference === 0;\n}\nasync function computeDigest(bytes, algorithm) {\n\tif (algorithm !== \"sha2-256\") return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\ttry {\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)))\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"UNSUPPORTED_MULTIHASH\", \"The sha2-256 algorithm is unavailable.\");\n\t}\n}\nfunction readVarint(bytes, offset) {\n\tlet value = 0;\n\tlet shift = 0;\n\tfor (let index = offset; index < bytes.length && index < offset + 5; index += 1) {\n\t\tconst byte = bytes[index];\n\t\tif (byte === void 0) return null;\n\t\tvalue |= (byte & 127) << shift;\n\t\tif ((byte & 128) === 0) return {\n\t\t\tvalue,\n\t\t\tnextOffset: index + 1\n\t\t};\n\t\tshift += 7;\n\t}\n\treturn null;\n}\nfunction encodeBase32(bytes) {\n\tlet result = \"\";\n\tlet buffer = 0;\n\tlet bits = 0;\n\tfor (const byte of bytes) {\n\t\tbuffer = buffer << 8 | byte;\n\t\tbits += 8;\n\t\twhile (bits >= 5) {\n\t\t\tresult += BASE32_ALPHABET[buffer >>> bits - 5 & 31] ?? \"\";\n\t\t\tbits -= 5;\n\t\t}\n\t}\n\tif (bits > 0) result += BASE32_ALPHABET[buffer << 5 - bits & 31] ?? \"\";\n\treturn result;\n}\nfunction decodeBase32(value) {\n\tif (value.length === 0) return null;\n\tlet buffer = 0;\n\tlet bits = 0;\n\tconst output = [];\n\tfor (const character of value) {\n\t\tconst digit = BASE32_ALPHABET.indexOf(character);\n\t\tif (digit === -1) return null;\n\t\tbuffer = buffer << 5 | digit;\n\t\tbits += 5;\n\t\tif (bits >= 8) {\n\t\t\toutput.push(buffer >>> bits - 8 & 255);\n\t\t\tbits -= 8;\n\t\t}\n\t}\n\tif (bits > 0 && (buffer & (1 << bits) - 1) !== 0) return null;\n\treturn new Uint8Array(output);\n}\n\n//#endregion\nexport { compareDigestBytes, computeArtifactDigestCandidates, computeMultihash, decodeMultihash, multihashFromBlobCid, verifyMultihash };\n//# sourceMappingURL=checksum.js.map"],"mappings":"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"}