emdash 1.0.1 → 1.1.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 (1267) hide show
  1. package/dist/action-token-AgOs1UWD.mjs +26 -0
  2. package/dist/action-token-AgOs1UWD.mjs.map +1 -0
  3. package/dist/activation-xomsCMJg.mjs +387 -0
  4. package/dist/activation-xomsCMJg.mjs.map +1 -0
  5. package/dist/adapters-DM1oyHIN.d.mts +173 -0
  6. package/dist/adapters-DM1oyHIN.d.mts.map +1 -0
  7. package/dist/allowed-origins-CFtudhyw.mjs +116 -0
  8. package/dist/allowed-origins-CFtudhyw.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +48 -47
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +10 -10
  14. package/dist/api-CltsXhiX.mjs +4980 -0
  15. package/dist/api-CltsXhiX.mjs.map +1 -0
  16. package/dist/api-tokens-P3mAaQgr.mjs +166 -0
  17. package/dist/api-tokens-P3mAaQgr.mjs.map +1 -0
  18. package/dist/apply-Q7uvzBWW.mjs +1680 -0
  19. package/dist/apply-Q7uvzBWW.mjs.map +1 -0
  20. package/dist/approvals-DycwI6lZ.mjs +460 -0
  21. package/dist/approvals-DycwI6lZ.mjs.map +1 -0
  22. package/dist/artifact-fetch-CWxyELVI.mjs +659 -0
  23. package/dist/artifact-fetch-CWxyELVI.mjs.map +1 -0
  24. package/dist/artifacts-UzWbysb8.mjs +307 -0
  25. package/dist/artifacts-UzWbysb8.mjs.map +1 -0
  26. package/dist/astro/index.d.mts +14 -14
  27. package/dist/astro/index.d.mts.map +1 -1
  28. package/dist/astro/index.mjs +38 -12
  29. package/dist/astro/index.mjs.map +1 -1
  30. package/dist/astro/middleware/auth.d.mts +12 -12
  31. package/dist/astro/middleware/auth.mjs +12 -11
  32. package/dist/astro/middleware/auth.mjs.map +1 -1
  33. package/dist/astro/middleware/media-usage-write-fence.mjs +6 -6
  34. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  35. package/dist/astro/middleware/redirect.mjs +9 -22
  36. package/dist/astro/middleware/redirect.mjs.map +1 -1
  37. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +33 -21
  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 +203 -120
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +15 -15
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +15 -15
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +7 -7
  48. package/dist/astro/routes/api/admin/api-tokens/index.mjs +8 -8
  49. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  51. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  52. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -22
  54. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -23
  55. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  57. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +19 -19
  59. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  60. package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -18
  61. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  62. package/dist/astro/routes/api/admin/comments/index.mjs +18 -18
  63. package/dist/astro/routes/api/admin/core-update.mjs +8 -8
  64. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +7 -7
  65. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +6 -6
  66. package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -21
  67. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  68. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  69. package/dist/astro/routes/api/admin/media-usage/progress.mjs +23 -23
  70. package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -29
  71. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  72. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  73. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +7 -7
  74. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +7 -7
  75. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +9 -9
  76. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +9 -9
  77. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -71
  78. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +8 -8
  80. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +70 -69
  81. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +71 -70
  83. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +81 -80
  85. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/index.mjs +71 -70
  87. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +8 -8
  89. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +70 -69
  90. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +80 -79
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +70 -69
  94. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +71 -70
  96. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +82 -81
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  100. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +73 -72
  101. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +8 -8
  103. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +71 -70
  104. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/updates.mjs +70 -69
  106. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  108. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +70 -69
  109. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +8 -8
  111. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +70 -69
  112. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +5 -5
  114. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +39 -39
  115. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +39 -39
  116. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +41 -41
  117. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +41 -41
  118. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +41 -41
  119. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +42 -42
  121. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +41 -41
  122. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +43 -43
  124. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +41 -41
  125. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +41 -41
  126. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +43 -43
  127. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +41 -41
  128. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +43 -43
  129. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +41 -41
  130. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +41 -41
  131. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +43 -43
  132. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +41 -41
  133. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +41 -41
  134. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +43 -43
  135. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  136. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +5 -5
  137. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  138. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +7 -7
  139. package/dist/astro/routes/api/admin/users/index.mjs +15 -15
  140. package/dist/astro/routes/api/auth/dev-bypass.mjs +7 -7
  141. package/dist/astro/routes/api/auth/invite/accept.mjs +5 -5
  142. package/dist/astro/routes/api/auth/invite/complete.mjs +20 -20
  143. package/dist/astro/routes/api/auth/invite/index.mjs +17 -17
  144. package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -18
  145. package/dist/astro/routes/api/auth/logout.mjs +6 -6
  146. package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -19
  147. package/dist/astro/routes/api/auth/magic-link/verify.mjs +16 -16
  148. package/dist/astro/routes/api/auth/me.mjs +16 -16
  149. package/dist/astro/routes/api/auth/mode.mjs +6 -6
  150. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts.map +1 -1
  151. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +36 -13
  152. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
  153. package/dist/astro/routes/api/auth/oauth/_provider_.d.mts.map +1 -1
  154. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +20 -5
  155. package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -1
  156. package/dist/astro/routes/api/auth/passkey/_id_.mjs +15 -15
  157. package/dist/astro/routes/api/auth/passkey/index.mjs +5 -5
  158. package/dist/astro/routes/api/auth/passkey/options.mjs +20 -20
  159. package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -18
  160. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -19
  161. package/dist/astro/routes/api/auth/passkey/verify.mjs +20 -20
  162. package/dist/astro/routes/api/auth/signup/complete.mjs +20 -20
  163. package/dist/astro/routes/api/auth/signup/request.mjs +18 -18
  164. package/dist/astro/routes/api/auth/signup/verify.mjs +5 -5
  165. package/dist/astro/routes/api/calendar.d.mts +8 -0
  166. package/dist/astro/routes/api/calendar.d.mts.map +1 -0
  167. package/dist/astro/routes/api/calendar.mjs +204 -0
  168. package/dist/astro/routes/api/calendar.mjs.map +1 -0
  169. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
  170. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -20
  171. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +6 -6
  172. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
  174. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  175. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
  176. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -12
  177. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  178. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  179. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +34 -34
  180. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -34
  181. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  182. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +6 -6
  183. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  184. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +24 -24
  185. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +6 -6
  186. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  187. package/dist/astro/routes/api/content/_collection_/_id_.mjs +17 -17
  188. package/dist/astro/routes/api/content/_collection_/authors.mjs +6 -6
  189. package/dist/astro/routes/api/content/_collection_/index.mjs +16 -16
  190. package/dist/astro/routes/api/content/_collection_/trash.mjs +16 -16
  191. package/dist/astro/routes/api/dashboard.mjs +11 -11
  192. package/dist/astro/routes/api/dev/emails.mjs +6 -6
  193. package/dist/astro/routes/api/health.mjs +7 -7
  194. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  195. package/dist/astro/routes/api/import/probe.mjs +24 -24
  196. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  197. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  198. package/dist/astro/routes/api/import/wordpress/execute.mjs +23 -23
  199. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  200. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -20
  201. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  202. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  203. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -27
  204. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  205. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -24
  206. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  207. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  208. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +32 -32
  209. package/dist/astro/routes/api/manifest.mjs +7 -7
  210. package/dist/astro/routes/api/mcp.mjs +94 -94
  211. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  212. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  213. package/dist/astro/routes/api/media/_id_/replace.mjs +17 -17
  214. package/dist/astro/routes/api/media/_id_/upload.mjs +10 -10
  215. package/dist/astro/routes/api/media/_id_/usage.mjs +31 -31
  216. package/dist/astro/routes/api/media/_id_.mjs +29 -29
  217. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +7 -7
  218. package/dist/astro/routes/api/media/file/_...key_.mjs +10 -10
  219. package/dist/astro/routes/api/media/folders/_id_.mjs +17 -17
  220. package/dist/astro/routes/api/media/folders/index.mjs +17 -17
  221. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +6 -6
  222. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +6 -6
  223. package/dist/astro/routes/api/media/providers/index.mjs +6 -6
  224. package/dist/astro/routes/api/media/upload-url.mjs +23 -23
  225. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  226. package/dist/astro/routes/api/media.mjs +37 -36
  227. package/dist/astro/routes/api/media.mjs.map +1 -1
  228. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +18 -18
  229. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -18
  230. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -18
  231. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -18
  232. package/dist/astro/routes/api/menus/_name_.mjs +18 -18
  233. package/dist/astro/routes/api/menus/index.mjs +18 -18
  234. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  235. package/dist/astro/routes/api/oauth/device/authorize.mjs +9 -9
  236. package/dist/astro/routes/api/oauth/device/code.mjs +12 -12
  237. package/dist/astro/routes/api/oauth/device/token.mjs +11 -11
  238. package/dist/astro/routes/api/oauth/register.mjs +8 -8
  239. package/dist/astro/routes/api/oauth/token/refresh.mjs +9 -9
  240. package/dist/astro/routes/api/oauth/token/revoke.mjs +9 -9
  241. package/dist/astro/routes/api/oauth/token.mjs +9 -9
  242. package/dist/astro/routes/api/openapi.json.mjs +21 -21
  243. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -12
  244. package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
  245. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  246. package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
  247. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  248. package/dist/astro/routes/api/redirects/_id_.mjs +20 -19
  249. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  250. package/dist/astro/routes/api/redirects/index.mjs +20 -19
  251. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  252. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -34
  253. package/dist/astro/routes/api/relations/index.mjs +34 -34
  254. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +6 -6
  255. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +17 -17
  256. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +70 -69
  257. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  258. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +70 -69
  259. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  260. package/dist/astro/routes/api/schema/block-types/index.mjs +70 -69
  261. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  262. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +70 -69
  263. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +70 -69
  265. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +70 -69
  267. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  268. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +70 -69
  269. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  270. package/dist/astro/routes/api/schema/collections/index.mjs +70 -69
  271. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  272. package/dist/astro/routes/api/schema/collections/reorder.mjs +70 -69
  273. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  274. package/dist/astro/routes/api/schema/index.mjs +16 -16
  275. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +70 -69
  276. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  277. package/dist/astro/routes/api/schema/orphans/index.mjs +70 -69
  278. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  279. package/dist/astro/routes/api/search/enable.mjs +19 -19
  280. package/dist/astro/routes/api/search/index.mjs +18 -18
  281. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  282. package/dist/astro/routes/api/search/stats.mjs +9 -9
  283. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  284. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  285. package/dist/astro/routes/api/sections/index.mjs +18 -18
  286. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +8 -8
  287. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -8
  288. package/dist/astro/routes/api/settings/backups/export.mjs +8 -8
  289. package/dist/astro/routes/api/settings/backups/index.mjs +9 -9
  290. package/dist/astro/routes/api/settings/email.mjs +7 -7
  291. package/dist/astro/routes/api/settings.mjs +22 -22
  292. package/dist/astro/routes/api/setup/admin-verify.mjs +21 -21
  293. package/dist/astro/routes/api/setup/admin.mjs +19 -19
  294. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -42
  295. package/dist/astro/routes/api/setup/dev-reset.mjs +5 -5
  296. package/dist/astro/routes/api/setup/index.mjs +54 -49
  297. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  298. package/dist/astro/routes/api/setup/status.mjs +7 -7
  299. package/dist/astro/routes/api/snapshot.mjs +10 -10
  300. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +22 -22
  301. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +22 -22
  302. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +22 -22
  303. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +22 -22
  304. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +21 -21
  305. package/dist/astro/routes/api/taxonomies/_name_.mjs +22 -22
  306. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -35
  307. package/dist/astro/routes/api/taxonomies/index.mjs +22 -22
  308. package/dist/astro/routes/api/themes/preview.mjs +8 -8
  309. package/dist/astro/routes/api/typegen.mjs +7 -7
  310. package/dist/astro/routes/api/visual-editing/action-token.mjs +8 -8
  311. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +20 -20
  312. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +5 -5
  313. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  314. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  315. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  316. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -17
  317. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  318. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  319. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  320. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  321. package/dist/astro/routes/api/widget-components.mjs +6 -6
  322. package/dist/astro/routes/robots.txt.mjs +7 -7
  323. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  324. package/dist/astro/routes/sitemap.xml.mjs +8 -8
  325. package/dist/astro/types.d.mts +17 -17
  326. package/dist/audit-CCH3MA4Y.mjs +127 -0
  327. package/dist/audit-CCH3MA4Y.mjs.map +1 -0
  328. package/dist/auth/providers/github.d.mts +1 -1
  329. package/dist/auth/providers/google.d.mts +1 -1
  330. package/dist/auth/providers/microsoft.d.mts +27 -0
  331. package/dist/auth/providers/microsoft.d.mts.map +1 -0
  332. package/dist/auth/providers/microsoft.mjs +20 -0
  333. package/dist/auth/providers/microsoft.mjs.map +1 -0
  334. package/dist/authoritative-records-dSvXCfzb.mjs +5172 -0
  335. package/dist/authoritative-records-dSvXCfzb.mjs.map +1 -0
  336. package/dist/authorize-DeWfk--K.mjs +49 -0
  337. package/dist/authorize-DeWfk--K.mjs.map +1 -0
  338. package/dist/backup-CFnbdTSJ.mjs +246 -0
  339. package/dist/backup-CFnbdTSJ.mjs.map +1 -0
  340. package/dist/base64-BQBZwXCx.mjs +63 -0
  341. package/dist/base64-BQBZwXCx.mjs.map +1 -0
  342. package/dist/block-types-C0YFSfR7.mjs +132 -0
  343. package/dist/block-types-C0YFSfR7.mjs.map +1 -0
  344. package/dist/block-values-H4E0XwE8.mjs +175 -0
  345. package/dist/block-values-H4E0XwE8.mjs.map +1 -0
  346. package/dist/byline-BhVslYLz.mjs +909 -0
  347. package/dist/byline-BhVslYLz.mjs.map +1 -0
  348. package/dist/byline-fields-DHJs0Mja.mjs +280 -0
  349. package/dist/byline-fields-DHJs0Mja.mjs.map +1 -0
  350. package/dist/byline-fields-xdxE9kxZ.mjs +123 -0
  351. package/dist/byline-fields-xdxE9kxZ.mjs.map +1 -0
  352. package/dist/bylines-B_nN9liM.mjs +234 -0
  353. package/dist/bylines-B_nN9liM.mjs.map +1 -0
  354. package/dist/bylines-C71YACkL.mjs +150 -0
  355. package/dist/bylines-C71YACkL.mjs.map +1 -0
  356. package/dist/cache-aTYCL9nK.mjs +133 -0
  357. package/dist/cache-aTYCL9nK.mjs.map +1 -0
  358. package/dist/canonical-Y1dpjCnp.mjs +174 -0
  359. package/dist/canonical-Y1dpjCnp.mjs.map +1 -0
  360. package/dist/capture-triggers-C9JKoIdT.mjs +362 -0
  361. package/dist/capture-triggers-C9JKoIdT.mjs.map +1 -0
  362. package/dist/challenge-store-CxZxPqaw.mjs +51 -0
  363. package/dist/challenge-store-CxZxPqaw.mjs.map +1 -0
  364. package/dist/checksum-DtH6m5uk.mjs +162 -0
  365. package/dist/checksum-DtH6m5uk.mjs.map +1 -0
  366. package/dist/chrome-tags-BIKBMZYO.mjs +24 -0
  367. package/dist/chrome-tags-BIKBMZYO.mjs.map +1 -0
  368. package/dist/chunks-zlGB5IQP.mjs +25 -0
  369. package/dist/chunks-zlGB5IQP.mjs.map +1 -0
  370. package/dist/cli/index.mjs +47 -47
  371. package/dist/client/cf-access.d.mts +1 -1
  372. package/dist/client/index.d.mts +121 -121
  373. package/dist/client/index.mjs +2 -2
  374. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +85 -0
  375. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +1 -0
  376. package/dist/comment-Bu08Wvr3.mjs +313 -0
  377. package/dist/comment-Bu08Wvr3.mjs.map +1 -0
  378. package/dist/comment-reaction-B8SfT-yM.mjs +85 -0
  379. package/dist/comment-reaction-B8SfT-yM.mjs.map +1 -0
  380. package/dist/comments-BRtp992B.mjs +99 -0
  381. package/dist/comments-BRtp992B.mjs.map +1 -0
  382. package/dist/comments-DVUYqdyC.mjs +195 -0
  383. package/dist/comments-DVUYqdyC.mjs.map +1 -0
  384. package/dist/components-CQY-Sgm-.mjs +108 -0
  385. package/dist/components-CQY-Sgm-.mjs.map +1 -0
  386. package/dist/config-B-uePMLj.d.mts +39 -0
  387. package/dist/config-B-uePMLj.d.mts.map +1 -0
  388. package/dist/config-B6BDSsz2.d.mts +6712 -0
  389. package/dist/config-B6BDSsz2.d.mts.map +1 -0
  390. package/dist/config-BsJHiQxC.mjs +228 -0
  391. package/dist/config-BsJHiQxC.mjs.map +1 -0
  392. package/dist/connection-B9pIasFd.mjs +36 -0
  393. package/dist/connection-B9pIasFd.mjs.map +1 -0
  394. package/dist/content-Dji9vEiW.mjs +2063 -0
  395. package/dist/content-Dji9vEiW.mjs.map +1 -0
  396. package/dist/content-list-query-DiNwyKtd.d.mts +26 -0
  397. package/dist/content-list-query-DiNwyKtd.d.mts.map +1 -0
  398. package/dist/content-repair-B7wnbzhN.mjs +442 -0
  399. package/dist/content-repair-B7wnbzhN.mjs.map +1 -0
  400. package/dist/context-Ctcxc8Ia.mjs +2026 -0
  401. package/dist/context-Ctcxc8Ia.mjs.map +1 -0
  402. package/dist/credits-Bu7dlobo.mjs +110 -0
  403. package/dist/credits-Bu7dlobo.mjs.map +1 -0
  404. package/dist/cron-xe5XKqA-.mjs +306 -0
  405. package/dist/cron-xe5XKqA-.mjs.map +1 -0
  406. package/dist/dashboard-B5hVHOtf.mjs +151 -0
  407. package/dist/dashboard-B5hVHOtf.mjs.map +1 -0
  408. package/dist/db/index.d.mts +3 -3
  409. package/dist/db/index.mjs +1 -1
  410. package/dist/db/index.mjs.map +1 -1
  411. package/dist/db/libsql-migrations.d.mts +1 -1
  412. package/dist/db/libsql-migrations.mjs +5 -5
  413. package/dist/db/libsql.d.mts +1 -1
  414. package/dist/db/postgres-migrations.d.mts +1 -1
  415. package/dist/db/postgres-migrations.mjs +4 -4
  416. package/dist/db/postgres.d.mts +1 -1
  417. package/dist/db/sqlite-migrations.d.mts +1 -1
  418. package/dist/db/sqlite-migrations.mjs +4 -4
  419. package/dist/db/sqlite.d.mts +1 -1
  420. package/dist/db/sqlite.mjs +1 -1
  421. package/dist/default-DaoYyFRS.mjs +81 -0
  422. package/dist/default-DaoYyFRS.mjs.map +1 -0
  423. package/dist/deferred-tasks-BYcDx2o_.d.mts +9 -0
  424. package/dist/deferred-tasks-BYcDx2o_.d.mts.map +1 -0
  425. package/dist/dev-typegen-Dtl8AfS6.mjs +29 -0
  426. package/dist/dev-typegen-Dtl8AfS6.mjs.map +1 -0
  427. package/dist/device-flow-Ma5P5d2e.mjs +521 -0
  428. package/dist/device-flow-Ma5P5d2e.mjs.map +1 -0
  429. package/dist/digest-xIpR3o64.mjs +194 -0
  430. package/dist/digest-xIpR3o64.mjs.map +1 -0
  431. package/dist/direct-executor-DMWwCey3.mjs +104 -0
  432. package/dist/direct-executor-DMWwCey3.mjs.map +1 -0
  433. package/dist/email-console-DmqVF5J_.mjs +50 -0
  434. package/dist/email-console-DmqVF5J_.mjs.map +1 -0
  435. package/dist/email-locale-Cc5YSXfJ.mjs +25 -0
  436. package/dist/email-locale-Cc5YSXfJ.mjs.map +1 -0
  437. package/dist/emdash-runtime-BlybX9Ui.mjs +4249 -0
  438. package/dist/emdash-runtime-BlybX9Ui.mjs.map +1 -0
  439. package/dist/enrich-Duu4sV3a.mjs +194 -0
  440. package/dist/enrich-Duu4sV3a.mjs.map +1 -0
  441. package/dist/entry-lock-De1L8qUQ.mjs +163 -0
  442. package/dist/entry-lock-De1L8qUQ.mjs.map +1 -0
  443. package/dist/entry-lock-esmMbgI9.d.mts +4551 -0
  444. package/dist/entry-lock-esmMbgI9.d.mts.map +1 -0
  445. package/dist/entry-lock-sxz2PGAT.mjs +1197 -0
  446. package/dist/entry-lock-sxz2PGAT.mjs.map +1 -0
  447. package/dist/env-types-BkjCtN13.mjs +38 -0
  448. package/dist/env-types-BkjCtN13.mjs.map +1 -0
  449. package/dist/error-B0rgPgsQ.mjs +90 -0
  450. package/dist/error-B0rgPgsQ.mjs.map +1 -0
  451. package/dist/errors-CuHQRiBW.mjs +120 -0
  452. package/dist/errors-CuHQRiBW.mjs.map +1 -0
  453. package/dist/errors-DTE6C3K_.mjs +470 -0
  454. package/dist/errors-DTE6C3K_.mjs.map +1 -0
  455. package/dist/escape-nJW7dR0s.mjs +9 -0
  456. package/dist/escape-nJW7dR0s.mjs.map +1 -0
  457. package/dist/fence-CGw57S4v.mjs +162 -0
  458. package/dist/fence-CGw57S4v.mjs.map +1 -0
  459. package/dist/field-defs-cache-Bw8w499w.mjs +77 -0
  460. package/dist/field-defs-cache-Bw8w499w.mjs.map +1 -0
  461. package/dist/field-map-hn-D-SyH.mjs +83 -0
  462. package/dist/field-map-hn-D-SyH.mjs.map +1 -0
  463. package/dist/fts-manager-DacCYIe4.mjs +443 -0
  464. package/dist/fts-manager-DacCYIe4.mjs.map +1 -0
  465. package/dist/gc-BBplHrv6.mjs +75 -0
  466. package/dist/gc-BBplHrv6.mjs.map +1 -0
  467. package/dist/hash-C4DFoJ7Z.mjs +37 -0
  468. package/dist/hash-C4DFoJ7Z.mjs.map +1 -0
  469. package/dist/hook-result-DSRRxu_-.d.mts +31 -0
  470. package/dist/hook-result-DSRRxu_-.d.mts.map +1 -0
  471. package/dist/hreflang-CKPunvU0.mjs +105 -0
  472. package/dist/hreflang-CKPunvU0.mjs.map +1 -0
  473. package/dist/hreflang-egumj6WF.d.mts +50 -0
  474. package/dist/hreflang-egumj6WF.d.mts.map +1 -0
  475. package/dist/http-route-dispatch-DjNFZcJ2.mjs +339 -0
  476. package/dist/http-route-dispatch-DjNFZcJ2.mjs.map +1 -0
  477. package/dist/identity-Dfrx2_Bc.mjs +35 -0
  478. package/dist/identity-Dfrx2_Bc.mjs.map +1 -0
  479. package/dist/import-ROBvhbNc.mjs +2021 -0
  480. package/dist/import-ROBvhbNc.mjs.map +1 -0
  481. package/dist/index-B4sIdCAT.d.mts +623 -0
  482. package/dist/index-B4sIdCAT.d.mts.map +1 -0
  483. package/dist/index.d.mts +24 -24
  484. package/dist/index.mjs +98 -97
  485. package/dist/init-lock-BGmew3r1.mjs +56 -0
  486. package/dist/init-lock-BGmew3r1.mjs.map +1 -0
  487. package/dist/install-finalization-CPM7Gged.mjs +58 -0
  488. package/dist/install-finalization-CPM7Gged.mjs.map +1 -0
  489. package/dist/keys-DxqxcAD4.mjs +61 -0
  490. package/dist/keys-DxqxcAD4.mjs.map +1 -0
  491. package/dist/kinds-BQl5gN6e.mjs +974 -0
  492. package/dist/kinds-BQl5gN6e.mjs.map +1 -0
  493. package/dist/lifecycle-DGQI7itS.mjs +25 -0
  494. package/dist/lifecycle-DGQI7itS.mjs.map +1 -0
  495. package/dist/load-DMxRl4VK.mjs +28 -0
  496. package/dist/load-DMxRl4VK.mjs.map +1 -0
  497. package/dist/loader-1DMiOq5s.mjs +1303 -0
  498. package/dist/loader-1DMiOq5s.mjs.map +1 -0
  499. package/dist/loops-Dn1i16FP.mjs +205 -0
  500. package/dist/loops-Dn1i16FP.mjs.map +1 -0
  501. package/dist/manifest-builder-CTw4FmZk.mjs +189 -0
  502. package/dist/manifest-builder-CTw4FmZk.mjs.map +1 -0
  503. package/dist/manifest-schema-gy37bD_D.mjs +496 -0
  504. package/dist/manifest-schema-gy37bD_D.mjs.map +1 -0
  505. package/dist/marketplace-tHWSsCUo.mjs +257 -0
  506. package/dist/marketplace-tHWSsCUo.mjs.map +1 -0
  507. package/dist/media/index.d.mts +1 -1
  508. package/dist/media/index.mjs +1 -1
  509. package/dist/media/local-runtime.d.mts +14 -14
  510. package/dist/media/local-runtime.mjs +7 -7
  511. package/dist/media-Bw-Q65ve.mjs +294 -0
  512. package/dist/media-Bw-Q65ve.mjs.map +1 -0
  513. package/dist/media-BzUDu7nl.mjs +373 -0
  514. package/dist/media-BzUDu7nl.mjs.map +1 -0
  515. package/dist/media-aahnKHze.mjs +408 -0
  516. package/dist/media-aahnKHze.mjs.map +1 -0
  517. package/dist/media-allowlist-RMrjo8TU.mjs +45 -0
  518. package/dist/media-allowlist-RMrjo8TU.mjs.map +1 -0
  519. package/dist/media-folders-kabR1oJf.mjs +210 -0
  520. package/dist/media-folders-kabR1oJf.mjs.map +1 -0
  521. package/dist/media-url-DloW2xrP.mjs +43 -0
  522. package/dist/media-url-DloW2xrP.mjs.map +1 -0
  523. package/dist/media-usage-CHHpV7ee.mjs +282 -0
  524. package/dist/media-usage-CHHpV7ee.mjs.map +1 -0
  525. package/dist/media-usage-activation-BinYqC_r.mjs +78 -0
  526. package/dist/media-usage-activation-BinYqC_r.mjs.map +1 -0
  527. package/dist/media-usage-work-C734aq6s.mjs +1015 -0
  528. package/dist/media-usage-work-C734aq6s.mjs.map +1 -0
  529. package/dist/media-usage-work-lxvV0-UO.mjs +151 -0
  530. package/dist/media-usage-work-lxvV0-UO.mjs.map +1 -0
  531. package/dist/menus-6RHNq4ZK.mjs +753 -0
  532. package/dist/menus-6RHNq4ZK.mjs.map +1 -0
  533. package/dist/menus-AuCTaO9W.mjs +3704 -0
  534. package/dist/menus-AuCTaO9W.mjs.map +1 -0
  535. package/dist/menus-BQKqf0Up.mjs +92 -0
  536. package/dist/menus-BQKqf0Up.mjs.map +1 -0
  537. package/dist/migrations/index.d.mts +1 -1
  538. package/dist/migrations/index.mjs +3 -3
  539. package/dist/mime-B5M9R53H.mjs +81 -0
  540. package/dist/mime-B5M9R53H.mjs.map +1 -0
  541. package/dist/mode-nh0ppSX5.mjs +23 -0
  542. package/dist/mode-nh0ppSX5.mjs.map +1 -0
  543. package/dist/node-sqlite-compat-CDOEcc97.mjs +63 -0
  544. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +1 -0
  545. package/dist/oauth-authorization-BtYQ80uU.mjs +274 -0
  546. package/dist/oauth-authorization-BtYQ80uU.mjs.map +1 -0
  547. package/dist/oauth-clients-C1S4NQHh.mjs +266 -0
  548. package/dist/oauth-clients-C1S4NQHh.mjs.map +1 -0
  549. package/dist/oauth-state-store-CpGi2FZH.mjs +50 -0
  550. package/dist/oauth-state-store-CpGi2FZH.mjs.map +1 -0
  551. package/dist/oauth-user-lookup-BNp1aFAr.mjs +26 -0
  552. package/dist/oauth-user-lookup-BNp1aFAr.mjs.map +1 -0
  553. package/dist/object-cache/memory.d.mts +1 -1
  554. package/dist/options-B41aLm1I.d.mts +81 -0
  555. package/dist/options-B41aLm1I.d.mts.map +1 -0
  556. package/dist/ownership-DoeAIuTg.mjs +12 -0
  557. package/dist/ownership-DoeAIuTg.mjs.map +1 -0
  558. package/dist/page/index.d.mts +2 -2
  559. package/dist/page/index.mjs +6 -6
  560. package/dist/parse-CmFDTGzp.mjs +81 -0
  561. package/dist/parse-CmFDTGzp.mjs.map +1 -0
  562. package/dist/parse-QVS0t5oR.d.mts +172 -0
  563. package/dist/parse-QVS0t5oR.d.mts.map +1 -0
  564. package/dist/passkey-config-C-MxsV22.mjs +46 -0
  565. package/dist/passkey-config-C-MxsV22.mjs.map +1 -0
  566. package/dist/paths-kr8hAMMI.mjs +77 -0
  567. package/dist/paths-kr8hAMMI.mjs.map +1 -0
  568. package/dist/placeholder-Dn7MMdWr.d.mts +306 -0
  569. package/dist/placeholder-Dn7MMdWr.d.mts.map +1 -0
  570. package/dist/plan-CuQOeU9g.mjs +135 -0
  571. package/dist/plan-CuQOeU9g.mjs.map +1 -0
  572. package/dist/plugin-test-runtime.d.mts +14 -14
  573. package/dist/plugin-test-runtime.mjs +110 -109
  574. package/dist/plugin-types.d.mts +2 -2
  575. package/dist/plugin-utils.d.mts +12 -12
  576. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  577. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  578. package/dist/plugins/host.d.mts +5 -5
  579. package/dist/plugins/host.mjs +44 -43
  580. package/dist/plugins-CGb-G98c.mjs +261 -0
  581. package/dist/plugins-CGb-G98c.mjs.map +1 -0
  582. package/dist/policy-C5wrDXYV.mjs +45 -0
  583. package/dist/policy-C5wrDXYV.mjs.map +1 -0
  584. package/dist/portable-text-BnRuiR1-.mjs +307 -0
  585. package/dist/portable-text-BnRuiR1-.mjs.map +1 -0
  586. package/dist/preview-xWNSR1Li.mjs +107 -0
  587. package/dist/preview-xWNSR1Li.mjs.map +1 -0
  588. package/dist/protocol-ClxN-m1e.d.mts +61 -0
  589. package/dist/protocol-ClxN-m1e.d.mts.map +1 -0
  590. package/dist/public-submission-CkmT2SKv.mjs +250 -0
  591. package/dist/public-submission-CkmT2SKv.mjs.map +1 -0
  592. package/dist/public-url-B5a0QAh6.mjs +101 -0
  593. package/dist/public-url-B5a0QAh6.mjs.map +1 -0
  594. package/dist/query-DHqFiqqH.mjs +41 -0
  595. package/dist/query-DHqFiqqH.mjs.map +1 -0
  596. package/dist/query-DT85BehD.mjs +1125 -0
  597. package/dist/query-DT85BehD.mjs.map +1 -0
  598. package/dist/rate-limit-iMvcu3eu.mjs +120 -0
  599. package/dist/rate-limit-iMvcu3eu.mjs.map +1 -0
  600. package/dist/receipt-Dpp1uaX9.mjs +43 -0
  601. package/dist/receipt-Dpp1uaX9.mjs.map +1 -0
  602. package/dist/redirect-BRoLiWQE.mjs +19 -0
  603. package/dist/redirect-BRoLiWQE.mjs.map +1 -0
  604. package/dist/redirect-xZNpBoGp.mjs +417 -0
  605. package/dist/redirect-xZNpBoGp.mjs.map +1 -0
  606. package/dist/redirects-D4EWeXAo.mjs +148 -0
  607. package/dist/redirects-D4EWeXAo.mjs.map +1 -0
  608. package/dist/redirects-DCKqwiWp.mjs +446 -0
  609. package/dist/redirects-DCKqwiWp.mjs.map +1 -0
  610. package/dist/registry/testing.mjs +3 -3
  611. package/dist/registry-DaXmUsD4.mjs +8369 -0
  612. package/dist/registry-DaXmUsD4.mjs.map +1 -0
  613. package/dist/relations-JvBP8nGP.mjs +776 -0
  614. package/dist/relations-JvBP8nGP.mjs.map +1 -0
  615. package/dist/request-context.d.mts +2 -2
  616. package/dist/request-context.mjs.map +1 -1
  617. package/dist/request-meta-B6blULFY.mjs +141 -0
  618. package/dist/request-meta-B6blULFY.mjs.map +1 -0
  619. package/dist/resolve-DAhHi5tn.mjs +100 -0
  620. package/dist/resolve-DAhHi5tn.mjs.map +1 -0
  621. package/dist/revision-BWEH2qQB.mjs +368 -0
  622. package/dist/revision-BWEH2qQB.mjs.map +1 -0
  623. package/dist/route-wire-DK600v4u.mjs +197 -0
  624. package/dist/route-wire-DK600v4u.mjs.map +1 -0
  625. package/dist/routes-BeZyaCzv.mjs +272 -0
  626. package/dist/routes-BeZyaCzv.mjs.map +1 -0
  627. package/dist/runner-CskI4Hmq.mjs +6372 -0
  628. package/dist/runner-CskI4Hmq.mjs.map +1 -0
  629. package/dist/runner-J3Cj6DGk.d.mts +68 -0
  630. package/dist/runner-J3Cj6DGk.d.mts.map +1 -0
  631. package/dist/runtime.d.mts +13 -13
  632. package/dist/runtime.mjs +3 -3
  633. package/dist/schema/project-env-types.mjs +37 -37
  634. package/dist/schema-CK0ihqMR.mjs +815 -0
  635. package/dist/schema-CK0ihqMR.mjs.map +1 -0
  636. package/dist/schema-VtaZSrC-.mjs +13 -0
  637. package/dist/schema-VtaZSrC-.mjs.map +1 -0
  638. package/dist/scopes-BRnGlL9t.mjs +34 -0
  639. package/dist/scopes-BRnGlL9t.mjs.map +1 -0
  640. package/dist/search-D6-XK1Sn.mjs +448 -0
  641. package/dist/search-D6-XK1Sn.mjs.map +1 -0
  642. package/dist/secrets-Cc_O3Kp-.mjs +369 -0
  643. package/dist/secrets-Cc_O3Kp-.mjs.map +1 -0
  644. package/dist/sections-CBDCf7qR.mjs +346 -0
  645. package/dist/sections-CBDCf7qR.mjs.map +1 -0
  646. package/dist/seed/index.d.mts +2 -2
  647. package/dist/seed/index.mjs +35 -35
  648. package/dist/seo/index.d.mts +3 -3
  649. package/dist/seo/index.mjs +22 -22
  650. package/dist/seo-BdeEPDNW.mjs +133 -0
  651. package/dist/seo-BdeEPDNW.mjs.map +1 -0
  652. package/dist/seo-C61bnPuV.mjs +114 -0
  653. package/dist/seo-C61bnPuV.mjs.map +1 -0
  654. package/dist/service-BuRKLMxa.mjs +150 -0
  655. package/dist/service-BuRKLMxa.mjs.map +1 -0
  656. package/dist/session-user-CqkPtrPL.mjs +61 -0
  657. package/dist/session-user-CqkPtrPL.mjs.map +1 -0
  658. package/dist/settings-0u0lTthS.mjs +51 -0
  659. package/dist/settings-0u0lTthS.mjs.map +1 -0
  660. package/dist/settings-WHr45II1.mjs +61 -0
  661. package/dist/settings-WHr45II1.mjs.map +1 -0
  662. package/dist/settings-m5tIYnF0.mjs +443 -0
  663. package/dist/settings-m5tIYnF0.mjs.map +1 -0
  664. package/dist/setup-complete-B2_dhZZz.mjs +65 -0
  665. package/dist/setup-complete-B2_dhZZz.mjs.map +1 -0
  666. package/dist/setup-nonce-CJV9ftSK.mjs +25 -0
  667. package/dist/setup-nonce-CJV9ftSK.mjs.map +1 -0
  668. package/dist/single-flight-cache-D0EaGbN1.mjs +104 -0
  669. package/dist/single-flight-cache-D0EaGbN1.mjs.map +1 -0
  670. package/dist/site-settings-KJOqJW6W.mjs +50 -0
  671. package/dist/site-settings-KJOqJW6W.mjs.map +1 -0
  672. package/dist/site-url-Ceq_AUK0.mjs +16 -0
  673. package/dist/site-url-Ceq_AUK0.mjs.map +1 -0
  674. package/dist/snapshot-Dzsn3NZa.mjs +414 -0
  675. package/dist/snapshot-Dzsn3NZa.mjs.map +1 -0
  676. package/dist/ssrf-DsmvZB80.mjs +406 -0
  677. package/dist/ssrf-DsmvZB80.mjs.map +1 -0
  678. package/dist/stage-Csnh_yEd.mjs +662 -0
  679. package/dist/stage-Csnh_yEd.mjs.map +1 -0
  680. package/dist/staged-Q7pnEVvI.mjs +686 -0
  681. package/dist/staged-Q7pnEVvI.mjs.map +1 -0
  682. package/dist/state-kGdOMQRY.mjs +153 -0
  683. package/dist/state-kGdOMQRY.mjs.map +1 -0
  684. package/dist/status-D39Fpy8R.mjs +30 -0
  685. package/dist/status-D39Fpy8R.mjs.map +1 -0
  686. package/dist/storage/local.d.mts +1 -1
  687. package/dist/storage/local.mjs +2 -2
  688. package/dist/storage/s3.d.mts +1 -1
  689. package/dist/storage/s3.mjs +1 -1
  690. package/dist/storage-query-C7iy6eUb.d.mts +1615 -0
  691. package/dist/storage-query-C7iy6eUb.d.mts.map +1 -0
  692. package/dist/tar-BWiraSUY.mjs +449 -0
  693. package/dist/tar-BWiraSUY.mjs.map +1 -0
  694. package/dist/target-DOFs5oUC.mjs +27 -0
  695. package/dist/target-DOFs5oUC.mjs.map +1 -0
  696. package/dist/taxonomies-BS40Wxvi.mjs +939 -0
  697. package/dist/taxonomies-BS40Wxvi.mjs.map +1 -0
  698. package/dist/taxonomies-DAZU9VDd.mjs +697 -0
  699. package/dist/taxonomies-DAZU9VDd.mjs.map +1 -0
  700. package/dist/taxonomy-XzLE95Vx.mjs +525 -0
  701. package/dist/taxonomy-XzLE95Vx.mjs.map +1 -0
  702. package/dist/tokens-DSQan4p7.mjs +171 -0
  703. package/dist/tokens-DSQan4p7.mjs.map +1 -0
  704. package/dist/transfer-BcCVxDgf.mjs +166 -0
  705. package/dist/transfer-BcCVxDgf.mjs.map +1 -0
  706. package/dist/transfer-OMrancOt.mjs +8873 -0
  707. package/dist/transfer-OMrancOt.mjs.map +1 -0
  708. package/dist/transfer-download-Dc-ltjZY.mjs +33 -0
  709. package/dist/transfer-download-Dc-ltjZY.mjs.map +1 -0
  710. package/dist/transformations-Ddx7UtrY.mjs +196 -0
  711. package/dist/transformations-Ddx7UtrY.mjs.map +1 -0
  712. package/dist/transport-flR-Zmds.d.mts +42 -0
  713. package/dist/transport-flR-Zmds.d.mts.map +1 -0
  714. package/dist/transport-umzEbgYO.mjs +136 -0
  715. package/dist/transport-umzEbgYO.mjs.map +1 -0
  716. package/dist/trusted-proxy-BqfQFs6a.mjs +51 -0
  717. package/dist/trusted-proxy-BqfQFs6a.mjs.map +1 -0
  718. package/dist/turnstile-Do60baId.mjs +58 -0
  719. package/dist/turnstile-Do60baId.mjs.map +1 -0
  720. package/dist/types-BT1p3uyb.d.mts +1735 -0
  721. package/dist/types-BT1p3uyb.d.mts.map +1 -0
  722. package/dist/types-BYaPWs_F.d.mts +198 -0
  723. package/dist/types-BYaPWs_F.d.mts.map +1 -0
  724. package/dist/types-C-Xp0CcN.mjs +103 -0
  725. package/dist/types-C-Xp0CcN.mjs.map +1 -0
  726. package/dist/types-CLTQ9b_r.d.mts +374 -0
  727. package/dist/types-CLTQ9b_r.d.mts.map +1 -0
  728. package/dist/types-CPkQw2T2.d.mts +85 -0
  729. package/dist/types-CPkQw2T2.d.mts.map +1 -0
  730. package/dist/types-CQLvuXoZ.d.mts +198 -0
  731. package/dist/types-CQLvuXoZ.d.mts.map +1 -0
  732. package/dist/types-CV5xszpF.d.mts +363 -0
  733. package/dist/types-CV5xszpF.d.mts.map +1 -0
  734. package/dist/types-CdEMurNh.mjs +77 -0
  735. package/dist/types-CdEMurNh.mjs.map +1 -0
  736. package/dist/types-Cj0_yZkn.mjs +18 -0
  737. package/dist/types-Cj0_yZkn.mjs.map +1 -0
  738. package/dist/types-CxwtnuSS.mjs +37 -0
  739. package/dist/types-CxwtnuSS.mjs.map +1 -0
  740. package/dist/types-DGw8KMX_.mjs +16 -0
  741. package/dist/types-DGw8KMX_.mjs.map +1 -0
  742. package/dist/types-DOfVMPoo.d.mts +125 -0
  743. package/dist/types-DOfVMPoo.d.mts.map +1 -0
  744. package/dist/types-LtS0SM4F.d.mts +287 -0
  745. package/dist/types-LtS0SM4F.d.mts.map +1 -0
  746. package/dist/types-ifgOkcBa.d.mts +916 -0
  747. package/dist/types-ifgOkcBa.d.mts.map +1 -0
  748. package/dist/update-check-DOc2aBIU.mjs +161 -0
  749. package/dist/update-check-DOc2aBIU.mjs.map +1 -0
  750. package/dist/upload-attempts-nzdc3cay.mjs +32 -0
  751. package/dist/upload-attempts-nzdc3cay.mjs.map +1 -0
  752. package/dist/url-pattern-hVbqpXs6.mjs +41 -0
  753. package/dist/url-pattern-hVbqpXs6.mjs.map +1 -0
  754. package/dist/user-Dnp53zTq.mjs +171 -0
  755. package/dist/user-Dnp53zTq.mjs.map +1 -0
  756. package/dist/utils-CoV-PYhg.mjs +439 -0
  757. package/dist/utils-CoV-PYhg.mjs.map +1 -0
  758. package/dist/validate-CfQ9_YlD.d.mts +468 -0
  759. package/dist/validate-CfQ9_YlD.d.mts.map +1 -0
  760. package/dist/validate-DBX3DKtL.mjs +516 -0
  761. package/dist/validate-DBX3DKtL.mjs.map +1 -0
  762. package/dist/validation-BJMiDhB1.mjs +219 -0
  763. package/dist/validation-BJMiDhB1.mjs.map +1 -0
  764. package/dist/version-BaT8yKIT.mjs +7 -0
  765. package/dist/version-BaT8yKIT.mjs.map +1 -0
  766. package/dist/version-BwEGkqkx.mjs +9 -0
  767. package/dist/version-BwEGkqkx.mjs.map +1 -0
  768. package/dist/virtual-modules-B6vJW15k.mjs +516 -0
  769. package/dist/virtual-modules-B6vJW15k.mjs.map +1 -0
  770. package/dist/widgets-BkxBAgZ_.mjs +126 -0
  771. package/dist/widgets-BkxBAgZ_.mjs.map +1 -0
  772. package/dist/wxr-taxonomies-D7gAJyOF.mjs +453 -0
  773. package/dist/wxr-taxonomies-D7gAJyOF.mjs.map +1 -0
  774. package/dist/wxr-taxonomies-DM5J9AsT.d.mts +34 -0
  775. package/dist/wxr-taxonomies-DM5J9AsT.d.mts.map +1 -0
  776. package/dist/zod-generator-BQilAboC.mjs +424 -0
  777. package/dist/zod-generator-BQilAboC.mjs.map +1 -0
  778. package/package.json +11 -5
  779. package/src/api/errors.ts +3 -0
  780. package/src/api/handlers/bylines.ts +24 -3
  781. package/src/api/handlers/calendar.ts +246 -0
  782. package/src/api/handlers/content.ts +12 -5
  783. package/src/api/handlers/media-allowlist.ts +1 -0
  784. package/src/api/handlers/media-upload.ts +13 -10
  785. package/src/api/handlers/plugins.ts +21 -29
  786. package/src/api/handlers/redirects.ts +6 -6
  787. package/src/api/schemas/bylines.ts +3 -1
  788. package/src/api/schemas/content.ts +16 -0
  789. package/src/astro/integration/index.ts +18 -1
  790. package/src/astro/integration/routes.ts +5 -0
  791. package/src/astro/integration/vite-config.ts +11 -0
  792. package/src/astro/middleware/csp.ts +1 -0
  793. package/src/astro/middleware/redirect.ts +20 -9
  794. package/src/astro/middleware/request-context.ts +54 -27
  795. package/src/astro/middleware.ts +97 -12
  796. package/src/astro/prefetch.ts +10 -3
  797. package/src/astro/routes/api/admin/bylines/[id]/translations.ts +0 -5
  798. package/src/astro/routes/api/admin/bylines/index.ts +1 -1
  799. package/src/astro/routes/api/admin/plugins/[id]/index.ts +1 -0
  800. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +56 -4
  801. package/src/astro/routes/api/auth/oauth/[provider].ts +37 -4
  802. package/src/astro/routes/api/calendar.ts +35 -0
  803. package/src/astro/routes/api/media/upload-url.ts +8 -4
  804. package/src/astro/routes/api/media.ts +9 -5
  805. package/src/astro/routes/api/setup/index.ts +14 -2
  806. package/src/auth/providers/microsoft-admin.tsx +31 -0
  807. package/src/auth/providers/microsoft.ts +47 -0
  808. package/src/comments/turnstile.ts +6 -1
  809. package/src/components/HtmlBlock.astro +17 -6
  810. package/src/components/HtmlBlockFrame.astro +63 -0
  811. package/src/components/Iframe.astro +141 -0
  812. package/src/components/InlinePortableTextEditor.tsx +8 -7
  813. package/src/components/WebMcpSearch.astro +80 -0
  814. package/src/components/index.ts +5 -2
  815. package/src/components/webmcp-search.ts +142 -0
  816. package/src/config/secrets.ts +27 -15
  817. package/src/content/converters/portable-text-identity.ts +1 -0
  818. package/src/content/converters/portable-text-to-prosemirror.ts +36 -2
  819. package/src/content/converters/prosemirror-to-portable-text.ts +28 -2
  820. package/src/content/converters/types.ts +24 -0
  821. package/src/database/content-datetime.ts +11 -4
  822. package/src/database/migrations/090_redirect_enable_loop_guard.ts +70 -0
  823. package/src/database/migrations/091_redirect_artifacts.ts +141 -0
  824. package/src/database/migrations/runner.ts +4 -0
  825. package/src/database/repositories/content.ts +81 -26
  826. package/src/database/repositories/redirect.ts +6 -1
  827. package/src/database/request-scoped.ts +34 -0
  828. package/src/database/types.ts +23 -0
  829. package/src/db/adapters.ts +2 -0
  830. package/src/emdash-runtime.ts +28 -3
  831. package/src/import/menus.ts +3 -0
  832. package/src/index.ts +1 -0
  833. package/src/loader.ts +226 -55
  834. package/src/mcp/server.ts +12 -4
  835. package/src/media/mime.ts +21 -0
  836. package/src/menus/index.ts +30 -26
  837. package/src/plugins/hooks.ts +10 -0
  838. package/src/plugins/manager.ts +12 -2
  839. package/src/plugins/types.ts +16 -0
  840. package/src/query.ts +12 -29
  841. package/src/redirects/artifacts.ts +460 -0
  842. package/src/redirects/cache.ts +76 -41
  843. package/src/request-context.ts +1 -1
  844. package/src/seed/apply.ts +65 -57
  845. package/src/settings/index.ts +17 -12
  846. package/src/transfer/format/columns.ts +3 -0
  847. package/src/transfer/import/rebuild.ts +17 -2
  848. package/src/transfer/import/scaffold.ts +16 -9
  849. package/src/ui.ts +1 -0
  850. package/src/utils/sanitize.ts +14 -9
  851. package/src/virtual-modules.d.ts +3 -0
  852. package/dist/action-token-D2KE1Rqf.mjs +0 -26
  853. package/dist/action-token-D2KE1Rqf.mjs.map +0 -1
  854. package/dist/activation-DDuqAat2.mjs +0 -387
  855. package/dist/activation-DDuqAat2.mjs.map +0 -1
  856. package/dist/adapters-Ds-1Pmkm.d.mts +0 -171
  857. package/dist/adapters-Ds-1Pmkm.d.mts.map +0 -1
  858. package/dist/allowed-origins-D78QvbTO.mjs +0 -116
  859. package/dist/allowed-origins-D78QvbTO.mjs.map +0 -1
  860. package/dist/api-BBZlif0y.mjs +0 -4974
  861. package/dist/api-BBZlif0y.mjs.map +0 -1
  862. package/dist/api-tokens-BGbfWZVO.mjs +0 -166
  863. package/dist/api-tokens-BGbfWZVO.mjs.map +0 -1
  864. package/dist/apply-CDNV4JJ-.mjs +0 -1672
  865. package/dist/apply-CDNV4JJ-.mjs.map +0 -1
  866. package/dist/approvals-CVvJSEBF.mjs +0 -460
  867. package/dist/approvals-CVvJSEBF.mjs.map +0 -1
  868. package/dist/artifact-fetch-CGK0DQLj.mjs +0 -659
  869. package/dist/artifact-fetch-CGK0DQLj.mjs.map +0 -1
  870. package/dist/audit-BszbE_BP.mjs +0 -127
  871. package/dist/audit-BszbE_BP.mjs.map +0 -1
  872. package/dist/authoritative-records-ChM8dTeV.mjs +0 -5172
  873. package/dist/authoritative-records-ChM8dTeV.mjs.map +0 -1
  874. package/dist/authorize-CTGywswM.mjs +0 -49
  875. package/dist/authorize-CTGywswM.mjs.map +0 -1
  876. package/dist/backup-CDrPP8fI.mjs +0 -246
  877. package/dist/backup-CDrPP8fI.mjs.map +0 -1
  878. package/dist/base64-DvnNgP7e.mjs +0 -63
  879. package/dist/base64-DvnNgP7e.mjs.map +0 -1
  880. package/dist/block-types-nNEaPkvx.mjs +0 -132
  881. package/dist/block-types-nNEaPkvx.mjs.map +0 -1
  882. package/dist/block-values-Bho1nsZF.mjs +0 -175
  883. package/dist/block-values-Bho1nsZF.mjs.map +0 -1
  884. package/dist/byline-02tu_Uc-.mjs +0 -909
  885. package/dist/byline-02tu_Uc-.mjs.map +0 -1
  886. package/dist/byline-fields-BYbTptTU.mjs +0 -280
  887. package/dist/byline-fields-BYbTptTU.mjs.map +0 -1
  888. package/dist/byline-fields-BjQH-1z9.mjs +0 -123
  889. package/dist/byline-fields-BjQH-1z9.mjs.map +0 -1
  890. package/dist/bylines-VytjeHBI.mjs +0 -214
  891. package/dist/bylines-VytjeHBI.mjs.map +0 -1
  892. package/dist/bylines-gyWBWUUc.mjs +0 -150
  893. package/dist/bylines-gyWBWUUc.mjs.map +0 -1
  894. package/dist/cache-CPanL9IO.mjs +0 -114
  895. package/dist/cache-CPanL9IO.mjs.map +0 -1
  896. package/dist/canonical-CAecl1UQ.mjs +0 -174
  897. package/dist/canonical-CAecl1UQ.mjs.map +0 -1
  898. package/dist/capture-triggers-CdZfvHtF.mjs +0 -362
  899. package/dist/capture-triggers-CdZfvHtF.mjs.map +0 -1
  900. package/dist/challenge-store-VePApay4.mjs +0 -51
  901. package/dist/challenge-store-VePApay4.mjs.map +0 -1
  902. package/dist/checksum-BSIhEAYW.mjs +0 -162
  903. package/dist/checksum-BSIhEAYW.mjs.map +0 -1
  904. package/dist/chrome-tags-CKELm-bo.mjs +0 -24
  905. package/dist/chrome-tags-CKELm-bo.mjs.map +0 -1
  906. package/dist/chunks-DBmkKmBH.mjs +0 -25
  907. package/dist/chunks-DBmkKmBH.mjs.map +0 -1
  908. package/dist/collection-slugs-cache-BNRAPNiu.mjs +0 -85
  909. package/dist/collection-slugs-cache-BNRAPNiu.mjs.map +0 -1
  910. package/dist/comment-Cq1UYN8_.mjs +0 -313
  911. package/dist/comment-Cq1UYN8_.mjs.map +0 -1
  912. package/dist/comment-reaction-B5sZzSoA.mjs +0 -85
  913. package/dist/comment-reaction-B5sZzSoA.mjs.map +0 -1
  914. package/dist/comments-B3F-ETyh.mjs +0 -195
  915. package/dist/comments-B3F-ETyh.mjs.map +0 -1
  916. package/dist/comments-zrTgWBSg.mjs +0 -99
  917. package/dist/comments-zrTgWBSg.mjs.map +0 -1
  918. package/dist/components-Dbf4Eq16.mjs +0 -108
  919. package/dist/components-Dbf4Eq16.mjs.map +0 -1
  920. package/dist/config-BCM5sQP7.d.mts +0 -6688
  921. package/dist/config-BCM5sQP7.d.mts.map +0 -1
  922. package/dist/config-CXPcy2iY.mjs +0 -228
  923. package/dist/config-CXPcy2iY.mjs.map +0 -1
  924. package/dist/config-CZkZBuBK.d.mts +0 -39
  925. package/dist/config-CZkZBuBK.d.mts.map +0 -1
  926. package/dist/connection-C5GIciX9.mjs +0 -36
  927. package/dist/connection-C5GIciX9.mjs.map +0 -1
  928. package/dist/content-RzEXY3QX.mjs +0 -2020
  929. package/dist/content-RzEXY3QX.mjs.map +0 -1
  930. package/dist/content-list-query-B6P37Ug_.d.mts +0 -26
  931. package/dist/content-list-query-B6P37Ug_.d.mts.map +0 -1
  932. package/dist/content-repair-BDVsYXWK.mjs +0 -442
  933. package/dist/content-repair-BDVsYXWK.mjs.map +0 -1
  934. package/dist/context-BpTIzY5h.mjs +0 -2026
  935. package/dist/context-BpTIzY5h.mjs.map +0 -1
  936. package/dist/credits-JOE92Gr7.mjs +0 -110
  937. package/dist/credits-JOE92Gr7.mjs.map +0 -1
  938. package/dist/cron-ktyapbdB.mjs +0 -306
  939. package/dist/cron-ktyapbdB.mjs.map +0 -1
  940. package/dist/dashboard-BoV4pwPP.mjs +0 -151
  941. package/dist/dashboard-BoV4pwPP.mjs.map +0 -1
  942. package/dist/default-B7KnYwtQ.mjs +0 -81
  943. package/dist/default-B7KnYwtQ.mjs.map +0 -1
  944. package/dist/deferred-tasks-eaUIqXj8.d.mts +0 -9
  945. package/dist/deferred-tasks-eaUIqXj8.d.mts.map +0 -1
  946. package/dist/dev-typegen-8JlYYFno.mjs +0 -29
  947. package/dist/dev-typegen-8JlYYFno.mjs.map +0 -1
  948. package/dist/device-flow-BlV_z24g.mjs +0 -521
  949. package/dist/device-flow-BlV_z24g.mjs.map +0 -1
  950. package/dist/digest-DiYAoZpf.mjs +0 -194
  951. package/dist/digest-DiYAoZpf.mjs.map +0 -1
  952. package/dist/direct-executor-Db8xA3zg.mjs +0 -104
  953. package/dist/direct-executor-Db8xA3zg.mjs.map +0 -1
  954. package/dist/email-console-Dm78wSmg.mjs +0 -50
  955. package/dist/email-console-Dm78wSmg.mjs.map +0 -1
  956. package/dist/email-locale-B4X9LXe9.mjs +0 -25
  957. package/dist/email-locale-B4X9LXe9.mjs.map +0 -1
  958. package/dist/emdash-runtime-BakQ6io7.mjs +0 -4239
  959. package/dist/emdash-runtime-BakQ6io7.mjs.map +0 -1
  960. package/dist/enrich-BDdVNeDK.mjs +0 -194
  961. package/dist/enrich-BDdVNeDK.mjs.map +0 -1
  962. package/dist/entry-lock-DY8B-xcr.d.mts +0 -4544
  963. package/dist/entry-lock-DY8B-xcr.d.mts.map +0 -1
  964. package/dist/entry-lock-DrUAdTzf.mjs +0 -163
  965. package/dist/entry-lock-DrUAdTzf.mjs.map +0 -1
  966. package/dist/entry-lock-yIkBduqJ.mjs +0 -1180
  967. package/dist/entry-lock-yIkBduqJ.mjs.map +0 -1
  968. package/dist/env-types-DkHYR2pl.mjs +0 -38
  969. package/dist/env-types-DkHYR2pl.mjs.map +0 -1
  970. package/dist/error-DIYXAVk4.mjs +0 -90
  971. package/dist/error-DIYXAVk4.mjs.map +0 -1
  972. package/dist/errors-CNvATh_7.mjs +0 -469
  973. package/dist/errors-CNvATh_7.mjs.map +0 -1
  974. package/dist/errors-CjXd1LgH.mjs +0 -120
  975. package/dist/errors-CjXd1LgH.mjs.map +0 -1
  976. package/dist/escape-B1GM0yJU.mjs +0 -9
  977. package/dist/escape-B1GM0yJU.mjs.map +0 -1
  978. package/dist/fence-8MaKKWhp.mjs +0 -162
  979. package/dist/fence-8MaKKWhp.mjs.map +0 -1
  980. package/dist/field-defs-cache-DEkFYCDE.mjs +0 -77
  981. package/dist/field-defs-cache-DEkFYCDE.mjs.map +0 -1
  982. package/dist/field-map-D7ioN0r0.mjs +0 -83
  983. package/dist/field-map-D7ioN0r0.mjs.map +0 -1
  984. package/dist/fts-manager-DU03MxWu.mjs +0 -443
  985. package/dist/fts-manager-DU03MxWu.mjs.map +0 -1
  986. package/dist/gc-DMiE7ezk.mjs +0 -75
  987. package/dist/gc-DMiE7ezk.mjs.map +0 -1
  988. package/dist/hash-CY4QdeMJ.mjs +0 -37
  989. package/dist/hash-CY4QdeMJ.mjs.map +0 -1
  990. package/dist/hook-result-Cb67D3P3.d.mts +0 -31
  991. package/dist/hook-result-Cb67D3P3.d.mts.map +0 -1
  992. package/dist/hreflang-Bterc3b7.mjs +0 -105
  993. package/dist/hreflang-Bterc3b7.mjs.map +0 -1
  994. package/dist/hreflang-uIBOE5yg.d.mts +0 -50
  995. package/dist/hreflang-uIBOE5yg.d.mts.map +0 -1
  996. package/dist/http-route-dispatch-DubjTibD.mjs +0 -339
  997. package/dist/http-route-dispatch-DubjTibD.mjs.map +0 -1
  998. package/dist/identity-DJ-5AcdG.mjs +0 -35
  999. package/dist/identity-DJ-5AcdG.mjs.map +0 -1
  1000. package/dist/import-DEfuIgRz.mjs +0 -2020
  1001. package/dist/import-DEfuIgRz.mjs.map +0 -1
  1002. package/dist/index-xCy3j0f6.d.mts +0 -623
  1003. package/dist/index-xCy3j0f6.d.mts.map +0 -1
  1004. package/dist/init-lock-4eRRB4Le.mjs +0 -56
  1005. package/dist/init-lock-4eRRB4Le.mjs.map +0 -1
  1006. package/dist/install-finalization-DeGRbaVa.mjs +0 -58
  1007. package/dist/install-finalization-DeGRbaVa.mjs.map +0 -1
  1008. package/dist/keys-DWwMxdZh.mjs +0 -61
  1009. package/dist/keys-DWwMxdZh.mjs.map +0 -1
  1010. package/dist/kinds-D1A-00-F.mjs +0 -974
  1011. package/dist/kinds-D1A-00-F.mjs.map +0 -1
  1012. package/dist/lifecycle-BWtBGNEn.mjs +0 -25
  1013. package/dist/lifecycle-BWtBGNEn.mjs.map +0 -1
  1014. package/dist/load-BR1NEa_3.mjs +0 -28
  1015. package/dist/load-BR1NEa_3.mjs.map +0 -1
  1016. package/dist/loader-D4edocWH.mjs +0 -1197
  1017. package/dist/loader-D4edocWH.mjs.map +0 -1
  1018. package/dist/loops-DLaHFrvI.mjs +0 -205
  1019. package/dist/loops-DLaHFrvI.mjs.map +0 -1
  1020. package/dist/manifest-builder-8jsSLR7s.mjs +0 -189
  1021. package/dist/manifest-builder-8jsSLR7s.mjs.map +0 -1
  1022. package/dist/manifest-schema-DcZjRNEv.mjs +0 -496
  1023. package/dist/manifest-schema-DcZjRNEv.mjs.map +0 -1
  1024. package/dist/marketplace-CNxjq10S.mjs +0 -257
  1025. package/dist/marketplace-CNxjq10S.mjs.map +0 -1
  1026. package/dist/media-3v7mqAVX.mjs +0 -294
  1027. package/dist/media-3v7mqAVX.mjs.map +0 -1
  1028. package/dist/media-Bs6qmlVl.mjs +0 -408
  1029. package/dist/media-Bs6qmlVl.mjs.map +0 -1
  1030. package/dist/media-CputjGE1.mjs +0 -373
  1031. package/dist/media-CputjGE1.mjs.map +0 -1
  1032. package/dist/media-allowlist-isqF1gAh.mjs +0 -44
  1033. package/dist/media-allowlist-isqF1gAh.mjs.map +0 -1
  1034. package/dist/media-folders-D2VdVBf6.mjs +0 -210
  1035. package/dist/media-folders-D2VdVBf6.mjs.map +0 -1
  1036. package/dist/media-url-DbkMY3y6.mjs +0 -43
  1037. package/dist/media-url-DbkMY3y6.mjs.map +0 -1
  1038. package/dist/media-usage-activation-BaT4AlNI.mjs +0 -78
  1039. package/dist/media-usage-activation-BaT4AlNI.mjs.map +0 -1
  1040. package/dist/media-usage-v43L0kR_.mjs +0 -282
  1041. package/dist/media-usage-v43L0kR_.mjs.map +0 -1
  1042. package/dist/media-usage-work-CY8gIeU-.mjs +0 -151
  1043. package/dist/media-usage-work-CY8gIeU-.mjs.map +0 -1
  1044. package/dist/media-usage-work-VO108Q9E.mjs +0 -1015
  1045. package/dist/media-usage-work-VO108Q9E.mjs.map +0 -1
  1046. package/dist/menus-BYyeRemR.mjs +0 -3647
  1047. package/dist/menus-BYyeRemR.mjs.map +0 -1
  1048. package/dist/menus-mC_XTxD7.mjs +0 -92
  1049. package/dist/menus-mC_XTxD7.mjs.map +0 -1
  1050. package/dist/menus-trvc6_fW.mjs +0 -753
  1051. package/dist/menus-trvc6_fW.mjs.map +0 -1
  1052. package/dist/mime-IZf-LHIS.mjs +0 -36
  1053. package/dist/mime-IZf-LHIS.mjs.map +0 -1
  1054. package/dist/mode-B9-gMXL9.mjs +0 -23
  1055. package/dist/mode-B9-gMXL9.mjs.map +0 -1
  1056. package/dist/node-sqlite-compat-DztcWs4y.mjs +0 -63
  1057. package/dist/node-sqlite-compat-DztcWs4y.mjs.map +0 -1
  1058. package/dist/oauth-authorization-BIHy9SGU.mjs +0 -274
  1059. package/dist/oauth-authorization-BIHy9SGU.mjs.map +0 -1
  1060. package/dist/oauth-clients-BZWZvKXa.mjs +0 -266
  1061. package/dist/oauth-clients-BZWZvKXa.mjs.map +0 -1
  1062. package/dist/oauth-state-store-CxXTjXdI.mjs +0 -50
  1063. package/dist/oauth-state-store-CxXTjXdI.mjs.map +0 -1
  1064. package/dist/oauth-user-lookup-GWojfxRl.mjs +0 -26
  1065. package/dist/oauth-user-lookup-GWojfxRl.mjs.map +0 -1
  1066. package/dist/options-DRF6dlXY.d.mts +0 -81
  1067. package/dist/options-DRF6dlXY.d.mts.map +0 -1
  1068. package/dist/ownership-Bd77AmJz.mjs +0 -12
  1069. package/dist/ownership-Bd77AmJz.mjs.map +0 -1
  1070. package/dist/parse-5Y0W39xR.mjs +0 -81
  1071. package/dist/parse-5Y0W39xR.mjs.map +0 -1
  1072. package/dist/parse-BPblgoa-.d.mts +0 -172
  1073. package/dist/parse-BPblgoa-.d.mts.map +0 -1
  1074. package/dist/passkey-config-PiQ5cBnt.mjs +0 -46
  1075. package/dist/passkey-config-PiQ5cBnt.mjs.map +0 -1
  1076. package/dist/paths-DkS74lBM.mjs +0 -77
  1077. package/dist/paths-DkS74lBM.mjs.map +0 -1
  1078. package/dist/placeholder-Bez2282x.d.mts +0 -306
  1079. package/dist/placeholder-Bez2282x.d.mts.map +0 -1
  1080. package/dist/plan-Lw7iGnGD.mjs +0 -135
  1081. package/dist/plan-Lw7iGnGD.mjs.map +0 -1
  1082. package/dist/plugins-D7xSh1Lu.mjs +0 -277
  1083. package/dist/plugins-D7xSh1Lu.mjs.map +0 -1
  1084. package/dist/policy-DMRiMdLn.mjs +0 -45
  1085. package/dist/policy-DMRiMdLn.mjs.map +0 -1
  1086. package/dist/portable-text-kcyN3F-a.mjs +0 -307
  1087. package/dist/portable-text-kcyN3F-a.mjs.map +0 -1
  1088. package/dist/preview--2VDLaND.mjs +0 -107
  1089. package/dist/preview--2VDLaND.mjs.map +0 -1
  1090. package/dist/protocol-FvwLA8P-.d.mts +0 -61
  1091. package/dist/protocol-FvwLA8P-.d.mts.map +0 -1
  1092. package/dist/public-submission-BRyK76U8.mjs +0 -250
  1093. package/dist/public-submission-BRyK76U8.mjs.map +0 -1
  1094. package/dist/public-url-7j0cpCFc.mjs +0 -101
  1095. package/dist/public-url-7j0cpCFc.mjs.map +0 -1
  1096. package/dist/query-BRNTde3V.mjs +0 -41
  1097. package/dist/query-BRNTde3V.mjs.map +0 -1
  1098. package/dist/query-DyYYWOKk.mjs +0 -1161
  1099. package/dist/query-DyYYWOKk.mjs.map +0 -1
  1100. package/dist/rate-limit-D0BcE76H.mjs +0 -120
  1101. package/dist/rate-limit-D0BcE76H.mjs.map +0 -1
  1102. package/dist/receipt-C4icyHlC.mjs +0 -43
  1103. package/dist/receipt-C4icyHlC.mjs.map +0 -1
  1104. package/dist/redirect-9DbtxSNG.mjs +0 -19
  1105. package/dist/redirect-9DbtxSNG.mjs.map +0 -1
  1106. package/dist/redirect-BvFKh8Sz.mjs +0 -416
  1107. package/dist/redirect-BvFKh8Sz.mjs.map +0 -1
  1108. package/dist/redirects-1nhdEaTq.mjs +0 -148
  1109. package/dist/redirects-1nhdEaTq.mjs.map +0 -1
  1110. package/dist/redirects-D1yMnSR9.mjs +0 -446
  1111. package/dist/redirects-D1yMnSR9.mjs.map +0 -1
  1112. package/dist/registry-CzPJNu3H.mjs +0 -8366
  1113. package/dist/registry-CzPJNu3H.mjs.map +0 -1
  1114. package/dist/relations-C8JpSkU6.mjs +0 -776
  1115. package/dist/relations-C8JpSkU6.mjs.map +0 -1
  1116. package/dist/request-meta-Bs60XW1m.mjs +0 -141
  1117. package/dist/request-meta-Bs60XW1m.mjs.map +0 -1
  1118. package/dist/resolve-BHWgMU_X.mjs +0 -100
  1119. package/dist/resolve-BHWgMU_X.mjs.map +0 -1
  1120. package/dist/revision-CGkQA0e5.mjs +0 -366
  1121. package/dist/revision-CGkQA0e5.mjs.map +0 -1
  1122. package/dist/route-wire-ClUVQduA.mjs +0 -197
  1123. package/dist/route-wire-ClUVQduA.mjs.map +0 -1
  1124. package/dist/routes-D2GFl3B7.mjs +0 -272
  1125. package/dist/routes-D2GFl3B7.mjs.map +0 -1
  1126. package/dist/runner-CLpxmhl8.mjs +0 -6197
  1127. package/dist/runner-CLpxmhl8.mjs.map +0 -1
  1128. package/dist/runner-CWl76CH3.d.mts +0 -68
  1129. package/dist/runner-CWl76CH3.d.mts.map +0 -1
  1130. package/dist/schema-27XefSYG.mjs +0 -13
  1131. package/dist/schema-27XefSYG.mjs.map +0 -1
  1132. package/dist/schema-Btvj3BMh.mjs +0 -815
  1133. package/dist/schema-Btvj3BMh.mjs.map +0 -1
  1134. package/dist/scopes-DGCj6K4p.mjs +0 -34
  1135. package/dist/scopes-DGCj6K4p.mjs.map +0 -1
  1136. package/dist/search-pZRRmWjh.mjs +0 -448
  1137. package/dist/search-pZRRmWjh.mjs.map +0 -1
  1138. package/dist/secrets-CIi0nFiR.mjs +0 -341
  1139. package/dist/secrets-CIi0nFiR.mjs.map +0 -1
  1140. package/dist/sections-CIhqs3Ao.mjs +0 -346
  1141. package/dist/sections-CIhqs3Ao.mjs.map +0 -1
  1142. package/dist/seo-DifeiGdl.mjs +0 -114
  1143. package/dist/seo-DifeiGdl.mjs.map +0 -1
  1144. package/dist/seo-DpYxmGaL.mjs +0 -133
  1145. package/dist/seo-DpYxmGaL.mjs.map +0 -1
  1146. package/dist/service-COVdVpSK.mjs +0 -150
  1147. package/dist/service-COVdVpSK.mjs.map +0 -1
  1148. package/dist/session-user-C6IEjuty.mjs +0 -61
  1149. package/dist/session-user-C6IEjuty.mjs.map +0 -1
  1150. package/dist/settings-CwcrX-Ay.mjs +0 -61
  1151. package/dist/settings-CwcrX-Ay.mjs.map +0 -1
  1152. package/dist/settings-D_cJtT48.mjs +0 -439
  1153. package/dist/settings-D_cJtT48.mjs.map +0 -1
  1154. package/dist/settings-tnPQN3Z2.mjs +0 -51
  1155. package/dist/settings-tnPQN3Z2.mjs.map +0 -1
  1156. package/dist/setup-complete-BOrI10UY.mjs +0 -65
  1157. package/dist/setup-complete-BOrI10UY.mjs.map +0 -1
  1158. package/dist/setup-nonce-0XTBLTsX.mjs +0 -25
  1159. package/dist/setup-nonce-0XTBLTsX.mjs.map +0 -1
  1160. package/dist/single-flight-cache-B5O2qhO1.mjs +0 -104
  1161. package/dist/single-flight-cache-B5O2qhO1.mjs.map +0 -1
  1162. package/dist/site-settings-B7vGFRDT.mjs +0 -50
  1163. package/dist/site-settings-B7vGFRDT.mjs.map +0 -1
  1164. package/dist/site-url-wEYRMHBv.mjs +0 -16
  1165. package/dist/site-url-wEYRMHBv.mjs.map +0 -1
  1166. package/dist/snapshot-W36KbLmc.mjs +0 -414
  1167. package/dist/snapshot-W36KbLmc.mjs.map +0 -1
  1168. package/dist/ssrf-CRJ-xom5.mjs +0 -406
  1169. package/dist/ssrf-CRJ-xom5.mjs.map +0 -1
  1170. package/dist/stage-DA0NrTRZ.mjs +0 -662
  1171. package/dist/stage-DA0NrTRZ.mjs.map +0 -1
  1172. package/dist/staged-Bw5eHbKS.mjs +0 -686
  1173. package/dist/staged-Bw5eHbKS.mjs.map +0 -1
  1174. package/dist/state-BTlprvUF.mjs +0 -153
  1175. package/dist/state-BTlprvUF.mjs.map +0 -1
  1176. package/dist/status-C6IrSLMT.mjs +0 -30
  1177. package/dist/status-C6IrSLMT.mjs.map +0 -1
  1178. package/dist/storage-query-CdVF2bng.d.mts +0 -1614
  1179. package/dist/storage-query-CdVF2bng.d.mts.map +0 -1
  1180. package/dist/tar-BGOZARjy.mjs +0 -449
  1181. package/dist/tar-BGOZARjy.mjs.map +0 -1
  1182. package/dist/target-YhYH_0uc.mjs +0 -27
  1183. package/dist/target-YhYH_0uc.mjs.map +0 -1
  1184. package/dist/taxonomies-DK_XBrmT.mjs +0 -697
  1185. package/dist/taxonomies-DK_XBrmT.mjs.map +0 -1
  1186. package/dist/taxonomies-S1M3rUC0.mjs +0 -939
  1187. package/dist/taxonomies-S1M3rUC0.mjs.map +0 -1
  1188. package/dist/taxonomy-BesdHIwi.mjs +0 -525
  1189. package/dist/taxonomy-BesdHIwi.mjs.map +0 -1
  1190. package/dist/tokens-B_ffPF1q.mjs +0 -171
  1191. package/dist/tokens-B_ffPF1q.mjs.map +0 -1
  1192. package/dist/transfer-9fVSxyrV.mjs +0 -166
  1193. package/dist/transfer-9fVSxyrV.mjs.map +0 -1
  1194. package/dist/transfer-B7LUTaYD.mjs +0 -8855
  1195. package/dist/transfer-B7LUTaYD.mjs.map +0 -1
  1196. package/dist/transfer-download-BdNq4VWN.mjs +0 -33
  1197. package/dist/transfer-download-BdNq4VWN.mjs.map +0 -1
  1198. package/dist/transformations-BtQdvyly.mjs +0 -196
  1199. package/dist/transformations-BtQdvyly.mjs.map +0 -1
  1200. package/dist/transport-CriYXY1c.mjs +0 -136
  1201. package/dist/transport-CriYXY1c.mjs.map +0 -1
  1202. package/dist/transport-SnhS6xku.d.mts +0 -42
  1203. package/dist/transport-SnhS6xku.d.mts.map +0 -1
  1204. package/dist/trusted-proxy-C0eHXPd-.mjs +0 -51
  1205. package/dist/trusted-proxy-C0eHXPd-.mjs.map +0 -1
  1206. package/dist/turnstile-BNPrWd1e.mjs +0 -53
  1207. package/dist/turnstile-BNPrWd1e.mjs.map +0 -1
  1208. package/dist/types-B8sF_kE5.d.mts +0 -287
  1209. package/dist/types-B8sF_kE5.d.mts.map +0 -1
  1210. package/dist/types-BYVIYOlD.d.mts +0 -1720
  1211. package/dist/types-BYVIYOlD.d.mts.map +0 -1
  1212. package/dist/types-Bs4bi95j.d.mts +0 -374
  1213. package/dist/types-Bs4bi95j.d.mts.map +0 -1
  1214. package/dist/types-CGuODCZi.d.mts +0 -198
  1215. package/dist/types-CGuODCZi.d.mts.map +0 -1
  1216. package/dist/types-CVsmpTcU.mjs +0 -18
  1217. package/dist/types-CVsmpTcU.mjs.map +0 -1
  1218. package/dist/types-ClFEExxn.mjs +0 -37
  1219. package/dist/types-ClFEExxn.mjs.map +0 -1
  1220. package/dist/types-D994zUWB.d.mts +0 -85
  1221. package/dist/types-D994zUWB.d.mts.map +0 -1
  1222. package/dist/types-DAj1ByJQ.d.mts +0 -125
  1223. package/dist/types-DAj1ByJQ.d.mts.map +0 -1
  1224. package/dist/types-Dlv6esp4.mjs +0 -77
  1225. package/dist/types-Dlv6esp4.mjs.map +0 -1
  1226. package/dist/types-Dr1LVwL7.d.mts +0 -363
  1227. package/dist/types-Dr1LVwL7.d.mts.map +0 -1
  1228. package/dist/types-MN9bOQ1g.d.mts +0 -198
  1229. package/dist/types-MN9bOQ1g.d.mts.map +0 -1
  1230. package/dist/types-d2Szb1oz.mjs +0 -16
  1231. package/dist/types-d2Szb1oz.mjs.map +0 -1
  1232. package/dist/types-ibtP7GEA.d.mts +0 -896
  1233. package/dist/types-ibtP7GEA.d.mts.map +0 -1
  1234. package/dist/types-j6MBDjlZ.mjs +0 -103
  1235. package/dist/types-j6MBDjlZ.mjs.map +0 -1
  1236. package/dist/update-check-D8No-E5s.mjs +0 -161
  1237. package/dist/update-check-D8No-E5s.mjs.map +0 -1
  1238. package/dist/upload-attempts-BodUoFBu.mjs +0 -32
  1239. package/dist/upload-attempts-BodUoFBu.mjs.map +0 -1
  1240. package/dist/url-pattern-DGAG6ZP2.mjs +0 -41
  1241. package/dist/url-pattern-DGAG6ZP2.mjs.map +0 -1
  1242. package/dist/user-BOvuF1sQ.mjs +0 -171
  1243. package/dist/user-BOvuF1sQ.mjs.map +0 -1
  1244. package/dist/utils-Dr01wRKt.mjs +0 -439
  1245. package/dist/utils-Dr01wRKt.mjs.map +0 -1
  1246. package/dist/validate-BttYU7NK.mjs +0 -516
  1247. package/dist/validate-BttYU7NK.mjs.map +0 -1
  1248. package/dist/validate-Df09inbC.d.mts +0 -468
  1249. package/dist/validate-Df09inbC.d.mts.map +0 -1
  1250. package/dist/validation-DH2WRwWO.mjs +0 -219
  1251. package/dist/validation-DH2WRwWO.mjs.map +0 -1
  1252. package/dist/version-BbygH8CT.mjs +0 -7
  1253. package/dist/version-BbygH8CT.mjs.map +0 -1
  1254. package/dist/version-CseoDDOd.mjs +0 -9
  1255. package/dist/version-CseoDDOd.mjs.map +0 -1
  1256. package/dist/virtual-modules-82GlnQyG.mjs +0 -516
  1257. package/dist/virtual-modules-82GlnQyG.mjs.map +0 -1
  1258. package/dist/widgets-DMAgGcQt.mjs +0 -126
  1259. package/dist/widgets-DMAgGcQt.mjs.map +0 -1
  1260. package/dist/wxr-taxonomies-Bi5kFSxQ.mjs +0 -453
  1261. package/dist/wxr-taxonomies-Bi5kFSxQ.mjs.map +0 -1
  1262. package/dist/wxr-taxonomies-y_FpYlDn.d.mts +0 -34
  1263. package/dist/wxr-taxonomies-y_FpYlDn.d.mts.map +0 -1
  1264. package/dist/zod-generator-DnfG5sGQ.mjs +0 -424
  1265. package/dist/zod-generator-DnfG5sGQ.mjs.map +0 -1
  1266. /package/dist/{api-tokens-B4COohsb.mjs → api-tokens-BLz2MtQs.mjs} +0 -0
  1267. /package/dist/{ssrf-sC4_5rxm.mjs → ssrf-tA45vIPX.mjs} +0 -0
@@ -0,0 +1,26 @@
1
+ import { r as verifyPreviewToken, t as generatePreviewToken } from "./tokens-DSQan4p7.mjs";
2
+
3
+ //#region src/visual-editing/action-token.ts
4
+ const VISUAL_ACTION_SECRET_DOMAIN = "emdash:visual-editing-action:v1:";
5
+ const VISUAL_ACTION_TOKEN_INVALID = "VISUAL_ACTION_TOKEN_INVALID";
6
+ function visualActionSecret(previewSecret) {
7
+ return `${VISUAL_ACTION_SECRET_DOMAIN}${previewSecret}`;
8
+ }
9
+ function generateVisualEditingActionToken(previewSecret, userId) {
10
+ return generatePreviewToken({
11
+ contentId: `visual-editing:${userId}`,
12
+ expiresIn: "5m",
13
+ secret: visualActionSecret(previewSecret)
14
+ });
15
+ }
16
+ async function verifyVisualEditingActionToken(token, previewSecret, userId) {
17
+ const verification = await verifyPreviewToken({
18
+ token,
19
+ secret: visualActionSecret(previewSecret)
20
+ });
21
+ return verification.valid && verification.payload.cid === `visual-editing:${userId}`;
22
+ }
23
+
24
+ //#endregion
25
+ export { generateVisualEditingActionToken as n, verifyVisualEditingActionToken as r, VISUAL_ACTION_TOKEN_INVALID as t };
26
+ //# sourceMappingURL=action-token-AgOs1UWD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-token-AgOs1UWD.mjs","names":[],"sources":["../src/visual-editing/action-token.ts"],"sourcesContent":["import { generatePreviewToken, verifyPreviewToken } from \"../preview/tokens.js\";\n\nconst VISUAL_ACTION_SECRET_DOMAIN = \"emdash:visual-editing-action:v1:\";\nexport const VISUAL_ACTION_TOKEN_INVALID = \"VISUAL_ACTION_TOKEN_INVALID\";\n\nfunction visualActionSecret(previewSecret: string): string {\n\treturn `${VISUAL_ACTION_SECRET_DOMAIN}${previewSecret}`;\n}\n\nexport function generateVisualEditingActionToken(\n\tpreviewSecret: string,\n\tuserId: string,\n): Promise<string> {\n\treturn generatePreviewToken({\n\t\tcontentId: `visual-editing:${userId}`,\n\t\texpiresIn: \"5m\",\n\t\tsecret: visualActionSecret(previewSecret),\n\t});\n}\n\nexport async function verifyVisualEditingActionToken(\n\ttoken: string,\n\tpreviewSecret: string,\n\tuserId: string,\n): Promise<boolean> {\n\tconst verification = await verifyPreviewToken({\n\t\ttoken,\n\t\tsecret: visualActionSecret(previewSecret),\n\t});\n\treturn verification.valid && verification.payload.cid === `visual-editing:${userId}`;\n}\n"],"mappings":";;;AAEA,MAAM,8BAA8B;AACpC,MAAa,8BAA8B;AAE3C,SAAS,mBAAmB,eAA+B;AAC1D,QAAO,GAAG,8BAA8B;;AAGzC,SAAgB,iCACf,eACA,QACkB;AAClB,QAAO,qBAAqB;EAC3B,WAAW,kBAAkB;EAC7B,WAAW;EACX,QAAQ,mBAAmB,cAAc;EACzC,CAAC;;AAGH,eAAsB,+BACrB,OACA,eACA,QACmB;CACnB,MAAM,eAAe,MAAM,mBAAmB;EAC7C;EACA,QAAQ,mBAAmB,cAAc;EACzC,CAAC;AACF,QAAO,aAAa,SAAS,aAAa,QAAQ,QAAQ,kBAAkB"}
@@ -0,0 +1,387 @@
1
+ import { u as isPostgres, y as tableExists } from "./dialect-helpers-7_IqPdh9.mjs";
2
+ import { n as verifyMediaUsageCaptureTriggers, t as installMediaUsageCaptureTriggers } from "./capture-triggers-C9JKoIdT.mjs";
3
+ import { sql } from "kysely";
4
+ import { ulid } from "ulidx";
5
+
6
+ //#region src/media/usage/activation.ts
7
+ const ACTIVATION_KEY = "incremental_capture";
8
+ const ACTIVATION_ERROR_CODE = "MEDIA_USAGE_ACTIVATION_FAILED";
9
+ const MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION = 1;
10
+ var MediaUsageActivationVersionMismatchError = class extends Error {};
11
+ const MEDIA_USAGE_ACTIVATION_LIMITS = Object.freeze({
12
+ collectionsPerCall: 1,
13
+ leaseDurationSeconds: 300
14
+ });
15
+ async function getMediaUsageActivationStatus(db) {
16
+ const activation = await db.selectFrom("_emdash_media_usage_activation").select([
17
+ "state",
18
+ "runtime_generation",
19
+ "collection_cursor",
20
+ "drain_confirmed_at",
21
+ "lease_expires_at",
22
+ "attempt_count",
23
+ "last_attempted_at",
24
+ "last_error_code",
25
+ "activated_at",
26
+ "updated_at"
27
+ ]).where("task_key", "=", ACTIVATION_KEY).executeTakeFirstOrThrow();
28
+ assertRuntimeGeneration(activation);
29
+ if (activation.state !== "expanded" && activation.state !== "activating" && activation.state !== "active") throw new Error("Invalid media usage activation state");
30
+ if (!Number.isInteger(activation.attempt_count) || activation.attempt_count < 0) throw new Error("Invalid media usage activation attempt count");
31
+ return {
32
+ state: activation.state,
33
+ collectionCursor: activation.collection_cursor,
34
+ attemptCount: activation.attempt_count,
35
+ drainConfirmedAt: activation.drain_confirmed_at,
36
+ lastAttemptedAt: activation.last_attempted_at,
37
+ lastErrorCode: activation.last_error_code === null ? null : ACTIVATION_ERROR_CODE,
38
+ leaseExpiresAt: activation.lease_expires_at,
39
+ activatedAt: activation.activated_at,
40
+ updatedAt: activation.updated_at
41
+ };
42
+ }
43
+ async function canResumeMediaUsageCollectionCapture(db, identity) {
44
+ return await findResumableMediaUsageCollectionCaptureId(db, identity) === identity.collectionId;
45
+ }
46
+ async function findResumableMediaUsageCollectionCaptureId(db, identity) {
47
+ const activation = await findActivationIfAvailable(db);
48
+ if (!activation) return null;
49
+ assertRuntimeGeneration(activation);
50
+ if (activation.state !== "active") return null;
51
+ const lifecycle = await db.selectFrom("_emdash_media_usage_index_status").select(["collection_id", "cursor"]).where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", identity.collectionSlug).where("capture_state", "in", ["installing", "ready"]).executeTakeFirst();
52
+ if (!lifecycle?.collection_id) return null;
53
+ if (identity.creationFingerprint ? lifecycle.cursor !== identity.creationFingerprint : lifecycle.cursor !== null) return null;
54
+ return lifecycle.collection_id;
55
+ }
56
+ async function prepareMediaUsageCollectionCapture(db, input) {
57
+ const activation = await findActivationIfAvailable(db);
58
+ if (!activation) return {
59
+ captureRequired: false,
60
+ collectionId: input.collectionId,
61
+ registrationExists: input.registeredCollectionId !== void 0,
62
+ resuming: false
63
+ };
64
+ assertRuntimeGeneration(activation);
65
+ if (activation.state !== "active") return {
66
+ captureRequired: false,
67
+ collectionId: input.collectionId,
68
+ registrationExists: input.registeredCollectionId !== void 0,
69
+ resuming: false
70
+ };
71
+ const existing = await db.selectFrom("_emdash_media_usage_index_status").select([
72
+ "collection_id",
73
+ "capture_state",
74
+ "cursor"
75
+ ]).where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", input.collectionSlug).executeTakeFirst();
76
+ if (existing) {
77
+ if (existing.collection_id && (existing.capture_state === "installing" || existing.capture_state === "ready") && (input.creationFingerprint ? existing.cursor === input.creationFingerprint : existing.cursor === null) && (input.registeredCollectionId === void 0 || input.registeredCollectionId === existing.collection_id)) return {
78
+ captureRequired: true,
79
+ collectionId: existing.collection_id,
80
+ registrationExists: input.registeredCollectionId !== void 0,
81
+ resuming: true
82
+ };
83
+ throw new Error("Media usage collection lifecycle identity conflict");
84
+ }
85
+ if (input.registeredCollectionId !== void 0) throw new Error("Media usage collection lifecycle is missing");
86
+ await db.insertInto("_emdash_media_usage_index_status").values({
87
+ adapter_id: "content-media",
88
+ scope_type: "collection",
89
+ scope_key: input.collectionSlug,
90
+ status: "never",
91
+ collection_id: input.collectionId,
92
+ reconciliation_required: 1,
93
+ capture_state: "installing",
94
+ cursor: input.creationFingerprint ?? null,
95
+ updated_at: timestampOffset(db, 0)
96
+ }).execute();
97
+ return {
98
+ captureRequired: true,
99
+ collectionId: input.collectionId,
100
+ registrationExists: false,
101
+ resuming: false
102
+ };
103
+ }
104
+ async function installPreparedMediaUsageCollectionCapture(db, identity) {
105
+ await installMediaUsageCaptureTriggers(db, identity, { replaceExisting: false });
106
+ if (!await verifyMediaUsageCaptureTriggers(db, identity)) throw new Error("Media usage capture trigger verification failed");
107
+ }
108
+ async function markMediaUsageCollectionCaptureReady(db, identity) {
109
+ const result = await db.updateTable("_emdash_media_usage_index_status").set({
110
+ capture_state: "ready",
111
+ updated_at: timestampOffset(db, 0)
112
+ }).where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", identity.collectionSlug).where("collection_id", "=", identity.collectionId).where("capture_state", "in", ["installing", "ready"]).where(sql`EXISTS (
113
+ SELECT 1 FROM _emdash_media_usage_activation AS activation
114
+ WHERE activation.task_key = ${ACTIVATION_KEY}
115
+ AND activation.state = 'active'
116
+ AND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}
117
+ )`).executeTakeFirst();
118
+ if (Number(result.numUpdatedRows ?? 0) === 0) throw new Error("Media usage collection readiness lost its fence");
119
+ }
120
+ async function finalizeMediaUsageCollectionCapture(db, identity) {
121
+ const result = await db.updateTable("_emdash_media_usage_index_status").set({
122
+ capture_state: "active",
123
+ cursor: null,
124
+ updated_at: timestampOffset(db, 0)
125
+ }).where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", identity.collectionSlug).where("collection_id", "=", identity.collectionId).where("capture_state", "=", "ready").where(sql`EXISTS (
126
+ SELECT 1 FROM _emdash_collections AS collection
127
+ WHERE collection.id = ${identity.collectionId}
128
+ AND collection.slug = ${identity.collectionSlug}
129
+ )`).where(sql`EXISTS (
130
+ SELECT 1 FROM _emdash_media_usage_activation AS activation
131
+ WHERE activation.task_key = ${ACTIVATION_KEY}
132
+ AND activation.state = 'active'
133
+ AND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}
134
+ )`).executeTakeFirst();
135
+ if (Number(result.numUpdatedRows ?? 0) === 0) throw new Error("Media usage collection activation lost its fence");
136
+ }
137
+ async function activateMediaUsageCapture(db, input) {
138
+ if (input.writersDrained !== true) throw new Error("Media usage activation requires confirmation that writers are drained");
139
+ return advanceMediaUsageActivation(db, "confirmed");
140
+ }
141
+ async function continueMediaUsageActivation(db) {
142
+ return advanceMediaUsageActivation(db, "background");
143
+ }
144
+ async function advanceMediaUsageActivation(db, mode) {
145
+ const before = await findActivation(db);
146
+ assertRuntimeGeneration(before);
147
+ if (before.state === "active") return {
148
+ outcome: "active",
149
+ processedCollections: 0
150
+ };
151
+ if (mode === "background") {
152
+ if (before.state === "expanded" || before.drain_confirmed_at === null) return { outcome: "inactive" };
153
+ if (before.state !== "activating") throw new Error("Invalid media usage activation state");
154
+ if (before.last_error_code !== null) return { outcome: "failed" };
155
+ }
156
+ const leaseToken = ulid();
157
+ const lease = await claimActivation(db, leaseToken, mode);
158
+ if (!lease) return activationClaimLoss(db, mode);
159
+ let processedCollections = 0;
160
+ try {
161
+ const candidates = await findActivationCandidates(db, lease.collection_cursor);
162
+ for (const collection of candidates.slice(0, MEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall)) {
163
+ await requireActivationLease(db, leaseToken);
164
+ await prepareCollectionForActivation(db, collection, leaseToken);
165
+ await requireActivationLease(db, leaseToken);
166
+ await installMediaUsageCaptureTriggers(db, {
167
+ collectionId: collection.id,
168
+ collectionSlug: collection.slug
169
+ }, { replaceExisting: false });
170
+ await requireActivationLease(db, leaseToken);
171
+ if (!await verifyMediaUsageCaptureTriggers(db, {
172
+ collectionId: collection.id,
173
+ collectionSlug: collection.slug
174
+ })) throw new Error("Media usage capture trigger verification failed");
175
+ if (!await activateCollectionLifecycle(db, collection, leaseToken)) throw new Error("Media usage collection activation lost its fence");
176
+ processedCollections++;
177
+ }
178
+ const collectionCursor = candidates[Math.min(processedCollections, candidates.length) - 1]?.slug ?? lease.collection_cursor;
179
+ if (candidates.length > MEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall) {
180
+ if (!await releaseActivationBatch(db, leaseToken, collectionCursor)) throw new Error("Media usage activation cursor lost its fence");
181
+ return {
182
+ outcome: "activating",
183
+ processedCollections,
184
+ collectionCursor
185
+ };
186
+ }
187
+ if (await findIncompleteCollection(db)) {
188
+ if (!await releaseActivationBatch(db, leaseToken, null)) throw new Error("Media usage activation restart lost its fence");
189
+ return {
190
+ outcome: "activating",
191
+ processedCollections,
192
+ collectionCursor: null
193
+ };
194
+ }
195
+ if (!await finalizeActivation(db, leaseToken, collectionCursor)) throw new Error("Media usage activation finalization lost its fence");
196
+ return {
197
+ outcome: "active",
198
+ processedCollections
199
+ };
200
+ } catch (error) {
201
+ if (!await activationLeaseIsLive(db, leaseToken)) return {
202
+ outcome: "conflict",
203
+ processedCollections
204
+ };
205
+ await recordActivationFailure(db, leaseToken);
206
+ throw new Error("Media usage activation failed", { cause: error });
207
+ }
208
+ }
209
+ async function findActivation(db) {
210
+ return db.selectFrom("_emdash_media_usage_activation").selectAll().where("task_key", "=", ACTIVATION_KEY).executeTakeFirstOrThrow();
211
+ }
212
+ async function findActivationIfAvailable(db) {
213
+ if (!await tableExists(db, "_emdash_media_usage_activation")) return null;
214
+ return findActivation(db);
215
+ }
216
+ function assertRuntimeGeneration(activation) {
217
+ if (activation.runtime_generation !== MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION) throw new MediaUsageActivationVersionMismatchError("Media usage activation runtime generation mismatch");
218
+ }
219
+ async function claimActivation(db, leaseToken, mode) {
220
+ const now = timestampOffset(db, 0);
221
+ const claimValues = {
222
+ lease_token: leaseToken,
223
+ lease_expires_at: timestampOffset(db, MEDIA_USAGE_ACTIVATION_LIMITS.leaseDurationSeconds),
224
+ attempt_count: sql`attempt_count + 1`,
225
+ last_attempted_at: now,
226
+ updated_at: now
227
+ };
228
+ let claim = db.updateTable("_emdash_media_usage_activation").set(mode === "confirmed" ? {
229
+ ...claimValues,
230
+ state: "activating",
231
+ drain_confirmed_at: now,
232
+ last_error_code: null
233
+ } : claimValues).where("task_key", "=", ACTIVATION_KEY).where("runtime_generation", "=", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION);
234
+ if (mode === "confirmed") claim = claim.where((eb) => eb.or([eb("state", "=", "expanded"), eb.and([eb("state", "=", "activating"), eb.or([eb("lease_token", "is", null), eb.and([eb("lease_expires_at", "is not", null), timestampIsDue(db, "lease_expires_at")])])])]));
235
+ else claim = claim.where("state", "=", "activating").where("drain_confirmed_at", "is not", null).where("last_error_code", "is", null).where((eb) => eb.or([eb("lease_token", "is", null), eb.and([eb("lease_expires_at", "is not", null), timestampIsDue(db, "lease_expires_at")])]));
236
+ return await claim.returningAll().executeTakeFirst() ?? null;
237
+ }
238
+ async function activationClaimLoss(db, mode) {
239
+ const current = await findActivation(db);
240
+ assertRuntimeGeneration(current);
241
+ if (current.state === "active") return {
242
+ outcome: "active",
243
+ processedCollections: 0
244
+ };
245
+ if (mode === "background") {
246
+ if (current.state === "expanded" || current.drain_confirmed_at === null) return { outcome: "inactive" };
247
+ if (current.state === "activating" && current.last_error_code !== null) return { outcome: "failed" };
248
+ }
249
+ if (current.state === "activating" && current.lease_token && current.lease_expires_at && await activationLeaseIsLive(db, current.lease_token)) return {
250
+ outcome: "lease_active",
251
+ leaseExpiresAt: current.lease_expires_at
252
+ };
253
+ if (mode === "background" && current.state === "activating") return {
254
+ outcome: "conflict",
255
+ processedCollections: 0
256
+ };
257
+ throw new Error("Media usage activation state is not claimable");
258
+ }
259
+ async function activationLeaseIsLive(db, leaseToken) {
260
+ return await db.selectFrom("_emdash_media_usage_activation").select("task_key").where("task_key", "=", ACTIVATION_KEY).where("state", "=", "activating").where("runtime_generation", "=", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION).where("lease_token", "=", leaseToken).where("lease_expires_at", "is not", null).where(timestampIsLive(db, "lease_expires_at")).executeTakeFirst() !== void 0;
261
+ }
262
+ async function findActivationCandidates(db, collectionCursor) {
263
+ let query = db.selectFrom("_emdash_collections").select(["id", "slug"]);
264
+ if (collectionCursor) query = query.where("slug", ">", collectionCursor);
265
+ return query.orderBy("slug", "asc").limit(MEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall + 1).execute();
266
+ }
267
+ async function prepareCollectionForActivation(db, collection, leaseToken) {
268
+ const now = timestampOffset(db, 0);
269
+ const existingStatus = sql.ref("_emdash_media_usage_index_status.status");
270
+ const existingCompletedAt = sql.ref("_emdash_media_usage_index_status.completed_at");
271
+ const existingCollectionId = sql.ref("_emdash_media_usage_index_status.collection_id");
272
+ const existingCaptureState = sql.ref("_emdash_media_usage_index_status.capture_state");
273
+ if ((await db.insertInto("_emdash_media_usage_index_status").values({
274
+ adapter_id: "content-media",
275
+ scope_type: "collection",
276
+ scope_key: collection.slug,
277
+ status: "never",
278
+ collection_id: collection.id,
279
+ reconciliation_required: 1,
280
+ capture_state: "installing",
281
+ updated_at: now
282
+ }).onConflict((conflict) => conflict.columns([
283
+ "adapter_id",
284
+ "scope_type",
285
+ "scope_key"
286
+ ]).doUpdateSet({
287
+ status: sql`CASE WHEN ${existingStatus} IN ('complete', 'running') THEN 'stale' ELSE ${existingStatus} END`,
288
+ completed_at: sql`CASE WHEN ${existingStatus} IN ('complete', 'running') THEN NULL ELSE ${existingCompletedAt} END`,
289
+ cursor: null,
290
+ collection_id: collection.id,
291
+ reconciliation_required: 1,
292
+ capture_state: "installing",
293
+ updated_at: now
294
+ }).where((eb) => eb.and([
295
+ eb.or([eb(existingCollectionId, "is", null), eb(existingCollectionId, "=", collection.id)]),
296
+ eb.or([eb(existingCaptureState, "is", null), eb(existingCaptureState, "!=", "deleting")]),
297
+ activeActivationLease(db, leaseToken)
298
+ ]))).returning("collection_id").executeTakeFirst())?.collection_id !== collection.id) throw new Error("Media usage collection lifecycle identity conflict");
299
+ }
300
+ async function requireActivationLease(db, leaseToken) {
301
+ if (!await activationLeaseIsLive(db, leaseToken)) throw new Error("Media usage activation lease is no longer live");
302
+ }
303
+ async function activateCollectionLifecycle(db, collection, leaseToken) {
304
+ const result = await db.updateTable("_emdash_media_usage_index_status").set({
305
+ capture_state: "active",
306
+ updated_at: timestampOffset(db, 0)
307
+ }).where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", collection.slug).where("collection_id", "=", collection.id).where("capture_state", "=", "installing").where(sql`EXISTS (
308
+ SELECT 1 FROM _emdash_collections AS collection
309
+ WHERE collection.id = ${collection.id}
310
+ AND collection.slug = ${collection.slug}
311
+ )`).where(activeActivationLease(db, leaseToken)).executeTakeFirst();
312
+ return Number(result.numUpdatedRows ?? 0) > 0;
313
+ }
314
+ async function releaseActivationBatch(db, leaseToken, collectionCursor) {
315
+ const result = await db.updateTable("_emdash_media_usage_activation").set({
316
+ collection_cursor: collectionCursor,
317
+ lease_token: null,
318
+ lease_expires_at: null,
319
+ updated_at: timestampOffset(db, 0)
320
+ }).where("task_key", "=", ACTIVATION_KEY).where("state", "=", "activating").where("runtime_generation", "=", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION).where("lease_token", "=", leaseToken).where("lease_expires_at", "is not", null).where(timestampIsLive(db, "lease_expires_at")).executeTakeFirst();
321
+ return Number(result.numUpdatedRows ?? 0) > 0;
322
+ }
323
+ async function findIncompleteCollection(db) {
324
+ return await db.selectFrom("_emdash_collections as collection").select(["collection.id", "collection.slug"]).where((eb) => eb.not(eb.exists(eb.selectFrom("_emdash_media_usage_index_status as status").select("status.scope_key").where("status.adapter_id", "=", "content-media").where("status.scope_type", "=", "collection").whereRef("status.scope_key", "=", "collection.slug").whereRef("status.collection_id", "=", "collection.id").where("status.capture_state", "=", "active")))).orderBy("collection.slug", "asc").limit(1).executeTakeFirst() ?? null;
325
+ }
326
+ async function finalizeActivation(db, leaseToken, collectionCursor) {
327
+ const now = timestampOffset(db, 0);
328
+ const result = await db.updateTable("_emdash_media_usage_activation").set({
329
+ state: "active",
330
+ collection_cursor: collectionCursor,
331
+ lease_token: null,
332
+ lease_expires_at: null,
333
+ last_error_code: null,
334
+ activated_at: now,
335
+ updated_at: now
336
+ }).where("task_key", "=", ACTIVATION_KEY).where("state", "=", "activating").where("runtime_generation", "=", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION).where("lease_token", "=", leaseToken).where("lease_expires_at", "is not", null).where(timestampIsLive(db, "lease_expires_at")).where(sql`NOT EXISTS (
337
+ SELECT 1
338
+ FROM _emdash_collections AS collection
339
+ WHERE NOT EXISTS (
340
+ SELECT 1
341
+ FROM _emdash_media_usage_index_status AS status
342
+ WHERE status.adapter_id = 'content-media'
343
+ AND status.scope_type = 'collection'
344
+ AND status.scope_key = collection.slug
345
+ AND status.collection_id = collection.id
346
+ AND status.capture_state = 'active'
347
+ )
348
+ )`).executeTakeFirst();
349
+ return Number(result.numUpdatedRows ?? 0) > 0;
350
+ }
351
+ async function recordActivationFailure(db, leaseToken) {
352
+ await db.updateTable("_emdash_media_usage_activation").set({
353
+ lease_token: null,
354
+ lease_expires_at: null,
355
+ last_error_code: ACTIVATION_ERROR_CODE,
356
+ updated_at: timestampOffset(db, 0)
357
+ }).where("task_key", "=", ACTIVATION_KEY).where("state", "=", "activating").where("runtime_generation", "=", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION).where("lease_token", "=", leaseToken).execute();
358
+ }
359
+ function activeActivationLease(db, leaseToken) {
360
+ return sql`EXISTS (
361
+ SELECT 1
362
+ FROM _emdash_media_usage_activation AS activation
363
+ WHERE activation.task_key = ${ACTIVATION_KEY}
364
+ AND activation.state = 'activating'
365
+ AND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}
366
+ AND activation.lease_token = ${leaseToken}
367
+ AND activation.lease_expires_at IS NOT NULL
368
+ AND ${timestampIsLive(db, "activation.lease_expires_at")}
369
+ )`;
370
+ }
371
+ function timestampIsDue(db, column) {
372
+ return isPostgres(db) ? sql`${sql.ref(column)}::timestamptz <= clock_timestamp()` : sql`${sql.ref(column)} <= strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;
373
+ }
374
+ function timestampIsLive(db, column) {
375
+ return isPostgres(db) ? sql`${sql.ref(column)}::timestamptz > clock_timestamp()` : sql`${sql.ref(column)} > strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;
376
+ }
377
+ function timestampOffset(db, seconds) {
378
+ if (isPostgres(db)) return sql`to_char(
379
+ clock_timestamp() AT TIME ZONE 'UTC' + (${seconds} * interval '1 second'),
380
+ 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
381
+ )`;
382
+ return sql`strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ${`+${seconds} seconds`})`;
383
+ }
384
+
385
+ //#endregion
386
+ export { continueMediaUsageActivation as a, getMediaUsageActivationStatus as c, prepareMediaUsageCollectionCapture as d, canResumeMediaUsageCollectionCapture as i, installPreparedMediaUsageCollectionCapture as l, MediaUsageActivationVersionMismatchError as n, finalizeMediaUsageCollectionCapture as o, activateMediaUsageCapture as r, findResumableMediaUsageCollectionCaptureId as s, MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION as t, markMediaUsageCollectionCaptureReady as u };
387
+ //# sourceMappingURL=activation-xomsCMJg.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-xomsCMJg.mjs","names":[],"sources":["../src/media/usage/activation.ts"],"sourcesContent":["import { sql, type Kysely, type RawBuilder, type Selectable } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport { isPostgres, tableExists } from \"../../database/dialect-helpers.js\";\nimport type { Database, MediaUsageActivationTable } from \"../../database/types.js\";\nimport {\n\tinstallMediaUsageCaptureTriggers,\n\tverifyMediaUsageCaptureTriggers,\n} from \"./capture-triggers.js\";\n\nconst ACTIVATION_KEY = \"incremental_capture\";\nconst ACTIVATION_ERROR_CODE = \"MEDIA_USAGE_ACTIVATION_FAILED\";\nexport const MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION = 1;\n\nexport class MediaUsageActivationVersionMismatchError extends Error {}\n\nexport interface MediaUsageActivationStatus {\n\tstate: \"expanded\" | \"activating\" | \"active\";\n\tcollectionCursor: string | null;\n\tattemptCount: number;\n\tdrainConfirmedAt: string | null;\n\tlastAttemptedAt: string | null;\n\tlastErrorCode: \"MEDIA_USAGE_ACTIVATION_FAILED\" | null;\n\tleaseExpiresAt: string | null;\n\tactivatedAt: string | null;\n\tupdatedAt: string;\n}\n\nexport const MEDIA_USAGE_ACTIVATION_LIMITS = Object.freeze({\n\tcollectionsPerCall: 1,\n\tleaseDurationSeconds: 5 * 60,\n});\n\nexport type MediaUsageActivationResult =\n\t| { outcome: \"active\"; processedCollections: number }\n\t| {\n\t\t\toutcome: \"activating\";\n\t\t\tprocessedCollections: number;\n\t\t\tcollectionCursor: string | null;\n\t }\n\t| { outcome: \"lease_active\"; leaseExpiresAt: string }\n\t| { outcome: \"conflict\"; processedCollections: number };\n\nexport type MediaUsageActivationContinuationResult =\n\t| MediaUsageActivationResult\n\t| { outcome: \"inactive\" | \"failed\" };\n\ntype MediaUsageActivationClaimMode = \"confirmed\" | \"background\";\n\nexport interface MediaUsageCollectionCapturePreparation {\n\tcaptureRequired: boolean;\n\tcollectionId: string;\n\tregistrationExists: boolean;\n\tresuming: boolean;\n}\n\nexport async function getMediaUsageActivationStatus(\n\tdb: Kysely<Database>,\n): Promise<MediaUsageActivationStatus> {\n\tconst activation = await db\n\t\t.selectFrom(\"_emdash_media_usage_activation\")\n\t\t.select([\n\t\t\t\"state\",\n\t\t\t\"runtime_generation\",\n\t\t\t\"collection_cursor\",\n\t\t\t\"drain_confirmed_at\",\n\t\t\t\"lease_expires_at\",\n\t\t\t\"attempt_count\",\n\t\t\t\"last_attempted_at\",\n\t\t\t\"last_error_code\",\n\t\t\t\"activated_at\",\n\t\t\t\"updated_at\",\n\t\t])\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.executeTakeFirstOrThrow();\n\tassertRuntimeGeneration(activation);\n\tif (\n\t\tactivation.state !== \"expanded\" &&\n\t\tactivation.state !== \"activating\" &&\n\t\tactivation.state !== \"active\"\n\t) {\n\t\tthrow new Error(\"Invalid media usage activation state\");\n\t}\n\tif (!Number.isInteger(activation.attempt_count) || activation.attempt_count < 0) {\n\t\tthrow new Error(\"Invalid media usage activation attempt count\");\n\t}\n\n\treturn {\n\t\tstate: activation.state,\n\t\tcollectionCursor: activation.collection_cursor,\n\t\tattemptCount: activation.attempt_count,\n\t\tdrainConfirmedAt: activation.drain_confirmed_at,\n\t\tlastAttemptedAt: activation.last_attempted_at,\n\t\tlastErrorCode: activation.last_error_code === null ? null : ACTIVATION_ERROR_CODE,\n\t\tleaseExpiresAt: activation.lease_expires_at,\n\t\tactivatedAt: activation.activated_at,\n\t\tupdatedAt: activation.updated_at,\n\t};\n}\n\nexport async function canResumeMediaUsageCollectionCapture(\n\tdb: Kysely<Database>,\n\tidentity: { collectionId: string; collectionSlug: string; creationFingerprint?: string },\n): Promise<boolean> {\n\treturn (await findResumableMediaUsageCollectionCaptureId(db, identity)) === identity.collectionId;\n}\n\nexport async function findResumableMediaUsageCollectionCaptureId(\n\tdb: Kysely<Database>,\n\tidentity: { collectionSlug: string; creationFingerprint?: string },\n): Promise<string | null> {\n\tconst activation = await findActivationIfAvailable(db);\n\tif (!activation) return null;\n\tassertRuntimeGeneration(activation);\n\tif (activation.state !== \"active\") return null;\n\n\tconst lifecycle = await db\n\t\t.selectFrom(\"_emdash_media_usage_index_status\")\n\t\t.select([\"collection_id\", \"cursor\"])\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(\"capture_state\", \"in\", [\"installing\", \"ready\"])\n\t\t.executeTakeFirst();\n\tif (!lifecycle?.collection_id) return null;\n\tif (\n\t\tidentity.creationFingerprint\n\t\t\t? lifecycle.cursor !== identity.creationFingerprint\n\t\t\t: lifecycle.cursor !== null\n\t) {\n\t\treturn null;\n\t}\n\treturn lifecycle.collection_id;\n}\n\nexport async function prepareMediaUsageCollectionCapture(\n\tdb: Kysely<Database>,\n\tinput: {\n\t\tcollectionId: string;\n\t\tcollectionSlug: string;\n\t\tcreationFingerprint?: string;\n\t\tregisteredCollectionId?: string;\n\t},\n): Promise<MediaUsageCollectionCapturePreparation> {\n\tconst activation = await findActivationIfAvailable(db);\n\tif (!activation) {\n\t\treturn {\n\t\t\tcaptureRequired: false,\n\t\t\tcollectionId: input.collectionId,\n\t\t\tregistrationExists: input.registeredCollectionId !== undefined,\n\t\t\tresuming: false,\n\t\t};\n\t}\n\tassertRuntimeGeneration(activation);\n\tif (activation.state !== \"active\") {\n\t\treturn {\n\t\t\tcaptureRequired: false,\n\t\t\tcollectionId: input.collectionId,\n\t\t\tregistrationExists: input.registeredCollectionId !== undefined,\n\t\t\tresuming: false,\n\t\t};\n\t}\n\n\tconst existing = await db\n\t\t.selectFrom(\"_emdash_media_usage_index_status\")\n\t\t.select([\"collection_id\", \"capture_state\", \"cursor\"])\n\t\t.where(\"adapter_id\", \"=\", \"content-media\")\n\t\t.where(\"scope_type\", \"=\", \"collection\")\n\t\t.where(\"scope_key\", \"=\", input.collectionSlug)\n\t\t.executeTakeFirst();\n\tif (existing) {\n\t\tif (\n\t\t\texisting.collection_id &&\n\t\t\t(existing.capture_state === \"installing\" || existing.capture_state === \"ready\") &&\n\t\t\t(input.creationFingerprint\n\t\t\t\t? existing.cursor === input.creationFingerprint\n\t\t\t\t: existing.cursor === null) &&\n\t\t\t(input.registeredCollectionId === undefined ||\n\t\t\t\tinput.registeredCollectionId === existing.collection_id)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tcaptureRequired: true,\n\t\t\t\tcollectionId: existing.collection_id,\n\t\t\t\tregistrationExists: input.registeredCollectionId !== undefined,\n\t\t\t\tresuming: true,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(\"Media usage collection lifecycle identity conflict\");\n\t}\n\tif (input.registeredCollectionId !== undefined) {\n\t\tthrow new Error(\"Media usage collection lifecycle is missing\");\n\t}\n\n\tawait db\n\t\t.insertInto(\"_emdash_media_usage_index_status\")\n\t\t.values({\n\t\t\tadapter_id: \"content-media\",\n\t\t\tscope_type: \"collection\",\n\t\t\tscope_key: input.collectionSlug,\n\t\t\tstatus: \"never\",\n\t\t\tcollection_id: input.collectionId,\n\t\t\treconciliation_required: 1,\n\t\t\tcapture_state: \"installing\",\n\t\t\tcursor: input.creationFingerprint ?? null,\n\t\t\tupdated_at: timestampOffset(db, 0),\n\t\t})\n\t\t.execute();\n\treturn {\n\t\tcaptureRequired: true,\n\t\tcollectionId: input.collectionId,\n\t\tregistrationExists: false,\n\t\tresuming: false,\n\t};\n}\n\nexport async function installPreparedMediaUsageCollectionCapture(\n\tdb: Kysely<Database>,\n\tidentity: { collectionId: string; collectionSlug: string },\n): Promise<void> {\n\tawait installMediaUsageCaptureTriggers(db, identity, { replaceExisting: false });\n\tif (!(await verifyMediaUsageCaptureTriggers(db, identity))) {\n\t\tthrow new Error(\"Media usage capture trigger verification failed\");\n\t}\n}\n\nexport async function markMediaUsageCollectionCaptureReady(\n\tdb: Kysely<Database>,\n\tidentity: { collectionId: string; collectionSlug: string },\n): Promise<void> {\n\tconst result = await db\n\t\t.updateTable(\"_emdash_media_usage_index_status\")\n\t\t.set({ capture_state: \"ready\", updated_at: timestampOffset(db, 0) })\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.where(\"capture_state\", \"in\", [\"installing\", \"ready\"])\n\t\t.where(\n\t\t\tsql<boolean>`EXISTS (\n\t\t\t\tSELECT 1 FROM _emdash_media_usage_activation AS activation\n\t\t\t\tWHERE activation.task_key = ${ACTIVATION_KEY}\n\t\t\t\t\tAND activation.state = 'active'\n\t\t\t\t\tAND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}\n\t\t\t)`,\n\t\t)\n\t\t.executeTakeFirst();\n\tif (Number(result.numUpdatedRows ?? 0) === 0) {\n\t\tthrow new Error(\"Media usage collection readiness lost its fence\");\n\t}\n}\n\nexport async function finalizeMediaUsageCollectionCapture(\n\tdb: Kysely<Database>,\n\tidentity: { collectionId: string; collectionSlug: string },\n): Promise<void> {\n\tconst result = await db\n\t\t.updateTable(\"_emdash_media_usage_index_status\")\n\t\t.set({ capture_state: \"active\", cursor: null, updated_at: timestampOffset(db, 0) })\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.where(\"capture_state\", \"=\", \"ready\")\n\t\t.where(\n\t\t\tsql<boolean>`EXISTS (\n\t\t\t\tSELECT 1 FROM _emdash_collections AS collection\n\t\t\t\tWHERE collection.id = ${identity.collectionId}\n\t\t\t\t\tAND collection.slug = ${identity.collectionSlug}\n\t\t\t)`,\n\t\t)\n\t\t.where(\n\t\t\tsql<boolean>`EXISTS (\n\t\t\t\tSELECT 1 FROM _emdash_media_usage_activation AS activation\n\t\t\t\tWHERE activation.task_key = ${ACTIVATION_KEY}\n\t\t\t\t\tAND activation.state = 'active'\n\t\t\t\t\tAND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}\n\t\t\t)`,\n\t\t)\n\t\t.executeTakeFirst();\n\tif (Number(result.numUpdatedRows ?? 0) === 0) {\n\t\tthrow new Error(\"Media usage collection activation lost its fence\");\n\t}\n}\n\nexport async function activateMediaUsageCapture(\n\tdb: Kysely<Database>,\n\tinput: { writersDrained: true },\n): Promise<MediaUsageActivationResult> {\n\tif (input.writersDrained !== true) {\n\t\tthrow new Error(\"Media usage activation requires confirmation that writers are drained\");\n\t}\n\treturn advanceMediaUsageActivation(db, \"confirmed\");\n}\n\nexport async function continueMediaUsageActivation(\n\tdb: Kysely<Database>,\n): Promise<MediaUsageActivationContinuationResult> {\n\treturn advanceMediaUsageActivation(db, \"background\");\n}\n\nasync function advanceMediaUsageActivation(\n\tdb: Kysely<Database>,\n\tmode: \"confirmed\",\n): Promise<MediaUsageActivationResult>;\nasync function advanceMediaUsageActivation(\n\tdb: Kysely<Database>,\n\tmode: \"background\",\n): Promise<MediaUsageActivationContinuationResult>;\nasync function advanceMediaUsageActivation(\n\tdb: Kysely<Database>,\n\tmode: MediaUsageActivationClaimMode,\n): Promise<MediaUsageActivationContinuationResult> {\n\tconst before = await findActivation(db);\n\tassertRuntimeGeneration(before);\n\tif (before.state === \"active\") {\n\t\treturn { outcome: \"active\", processedCollections: 0 };\n\t}\n\tif (mode === \"background\") {\n\t\tif (before.state === \"expanded\" || before.drain_confirmed_at === null) {\n\t\t\treturn { outcome: \"inactive\" };\n\t\t}\n\t\tif (before.state !== \"activating\") {\n\t\t\tthrow new Error(\"Invalid media usage activation state\");\n\t\t}\n\t\tif (before.last_error_code !== null) return { outcome: \"failed\" };\n\t}\n\n\tconst leaseToken = ulid();\n\tconst lease = await claimActivation(db, leaseToken, mode);\n\tif (!lease) return activationClaimLoss(db, mode);\n\n\tlet processedCollections = 0;\n\ttry {\n\t\tconst candidates = await findActivationCandidates(db, lease.collection_cursor);\n\t\tfor (const collection of candidates.slice(\n\t\t\t0,\n\t\t\tMEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall,\n\t\t)) {\n\t\t\tawait requireActivationLease(db, leaseToken);\n\t\t\tawait prepareCollectionForActivation(db, collection, leaseToken);\n\t\t\tawait requireActivationLease(db, leaseToken);\n\t\t\tawait installMediaUsageCaptureTriggers(\n\t\t\t\tdb,\n\t\t\t\t{\n\t\t\t\t\tcollectionId: collection.id,\n\t\t\t\t\tcollectionSlug: collection.slug,\n\t\t\t\t},\n\t\t\t\t{ replaceExisting: false },\n\t\t\t);\n\t\t\tawait requireActivationLease(db, leaseToken);\n\t\t\tif (\n\t\t\t\t!(await verifyMediaUsageCaptureTriggers(db, {\n\t\t\t\t\tcollectionId: collection.id,\n\t\t\t\t\tcollectionSlug: collection.slug,\n\t\t\t\t}))\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Media usage capture trigger verification failed\");\n\t\t\t}\n\t\t\tif (!(await activateCollectionLifecycle(db, collection, leaseToken))) {\n\t\t\t\tthrow new Error(\"Media usage collection activation lost its fence\");\n\t\t\t}\n\t\t\tprocessedCollections++;\n\t\t}\n\n\t\tconst collectionCursor =\n\t\t\tcandidates[Math.min(processedCollections, candidates.length) - 1]?.slug ??\n\t\t\tlease.collection_cursor;\n\t\tif (candidates.length > MEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall) {\n\t\t\tif (!(await releaseActivationBatch(db, leaseToken, collectionCursor))) {\n\t\t\t\tthrow new Error(\"Media usage activation cursor lost its fence\");\n\t\t\t}\n\t\t\treturn { outcome: \"activating\", processedCollections, collectionCursor };\n\t\t}\n\n\t\tconst incomplete = await findIncompleteCollection(db);\n\t\tif (incomplete) {\n\t\t\tif (!(await releaseActivationBatch(db, leaseToken, null))) {\n\t\t\t\tthrow new Error(\"Media usage activation restart lost its fence\");\n\t\t\t}\n\t\t\treturn { outcome: \"activating\", processedCollections, collectionCursor: null };\n\t\t}\n\n\t\tif (!(await finalizeActivation(db, leaseToken, collectionCursor))) {\n\t\t\tthrow new Error(\"Media usage activation finalization lost its fence\");\n\t\t}\n\t\treturn { outcome: \"active\", processedCollections };\n\t} catch (error) {\n\t\tif (!(await activationLeaseIsLive(db, leaseToken))) {\n\t\t\treturn { outcome: \"conflict\", processedCollections };\n\t\t}\n\t\tawait recordActivationFailure(db, leaseToken);\n\t\tthrow new Error(\"Media usage activation failed\", { cause: error });\n\t}\n}\n\nasync function findActivation(\n\tdb: Kysely<Database>,\n): Promise<Selectable<MediaUsageActivationTable>> {\n\treturn db\n\t\t.selectFrom(\"_emdash_media_usage_activation\")\n\t\t.selectAll()\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.executeTakeFirstOrThrow();\n}\n\nasync function findActivationIfAvailable(\n\tdb: Kysely<Database>,\n): Promise<Selectable<MediaUsageActivationTable> | null> {\n\tif (!(await tableExists(db, \"_emdash_media_usage_activation\"))) return null;\n\treturn findActivation(db);\n}\n\nfunction assertRuntimeGeneration(activation: { runtime_generation: number }): void {\n\tif (activation.runtime_generation !== MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION) {\n\t\tthrow new MediaUsageActivationVersionMismatchError(\n\t\t\t\"Media usage activation runtime generation mismatch\",\n\t\t);\n\t}\n}\n\nasync function claimActivation(\n\tdb: Kysely<Database>,\n\tleaseToken: string,\n\tmode: MediaUsageActivationClaimMode,\n): Promise<Selectable<MediaUsageActivationTable> | null> {\n\tconst now = timestampOffset(db, 0);\n\tconst claimValues = {\n\t\tlease_token: leaseToken,\n\t\tlease_expires_at: timestampOffset(db, MEDIA_USAGE_ACTIVATION_LIMITS.leaseDurationSeconds),\n\t\tattempt_count: sql<number>`attempt_count + 1`,\n\t\tlast_attempted_at: now,\n\t\tupdated_at: now,\n\t};\n\tlet claim = db\n\t\t.updateTable(\"_emdash_media_usage_activation\")\n\t\t.set(\n\t\t\tmode === \"confirmed\"\n\t\t\t\t? {\n\t\t\t\t\t\t...claimValues,\n\t\t\t\t\t\tstate: \"activating\",\n\t\t\t\t\t\tdrain_confirmed_at: now,\n\t\t\t\t\t\tlast_error_code: null,\n\t\t\t\t\t}\n\t\t\t\t: claimValues,\n\t\t)\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.where(\"runtime_generation\", \"=\", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION);\n\tif (mode === \"confirmed\") {\n\t\tclaim = claim.where((eb) =>\n\t\t\teb.or([\n\t\t\t\teb(\"state\", \"=\", \"expanded\"),\n\t\t\t\teb.and([\n\t\t\t\t\teb(\"state\", \"=\", \"activating\"),\n\t\t\t\t\teb.or([\n\t\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\t\teb.and([\n\t\t\t\t\t\t\teb(\"lease_expires_at\", \"is not\", null),\n\t\t\t\t\t\t\ttimestampIsDue(db, \"lease_expires_at\"),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t);\n\t} else {\n\t\tclaim = claim\n\t\t\t.where(\"state\", \"=\", \"activating\")\n\t\t\t.where(\"drain_confirmed_at\", \"is not\", null)\n\t\t\t.where(\"last_error_code\", \"is\", null)\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"lease_token\", \"is\", null),\n\t\t\t\t\teb.and([eb(\"lease_expires_at\", \"is not\", null), timestampIsDue(db, \"lease_expires_at\")]),\n\t\t\t\t]),\n\t\t\t);\n\t}\n\treturn (await claim.returningAll().executeTakeFirst()) ?? null;\n}\n\nasync function activationClaimLoss(\n\tdb: Kysely<Database>,\n\tmode: MediaUsageActivationClaimMode,\n): Promise<MediaUsageActivationContinuationResult> {\n\tconst current = await findActivation(db);\n\tassertRuntimeGeneration(current);\n\tif (current.state === \"active\") return { outcome: \"active\", processedCollections: 0 };\n\tif (mode === \"background\") {\n\t\tif (current.state === \"expanded\" || current.drain_confirmed_at === null) {\n\t\t\treturn { outcome: \"inactive\" };\n\t\t}\n\t\tif (current.state === \"activating\" && current.last_error_code !== null) {\n\t\t\treturn { outcome: \"failed\" };\n\t\t}\n\t}\n\tif (\n\t\tcurrent.state === \"activating\" &&\n\t\tcurrent.lease_token &&\n\t\tcurrent.lease_expires_at &&\n\t\t(await activationLeaseIsLive(db, current.lease_token))\n\t) {\n\t\treturn { outcome: \"lease_active\", leaseExpiresAt: current.lease_expires_at };\n\t}\n\tif (mode === \"background\" && current.state === \"activating\") {\n\t\treturn { outcome: \"conflict\", processedCollections: 0 };\n\t}\n\tthrow new Error(\"Media usage activation state is not claimable\");\n}\n\nasync function activationLeaseIsLive(db: Kysely<Database>, leaseToken: string): Promise<boolean> {\n\tconst row = await db\n\t\t.selectFrom(\"_emdash_media_usage_activation\")\n\t\t.select(\"task_key\")\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.where(\"state\", \"=\", \"activating\")\n\t\t.where(\"runtime_generation\", \"=\", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION)\n\t\t.where(\"lease_token\", \"=\", leaseToken)\n\t\t.where(\"lease_expires_at\", \"is not\", null)\n\t\t.where(timestampIsLive(db, \"lease_expires_at\"))\n\t\t.executeTakeFirst();\n\treturn row !== undefined;\n}\n\nasync function findActivationCandidates(\n\tdb: Kysely<Database>,\n\tcollectionCursor: string | null,\n): Promise<Array<{ id: string; slug: string }>> {\n\tlet query = db.selectFrom(\"_emdash_collections\").select([\"id\", \"slug\"]);\n\tif (collectionCursor) query = query.where(\"slug\", \">\", collectionCursor);\n\treturn query\n\t\t.orderBy(\"slug\", \"asc\")\n\t\t.limit(MEDIA_USAGE_ACTIVATION_LIMITS.collectionsPerCall + 1)\n\t\t.execute();\n}\n\nasync function prepareCollectionForActivation(\n\tdb: Kysely<Database>,\n\tcollection: { id: string; slug: string },\n\tleaseToken: string,\n): Promise<void> {\n\tconst now = timestampOffset(db, 0);\n\tconst existingStatus = sql.ref(\"_emdash_media_usage_index_status.status\");\n\tconst existingCompletedAt = sql.ref(\"_emdash_media_usage_index_status.completed_at\");\n\tconst existingCollectionId = sql.ref(\"_emdash_media_usage_index_status.collection_id\");\n\tconst existingCaptureState = sql.ref(\"_emdash_media_usage_index_status.capture_state\");\n\tconst row = await db\n\t\t.insertInto(\"_emdash_media_usage_index_status\")\n\t\t.values({\n\t\t\tadapter_id: \"content-media\",\n\t\t\tscope_type: \"collection\",\n\t\t\tscope_key: collection.slug,\n\t\t\tstatus: \"never\",\n\t\t\tcollection_id: collection.id,\n\t\t\treconciliation_required: 1,\n\t\t\tcapture_state: \"installing\",\n\t\t\tupdated_at: now,\n\t\t})\n\t\t.onConflict((conflict) =>\n\t\t\tconflict\n\t\t\t\t.columns([\"adapter_id\", \"scope_type\", \"scope_key\"])\n\t\t\t\t.doUpdateSet({\n\t\t\t\t\tstatus: sql<string>`CASE WHEN ${existingStatus} IN ('complete', 'running') THEN 'stale' ELSE ${existingStatus} END`,\n\t\t\t\t\tcompleted_at: sql<\n\t\t\t\t\t\tstring | null\n\t\t\t\t\t>`CASE WHEN ${existingStatus} IN ('complete', 'running') THEN NULL ELSE ${existingCompletedAt} END`,\n\t\t\t\t\tcursor: null,\n\t\t\t\t\tcollection_id: collection.id,\n\t\t\t\t\treconciliation_required: 1,\n\t\t\t\t\tcapture_state: \"installing\",\n\t\t\t\t\tupdated_at: now,\n\t\t\t\t})\n\t\t\t\t.where((eb) =>\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb.or([\n\t\t\t\t\t\t\teb(existingCollectionId, \"is\", null),\n\t\t\t\t\t\t\teb(existingCollectionId, \"=\", collection.id),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\teb.or([\n\t\t\t\t\t\t\teb(existingCaptureState, \"is\", null),\n\t\t\t\t\t\t\teb(existingCaptureState, \"!=\", \"deleting\"),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tactiveActivationLease(db, leaseToken),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t)\n\t\t.returning(\"collection_id\")\n\t\t.executeTakeFirst();\n\tif (row?.collection_id !== collection.id) {\n\t\tthrow new Error(\"Media usage collection lifecycle identity conflict\");\n\t}\n}\n\nasync function requireActivationLease(db: Kysely<Database>, leaseToken: string): Promise<void> {\n\tif (!(await activationLeaseIsLive(db, leaseToken))) {\n\t\tthrow new Error(\"Media usage activation lease is no longer live\");\n\t}\n}\n\nasync function activateCollectionLifecycle(\n\tdb: Kysely<Database>,\n\tcollection: { id: string; slug: string },\n\tleaseToken: string,\n): Promise<boolean> {\n\tconst result = await db\n\t\t.updateTable(\"_emdash_media_usage_index_status\")\n\t\t.set({ capture_state: \"active\", updated_at: timestampOffset(db, 0) })\n\t\t.where(\"adapter_id\", \"=\", \"content-media\")\n\t\t.where(\"scope_type\", \"=\", \"collection\")\n\t\t.where(\"scope_key\", \"=\", collection.slug)\n\t\t.where(\"collection_id\", \"=\", collection.id)\n\t\t.where(\"capture_state\", \"=\", \"installing\")\n\t\t.where(\n\t\t\tsql<boolean>`EXISTS (\n\t\t\t\tSELECT 1 FROM _emdash_collections AS collection\n\t\t\t\tWHERE collection.id = ${collection.id}\n\t\t\t\t\tAND collection.slug = ${collection.slug}\n\t\t\t)`,\n\t\t)\n\t\t.where(activeActivationLease(db, leaseToken))\n\t\t.executeTakeFirst();\n\treturn Number(result.numUpdatedRows ?? 0) > 0;\n}\n\nasync function releaseActivationBatch(\n\tdb: Kysely<Database>,\n\tleaseToken: string,\n\tcollectionCursor: string | null,\n): Promise<boolean> {\n\tconst result = await db\n\t\t.updateTable(\"_emdash_media_usage_activation\")\n\t\t.set({\n\t\t\tcollection_cursor: collectionCursor,\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t\tupdated_at: timestampOffset(db, 0),\n\t\t})\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.where(\"state\", \"=\", \"activating\")\n\t\t.where(\"runtime_generation\", \"=\", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION)\n\t\t.where(\"lease_token\", \"=\", leaseToken)\n\t\t.where(\"lease_expires_at\", \"is not\", null)\n\t\t.where(timestampIsLive(db, \"lease_expires_at\"))\n\t\t.executeTakeFirst();\n\treturn Number(result.numUpdatedRows ?? 0) > 0;\n}\n\nasync function findIncompleteCollection(\n\tdb: Kysely<Database>,\n): Promise<{ id: string; slug: string } | null> {\n\tconst row = await db\n\t\t.selectFrom(\"_emdash_collections as collection\")\n\t\t.select([\"collection.id\", \"collection.slug\"])\n\t\t.where((eb) =>\n\t\t\teb.not(\n\t\t\t\teb.exists(\n\t\t\t\t\teb\n\t\t\t\t\t\t.selectFrom(\"_emdash_media_usage_index_status as status\")\n\t\t\t\t\t\t.select(\"status.scope_key\")\n\t\t\t\t\t\t.where(\"status.adapter_id\", \"=\", \"content-media\")\n\t\t\t\t\t\t.where(\"status.scope_type\", \"=\", \"collection\")\n\t\t\t\t\t\t.whereRef(\"status.scope_key\", \"=\", \"collection.slug\")\n\t\t\t\t\t\t.whereRef(\"status.collection_id\", \"=\", \"collection.id\")\n\t\t\t\t\t\t.where(\"status.capture_state\", \"=\", \"active\"),\n\t\t\t\t),\n\t\t\t),\n\t\t)\n\t\t.orderBy(\"collection.slug\", \"asc\")\n\t\t.limit(1)\n\t\t.executeTakeFirst();\n\treturn row ?? null;\n}\n\nasync function finalizeActivation(\n\tdb: Kysely<Database>,\n\tleaseToken: string,\n\tcollectionCursor: string | null,\n): Promise<boolean> {\n\tconst now = timestampOffset(db, 0);\n\tconst result = await db\n\t\t.updateTable(\"_emdash_media_usage_activation\")\n\t\t.set({\n\t\t\tstate: \"active\",\n\t\t\tcollection_cursor: collectionCursor,\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t\tlast_error_code: null,\n\t\t\tactivated_at: now,\n\t\t\tupdated_at: now,\n\t\t})\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.where(\"state\", \"=\", \"activating\")\n\t\t.where(\"runtime_generation\", \"=\", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION)\n\t\t.where(\"lease_token\", \"=\", leaseToken)\n\t\t.where(\"lease_expires_at\", \"is not\", null)\n\t\t.where(timestampIsLive(db, \"lease_expires_at\"))\n\t\t.where(\n\t\t\tsql<boolean>`NOT EXISTS (\n\t\t\t\tSELECT 1\n\t\t\t\tFROM _emdash_collections AS collection\n\t\t\t\tWHERE NOT EXISTS (\n\t\t\t\t\tSELECT 1\n\t\t\t\t\tFROM _emdash_media_usage_index_status AS status\n\t\t\t\t\tWHERE status.adapter_id = 'content-media'\n\t\t\t\t\t\tAND status.scope_type = 'collection'\n\t\t\t\t\t\tAND status.scope_key = collection.slug\n\t\t\t\t\t\tAND status.collection_id = collection.id\n\t\t\t\t\t\tAND status.capture_state = 'active'\n\t\t\t\t)\n\t\t\t)`,\n\t\t)\n\t\t.executeTakeFirst();\n\treturn Number(result.numUpdatedRows ?? 0) > 0;\n}\n\nasync function recordActivationFailure(db: Kysely<Database>, leaseToken: string): Promise<void> {\n\tawait db\n\t\t.updateTable(\"_emdash_media_usage_activation\")\n\t\t.set({\n\t\t\tlease_token: null,\n\t\t\tlease_expires_at: null,\n\t\t\tlast_error_code: ACTIVATION_ERROR_CODE,\n\t\t\tupdated_at: timestampOffset(db, 0),\n\t\t})\n\t\t.where(\"task_key\", \"=\", ACTIVATION_KEY)\n\t\t.where(\"state\", \"=\", \"activating\")\n\t\t.where(\"runtime_generation\", \"=\", MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION)\n\t\t.where(\"lease_token\", \"=\", leaseToken)\n\t\t.execute();\n}\n\nfunction activeActivationLease(db: Kysely<Database>, leaseToken: string): RawBuilder<boolean> {\n\treturn sql<boolean>`EXISTS (\n\t\tSELECT 1\n\t\tFROM _emdash_media_usage_activation AS activation\n\t\tWHERE activation.task_key = ${ACTIVATION_KEY}\n\t\t\tAND activation.state = 'activating'\n\t\t\tAND activation.runtime_generation = ${MEDIA_USAGE_ACTIVATION_RUNTIME_GENERATION}\n\t\t\tAND activation.lease_token = ${leaseToken}\n\t\t\tAND activation.lease_expires_at IS NOT NULL\n\t\t\tAND ${timestampIsLive(db, \"activation.lease_expires_at\")}\n\t)`;\n}\n\nfunction timestampIsDue(db: Kysely<Database>, column: string): RawBuilder<boolean> {\n\treturn isPostgres(db)\n\t\t? sql<boolean>`${sql.ref(column)}::timestamptz <= clock_timestamp()`\n\t\t: sql<boolean>`${sql.ref(column)} <= strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n}\n\nfunction timestampIsLive(db: Kysely<Database>, column: string): RawBuilder<boolean> {\n\treturn isPostgres(db)\n\t\t? sql<boolean>`${sql.ref(column)}::timestamptz > clock_timestamp()`\n\t\t: sql<boolean>`${sql.ref(column)} > strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n}\n\nfunction timestampOffset(db: Kysely<Database>, seconds: number): RawBuilder<string> {\n\tif (isPostgres(db)) {\n\t\treturn sql<string>`to_char(\n\t\t\tclock_timestamp() AT TIME ZONE 'UTC' + (${seconds} * interval '1 second'),\n\t\t\t'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'\n\t\t)`;\n\t}\n\treturn sql<string>`strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ${`+${seconds} seconds`})`;\n}\n"],"mappings":"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"}