emdash 1.3.1 → 1.4.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 (1338) hide show
  1. package/dist/action-token-SK8zyN7w.mjs +26 -0
  2. package/dist/action-token-SK8zyN7w.mjs.map +1 -0
  3. package/dist/activation-CGlyigmg.mjs +387 -0
  4. package/dist/activation-CGlyigmg.mjs.map +1 -0
  5. package/dist/adapters-D9a1PfqH.d.mts +173 -0
  6. package/dist/adapters-D9a1PfqH.d.mts.map +1 -0
  7. package/dist/after-32yNRvd2.mjs +99 -0
  8. package/dist/after-32yNRvd2.mjs.map +1 -0
  9. package/dist/allowed-origins-CEug-p0t.mjs +116 -0
  10. package/dist/allowed-origins-CEug-p0t.mjs.map +1 -0
  11. package/dist/api/route-utils.d.mts +4 -4
  12. package/dist/api/route-utils.mjs +52 -53
  13. package/dist/api/route-utils.mjs.map +1 -1
  14. package/dist/api/schemas/index.d.mts +1 -1
  15. package/dist/api/schemas/index.mjs +9 -9
  16. package/dist/api--PYoyeTo.mjs +5098 -0
  17. package/dist/api--PYoyeTo.mjs.map +1 -0
  18. package/dist/api-tokens-DqSlkDVI.mjs +9 -0
  19. package/dist/api-tokens-DqSlkDVI.mjs.map +1 -0
  20. package/dist/api-tokens-GNCsIegW.mjs +173 -0
  21. package/dist/api-tokens-GNCsIegW.mjs.map +1 -0
  22. package/dist/apply-DVnupNeS.mjs +1760 -0
  23. package/dist/apply-DVnupNeS.mjs.map +1 -0
  24. package/dist/approvals-DTtYSB27.mjs +460 -0
  25. package/dist/approvals-DTtYSB27.mjs.map +1 -0
  26. package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
  27. package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
  28. package/dist/artifacts-Dvdp2KK-.mjs +323 -0
  29. package/dist/artifacts-Dvdp2KK-.mjs.map +1 -0
  30. package/dist/astro/index.d.mts +14 -13
  31. package/dist/astro/index.d.mts.map +1 -1
  32. package/dist/astro/index.mjs +52 -12
  33. package/dist/astro/index.mjs.map +1 -1
  34. package/dist/astro/middleware/auth.d.mts +12 -11
  35. package/dist/astro/middleware/auth.d.mts.map +1 -1
  36. package/dist/astro/middleware/auth.mjs +13 -11
  37. package/dist/astro/middleware/auth.mjs.map +1 -1
  38. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  39. package/dist/astro/middleware/redirect.mjs +17 -17
  40. package/dist/astro/middleware/request-context.mjs +12 -7
  41. package/dist/astro/middleware/request-context.mjs.map +1 -1
  42. package/dist/astro/middleware/setup.mjs +1 -1
  43. package/dist/astro/middleware.d.mts +12 -11
  44. package/dist/astro/middleware.d.mts.map +1 -1
  45. package/dist/astro/middleware.mjs +116 -116
  46. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +13 -13
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +13 -13
  48. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  49. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +5 -5
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +15 -15
  52. package/dist/astro/routes/api/admin/byline-fields/index.mjs +15 -15
  53. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +15 -15
  54. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -24
  55. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -24
  57. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -24
  59. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  60. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +19 -19
  61. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  62. package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -18
  63. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  64. package/dist/astro/routes/api/admin/comments/index.mjs +18 -18
  65. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  66. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
  67. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
  68. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  69. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
  70. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
  71. package/dist/astro/routes/api/admin/media-usage/progress.mjs +24 -24
  72. package/dist/astro/routes/api/admin/media-usage/repair.mjs +30 -30
  73. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
  74. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
  75. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
  76. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
  77. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  78. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  79. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +74 -75
  80. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
  82. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +73 -74
  83. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +73 -74
  85. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +84 -85
  87. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/index.mjs +74 -75
  89. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +6 -6
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +73 -74
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +83 -84
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +73 -74
  96. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +73 -74
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +85 -86
  100. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +8 -8
  102. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +75 -76
  103. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +6 -6
  105. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +74 -75
  106. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/updates.mjs +73 -74
  108. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  110. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +73 -74
  111. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  112. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +6 -6
  113. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +73 -74
  114. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +3 -3
  116. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -41
  117. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -41
  119. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -43
  121. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -43
  123. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -43
  125. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -44
  127. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  128. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -44
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -43
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -44
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -45
  135. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -43
  137. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -43
  139. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -45
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -43
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -45
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -43
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -43
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -45
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -43
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -43
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -45
  157. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  158. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  159. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  160. package/dist/astro/routes/api/admin/users/_id_/index.mjs +13 -13
  161. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  162. package/dist/astro/routes/api/admin/users/index.mjs +13 -13
  163. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  164. package/dist/astro/routes/api/auth/handover.mjs +6 -6
  165. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  166. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
  167. package/dist/astro/routes/api/auth/invite/index.mjs +15 -15
  168. package/dist/astro/routes/api/auth/invite/register-options.mjs +16 -16
  169. package/dist/astro/routes/api/auth/logout.mjs +4 -4
  170. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  171. package/dist/astro/routes/api/auth/magic-link/verify.mjs +15 -15
  172. package/dist/astro/routes/api/auth/me.mjs +14 -14
  173. package/dist/astro/routes/api/auth/mode.mjs +4 -4
  174. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +9 -9
  175. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  176. package/dist/astro/routes/api/auth/passkey/_id_.mjs +13 -13
  177. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  178. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  179. package/dist/astro/routes/api/auth/passkey/register/options.mjs +16 -16
  180. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +17 -17
  181. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -19
  182. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
  183. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  184. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  185. package/dist/astro/routes/api/calendar.mjs +14 -14
  186. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
  187. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -20
  188. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  189. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -18
  190. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
  191. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  192. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  193. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +10 -10
  194. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +33 -33
  195. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -18
  196. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +35 -35
  197. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +35 -35
  198. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  199. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  200. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -18
  201. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +26 -26
  202. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
  203. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -18
  204. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  205. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  206. package/dist/astro/routes/api/content/_collection_/index.mjs +14 -14
  207. package/dist/astro/routes/api/content/_collection_/trash.mjs +14 -14
  208. package/dist/astro/routes/api/dashboard.mjs +11 -11
  209. package/dist/astro/routes/api/dev/emails.mjs +4 -4
  210. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +112 -112
  211. package/dist/astro/routes/api/health.mjs +5 -5
  212. package/dist/astro/routes/api/import/probe.d.mts +3 -2
  213. package/dist/astro/routes/api/import/probe.d.mts.map +1 -1
  214. package/dist/astro/routes/api/import/probe.mjs +28 -28
  215. package/dist/astro/routes/api/import/wordpress/analyze.d.mts +4 -3
  216. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  217. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -28
  218. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  219. package/dist/astro/routes/api/import/wordpress/execute.d.mts +12 -11
  220. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  221. package/dist/astro/routes/api/import/wordpress/execute.mjs +26 -27
  222. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  223. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -11
  224. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  225. package/dist/astro/routes/api/import/wordpress/media.mjs +18 -18
  226. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -19
  227. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  228. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -12
  229. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  230. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -29
  231. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +28 -28
  232. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +12 -11
  233. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  234. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +38 -39
  235. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  236. package/dist/astro/routes/api/manifest.mjs +5 -5
  237. package/dist/astro/routes/api/mcp.mjs +96 -97
  238. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  239. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  240. package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
  241. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  242. package/dist/astro/routes/api/media/_id_/usage.mjs +32 -32
  243. package/dist/astro/routes/api/media/_id_.mjs +30 -30
  244. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -5
  245. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  246. package/dist/astro/routes/api/media/file/_...key_.mjs +57 -11
  247. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  248. package/dist/astro/routes/api/media/folders/_id_.mjs +15 -15
  249. package/dist/astro/routes/api/media/folders/index.mjs +15 -15
  250. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  251. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  252. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  253. package/dist/astro/routes/api/media/upload-url.mjs +17 -17
  254. package/dist/astro/routes/api/media.mjs +34 -34
  255. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -19
  256. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  257. package/dist/astro/routes/api/menus/_name_/items.mjs +20 -19
  258. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  259. package/dist/astro/routes/api/menus/_name_/reorder.mjs +20 -19
  260. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/menus/_name_/translations.mjs +20 -19
  262. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  263. package/dist/astro/routes/api/menus/_name_.mjs +20 -19
  264. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  265. package/dist/astro/routes/api/menus/index.mjs +20 -19
  266. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  267. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  268. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
  269. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  270. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  271. package/dist/astro/routes/api/oauth/register.mjs +7 -7
  272. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
  273. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
  274. package/dist/astro/routes/api/oauth/token.d.mts.map +1 -1
  275. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  276. package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
  277. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  278. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +10 -10
  279. package/dist/astro/routes/api/redirects/404s/index.mjs +21 -21
  280. package/dist/astro/routes/api/redirects/404s/summary.mjs +21 -21
  281. package/dist/astro/routes/api/redirects/_id_.mjs +22 -22
  282. package/dist/astro/routes/api/redirects/index.mjs +22 -22
  283. package/dist/astro/routes/api/relations/_id_/index.mjs +35 -35
  284. package/dist/astro/routes/api/relations/index.mjs +35 -35
  285. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  286. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +17 -17
  287. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +73 -74
  288. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  289. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +73 -74
  290. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  291. package/dist/astro/routes/api/schema/block-types/index.mjs +73 -74
  292. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  293. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -74
  294. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  295. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +73 -74
  296. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  297. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +73 -74
  298. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  299. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +73 -74
  300. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  301. package/dist/astro/routes/api/schema/collections/index.mjs +73 -74
  302. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  303. package/dist/astro/routes/api/schema/collections/reorder.mjs +73 -74
  304. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  305. package/dist/astro/routes/api/schema/index.mjs +17 -17
  306. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +73 -74
  307. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  308. package/dist/astro/routes/api/schema/orphans/index.mjs +73 -74
  309. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  310. package/dist/astro/routes/api/search/enable.mjs +20 -19
  311. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  312. package/dist/astro/routes/api/search/index.mjs +19 -18
  313. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  314. package/dist/astro/routes/api/search/rebuild.mjs +20 -19
  315. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  316. package/dist/astro/routes/api/search/stats.mjs +10 -9
  317. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  318. package/dist/astro/routes/api/search/suggest.mjs +19 -18
  319. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  320. package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
  321. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  322. package/dist/astro/routes/api/sections/index.mjs +19 -18
  323. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  324. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  325. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  326. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  327. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  328. package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
  329. package/dist/astro/routes/api/settings/domain.mjs +21 -21
  330. package/dist/astro/routes/api/settings/email.mjs +5 -5
  331. package/dist/astro/routes/api/settings.mjs +27 -27
  332. package/dist/astro/routes/api/setup/admin-verify.mjs +22 -22
  333. package/dist/astro/routes/api/setup/admin.mjs +17 -17
  334. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -46
  335. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  336. package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
  337. package/dist/astro/routes/api/setup/index.mjs +51 -52
  338. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  339. package/dist/astro/routes/api/setup/status.mjs +5 -5
  340. package/dist/astro/routes/api/site/domain-proof.mjs +15 -15
  341. package/dist/astro/routes/api/snapshot.mjs +10 -10
  342. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -25
  343. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -25
  344. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -25
  345. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -25
  346. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +23 -23
  347. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -25
  348. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -36
  349. package/dist/astro/routes/api/taxonomies/index.mjs +25 -25
  350. package/dist/astro/routes/api/themes/preview.mjs +7 -7
  351. package/dist/astro/routes/api/typegen.mjs +5 -5
  352. package/dist/astro/routes/api/visual-editing/action-token.mjs +7 -7
  353. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +21 -21
  354. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -3
  355. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  356. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  357. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  358. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  359. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +28 -17
  360. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  361. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  362. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +24 -20
  363. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  364. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +23 -20
  365. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  366. package/dist/astro/routes/api/widget-areas/_name_.mjs +13 -10
  367. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  368. package/dist/astro/routes/api/widget-areas/index.mjs +23 -20
  369. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  370. package/dist/astro/routes/api/widget-components.mjs +4 -4
  371. package/dist/astro/routes/robots.txt.mjs +14 -14
  372. package/dist/astro/routes/sitemap-_collection_.xml.mjs +17 -17
  373. package/dist/astro/routes/sitemap.xml.mjs +15 -15
  374. package/dist/astro/types.d.mts +21 -19
  375. package/dist/astro/types.d.mts.map +1 -1
  376. package/dist/auth/providers/github.d.mts +1 -1
  377. package/dist/auth/providers/google.d.mts +1 -1
  378. package/dist/auth/providers/microsoft.d.mts +1 -1
  379. package/dist/authoritative-records-CQlB3JzE.mjs +5183 -0
  380. package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
  381. package/dist/authorize-NJgp8kLI.mjs +74 -0
  382. package/dist/authorize-NJgp8kLI.mjs.map +1 -0
  383. package/dist/backup-8rPSJ28a.mjs +246 -0
  384. package/dist/backup-8rPSJ28a.mjs.map +1 -0
  385. package/dist/block-types-BbOrfnWs.mjs +132 -0
  386. package/dist/block-types-BbOrfnWs.mjs.map +1 -0
  387. package/dist/block-values-Dg0-8PPS.mjs +215 -0
  388. package/dist/block-values-Dg0-8PPS.mjs.map +1 -0
  389. package/dist/byline-DHJS-GGb.mjs +994 -0
  390. package/dist/byline-DHJS-GGb.mjs.map +1 -0
  391. package/dist/byline-fields-CiR8FvvF.mjs +280 -0
  392. package/dist/byline-fields-CiR8FvvF.mjs.map +1 -0
  393. package/dist/byline-fields-D6KYsEa7.mjs +123 -0
  394. package/dist/byline-fields-D6KYsEa7.mjs.map +1 -0
  395. package/dist/bylines-Bsg5cH4S.mjs +234 -0
  396. package/dist/bylines-Bsg5cH4S.mjs.map +1 -0
  397. package/dist/bylines-f_ZEc6Sn.mjs +150 -0
  398. package/dist/bylines-f_ZEc6Sn.mjs.map +1 -0
  399. package/dist/cache-5DHbpEWu.mjs +151 -0
  400. package/dist/cache-5DHbpEWu.mjs.map +1 -0
  401. package/dist/canonical-BudtH-Fx.mjs +174 -0
  402. package/dist/canonical-BudtH-Fx.mjs.map +1 -0
  403. package/dist/capture-triggers-BezAvWcB.mjs +362 -0
  404. package/dist/capture-triggers-BezAvWcB.mjs.map +1 -0
  405. package/dist/challenge-store-B1C0V4b3.mjs +51 -0
  406. package/dist/challenge-store-B1C0V4b3.mjs.map +1 -0
  407. package/dist/checksum-CEqvfxGX.mjs +162 -0
  408. package/dist/checksum-CEqvfxGX.mjs.map +1 -0
  409. package/dist/chrome-tags-BIKBMZYO.mjs +24 -0
  410. package/dist/chrome-tags-BIKBMZYO.mjs.map +1 -0
  411. package/dist/chunks-DiW8VMwz.mjs +25 -0
  412. package/dist/chunks-DiW8VMwz.mjs.map +1 -0
  413. package/dist/cli/index.mjs +52 -53
  414. package/dist/cli/index.mjs.map +1 -1
  415. package/dist/client/index.d.mts +46 -46
  416. package/dist/client/index.mjs +2 -2
  417. package/dist/collection-slugs-cache-DIrLjqH-.mjs +91 -0
  418. package/dist/collection-slugs-cache-DIrLjqH-.mjs.map +1 -0
  419. package/dist/comment-DB74Zpa4.mjs +335 -0
  420. package/dist/comment-DB74Zpa4.mjs.map +1 -0
  421. package/dist/comment-reaction-BScxIWUn.mjs +85 -0
  422. package/dist/comment-reaction-BScxIWUn.mjs.map +1 -0
  423. package/dist/comments-Cor_zKml.mjs +195 -0
  424. package/dist/comments-Cor_zKml.mjs.map +1 -0
  425. package/dist/comments-yiRFx3w5.mjs +99 -0
  426. package/dist/comments-yiRFx3w5.mjs.map +1 -0
  427. package/dist/components-Brp__9xo.mjs +112 -0
  428. package/dist/components-Brp__9xo.mjs.map +1 -0
  429. package/dist/config-D44_8G9J.d.mts +41 -0
  430. package/dist/config-D44_8G9J.d.mts.map +1 -0
  431. package/dist/config-DBU6iUQB.mjs +228 -0
  432. package/dist/config-DBU6iUQB.mjs.map +1 -0
  433. package/dist/config-sDhZvkLR.d.mts +6835 -0
  434. package/dist/config-sDhZvkLR.d.mts.map +1 -0
  435. package/dist/connection-BtEN_lP9.mjs +36 -0
  436. package/dist/connection-BtEN_lP9.mjs.map +1 -0
  437. package/dist/content-BKHUVsE5.mjs +2112 -0
  438. package/dist/content-BKHUVsE5.mjs.map +1 -0
  439. package/dist/content-list-query-ByP4jRpZ.d.mts +26 -0
  440. package/dist/content-list-query-ByP4jRpZ.d.mts.map +1 -0
  441. package/dist/content-policy-BmE0MPZY.mjs +46 -0
  442. package/dist/content-policy-BmE0MPZY.mjs.map +1 -0
  443. package/dist/content-repair-Ukdxoq-R.mjs +442 -0
  444. package/dist/content-repair-Ukdxoq-R.mjs.map +1 -0
  445. package/dist/context-CzjejcsE.mjs +2089 -0
  446. package/dist/context-CzjejcsE.mjs.map +1 -0
  447. package/dist/credits-BKREepht.mjs +110 -0
  448. package/dist/credits-BKREepht.mjs.map +1 -0
  449. package/dist/cron-D7obTIfk.mjs +306 -0
  450. package/dist/cron-D7obTIfk.mjs.map +1 -0
  451. package/dist/dashboard-ynr1qJWM.mjs +168 -0
  452. package/dist/dashboard-ynr1qJWM.mjs.map +1 -0
  453. package/dist/db/index.d.mts +3 -3
  454. package/dist/db/index.mjs +2 -2
  455. package/dist/db/libsql-migrations.d.mts +1 -1
  456. package/dist/db/libsql-migrations.mjs +5 -5
  457. package/dist/db/libsql.d.mts +1 -1
  458. package/dist/db/postgres-migrations.d.mts +1 -1
  459. package/dist/db/postgres-migrations.mjs +5 -5
  460. package/dist/db/postgres.d.mts +1 -1
  461. package/dist/db/sqlite-migrations.d.mts +1 -1
  462. package/dist/db/sqlite-migrations.mjs +5 -5
  463. package/dist/db/sqlite.d.mts +1 -1
  464. package/dist/db/sqlite.mjs +1 -1
  465. package/dist/default-C0W-PhAp.mjs +81 -0
  466. package/dist/default-C0W-PhAp.mjs.map +1 -0
  467. package/dist/deferred-tasks-wlMFJL95.d.mts +10 -0
  468. package/dist/deferred-tasks-wlMFJL95.d.mts.map +1 -0
  469. package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
  470. package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
  471. package/dist/device-flow-D1U392GC.mjs +519 -0
  472. package/dist/device-flow-D1U392GC.mjs.map +1 -0
  473. package/dist/dialect-helpers-B1XN2HGB.mjs +314 -0
  474. package/dist/dialect-helpers-B1XN2HGB.mjs.map +1 -0
  475. package/dist/digest-DJ1tHCgy.mjs +194 -0
  476. package/dist/digest-DJ1tHCgy.mjs.map +1 -0
  477. package/dist/direct-executor-Bs2g0ake.mjs +117 -0
  478. package/dist/direct-executor-Bs2g0ake.mjs.map +1 -0
  479. package/dist/dist-BUmWMTbN.mjs +810 -0
  480. package/dist/dist-BUmWMTbN.mjs.map +1 -0
  481. package/dist/email-console-FFVJWb9N.mjs +50 -0
  482. package/dist/email-console-FFVJWb9N.mjs.map +1 -0
  483. package/dist/email-locale-Bs3HFdnq.mjs +25 -0
  484. package/dist/email-locale-Bs3HFdnq.mjs.map +1 -0
  485. package/dist/emdash-runtime-C8T-pZpS.mjs +4425 -0
  486. package/dist/emdash-runtime-C8T-pZpS.mjs.map +1 -0
  487. package/dist/enrich-DFlfnd3u.mjs +194 -0
  488. package/dist/enrich-DFlfnd3u.mjs.map +1 -0
  489. package/dist/entry-lock-BulbgPBX.d.mts +4568 -0
  490. package/dist/entry-lock-BulbgPBX.d.mts.map +1 -0
  491. package/dist/entry-lock-CRVmruM0.mjs +1211 -0
  492. package/dist/entry-lock-CRVmruM0.mjs.map +1 -0
  493. package/dist/entry-lock-D-zJQ4q6.mjs +163 -0
  494. package/dist/entry-lock-D-zJQ4q6.mjs.map +1 -0
  495. package/dist/entry-locks-CJ9uhqg1.mjs +167 -0
  496. package/dist/entry-locks-CJ9uhqg1.mjs.map +1 -0
  497. package/dist/env-types-BE3bCvfP.mjs +38 -0
  498. package/dist/env-types-BE3bCvfP.mjs.map +1 -0
  499. package/dist/error-BCMgPxdn.mjs +90 -0
  500. package/dist/error-BCMgPxdn.mjs.map +1 -0
  501. package/dist/errors-8gJqv-XV.mjs +492 -0
  502. package/dist/errors-8gJqv-XV.mjs.map +1 -0
  503. package/dist/errors-B4f4It-2.mjs +120 -0
  504. package/dist/errors-B4f4It-2.mjs.map +1 -0
  505. package/dist/escape-lsNq38PP.mjs +9 -0
  506. package/dist/escape-lsNq38PP.mjs.map +1 -0
  507. package/dist/fence-Dagicj14.mjs +162 -0
  508. package/dist/fence-Dagicj14.mjs.map +1 -0
  509. package/dist/field-map-BSXdNGt5.mjs +84 -0
  510. package/dist/field-map-BSXdNGt5.mjs.map +1 -0
  511. package/dist/fts-manager-6861qcwk.mjs +489 -0
  512. package/dist/fts-manager-6861qcwk.mjs.map +1 -0
  513. package/dist/gc-CNkXB3mE.mjs +75 -0
  514. package/dist/gc-CNkXB3mE.mjs.map +1 -0
  515. package/dist/hash-BJaeek87.mjs +37 -0
  516. package/dist/hash-BJaeek87.mjs.map +1 -0
  517. package/dist/hreflang-8dUOJAPJ.d.mts +50 -0
  518. package/dist/hreflang-8dUOJAPJ.d.mts.map +1 -0
  519. package/dist/hreflang-BW5A4FLK.mjs +105 -0
  520. package/dist/hreflang-BW5A4FLK.mjs.map +1 -0
  521. package/dist/http-route-dispatch-rXKvTNm9.mjs +342 -0
  522. package/dist/http-route-dispatch-rXKvTNm9.mjs.map +1 -0
  523. package/dist/identity-CPRRSovU.mjs +35 -0
  524. package/dist/identity-CPRRSovU.mjs.map +1 -0
  525. package/dist/import-yVbfPyfd.mjs +2126 -0
  526. package/dist/import-yVbfPyfd.mjs.map +1 -0
  527. package/dist/index-VM7Fzxwe.d.mts +260 -0
  528. package/dist/index-VM7Fzxwe.d.mts.map +1 -0
  529. package/dist/index.d.mts +23 -22
  530. package/dist/index.mjs +104 -105
  531. package/dist/install-finalization-RU6VrHOX.mjs +58 -0
  532. package/dist/install-finalization-RU6VrHOX.mjs.map +1 -0
  533. package/dist/json-recordset-D0WhN2UA.mjs +12 -0
  534. package/dist/json-recordset-D0WhN2UA.mjs.map +1 -0
  535. package/dist/json-schema-v_D_pPNG.mjs +15 -0
  536. package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
  537. package/dist/keys-CifIkT0N.mjs +61 -0
  538. package/dist/keys-CifIkT0N.mjs.map +1 -0
  539. package/dist/kinds-B_Qcl5pz.mjs +974 -0
  540. package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
  541. package/dist/lifecycle-B8d7Rdqx.mjs +25 -0
  542. package/dist/lifecycle-B8d7Rdqx.mjs.map +1 -0
  543. package/dist/load-D4xtzm6h.mjs +28 -0
  544. package/dist/load-D4xtzm6h.mjs.map +1 -0
  545. package/dist/loader-DhnedqY4.mjs +1478 -0
  546. package/dist/loader-DhnedqY4.mjs.map +1 -0
  547. package/dist/loops-B2YS-Zzr.mjs +205 -0
  548. package/dist/loops-B2YS-Zzr.mjs.map +1 -0
  549. package/dist/manifest-builder-g1FLviel.mjs +196 -0
  550. package/dist/manifest-builder-g1FLviel.mjs.map +1 -0
  551. package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
  552. package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
  553. package/dist/marketplace-CqbgeIa7.mjs +257 -0
  554. package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
  555. package/dist/media/image-endpoint.mjs +1 -1
  556. package/dist/media/index.d.mts +1 -1
  557. package/dist/media/index.mjs +3 -3
  558. package/dist/media/local-runtime.d.mts +14 -13
  559. package/dist/media/local-runtime.d.mts.map +1 -1
  560. package/dist/media/local-runtime.mjs +14 -14
  561. package/dist/media-BR4_t-Wd.mjs +416 -0
  562. package/dist/media-BR4_t-Wd.mjs.map +1 -0
  563. package/dist/media-CikS-q6E.mjs +294 -0
  564. package/dist/media-CikS-q6E.mjs.map +1 -0
  565. package/dist/media-DepNLhPq.mjs +383 -0
  566. package/dist/media-DepNLhPq.mjs.map +1 -0
  567. package/dist/media-allowlist-BMBLqyWh.mjs +45 -0
  568. package/dist/media-allowlist-BMBLqyWh.mjs.map +1 -0
  569. package/dist/media-folders-CI0Wydfo.mjs +210 -0
  570. package/dist/media-folders-CI0Wydfo.mjs.map +1 -0
  571. package/dist/media-url-BQgKvpQ5.mjs +43 -0
  572. package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
  573. package/dist/media-usage-X1_20MY-.mjs +282 -0
  574. package/dist/media-usage-X1_20MY-.mjs.map +1 -0
  575. package/dist/media-usage-activation-bWusy3M2.mjs +78 -0
  576. package/dist/media-usage-activation-bWusy3M2.mjs.map +1 -0
  577. package/dist/media-usage-work-B2RaoJIa.mjs +151 -0
  578. package/dist/media-usage-work-B2RaoJIa.mjs.map +1 -0
  579. package/dist/media-usage-work-BCK2J-v_.mjs +1036 -0
  580. package/dist/media-usage-work-BCK2J-v_.mjs.map +1 -0
  581. package/dist/menus-B0Qqv_cS.mjs +837 -0
  582. package/dist/menus-B0Qqv_cS.mjs.map +1 -0
  583. package/dist/menus-oypxT1pI.mjs +3802 -0
  584. package/dist/menus-oypxT1pI.mjs.map +1 -0
  585. package/dist/menus-uEAxWAm1.mjs +92 -0
  586. package/dist/menus-uEAxWAm1.mjs.map +1 -0
  587. package/dist/migrations/index.d.mts +1 -1
  588. package/dist/migrations/index.mjs +4 -4
  589. package/dist/mime-D1We9jUx.mjs +81 -0
  590. package/dist/mime-D1We9jUx.mjs.map +1 -0
  591. package/dist/mode-C-D3qICy.mjs +23 -0
  592. package/dist/mode-C-D3qICy.mjs.map +1 -0
  593. package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
  594. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
  595. package/dist/normalize-Cx-bNwhP.mjs +220 -0
  596. package/dist/normalize-Cx-bNwhP.mjs.map +1 -0
  597. package/dist/oauth-authorization-CPLgBrdo.mjs +287 -0
  598. package/dist/oauth-authorization-CPLgBrdo.mjs.map +1 -0
  599. package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
  600. package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
  601. package/dist/oauth-state-store-BndCfRum.mjs +50 -0
  602. package/dist/oauth-state-store-BndCfRum.mjs.map +1 -0
  603. package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
  604. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
  605. package/dist/object-cache/memory.d.mts +1 -1
  606. package/dist/object-cache-DmKr09La.mjs +603 -0
  607. package/dist/object-cache-DmKr09La.mjs.map +1 -0
  608. package/dist/options-BUUgroHg.d.mts +81 -0
  609. package/dist/options-BUUgroHg.d.mts.map +1 -0
  610. package/dist/ownership-MiyA7qKO.mjs +12 -0
  611. package/dist/ownership-MiyA7qKO.mjs.map +1 -0
  612. package/dist/page/index.d.mts +2 -2
  613. package/dist/page/index.mjs +13 -13
  614. package/dist/parse-B_b6gZxG.mjs +81 -0
  615. package/dist/parse-B_b6gZxG.mjs.map +1 -0
  616. package/dist/parse-Dndx1QmN.d.mts +176 -0
  617. package/dist/parse-Dndx1QmN.d.mts.map +1 -0
  618. package/dist/passkey-config-D2Lua5__.mjs +46 -0
  619. package/dist/passkey-config-D2Lua5__.mjs.map +1 -0
  620. package/dist/paths-biDzFTY2.mjs +77 -0
  621. package/dist/paths-biDzFTY2.mjs.map +1 -0
  622. package/dist/placeholder-CSKu5OkD.d.mts +314 -0
  623. package/dist/placeholder-CSKu5OkD.d.mts.map +1 -0
  624. package/dist/plan-CCoqxNoU.mjs +135 -0
  625. package/dist/plan-CCoqxNoU.mjs.map +1 -0
  626. package/dist/plugin-test-runtime.d.mts +16 -14
  627. package/dist/plugin-test-runtime.d.mts.map +1 -1
  628. package/dist/plugin-test-runtime.mjs +114 -115
  629. package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
  630. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
  631. package/dist/plugin-types.d.mts +1 -1
  632. package/dist/plugin-utils.d.mts +12 -11
  633. package/dist/plugin-utils.d.mts.map +1 -1
  634. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -11
  635. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  636. package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
  637. package/dist/plugins/host.d.mts +5 -5
  638. package/dist/plugins/host.mjs +50 -51
  639. package/dist/plugins-COJ2L49n.mjs +261 -0
  640. package/dist/plugins-COJ2L49n.mjs.map +1 -0
  641. package/dist/policy-BPugqmeV.mjs +53 -0
  642. package/dist/policy-BPugqmeV.mjs.map +1 -0
  643. package/dist/portable-text-BH4zgkSm.mjs +311 -0
  644. package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
  645. package/dist/preview-DLexxwp3.mjs +107 -0
  646. package/dist/preview-DLexxwp3.mjs.map +1 -0
  647. package/dist/protocol-PoAfD_9W.d.mts +65 -0
  648. package/dist/protocol-PoAfD_9W.d.mts.map +1 -0
  649. package/dist/public-plugin-api-routes-CMljrTby.mjs +316 -0
  650. package/dist/public-plugin-api-routes-CMljrTby.mjs.map +1 -0
  651. package/dist/public-submission-ayqoyee4.mjs +251 -0
  652. package/dist/public-submission-ayqoyee4.mjs.map +1 -0
  653. package/dist/public-url-Bt98vysr.mjs +101 -0
  654. package/dist/public-url-Bt98vysr.mjs.map +1 -0
  655. package/dist/query-D62NntCZ.mjs +1146 -0
  656. package/dist/query-D62NntCZ.mjs.map +1 -0
  657. package/dist/query-LmPY2y0C.mjs +41 -0
  658. package/dist/query-LmPY2y0C.mjs.map +1 -0
  659. package/dist/range-CYfeXgGK.mjs +51 -0
  660. package/dist/range-CYfeXgGK.mjs.map +1 -0
  661. package/dist/rate-limit-C04Llsoc.mjs +127 -0
  662. package/dist/rate-limit-C04Llsoc.mjs.map +1 -0
  663. package/dist/receipt-BUsQCOeM.mjs +43 -0
  664. package/dist/receipt-BUsQCOeM.mjs.map +1 -0
  665. package/dist/redirect-CQAV7mCo.mjs +19 -0
  666. package/dist/redirect-CQAV7mCo.mjs.map +1 -0
  667. package/dist/redirect-DjLdw427.mjs +423 -0
  668. package/dist/redirect-DjLdw427.mjs.map +1 -0
  669. package/dist/redirect-paths-DOaVBp6E.mjs +36 -0
  670. package/dist/redirect-paths-DOaVBp6E.mjs.map +1 -0
  671. package/dist/redirects-Cpq1catN.mjs +446 -0
  672. package/dist/redirects-Cpq1catN.mjs.map +1 -0
  673. package/dist/redirects-CyvvZrCJ.mjs +148 -0
  674. package/dist/redirects-CyvvZrCJ.mjs.map +1 -0
  675. package/dist/registry/testing.mjs +3 -3
  676. package/dist/registry-B0-O575m.mjs +8374 -0
  677. package/dist/registry-B0-O575m.mjs.map +1 -0
  678. package/dist/relations-WIOojTL4.mjs +789 -0
  679. package/dist/relations-WIOojTL4.mjs.map +1 -0
  680. package/dist/request-context.d.mts +2 -2
  681. package/dist/request-meta-bwZ_NsvU.mjs +141 -0
  682. package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
  683. package/dist/resolve-BNnm8EkB.mjs +102 -0
  684. package/dist/resolve-BNnm8EkB.mjs.map +1 -0
  685. package/dist/route-cache-QSOyDEw0.mjs +20 -0
  686. package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
  687. package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
  688. package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
  689. package/dist/routes-avqgc-8r.mjs +272 -0
  690. package/dist/routes-avqgc-8r.mjs.map +1 -0
  691. package/dist/runner-Bkkfk4O8.mjs +6669 -0
  692. package/dist/runner-Bkkfk4O8.mjs.map +1 -0
  693. package/dist/runner-Dfgp6-S_.d.mts +73 -0
  694. package/dist/runner-Dfgp6-S_.d.mts.map +1 -0
  695. package/dist/runtime.d.mts +13 -12
  696. package/dist/runtime.d.mts.map +1 -1
  697. package/dist/runtime.mjs +4 -3
  698. package/dist/runtime.mjs.map +1 -1
  699. package/dist/schema/project-env-types.mjs +42 -43
  700. package/dist/schema/project-env-types.mjs.map +1 -1
  701. package/dist/schema-B-3rntlX.mjs +815 -0
  702. package/dist/schema-B-3rntlX.mjs.map +1 -0
  703. package/dist/schema-BqBlUZtb.mjs +13 -0
  704. package/dist/schema-BqBlUZtb.mjs.map +1 -0
  705. package/dist/scopes-DNaY7Ey0.mjs +34 -0
  706. package/dist/scopes-DNaY7Ey0.mjs.map +1 -0
  707. package/dist/search-BPWTnpnD.mjs +450 -0
  708. package/dist/search-BPWTnpnD.mjs.map +1 -0
  709. package/dist/secrets-Dswzrz3k.mjs +369 -0
  710. package/dist/secrets-Dswzrz3k.mjs.map +1 -0
  711. package/dist/sections-rSao6rBG.mjs +346 -0
  712. package/dist/sections-rSao6rBG.mjs.map +1 -0
  713. package/dist/seed/index.d.mts +2 -2
  714. package/dist/seed/index.mjs +40 -41
  715. package/dist/seo/index.d.mts +3 -3
  716. package/dist/seo/index.mjs +27 -27
  717. package/dist/seo-B_H_pqOd.mjs +133 -0
  718. package/dist/seo-B_H_pqOd.mjs.map +1 -0
  719. package/dist/seo-ClB-dw9w.mjs +188 -0
  720. package/dist/seo-ClB-dw9w.mjs.map +1 -0
  721. package/dist/service-DpiUQVpp.mjs +150 -0
  722. package/dist/service-DpiUQVpp.mjs.map +1 -0
  723. package/dist/session-user-DiE4JKPP.mjs +61 -0
  724. package/dist/session-user-DiE4JKPP.mjs.map +1 -0
  725. package/dist/settings--XlUdUaI.mjs +66 -0
  726. package/dist/settings--XlUdUaI.mjs.map +1 -0
  727. package/dist/settings-D932YP2-.mjs +519 -0
  728. package/dist/settings-D932YP2-.mjs.map +1 -0
  729. package/dist/settings-Dd1uivmQ.mjs +73 -0
  730. package/dist/settings-Dd1uivmQ.mjs.map +1 -0
  731. package/dist/setup-complete-qsJYWutC.mjs +65 -0
  732. package/dist/setup-complete-qsJYWutC.mjs.map +1 -0
  733. package/dist/setup-nonce-CBFgUFXw.mjs +25 -0
  734. package/dist/setup-nonce-CBFgUFXw.mjs.map +1 -0
  735. package/dist/site-domain-oRGS_JfA.mjs +131 -0
  736. package/dist/site-domain-oRGS_JfA.mjs.map +1 -0
  737. package/dist/site-settings-DRHfX7bq.mjs +50 -0
  738. package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
  739. package/dist/site-url-MB685I5X.mjs +45 -0
  740. package/dist/site-url-MB685I5X.mjs.map +1 -0
  741. package/dist/sitemap-name-B8QP8wud.mjs +26 -0
  742. package/dist/sitemap-name-B8QP8wud.mjs.map +1 -0
  743. package/dist/slug-aVnUV4SL.mjs +16 -0
  744. package/dist/slug-aVnUV4SL.mjs.map +1 -0
  745. package/dist/snapshot-BjaXDZQ5.mjs +414 -0
  746. package/dist/snapshot-BjaXDZQ5.mjs.map +1 -0
  747. package/dist/ssrf-BcYjyM4M.mjs +406 -0
  748. package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
  749. package/dist/stage-CZQnXM_G.mjs +662 -0
  750. package/dist/stage-CZQnXM_G.mjs.map +1 -0
  751. package/dist/staged-ByBmPFtX.mjs +686 -0
  752. package/dist/staged-ByBmPFtX.mjs.map +1 -0
  753. package/dist/state-CFbGZziM.mjs +178 -0
  754. package/dist/state-CFbGZziM.mjs.map +1 -0
  755. package/dist/status-BFNdxzKc.mjs +30 -0
  756. package/dist/status-BFNdxzKc.mjs.map +1 -0
  757. package/dist/storage/local.d.mts +1 -1
  758. package/dist/storage/local.mjs +2 -2
  759. package/dist/storage/s3.d.mts +1 -1
  760. package/dist/storage/s3.mjs +1 -1
  761. package/dist/storage-query-BFp06Y0s.d.mts +1627 -0
  762. package/dist/storage-query-BFp06Y0s.d.mts.map +1 -0
  763. package/dist/tar-DFjExb9X.mjs +449 -0
  764. package/dist/tar-DFjExb9X.mjs.map +1 -0
  765. package/dist/target-CWZs2-o6.mjs +27 -0
  766. package/dist/target-CWZs2-o6.mjs.map +1 -0
  767. package/dist/taxonomies-5SR76j11.mjs +937 -0
  768. package/dist/taxonomies-5SR76j11.mjs.map +1 -0
  769. package/dist/taxonomies-B__VmCKQ.mjs +703 -0
  770. package/dist/taxonomies-B__VmCKQ.mjs.map +1 -0
  771. package/dist/taxonomy-CMI5fczd.mjs +563 -0
  772. package/dist/taxonomy-CMI5fczd.mjs.map +1 -0
  773. package/dist/tokens-BnhSnGwJ.mjs +171 -0
  774. package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
  775. package/dist/transfer-BbKfufJ4.mjs +166 -0
  776. package/dist/transfer-BbKfufJ4.mjs.map +1 -0
  777. package/dist/transfer-DTGblAj2.mjs +8910 -0
  778. package/dist/transfer-DTGblAj2.mjs.map +1 -0
  779. package/dist/transfer-download-D9LQEDX0.mjs +33 -0
  780. package/dist/transfer-download-D9LQEDX0.mjs.map +1 -0
  781. package/dist/transformations-Bx4lYY0Y.mjs +196 -0
  782. package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
  783. package/dist/transport-Dzpn5b3i.mjs +137 -0
  784. package/dist/transport-Dzpn5b3i.mjs.map +1 -0
  785. package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
  786. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
  787. package/dist/turnstile-Cs2wfkJG.mjs +58 -0
  788. package/dist/turnstile-Cs2wfkJG.mjs.map +1 -0
  789. package/dist/types-BAsCk5KU.d.mts +87 -0
  790. package/dist/types-BAsCk5KU.d.mts.map +1 -0
  791. package/dist/types-BuvSwT9Y.d.mts +375 -0
  792. package/dist/types-BuvSwT9Y.d.mts.map +1 -0
  793. package/dist/types-C4KT3Md2.d.mts +293 -0
  794. package/dist/types-C4KT3Md2.d.mts.map +1 -0
  795. package/dist/types-CVXHwIBB.d.mts +125 -0
  796. package/dist/types-CVXHwIBB.d.mts.map +1 -0
  797. package/dist/types-C_asjp1J.mjs.map +1 -1
  798. package/dist/types-CgfFGfO5.mjs +16 -0
  799. package/dist/types-CgfFGfO5.mjs.map +1 -0
  800. package/dist/types-Cj0_yZkn.mjs +18 -0
  801. package/dist/types-Cj0_yZkn.mjs.map +1 -0
  802. package/dist/types-CjftrmZR.d.mts +1741 -0
  803. package/dist/types-CjftrmZR.d.mts.map +1 -0
  804. package/dist/types-DKwRUA-x.d.mts +916 -0
  805. package/dist/types-DKwRUA-x.d.mts.map +1 -0
  806. package/dist/types-DwhEvIVb.mjs.map +1 -1
  807. package/dist/types-GwAyS5SH.d.mts +227 -0
  808. package/dist/types-GwAyS5SH.d.mts.map +1 -0
  809. package/dist/types-qHVygneX.mjs +77 -0
  810. package/dist/types-qHVygneX.mjs.map +1 -0
  811. package/dist/types-sUHaH7lC.mjs +37 -0
  812. package/dist/types-sUHaH7lC.mjs.map +1 -0
  813. package/dist/types-uU2YNYSt.d.mts +209 -0
  814. package/dist/types-uU2YNYSt.d.mts.map +1 -0
  815. package/dist/update-check-ABBJgg6M.mjs +161 -0
  816. package/dist/update-check-ABBJgg6M.mjs.map +1 -0
  817. package/dist/upload-attempts-DPFC4COv.mjs +32 -0
  818. package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
  819. package/dist/url-pattern-QATUE_rv.mjs +41 -0
  820. package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
  821. package/dist/user-By8SzQxS.mjs +171 -0
  822. package/dist/user-By8SzQxS.mjs.map +1 -0
  823. package/dist/utils-D5uOi6WS.mjs +450 -0
  824. package/dist/utils-D5uOi6WS.mjs.map +1 -0
  825. package/dist/utils-Szp4iBQB.d.mts +376 -0
  826. package/dist/utils-Szp4iBQB.d.mts.map +1 -0
  827. package/dist/validate-DDvxy6qG.d.mts +468 -0
  828. package/dist/validate-DDvxy6qG.d.mts.map +1 -0
  829. package/dist/validate-Dz-TIOFB.mjs +524 -0
  830. package/dist/validate-Dz-TIOFB.mjs.map +1 -0
  831. package/dist/validation-Fc9ZSUS_.mjs +221 -0
  832. package/dist/validation-Fc9ZSUS_.mjs.map +1 -0
  833. package/dist/version-BZj18Q7G.mjs +9 -0
  834. package/dist/version-BZj18Q7G.mjs.map +1 -0
  835. package/dist/version-Bu6Nlbb5.mjs +7 -0
  836. package/dist/version-Bu6Nlbb5.mjs.map +1 -0
  837. package/dist/version-DqB7LIO7.mjs +49 -0
  838. package/dist/version-DqB7LIO7.mjs.map +1 -0
  839. package/dist/video-DytCnw3L.mjs +54 -0
  840. package/dist/video-DytCnw3L.mjs.map +1 -0
  841. package/dist/virtual-modules-DO954n7P.mjs +515 -0
  842. package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
  843. package/dist/widgets-BUx_Mf2q.mjs +134 -0
  844. package/dist/widgets-BUx_Mf2q.mjs.map +1 -0
  845. package/dist/wxr-taxonomies-DbJtWrWM.mjs +454 -0
  846. package/dist/wxr-taxonomies-DbJtWrWM.mjs.map +1 -0
  847. package/dist/zod-generator--nlM0930.mjs +425 -0
  848. package/dist/zod-generator--nlM0930.mjs.map +1 -0
  849. package/package.json +5 -5
  850. package/src/api/handlers/content.ts +49 -18
  851. package/src/api/handlers/device-flow.ts +1 -3
  852. package/src/api/handlers/menus.ts +3 -3
  853. package/src/api/handlers/oauth-authorization.ts +1 -3
  854. package/src/astro/integration/admin-nav.ts +52 -0
  855. package/src/astro/integration/index.ts +7 -0
  856. package/src/astro/integration/runtime.ts +14 -0
  857. package/src/astro/integration/shims/use-sync-external-store-with-selector.js +2 -0
  858. package/src/astro/integration/shims/use-sync-external-store.js +4 -1
  859. package/src/astro/middleware/auth.ts +9 -2
  860. package/src/astro/routes/api/import/wordpress/analyze.ts +5 -29
  861. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +3 -3
  862. package/src/astro/routes/api/media/file/[...key].ts +18 -4
  863. package/src/astro/routes/api/oauth/token.ts +5 -1
  864. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +7 -1
  865. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -1
  866. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  867. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  868. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  869. package/src/astro/types.ts +4 -3
  870. package/src/auth/api-tokens.ts +3 -0
  871. package/src/cleanup.ts +44 -0
  872. package/src/components/inline-bubble-menu.tsx +109 -95
  873. package/src/components/inline-image.tsx +54 -48
  874. package/src/database/dialect-helpers.ts +10 -3
  875. package/src/database/repositories/byline.ts +22 -14
  876. package/src/database/repositories/content.ts +17 -4
  877. package/src/database/repositories/media.ts +17 -0
  878. package/src/database/repositories/menu.ts +163 -132
  879. package/src/database/repositories/types.ts +3 -3
  880. package/src/database/types.ts +1 -1
  881. package/src/emdash-runtime.ts +23 -7
  882. package/src/import/utils.ts +15 -2
  883. package/src/index.ts +1 -0
  884. package/src/loader.ts +106 -95
  885. package/src/media/content-disposition.ts +56 -0
  886. package/src/media/normalize.ts +2 -0
  887. package/src/media/usage/content-fields.ts +2 -1
  888. package/src/menus/index.ts +137 -25
  889. package/src/object-cache/index.ts +22 -0
  890. package/src/plugin-test-runtime.ts +1 -0
  891. package/src/query.ts +44 -40
  892. package/src/schema/types.ts +7 -6
  893. package/src/search/fts-manager.ts +5 -3
  894. package/src/seed/apply.ts +52 -44
  895. package/src/seed/types.ts +3 -3
  896. package/src/taxonomies/index.ts +22 -51
  897. package/src/transfer/import/advance.ts +12 -1
  898. package/src/transfer/import/scaffold.ts +7 -1
  899. package/src/transfer/import/stages.ts +53 -2
  900. package/src/utils/revalidating-cache.ts +85 -0
  901. package/src/visual-editing/toolbar.ts +7 -2
  902. package/src/widgets/index.ts +27 -13
  903. package/dist/action-token-B1ds4laA.mjs +0 -26
  904. package/dist/action-token-B1ds4laA.mjs.map +0 -1
  905. package/dist/activation-sGF9br3X.mjs +0 -387
  906. package/dist/activation-sGF9br3X.mjs.map +0 -1
  907. package/dist/adapters-BOMSX9PU.d.mts +0 -173
  908. package/dist/adapters-BOMSX9PU.d.mts.map +0 -1
  909. package/dist/after-PcEvMY_6.mjs +0 -96
  910. package/dist/after-PcEvMY_6.mjs.map +0 -1
  911. package/dist/allowed-origins-CovsTkm3.mjs +0 -116
  912. package/dist/allowed-origins-CovsTkm3.mjs.map +0 -1
  913. package/dist/api-C_LxFnOm.mjs +0 -5077
  914. package/dist/api-C_LxFnOm.mjs.map +0 -1
  915. package/dist/api-tokens-C7l0GUAF.mjs +0 -3
  916. package/dist/api-tokens-DQ9Ee-vP.mjs +0 -173
  917. package/dist/api-tokens-DQ9Ee-vP.mjs.map +0 -1
  918. package/dist/apply-CLjfxvyH.mjs +0 -1758
  919. package/dist/apply-CLjfxvyH.mjs.map +0 -1
  920. package/dist/approvals-ocK89i4H.mjs +0 -460
  921. package/dist/approvals-ocK89i4H.mjs.map +0 -1
  922. package/dist/artifact-fetch-CgvvpoWQ.mjs +0 -659
  923. package/dist/artifact-fetch-CgvvpoWQ.mjs.map +0 -1
  924. package/dist/artifacts-DwOYYBQm.mjs +0 -323
  925. package/dist/artifacts-DwOYYBQm.mjs.map +0 -1
  926. package/dist/authoritative-records-LPtrIGOY.mjs +0 -5183
  927. package/dist/authoritative-records-LPtrIGOY.mjs.map +0 -1
  928. package/dist/authorize-CoDsRRp5.mjs +0 -74
  929. package/dist/authorize-CoDsRRp5.mjs.map +0 -1
  930. package/dist/backup-2Wj-hTCN.mjs +0 -246
  931. package/dist/backup-2Wj-hTCN.mjs.map +0 -1
  932. package/dist/block-types-C3gJEe7l.mjs +0 -132
  933. package/dist/block-types-C3gJEe7l.mjs.map +0 -1
  934. package/dist/block-values-CgbMtSGU.mjs +0 -215
  935. package/dist/block-values-CgbMtSGU.mjs.map +0 -1
  936. package/dist/byline-CzGZC2Zs.mjs +0 -922
  937. package/dist/byline-CzGZC2Zs.mjs.map +0 -1
  938. package/dist/byline-fields-B1qHvRps.mjs +0 -280
  939. package/dist/byline-fields-B1qHvRps.mjs.map +0 -1
  940. package/dist/byline-fields-vYd_4Q1e.mjs +0 -123
  941. package/dist/byline-fields-vYd_4Q1e.mjs.map +0 -1
  942. package/dist/bylines-BF555iIz.mjs +0 -150
  943. package/dist/bylines-BF555iIz.mjs.map +0 -1
  944. package/dist/bylines-DJx6IWWi.mjs +0 -234
  945. package/dist/bylines-DJx6IWWi.mjs.map +0 -1
  946. package/dist/cache-BWzswWB-.mjs +0 -151
  947. package/dist/cache-BWzswWB-.mjs.map +0 -1
  948. package/dist/canonical-DjF_z6GI.mjs +0 -174
  949. package/dist/canonical-DjF_z6GI.mjs.map +0 -1
  950. package/dist/capture-triggers-D7g3fOZj.mjs +0 -362
  951. package/dist/capture-triggers-D7g3fOZj.mjs.map +0 -1
  952. package/dist/challenge-store-Cfjdvw86.mjs +0 -51
  953. package/dist/challenge-store-Cfjdvw86.mjs.map +0 -1
  954. package/dist/checksum-BF4acJwn.mjs +0 -162
  955. package/dist/checksum-BF4acJwn.mjs.map +0 -1
  956. package/dist/chrome-tags-BDs29G3g.mjs +0 -24
  957. package/dist/chrome-tags-BDs29G3g.mjs.map +0 -1
  958. package/dist/chunks-CYBOL-zn.mjs +0 -25
  959. package/dist/chunks-CYBOL-zn.mjs.map +0 -1
  960. package/dist/collection-slugs-cache-B2J5aESO.mjs +0 -91
  961. package/dist/collection-slugs-cache-B2J5aESO.mjs.map +0 -1
  962. package/dist/comment-DV7dybcs.mjs +0 -335
  963. package/dist/comment-DV7dybcs.mjs.map +0 -1
  964. package/dist/comment-reaction-CWwqiT6x.mjs +0 -85
  965. package/dist/comment-reaction-CWwqiT6x.mjs.map +0 -1
  966. package/dist/comments-DVjWJm8X.mjs +0 -99
  967. package/dist/comments-DVjWJm8X.mjs.map +0 -1
  968. package/dist/comments-Q-ILHCEI.mjs +0 -195
  969. package/dist/comments-Q-ILHCEI.mjs.map +0 -1
  970. package/dist/components-DnOmvvgg.mjs +0 -112
  971. package/dist/components-DnOmvvgg.mjs.map +0 -1
  972. package/dist/config-9IzA83_U.d.mts +0 -6811
  973. package/dist/config-9IzA83_U.d.mts.map +0 -1
  974. package/dist/config-BdQzFtmR.mjs +0 -228
  975. package/dist/config-BdQzFtmR.mjs.map +0 -1
  976. package/dist/config-Cs2RBkJ6.d.mts +0 -41
  977. package/dist/config-Cs2RBkJ6.d.mts.map +0 -1
  978. package/dist/connection-CiXgZyCY.mjs +0 -36
  979. package/dist/connection-CiXgZyCY.mjs.map +0 -1
  980. package/dist/content-Dt0Os_WQ.mjs +0 -2109
  981. package/dist/content-Dt0Os_WQ.mjs.map +0 -1
  982. package/dist/content-list-query-BK26u9Ly.d.mts +0 -26
  983. package/dist/content-list-query-BK26u9Ly.d.mts.map +0 -1
  984. package/dist/content-policy-BLDbNJOb.mjs +0 -46
  985. package/dist/content-policy-BLDbNJOb.mjs.map +0 -1
  986. package/dist/content-repair-CjwbLy4m.mjs +0 -442
  987. package/dist/content-repair-CjwbLy4m.mjs.map +0 -1
  988. package/dist/context-ErV7UdQY.mjs +0 -2089
  989. package/dist/context-ErV7UdQY.mjs.map +0 -1
  990. package/dist/credits-BRyjafiF.mjs +0 -110
  991. package/dist/credits-BRyjafiF.mjs.map +0 -1
  992. package/dist/cron-Bm5xa7tv.mjs +0 -306
  993. package/dist/cron-Bm5xa7tv.mjs.map +0 -1
  994. package/dist/dashboard-DVxQ5XiI.mjs +0 -168
  995. package/dist/dashboard-DVxQ5XiI.mjs.map +0 -1
  996. package/dist/default-B9Tf2n94.mjs +0 -81
  997. package/dist/default-B9Tf2n94.mjs.map +0 -1
  998. package/dist/deferred-tasks-CpPEqsga.d.mts +0 -9
  999. package/dist/deferred-tasks-CpPEqsga.d.mts.map +0 -1
  1000. package/dist/dev-typegen-ZeWYV8Jp.mjs +0 -29
  1001. package/dist/dev-typegen-ZeWYV8Jp.mjs.map +0 -1
  1002. package/dist/device-flow-BbYNZ9Xi.mjs +0 -521
  1003. package/dist/device-flow-BbYNZ9Xi.mjs.map +0 -1
  1004. package/dist/dialect-helpers-7_IqPdh9.mjs +0 -307
  1005. package/dist/dialect-helpers-7_IqPdh9.mjs.map +0 -1
  1006. package/dist/digest-DlBa7kJl.mjs +0 -194
  1007. package/dist/digest-DlBa7kJl.mjs.map +0 -1
  1008. package/dist/direct-executor-5T8gkhvA.mjs +0 -117
  1009. package/dist/direct-executor-5T8gkhvA.mjs.map +0 -1
  1010. package/dist/dist-DY0aOmAP.mjs +0 -810
  1011. package/dist/dist-DY0aOmAP.mjs.map +0 -1
  1012. package/dist/email-console-v3OM8It-.mjs +0 -50
  1013. package/dist/email-console-v3OM8It-.mjs.map +0 -1
  1014. package/dist/email-locale-CoZo-oZx.mjs +0 -25
  1015. package/dist/email-locale-CoZo-oZx.mjs.map +0 -1
  1016. package/dist/emdash-runtime-DwezbIqQ.mjs +0 -4392
  1017. package/dist/emdash-runtime-DwezbIqQ.mjs.map +0 -1
  1018. package/dist/enrich-C3XIJi0O.mjs +0 -194
  1019. package/dist/enrich-C3XIJi0O.mjs.map +0 -1
  1020. package/dist/entry-lock-CY7XpdSw.d.mts +0 -4568
  1021. package/dist/entry-lock-CY7XpdSw.d.mts.map +0 -1
  1022. package/dist/entry-lock-DDuWaAiP.mjs +0 -1211
  1023. package/dist/entry-lock-DDuWaAiP.mjs.map +0 -1
  1024. package/dist/entry-lock-D_Og9Gy3.mjs +0 -163
  1025. package/dist/entry-lock-D_Og9Gy3.mjs.map +0 -1
  1026. package/dist/entry-locks-Cp8_BcQQ.mjs +0 -167
  1027. package/dist/entry-locks-Cp8_BcQQ.mjs.map +0 -1
  1028. package/dist/env-types-Br8uywYA.mjs +0 -38
  1029. package/dist/env-types-Br8uywYA.mjs.map +0 -1
  1030. package/dist/error-CT2SsX5S.mjs +0 -90
  1031. package/dist/error-CT2SsX5S.mjs.map +0 -1
  1032. package/dist/errors-BMaCpLeS.mjs +0 -479
  1033. package/dist/errors-BMaCpLeS.mjs.map +0 -1
  1034. package/dist/errors-DlJwot7q.mjs +0 -120
  1035. package/dist/errors-DlJwot7q.mjs.map +0 -1
  1036. package/dist/escape-BfbDyuQ-.mjs +0 -9
  1037. package/dist/escape-BfbDyuQ-.mjs.map +0 -1
  1038. package/dist/fence-BOD3SxZG.mjs +0 -162
  1039. package/dist/fence-BOD3SxZG.mjs.map +0 -1
  1040. package/dist/field-defs-cache-C7sR7ZeU.mjs +0 -77
  1041. package/dist/field-defs-cache-C7sR7ZeU.mjs.map +0 -1
  1042. package/dist/field-map-C_rDXfdJ.mjs +0 -84
  1043. package/dist/field-map-C_rDXfdJ.mjs.map +0 -1
  1044. package/dist/fts-manager-BzFo0xx6.mjs +0 -483
  1045. package/dist/fts-manager-BzFo0xx6.mjs.map +0 -1
  1046. package/dist/gc-B_c3DPpi.mjs +0 -75
  1047. package/dist/gc-B_c3DPpi.mjs.map +0 -1
  1048. package/dist/hash-A-o2ZX8O.mjs +0 -37
  1049. package/dist/hash-A-o2ZX8O.mjs.map +0 -1
  1050. package/dist/hreflang-BpUK9Lcu.mjs +0 -105
  1051. package/dist/hreflang-BpUK9Lcu.mjs.map +0 -1
  1052. package/dist/hreflang-D07R-RbI.d.mts +0 -50
  1053. package/dist/hreflang-D07R-RbI.d.mts.map +0 -1
  1054. package/dist/http-route-dispatch-C2Ep2Uf6.mjs +0 -342
  1055. package/dist/http-route-dispatch-C2Ep2Uf6.mjs.map +0 -1
  1056. package/dist/identity-BivQ8wkV.mjs +0 -35
  1057. package/dist/identity-BivQ8wkV.mjs.map +0 -1
  1058. package/dist/import-B4UvHNJz.mjs +0 -2126
  1059. package/dist/import-B4UvHNJz.mjs.map +0 -1
  1060. package/dist/index-C37Ty40w.d.mts +0 -623
  1061. package/dist/index-C37Ty40w.d.mts.map +0 -1
  1062. package/dist/install-finalization-BbYaB4wj.mjs +0 -58
  1063. package/dist/install-finalization-BbYaB4wj.mjs.map +0 -1
  1064. package/dist/json-recordset-BjYIWFkV.mjs +0 -12
  1065. package/dist/json-recordset-BjYIWFkV.mjs.map +0 -1
  1066. package/dist/json-schema-Cde7le0s.mjs +0 -15
  1067. package/dist/json-schema-Cde7le0s.mjs.map +0 -1
  1068. package/dist/keys-CusTXpw-.mjs +0 -61
  1069. package/dist/keys-CusTXpw-.mjs.map +0 -1
  1070. package/dist/kinds-DogmNB6n.mjs +0 -974
  1071. package/dist/kinds-DogmNB6n.mjs.map +0 -1
  1072. package/dist/lifecycle-BLCoCz4T.mjs +0 -25
  1073. package/dist/lifecycle-BLCoCz4T.mjs.map +0 -1
  1074. package/dist/load-Dds3KhXr.mjs +0 -28
  1075. package/dist/load-Dds3KhXr.mjs.map +0 -1
  1076. package/dist/loader-D4w4XE7q.mjs +0 -1420
  1077. package/dist/loader-D4w4XE7q.mjs.map +0 -1
  1078. package/dist/loops-IYgzQdQu.mjs +0 -205
  1079. package/dist/loops-IYgzQdQu.mjs.map +0 -1
  1080. package/dist/manifest-builder-CGF5kujD.mjs +0 -196
  1081. package/dist/manifest-builder-CGF5kujD.mjs.map +0 -1
  1082. package/dist/manifest-schema-B0BxPSjB.mjs +0 -497
  1083. package/dist/manifest-schema-B0BxPSjB.mjs.map +0 -1
  1084. package/dist/marketplace-DNvEGLqU.mjs +0 -257
  1085. package/dist/marketplace-DNvEGLqU.mjs.map +0 -1
  1086. package/dist/media-BL9MRrSG.mjs +0 -294
  1087. package/dist/media-BL9MRrSG.mjs.map +0 -1
  1088. package/dist/media-B_x5B9EA.mjs +0 -373
  1089. package/dist/media-B_x5B9EA.mjs.map +0 -1
  1090. package/dist/media-allowlist-CpmqBbIQ.mjs +0 -45
  1091. package/dist/media-allowlist-CpmqBbIQ.mjs.map +0 -1
  1092. package/dist/media-folders-CNs_A_B-.mjs +0 -210
  1093. package/dist/media-folders-CNs_A_B-.mjs.map +0 -1
  1094. package/dist/media-qTTHVkls.mjs +0 -416
  1095. package/dist/media-qTTHVkls.mjs.map +0 -1
  1096. package/dist/media-url-GJboA1fl.mjs +0 -43
  1097. package/dist/media-url-GJboA1fl.mjs.map +0 -1
  1098. package/dist/media-usage-ClWgrX0d.mjs +0 -282
  1099. package/dist/media-usage-ClWgrX0d.mjs.map +0 -1
  1100. package/dist/media-usage-activation-B8Fjtq0h.mjs +0 -78
  1101. package/dist/media-usage-activation-B8Fjtq0h.mjs.map +0 -1
  1102. package/dist/media-usage-work-L8-Au4j-.mjs +0 -1036
  1103. package/dist/media-usage-work-L8-Au4j-.mjs.map +0 -1
  1104. package/dist/media-usage-work-LXgze5j9.mjs +0 -151
  1105. package/dist/media-usage-work-LXgze5j9.mjs.map +0 -1
  1106. package/dist/menus-BAxcbsbv.mjs +0 -818
  1107. package/dist/menus-BAxcbsbv.mjs.map +0 -1
  1108. package/dist/menus-BI6oBXco.mjs +0 -92
  1109. package/dist/menus-BI6oBXco.mjs.map +0 -1
  1110. package/dist/menus-fvGFd4m6.mjs +0 -3725
  1111. package/dist/menus-fvGFd4m6.mjs.map +0 -1
  1112. package/dist/mime-DwhtRyUt.mjs +0 -81
  1113. package/dist/mime-DwhtRyUt.mjs.map +0 -1
  1114. package/dist/mode-DIDSUwuN.mjs +0 -23
  1115. package/dist/mode-DIDSUwuN.mjs.map +0 -1
  1116. package/dist/node-sqlite-compat-Ddr_mlR9.mjs +0 -63
  1117. package/dist/node-sqlite-compat-Ddr_mlR9.mjs.map +0 -1
  1118. package/dist/normalize-Ip_hFAm8.mjs +0 -216
  1119. package/dist/normalize-Ip_hFAm8.mjs.map +0 -1
  1120. package/dist/oauth-authorization-CcMgeT8R.mjs +0 -274
  1121. package/dist/oauth-authorization-CcMgeT8R.mjs.map +0 -1
  1122. package/dist/oauth-clients-C_osi0PU.mjs +0 -266
  1123. package/dist/oauth-clients-C_osi0PU.mjs.map +0 -1
  1124. package/dist/oauth-state-store-DGLP-6CK.mjs +0 -50
  1125. package/dist/oauth-state-store-DGLP-6CK.mjs.map +0 -1
  1126. package/dist/oauth-user-lookup-z77Ee0Hm.mjs +0 -26
  1127. package/dist/oauth-user-lookup-z77Ee0Hm.mjs.map +0 -1
  1128. package/dist/object-cache-EjasjtoQ.mjs +0 -586
  1129. package/dist/object-cache-EjasjtoQ.mjs.map +0 -1
  1130. package/dist/options-CmUpkyKW.d.mts +0 -81
  1131. package/dist/options-CmUpkyKW.d.mts.map +0 -1
  1132. package/dist/ownership-DCk5NutQ.mjs +0 -12
  1133. package/dist/ownership-DCk5NutQ.mjs.map +0 -1
  1134. package/dist/parse-2W-E2f7w.mjs +0 -81
  1135. package/dist/parse-2W-E2f7w.mjs.map +0 -1
  1136. package/dist/parse-6pN8Xqg5.d.mts +0 -176
  1137. package/dist/parse-6pN8Xqg5.d.mts.map +0 -1
  1138. package/dist/passkey-config-DTTZB6EI.mjs +0 -46
  1139. package/dist/passkey-config-DTTZB6EI.mjs.map +0 -1
  1140. package/dist/paths-CQA62503.mjs +0 -77
  1141. package/dist/paths-CQA62503.mjs.map +0 -1
  1142. package/dist/placeholder-BlfXkucE.d.mts +0 -313
  1143. package/dist/placeholder-BlfXkucE.d.mts.map +0 -1
  1144. package/dist/plan-B95eiwnF.mjs +0 -135
  1145. package/dist/plan-B95eiwnF.mjs.map +0 -1
  1146. package/dist/plugin-tool-name-BDA7m4Xa.mjs +0 -27
  1147. package/dist/plugin-tool-name-BDA7m4Xa.mjs.map +0 -1
  1148. package/dist/plugins-BhxLJ008.mjs +0 -261
  1149. package/dist/plugins-BhxLJ008.mjs.map +0 -1
  1150. package/dist/policy-DOJ2sPqB.mjs +0 -53
  1151. package/dist/policy-DOJ2sPqB.mjs.map +0 -1
  1152. package/dist/portable-text-RCMpCj47.mjs +0 -311
  1153. package/dist/portable-text-RCMpCj47.mjs.map +0 -1
  1154. package/dist/preview-DFwL5APO.mjs +0 -107
  1155. package/dist/preview-DFwL5APO.mjs.map +0 -1
  1156. package/dist/protocol-B-ztxp_y.d.mts +0 -65
  1157. package/dist/protocol-B-ztxp_y.d.mts.map +0 -1
  1158. package/dist/public-plugin-api-routes-ik4fPZMv.mjs +0 -316
  1159. package/dist/public-plugin-api-routes-ik4fPZMv.mjs.map +0 -1
  1160. package/dist/public-submission-C5JZIykp.mjs +0 -251
  1161. package/dist/public-submission-C5JZIykp.mjs.map +0 -1
  1162. package/dist/public-url-CQwzRljH.mjs +0 -101
  1163. package/dist/public-url-CQwzRljH.mjs.map +0 -1
  1164. package/dist/query-DuwyFr5Z.mjs +0 -41
  1165. package/dist/query-DuwyFr5Z.mjs.map +0 -1
  1166. package/dist/query-eR_Nz70M.mjs +0 -1157
  1167. package/dist/query-eR_Nz70M.mjs.map +0 -1
  1168. package/dist/range-BQWPjWgQ.mjs +0 -51
  1169. package/dist/range-BQWPjWgQ.mjs.map +0 -1
  1170. package/dist/rate-limit-mPKeQ3sm.mjs +0 -127
  1171. package/dist/rate-limit-mPKeQ3sm.mjs.map +0 -1
  1172. package/dist/receipt-CmUpyuW5.mjs +0 -43
  1173. package/dist/receipt-CmUpyuW5.mjs.map +0 -1
  1174. package/dist/redirect-BtiMkehU.mjs +0 -19
  1175. package/dist/redirect-BtiMkehU.mjs.map +0 -1
  1176. package/dist/redirect-DcmNMvOs.mjs +0 -423
  1177. package/dist/redirect-DcmNMvOs.mjs.map +0 -1
  1178. package/dist/redirect-paths-K5i3xYfR.mjs +0 -36
  1179. package/dist/redirect-paths-K5i3xYfR.mjs.map +0 -1
  1180. package/dist/redirects-BA_TvtuH.mjs +0 -148
  1181. package/dist/redirects-BA_TvtuH.mjs.map +0 -1
  1182. package/dist/redirects-BIrRvgn4.mjs +0 -446
  1183. package/dist/redirects-BIrRvgn4.mjs.map +0 -1
  1184. package/dist/registry-DymfZkAN.mjs +0 -8374
  1185. package/dist/registry-DymfZkAN.mjs.map +0 -1
  1186. package/dist/relations-DrEs3Sc1.mjs +0 -789
  1187. package/dist/relations-DrEs3Sc1.mjs.map +0 -1
  1188. package/dist/request-meta-o8RIf9pa.mjs +0 -141
  1189. package/dist/request-meta-o8RIf9pa.mjs.map +0 -1
  1190. package/dist/resolve-CVy9xgy_.mjs +0 -102
  1191. package/dist/resolve-CVy9xgy_.mjs.map +0 -1
  1192. package/dist/route-cache-DAG5dPhh.mjs +0 -20
  1193. package/dist/route-cache-DAG5dPhh.mjs.map +0 -1
  1194. package/dist/route-wire-Xbsu8Vih.mjs +0 -197
  1195. package/dist/route-wire-Xbsu8Vih.mjs.map +0 -1
  1196. package/dist/routes-YQkSOsws.mjs +0 -272
  1197. package/dist/routes-YQkSOsws.mjs.map +0 -1
  1198. package/dist/runner-CLorw5vo.mjs +0 -6669
  1199. package/dist/runner-CLorw5vo.mjs.map +0 -1
  1200. package/dist/runner-g1A9P-wD.d.mts +0 -73
  1201. package/dist/runner-g1A9P-wD.d.mts.map +0 -1
  1202. package/dist/schema-Bss8qImF.mjs +0 -13
  1203. package/dist/schema-Bss8qImF.mjs.map +0 -1
  1204. package/dist/schema-C036pqEw.mjs +0 -815
  1205. package/dist/schema-C036pqEw.mjs.map +0 -1
  1206. package/dist/scopes-C_SoYl9x.mjs +0 -34
  1207. package/dist/scopes-C_SoYl9x.mjs.map +0 -1
  1208. package/dist/search-uNqCgePJ.mjs +0 -450
  1209. package/dist/search-uNqCgePJ.mjs.map +0 -1
  1210. package/dist/secrets-Cc_O3Kp-.mjs +0 -369
  1211. package/dist/secrets-Cc_O3Kp-.mjs.map +0 -1
  1212. package/dist/sections-BLusMa96.mjs +0 -346
  1213. package/dist/sections-BLusMa96.mjs.map +0 -1
  1214. package/dist/seo-BodxIpws.mjs +0 -188
  1215. package/dist/seo-BodxIpws.mjs.map +0 -1
  1216. package/dist/seo-DaMYIQY8.mjs +0 -133
  1217. package/dist/seo-DaMYIQY8.mjs.map +0 -1
  1218. package/dist/service-BuM1BRsA.mjs +0 -150
  1219. package/dist/service-BuM1BRsA.mjs.map +0 -1
  1220. package/dist/session-user-2DpQDMKw.mjs +0 -61
  1221. package/dist/session-user-2DpQDMKw.mjs.map +0 -1
  1222. package/dist/settings-B3ZmPF_8.mjs +0 -73
  1223. package/dist/settings-B3ZmPF_8.mjs.map +0 -1
  1224. package/dist/settings-P5hwPX6_.mjs +0 -66
  1225. package/dist/settings-P5hwPX6_.mjs.map +0 -1
  1226. package/dist/settings-yIqoN-Ok.mjs +0 -519
  1227. package/dist/settings-yIqoN-Ok.mjs.map +0 -1
  1228. package/dist/setup-complete-eu6MUQnt.mjs +0 -65
  1229. package/dist/setup-complete-eu6MUQnt.mjs.map +0 -1
  1230. package/dist/setup-nonce-CyPOapqY.mjs +0 -25
  1231. package/dist/setup-nonce-CyPOapqY.mjs.map +0 -1
  1232. package/dist/site-domain-8lEJl_0U.mjs +0 -131
  1233. package/dist/site-domain-8lEJl_0U.mjs.map +0 -1
  1234. package/dist/site-settings-uPkW0e6o.mjs +0 -50
  1235. package/dist/site-settings-uPkW0e6o.mjs.map +0 -1
  1236. package/dist/site-url-25SGVXwL.mjs +0 -45
  1237. package/dist/site-url-25SGVXwL.mjs.map +0 -1
  1238. package/dist/sitemap-name-DTK7CYnY.mjs +0 -26
  1239. package/dist/sitemap-name-DTK7CYnY.mjs.map +0 -1
  1240. package/dist/slug-BEDl2IJY.mjs +0 -16
  1241. package/dist/slug-BEDl2IJY.mjs.map +0 -1
  1242. package/dist/snapshot-CvkIBRLY.mjs +0 -414
  1243. package/dist/snapshot-CvkIBRLY.mjs.map +0 -1
  1244. package/dist/ssrf-mcCKMH6B.mjs +0 -406
  1245. package/dist/ssrf-mcCKMH6B.mjs.map +0 -1
  1246. package/dist/stage-BQfGzGOy.mjs +0 -662
  1247. package/dist/stage-BQfGzGOy.mjs.map +0 -1
  1248. package/dist/staged-B5vQGeSf.mjs +0 -686
  1249. package/dist/staged-B5vQGeSf.mjs.map +0 -1
  1250. package/dist/state-dO6t6OxV.mjs +0 -178
  1251. package/dist/state-dO6t6OxV.mjs.map +0 -1
  1252. package/dist/status-DSURZwKS.mjs +0 -30
  1253. package/dist/status-DSURZwKS.mjs.map +0 -1
  1254. package/dist/storage-query-Cy0SZ8iG.d.mts +0 -1619
  1255. package/dist/storage-query-Cy0SZ8iG.d.mts.map +0 -1
  1256. package/dist/tar-DWzcUZ_Q.mjs +0 -449
  1257. package/dist/tar-DWzcUZ_Q.mjs.map +0 -1
  1258. package/dist/target-C9htUbrT.mjs +0 -27
  1259. package/dist/target-C9htUbrT.mjs.map +0 -1
  1260. package/dist/taxonomies-By2aGvq2.mjs +0 -729
  1261. package/dist/taxonomies-By2aGvq2.mjs.map +0 -1
  1262. package/dist/taxonomies-CVRd_jz0.mjs +0 -937
  1263. package/dist/taxonomies-CVRd_jz0.mjs.map +0 -1
  1264. package/dist/taxonomy-BG_xu2Qf.mjs +0 -563
  1265. package/dist/taxonomy-BG_xu2Qf.mjs.map +0 -1
  1266. package/dist/tokens-U5vzgSrM.mjs +0 -171
  1267. package/dist/tokens-U5vzgSrM.mjs.map +0 -1
  1268. package/dist/transfer-DA0OSfaT.mjs +0 -8873
  1269. package/dist/transfer-DA0OSfaT.mjs.map +0 -1
  1270. package/dist/transfer-Pyf3d7ka.mjs +0 -166
  1271. package/dist/transfer-Pyf3d7ka.mjs.map +0 -1
  1272. package/dist/transfer-download-cX7SuWEy.mjs +0 -33
  1273. package/dist/transfer-download-cX7SuWEy.mjs.map +0 -1
  1274. package/dist/transformations-DczubD4j.mjs +0 -196
  1275. package/dist/transformations-DczubD4j.mjs.map +0 -1
  1276. package/dist/transport-DtIrjEFO.mjs +0 -137
  1277. package/dist/transport-DtIrjEFO.mjs.map +0 -1
  1278. package/dist/trusted-proxy-CDRd5Kmw.mjs +0 -51
  1279. package/dist/trusted-proxy-CDRd5Kmw.mjs.map +0 -1
  1280. package/dist/turnstile-Ct5YuFNY.mjs +0 -58
  1281. package/dist/turnstile-Ct5YuFNY.mjs.map +0 -1
  1282. package/dist/types-Bgujop4S.d.mts +0 -374
  1283. package/dist/types-Bgujop4S.d.mts.map +0 -1
  1284. package/dist/types-BirHUEXt.mjs +0 -18
  1285. package/dist/types-BirHUEXt.mjs.map +0 -1
  1286. package/dist/types-BqJgTL_y.d.mts +0 -293
  1287. package/dist/types-BqJgTL_y.d.mts.map +0 -1
  1288. package/dist/types-C-lrOt9T.d.mts +0 -87
  1289. package/dist/types-C-lrOt9T.d.mts.map +0 -1
  1290. package/dist/types-CCEHAhOv.d.mts +0 -916
  1291. package/dist/types-CCEHAhOv.d.mts.map +0 -1
  1292. package/dist/types-CLVwYRBr.d.mts +0 -227
  1293. package/dist/types-CLVwYRBr.d.mts.map +0 -1
  1294. package/dist/types-DVbTb4Hk.mjs +0 -77
  1295. package/dist/types-DVbTb4Hk.mjs.map +0 -1
  1296. package/dist/types-Ddku19Zw.d.mts +0 -209
  1297. package/dist/types-Ddku19Zw.d.mts.map +0 -1
  1298. package/dist/types-FIiGQ3PE.mjs +0 -16
  1299. package/dist/types-FIiGQ3PE.mjs.map +0 -1
  1300. package/dist/types-OauzCOY0.mjs +0 -37
  1301. package/dist/types-OauzCOY0.mjs.map +0 -1
  1302. package/dist/types-mQGTpP-4.d.mts +0 -1741
  1303. package/dist/types-mQGTpP-4.d.mts.map +0 -1
  1304. package/dist/types-nbjz3Mgm.d.mts +0 -125
  1305. package/dist/types-nbjz3Mgm.d.mts.map +0 -1
  1306. package/dist/update-check-hW32-0pf.mjs +0 -161
  1307. package/dist/update-check-hW32-0pf.mjs.map +0 -1
  1308. package/dist/upload-attempts-Bpik1TLF.mjs +0 -32
  1309. package/dist/upload-attempts-Bpik1TLF.mjs.map +0 -1
  1310. package/dist/url-pattern-CJeCyNij.mjs +0 -41
  1311. package/dist/url-pattern-CJeCyNij.mjs.map +0 -1
  1312. package/dist/user-nQInBZbE.mjs +0 -171
  1313. package/dist/user-nQInBZbE.mjs.map +0 -1
  1314. package/dist/utils-govudc_U.mjs +0 -442
  1315. package/dist/utils-govudc_U.mjs.map +0 -1
  1316. package/dist/validate-BxLvcDYh.mjs +0 -524
  1317. package/dist/validate-BxLvcDYh.mjs.map +0 -1
  1318. package/dist/validate-mnoVfASU.d.mts +0 -468
  1319. package/dist/validate-mnoVfASU.d.mts.map +0 -1
  1320. package/dist/validation-DQDEvh87.mjs +0 -221
  1321. package/dist/validation-DQDEvh87.mjs.map +0 -1
  1322. package/dist/version-BOFfLiVT.mjs +0 -49
  1323. package/dist/version-BOFfLiVT.mjs.map +0 -1
  1324. package/dist/version-Dcvx_C9g.mjs +0 -7
  1325. package/dist/version-Dcvx_C9g.mjs.map +0 -1
  1326. package/dist/version-DzTJ3gD7.mjs +0 -9
  1327. package/dist/version-DzTJ3gD7.mjs.map +0 -1
  1328. package/dist/video-BX7AI5nJ.mjs +0 -54
  1329. package/dist/video-BX7AI5nJ.mjs.map +0 -1
  1330. package/dist/virtual-modules-CU29aip9.mjs +0 -515
  1331. package/dist/virtual-modules-CU29aip9.mjs.map +0 -1
  1332. package/dist/widgets-HIeFmZxt.mjs +0 -121
  1333. package/dist/widgets-HIeFmZxt.mjs.map +0 -1
  1334. package/dist/wxr-taxonomies-DyOGhl8W.mjs +0 -454
  1335. package/dist/wxr-taxonomies-DyOGhl8W.mjs.map +0 -1
  1336. package/dist/zod-generator-VxCPVDpo.mjs +0 -425
  1337. package/dist/zod-generator-VxCPVDpo.mjs.map +0 -1
  1338. /package/dist/{ssrf-BBXcxG-f.mjs → ssrf-DM0E-D_8.mjs} +0 -0
@@ -0,0 +1,362 @@
1
+ import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
2
+ import { b as tableExists, u as isPostgres } from "./dialect-helpers-B1XN2HGB.mjs";
3
+ import { sql } from "kysely";
4
+
5
+ //#region src/media/usage/capture-triggers.ts
6
+ const POSTGRES_TRIGGER_FUNCTION = "emdash_media_usage_capture_work";
7
+ const POSTGRES_IDENTIFIER_LIMIT = 63;
8
+ const CAPTURE_TRIGGER_VERSION = 1;
9
+ const OWNED_TRIGGER_PREFIX = "emdash_mu_";
10
+ const MAX_OWNED_CAPTURE_TRIGGERS = 100;
11
+ const WHITESPACE_PATTERN = /\s+/g;
12
+ const TRAILING_SEMICOLON_PATTERN = /;$/;
13
+ async function installMediaUsageCaptureTriggers(db, identity, options = {}) {
14
+ const identifiers = await captureIdentifiers(identity);
15
+ if (isPostgres(db)) await installPostgresFunction(db);
16
+ const installedNames = await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1);
17
+ if (installedNames.length > MAX_OWNED_CAPTURE_TRIGGERS) throw new Error("Media usage capture trigger set exceeds the activation limit");
18
+ if (await hasExactCaptureTriggers(db, identifiers, identity, installedNames)) return;
19
+ await assertCaptureLifecycle(db, identity, ["installing"]);
20
+ const expectedNames = new Set(Object.values(identifiers.triggerNames));
21
+ const retainedNames = new Set(options.replaceExisting === false ? installedNames.filter((name) => expectedNames.has(name)) : []);
22
+ await removeCaptureTriggers(db, identifiers.tableName, installedNames.filter((name) => !retainedNames.has(name)));
23
+ for (const operation of captureOperations) {
24
+ if (retainedNames.has(identifiers.triggerNames[operation])) continue;
25
+ if (isPostgres(db)) await postgresCreateTrigger(db, identifiers.tableName, identifiers.triggerNames[operation], operation, identity);
26
+ else await sqliteCreateTrigger(db, identifiers.tableName, identifiers.triggerNames[operation], operation, identity);
27
+ }
28
+ await assertExpectedTriggerSet(db, identifiers, identity);
29
+ }
30
+ async function verifyMediaUsageCaptureTriggers(db, identity) {
31
+ const identifiers = await captureIdentifiers(identity);
32
+ if (!await tableExists(db, identifiers.tableName)) return false;
33
+ return hasExactCaptureTriggers(db, identifiers, identity, await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1));
34
+ }
35
+ const captureOperations = [
36
+ "insert",
37
+ "update",
38
+ "delete"
39
+ ];
40
+ async function captureIdentifiers(identity) {
41
+ validateIdentifier(identity.collectionSlug, "collection slug");
42
+ const tableName = `ec_${identity.collectionSlug}`;
43
+ validateIdentifier(tableName, "content table");
44
+ const digest = await identityDigest(`${CAPTURE_TRIGGER_VERSION}:${identity.collectionId}:${identity.collectionSlug}`);
45
+ const triggerNames = {
46
+ insert: `emdash_mu_${digest}_ai`,
47
+ update: `emdash_mu_${digest}_au`,
48
+ delete: `emdash_mu_${digest}_ad`
49
+ };
50
+ for (const triggerName of Object.values(triggerNames)) {
51
+ validateIdentifier(triggerName, "media usage trigger");
52
+ if (triggerName.length > POSTGRES_IDENTIFIER_LIMIT) throw new Error(`Media usage trigger name exceeds ${POSTGRES_IDENTIFIER_LIMIT} bytes`);
53
+ }
54
+ return {
55
+ tableName,
56
+ triggerNames
57
+ };
58
+ }
59
+ async function identityDigest(value) {
60
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
61
+ return Array.from(new Uint8Array(digest).slice(0, 16), (byte) => byte.toString(16).padStart(2, "0")).join("");
62
+ }
63
+ async function removeCaptureTriggers(db, tableName, triggerNames) {
64
+ for (const triggerName of triggerNames) {
65
+ validateIdentifier(triggerName, "media usage trigger");
66
+ if (isPostgres(db)) await sql`
67
+ DROP TRIGGER IF EXISTS ${sql.ref(triggerName)} ON ${sql.ref(tableName)}
68
+ `.execute(db);
69
+ else await sql`DROP TRIGGER IF EXISTS ${sql.ref(triggerName)}`.execute(db);
70
+ }
71
+ }
72
+ async function listOwnedCaptureTriggers(db, tableName, limit) {
73
+ const limitClause = limit === void 0 ? sql`` : sql`LIMIT ${limit}`;
74
+ if (isPostgres(db)) return (await sql`
75
+ SELECT trigger.tgname AS name
76
+ FROM pg_trigger AS trigger
77
+ INNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid
78
+ INNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace
79
+ WHERE namespace.nspname = current_schema()
80
+ AND relation.relname = ${tableName}
81
+ AND NOT trigger.tgisinternal
82
+ AND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}
83
+ ${limitClause}
84
+ `.execute(db)).rows.map((row) => row.name);
85
+ return (await sql`
86
+ SELECT name
87
+ FROM sqlite_master
88
+ WHERE type = 'trigger'
89
+ AND tbl_name = ${tableName}
90
+ AND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}
91
+ ${limitClause}
92
+ `.execute(db)).rows.map((row) => row.name);
93
+ }
94
+ async function hasExactCaptureTriggers(db, identifiers, identity, installedNames) {
95
+ const expectedNames = new Set(Object.values(identifiers.triggerNames));
96
+ if (installedNames.length !== expectedNames.size || installedNames.some((name) => !expectedNames.has(name))) return false;
97
+ if (isPostgres(db)) {
98
+ const result = await sql`
99
+ SELECT
100
+ trigger.tgname AS name,
101
+ trigger.tgtype AS trigger_type,
102
+ procedure.proname AS function_name,
103
+ encode(trigger.tgargs, 'hex') AS arguments_hex,
104
+ trigger.tgenabled AS enabled,
105
+ trigger.tgqual IS NOT NULL AS has_when
106
+ FROM pg_trigger AS trigger
107
+ INNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid
108
+ INNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace
109
+ INNER JOIN pg_proc AS procedure ON procedure.oid = trigger.tgfoid
110
+ INNER JOIN pg_namespace AS function_namespace ON function_namespace.oid = procedure.pronamespace
111
+ WHERE namespace.nspname = current_schema()
112
+ AND function_namespace.nspname = current_schema()
113
+ AND relation.relname = ${identifiers.tableName}
114
+ AND NOT trigger.tgisinternal
115
+ AND trigger.tgconstraint = 0
116
+ AND NOT trigger.tgdeferrable
117
+ AND NOT trigger.tginitdeferred
118
+ AND trigger.tgattr = ''::int2vector
119
+ AND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}
120
+ `.execute(db);
121
+ const expectedArguments = triggerArgumentsHex(identity);
122
+ return captureOperations.every((operation) => {
123
+ const row = result.rows.find((candidate) => candidate.name === identifiers.triggerNames[operation]);
124
+ return row?.function_name === POSTGRES_TRIGGER_FUNCTION && Number(row.trigger_type) === postgresTriggerType(operation) && row.arguments_hex === expectedArguments && row.enabled === "O" && row.has_when === false;
125
+ });
126
+ }
127
+ const result = await sql`
128
+ SELECT name, sql AS definition
129
+ FROM sqlite_master
130
+ WHERE type = 'trigger'
131
+ AND tbl_name = ${identifiers.tableName}
132
+ AND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}
133
+ `.execute(db);
134
+ return captureOperations.every((operation) => {
135
+ const row = result.rows.find((candidate) => candidate.name === identifiers.triggerNames[operation]);
136
+ const contentId = operation === "delete" ? sql`OLD.id` : sql`NEW.id`;
137
+ const expected = sqliteTriggerSql(identifiers.tableName, identifiers.triggerNames[operation], operationSql(operation), contentId, identity).compile(db).sql;
138
+ return row ? normalizeDdl(row.definition) === normalizeDdl(expected) : false;
139
+ });
140
+ }
141
+ function triggerArgumentsHex(identity) {
142
+ const bytes = new TextEncoder().encode(`${identity.collectionId}\0${identity.collectionSlug}\0`);
143
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
144
+ }
145
+ function postgresTriggerType(operation) {
146
+ switch (operation) {
147
+ case "insert": return 5;
148
+ case "update": return 17;
149
+ case "delete": return 9;
150
+ }
151
+ }
152
+ function normalizeDdl(definition) {
153
+ return definition.replace(WHITESPACE_PATTERN, " ").trim().replace(TRAILING_SEMICOLON_PATTERN, "");
154
+ }
155
+ async function assertCaptureLifecycle(db, identity, allowedStates) {
156
+ const lifecycle = await db.selectFrom("_emdash_media_usage_index_status").select("capture_state").where("adapter_id", "=", "content-media").where("scope_type", "=", "collection").where("scope_key", "=", identity.collectionSlug).where("collection_id", "=", identity.collectionId).executeTakeFirst();
157
+ if (!lifecycle?.capture_state || !allowedStates.includes(lifecycle.capture_state)) throw new Error("Media usage capture trigger changes require a fenced collection lifecycle");
158
+ }
159
+ async function assertExpectedTriggerSet(db, identifiers, identity) {
160
+ if (!await hasExactCaptureTriggers(db, identifiers, identity, await listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1))) throw new Error("Media usage capture trigger installation is incomplete");
161
+ }
162
+ async function installPostgresFunction(db) {
163
+ await sql`
164
+ CREATE OR REPLACE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}()
165
+ RETURNS trigger
166
+ LANGUAGE plpgsql
167
+ AS $function$
168
+ DECLARE
169
+ v_collection_id text := TG_ARGV[0];
170
+ v_collection_slug text := TG_ARGV[1];
171
+ v_content_id text;
172
+ v_epoch bigint;
173
+ v_now text := to_char(
174
+ clock_timestamp() AT TIME ZONE 'UTC',
175
+ 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
176
+ );
177
+ BEGIN
178
+ IF TG_OP = 'DELETE' THEN
179
+ v_content_id := OLD.id;
180
+ ELSE
181
+ v_content_id := NEW.id;
182
+ END IF;
183
+
184
+ UPDATE _emdash_media_usage_index_status
185
+ SET change_epoch = change_epoch + 1,
186
+ status = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,
187
+ completed_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,
188
+ updated_at = v_now
189
+ WHERE adapter_id = 'content-media'
190
+ AND scope_type = 'collection'
191
+ AND scope_key = v_collection_slug
192
+ AND collection_id = v_collection_id
193
+ AND capture_state = 'active'
194
+ AND EXISTS (
195
+ SELECT 1
196
+ FROM _emdash_collections AS collection
197
+ WHERE collection.id = v_collection_id
198
+ AND collection.slug = v_collection_slug
199
+ )
200
+ RETURNING change_epoch INTO v_epoch;
201
+
202
+ IF NOT FOUND THEN
203
+ RAISE EXCEPTION USING
204
+ ERRCODE = 'P0001',
205
+ MESSAGE = 'media usage capture inactive';
206
+ END IF;
207
+
208
+ INSERT INTO _emdash_media_usage_work (
209
+ collection_id,
210
+ collection_slug,
211
+ content_id,
212
+ change_epoch,
213
+ work_version,
214
+ state,
215
+ attempt_count,
216
+ next_attempt_at,
217
+ lease_token,
218
+ lease_expires_at,
219
+ last_attempted_at,
220
+ last_error_code,
221
+ created_at,
222
+ updated_at
223
+ )
224
+ VALUES (
225
+ v_collection_id,
226
+ v_collection_slug,
227
+ v_content_id,
228
+ v_epoch,
229
+ 1,
230
+ 'pending',
231
+ 0,
232
+ v_now,
233
+ NULL,
234
+ NULL,
235
+ NULL,
236
+ NULL,
237
+ v_now,
238
+ v_now
239
+ )
240
+ ON CONFLICT (collection_id, content_id) DO UPDATE SET
241
+ collection_slug = EXCLUDED.collection_slug,
242
+ change_epoch = EXCLUDED.change_epoch,
243
+ work_version = _emdash_media_usage_work.work_version + 1,
244
+ state = 'pending',
245
+ attempt_count = 0,
246
+ next_attempt_at = EXCLUDED.next_attempt_at,
247
+ lease_token = NULL,
248
+ lease_expires_at = NULL,
249
+ last_attempted_at = NULL,
250
+ last_error_code = NULL,
251
+ updated_at = EXCLUDED.updated_at;
252
+
253
+ RETURN NULL;
254
+ END;
255
+ $function$
256
+ `.execute(db);
257
+ }
258
+ async function postgresCreateTrigger(db, tableName, triggerName, operation, identity) {
259
+ await sql`
260
+ CREATE TRIGGER ${sql.ref(triggerName)}
261
+ AFTER ${operationSql(operation)} ON ${sql.ref(tableName)}
262
+ FOR EACH ROW
263
+ EXECUTE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}(
264
+ ${sql.lit(identity.collectionId)},
265
+ ${sql.lit(identity.collectionSlug)}
266
+ )
267
+ `.execute(db);
268
+ }
269
+ async function sqliteCreateTrigger(db, tableName, triggerName, operation, identity) {
270
+ const contentId = operation === "delete" ? sql`OLD.id` : sql`NEW.id`;
271
+ await sqliteTriggerSql(tableName, triggerName, operationSql(operation), contentId, identity).execute(db);
272
+ }
273
+ function sqliteTriggerSql(tableName, triggerName, operation, contentId, identity) {
274
+ return sql`
275
+ CREATE TRIGGER ${sql.ref(triggerName)}
276
+ AFTER ${operation} ON ${sql.ref(tableName)}
277
+ FOR EACH ROW
278
+ BEGIN
279
+ UPDATE _emdash_media_usage_index_status
280
+ SET change_epoch = change_epoch + 1,
281
+ status = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,
282
+ completed_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,
283
+ updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
284
+ WHERE adapter_id = 'content-media'
285
+ AND scope_type = 'collection'
286
+ AND scope_key = ${sql.lit(identity.collectionSlug)}
287
+ AND collection_id = ${sql.lit(identity.collectionId)}
288
+ AND capture_state = 'active'
289
+ AND EXISTS (
290
+ SELECT 1
291
+ FROM _emdash_collections AS collection
292
+ WHERE collection.id = ${sql.lit(identity.collectionId)}
293
+ AND collection.slug = ${sql.lit(identity.collectionSlug)}
294
+ );
295
+
296
+ SELECT CASE
297
+ WHEN changes() <> 1 THEN RAISE(ABORT, 'media usage capture inactive')
298
+ END;
299
+
300
+ INSERT INTO _emdash_media_usage_work (
301
+ collection_id,
302
+ collection_slug,
303
+ content_id,
304
+ change_epoch,
305
+ work_version,
306
+ state,
307
+ attempt_count,
308
+ next_attempt_at,
309
+ lease_token,
310
+ lease_expires_at,
311
+ last_attempted_at,
312
+ last_error_code,
313
+ created_at,
314
+ updated_at
315
+ )
316
+ SELECT
317
+ ${sql.lit(identity.collectionId)},
318
+ ${sql.lit(identity.collectionSlug)},
319
+ ${contentId},
320
+ change_epoch,
321
+ 1,
322
+ 'pending',
323
+ 0,
324
+ strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
325
+ NULL,
326
+ NULL,
327
+ NULL,
328
+ NULL,
329
+ strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
330
+ strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
331
+ FROM _emdash_media_usage_index_status
332
+ WHERE adapter_id = 'content-media'
333
+ AND scope_type = 'collection'
334
+ AND scope_key = ${sql.lit(identity.collectionSlug)}
335
+ AND collection_id = ${sql.lit(identity.collectionId)}
336
+ AND capture_state = 'active'
337
+ ON CONFLICT (collection_id, content_id) DO UPDATE SET
338
+ collection_slug = excluded.collection_slug,
339
+ change_epoch = excluded.change_epoch,
340
+ work_version = _emdash_media_usage_work.work_version + 1,
341
+ state = 'pending',
342
+ attempt_count = 0,
343
+ next_attempt_at = excluded.next_attempt_at,
344
+ lease_token = NULL,
345
+ lease_expires_at = NULL,
346
+ last_attempted_at = NULL,
347
+ last_error_code = NULL,
348
+ updated_at = excluded.updated_at;
349
+ END
350
+ `;
351
+ }
352
+ function operationSql(operation) {
353
+ switch (operation) {
354
+ case "insert": return sql`INSERT`;
355
+ case "update": return sql`UPDATE`;
356
+ case "delete": return sql`DELETE`;
357
+ }
358
+ }
359
+
360
+ //#endregion
361
+ export { verifyMediaUsageCaptureTriggers as n, installMediaUsageCaptureTriggers as t };
362
+ //# sourceMappingURL=capture-triggers-BezAvWcB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-triggers-BezAvWcB.mjs","names":[],"sources":["../src/media/usage/capture-triggers.ts"],"sourcesContent":["import { sql, type Kysely, type RawBuilder } from \"kysely\";\n\nimport { isPostgres, tableExists } from \"../../database/dialect-helpers.js\";\nimport type { Database } from \"../../database/types.js\";\nimport { validateIdentifier } from \"../../database/validate.js\";\n\nconst POSTGRES_TRIGGER_FUNCTION = \"emdash_media_usage_capture_work\";\nconst POSTGRES_IDENTIFIER_LIMIT = 63;\nconst CAPTURE_TRIGGER_VERSION = 1;\nconst OWNED_TRIGGER_PREFIX = \"emdash_mu_\";\nconst MAX_OWNED_CAPTURE_TRIGGERS = 100;\nconst WHITESPACE_PATTERN = /\\s+/g;\nconst TRAILING_SEMICOLON_PATTERN = /;$/;\n\nexport interface MediaUsageCaptureIdentity {\n\tcollectionId: string;\n\tcollectionSlug: string;\n}\n\ntype CaptureOperation = \"insert\" | \"update\" | \"delete\";\n\nexport async function installMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n\toptions: { replaceExisting?: boolean } = {},\n): Promise<void> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (isPostgres(db)) await installPostgresFunction(db);\n\tconst installedNames = await listOwnedCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tMAX_OWNED_CAPTURE_TRIGGERS + 1,\n\t);\n\tif (installedNames.length > MAX_OWNED_CAPTURE_TRIGGERS) {\n\t\tthrow new Error(\"Media usage capture trigger set exceeds the activation limit\");\n\t}\n\tif (await hasExactCaptureTriggers(db, identifiers, identity, installedNames)) {\n\t\treturn;\n\t}\n\n\tawait assertCaptureLifecycle(db, identity, [\"installing\"]);\n\tconst expectedNames = new Set(Object.values(identifiers.triggerNames));\n\tconst retainedNames = new Set(\n\t\toptions.replaceExisting === false\n\t\t\t? installedNames.filter((name) => expectedNames.has(name))\n\t\t\t: [],\n\t);\n\tawait removeCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tinstalledNames.filter((name) => !retainedNames.has(name)),\n\t);\n\n\tfor (const operation of captureOperations) {\n\t\tif (retainedNames.has(identifiers.triggerNames[operation])) continue;\n\t\tif (isPostgres(db)) {\n\t\t\tawait postgresCreateTrigger(\n\t\t\t\tdb,\n\t\t\t\tidentifiers.tableName,\n\t\t\t\tidentifiers.triggerNames[operation],\n\t\t\t\toperation,\n\t\t\t\tidentity,\n\t\t\t);\n\t\t} else {\n\t\t\tawait sqliteCreateTrigger(\n\t\t\t\tdb,\n\t\t\t\tidentifiers.tableName,\n\t\t\t\tidentifiers.triggerNames[operation],\n\t\t\t\toperation,\n\t\t\t\tidentity,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait assertExpectedTriggerSet(db, identifiers, identity);\n}\n\nexport async function verifyMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<boolean> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (!(await tableExists(db, identifiers.tableName))) return false;\n\treturn hasExactCaptureTriggers(\n\t\tdb,\n\t\tidentifiers,\n\t\tidentity,\n\t\tawait listOwnedCaptureTriggers(db, identifiers.tableName, MAX_OWNED_CAPTURE_TRIGGERS + 1),\n\t);\n}\n\nexport async function removeMediaUsageCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst identifiers = await captureIdentifiers(identity);\n\tif (!(await tableExists(db, identifiers.tableName))) return;\n\tawait assertCaptureLifecycle(db, identity, [\"installing\", \"deleting\"]);\n\tawait removeCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tawait listOwnedCaptureTriggers(db, identifiers.tableName),\n\t);\n}\n\nconst captureOperations: readonly CaptureOperation[] = [\"insert\", \"update\", \"delete\"];\n\nasync function captureIdentifiers(identity: MediaUsageCaptureIdentity): Promise<{\n\ttableName: string;\n\ttriggerNames: Record<CaptureOperation, string>;\n}> {\n\tvalidateIdentifier(identity.collectionSlug, \"collection slug\");\n\tconst tableName = `ec_${identity.collectionSlug}`;\n\tvalidateIdentifier(tableName, \"content table\");\n\n\tconst digest = await identityDigest(\n\t\t`${CAPTURE_TRIGGER_VERSION}:${identity.collectionId}:${identity.collectionSlug}`,\n\t);\n\tconst triggerNames = {\n\t\tinsert: `emdash_mu_${digest}_ai`,\n\t\tupdate: `emdash_mu_${digest}_au`,\n\t\tdelete: `emdash_mu_${digest}_ad`,\n\t};\n\tfor (const triggerName of Object.values(triggerNames)) {\n\t\tvalidateIdentifier(triggerName, \"media usage trigger\");\n\t\tif (triggerName.length > POSTGRES_IDENTIFIER_LIMIT) {\n\t\t\tthrow new Error(`Media usage trigger name exceeds ${POSTGRES_IDENTIFIER_LIMIT} bytes`);\n\t\t}\n\t}\n\n\treturn { tableName, triggerNames };\n}\n\nasync function identityDigest(value: string): Promise<string> {\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value));\n\treturn Array.from(new Uint8Array(digest).slice(0, 16), (byte) =>\n\t\tbyte.toString(16).padStart(2, \"0\"),\n\t).join(\"\");\n}\n\nasync function removeCaptureTriggers(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerNames: readonly string[],\n): Promise<void> {\n\tfor (const triggerName of triggerNames) {\n\t\tvalidateIdentifier(triggerName, \"media usage trigger\");\n\t\tif (isPostgres(db)) {\n\t\t\tawait sql`\n\t\t\t\tDROP TRIGGER IF EXISTS ${sql.ref(triggerName)} ON ${sql.ref(tableName)}\n\t\t\t`.execute(db);\n\t\t} else {\n\t\t\tawait sql`DROP TRIGGER IF EXISTS ${sql.ref(triggerName)}`.execute(db);\n\t\t}\n\t}\n}\n\nasync function listOwnedCaptureTriggers(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\tlimit?: number,\n): Promise<string[]> {\n\tconst limitClause = limit === undefined ? sql`` : sql`LIMIT ${limit}`;\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{ name: string }>`\n\t\t\tSELECT trigger.tgname AS name\n\t\t\tFROM pg_trigger AS trigger\n\t\t\tINNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid\n\t\t\tINNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n\t\t\tWHERE namespace.nspname = current_schema()\n\t\t\t\tAND relation.relname = ${tableName}\n\t\t\t\tAND NOT trigger.tgisinternal\n\t\t\t\tAND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t\t${limitClause}\n\t\t`.execute(db);\n\t\treturn result.rows.map((row) => row.name);\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name\n\t\tFROM sqlite_master\n\t\tWHERE type = 'trigger'\n\t\t\tAND tbl_name = ${tableName}\n\t\t\tAND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t${limitClause}\n\t`.execute(db);\n\treturn result.rows.map((row) => row.name);\n}\n\nasync function hasExactCaptureTriggers(\n\tdb: Kysely<Database>,\n\tidentifiers: {\n\t\ttableName: string;\n\t\ttriggerNames: Record<CaptureOperation, string>;\n\t},\n\tidentity: MediaUsageCaptureIdentity,\n\tinstalledNames: readonly string[],\n): Promise<boolean> {\n\tconst expectedNames = new Set(Object.values(identifiers.triggerNames));\n\tif (\n\t\tinstalledNames.length !== expectedNames.size ||\n\t\tinstalledNames.some((name) => !expectedNames.has(name))\n\t) {\n\t\treturn false;\n\t}\n\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{\n\t\t\tname: string;\n\t\t\ttrigger_type: number;\n\t\t\tfunction_name: string;\n\t\t\targuments_hex: string;\n\t\t\tenabled: string;\n\t\t\thas_when: boolean;\n\t\t}>`\n\t\t\tSELECT\n\t\t\t\ttrigger.tgname AS name,\n\t\t\t\ttrigger.tgtype AS trigger_type,\n\t\t\t\tprocedure.proname AS function_name,\n\t\t\t\tencode(trigger.tgargs, 'hex') AS arguments_hex,\n\t\t\t\ttrigger.tgenabled AS enabled,\n\t\t\t\ttrigger.tgqual IS NOT NULL AS has_when\n\t\t\tFROM pg_trigger AS trigger\n\t\t\tINNER JOIN pg_class AS relation ON relation.oid = trigger.tgrelid\n\t\t\tINNER JOIN pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n\t\t\tINNER JOIN pg_proc AS procedure ON procedure.oid = trigger.tgfoid\n\t\t\tINNER JOIN pg_namespace AS function_namespace ON function_namespace.oid = procedure.pronamespace\n\t\t\tWHERE namespace.nspname = current_schema()\n\t\t\t\tAND function_namespace.nspname = current_schema()\n\t\t\t\tAND relation.relname = ${identifiers.tableName}\n\t\t\t\tAND NOT trigger.tgisinternal\n\t\t\t\tAND trigger.tgconstraint = 0\n\t\t\t\tAND NOT trigger.tgdeferrable\n\t\t\t\tAND NOT trigger.tginitdeferred\n\t\t\t\tAND trigger.tgattr = ''::int2vector\n\t\t\t\tAND left(trigger.tgname, 10) = ${OWNED_TRIGGER_PREFIX}\n\t\t`.execute(db);\n\t\tconst expectedArguments = triggerArgumentsHex(identity);\n\t\treturn captureOperations.every((operation) => {\n\t\t\tconst row = result.rows.find(\n\t\t\t\t(candidate) => candidate.name === identifiers.triggerNames[operation],\n\t\t\t);\n\t\t\treturn (\n\t\t\t\trow?.function_name === POSTGRES_TRIGGER_FUNCTION &&\n\t\t\t\tNumber(row.trigger_type) === postgresTriggerType(operation) &&\n\t\t\t\trow.arguments_hex === expectedArguments &&\n\t\t\t\trow.enabled === \"O\" &&\n\t\t\t\trow.has_when === false\n\t\t\t);\n\t\t});\n\t}\n\n\tconst result = await sql<{ name: string; definition: string }>`\n\t\tSELECT name, sql AS definition\n\t\tFROM sqlite_master\n\t\tWHERE type = 'trigger'\n\t\t\tAND tbl_name = ${identifiers.tableName}\n\t\t\tAND substr(name, 1, 10) = ${OWNED_TRIGGER_PREFIX}\n\t`.execute(db);\n\treturn captureOperations.every((operation) => {\n\t\tconst row = result.rows.find(\n\t\t\t(candidate) => candidate.name === identifiers.triggerNames[operation],\n\t\t);\n\t\tconst contentId = operation === \"delete\" ? sql`OLD.id` : sql`NEW.id`;\n\t\tconst expected = sqliteTriggerSql(\n\t\t\tidentifiers.tableName,\n\t\t\tidentifiers.triggerNames[operation],\n\t\t\toperationSql(operation),\n\t\t\tcontentId,\n\t\t\tidentity,\n\t\t).compile(db).sql;\n\t\treturn row ? normalizeDdl(row.definition) === normalizeDdl(expected) : false;\n\t});\n}\n\nfunction triggerArgumentsHex(identity: MediaUsageCaptureIdentity): string {\n\tconst bytes = new TextEncoder().encode(`${identity.collectionId}\\0${identity.collectionSlug}\\0`);\n\treturn Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction postgresTriggerType(operation: CaptureOperation): number {\n\tswitch (operation) {\n\t\tcase \"insert\":\n\t\t\treturn 5;\n\t\tcase \"update\":\n\t\t\treturn 17;\n\t\tcase \"delete\":\n\t\t\treturn 9;\n\t}\n}\n\nfunction normalizeDdl(definition: string): string {\n\treturn definition.replace(WHITESPACE_PATTERN, \" \").trim().replace(TRAILING_SEMICOLON_PATTERN, \"\");\n}\n\nasync function assertCaptureLifecycle(\n\tdb: Kysely<Database>,\n\tidentity: MediaUsageCaptureIdentity,\n\tallowedStates: readonly string[],\n): Promise<void> {\n\tconst lifecycle = await db\n\t\t.selectFrom(\"_emdash_media_usage_index_status\")\n\t\t.select(\"capture_state\")\n\t\t.where(\"adapter_id\", \"=\", \"content-media\")\n\t\t.where(\"scope_type\", \"=\", \"collection\")\n\t\t.where(\"scope_key\", \"=\", identity.collectionSlug)\n\t\t.where(\"collection_id\", \"=\", identity.collectionId)\n\t\t.executeTakeFirst();\n\tif (!lifecycle?.capture_state || !allowedStates.includes(lifecycle.capture_state)) {\n\t\tthrow new Error(\"Media usage capture trigger changes require a fenced collection lifecycle\");\n\t}\n}\n\nasync function assertExpectedTriggerSet(\n\tdb: Kysely<Database>,\n\tidentifiers: {\n\t\ttableName: string;\n\t\ttriggerNames: Record<CaptureOperation, string>;\n\t},\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst actual = await listOwnedCaptureTriggers(\n\t\tdb,\n\t\tidentifiers.tableName,\n\t\tMAX_OWNED_CAPTURE_TRIGGERS + 1,\n\t);\n\tif (!(await hasExactCaptureTriggers(db, identifiers, identity, actual))) {\n\t\tthrow new Error(\"Media usage capture trigger installation is incomplete\");\n\t}\n}\n\nasync function installPostgresFunction(db: Kysely<Database>): Promise<void> {\n\tawait sql`\n\t\tCREATE OR REPLACE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}()\n\t\tRETURNS trigger\n\t\tLANGUAGE plpgsql\n\t\tAS $function$\n\t\tDECLARE\n\t\t\tv_collection_id text := TG_ARGV[0];\n\t\t\tv_collection_slug text := TG_ARGV[1];\n\t\t\tv_content_id text;\n\t\t\tv_epoch bigint;\n\t\t\tv_now text := to_char(\n\t\t\t\tclock_timestamp() AT TIME ZONE 'UTC',\n\t\t\t\t'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'\n\t\t\t);\n\t\tBEGIN\n\t\t\tIF TG_OP = 'DELETE' THEN\n\t\t\t\tv_content_id := OLD.id;\n\t\t\tELSE\n\t\t\t\tv_content_id := NEW.id;\n\t\t\tEND IF;\n\n\t\t\tUPDATE _emdash_media_usage_index_status\n\t\t\tSET change_epoch = change_epoch + 1,\n\t\t\t\tstatus = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,\n\t\t\t\tcompleted_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,\n\t\t\t\tupdated_at = v_now\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = v_collection_slug\n\t\t\t\tAND collection_id = v_collection_id\n\t\t\t\tAND capture_state = 'active'\n\t\t\t\tAND EXISTS (\n\t\t\t\t\tSELECT 1\n\t\t\t\t\tFROM _emdash_collections AS collection\n\t\t\t\t\tWHERE collection.id = v_collection_id\n\t\t\t\t\t\tAND collection.slug = v_collection_slug\n\t\t\t\t)\n\t\t\tRETURNING change_epoch INTO v_epoch;\n\n\t\t\tIF NOT FOUND THEN\n\t\t\t\tRAISE EXCEPTION USING\n\t\t\t\t\tERRCODE = 'P0001',\n\t\t\t\t\tMESSAGE = 'media usage capture inactive';\n\t\t\tEND IF;\n\n\t\t\tINSERT INTO _emdash_media_usage_work (\n\t\t\t\tcollection_id,\n\t\t\t\tcollection_slug,\n\t\t\t\tcontent_id,\n\t\t\t\tchange_epoch,\n\t\t\t\twork_version,\n\t\t\t\tstate,\n\t\t\t\tattempt_count,\n\t\t\t\tnext_attempt_at,\n\t\t\t\tlease_token,\n\t\t\t\tlease_expires_at,\n\t\t\t\tlast_attempted_at,\n\t\t\t\tlast_error_code,\n\t\t\t\tcreated_at,\n\t\t\t\tupdated_at\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\tv_collection_id,\n\t\t\t\tv_collection_slug,\n\t\t\t\tv_content_id,\n\t\t\t\tv_epoch,\n\t\t\t\t1,\n\t\t\t\t'pending',\n\t\t\t\t0,\n\t\t\t\tv_now,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tv_now,\n\t\t\t\tv_now\n\t\t\t)\n\t\t\tON CONFLICT (collection_id, content_id) DO UPDATE SET\n\t\t\t\tcollection_slug = EXCLUDED.collection_slug,\n\t\t\t\tchange_epoch = EXCLUDED.change_epoch,\n\t\t\t\twork_version = _emdash_media_usage_work.work_version + 1,\n\t\t\t\tstate = 'pending',\n\t\t\t\tattempt_count = 0,\n\t\t\t\tnext_attempt_at = EXCLUDED.next_attempt_at,\n\t\t\t\tlease_token = NULL,\n\t\t\t\tlease_expires_at = NULL,\n\t\t\t\tlast_attempted_at = NULL,\n\t\t\t\tlast_error_code = NULL,\n\t\t\t\tupdated_at = EXCLUDED.updated_at;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$function$\n\t`.execute(db);\n}\n\nasync function postgresCreateTrigger(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerName: string,\n\toperation: CaptureOperation,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tawait sql`\n\t\tCREATE TRIGGER ${sql.ref(triggerName)}\n\t\tAFTER ${operationSql(operation)} ON ${sql.ref(tableName)}\n\t\tFOR EACH ROW\n\t\tEXECUTE FUNCTION ${sql.ref(POSTGRES_TRIGGER_FUNCTION)}(\n\t\t\t${sql.lit(identity.collectionId)},\n\t\t\t${sql.lit(identity.collectionSlug)}\n\t\t)\n\t`.execute(db);\n}\n\nasync function sqliteCreateTrigger(\n\tdb: Kysely<Database>,\n\ttableName: string,\n\ttriggerName: string,\n\toperation: CaptureOperation,\n\tidentity: MediaUsageCaptureIdentity,\n): Promise<void> {\n\tconst contentId = operation === \"delete\" ? sql`OLD.id` : sql`NEW.id`;\n\tawait sqliteTriggerSql(\n\t\ttableName,\n\t\ttriggerName,\n\t\toperationSql(operation),\n\t\tcontentId,\n\t\tidentity,\n\t).execute(db);\n}\n\nfunction sqliteTriggerSql(\n\ttableName: string,\n\ttriggerName: string,\n\toperation: RawBuilder<unknown>,\n\tcontentId: RawBuilder<unknown>,\n\tidentity: MediaUsageCaptureIdentity,\n): RawBuilder<unknown> {\n\treturn sql`\n\t\tCREATE TRIGGER ${sql.ref(triggerName)}\n\t\tAFTER ${operation} ON ${sql.ref(tableName)}\n\t\tFOR EACH ROW\n\t\tBEGIN\n\t\t\tUPDATE _emdash_media_usage_index_status\n\t\t\tSET change_epoch = change_epoch + 1,\n\t\t\t\tstatus = CASE WHEN status = 'complete' THEN 'stale' ELSE status END,\n\t\t\t\tcompleted_at = CASE WHEN status = 'complete' THEN NULL ELSE completed_at END,\n\t\t\t\tupdated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = ${sql.lit(identity.collectionSlug)}\n\t\t\t\tAND collection_id = ${sql.lit(identity.collectionId)}\n\t\t\t\tAND capture_state = 'active'\n\t\t\t\tAND EXISTS (\n\t\t\t\t\tSELECT 1\n\t\t\t\t\tFROM _emdash_collections AS collection\n\t\t\t\t\tWHERE collection.id = ${sql.lit(identity.collectionId)}\n\t\t\t\t\t\tAND collection.slug = ${sql.lit(identity.collectionSlug)}\n\t\t\t\t);\n\n\t\t\tSELECT CASE\n\t\t\t\tWHEN changes() <> 1 THEN RAISE(ABORT, 'media usage capture inactive')\n\t\t\tEND;\n\n\t\t\tINSERT INTO _emdash_media_usage_work (\n\t\t\t\tcollection_id,\n\t\t\t\tcollection_slug,\n\t\t\t\tcontent_id,\n\t\t\t\tchange_epoch,\n\t\t\t\twork_version,\n\t\t\t\tstate,\n\t\t\t\tattempt_count,\n\t\t\t\tnext_attempt_at,\n\t\t\t\tlease_token,\n\t\t\t\tlease_expires_at,\n\t\t\t\tlast_attempted_at,\n\t\t\t\tlast_error_code,\n\t\t\t\tcreated_at,\n\t\t\t\tupdated_at\n\t\t\t)\n\t\t\tSELECT\n\t\t\t\t${sql.lit(identity.collectionId)},\n\t\t\t\t${sql.lit(identity.collectionSlug)},\n\t\t\t\t${contentId},\n\t\t\t\tchange_epoch,\n\t\t\t\t1,\n\t\t\t\t'pending',\n\t\t\t\t0,\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now'),\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now'),\n\t\t\t\tstrftime('%Y-%m-%dT%H:%M:%fZ', 'now')\n\t\t\tFROM _emdash_media_usage_index_status\n\t\t\tWHERE adapter_id = 'content-media'\n\t\t\t\tAND scope_type = 'collection'\n\t\t\t\tAND scope_key = ${sql.lit(identity.collectionSlug)}\n\t\t\t\tAND collection_id = ${sql.lit(identity.collectionId)}\n\t\t\t\tAND capture_state = 'active'\n\t\t\tON CONFLICT (collection_id, content_id) DO UPDATE SET\n\t\t\t\tcollection_slug = excluded.collection_slug,\n\t\t\t\tchange_epoch = excluded.change_epoch,\n\t\t\t\twork_version = _emdash_media_usage_work.work_version + 1,\n\t\t\t\tstate = 'pending',\n\t\t\t\tattempt_count = 0,\n\t\t\t\tnext_attempt_at = excluded.next_attempt_at,\n\t\t\t\tlease_token = NULL,\n\t\t\t\tlease_expires_at = NULL,\n\t\t\t\tlast_attempted_at = NULL,\n\t\t\t\tlast_error_code = NULL,\n\t\t\t\tupdated_at = excluded.updated_at;\n\t\tEND\n\t`;\n}\n\nfunction operationSql(operation: CaptureOperation): RawBuilder<unknown> {\n\tswitch (operation) {\n\t\tcase \"insert\":\n\t\t\treturn sql`INSERT`;\n\t\tcase \"update\":\n\t\t\treturn sql`UPDATE`;\n\t\tcase \"delete\":\n\t\t\treturn sql`DELETE`;\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ //#region src/auth/challenge-store.ts
2
+ function createChallengeStore(db) {
3
+ return {
4
+ async set(challenge, data) {
5
+ const expiresAt = new Date(data.expiresAt).toISOString();
6
+ await db.insertInto("auth_challenges").values({
7
+ challenge,
8
+ type: data.type,
9
+ user_id: data.userId ?? null,
10
+ data: data.context ?? null,
11
+ expires_at: expiresAt
12
+ }).onConflict((oc) => oc.column("challenge").doUpdateSet({
13
+ type: data.type,
14
+ user_id: data.userId ?? null,
15
+ data: data.context ?? null,
16
+ expires_at: expiresAt
17
+ })).execute();
18
+ },
19
+ async get(challenge) {
20
+ const row = await db.selectFrom("auth_challenges").selectAll().where("challenge", "=", challenge).executeTakeFirst();
21
+ if (!row) return null;
22
+ const expiresAt = new Date(row.expires_at).getTime();
23
+ if (expiresAt < Date.now()) {
24
+ await this.delete(challenge);
25
+ return null;
26
+ }
27
+ return {
28
+ type: row.type === "registration" ? "registration" : "authentication",
29
+ userId: row.user_id ?? void 0,
30
+ expiresAt,
31
+ ...row.data === null ? {} : { context: row.data }
32
+ };
33
+ },
34
+ async delete(challenge) {
35
+ await db.deleteFrom("auth_challenges").where("challenge", "=", challenge).execute();
36
+ }
37
+ };
38
+ }
39
+ /**
40
+ * Clean up expired challenges.
41
+ * Should be called periodically (e.g., on startup, or via cron).
42
+ */
43
+ async function cleanupExpiredChallenges(db) {
44
+ const now = (/* @__PURE__ */ new Date()).toISOString();
45
+ const result = await db.deleteFrom("auth_challenges").where("expires_at", "<", now).executeTakeFirst();
46
+ return Number(result.numDeletedRows ?? 0);
47
+ }
48
+
49
+ //#endregion
50
+ export { createChallengeStore as n, cleanupExpiredChallenges as t };
51
+ //# sourceMappingURL=challenge-store-B1C0V4b3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"challenge-store-B1C0V4b3.mjs","names":[],"sources":["../src/auth/challenge-store.ts"],"sourcesContent":["/**\n * Challenge store for WebAuthn\n *\n * Stores WebAuthn challenges in a dedicated table with automatic expiration.\n */\n\nimport type { ChallengeStore, ChallengeData } from \"@emdash-cms/auth/passkey\";\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../database/types.js\";\n\nexport function createChallengeStore(db: Kysely<Database>): ChallengeStore {\n\treturn {\n\t\tasync set(challenge: string, data: ChallengeData): Promise<void> {\n\t\t\tconst expiresAt = new Date(data.expiresAt).toISOString();\n\n\t\t\tawait db\n\t\t\t\t.insertInto(\"auth_challenges\")\n\t\t\t\t.values({\n\t\t\t\t\tchallenge,\n\t\t\t\t\ttype: data.type,\n\t\t\t\t\tuser_id: data.userId ?? null,\n\t\t\t\t\tdata: data.context ?? null,\n\t\t\t\t\texpires_at: expiresAt,\n\t\t\t\t})\n\t\t\t\t.onConflict((oc) =>\n\t\t\t\t\toc.column(\"challenge\").doUpdateSet({\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\tuser_id: data.userId ?? null,\n\t\t\t\t\t\tdata: data.context ?? null,\n\t\t\t\t\t\texpires_at: expiresAt,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t},\n\n\t\tasync get(challenge: string): Promise<ChallengeData | null> {\n\t\t\tconst row = await db\n\t\t\t\t.selectFrom(\"auth_challenges\")\n\t\t\t\t.selectAll()\n\t\t\t\t.where(\"challenge\", \"=\", challenge)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tif (!row) return null;\n\n\t\t\tconst expiresAt = new Date(row.expires_at).getTime();\n\n\t\t\t// Check expiration\n\t\t\tif (expiresAt < Date.now()) {\n\t\t\t\t// Expired, delete and return null\n\t\t\t\tawait this.delete(challenge);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: row.type === \"registration\" ? \"registration\" : \"authentication\",\n\t\t\t\tuserId: row.user_id ?? undefined,\n\t\t\t\texpiresAt,\n\t\t\t\t...(row.data === null ? {} : { context: row.data }),\n\t\t\t};\n\t\t},\n\n\t\tasync delete(challenge: string): Promise<void> {\n\t\t\tawait db.deleteFrom(\"auth_challenges\").where(\"challenge\", \"=\", challenge).execute();\n\t\t},\n\t};\n}\n\n/**\n * Clean up expired challenges.\n * Should be called periodically (e.g., on startup, or via cron).\n */\nexport async function cleanupExpiredChallenges(db: Kysely<Database>): Promise<number> {\n\tconst now = new Date().toISOString();\n\n\tconst result = await db\n\t\t.deleteFrom(\"auth_challenges\")\n\t\t.where(\"expires_at\", \"<\", now)\n\t\t.executeTakeFirst();\n\n\treturn Number(result.numDeletedRows ?? 0);\n}\n"],"mappings":";AAWA,SAAgB,qBAAqB,IAAsC;AAC1E,QAAO;EACN,MAAM,IAAI,WAAmB,MAAoC;GAChE,MAAM,YAAY,IAAI,KAAK,KAAK,UAAU,CAAC,aAAa;AAExD,SAAM,GACJ,WAAW,kBAAkB,CAC7B,OAAO;IACP;IACA,MAAM,KAAK;IACX,SAAS,KAAK,UAAU;IACxB,MAAM,KAAK,WAAW;IACtB,YAAY;IACZ,CAAC,CACD,YAAY,OACZ,GAAG,OAAO,YAAY,CAAC,YAAY;IAClC,MAAM,KAAK;IACX,SAAS,KAAK,UAAU;IACxB,MAAM,KAAK,WAAW;IACtB,YAAY;IACZ,CAAC,CACF,CACA,SAAS;;EAGZ,MAAM,IAAI,WAAkD;GAC3D,MAAM,MAAM,MAAM,GAChB,WAAW,kBAAkB,CAC7B,WAAW,CACX,MAAM,aAAa,KAAK,UAAU,CAClC,kBAAkB;AAEpB,OAAI,CAAC,IAAK,QAAO;GAEjB,MAAM,YAAY,IAAI,KAAK,IAAI,WAAW,CAAC,SAAS;AAGpD,OAAI,YAAY,KAAK,KAAK,EAAE;AAE3B,UAAM,KAAK,OAAO,UAAU;AAC5B,WAAO;;AAGR,UAAO;IACN,MAAM,IAAI,SAAS,iBAAiB,iBAAiB;IACrD,QAAQ,IAAI,WAAW;IACvB;IACA,GAAI,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,SAAS,IAAI,MAAM;IAClD;;EAGF,MAAM,OAAO,WAAkC;AAC9C,SAAM,GAAG,WAAW,kBAAkB,CAAC,MAAM,aAAa,KAAK,UAAU,CAAC,SAAS;;EAEpF;;;;;;AAOF,eAAsB,yBAAyB,IAAuC;CACrF,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;CAEpC,MAAM,SAAS,MAAM,GACnB,WAAW,kBAAkB,CAC7B,MAAM,cAAc,KAAK,IAAI,CAC7B,kBAAkB;AAEpB,QAAO,OAAO,OAAO,kBAAkB,EAAE"}
@@ -0,0 +1,162 @@
1
+ //#region ../registry-verification/dist/auth-B730dpJ4.js
2
+ const UNSUPPORTED_AUTH_MESSAGE = "This release requires an authentication method the client does not support.";
3
+ function unsupportedAuthDetails(auth) {
4
+ if (!isRecord(auth) || typeof auth.hint_url !== "string" || auth.hint_url.length > 2048) return;
5
+ try {
6
+ const url = new URL(auth.hint_url);
7
+ if (url.protocol !== "https:" || url.username || url.password) return void 0;
8
+ return { hintUrl: url.href };
9
+ } catch {
10
+ return;
11
+ }
12
+ }
13
+ function isRecord(value) {
14
+ return value !== null && typeof value === "object" && !Array.isArray(value);
15
+ }
16
+
17
+ //#endregion
18
+ //#region ../registry-verification/dist/errors-D3_zxvwe.js
19
+ function verificationError(code, message, details) {
20
+ return {
21
+ success: false,
22
+ error: {
23
+ code,
24
+ message,
25
+ ...details === void 0 ? {} : { details }
26
+ }
27
+ };
28
+ }
29
+
30
+ //#endregion
31
+ //#region ../registry-verification/dist/checksum.js
32
+ const SHA2_256_CODE = 18;
33
+ const SHA2_256_LENGTH = 32;
34
+ const BASE32_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
35
+ /** Derive the required artifact checksum from a raw sha2-256 blob CID. */
36
+ function multihashFromBlobCid(value) {
37
+ if (!value.startsWith("b")) return verificationError("BLOB_REF_INVALID", "The blob reference CID is malformed.");
38
+ const bytes = decodeBase32(value.slice(1));
39
+ if (bytes === null || bytes.length !== 36 || bytes[0] !== 1 || bytes[1] !== 85) return verificationError("BLOB_REF_INVALID", "Blob references must use a CIDv1 raw sha2-256 CID.");
40
+ const checksum = `b${encodeBase32(bytes.slice(2))}`;
41
+ if (!decodeMultihash(checksum).success) return verificationError("BLOB_REF_INVALID", "Blob references must use a CIDv1 raw sha2-256 CID.");
42
+ return {
43
+ success: true,
44
+ value: checksum
45
+ };
46
+ }
47
+ /** Decodes a lowercase base32 multibase-encoded multihash. */
48
+ function decodeMultihash(value) {
49
+ if (!value.startsWith("b")) return verificationError("INVALID_MULTIHASH", "Checksums must be lowercase base32 multibase-encoded multihashes.");
50
+ const bytes = decodeBase32(value.slice(1));
51
+ if (bytes === null) return verificationError("INVALID_MULTIHASH", "The multibase checksum is malformed.");
52
+ const code = readVarint(bytes, 0);
53
+ if (code === null) return verificationError("INVALID_MULTIHASH", "The multihash algorithm code is malformed.");
54
+ const length = readVarint(bytes, code.nextOffset);
55
+ if (length === null || length.value !== bytes.length - length.nextOffset) return verificationError("INVALID_MULTIHASH", "The multihash digest length is malformed.");
56
+ if (code.value !== SHA2_256_CODE) return verificationError("UNSUPPORTED_MULTIHASH", "The multihash algorithm is not supported.");
57
+ if (length.value !== SHA2_256_LENGTH) return verificationError("INVALID_MULTIHASH", "The sha2-256 digest must be 32 bytes.");
58
+ return {
59
+ success: true,
60
+ value: {
61
+ algorithm: "sha2-256",
62
+ digest: bytes.slice(length.nextOffset)
63
+ }
64
+ };
65
+ }
66
+ async function computeArtifactDigestCandidates(bytes) {
67
+ const [sha256, sha384, sha512] = await Promise.all([
68
+ crypto.subtle.digest("SHA-256", new Uint8Array(bytes)),
69
+ crypto.subtle.digest("SHA-384", new Uint8Array(bytes)),
70
+ crypto.subtle.digest("SHA-512", new Uint8Array(bytes))
71
+ ]);
72
+ return [
73
+ new Uint8Array(sha256),
74
+ new Uint8Array(sha384),
75
+ new Uint8Array(sha512)
76
+ ];
77
+ }
78
+ async function verifyMultihash(bytes, expected) {
79
+ const decoded = decodeMultihash(expected);
80
+ if (!decoded.success) return decoded;
81
+ const actual = await computeDigest(bytes, decoded.value.algorithm);
82
+ if (!actual.success) return actual;
83
+ if (!compareDigestBytes(actual.value, decoded.value.digest)) return verificationError("CHECKSUM_MISMATCH", "The resource bytes do not match the expected checksum.");
84
+ return {
85
+ success: true,
86
+ value: true
87
+ };
88
+ }
89
+ /**
90
+ * Compare public checksum digest bytes without early exit. Digests are public
91
+ * integrity metadata, so a portable byte loop is preferable to a Node-only
92
+ * timing primitive while still avoiding an ordinary equality short circuit.
93
+ */
94
+ function compareDigestBytes(left, right) {
95
+ let difference = left.length ^ right.length;
96
+ const maximumLength = Math.max(left.length, right.length);
97
+ for (let index = 0; index < maximumLength; index += 1) difference |= (left[index] ?? 0) ^ (right[index] ?? 0);
98
+ return difference === 0;
99
+ }
100
+ async function computeDigest(bytes, algorithm) {
101
+ if (algorithm !== "sha2-256") return verificationError("UNSUPPORTED_MULTIHASH", "The multihash algorithm is not supported.");
102
+ try {
103
+ return {
104
+ success: true,
105
+ value: new Uint8Array(await crypto.subtle.digest("SHA-256", new Uint8Array(bytes)))
106
+ };
107
+ } catch {
108
+ return verificationError("UNSUPPORTED_MULTIHASH", "The sha2-256 algorithm is unavailable.");
109
+ }
110
+ }
111
+ function readVarint(bytes, offset) {
112
+ let value = 0;
113
+ let shift = 0;
114
+ for (let index = offset; index < bytes.length && index < offset + 5; index += 1) {
115
+ const byte = bytes[index];
116
+ if (byte === void 0) return null;
117
+ value |= (byte & 127) << shift;
118
+ if ((byte & 128) === 0) return {
119
+ value,
120
+ nextOffset: index + 1
121
+ };
122
+ shift += 7;
123
+ }
124
+ return null;
125
+ }
126
+ function encodeBase32(bytes) {
127
+ let result = "";
128
+ let buffer = 0;
129
+ let bits = 0;
130
+ for (const byte of bytes) {
131
+ buffer = buffer << 8 | byte;
132
+ bits += 8;
133
+ while (bits >= 5) {
134
+ result += BASE32_ALPHABET[buffer >>> bits - 5 & 31] ?? "";
135
+ bits -= 5;
136
+ }
137
+ }
138
+ if (bits > 0) result += BASE32_ALPHABET[buffer << 5 - bits & 31] ?? "";
139
+ return result;
140
+ }
141
+ function decodeBase32(value) {
142
+ if (value.length === 0) return null;
143
+ let buffer = 0;
144
+ let bits = 0;
145
+ const output = [];
146
+ for (const character of value) {
147
+ const digit = BASE32_ALPHABET.indexOf(character);
148
+ if (digit === -1) return null;
149
+ buffer = buffer << 5 | digit;
150
+ bits += 5;
151
+ if (bits >= 8) {
152
+ output.push(buffer >>> bits - 8 & 255);
153
+ bits -= 8;
154
+ }
155
+ }
156
+ if (bits > 0 && (buffer & (1 << bits) - 1) !== 0) return null;
157
+ return new Uint8Array(output);
158
+ }
159
+
160
+ //#endregion
161
+ export { UNSUPPORTED_AUTH_MESSAGE as a, verificationError as i, multihashFromBlobCid as n, unsupportedAuthDetails as o, verifyMultihash as r, computeArtifactDigestCandidates as t };
162
+ //# sourceMappingURL=checksum-CEqvfxGX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum-CEqvfxGX.mjs","names":[],"sources":["../../registry-verification/dist/auth-B730dpJ4.js","../../registry-verification/dist/errors-D3_zxvwe.js","../../registry-verification/dist/checksum.js"],"sourcesContent":["//#region src/auth.ts\nconst UNSUPPORTED_AUTH_MESSAGE = \"This release requires an authentication method the client does not support.\";\nfunction unsupportedAuthDetails(auth) {\n\tif (!isRecord(auth) || typeof auth.hint_url !== \"string\" || auth.hint_url.length > 2048) return;\n\ttry {\n\t\tconst url = new URL(auth.hint_url);\n\t\tif (url.protocol !== \"https:\" || url.username || url.password) return void 0;\n\t\treturn { hintUrl: url.href };\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction isRecord(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n//#endregion\nexport { unsupportedAuthDetails as n, UNSUPPORTED_AUTH_MESSAGE as t };\n//# sourceMappingURL=auth-B730dpJ4.js.map","//#region src/errors.ts\n/** Stable, machine-readable failures returned by this package. */\nconst VERIFICATION_ERROR_CODES = [\n\t\"AUTH_METHOD_UNSUPPORTED\",\n\t\"BLOB_METADATA_MISMATCH\",\n\t\"BLOB_REF_INVALID\",\n\t\"BUNDLE_COMPRESSED_SIZE_EXCEEDED\",\n\t\"BUNDLE_DECOMPRESSED_SIZE_EXCEEDED\",\n\t\"BUNDLE_FILE_COUNT_EXCEEDED\",\n\t\"BUNDLE_FILE_SIZE_EXCEEDED\",\n\t\"BUNDLE_ID_MISMATCH\",\n\t\"BUNDLE_INVALID_ARCHIVE\",\n\t\"BUNDLE_INVALID_MANIFEST\",\n\t\"BUNDLE_INVALID_PATH\",\n\t\"BUNDLE_MISSING_BACKEND\",\n\t\"BUNDLE_MISSING_MANIFEST\",\n\t\"BUNDLE_PATH_COLLISION\",\n\t\"BUNDLE_UNSUPPORTED_ENTRY\",\n\t\"BUNDLE_VERSION_MISMATCH\",\n\t\"CHECKSUM_MISMATCH\",\n\t\"FETCH_FAILED\",\n\t\"HOST_REJECTED\",\n\t\"INVALID_MULTIHASH\",\n\t\"INVALID_URL\",\n\t\"PDS_RESOLUTION_FAILED\",\n\t\"PROFILE_EXTENSION_INVALID\",\n\t\"PROFILE_ID_MISMATCH\",\n\t\"PROFILE_LEXICON_INVALID\",\n\t\"PROFILE_POLICY_INVALID\",\n\t\"PROFILE_REPOSITORY_INVALID\",\n\t\"PROVENANCE_REQUIRED\",\n\t\"PROVENANCE_UNVERIFIABLE\",\n\t\"REDIRECT_LIMIT_EXCEEDED\",\n\t\"REDIRECT_LOCATION_MISSING\",\n\t\"RESOURCE_SIZE_EXCEEDED\",\n\t\"RESOURCE_STATUS_ERROR\",\n\t\"RESOURCE_TIMEOUT\",\n\t\"RELEASE_EXTENSION_INVALID\",\n\t\"RELEASE_EXTENSION_MISSING\",\n\t\"RELEASE_ARTIFACT_SOURCE_MISSING\",\n\t\"RELEASE_LEXICON_INVALID\",\n\t\"RELEASE_PACKAGE_MISMATCH\",\n\t\"RELEASE_RKEY_MISMATCH\",\n\t\"RELEASE_VERSION_INVALID\",\n\t\"RELEASE_VERSION_MISMATCH\",\n\t\"UNSUPPORTED_MULTIHASH\"\n];\nfunction verificationError(code, message, details) {\n\treturn {\n\t\tsuccess: false,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...details === void 0 ? {} : { details }\n\t\t}\n\t};\n}\n\n//#endregion\nexport { verificationError as n, VERIFICATION_ERROR_CODES as t };\n//# sourceMappingURL=errors-D3_zxvwe.js.map","import { n as verificationError } from \"./errors-D3_zxvwe.js\";\n\n//#region src/checksum.ts\nconst SHA2_256_CODE = 18;\nconst SHA2_256_LENGTH = 32;\nconst BASE32_ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n/** Derive the required artifact checksum from a raw sha2-256 blob CID. */\nfunction multihashFromBlobCid(value) {\n\tif (!value.startsWith(\"b\")) return verificationError(\"BLOB_REF_INVALID\", \"The blob reference CID is malformed.\");\n\tconst bytes = decodeBase32(value.slice(1));\n\tif (bytes === null || bytes.length !== 36 || bytes[0] !== 1 || bytes[1] !== 85) return verificationError(\"BLOB_REF_INVALID\", \"Blob references must use a CIDv1 raw sha2-256 CID.\");\n\tconst checksum = `b${encodeBase32(bytes.slice(2))}`;\n\tif (!decodeMultihash(checksum).success) return verificationError(\"BLOB_REF_INVALID\", \"Blob references must use a CIDv1 raw sha2-256 CID.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: checksum\n\t};\n}\n/** Decodes a lowercase base32 multibase-encoded multihash. */\nfunction decodeMultihash(value) {\n\tif (!value.startsWith(\"b\")) return verificationError(\"INVALID_MULTIHASH\", \"Checksums must be lowercase base32 multibase-encoded multihashes.\");\n\tconst bytes = decodeBase32(value.slice(1));\n\tif (bytes === null) return verificationError(\"INVALID_MULTIHASH\", \"The multibase checksum is malformed.\");\n\tconst code = readVarint(bytes, 0);\n\tif (code === null) return verificationError(\"INVALID_MULTIHASH\", \"The multihash algorithm code is malformed.\");\n\tconst length = readVarint(bytes, code.nextOffset);\n\tif (length === null || length.value !== bytes.length - length.nextOffset) return verificationError(\"INVALID_MULTIHASH\", \"The multihash digest length is malformed.\");\n\tif (code.value !== SHA2_256_CODE) return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\tif (length.value !== SHA2_256_LENGTH) return verificationError(\"INVALID_MULTIHASH\", \"The sha2-256 digest must be 32 bytes.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: {\n\t\t\talgorithm: \"sha2-256\",\n\t\t\tdigest: bytes.slice(length.nextOffset)\n\t\t}\n\t};\n}\nasync function computeMultihash(bytes, algorithm = \"sha2-256\") {\n\tif (algorithm !== \"sha2-256\") return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\ttry {\n\t\tconst digest = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)));\n\t\tconst multihash = new Uint8Array(2 + digest.length);\n\t\tmultihash[0] = SHA2_256_CODE;\n\t\tmultihash[1] = digest.length;\n\t\tmultihash.set(digest, 2);\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: `b${encodeBase32(multihash)}`\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"UNSUPPORTED_MULTIHASH\", \"The sha2-256 algorithm is unavailable.\");\n\t}\n}\nasync function computeArtifactDigestCandidates(bytes) {\n\tconst [sha256, sha384, sha512] = await Promise.all([\n\t\tcrypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)),\n\t\tcrypto.subtle.digest(\"SHA-384\", new Uint8Array(bytes)),\n\t\tcrypto.subtle.digest(\"SHA-512\", new Uint8Array(bytes))\n\t]);\n\treturn [\n\t\tnew Uint8Array(sha256),\n\t\tnew Uint8Array(sha384),\n\t\tnew Uint8Array(sha512)\n\t];\n}\nasync function verifyMultihash(bytes, expected) {\n\tconst decoded = decodeMultihash(expected);\n\tif (!decoded.success) return decoded;\n\tconst actual = await computeDigest(bytes, decoded.value.algorithm);\n\tif (!actual.success) return actual;\n\tif (!compareDigestBytes(actual.value, decoded.value.digest)) return verificationError(\"CHECKSUM_MISMATCH\", \"The resource bytes do not match the expected checksum.\");\n\treturn {\n\t\tsuccess: true,\n\t\tvalue: true\n\t};\n}\n/**\n* Compare public checksum digest bytes without early exit. Digests are public\n* integrity metadata, so a portable byte loop is preferable to a Node-only\n* timing primitive while still avoiding an ordinary equality short circuit.\n*/\nfunction compareDigestBytes(left, right) {\n\tlet difference = left.length ^ right.length;\n\tconst maximumLength = Math.max(left.length, right.length);\n\tfor (let index = 0; index < maximumLength; index += 1) difference |= (left[index] ?? 0) ^ (right[index] ?? 0);\n\treturn difference === 0;\n}\nasync function computeDigest(bytes, algorithm) {\n\tif (algorithm !== \"sha2-256\") return verificationError(\"UNSUPPORTED_MULTIHASH\", \"The multihash algorithm is not supported.\");\n\ttry {\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tvalue: new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new Uint8Array(bytes)))\n\t\t};\n\t} catch {\n\t\treturn verificationError(\"UNSUPPORTED_MULTIHASH\", \"The sha2-256 algorithm is unavailable.\");\n\t}\n}\nfunction readVarint(bytes, offset) {\n\tlet value = 0;\n\tlet shift = 0;\n\tfor (let index = offset; index < bytes.length && index < offset + 5; index += 1) {\n\t\tconst byte = bytes[index];\n\t\tif (byte === void 0) return null;\n\t\tvalue |= (byte & 127) << shift;\n\t\tif ((byte & 128) === 0) return {\n\t\t\tvalue,\n\t\t\tnextOffset: index + 1\n\t\t};\n\t\tshift += 7;\n\t}\n\treturn null;\n}\nfunction encodeBase32(bytes) {\n\tlet result = \"\";\n\tlet buffer = 0;\n\tlet bits = 0;\n\tfor (const byte of bytes) {\n\t\tbuffer = buffer << 8 | byte;\n\t\tbits += 8;\n\t\twhile (bits >= 5) {\n\t\t\tresult += BASE32_ALPHABET[buffer >>> bits - 5 & 31] ?? \"\";\n\t\t\tbits -= 5;\n\t\t}\n\t}\n\tif (bits > 0) result += BASE32_ALPHABET[buffer << 5 - bits & 31] ?? \"\";\n\treturn result;\n}\nfunction decodeBase32(value) {\n\tif (value.length === 0) return null;\n\tlet buffer = 0;\n\tlet bits = 0;\n\tconst output = [];\n\tfor (const character of value) {\n\t\tconst digit = BASE32_ALPHABET.indexOf(character);\n\t\tif (digit === -1) return null;\n\t\tbuffer = buffer << 5 | digit;\n\t\tbits += 5;\n\t\tif (bits >= 8) {\n\t\t\toutput.push(buffer >>> bits - 8 & 255);\n\t\t\tbits -= 8;\n\t\t}\n\t}\n\tif (bits > 0 && (buffer & (1 << bits) - 1) !== 0) return null;\n\treturn new Uint8Array(output);\n}\n\n//#endregion\nexport { compareDigestBytes, computeArtifactDigestCandidates, computeMultihash, decodeMultihash, multihashFromBlobCid, verifyMultihash };\n//# sourceMappingURL=checksum.js.map"],"mappings":"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"}