emdash 0.35.0 → 0.37.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 (971) hide show
  1. package/dist/activation-K0kGBWuJ.mjs +382 -0
  2. package/dist/activation-K0kGBWuJ.mjs.map +1 -0
  3. package/dist/{adapters-Bb1vG41D.d.mts → adapters-BDQwg236.d.mts} +6 -4
  4. package/dist/{adapters-Bb1vG41D.d.mts.map → adapters-BDQwg236.d.mts.map} +1 -1
  5. package/dist/{allowed-origins-DW7sYyqg.mjs → allowed-origins-BGglilcs.mjs} +2 -2
  6. package/dist/{allowed-origins-DW7sYyqg.mjs.map → allowed-origins-BGglilcs.mjs.map} +1 -1
  7. package/dist/api/route-utils.d.mts +3 -3
  8. package/dist/api/route-utils.mjs +23 -21
  9. package/dist/api/route-utils.mjs.map +1 -1
  10. package/dist/api/schemas/index.d.mts +2 -2
  11. package/dist/api/schemas/index.mjs +5 -5
  12. package/dist/api-Dz6rgoa3.mjs +10040 -0
  13. package/dist/api-Dz6rgoa3.mjs.map +1 -0
  14. package/dist/{api-tokens-KO24G1Fd.mjs → api-tokens-BSsQACNe.mjs} +2 -2
  15. package/dist/{api-tokens-KO24G1Fd.mjs.map → api-tokens-BSsQACNe.mjs.map} +1 -1
  16. package/dist/{apply-kUDt80-G.mjs → apply-B4SIOxR1.mjs} +34 -35
  17. package/dist/{apply-kUDt80-G.mjs.map → apply-B4SIOxR1.mjs.map} +1 -1
  18. package/dist/astro/image-endpoint.mjs +2 -2
  19. package/dist/astro/image-endpoint.mjs.map +1 -1
  20. package/dist/astro/index.d.mts +12 -12
  21. package/dist/astro/index.d.mts.map +1 -1
  22. package/dist/astro/index.mjs +128 -44
  23. package/dist/astro/index.mjs.map +1 -1
  24. package/dist/astro/middleware/auth.d.mts +10 -10
  25. package/dist/astro/middleware/auth.d.mts.map +1 -1
  26. package/dist/astro/middleware/auth.mjs +10 -7
  27. package/dist/astro/middleware/auth.mjs.map +1 -1
  28. package/dist/astro/middleware/media-usage-write-fence.mjs +2 -2
  29. package/dist/astro/middleware/redirect.mjs +4 -4
  30. package/dist/astro/middleware/request-context.mjs +3 -3
  31. package/dist/astro/middleware/setup.mjs +1 -1
  32. package/dist/astro/middleware.d.mts +11 -12
  33. package/dist/astro/middleware.d.mts.map +1 -1
  34. package/dist/astro/middleware.mjs +237 -1412
  35. package/dist/astro/middleware.mjs.map +1 -1
  36. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
  37. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
  38. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
  39. package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -1
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
  41. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  43. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
  44. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
  45. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
  46. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +16 -16
  47. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +16 -16
  48. package/dist/astro/routes/api/admin/bylines/index.mjs +16 -16
  49. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
  50. package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
  51. package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
  52. package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
  53. package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
  54. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
  55. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  56. package/dist/astro/routes/api/admin/media-usage/activation.d.mts +9 -0
  57. package/dist/astro/routes/api/admin/media-usage/activation.d.mts.map +1 -0
  58. package/dist/astro/routes/api/admin/media-usage/activation.mjs +46 -0
  59. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -0
  60. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +14 -13
  61. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +14 -13
  63. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  64. package/dist/astro/routes/api/admin/media-usage/progress.d.mts +9 -0
  65. package/dist/astro/routes/api/admin/media-usage/progress.d.mts.map +1 -0
  66. package/dist/astro/routes/api/admin/media-usage/progress.mjs +44 -0
  67. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -0
  68. package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -11
  69. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +14 -13
  71. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +14 -13
  73. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  75. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  77. package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +55 -49
  79. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -49
  81. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +53 -47
  83. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
  85. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +53 -47
  86. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -48
  88. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +54 -48
  90. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/index.mjs +53 -47
  92. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +53 -47
  95. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +54 -48
  97. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +53 -47
  99. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +54 -48
  101. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +60 -50
  104. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +179 -139
  107. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +61 -51
  110. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts +8 -0
  112. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -0
  113. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +93 -0
  114. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -0
  115. package/dist/astro/routes/api/admin/plugins/updates.mjs +53 -47
  116. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +53 -47
  118. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  119. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  120. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +53 -47
  121. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
  123. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
  124. package/dist/astro/routes/api/admin/users/_id_/index.mjs +7 -7
  125. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  126. package/dist/astro/routes/api/admin/users/index.mjs +6 -6
  127. package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
  128. package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
  129. package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
  130. package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
  131. package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
  132. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  133. package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
  134. package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
  135. package/dist/astro/routes/api/auth/me.d.mts.map +1 -1
  136. package/dist/astro/routes/api/auth/me.mjs +19 -9
  137. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  138. package/dist/astro/routes/api/auth/mode.mjs +2 -2
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
  148. package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +13 -13
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  154. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +14 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  156. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
  157. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +2 -2
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +13 -10
  160. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +17 -15
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +17 -15
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  165. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
  166. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  167. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +8 -8
  168. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +14 -14
  169. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  170. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +14 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  173. package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
  174. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  175. package/dist/astro/routes/api/content/_collection_/index.mjs +8 -8
  176. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
  177. package/dist/astro/routes/api/dashboard.mjs +8 -8
  178. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  179. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  180. package/dist/astro/routes/api/import/probe.mjs +17 -17
  181. package/dist/astro/routes/api/import/wordpress/analyze.mjs +2 -2
  182. package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
  183. package/dist/astro/routes/api/import/wordpress/execute.mjs +13 -13
  184. package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
  185. package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
  186. package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
  187. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
  188. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -10
  189. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  190. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  191. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +17 -17
  192. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
  193. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -27
  194. package/dist/astro/routes/api/manifest.mjs +4 -4
  195. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  196. package/dist/astro/routes/api/mcp.mjs +188 -65
  197. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  198. package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
  199. package/dist/astro/routes/api/media/_id_/replace.d.mts +8 -0
  200. package/dist/astro/routes/api/media/_id_/replace.d.mts.map +1 -0
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +91 -0
  202. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -0
  203. package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
  204. package/dist/astro/routes/api/media/_id_/usage.mjs +18 -13
  205. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  206. package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
  207. package/dist/astro/routes/api/media/_id_.mjs +21 -13
  208. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  209. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  210. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -2
  211. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  212. package/dist/astro/routes/api/media/folders/_id_.d.mts +10 -0
  213. package/dist/astro/routes/api/media/folders/_id_.d.mts.map +1 -0
  214. package/dist/astro/routes/api/media/folders/_id_.mjs +52 -0
  215. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -0
  216. package/dist/astro/routes/api/media/folders/index.d.mts +9 -0
  217. package/dist/astro/routes/api/media/folders/index.d.mts.map +1 -0
  218. package/dist/astro/routes/api/media/folders/index.mjs +41 -0
  219. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -0
  220. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  221. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  222. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  223. package/dist/astro/routes/api/media/upload-url.mjs +16 -14
  224. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  225. package/dist/astro/routes/api/media.d.mts.map +1 -1
  226. package/dist/astro/routes/api/media.mjs +59 -27
  227. package/dist/astro/routes/api/media.mjs.map +1 -1
  228. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  229. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -13
  230. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  231. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  232. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -11
  233. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  234. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  235. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -11
  236. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  237. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  238. package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -12
  239. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  240. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  241. package/dist/astro/routes/api/menus/_name_.mjs +21 -14
  242. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  243. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  244. package/dist/astro/routes/api/menus/index.mjs +15 -11
  245. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  246. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  247. package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
  248. package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
  249. package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
  250. package/dist/astro/routes/api/oauth/register.mjs +2 -2
  251. package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
  252. package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
  253. package/dist/astro/routes/api/oauth/token.mjs +5 -5
  254. package/dist/astro/routes/api/openapi.json.mjs +253 -40
  255. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  256. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
  257. package/dist/astro/routes/api/redirects/404s/index.mjs +10 -10
  258. package/dist/astro/routes/api/redirects/404s/summary.mjs +10 -10
  259. package/dist/astro/routes/api/redirects/_id_.mjs +11 -11
  260. package/dist/astro/routes/api/redirects/index.mjs +11 -11
  261. package/dist/astro/routes/api/relations/_id_/index.mjs +17 -15
  262. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  263. package/dist/astro/routes/api/relations/_id_/translations.mjs +12 -10
  264. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  265. package/dist/astro/routes/api/relations/index.mjs +17 -15
  266. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  267. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  268. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
  269. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +53 -47
  270. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  271. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +53 -47
  272. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  273. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +53 -47
  274. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  275. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +53 -47
  276. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  277. package/dist/astro/routes/api/schema/collections/index.mjs +53 -47
  278. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  279. package/dist/astro/routes/api/schema/collections/reorder.mjs +53 -47
  280. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  281. package/dist/astro/routes/api/schema/index.mjs +10 -8
  282. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  283. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +53 -47
  284. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  285. package/dist/astro/routes/api/schema/orphans/index.mjs +53 -47
  286. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/search/enable.mjs +10 -10
  288. package/dist/astro/routes/api/search/index.mjs +9 -9
  289. package/dist/astro/routes/api/search/rebuild.mjs +10 -10
  290. package/dist/astro/routes/api/search/stats.mjs +5 -5
  291. package/dist/astro/routes/api/search/suggest.mjs +9 -9
  292. package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
  293. package/dist/astro/routes/api/sections/index.mjs +9 -9
  294. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +6 -6
  295. package/dist/astro/routes/api/settings/backups/archives/index.mjs +5 -5
  296. package/dist/astro/routes/api/settings/backups/export.mjs +6 -6
  297. package/dist/astro/routes/api/settings/backups/index.mjs +7 -7
  298. package/dist/astro/routes/api/settings/email.mjs +5 -5
  299. package/dist/astro/routes/api/settings/email.mjs.map +1 -1
  300. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  301. package/dist/astro/routes/api/settings.mjs +20 -16
  302. package/dist/astro/routes/api/settings.mjs.map +1 -1
  303. package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
  304. package/dist/astro/routes/api/setup/admin.mjs +11 -11
  305. package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
  306. package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -28
  307. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  308. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  309. package/dist/astro/routes/api/setup/index.mjs +32 -30
  310. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  311. package/dist/astro/routes/api/setup/status.mjs +3 -3
  312. package/dist/astro/routes/api/snapshot.mjs +7 -7
  313. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  314. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +20 -16
  315. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  316. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  317. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +21 -17
  318. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  319. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  320. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -18
  321. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  322. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  323. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +20 -16
  324. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  325. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +14 -14
  326. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  327. package/dist/astro/routes/api/taxonomies/_name_.mjs +26 -19
  328. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  329. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  330. package/dist/astro/routes/api/taxonomies/index.mjs +20 -16
  331. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  332. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  333. package/dist/astro/routes/api/typegen.mjs +4 -4
  334. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  335. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  336. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  337. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  338. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -8
  339. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  340. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  341. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +17 -13
  342. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  343. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  344. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +15 -12
  345. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  346. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  347. package/dist/astro/routes/api/widget-areas/_name_.mjs +8 -6
  348. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  349. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  350. package/dist/astro/routes/api/widget-areas/index.mjs +15 -12
  351. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  352. package/dist/astro/routes/api/widget-components.mjs +2 -2
  353. package/dist/astro/routes/robots.txt.mjs +7 -7
  354. package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
  355. package/dist/astro/routes/sitemap.xml.mjs +8 -8
  356. package/dist/astro/types.d.mts +37 -17
  357. package/dist/astro/types.d.mts.map +1 -1
  358. package/dist/auth/providers/github.d.mts +1 -1
  359. package/dist/auth/providers/google.d.mts +1 -1
  360. package/dist/{authorize-DUElxgOQ.mjs → authorize-Bkf_UHhD.mjs} +2 -2
  361. package/dist/{authorize-DUElxgOQ.mjs.map → authorize-Bkf_UHhD.mjs.map} +1 -1
  362. package/dist/{backup-DWYpJlLj.mjs → backup-rwVAl9NI.mjs} +5 -5
  363. package/dist/{backup-DWYpJlLj.mjs.map → backup-rwVAl9NI.mjs.map} +1 -1
  364. package/dist/{bundle-vn56sLos.mjs → bundle-C8S2Zl6U.mjs} +4 -4
  365. package/dist/{bundle-vn56sLos.mjs.map → bundle-C8S2Zl6U.mjs.map} +1 -1
  366. package/dist/{byline-yjvWq4ip.mjs → byline-DuhF7NWl.mjs} +27 -14
  367. package/dist/byline-DuhF7NWl.mjs.map +1 -0
  368. package/dist/{byline-fields-txaLGoME.mjs → byline-fields-BovY4KYM.mjs} +2 -2
  369. package/dist/{byline-fields-txaLGoME.mjs.map → byline-fields-BovY4KYM.mjs.map} +1 -1
  370. package/dist/{byline-registry-DDun8sxh.mjs → byline-registry-Bpu9-MVs.mjs} +2 -2
  371. package/dist/{byline-registry-DDun8sxh.mjs.map → byline-registry-Bpu9-MVs.mjs.map} +1 -1
  372. package/dist/{bylines-DjXS5p0P.mjs → bylines-CJ5nd6Lw.mjs} +7 -7
  373. package/dist/{bylines-DjXS5p0P.mjs.map → bylines-CJ5nd6Lw.mjs.map} +1 -1
  374. package/dist/{bylines-Bu7pchQ4.mjs → bylines-RwBAeOF1.mjs} +3 -3
  375. package/dist/{bylines-Bu7pchQ4.mjs.map → bylines-RwBAeOF1.mjs.map} +1 -1
  376. package/dist/{cache-C46-3Irl.mjs → cache-BF5Kvn59.mjs} +4 -4
  377. package/dist/{cache-C46-3Irl.mjs.map → cache-BF5Kvn59.mjs.map} +1 -1
  378. package/dist/capture-triggers-CNW1q3HK.mjs +362 -0
  379. package/dist/capture-triggers-CNW1q3HK.mjs.map +1 -0
  380. package/dist/{challenge-store-SIL5DsF2.mjs → challenge-store-DQN_Yrck.mjs} +5 -3
  381. package/dist/challenge-store-DQN_Yrck.mjs.map +1 -0
  382. package/dist/chrome-tags-D8fiZG94.mjs +24 -0
  383. package/dist/chrome-tags-D8fiZG94.mjs.map +1 -0
  384. package/dist/{chunks-fiZ8G9RJ.mjs → chunks-C4szrD8o.mjs} +2 -2
  385. package/dist/{chunks-fiZ8G9RJ.mjs.map → chunks-C4szrD8o.mjs.map} +1 -1
  386. package/dist/cli/index.mjs +37 -53
  387. package/dist/cli/index.mjs.map +1 -1
  388. package/dist/client/cf-access.d.mts +1 -1
  389. package/dist/client/index.d.mts +74 -4
  390. package/dist/client/index.d.mts.map +1 -1
  391. package/dist/client/index.mjs +54 -2
  392. package/dist/client/index.mjs.map +1 -1
  393. package/dist/{collection-deletion-DQPvMD8R.mjs → collection-deletion-Bj07NHbj.mjs} +13 -356
  394. package/dist/collection-deletion-Bj07NHbj.mjs.map +1 -0
  395. package/dist/{comment-reaction-D-2J84UE.mjs → comment-reaction-BhrvSHml.mjs} +2 -2
  396. package/dist/{comment-reaction-D-2J84UE.mjs.map → comment-reaction-BhrvSHml.mjs.map} +1 -1
  397. package/dist/{comment-Dxlep6cE.mjs → comment-vxOzWbZN.mjs} +2 -2
  398. package/dist/{comment-Dxlep6cE.mjs.map → comment-vxOzWbZN.mjs.map} +1 -1
  399. package/dist/{comments-CTfZtLmM.mjs → comments-Ct4ensnf.mjs} +2 -2
  400. package/dist/{comments-CTfZtLmM.mjs.map → comments-Ct4ensnf.mjs.map} +1 -1
  401. package/dist/{components-CQy3lh9x.mjs → components-DJbo1z0S.mjs} +1 -1
  402. package/dist/{components-CQy3lh9x.mjs.map → components-DJbo1z0S.mjs.map} +1 -1
  403. package/dist/{config-COQzTe5Q.d.mts → config-B9eZ340f.d.mts} +1 -1
  404. package/dist/{config-COQzTe5Q.d.mts.map → config-B9eZ340f.d.mts.map} +1 -1
  405. package/dist/config-it29yDLA.mjs +1163 -0
  406. package/dist/config-it29yDLA.mjs.map +1 -0
  407. package/dist/{content-ZHCc1ngN.mjs → content-DjvM0T92.mjs} +86 -45
  408. package/dist/content-DjvM0T92.mjs.map +1 -0
  409. package/dist/{content-list-query-wJ2WN8Vp.d.mts → content-list-query-Btqd4uV2.d.mts} +1 -1
  410. package/dist/{content-list-query-wJ2WN8Vp.d.mts.map → content-list-query-Btqd4uV2.d.mts.map} +1 -1
  411. package/dist/{content-refresh-B_8SJzuU.mjs → content-refresh-Bwp-8yGy.mjs} +1139 -111
  412. package/dist/content-refresh-Bwp-8yGy.mjs.map +1 -0
  413. package/dist/{media-usage-BZCydfvu.mjs → content-repair-Czdp7jz5.mjs} +5 -196
  414. package/dist/content-repair-Czdp7jz5.mjs.map +1 -0
  415. package/dist/{context-ZldbZcle.mjs → context-CX6gxOLW.mjs} +55 -20
  416. package/dist/context-CX6gxOLW.mjs.map +1 -0
  417. package/dist/{cron-Y9aLtgrA.mjs → cron-C6o7VppJ.mjs} +1 -1
  418. package/dist/{cron-Y9aLtgrA.mjs.map → cron-C6o7VppJ.mjs.map} +1 -1
  419. package/dist/{dashboard-DvHbk_cv.mjs → dashboard-C2kTeeRI.mjs} +5 -5
  420. package/dist/{dashboard-DvHbk_cv.mjs.map → dashboard-C2kTeeRI.mjs.map} +1 -1
  421. package/dist/db/index.d.mts +3 -3
  422. package/dist/db/index.mjs +3 -3
  423. package/dist/db/index.mjs.map +1 -1
  424. package/dist/db/libsql-migrations.d.mts +1 -1
  425. package/dist/db/libsql-migrations.mjs +4 -4
  426. package/dist/db/libsql.d.mts +1 -1
  427. package/dist/db/postgres-migrations.d.mts +1 -1
  428. package/dist/db/postgres-migrations.mjs +4 -4
  429. package/dist/db/postgres.d.mts +1 -1
  430. package/dist/db/postgres.d.mts.map +1 -1
  431. package/dist/db/postgres.mjs +19 -3
  432. package/dist/db/postgres.mjs.map +1 -1
  433. package/dist/db/sqlite-migrations.d.mts +1 -1
  434. package/dist/db/sqlite-migrations.mjs +4 -4
  435. package/dist/db/sqlite.d.mts +1 -1
  436. package/dist/db/sqlite.mjs +3 -3
  437. package/dist/db/sqlite.mjs.map +1 -1
  438. package/dist/{default-DdDl3fxv.mjs → default-Clra32mw.mjs} +1 -1
  439. package/dist/{default-DdDl3fxv.mjs.map → default-Clra32mw.mjs.map} +1 -1
  440. package/dist/{deferred-tasks-SDWxrgzJ.d.mts → deferred-tasks-CvDETTJO.d.mts} +1 -1
  441. package/dist/{deferred-tasks-SDWxrgzJ.d.mts.map → deferred-tasks-CvDETTJO.d.mts.map} +1 -1
  442. package/dist/dev-typegen-DzOPfsNj.mjs +29 -0
  443. package/dist/dev-typegen-DzOPfsNj.mjs.map +1 -0
  444. package/dist/{device-flow-C0GdD_z8.mjs → device-flow-D2oCWvLJ.mjs} +5 -5
  445. package/dist/{device-flow-C0GdD_z8.mjs.map → device-flow-D2oCWvLJ.mjs.map} +1 -1
  446. package/dist/{direct-executor-CDXeJCSs.mjs → direct-executor-Bfa5_ToE.mjs} +3 -3
  447. package/dist/{direct-executor-CDXeJCSs.mjs.map → direct-executor-Bfa5_ToE.mjs.map} +1 -1
  448. package/dist/{dist-D_6CKR8z.mjs → dist-89xCrGqi.mjs} +1 -1
  449. package/dist/{dist-D_6CKR8z.mjs.map → dist-89xCrGqi.mjs.map} +1 -1
  450. package/dist/{email-console-BHNjIwiB.mjs → email-console-Dzb6uGYa.mjs} +1 -1
  451. package/dist/{email-console-BHNjIwiB.mjs.map → email-console-Dzb6uGYa.mjs.map} +1 -1
  452. package/dist/{enrich-_ySMEvEE.mjs → enrich-BX0IDp4z.mjs} +3 -3
  453. package/dist/{enrich-_ySMEvEE.mjs.map → enrich-BX0IDp4z.mjs.map} +1 -1
  454. package/dist/{error-DupyJZE2.mjs → error-DFrQjppn.mjs} +2 -2
  455. package/dist/{error-DupyJZE2.mjs.map → error-DFrQjppn.mjs.map} +1 -1
  456. package/dist/{errors-CLUPm7aD.mjs → errors-DsVoDUjJ.mjs} +24 -2
  457. package/dist/errors-DsVoDUjJ.mjs.map +1 -0
  458. package/dist/{escape-DUY2r2Zs.mjs → escape-HmHTC1Is.mjs} +1 -1
  459. package/dist/{escape-DUY2r2Zs.mjs.map → escape-HmHTC1Is.mjs.map} +1 -1
  460. package/dist/{field-defs-cache-BzwBlJrR.mjs → field-defs-cache-BM4SIRqH.mjs} +5 -5
  461. package/dist/{field-defs-cache-BzwBlJrR.mjs.map → field-defs-cache-BM4SIRqH.mjs.map} +1 -1
  462. package/dist/focal-point-BeWFo6Xx.mjs +23 -0
  463. package/dist/focal-point-BeWFo6Xx.mjs.map +1 -0
  464. package/dist/{fts-manager-DyZEohZC.mjs → fts-manager-Do1BlW2r.mjs} +3 -3
  465. package/dist/{fts-manager-DyZEohZC.mjs.map → fts-manager-Do1BlW2r.mjs.map} +1 -1
  466. package/dist/{hash-Cg0TXJPV.mjs → hash-3JJPlHF2.mjs} +1 -1
  467. package/dist/{hash-Cg0TXJPV.mjs.map → hash-3JJPlHF2.mjs.map} +1 -1
  468. package/dist/hook-result-DCh2WUpe.d.mts +31 -0
  469. package/dist/hook-result-DCh2WUpe.d.mts.map +1 -0
  470. package/dist/{hreflang-DwT2E0Sa.d.mts → hreflang-B6hbAuuO.d.mts} +2 -2
  471. package/dist/{hreflang-DwT2E0Sa.d.mts.map → hreflang-B6hbAuuO.d.mts.map} +1 -1
  472. package/dist/{hreflang-BBe83kKa.mjs → hreflang-DQbPZliA.mjs} +7 -7
  473. package/dist/{hreflang-BBe83kKa.mjs.map → hreflang-DQbPZliA.mjs.map} +1 -1
  474. package/dist/{identity-Ys6Dlc9C.mjs → identity-DksvEazf.mjs} +3 -3
  475. package/dist/{identity-Ys6Dlc9C.mjs.map → identity-DksvEazf.mjs.map} +1 -1
  476. package/dist/{import-DPkLmeXO.mjs → import-CJpaBBBT.mjs} +6 -6
  477. package/dist/{import-DPkLmeXO.mjs.map → import-CJpaBBBT.mjs.map} +1 -1
  478. package/dist/{index-BVBZj4-7.d.mts → index-BJNMCWmu.d.mts} +267 -82
  479. package/dist/index-BJNMCWmu.d.mts.map +1 -0
  480. package/dist/{index-C9KuQyO-.d.mts → index-Du8K7bWa.d.mts} +3 -3
  481. package/dist/{index-C9KuQyO-.d.mts.map → index-Du8K7bWa.d.mts.map} +1 -1
  482. package/dist/index.d.mts +22 -21
  483. package/dist/index.mjs +79 -73
  484. package/dist/{init-lock-6b309ZrF.mjs → init-lock-DJkX6Hto.mjs} +1 -1
  485. package/dist/{init-lock-6b309ZrF.mjs.map → init-lock-DJkX6Hto.mjs.map} +1 -1
  486. package/dist/{load-YJ2xl3ra.mjs → load-CawHjTOH.mjs} +2 -2
  487. package/dist/{load-YJ2xl3ra.mjs.map → load-CawHjTOH.mjs.map} +1 -1
  488. package/dist/{loader-CdG_Ci3H.mjs → loader-Z8vl7zTq.mjs} +48 -13
  489. package/dist/loader-Z8vl7zTq.mjs.map +1 -0
  490. package/dist/{manifest-builder-B252yQUf.mjs → manifest-builder-COtzuca2.mjs} +2 -2
  491. package/dist/{manifest-builder-B252yQUf.mjs.map → manifest-builder-COtzuca2.mjs.map} +1 -1
  492. package/dist/{manifest-schema-BXbUAHod.mjs → manifest-schema-BNWwR8Vd.mjs} +5 -5
  493. package/dist/manifest-schema-BNWwR8Vd.mjs.map +1 -0
  494. package/dist/media/image-endpoint.d.mts +4 -2
  495. package/dist/media/image-endpoint.d.mts.map +1 -1
  496. package/dist/media/image-endpoint.mjs +6 -4
  497. package/dist/media/image-endpoint.mjs.map +1 -1
  498. package/dist/media/index.d.mts +1 -1
  499. package/dist/media/index.mjs +13 -3
  500. package/dist/media/index.mjs.map +1 -1
  501. package/dist/media/local-runtime.d.mts +14 -12
  502. package/dist/media/local-runtime.d.mts.map +1 -1
  503. package/dist/media/local-runtime.mjs +12 -6
  504. package/dist/media/local-runtime.mjs.map +1 -1
  505. package/dist/{media-CzhAn2--.mjs → media-BBm8Wg3f.mjs} +69 -12
  506. package/dist/media-BBm8Wg3f.mjs.map +1 -0
  507. package/dist/{media-BWWWb8kg.mjs → media-BHjus86Y.mjs} +133 -9
  508. package/dist/media-BHjus86Y.mjs.map +1 -0
  509. package/dist/{media-allowlist-D6x-Us02.mjs → media-allowlist-CoTBWoDp.mjs} +3 -2
  510. package/dist/media-allowlist-CoTBWoDp.mjs.map +1 -0
  511. package/dist/media-folders-BGkATs8n.mjs +210 -0
  512. package/dist/media-folders-BGkATs8n.mjs.map +1 -0
  513. package/dist/{media-upload-CHBVn6m-.mjs → media-upload-BCidR-EY.mjs} +9 -9
  514. package/dist/{media-upload-CHBVn6m-.mjs.map → media-upload-BCidR-EY.mjs.map} +1 -1
  515. package/dist/{media-url-BvoX88FA.mjs → media-url-DHoPr0hq.mjs} +1 -1
  516. package/dist/{media-url-BvoX88FA.mjs.map → media-url-DHoPr0hq.mjs.map} +1 -1
  517. package/dist/media-usage-CdY5jhSR.mjs +1833 -0
  518. package/dist/media-usage-CdY5jhSR.mjs.map +1 -0
  519. package/dist/media-usage-activation-BgeMtK5C.mjs +78 -0
  520. package/dist/media-usage-activation-BgeMtK5C.mjs.map +1 -0
  521. package/dist/{media-usage-work-CLo_6tct.mjs → media-usage-work-CnGCdHxx.mjs} +4 -4
  522. package/dist/{media-usage-work-CLo_6tct.mjs.map → media-usage-work-CnGCdHxx.mjs.map} +1 -1
  523. package/dist/{media-usage-work-DrCbqBcl.mjs → media-usage-work-D6D9sMCA.mjs} +221 -59
  524. package/dist/media-usage-work-D6D9sMCA.mjs.map +1 -0
  525. package/dist/{media-usage-write-fence-aHEgN1zB.mjs → media-usage-write-fence-hjeD4u7s.mjs} +2 -2
  526. package/dist/{media-usage-write-fence-aHEgN1zB.mjs.map → media-usage-write-fence-hjeD4u7s.mjs.map} +1 -1
  527. package/dist/{menus-DSo5QeW0.mjs → menus-6qSwTNxG.mjs} +375 -107
  528. package/dist/menus-6qSwTNxG.mjs.map +1 -0
  529. package/dist/{menus-TCNSd2vp.mjs → menus-uvPLXMZf.mjs} +4 -4
  530. package/dist/{menus-TCNSd2vp.mjs.map → menus-uvPLXMZf.mjs.map} +1 -1
  531. package/dist/migrations/index.d.mts +1 -1
  532. package/dist/migrations/index.mjs +3 -3
  533. package/dist/{mime-DfIVjNkr.mjs → mime-CUIG6x84.mjs} +1 -1
  534. package/dist/mime-CUIG6x84.mjs.map +1 -0
  535. package/dist/{mode-BDoH_WcF.mjs → mode-DN_WneRx.mjs} +1 -1
  536. package/dist/{mode-BDoH_WcF.mjs.map → mode-DN_WneRx.mjs.map} +1 -1
  537. package/dist/node-sqlite-compat-BuJXIeMz.mjs +46 -0
  538. package/dist/node-sqlite-compat-BuJXIeMz.mjs.map +1 -0
  539. package/dist/{normalize-Bc-s_r-a.mjs → normalize-C2xNjTSG.mjs} +36 -5
  540. package/dist/normalize-C2xNjTSG.mjs.map +1 -0
  541. package/dist/{oauth-authorization-iOikmrJd.mjs → oauth-authorization-Dj6Kwc21.mjs} +5 -5
  542. package/dist/{oauth-authorization-iOikmrJd.mjs.map → oauth-authorization-Dj6Kwc21.mjs.map} +1 -1
  543. package/dist/{oauth-clients-CvI0nHMJ.mjs → oauth-clients-FD7I0J8m.mjs} +1 -1
  544. package/dist/{oauth-clients-CvI0nHMJ.mjs.map → oauth-clients-FD7I0J8m.mjs.map} +1 -1
  545. package/dist/{oauth-state-store-Ba8KZlwW.mjs → oauth-state-store-DkmDOmHs.mjs} +1 -1
  546. package/dist/{oauth-state-store-Ba8KZlwW.mjs.map → oauth-state-store-DkmDOmHs.mjs.map} +1 -1
  547. package/dist/{oauth-user-lookup-C5SQwGYC.mjs → oauth-user-lookup-CvIwGpYd.mjs} +1 -1
  548. package/dist/{oauth-user-lookup-C5SQwGYC.mjs.map → oauth-user-lookup-CvIwGpYd.mjs.map} +1 -1
  549. package/dist/object-cache/memory.d.mts +1 -1
  550. package/dist/{object-cache-71tPfV4A.mjs → object-cache-DVKnyOfy.mjs} +19 -3
  551. package/dist/object-cache-DVKnyOfy.mjs.map +1 -0
  552. package/dist/{options-CBXIHUoT.mjs → options-BHPeIbBd.mjs} +1 -1
  553. package/dist/{options-CBXIHUoT.mjs.map → options-BHPeIbBd.mjs.map} +1 -1
  554. package/dist/{options--hhz-jZ1.d.mts → options-CYb4y7hM.d.mts} +24 -11
  555. package/dist/options-CYb4y7hM.d.mts.map +1 -0
  556. package/dist/page/index.d.mts +2 -2
  557. package/dist/{parse-DFbuc-Fh.mjs → parse-Ckpg-Qfp.mjs} +2 -2
  558. package/dist/{parse-DFbuc-Fh.mjs.map → parse-Ckpg-Qfp.mjs.map} +1 -1
  559. package/dist/{passkey-config-DFAmUyuE.mjs → passkey-config-O_lj3y0k.mjs} +1 -1
  560. package/dist/{passkey-config-DFAmUyuE.mjs.map → passkey-config-O_lj3y0k.mjs.map} +1 -1
  561. package/dist/{patterns-CiyXeDgr.mjs → patterns-D9iDO3j8.mjs} +1 -1
  562. package/dist/{patterns-CiyXeDgr.mjs.map → patterns-D9iDO3j8.mjs.map} +1 -1
  563. package/dist/{placeholder-Dp0K3RkD.d.mts → placeholder-4X9BrRrp.d.mts} +7 -1
  564. package/dist/placeholder-4X9BrRrp.d.mts.map +1 -0
  565. package/dist/plugin-types.d.mts +8 -3
  566. package/dist/plugin-types.d.mts.map +1 -1
  567. package/dist/plugin-utils.d.mts +10 -10
  568. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
  569. package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
  570. package/dist/{policy-TluUIxuu.mjs → policy-Dhtwntrt.mjs} +2 -2
  571. package/dist/{policy-TluUIxuu.mjs.map → policy-Dhtwntrt.mjs.map} +1 -1
  572. package/dist/{portable-text-imBW5cHK.mjs → portable-text-U85hOafW.mjs} +1 -1
  573. package/dist/{portable-text-imBW5cHK.mjs.map → portable-text-U85hOafW.mjs.map} +1 -1
  574. package/dist/{preview-PW-nOnq4.mjs → preview-B_vJLvf8.mjs} +2 -2
  575. package/dist/{preview-PW-nOnq4.mjs.map → preview-B_vJLvf8.mjs.map} +1 -1
  576. package/dist/{protocol-DjsJHTlK.d.mts → protocol-JdD2YhY9.d.mts} +2 -2
  577. package/dist/{protocol-DjsJHTlK.d.mts.map → protocol-JdD2YhY9.d.mts.map} +1 -1
  578. package/dist/{public-url-CWoFhQT8.mjs → public-url-CarhZJgf.mjs} +1 -1
  579. package/dist/{public-url-CWoFhQT8.mjs.map → public-url-CarhZJgf.mjs.map} +1 -1
  580. package/dist/{query-zTVAR1Sl.mjs → query-BZKZcG5b.mjs} +15 -15
  581. package/dist/{query-zTVAR1Sl.mjs.map → query-BZKZcG5b.mjs.map} +1 -1
  582. package/dist/{query-BWs7O5Il.mjs → query-BndaFxxp.mjs} +5 -5
  583. package/dist/{query-BWs7O5Il.mjs.map → query-BndaFxxp.mjs.map} +1 -1
  584. package/dist/{rate-limit-Bx4g9m3p.mjs → rate-limit-BZmATC6W.mjs} +2 -2
  585. package/dist/{rate-limit-Bx4g9m3p.mjs.map → rate-limit-BZmATC6W.mjs.map} +1 -1
  586. package/dist/{redirect-COsS6SWJ.mjs → redirect-CZkbozu9.mjs} +2 -2
  587. package/dist/{redirect-COsS6SWJ.mjs.map → redirect-CZkbozu9.mjs.map} +1 -1
  588. package/dist/{redirect-BgAOGHDq.mjs → redirect-CzqnLxK-.mjs} +1 -1
  589. package/dist/{redirect-BgAOGHDq.mjs.map → redirect-CzqnLxK-.mjs.map} +1 -1
  590. package/dist/{redirects-DTDHWH31.mjs → redirects-BLNOWQTn.mjs} +64 -29
  591. package/dist/redirects-BLNOWQTn.mjs.map +1 -0
  592. package/dist/{redirects-DyChwDkG.mjs → redirects-CqzNM0KM.mjs} +5 -5
  593. package/dist/{redirects-DyChwDkG.mjs.map → redirects-CqzNM0KM.mjs.map} +1 -1
  594. package/dist/{registry-Cqa2I749.mjs → registry-AZAsRsor.mjs} +30 -126
  595. package/dist/registry-AZAsRsor.mjs.map +1 -0
  596. package/dist/{relation-BnHB0T4J.mjs → relation-04DfKRTO.mjs} +2 -2
  597. package/dist/{relation-BnHB0T4J.mjs.map → relation-04DfKRTO.mjs.map} +1 -1
  598. package/dist/{relations-BBApI4e2.mjs → relations-C4htk5sb.mjs} +7 -7
  599. package/dist/relations-C4htk5sb.mjs.map +1 -0
  600. package/dist/{relations-D5sM5fW0.mjs → relations-CcFwDJdJ.mjs} +4 -4
  601. package/dist/{relations-D5sM5fW0.mjs.map → relations-CcFwDJdJ.mjs.map} +1 -1
  602. package/dist/{relations-BHo5A8Zf.d.mts → relations-DnRK4YIT.d.mts} +347 -54
  603. package/dist/relations-DnRK4YIT.d.mts.map +1 -0
  604. package/dist/{request-cache-BSUptuJR.mjs → request-cache-DH9zdCOD.mjs} +1 -1
  605. package/dist/{request-cache-BSUptuJR.mjs.map → request-cache-DH9zdCOD.mjs.map} +1 -1
  606. package/dist/request-context.d.mts +1 -1
  607. package/dist/{request-meta-DgZJh3zG.mjs → request-meta-DYxLlnmz.mjs} +2 -2
  608. package/dist/{request-meta-DgZJh3zG.mjs.map → request-meta-DYxLlnmz.mjs.map} +1 -1
  609. package/dist/{resolve-DOhVEvty.mjs → resolve-prZ3mP7l.mjs} +1 -1
  610. package/dist/{resolve-DOhVEvty.mjs.map → resolve-prZ3mP7l.mjs.map} +1 -1
  611. package/dist/{runner-C1T11CfC.mjs → runner-BLIDKpmA.mjs} +471 -290
  612. package/dist/runner-BLIDKpmA.mjs.map +1 -0
  613. package/dist/{runner-BYHZn3Jy.d.mts → runner-YKfIMnaF.d.mts} +3 -2
  614. package/dist/runner-YKfIMnaF.d.mts.map +1 -0
  615. package/dist/runtime.d.mts +11 -11
  616. package/dist/runtime.mjs +1 -1
  617. package/dist/{schema-DZ5YVVZj.mjs → schema-CGnBeLiW.mjs} +3 -3
  618. package/dist/{schema-DZ5YVVZj.mjs.map → schema-CGnBeLiW.mjs.map} +1 -1
  619. package/dist/{schema-2AOsSn2v.mjs → schema-DYr-Vd-L.mjs} +36 -6
  620. package/dist/{schema-2AOsSn2v.mjs.map → schema-DYr-Vd-L.mjs.map} +1 -1
  621. package/dist/{scopes-8ClPF2bC.mjs → scopes-BhWvBavj.mjs} +3 -3
  622. package/dist/{scopes-8ClPF2bC.mjs.map → scopes-BhWvBavj.mjs.map} +1 -1
  623. package/dist/{search-u1QYdOCG.mjs → search-C-qDk4kx.mjs} +4 -4
  624. package/dist/{search-u1QYdOCG.mjs.map → search-C-qDk4kx.mjs.map} +1 -1
  625. package/dist/{secrets-BEgsAQEU.mjs → secrets-rEtHt-6z.mjs} +3 -3
  626. package/dist/{secrets-BEgsAQEU.mjs.map → secrets-rEtHt-6z.mjs.map} +1 -1
  627. package/dist/{sections-DmHviGyM.mjs → sections-B_nYvlwn.mjs} +2 -2
  628. package/dist/{sections-DmHviGyM.mjs.map → sections-B_nYvlwn.mjs.map} +1 -1
  629. package/dist/seed/index.d.mts +2 -2
  630. package/dist/seed/index.mjs +25 -23
  631. package/dist/seo/index.d.mts +3 -3
  632. package/dist/seo/index.mjs +17 -15
  633. package/dist/seo/index.mjs.map +1 -1
  634. package/dist/{seo-Dq4G-RrO.mjs → seo-926NRIgt.mjs} +3 -3
  635. package/dist/{seo-Dq4G-RrO.mjs.map → seo-926NRIgt.mjs.map} +1 -1
  636. package/dist/{seo-AFpVvTqr.mjs → seo-CVWkdv6x.mjs} +1 -1
  637. package/dist/{seo-AFpVvTqr.mjs.map → seo-CVWkdv6x.mjs.map} +1 -1
  638. package/dist/{service-BpArayPr.mjs → service-CJl3ZAYs.mjs} +3 -3
  639. package/dist/{service-BpArayPr.mjs.map → service-CJl3ZAYs.mjs.map} +1 -1
  640. package/dist/{session-user-BEorKVT-.mjs → session-user-BlMgqCHS.mjs} +1 -1
  641. package/dist/{session-user-BEorKVT-.mjs.map → session-user-BlMgqCHS.mjs.map} +1 -1
  642. package/dist/{settings-xRdoUZr0.mjs → settings--wobrkkC.mjs} +21 -8
  643. package/dist/settings--wobrkkC.mjs.map +1 -0
  644. package/dist/{settings-DE9xtzqd.mjs → settings-Cwm6o2jY.mjs} +3 -3
  645. package/dist/{settings-DE9xtzqd.mjs.map → settings-Cwm6o2jY.mjs.map} +1 -1
  646. package/dist/{setup-complete-BnT8pq_C.mjs → setup-complete-DQbClIN2.mjs} +2 -2
  647. package/dist/{setup-complete-BnT8pq_C.mjs.map → setup-complete-DQbClIN2.mjs.map} +1 -1
  648. package/dist/{setup-nonce-CBitf_oQ.mjs → setup-nonce-DZCFS2sn.mjs} +1 -1
  649. package/dist/{setup-nonce-CBitf_oQ.mjs.map → setup-nonce-DZCFS2sn.mjs.map} +1 -1
  650. package/dist/{single-flight-cache-B0eLKS6K.mjs → single-flight-cache-BPuGPdcN.mjs} +2 -2
  651. package/dist/{single-flight-cache-B0eLKS6K.mjs.map → single-flight-cache-BPuGPdcN.mjs.map} +1 -1
  652. package/dist/{site-url-DjpIXMXJ.mjs → site-url-BrxA_E9H.mjs} +3 -3
  653. package/dist/{site-url-DjpIXMXJ.mjs.map → site-url-BrxA_E9H.mjs.map} +1 -1
  654. package/dist/{snapshot-BBlGkb2q.mjs → snapshot--OCDTqdb.mjs} +1 -1
  655. package/dist/{snapshot-BBlGkb2q.mjs.map → snapshot--OCDTqdb.mjs.map} +1 -1
  656. package/dist/{ssrf-Cpvg_n3A.mjs → ssrf-5sIM5jzl.mjs} +23 -6
  657. package/dist/{ssrf-Cpvg_n3A.mjs.map → ssrf-5sIM5jzl.mjs.map} +1 -1
  658. package/dist/{state-DYwPue40.mjs → state-BpFVsJZB.mjs} +12 -4
  659. package/dist/state-BpFVsJZB.mjs.map +1 -0
  660. package/dist/{status-CWVYpbD8.mjs → status-B777-dXz.mjs} +1 -1
  661. package/dist/{status-CWVYpbD8.mjs.map → status-B777-dXz.mjs.map} +1 -1
  662. package/dist/storage/local.d.mts +2 -1
  663. package/dist/storage/local.d.mts.map +1 -1
  664. package/dist/storage/local.mjs +1 -1
  665. package/dist/storage/local.mjs.map +1 -1
  666. package/dist/storage/s3.d.mts +2 -1
  667. package/dist/storage/s3.d.mts.map +1 -1
  668. package/dist/storage/s3.mjs +3 -2
  669. package/dist/storage/s3.mjs.map +1 -1
  670. package/dist/{target-DixqqV5i.mjs → target-BmR0iTwz.mjs} +1 -1
  671. package/dist/{target-DixqqV5i.mjs.map → target-BmR0iTwz.mjs.map} +1 -1
  672. package/dist/{taxonomies-OHUIiIpI.mjs → taxonomies-DkAkMupr.mjs} +17 -14
  673. package/dist/taxonomies-DkAkMupr.mjs.map +1 -0
  674. package/dist/{taxonomies-BlrncHi9.mjs → taxonomies-Wfy_Lg12.mjs} +43 -17
  675. package/dist/taxonomies-Wfy_Lg12.mjs.map +1 -0
  676. package/dist/{taxonomy-BqCZ1TdU.mjs → taxonomy-tJepplLL.mjs} +5 -5
  677. package/dist/{taxonomy-BqCZ1TdU.mjs.map → taxonomy-tJepplLL.mjs.map} +1 -1
  678. package/dist/{tokens-C39klX8R.mjs → tokens-BCO1oruF.mjs} +1 -1
  679. package/dist/{tokens-C39klX8R.mjs.map → tokens-BCO1oruF.mjs.map} +1 -1
  680. package/dist/{transaction-NQj4VJ7Z.mjs → transaction-0KOpOyMu.mjs} +2 -1
  681. package/dist/{transaction-NQj4VJ7Z.mjs.map → transaction-0KOpOyMu.mjs.map} +1 -1
  682. package/dist/{transport-DBJwa-Si.mjs → transport-Dr3qtwXC.mjs} +4 -3
  683. package/dist/{transport-DBJwa-Si.mjs.map → transport-Dr3qtwXC.mjs.map} +1 -1
  684. package/dist/{transport-RQE36APG.d.mts → transport-xh6YKW2G.d.mts} +1 -1
  685. package/dist/{transport-RQE36APG.d.mts.map → transport-xh6YKW2G.d.mts.map} +1 -1
  686. package/dist/{trusted-proxy-CEVekpby.mjs → trusted-proxy-BR5F1Otp.mjs} +1 -1
  687. package/dist/{trusted-proxy-CEVekpby.mjs.map → trusted-proxy-BR5F1Otp.mjs.map} +1 -1
  688. package/dist/{types-BW1syrlw.mjs → types-3qNFPlci.mjs} +1 -1
  689. package/dist/{types-BW1syrlw.mjs.map → types-3qNFPlci.mjs.map} +1 -1
  690. package/dist/types-75KIqzL9.mjs.map +1 -1
  691. package/dist/{types-DrJrVCT1.d.mts → types-B6GrPic4.d.mts} +9 -3
  692. package/dist/{types-DrJrVCT1.d.mts.map → types-B6GrPic4.d.mts.map} +1 -1
  693. package/dist/{types-DN64_zzZ.d.mts → types-BuHW4xDE.d.mts} +11 -10
  694. package/dist/types-BuHW4xDE.d.mts.map +1 -0
  695. package/dist/{types-DWRhk9xZ.d.mts → types-C00oyCZp.d.mts} +1 -1
  696. package/dist/{types-DWRhk9xZ.d.mts.map → types-C00oyCZp.d.mts.map} +1 -1
  697. package/dist/{types-BntycPTF.d.mts → types-CDtkNSFQ.d.mts} +1 -1
  698. package/dist/{types-BntycPTF.d.mts.map → types-CDtkNSFQ.d.mts.map} +1 -1
  699. package/dist/{types-Dfk8KI5R.d.mts → types-CPeXo1wF.d.mts} +1 -1
  700. package/dist/{types-Dfk8KI5R.d.mts.map → types-CPeXo1wF.d.mts.map} +1 -1
  701. package/dist/types-CQPWhPxE.mjs.map +1 -1
  702. package/dist/{types-BcqdcT-r.d.mts → types-CXFkwEGC.d.mts} +3 -2
  703. package/dist/types-CXFkwEGC.d.mts.map +1 -0
  704. package/dist/{types-CtzytVXn.mjs → types-DM3vioBY.mjs} +1 -1
  705. package/dist/{types-CtzytVXn.mjs.map → types-DM3vioBY.mjs.map} +1 -1
  706. package/dist/{types-CXnOzDe1.d.mts → types-DczELMop.d.mts} +1 -1
  707. package/dist/{types-CXnOzDe1.d.mts.map → types-DczELMop.d.mts.map} +1 -1
  708. package/dist/types-DfuTR6dL.mjs +3 -0
  709. package/dist/{types-DQIDRKF2.d.mts → types-FV23hEoW.d.mts} +10 -1
  710. package/dist/types-FV23hEoW.d.mts.map +1 -0
  711. package/dist/{types-C2pMvO62.d.mts → types-xDMtUFnO.d.mts} +2 -1
  712. package/dist/types-xDMtUFnO.d.mts.map +1 -0
  713. package/dist/{upload-attempts-D4FS8LT6.mjs → upload-attempts-BsqoQ1fn.mjs} +1 -1
  714. package/dist/{upload-attempts-D4FS8LT6.mjs.map → upload-attempts-BsqoQ1fn.mjs.map} +1 -1
  715. package/dist/{url-pattern-BHS0V5Ng.mjs → url-pattern-D4c2czpJ.mjs} +1 -1
  716. package/dist/{url-pattern-BHS0V5Ng.mjs.map → url-pattern-D4c2czpJ.mjs.map} +1 -1
  717. package/dist/{user-DJZfUJVE.mjs → user-BTZ40aq6.mjs} +2 -2
  718. package/dist/{user-DJZfUJVE.mjs.map → user-BTZ40aq6.mjs.map} +1 -1
  719. package/dist/{utils-D4vD_Y98.mjs → utils-BKvNjjhY.mjs} +1 -1
  720. package/dist/{utils-D4vD_Y98.mjs.map → utils-BKvNjjhY.mjs.map} +1 -1
  721. package/dist/{validate-BMLBvxOC.mjs → validate-DE_LRwo9.mjs} +2 -2
  722. package/dist/{validate-BMLBvxOC.mjs.map → validate-DE_LRwo9.mjs.map} +1 -1
  723. package/dist/{validate-CTqt5nuE.d.mts → validate-DUP27OYD.d.mts} +5 -5
  724. package/dist/{validate-CTqt5nuE.d.mts.map → validate-DUP27OYD.d.mts.map} +1 -1
  725. package/dist/{validation-npvENUCB.mjs → validation-BMImFJ11.mjs} +10 -8
  726. package/dist/{validation-npvENUCB.mjs.map → validation-BMImFJ11.mjs.map} +1 -1
  727. package/dist/version-Bii3suaO.mjs +7 -0
  728. package/dist/{version-DB_fqCSI.mjs.map → version-Bii3suaO.mjs.map} +1 -1
  729. package/dist/{widgets-BD3ho7Rq.mjs → widgets-D3gJ10xU.mjs} +18 -5
  730. package/dist/widgets-D3gJ10xU.mjs.map +1 -0
  731. package/dist/{wxr-taxonomies-Ca68766D.d.mts → wxr-taxonomies-B2Og_6rU.d.mts} +1 -1
  732. package/dist/{wxr-taxonomies-Ca68766D.d.mts.map → wxr-taxonomies-B2Og_6rU.d.mts.map} +1 -1
  733. package/dist/{wxr-taxonomies-B1R3vBoD.mjs → wxr-taxonomies-Cxngsjwo.mjs} +4 -4
  734. package/dist/{wxr-taxonomies-B1R3vBoD.mjs.map → wxr-taxonomies-Cxngsjwo.mjs.map} +1 -1
  735. package/dist/{zod-generator-LC-on_Vb.mjs → zod-generator-BuYSQJB7.mjs} +32 -22
  736. package/dist/zod-generator-BuYSQJB7.mjs.map +1 -0
  737. package/package.json +20 -9
  738. package/src/api/errors.ts +22 -0
  739. package/src/api/handlers/content.ts +49 -11
  740. package/src/api/handlers/index.ts +18 -0
  741. package/src/api/handlers/manifest.ts +161 -12
  742. package/src/api/handlers/media-allowlist.ts +1 -0
  743. package/src/api/handlers/media-folders.ts +130 -0
  744. package/src/api/handlers/media-usage-activation.ts +102 -0
  745. package/src/api/handlers/media-usage.ts +108 -0
  746. package/src/api/handlers/media.ts +92 -2
  747. package/src/api/handlers/registry.ts +483 -561
  748. package/src/api/handlers/taxonomies.ts +16 -9
  749. package/src/api/openapi/document.ts +277 -7
  750. package/src/api/parse.ts +1 -1
  751. package/src/api/schemas/auth.ts +4 -4
  752. package/src/api/schemas/bylines.ts +3 -3
  753. package/src/api/schemas/comments.ts +1 -1
  754. package/src/api/schemas/common.ts +3 -2
  755. package/src/api/schemas/content.ts +78 -22
  756. package/src/api/schemas/media-usage.ts +77 -0
  757. package/src/api/schemas/media.ts +121 -0
  758. package/src/api/schemas/redirects.ts +6 -1
  759. package/src/api/schemas/schema.ts +4 -0
  760. package/src/api/schemas/setup.ts +1 -1
  761. package/src/api/schemas/taxonomies.ts +2 -2
  762. package/src/api/schemas/users.ts +1 -1
  763. package/src/api/types.ts +23 -10
  764. package/src/astro/dev-typegen.ts +35 -0
  765. package/src/astro/image-endpoint.ts +2 -2
  766. package/src/astro/integration/dev-typegen.ts +91 -0
  767. package/src/astro/integration/index.ts +9 -44
  768. package/src/astro/integration/routes.ts +23 -0
  769. package/src/astro/integration/vite-config.ts +23 -9
  770. package/src/astro/middleware/auth.ts +4 -0
  771. package/src/astro/middleware.ts +5 -7
  772. package/src/astro/routes/api/admin/api-tokens/index.ts +4 -1
  773. package/src/astro/routes/api/admin/media-usage/activation.ts +42 -0
  774. package/src/astro/routes/api/admin/media-usage/progress.ts +37 -0
  775. package/src/astro/routes/api/admin/oauth-clients/[id].ts +1 -1
  776. package/src/astro/routes/api/admin/oauth-clients/index.ts +1 -1
  777. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
  778. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +247 -101
  779. package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
  780. package/src/astro/routes/api/admin/plugins/registry/verify.ts +60 -0
  781. package/src/astro/routes/api/auth/me.ts +14 -2
  782. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +8 -2
  783. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  784. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +6 -2
  785. package/src/astro/routes/api/manifest.ts +1 -1
  786. package/src/astro/routes/api/media/[id]/replace.ts +114 -0
  787. package/src/astro/routes/api/media/[id].ts +3 -0
  788. package/src/astro/routes/api/media/file/[...key].ts +4 -1
  789. package/src/astro/routes/api/media/folders/[id].ts +55 -0
  790. package/src/astro/routes/api/media/folders/index.ts +37 -0
  791. package/src/astro/routes/api/media/upload-url.ts +8 -4
  792. package/src/astro/routes/api/media.ts +66 -10
  793. package/src/astro/routes/api/menus/[name]/items/[id].ts +7 -2
  794. package/src/astro/routes/api/menus/[name]/items.ts +4 -1
  795. package/src/astro/routes/api/menus/[name]/reorder.ts +4 -1
  796. package/src/astro/routes/api/menus/[name]/translations.ts +4 -1
  797. package/src/astro/routes/api/menus/[name].ts +7 -2
  798. package/src/astro/routes/api/menus/index.ts +4 -1
  799. package/src/astro/routes/api/settings/email.ts +1 -1
  800. package/src/astro/routes/api/settings.ts +4 -1
  801. package/src/astro/routes/api/setup/dev-bypass.ts +12 -0
  802. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +4 -1
  803. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +4 -1
  804. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +7 -2
  805. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +4 -1
  806. package/src/astro/routes/api/taxonomies/[name].ts +7 -2
  807. package/src/astro/routes/api/taxonomies/index.ts +4 -1
  808. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +3 -1
  809. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +5 -2
  810. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +3 -1
  811. package/src/astro/routes/api/widget-areas/[name].ts +3 -1
  812. package/src/astro/routes/api/widget-areas/index.ts +3 -1
  813. package/src/astro/types.ts +34 -6
  814. package/src/auth/challenge-store.ts +3 -1
  815. package/src/aws-sdk.d.ts +1 -0
  816. package/src/cache/chrome-tags.ts +24 -0
  817. package/src/client/index.ts +140 -2
  818. package/src/client/transport.ts +6 -2
  819. package/src/components/EmDashImage.astro +156 -51
  820. package/src/components/EmDashMedia.astro +2 -1
  821. package/src/components/Gallery.astro +7 -0
  822. package/src/components/InlinePortableTextEditor.tsx +136 -2
  823. package/src/components/LiveSearch.astro +23 -0
  824. package/src/components/inline-code-block.tsx +180 -49
  825. package/src/components/widgets/Archives.astro +2 -37
  826. package/src/content/converters/gallery.ts +2 -0
  827. package/src/content/converters/index.ts +2 -0
  828. package/src/content/converters/mark-safety.ts +1 -0
  829. package/src/content/converters/portable-text-identity.ts +139 -0
  830. package/src/content/converters/portable-text-to-prosemirror.ts +202 -69
  831. package/src/content/converters/prosemirror-to-portable-text.ts +96 -25
  832. package/src/content/converters/types.ts +3 -0
  833. package/src/database/connection.ts +2 -31
  834. package/src/database/index.ts +1 -1
  835. package/src/database/json-recordset.ts +16 -0
  836. package/src/database/migrations/017_authorization_codes.ts +14 -4
  837. package/src/database/migrations/019_i18n.ts +1 -1
  838. package/src/database/migrations/071_restore_content_bylines_table.ts +43 -0
  839. package/src/database/migrations/072_media_folders.ts +72 -0
  840. package/src/database/migrations/073_media_focal_point.ts +57 -0
  841. package/src/database/migrations/074_content_deleted_scheduled_index.ts +55 -0
  842. package/src/database/migrations/runner.ts +11 -3
  843. package/src/database/repositories/byline.ts +32 -16
  844. package/src/database/repositories/content.ts +119 -51
  845. package/src/database/repositories/media-folders.ts +115 -0
  846. package/src/database/repositories/media-usage-work.ts +395 -111
  847. package/src/database/repositories/media-usage.ts +1104 -47
  848. package/src/database/repositories/media.ts +156 -29
  849. package/src/database/repositories/plugin-storage.ts +74 -9
  850. package/src/database/repositories/types.ts +8 -7
  851. package/src/database/transaction.ts +1 -0
  852. package/src/database/types.ts +13 -0
  853. package/src/db/adapters.ts +10 -3
  854. package/src/db/node-sqlite-compat.ts +78 -0
  855. package/src/db/postgres.ts +23 -0
  856. package/src/db/sqlite.ts +3 -3
  857. package/src/emdash-runtime.ts +186 -251
  858. package/src/fields/boolean.ts +1 -1
  859. package/src/fields/datetime.ts +1 -1
  860. package/src/fields/file.ts +1 -1
  861. package/src/fields/image.ts +7 -1
  862. package/src/fields/integer.ts +1 -1
  863. package/src/fields/json.ts +1 -1
  864. package/src/fields/multiselect.ts +1 -1
  865. package/src/fields/number.ts +1 -1
  866. package/src/fields/portable-text.ts +1 -1
  867. package/src/fields/richtext.ts +1 -1
  868. package/src/fields/select.ts +1 -1
  869. package/src/fields/slug.ts +1 -1
  870. package/src/fields/text.ts +1 -1
  871. package/src/fields/textarea.ts +1 -1
  872. package/src/fields/types.ts +8 -4
  873. package/src/index.ts +30 -3
  874. package/src/loader.ts +63 -10
  875. package/src/mcp/server.ts +228 -24
  876. package/src/media/focal-point.ts +37 -0
  877. package/src/media/image-endpoint.ts +5 -2
  878. package/src/media/local-runtime.ts +8 -0
  879. package/src/media/mime.ts +1 -0
  880. package/src/media/normalize.ts +25 -4
  881. package/src/media/types.ts +10 -0
  882. package/src/media/usage/activation.ts +162 -35
  883. package/src/media/usage/capture-triggers.ts +19 -3
  884. package/src/media/usage/cleanup.ts +9 -8
  885. package/src/media/usage/collection-deletion-processor.ts +7 -3
  886. package/src/media/usage/collection-deletion.ts +10 -0
  887. package/src/media/usage/content-refresh.ts +258 -39
  888. package/src/media/usage/content-snapshots.ts +128 -31
  889. package/src/media/usage/extractor.ts +32 -13
  890. package/src/media/usage/maintenance-engine.ts +166 -0
  891. package/src/media/usage/reconciliation-processor.ts +106 -29
  892. package/src/media/usage/reconciliation.ts +90 -7
  893. package/src/media/usage/work-processor.ts +342 -101
  894. package/src/menus/index.ts +16 -0
  895. package/src/object-cache/index.ts +44 -2
  896. package/src/plugin-types.ts +18 -1
  897. package/src/plugins/hooks.ts +4 -1
  898. package/src/plugins/index.ts +7 -0
  899. package/src/plugins/manager.ts +2 -1
  900. package/src/plugins/manifest-schema.ts +1 -1
  901. package/src/plugins/routes.ts +3 -1
  902. package/src/plugins/sandbox/hook-result.ts +52 -0
  903. package/src/plugins/sandbox/index.ts +10 -0
  904. package/src/plugins/save-rejection.ts +20 -0
  905. package/src/plugins/scheduler/node.ts +1 -13
  906. package/src/plugins/scheduler/types.ts +0 -2
  907. package/src/plugins/state.ts +13 -3
  908. package/src/plugins/types.ts +6 -0
  909. package/src/registry/artifact-checksum.ts +15 -0
  910. package/src/registry/artifact-fetch.ts +530 -0
  911. package/src/registry/artifact-verification.ts +85 -0
  912. package/src/registry/authoritative-records.ts +180 -0
  913. package/src/registry/config.ts +24 -6
  914. package/src/registry/record-labels.ts +28 -0
  915. package/src/registry/types.ts +12 -15
  916. package/src/schema/registry.ts +26 -3
  917. package/src/schema/types.ts +1 -0
  918. package/src/schema/zod-generator.ts +28 -17
  919. package/src/security/ssrf.ts +26 -4
  920. package/src/seed/apply.ts +4 -4
  921. package/src/settings/index.ts +16 -0
  922. package/src/storage/local.ts +1 -0
  923. package/src/storage/s3.ts +2 -0
  924. package/src/storage/types.ts +2 -0
  925. package/src/taxonomies/index.ts +40 -20
  926. package/src/ui.ts +2 -0
  927. package/src/widgets/archives.ts +67 -0
  928. package/src/widgets/index.ts +16 -0
  929. package/dist/api-BeBglVxU.mjs +0 -4695
  930. package/dist/api-BeBglVxU.mjs.map +0 -1
  931. package/dist/byline-yjvWq4ip.mjs.map +0 -1
  932. package/dist/challenge-store-SIL5DsF2.mjs.map +0 -1
  933. package/dist/collection-deletion-DQPvMD8R.mjs.map +0 -1
  934. package/dist/content-ZHCc1ngN.mjs.map +0 -1
  935. package/dist/content-refresh-B_8SJzuU.mjs.map +0 -1
  936. package/dist/context-ZldbZcle.mjs.map +0 -1
  937. package/dist/errors-CLUPm7aD.mjs.map +0 -1
  938. package/dist/index-BVBZj4-7.d.mts.map +0 -1
  939. package/dist/loader-CdG_Ci3H.mjs.map +0 -1
  940. package/dist/manifest-schema-BXbUAHod.mjs.map +0 -1
  941. package/dist/media-BWWWb8kg.mjs.map +0 -1
  942. package/dist/media-CzhAn2--.mjs.map +0 -1
  943. package/dist/media-allowlist-D6x-Us02.mjs.map +0 -1
  944. package/dist/media-usage-BZCydfvu.mjs.map +0 -1
  945. package/dist/media-usage-work-DrCbqBcl.mjs.map +0 -1
  946. package/dist/menus-DSo5QeW0.mjs.map +0 -1
  947. package/dist/mime-DfIVjNkr.mjs.map +0 -1
  948. package/dist/normalize-Bc-s_r-a.mjs.map +0 -1
  949. package/dist/object-cache-71tPfV4A.mjs.map +0 -1
  950. package/dist/options--hhz-jZ1.d.mts.map +0 -1
  951. package/dist/placeholder-Dp0K3RkD.d.mts.map +0 -1
  952. package/dist/redirects-DTDHWH31.mjs.map +0 -1
  953. package/dist/registry-Cqa2I749.mjs.map +0 -1
  954. package/dist/relations-BBApI4e2.mjs.map +0 -1
  955. package/dist/relations-BHo5A8Zf.d.mts.map +0 -1
  956. package/dist/runner-BYHZn3Jy.d.mts.map +0 -1
  957. package/dist/runner-C1T11CfC.mjs.map +0 -1
  958. package/dist/settings-xRdoUZr0.mjs.map +0 -1
  959. package/dist/state-DYwPue40.mjs.map +0 -1
  960. package/dist/taxonomies-BlrncHi9.mjs.map +0 -1
  961. package/dist/taxonomies-OHUIiIpI.mjs.map +0 -1
  962. package/dist/types-BcqdcT-r.d.mts.map +0 -1
  963. package/dist/types-C2pMvO62.d.mts.map +0 -1
  964. package/dist/types-CP1CflWf.mjs +0 -3
  965. package/dist/types-DN64_zzZ.d.mts.map +0 -1
  966. package/dist/types-DQIDRKF2.d.mts.map +0 -1
  967. package/dist/version-DB_fqCSI.mjs +0 -7
  968. package/dist/widgets-BD3ho7Rq.mjs.map +0 -1
  969. package/dist/zod-generator-LC-on_Vb.mjs.map +0 -1
  970. /package/dist/{api-tokens-rIXC6LdE.mjs → api-tokens-BfYts-sq.mjs} +0 -0
  971. /package/dist/{ssrf-DpXgKsna.mjs → ssrf-Dg3cIT-b.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { t as Interceptor } from "../transport-RQE36APG.mjs";
1
+ import { t as Interceptor } from "../transport-xh6YKW2G.mjs";
2
2
 
3
3
  //#region src/client/cf-access.d.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { r as ContentFieldFilters } from "../content-list-query-wJ2WN8Vp.mjs";
2
- import { a as tokenInterceptor, i as devBypassInterceptor, n as createTransport, r as csrfInterceptor, t as Interceptor } from "../transport-RQE36APG.mjs";
1
+ import { r as ContentFieldFilters } from "../content-list-query-Btqd4uV2.mjs";
2
+ import { a as tokenInterceptor, i as devBypassInterceptor, n as createTransport, r as csrfInterceptor, t as Interceptor } from "../transport-xh6YKW2G.mjs";
3
3
 
4
4
  //#region src/client/portable-text.d.ts
5
5
  /**
@@ -171,12 +171,25 @@ interface MediaItem {
171
171
  size: number;
172
172
  width?: number;
173
173
  height?: number;
174
+ focalX?: number | null;
175
+ focalY?: number | null;
174
176
  alt?: string;
175
177
  caption?: string;
176
178
  createdAt: string;
177
179
  updatedAt: string;
180
+ folderId?: string | null;
178
181
  usage?: MediaUsageSummary;
179
182
  }
183
+ /** Result of assigning local media to a folder or the Main library */
184
+ interface MediaFolderAssignment {
185
+ id: string;
186
+ folderId: string | null;
187
+ }
188
+ /** Flat media-library folder */
189
+ interface MediaFolder {
190
+ id: string;
191
+ name: string;
192
+ }
180
193
  /** Media usage repair request */
181
194
  type MediaUsageRepairInput = {
182
195
  scope: "collection";
@@ -207,6 +220,16 @@ interface MediaUsageRepairResponse {
207
220
  deletedSourceCount: number;
208
221
  collections: MediaUsageRepairCollectionSummary[];
209
222
  }
223
+ interface MediaUsageProgress {
224
+ status: "indexing" | "ready" | "needs_attention";
225
+ readyCollections: number;
226
+ totalCollections: number;
227
+ }
228
+ interface MediaUsageProgressAdvanceResponse {
229
+ activation: MediaUsageActivationStatus;
230
+ progress: MediaUsageProgress | null;
231
+ nextRequestInMs: 0 | 30_000 | null;
232
+ }
210
233
  /** Durable media usage entry-work state */
211
234
  type MediaUsageWorkState = "pending" | "retry" | "leased" | "failed";
212
235
  /** Redacted operator view of one durable media usage job */
@@ -244,6 +267,25 @@ interface MediaUsageWorkRetryResponse {
244
267
  changed: boolean;
245
268
  item: MediaUsageWorkItem;
246
269
  }
270
+ interface MediaUsageActivationStatus {
271
+ state: "expanded" | "activating" | "active";
272
+ collectionCursor: string | null;
273
+ attemptCount: number;
274
+ drainConfirmedAt: string | null;
275
+ lastAttemptedAt: string | null;
276
+ lastErrorCode: "MEDIA_USAGE_ACTIVATION_FAILED" | null;
277
+ leaseExpiresAt: string | null;
278
+ activatedAt: string | null;
279
+ updatedAt: string;
280
+ }
281
+ interface MediaUsageActivationAdvanceInput {
282
+ writersDrained: true;
283
+ }
284
+ interface MediaUsageActivationAdvanceResponse {
285
+ outcome: "activating" | "active";
286
+ processedCollections: number;
287
+ activation: MediaUsageActivationStatus;
288
+ }
247
289
  type MediaUsageCollectionDeletionState = "pending" | "retry" | "leased" | "failed";
248
290
  type MediaUsageCollectionDeletionPhase = "fence" | "registry" | "table" | "work" | "sources" | "status" | "finalize";
249
291
  interface MediaUsageCollectionDeletionItem {
@@ -480,12 +522,32 @@ declare class EmDashClient {
480
522
  mimeType?: string;
481
523
  limit?: number;
482
524
  cursor?: string;
525
+ page?: number;
483
526
  includeUsage?: boolean;
484
- }): Promise<ListResult<MediaItem>>;
527
+ folderId?: string | null;
528
+ }): Promise<ListResult<MediaItem> & {
529
+ totalCount?: number;
530
+ }>;
485
531
  /** Get a single media item */
486
532
  mediaGet(id: string, options?: {
487
533
  includeUsage?: boolean;
488
534
  }): Promise<MediaItem>;
535
+ /** List media folders */
536
+ mediaFolderList(options?: {
537
+ limit?: number;
538
+ cursor?: string;
539
+ q?: string;
540
+ }): Promise<ListResult<MediaFolder>>;
541
+ /** Get one media folder */
542
+ mediaFolderGet(id: string): Promise<MediaFolder>;
543
+ /** Create a media folder */
544
+ mediaFolderCreate(name: string): Promise<MediaFolder>;
545
+ /** Rename a media folder */
546
+ mediaFolderUpdate(id: string, name: string): Promise<MediaFolder>;
547
+ /** Delete a media folder */
548
+ mediaFolderDelete(id: string): Promise<void>;
549
+ /** Assign media to a folder, or return it to the Main library */
550
+ mediaSetFolder(id: string, folderId: string | null): Promise<MediaFolderAssignment>;
489
551
  /** Get entry-grouped usage details for a media item */
490
552
  mediaGetUsage(id: string, options?: {
491
553
  limit?: number;
@@ -501,6 +563,14 @@ declare class EmDashClient {
501
563
  mediaDelete(id: string): Promise<void>;
502
564
  /** Repair content media usage indexes for one collection or all collections */
503
565
  mediaRepairUsage(input: MediaUsageRepairInput): Promise<MediaUsageRepairResponse>;
566
+ /** Read aggregate Media Usage indexing progress */
567
+ mediaGetUsageProgress(): Promise<MediaUsageProgress>;
568
+ /** Advance exactly one Media Usage maintenance step */
569
+ mediaAdvanceUsageProgress(): Promise<MediaUsageProgressAdvanceResponse>;
570
+ /** Read the redacted controlled-activation status */
571
+ mediaGetUsageActivation(): Promise<MediaUsageActivationStatus>;
572
+ /** Advance exactly one controlled-activation batch */
573
+ mediaAdvanceUsageActivation(input: MediaUsageActivationAdvanceInput): Promise<MediaUsageActivationAdvanceResponse>;
504
574
  /** List a bounded page of durable media usage entry work */
505
575
  mediaListUsageWork(options: MediaUsageWorkListOptions): Promise<MediaUsageWorkListResponse>;
506
576
  /** Explicitly retry one durable media usage entry job */
@@ -548,5 +618,5 @@ declare class EmDashClient {
548
618
  private getFieldSchemas;
549
619
  }
550
620
  //#endregion
551
- export { ApiError, ClientResponse, Collection, CollectionWithFields, ContentItem, EmDashApiError, EmDashClient, EmDashClientError, EmDashClientOptions, Field, type Interceptor, ListResult, Manifest, MediaItem, MediaUsageCollectionDeletionItem, MediaUsageCollectionDeletionListResponse, MediaUsageCollectionDeletionPhase, MediaUsageCollectionDeletionState, MediaUsageCoverage, MediaUsageCoverageStatus, MediaUsageDetailsResponse, MediaUsageEntryDetail, MediaUsageOccurrenceDetail, MediaUsageRepairCollectionSummary, MediaUsageRepairInput, MediaUsageRepairResponse, MediaUsageRepairStatus, MediaUsageSourceDetail, MediaUsageSummary, MediaUsageWorkItem, MediaUsageWorkListOptions, MediaUsageWorkListResponse, MediaUsageWorkRetryInput, MediaUsageWorkRetryResponse, MediaUsageWorkState, Menu, MenuItem, MenuWithItems, type PortableTextBlock, SchemaExport, SearchResult, Taxonomy, Term, createTransport, csrfInterceptor, devBypassInterceptor, markdownToPortableText, portableTextToMarkdown, tokenInterceptor };
621
+ export { ApiError, ClientResponse, Collection, CollectionWithFields, ContentItem, EmDashApiError, EmDashClient, EmDashClientError, EmDashClientOptions, Field, type Interceptor, ListResult, Manifest, MediaFolder, MediaFolderAssignment, MediaItem, MediaUsageActivationAdvanceInput, MediaUsageActivationAdvanceResponse, MediaUsageActivationStatus, MediaUsageCollectionDeletionItem, MediaUsageCollectionDeletionListResponse, MediaUsageCollectionDeletionPhase, MediaUsageCollectionDeletionState, MediaUsageCoverage, MediaUsageCoverageStatus, MediaUsageDetailsResponse, MediaUsageEntryDetail, MediaUsageOccurrenceDetail, MediaUsageProgress, MediaUsageProgressAdvanceResponse, MediaUsageRepairCollectionSummary, MediaUsageRepairInput, MediaUsageRepairResponse, MediaUsageRepairStatus, MediaUsageSourceDetail, MediaUsageSummary, MediaUsageWorkItem, MediaUsageWorkListOptions, MediaUsageWorkListResponse, MediaUsageWorkRetryInput, MediaUsageWorkRetryResponse, MediaUsageWorkState, Menu, MenuItem, MenuWithItems, type PortableTextBlock, SchemaExport, SearchResult, Taxonomy, Term, createTransport, csrfInterceptor, devBypassInterceptor, markdownToPortableText, portableTextToMarkdown, tokenInterceptor };
552
622
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/client/portable-text.ts","../../src/client/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/client/portable-text.ts","../../src/client/index.ts"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { i as portableTextToMarkdown, n as convertDataForWrite, r as markdownToPortableText, t as convertDataForRead } from "../portable-text-imBW5cHK.mjs";
2
- import { a as tokenInterceptor, i as refreshInterceptor, n as csrfInterceptor, r as devBypassInterceptor, t as createTransport } from "../transport-DBJwa-Si.mjs";
1
+ import { i as portableTextToMarkdown, n as convertDataForWrite, r as markdownToPortableText, t as convertDataForRead } from "../portable-text-U85hOafW.mjs";
2
+ import { a as tokenInterceptor, i as refreshInterceptor, n as csrfInterceptor, r as devBypassInterceptor, t as createTransport } from "../transport-Dr3qtwXC.mjs";
3
3
  import mime from "mime/lite";
4
4
 
5
5
  //#region src/client/index.ts
@@ -226,7 +226,10 @@ var EmDashClient = class {
226
226
  if (options?.mimeType) params.set("mimeType", options.mimeType);
227
227
  if (options?.limit) params.set("limit", String(options.limit));
228
228
  if (options?.cursor) params.set("cursor", options.cursor);
229
+ if (options?.page !== void 0) params.set("page", String(options.page));
229
230
  if (options?.includeUsage === true) params.set("includeUsage", "1");
231
+ if (options?.folderId === null) params.set("folderId", "unfiled");
232
+ else if (options?.folderId !== void 0) params.set("folderId", options.folderId);
230
233
  const qs = params.toString();
231
234
  return this.request("GET", `/media${qs ? `?${qs}` : ""}`);
232
235
  }
@@ -237,6 +240,39 @@ var EmDashClient = class {
237
240
  const qs = params.toString();
238
241
  return (await this.request("GET", `/media/${encodeURIComponent(id)}${qs ? `?${qs}` : ""}`)).item;
239
242
  }
243
+ /** List media folders */
244
+ async mediaFolderList(options = {}) {
245
+ const params = new URLSearchParams();
246
+ if (options.limit !== void 0) params.set("limit", String(options.limit));
247
+ if (options.cursor !== void 0) params.set("cursor", options.cursor);
248
+ if (options.q !== void 0) params.set("q", options.q);
249
+ const qs = params.toString();
250
+ return this.request("GET", `/media/folders${qs ? `?${qs}` : ""}`);
251
+ }
252
+ /** Get one media folder */
253
+ async mediaFolderGet(id) {
254
+ return (await this.request("GET", `/media/folders/${encodeURIComponent(id)}`)).item;
255
+ }
256
+ /** Create a media folder */
257
+ async mediaFolderCreate(name) {
258
+ return (await this.request("POST", "/media/folders", { name })).item;
259
+ }
260
+ /** Rename a media folder */
261
+ async mediaFolderUpdate(id, name) {
262
+ return (await this.request("PUT", `/media/folders/${encodeURIComponent(id)}`, { name })).item;
263
+ }
264
+ /** Delete a media folder */
265
+ async mediaFolderDelete(id) {
266
+ await this.request("DELETE", `/media/folders/${encodeURIComponent(id)}`);
267
+ }
268
+ /** Assign media to a folder, or return it to the Main library */
269
+ async mediaSetFolder(id, folderId) {
270
+ const data = await this.request("PUT", `/media/${encodeURIComponent(id)}`, { folderId });
271
+ return {
272
+ id: data.item.id,
273
+ folderId: data.item.folderId
274
+ };
275
+ }
240
276
  /** Get entry-grouped usage details for a media item */
241
277
  async mediaGetUsage(id, options) {
242
278
  const params = new URLSearchParams();
@@ -272,6 +308,22 @@ var EmDashClient = class {
272
308
  async mediaRepairUsage(input) {
273
309
  return this.request("POST", "/admin/media-usage/repair", input);
274
310
  }
311
+ /** Read aggregate Media Usage indexing progress */
312
+ async mediaGetUsageProgress() {
313
+ return this.request("GET", "/admin/media-usage/progress");
314
+ }
315
+ /** Advance exactly one Media Usage maintenance step */
316
+ async mediaAdvanceUsageProgress() {
317
+ return this.request("POST", "/admin/media-usage/progress");
318
+ }
319
+ /** Read the redacted controlled-activation status */
320
+ async mediaGetUsageActivation() {
321
+ return this.request("GET", "/admin/media-usage/activation");
322
+ }
323
+ /** Advance exactly one controlled-activation batch */
324
+ async mediaAdvanceUsageActivation(input) {
325
+ return this.request("POST", "/admin/media-usage/activation", input);
326
+ }
275
327
  /** List a bounded page of durable media usage entry work */
276
328
  async mediaListUsageWork(options) {
277
329
  const params = new URLSearchParams({ collection: options.collection });
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/client/index.ts"],"sourcesContent":["/**\n * EmDashClient — typed HTTP client for the EmDash REST API.\n *\n * Handles auth, CSRF, PT ↔ Markdown conversion, and optional `_rev`\n * concurrency tokens. Shared foundation for the CLI and future MCP server.\n *\n * @example\n * ```ts\n * import { EmDashClient } from \"emdash/client\";\n *\n * const client = new EmDashClient({\n * baseUrl: \"http://localhost:4321\",\n * devBypass: true,\n * });\n *\n * const posts = await client.list(\"posts\", { status: \"published\" });\n * ```\n */\n\nimport mime from \"mime/lite\";\n\nimport type { ContentFieldFilters } from \"../content-list-query.js\";\nimport type { FieldSchema } from \"./portable-text.js\";\nimport { convertDataForRead, convertDataForWrite } from \"./portable-text.js\";\nimport type { Interceptor } from \"./transport.js\";\nimport {\n\tcreateTransport,\n\tcsrfInterceptor,\n\tdevBypassInterceptor,\n\trefreshInterceptor,\n\ttokenInterceptor,\n} from \"./transport.js\";\n\n// Regex patterns for client utilities\nconst TRAILING_SLASH_PATTERN = /\\/$/;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mimeFromFilename(filename: string): string {\n\treturn mime.getType(filename) ?? \"application/octet-stream\";\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface EmDashClientOptions {\n\t/** Base URL of the EmDash instance */\n\tbaseUrl: string;\n\t/** API token (ec_pat_...) or OAuth token (ec_oat_...) */\n\ttoken?: string;\n\t/** OAuth refresh token for auto-refresh on 401 */\n\trefreshToken?: string;\n\t/** Called when a token is refreshed (for persisting new access token) */\n\tonTokenRefresh?: (accessToken: string, expiresIn: number) => void;\n\t/** Use dev-bypass authentication (localhost only) */\n\tdevBypass?: boolean;\n\t/** Additional request interceptors */\n\tinterceptors?: Interceptor[];\n}\n\n/** Standard API error shape */\nexport interface ApiError {\n\tcode: string;\n\tmessage: string;\n\tdetails?: Record<string, unknown>;\n}\n\n/** Standard API response wrapper */\nexport interface ClientResponse<T> {\n\tsuccess: true;\n\tdata: T;\n}\n\n/** Paginated list response */\nexport interface ListResult<T> {\n\titems: T[];\n\tnextCursor?: string;\n}\n\n/** Content item as returned by the API */\nexport interface ContentItem {\n\tid: string;\n\ttype: string;\n\tslug: string | null;\n\tstatus: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tpublishedAt: string | null;\n\tscheduledAt: string | null;\n\tliveRevisionId: string | null;\n\tdraftRevisionId: string | null;\n\tlocale: string | null;\n\ttranslationGroup: string | null;\n\t_rev?: string;\n}\n\n/** Collection metadata */\nexport interface Collection {\n\tslug: string;\n\tlabel: string;\n\tlabelSingular: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports: string[];\n}\n\n/** Collection with fields */\nexport interface CollectionWithFields extends Collection {\n\tfields: Field[];\n}\n\n/** Field metadata */\nexport interface Field {\n\tslug: string;\n\tlabel: string;\n\ttype: string;\n\trequired: boolean;\n\tunique: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: unknown;\n\twidget?: string;\n\toptions?: unknown;\n\tsortOrder?: number;\n}\n\n/** Aggregate trust state for media usage reads */\nexport type MediaUsageCoverageStatus =\n\t| \"complete\"\n\t| \"never\"\n\t| \"running\"\n\t| \"partial\"\n\t| \"failed\"\n\t| \"stale\"\n\t| \"unknown\";\n\n/** Aggregate media usage coverage across all content collections */\nexport interface MediaUsageCoverage {\n\tscope: \"all_content_collections\";\n\tstatus: MediaUsageCoverageStatus;\n}\n\n/** Coverage-aware usage count for a media item */\nexport interface MediaUsageSummary {\n\tcount: number | null;\n\tcoverage: MediaUsageCoverage;\n}\n\n/** One indexed media reference within a content source */\nexport interface MediaUsageOccurrenceDetail {\n\tfieldSlug: string;\n\tfieldPath: string;\n\toccurrenceIndex: number;\n\treferenceType: \"image_field\" | \"file_field\" | \"portable_text_image\" | \"unknown\";\n}\n\n/** Indexed references from one visible content source */\nexport interface MediaUsageSourceDetail {\n\tvariant: \"columns\" | \"draft_overlay\";\n\toccurrences: MediaUsageOccurrenceDetail[];\n}\n\n/** One content entry that references a media item */\nexport interface MediaUsageEntryDetail {\n\tcollection: string;\n\tcontentId: string;\n\ttitle: string | null;\n\tslug: string | null;\n\tlocale: string | null;\n\tstatus: string | null;\n\tscheduledAt: string | null;\n\tdeletedAt: string | null;\n\tsources: MediaUsageSourceDetail[];\n}\n\n/** Entry-grouped media usage details */\nexport interface MediaUsageDetailsResponse {\n\titems: MediaUsageEntryDetail[];\n\tnextCursor?: string;\n\tcoverage: MediaUsageCoverage;\n}\n\n/** Media item */\nexport interface MediaItem {\n\tid: string;\n\tfilename: string;\n\tkey: string;\n\tmimeType: string;\n\tsize: number;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n\tcaption?: string;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tusage?: MediaUsageSummary;\n}\n\n/** Media usage repair request */\nexport type MediaUsageRepairInput = { scope: \"collection\"; collection: string } | { scope: \"all\" };\n\n/** Media usage repair status */\nexport type MediaUsageRepairStatus = \"complete\" | \"partial\" | \"failed\" | \"stale\";\n\n/** Per-collection media usage repair summary */\nexport interface MediaUsageRepairCollectionSummary {\n\tcollection: string;\n\tstatus: MediaUsageRepairStatus;\n\tindexedSourceCount: number;\n\tfailedSourceCount: number;\n\tskippedSourceCount: number;\n\tdeletedSourceCount: number;\n\tlastErrorCode: string | null;\n\tstartedAt: string;\n\tcompletedAt: string | null;\n}\n\n/** Media usage repair response */\nexport interface MediaUsageRepairResponse {\n\tstatus: MediaUsageRepairStatus;\n\tindexedSourceCount: number;\n\tfailedSourceCount: number;\n\tskippedSourceCount: number;\n\tdeletedSourceCount: number;\n\tcollections: MediaUsageRepairCollectionSummary[];\n}\n\n/** Durable media usage entry-work state */\nexport type MediaUsageWorkState = \"pending\" | \"retry\" | \"leased\" | \"failed\";\n\n/** Redacted operator view of one durable media usage job */\nexport interface MediaUsageWorkItem {\n\tcollectionId: string;\n\tcollectionSlug: string;\n\tcontentId: string;\n\tstate: MediaUsageWorkState;\n\tattemptCount: number;\n\tnextAttemptAt: string;\n\tleaseExpiresAt: string | null;\n\tlastAttemptedAt: string | null;\n\tlastErrorCode: string | null;\n\tupdatedAt: string;\n}\n\n/** Filters and pagination for durable media usage work */\nexport interface MediaUsageWorkListOptions {\n\tcollection: string;\n\tstate?: MediaUsageWorkState;\n\tlimit?: number;\n\tcursor?: string;\n}\n\n/** One bounded page of durable media usage work */\nexport interface MediaUsageWorkListResponse {\n\titems: MediaUsageWorkItem[];\n\tnextCursor?: string;\n}\n\n/** Identity for explicitly retrying one durable media usage job */\nexport interface MediaUsageWorkRetryInput {\n\tcollectionId: string;\n\tcontentId: string;\n}\n\n/** Result of explicitly retrying one durable media usage job */\nexport interface MediaUsageWorkRetryResponse {\n\tchanged: boolean;\n\titem: MediaUsageWorkItem;\n}\n\nexport type MediaUsageCollectionDeletionState = \"pending\" | \"retry\" | \"leased\" | \"failed\";\nexport type MediaUsageCollectionDeletionPhase =\n\t| \"fence\"\n\t| \"registry\"\n\t| \"table\"\n\t| \"work\"\n\t| \"sources\"\n\t| \"status\"\n\t| \"finalize\";\nexport interface MediaUsageCollectionDeletionItem {\n\tcollectionId: string;\n\tcollectionSlug: string;\n\tstate: MediaUsageCollectionDeletionState;\n\tphase: MediaUsageCollectionDeletionPhase;\n\tattemptCount: number;\n\tnextAttemptAt: string;\n\tleaseExpiresAt: string | null;\n\tlastErrorCode: string | null;\n\tupdatedAt: string;\n}\nexport interface MediaUsageCollectionDeletionListResponse {\n\titems: MediaUsageCollectionDeletionItem[];\n\tnextCursor?: string;\n}\n\n/** Search result */\nexport interface SearchResult {\n\tid: string;\n\tcollection: string;\n\ttitle: string;\n\texcerpt?: string;\n\tscore: number;\n}\n\n/** Taxonomy */\nexport interface Taxonomy {\n\tname: string;\n\tlabel: string;\n\thierarchical: boolean;\n}\n\n/** Taxonomy term */\nexport interface Term {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\tparentId?: string | null;\n\tdescription?: string;\n\tcount?: number;\n}\n\n/** Menu */\nexport interface Menu {\n\tname: string;\n\tlabel: string;\n}\n\n/** Menu with items */\nexport interface MenuWithItems extends Menu {\n\titems: MenuItem[];\n}\n\n/** Menu item */\nexport interface MenuItem {\n\tid: string;\n\ttype: string;\n\tlabel: string;\n\tcustomUrl?: string;\n\treferenceCollection?: string;\n\treferenceId?: string;\n\ttarget?: string;\n\tparentId?: string | null;\n\tsortOrder: number;\n}\n\n/** Full schema export (returned by /api/schema) */\nexport interface SchemaExport {\n\tcollections: Array<{\n\t\tslug: string;\n\t\tlabel: string;\n\t\tlabelSingular: string;\n\t\tdescription?: string;\n\t\ticon?: string;\n\t\tsupports: string[];\n\t\tfields: Array<{\n\t\t\tslug: string;\n\t\t\tlabel: string;\n\t\t\ttype: string;\n\t\t\trequired: boolean;\n\t\t\tunique: boolean;\n\t\t\tdefaultValue?: unknown;\n\t\t\tvalidation?: unknown;\n\t\t\twidget?: string;\n\t\t\toptions?: unknown;\n\t\t}>;\n\t}>;\n\tversion: string;\n}\n\n/** Manifest — full schema + field descriptors */\nexport interface Manifest {\n\tversion: string;\n\thash: string;\n\tcollections: Record<\n\t\tstring,\n\t\t{\n\t\t\tlabel: string;\n\t\t\tlabelSingular: string;\n\t\t\tsupports: string[];\n\t\t\tfields: Record<string, { kind: string; label?: string; required?: boolean }>;\n\t\t}\n\t>;\n}\n\n// ---------------------------------------------------------------------------\n// Client errors\n// ---------------------------------------------------------------------------\n\nexport class EmDashApiError extends Error {\n\tconstructor(\n\t\tpublic readonly status: number,\n\t\tpublic readonly code: string,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashApiError\";\n\t}\n}\n\nexport class EmDashClientError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashClientError\";\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Client\n// ---------------------------------------------------------------------------\n\nexport class EmDashClient {\n\tprivate readonly baseUrl: string;\n\tprivate readonly transport: { fetch: (request: Request) => Promise<Response> };\n\n\t/** Cached field schemas per collection for PT conversion */\n\tprivate fieldSchemaCache = new Map<string, FieldSchema[]>();\n\n\tconstructor(options: EmDashClientOptions) {\n\t\tthis.baseUrl = options.baseUrl.replace(TRAILING_SLASH_PATTERN, \"\");\n\n\t\t// Build interceptor chain\n\t\tconst interceptors: Interceptor[] = [csrfInterceptor()];\n\n\t\tif (options.token) {\n\t\t\tinterceptors.push(tokenInterceptor(options.token));\n\t\t} else if (options.devBypass) {\n\t\t\tinterceptors.push(devBypassInterceptor(this.baseUrl));\n\t\t}\n\n\t\t// Auto-refresh expired OAuth tokens\n\t\tif (options.refreshToken) {\n\t\t\tinterceptors.push(\n\t\t\t\trefreshInterceptor({\n\t\t\t\t\trefreshToken: options.refreshToken,\n\t\t\t\t\ttokenEndpoint: `${this.baseUrl}/_emdash/api/oauth/token/refresh`,\n\t\t\t\t\tonTokenRefreshed: options.onTokenRefresh\n\t\t\t\t\t\t? (accessToken, _refreshToken, expiresAt) => {\n\t\t\t\t\t\t\t\tconst expiresIn = Math.floor((new Date(expiresAt).getTime() - Date.now()) / 1000);\n\t\t\t\t\t\t\t\toptions.onTokenRefresh!(accessToken, expiresIn);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (options.interceptors) {\n\t\t\tinterceptors.push(...options.interceptors);\n\t\t}\n\n\t\tthis.transport = createTransport({ interceptors });\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Schema\n\t// -----------------------------------------------------------------------\n\n\t/** List all collections */\n\tasync collections(): Promise<Collection[]> {\n\t\tconst data = await this.request<{ items: Collection[] }>(\"GET\", \"/schema/collections\");\n\t\treturn data.items;\n\t}\n\n\t/** Get a single collection with its fields */\n\tasync collection(slug: string): Promise<CollectionWithFields> {\n\t\tconst data = await this.request<{ item: CollectionWithFields }>(\n\t\t\t\"GET\",\n\t\t\t`/schema/collections/${encodeURIComponent(slug)}?includeFields=true`,\n\t\t);\n\t\tconst col = data.item;\n\t\t// Cache field schemas for PT conversion\n\t\tif (col.fields) {\n\t\t\tthis.fieldSchemaCache.set(\n\t\t\t\tslug,\n\t\t\t\tcol.fields.map((f) => ({ slug: f.slug, type: f.type })),\n\t\t\t);\n\t\t}\n\t\treturn col;\n\t}\n\n\t/** Create a collection */\n\tasync createCollection(input: {\n\t\tslug: string;\n\t\tlabel: string;\n\t\tlabelSingular?: string;\n\t\tdescription?: string;\n\t\ticon?: string;\n\t\tsupports?: string[];\n\t}): Promise<Collection> {\n\t\tconst data = await this.request<{ item: Collection }>(\"POST\", \"/schema/collections\", input);\n\t\treturn data.item;\n\t}\n\n\t/** Delete a collection */\n\tasync deleteCollection(slug: string): Promise<void> {\n\t\tawait this.request<unknown>(\"DELETE\", `/schema/collections/${encodeURIComponent(slug)}`);\n\t}\n\n\t/** Create a field on a collection */\n\tasync createField(\n\t\tcollection: string,\n\t\tinput: {\n\t\t\tslug: string;\n\t\t\ttype: string;\n\t\t\tlabel: string;\n\t\t\trequired?: boolean;\n\t\t\tunique?: boolean;\n\t\t\tdefaultValue?: unknown;\n\t\t\tvalidation?: unknown;\n\t\t\twidget?: string;\n\t\t\toptions?: unknown;\n\t\t\tsortOrder?: number;\n\t\t},\n\t): Promise<Field> {\n\t\tconst data = await this.request<{ item: Field }>(\n\t\t\t\"POST\",\n\t\t\t`/schema/collections/${encodeURIComponent(collection)}/fields`,\n\t\t\tinput,\n\t\t);\n\t\t// Invalidate field cache\n\t\tthis.fieldSchemaCache.delete(collection);\n\t\treturn data.item;\n\t}\n\n\t/** Delete a field from a collection */\n\tasync deleteField(collection: string, fieldSlug: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"DELETE\",\n\t\t\t`/schema/collections/${encodeURIComponent(collection)}/fields/${encodeURIComponent(fieldSlug)}`,\n\t\t);\n\t\tthis.fieldSchemaCache.delete(collection);\n\t}\n\n\t/** Get full manifest (schema + field descriptors + features) */\n\tasync manifest(): Promise<Manifest> {\n\t\treturn this.request<Manifest>(\"GET\", \"/manifest\");\n\t}\n\n\t/** Export full schema as JSON (used by `emdash types`) */\n\tasync schemaExport(): Promise<SchemaExport> {\n\t\treturn this.request<SchemaExport>(\"GET\", \"/schema\");\n\t}\n\n\t/** Export schema as TypeScript type definitions (used by `emdash types`) */\n\tasync schemaTypes(): Promise<string> {\n\t\tconst response = await this.requestRaw(\"GET\", \"/schema?format=typescript\");\n\t\tawait this.assertOk(response);\n\t\treturn response.text();\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Content\n\t// -----------------------------------------------------------------------\n\n\t/** List content in a collection */\n\tasync list(\n\t\tcollection: string,\n\t\toptions?: {\n\t\t\tstatus?: string;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torderBy?: string;\n\t\t\torder?: \"asc\" | \"desc\";\n\t\t\tlocale?: string;\n\t\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\t\tfieldFilters?: ContentFieldFilters;\n\t\t},\n\t): Promise<ListResult<ContentItem>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.status) params.set(\"status\", options.status);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\t\tif (options?.orderBy) params.set(\"orderBy\", options.orderBy);\n\t\tif (options?.order) params.set(\"order\", options.order);\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tif (options?.fieldFilters && Object.keys(options.fieldFilters).length > 0) {\n\t\t\tparams.set(\"fieldFilters\", JSON.stringify(options.fieldFilters));\n\t\t}\n\n\t\tconst qs = params.toString();\n\t\tconst path = `/content/${encodeURIComponent(collection)}${qs ? `?${qs}` : \"\"}`;\n\t\treturn this.request<ListResult<ContentItem>>(\"GET\", path);\n\t}\n\n\t/** Async iterator that auto-follows cursors */\n\tasync *listAll(\n\t\tcollection: string,\n\t\toptions?: {\n\t\t\tstatus?: string;\n\t\t\tlimit?: number;\n\t\t\torderBy?: string;\n\t\t\torder?: \"asc\" | \"desc\";\n\t\t\tlocale?: string;\n\t\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\t\tfieldFilters?: ContentFieldFilters;\n\t\t},\n\t): AsyncGenerator<ContentItem> {\n\t\tlet cursor: string | undefined;\n\t\tdo {\n\t\t\tconst result = await this.list(collection, { ...options, cursor });\n\t\t\tfor (const item of result.items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tcursor = result.nextCursor;\n\t\t} while (cursor);\n\t}\n\n\t/**\n\t * Get a single content item. Returns the item with a `_rev` token\n\t * that can be passed to update() for optimistic concurrency.\n\t */\n\tasync get(\n\t\tcollection: string,\n\t\tid: string,\n\t\toptions?: { raw?: boolean; locale?: string },\n\t): Promise<ContentItem> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tconst qs = params.size > 0 ? `?${params}` : \"\";\n\t\tconst result = await this.requestRaw(\n\t\t\t\"GET\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}${qs}`,\n\t\t);\n\t\tif (!result.ok) {\n\t\t\tawait this.assertOk(result);\n\t\t}\n\n\t\tconst raw = (await result.json()) as { data: { item: ContentItem; _rev?: string } };\n\t\tconst json = raw.data;\n\t\tconst item = json.item;\n\n\t\t// Attach _rev to the item so callers can pass it back on update\n\t\tif (json._rev) {\n\t\t\titem._rev = json._rev;\n\t\t}\n\n\t\t// Convert PT fields to markdown unless raw is requested\n\t\tif (!options?.raw && item.data) {\n\t\t\tconst fields = await this.getFieldSchemas(collection);\n\t\t\titem.data = convertDataForRead(item.data, fields, false);\n\t\t}\n\n\t\treturn item;\n\t}\n\n\t/** Create a new content item */\n\tasync create(\n\t\tcollection: string,\n\t\tinput: {\n\t\t\tdata: Record<string, unknown>;\n\t\t\tslug?: string;\n\t\t\tstatus?: string;\n\t\t\tlocale?: string;\n\t\t\ttranslationOf?: string;\n\t\t},\n\t): Promise<ContentItem> {\n\t\t// Convert markdown strings to PT for portableText fields\n\t\tconst fields = await this.getFieldSchemas(collection);\n\t\tconst data = convertDataForWrite(input.data, fields);\n\n\t\tconst result = await this.request<{ item: ContentItem }>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}`,\n\t\t\t{ ...input, data },\n\t\t);\n\t\treturn result.item;\n\t}\n\n\t/**\n\t * Update a content item. Pass `_rev` from a prior get() for optimistic\n\t * concurrency — the server returns 409 if the item has changed.\n\t * Omit `_rev` for a blind write (no conflict detection).\n\t */\n\tasync update(\n\t\tcollection: string,\n\t\tid: string,\n\t\tinput: {\n\t\t\tdata?: Record<string, unknown>;\n\t\t\tslug?: string;\n\t\t\tstatus?: string;\n\t\t\t_rev?: string;\n\t\t\tlocale?: string;\n\t\t},\n\t): Promise<ContentItem> {\n\t\t// Convert markdown strings to PT\n\t\tlet data = input.data;\n\t\tif (data) {\n\t\t\tconst fields = await this.getFieldSchemas(collection);\n\t\t\tdata = convertDataForWrite(data, fields);\n\t\t}\n\n\t\tconst body = {\n\t\t\tdata,\n\t\t\tslug: input.slug,\n\t\t\tstatus: input.status,\n\t\t\t...(input._rev ? { _rev: input._rev } : {}),\n\t\t};\n\t\tconst params = new URLSearchParams();\n\t\tif (input.locale) params.set(\"locale\", input.locale);\n\t\tconst result = await this.request<{ item: ContentItem; _rev?: string }>(\n\t\t\t\"PUT\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}${params.toString() ? `?${params}` : \"\"}`,\n\t\t\tbody,\n\t\t);\n\n\t\tconst item = result.item;\n\t\tif (result._rev) {\n\t\t\titem._rev = result._rev;\n\t\t}\n\t\treturn item;\n\t}\n\n\t/** Delete (soft) a content item */\n\tasync delete(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"DELETE\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}`,\n\t\t);\n\t}\n\n\t/** Publish a content item */\n\tasync publish(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/publish`,\n\t\t);\n\t}\n\n\t/** Unpublish a content item */\n\tasync unpublish(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/unpublish`,\n\t\t);\n\t}\n\n\t/** Schedule publishing */\n\tasync schedule(collection: string, id: string, options: { at: string }): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/schedule`,\n\t\t\t{ scheduledAt: options.at },\n\t\t);\n\t}\n\n\t/** Restore a trashed content item */\n\tasync restore(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/restore`,\n\t\t);\n\t}\n\n\t/** Compare live and draft revisions */\n\tasync compare(\n\t\tcollection: string,\n\t\tid: string,\n\t): Promise<{\n\t\thasChanges: boolean;\n\t\tlive: Record<string, unknown> | null;\n\t\tdraft: Record<string, unknown> | null;\n\t}> {\n\t\treturn this.request<{\n\t\t\thasChanges: boolean;\n\t\t\tlive: Record<string, unknown> | null;\n\t\t\tdraft: Record<string, unknown> | null;\n\t\t}>(\"GET\", `/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/compare`);\n\t}\n\n\t/** Discard draft revision, reverting to the published version */\n\tasync discardDraft(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/discard-draft`,\n\t\t);\n\t}\n\n\t/**\n\t * Get all translations of a content item.\n\t * Returns the translation group ID and a summary of each locale version.\n\t */\n\tasync translations(\n\t\tcollection: string,\n\t\tid: string,\n\t): Promise<{\n\t\ttranslationGroup: string;\n\t\ttranslations: Array<{\n\t\t\tid: string;\n\t\t\tlocale: string | null;\n\t\t\tslug: string | null;\n\t\t\tstatus: string;\n\t\t\tupdatedAt: string;\n\t\t}>;\n\t}> {\n\t\treturn this.request(\n\t\t\t\"GET\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/translations`,\n\t\t);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Media\n\t// -----------------------------------------------------------------------\n\n\t/** List media items */\n\tasync mediaList(options?: {\n\t\tmimeType?: string;\n\t\tlimit?: number;\n\t\tcursor?: string;\n\t\tincludeUsage?: boolean;\n\t}): Promise<ListResult<MediaItem>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.mimeType) params.set(\"mimeType\", options.mimeType);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\t\tif (options?.includeUsage === true) params.set(\"includeUsage\", \"1\");\n\n\t\tconst qs = params.toString();\n\t\treturn this.request<ListResult<MediaItem>>(\"GET\", `/media${qs ? `?${qs}` : \"\"}`);\n\t}\n\n\t/** Get a single media item */\n\tasync mediaGet(id: string, options?: { includeUsage?: boolean }): Promise<MediaItem> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.includeUsage === true) params.set(\"includeUsage\", \"1\");\n\n\t\tconst qs = params.toString();\n\t\tconst data = await this.request<{ item: MediaItem }>(\n\t\t\t\"GET\",\n\t\t\t`/media/${encodeURIComponent(id)}${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t\treturn data.item;\n\t}\n\n\t/** Get entry-grouped usage details for a media item */\n\tasync mediaGetUsage(\n\t\tid: string,\n\t\toptions?: { limit?: number; cursor?: string },\n\t): Promise<MediaUsageDetailsResponse> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor !== undefined) params.set(\"cursor\", options.cursor);\n\n\t\tconst qs = params.toString();\n\t\treturn this.request<MediaUsageDetailsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/media/${encodeURIComponent(id)}/usage${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Upload a media file */\n\tasync mediaUpload(\n\t\tfile: Uint8Array | Blob,\n\t\tfilename: string,\n\t\toptions?: { alt?: string; caption?: string; contentType?: string },\n\t): Promise<MediaItem> {\n\t\tconst formData = new FormData();\n\n\t\t// Handle different file types\n\t\tif (file instanceof Blob) {\n\t\t\tformData.append(\"file\", file, filename);\n\t\t} else {\n\t\t\tconst mimeType = options?.contentType ?? mimeFromFilename(filename);\n\t\t\tformData.append(\"file\", new Blob([file as BlobPart], { type: mimeType }), filename);\n\t\t}\n\n\t\tif (options?.alt) formData.append(\"alt\", options.alt);\n\t\tif (options?.caption) formData.append(\"caption\", options.caption);\n\n\t\tconst url = `${this.baseUrl}/_emdash/api/media`;\n\t\tconst request = new Request(url, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tconst response = await this.transport.fetch(request);\n\t\tawait this.assertOk(response);\n\n\t\tconst raw = (await response.json()) as { data: { item: MediaItem } };\n\t\treturn raw.data.item;\n\t}\n\n\t/** Delete a media item */\n\tasync mediaDelete(id: string): Promise<void> {\n\t\tawait this.request<unknown>(\"DELETE\", `/media/${encodeURIComponent(id)}`);\n\t}\n\n\t/** Repair content media usage indexes for one collection or all collections */\n\tasync mediaRepairUsage(input: MediaUsageRepairInput): Promise<MediaUsageRepairResponse> {\n\t\treturn this.request<MediaUsageRepairResponse>(\"POST\", \"/admin/media-usage/repair\", input);\n\t}\n\n\t/** List a bounded page of durable media usage entry work */\n\tasync mediaListUsageWork(\n\t\toptions: MediaUsageWorkListOptions,\n\t): Promise<MediaUsageWorkListResponse> {\n\t\tconst params = new URLSearchParams({ collection: options.collection });\n\t\tif (options.state) params.set(\"state\", options.state);\n\t\tif (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options.cursor) params.set(\"cursor\", options.cursor);\n\t\treturn this.request<MediaUsageWorkListResponse>(\"GET\", `/admin/media-usage/work?${params}`);\n\t}\n\n\t/** Explicitly retry one durable media usage entry job */\n\tasync mediaRetryUsageWork(input: MediaUsageWorkRetryInput): Promise<MediaUsageWorkRetryResponse> {\n\t\treturn this.request<MediaUsageWorkRetryResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/admin/media-usage/work/retry\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\tasync mediaListCollectionDeletions(\n\t\toptions: {\n\t\t\tstate?: MediaUsageCollectionDeletionState;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t} = {},\n\t): Promise<MediaUsageCollectionDeletionListResponse> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options.state) params.set(\"state\", options.state);\n\t\tif (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options.cursor) params.set(\"cursor\", options.cursor);\n\t\treturn this.request(\"GET\", `/admin/media-usage/collection-deletions?${params}`);\n\t}\n\n\tasync mediaRetryCollectionDeletion(collectionId: string): Promise<{\n\t\tchanged: boolean;\n\t\titem: MediaUsageCollectionDeletionItem;\n\t}> {\n\t\treturn this.request(\"POST\", \"/admin/media-usage/collection-deletions/retry\", {\n\t\t\tcollectionId,\n\t\t});\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Search\n\t// -----------------------------------------------------------------------\n\n\t/** Full-text search */\n\tasync search(\n\t\tquery: string,\n\t\toptions?: { collection?: string; locale?: string; limit?: number },\n\t): Promise<SearchResult[]> {\n\t\tconst params = new URLSearchParams({ q: query });\n\t\tif (options?.collection) params.set(\"collections\", options.collection);\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\n\t\tconst data = await this.request<{ items: SearchResult[] }>(\"GET\", `/search?${params}`);\n\t\treturn data.items;\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Taxonomies\n\t// -----------------------------------------------------------------------\n\n\t/** List taxonomies */\n\tasync taxonomies(): Promise<Taxonomy[]> {\n\t\tconst data = await this.request<{ taxonomies: Taxonomy[] }>(\"GET\", \"/taxonomies\");\n\t\treturn data.taxonomies;\n\t}\n\n\t/** List terms in a taxonomy */\n\tasync terms(\n\t\ttaxonomy: string,\n\t\toptions?: { limit?: number; cursor?: string },\n\t): Promise<ListResult<Term>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\n\t\tconst qs = params.toString();\n\t\tconst data = await this.request<{ terms: Term[] }>(\n\t\t\t\"GET\",\n\t\t\t`/taxonomies/${encodeURIComponent(taxonomy)}/terms${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t\treturn { items: data.terms };\n\t}\n\n\t/** Create a taxonomy term */\n\tasync createTerm(\n\t\ttaxonomy: string,\n\t\tinput: { slug: string; label: string; parentId?: string; description?: string },\n\t): Promise<Term> {\n\t\treturn this.request<Term>(\"POST\", `/taxonomies/${encodeURIComponent(taxonomy)}/terms`, input);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Menus\n\t// -----------------------------------------------------------------------\n\n\t/** List menus */\n\tasync menus(): Promise<Menu[]> {\n\t\t// Handler returns a bare array, not { items: [...] }\n\t\treturn this.request<Menu[]>(\"GET\", \"/menus\");\n\t}\n\n\t/** Get a menu with its items */\n\tasync menu(name: string): Promise<MenuWithItems> {\n\t\treturn this.request<MenuWithItems>(\"GET\", `/menus/${encodeURIComponent(name)}`);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Internal helpers\n\t// -----------------------------------------------------------------------\n\n\t/** Make a typed JSON request to the API */\n\tprivate async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n\t\tconst response = await this.requestRaw(method, path, body);\n\t\tawait this.assertOk(response);\n\t\tconst json = (await response.json()) as { data: T };\n\t\treturn json.data;\n\t}\n\n\t/** Make a raw request — caller handles response */\n\tprivate async requestRaw(method: string, path: string, body?: unknown): Promise<Response> {\n\t\tconst url = `${this.baseUrl}/_emdash/api${path}`;\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: \"application/json\",\n\t\t};\n\n\t\tlet requestBody: string | undefined;\n\t\tif (body !== undefined) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t\trequestBody = JSON.stringify(body);\n\t\t}\n\n\t\tconst request = new Request(url, {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: requestBody,\n\t\t});\n\n\t\treturn this.transport.fetch(request);\n\t}\n\n\t/** Assert a response is OK, throw typed error if not */\n\tprivate async assertOk(response: Response): Promise<void> {\n\t\tif (response.ok) return;\n\n\t\tlet code = \"UNKNOWN_ERROR\";\n\t\tlet message = `HTTP ${response.status}`;\n\t\tlet details: Record<string, unknown> | undefined;\n\n\t\ttry {\n\t\t\tconst json = (await response.json()) as {\n\t\t\t\terror?: { code?: string; message?: string; details?: Record<string, unknown> };\n\t\t\t};\n\t\t\tif (json.error) {\n\t\t\t\tcode = json.error.code ?? code;\n\t\t\t\tmessage = json.error.message ?? message;\n\t\t\t\tdetails = json.error.details;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response body isn't JSON — use status text\n\t\t\tmessage = response.statusText || message;\n\t\t}\n\n\t\tthrow new EmDashApiError(response.status, code, message, details);\n\t}\n\n\t/** Get cached field schemas for a collection, fetching if needed */\n\tprivate async getFieldSchemas(collection: string): Promise<FieldSchema[]> {\n\t\tlet cached = this.fieldSchemaCache.get(collection);\n\t\tif (cached) return cached;\n\n\t\ttry {\n\t\t\tconst col = await this.collection(collection);\n\t\t\tcached = col.fields.map((f) => ({ slug: f.slug, type: f.type }));\n\t\t\tthis.fieldSchemaCache.set(collection, cached);\n\t\t\treturn cached;\n\t\t} catch {\n\t\t\t// If we can't fetch the schema, skip conversion\n\t\t\treturn [];\n\t\t}\n\t}\n}\n\ntype _AssertTrue<T extends true> = T;\ntype _MediaRepairUsageRequiresExplicitInput = _AssertTrue<\n\tParameters<EmDashClient[\"mediaRepairUsage\"]> extends [MediaUsageRepairInput] ? true : false\n>;\n\n// Re-export transport types for interceptor authors\nexport type { Interceptor } from \"./transport.js\";\nexport {\n\tcreateTransport,\n\tcsrfInterceptor,\n\ttokenInterceptor,\n\tdevBypassInterceptor,\n} from \"./transport.js\";\nexport { portableTextToMarkdown, markdownToPortableText } from \"./portable-text.js\";\nexport type { PortableTextBlock } from \"./portable-text.js\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/client/index.ts"],"sourcesContent":["/**\n * EmDashClient — typed HTTP client for the EmDash REST API.\n *\n * Handles auth, CSRF, PT ↔ Markdown conversion, and optional `_rev`\n * concurrency tokens. Shared foundation for the CLI and future MCP server.\n *\n * @example\n * ```ts\n * import { EmDashClient } from \"emdash/client\";\n *\n * const client = new EmDashClient({\n * baseUrl: \"http://localhost:4321\",\n * devBypass: true,\n * });\n *\n * const posts = await client.list(\"posts\", { status: \"published\" });\n * ```\n */\n\nimport mime from \"mime/lite\";\n\nimport type { ContentFieldFilters } from \"../content-list-query.js\";\nimport type { FieldSchema } from \"./portable-text.js\";\nimport { convertDataForRead, convertDataForWrite } from \"./portable-text.js\";\nimport type { Interceptor } from \"./transport.js\";\nimport {\n\tcreateTransport,\n\tcsrfInterceptor,\n\tdevBypassInterceptor,\n\trefreshInterceptor,\n\ttokenInterceptor,\n} from \"./transport.js\";\n\n// Regex patterns for client utilities\nconst TRAILING_SLASH_PATTERN = /\\/$/;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mimeFromFilename(filename: string): string {\n\treturn mime.getType(filename) ?? \"application/octet-stream\";\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface EmDashClientOptions {\n\t/** Base URL of the EmDash instance */\n\tbaseUrl: string;\n\t/** API token (ec_pat_...) or OAuth token (ec_oat_...) */\n\ttoken?: string;\n\t/** OAuth refresh token for auto-refresh on 401 */\n\trefreshToken?: string;\n\t/** Called when a token is refreshed (for persisting new access token) */\n\tonTokenRefresh?: (accessToken: string, expiresIn: number) => void;\n\t/** Use dev-bypass authentication (localhost only) */\n\tdevBypass?: boolean;\n\t/** Additional request interceptors */\n\tinterceptors?: Interceptor[];\n}\n\n/** Standard API error shape */\nexport interface ApiError {\n\tcode: string;\n\tmessage: string;\n\tdetails?: Record<string, unknown>;\n}\n\n/** Standard API response wrapper */\nexport interface ClientResponse<T> {\n\tsuccess: true;\n\tdata: T;\n}\n\n/** Paginated list response */\nexport interface ListResult<T> {\n\titems: T[];\n\tnextCursor?: string;\n}\n\n/** Content item as returned by the API */\nexport interface ContentItem {\n\tid: string;\n\ttype: string;\n\tslug: string | null;\n\tstatus: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tpublishedAt: string | null;\n\tscheduledAt: string | null;\n\tliveRevisionId: string | null;\n\tdraftRevisionId: string | null;\n\tlocale: string | null;\n\ttranslationGroup: string | null;\n\t_rev?: string;\n}\n\n/** Collection metadata */\nexport interface Collection {\n\tslug: string;\n\tlabel: string;\n\tlabelSingular: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports: string[];\n}\n\n/** Collection with fields */\nexport interface CollectionWithFields extends Collection {\n\tfields: Field[];\n}\n\n/** Field metadata */\nexport interface Field {\n\tslug: string;\n\tlabel: string;\n\ttype: string;\n\trequired: boolean;\n\tunique: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: unknown;\n\twidget?: string;\n\toptions?: unknown;\n\tsortOrder?: number;\n}\n\n/** Aggregate trust state for media usage reads */\nexport type MediaUsageCoverageStatus =\n\t| \"complete\"\n\t| \"never\"\n\t| \"running\"\n\t| \"partial\"\n\t| \"failed\"\n\t| \"stale\"\n\t| \"unknown\";\n\n/** Aggregate media usage coverage across all content collections */\nexport interface MediaUsageCoverage {\n\tscope: \"all_content_collections\";\n\tstatus: MediaUsageCoverageStatus;\n}\n\n/** Coverage-aware usage count for a media item */\nexport interface MediaUsageSummary {\n\tcount: number | null;\n\tcoverage: MediaUsageCoverage;\n}\n\n/** One indexed media reference within a content source */\nexport interface MediaUsageOccurrenceDetail {\n\tfieldSlug: string;\n\tfieldPath: string;\n\toccurrenceIndex: number;\n\treferenceType: \"image_field\" | \"file_field\" | \"portable_text_image\" | \"unknown\";\n}\n\n/** Indexed references from one visible content source */\nexport interface MediaUsageSourceDetail {\n\tvariant: \"columns\" | \"draft_overlay\";\n\toccurrences: MediaUsageOccurrenceDetail[];\n}\n\n/** One content entry that references a media item */\nexport interface MediaUsageEntryDetail {\n\tcollection: string;\n\tcontentId: string;\n\ttitle: string | null;\n\tslug: string | null;\n\tlocale: string | null;\n\tstatus: string | null;\n\tscheduledAt: string | null;\n\tdeletedAt: string | null;\n\tsources: MediaUsageSourceDetail[];\n}\n\n/** Entry-grouped media usage details */\nexport interface MediaUsageDetailsResponse {\n\titems: MediaUsageEntryDetail[];\n\tnextCursor?: string;\n\tcoverage: MediaUsageCoverage;\n}\n\n/** Media item */\nexport interface MediaItem {\n\tid: string;\n\tfilename: string;\n\tkey: string;\n\tmimeType: string;\n\tsize: number;\n\twidth?: number;\n\theight?: number;\n\tfocalX?: number | null;\n\tfocalY?: number | null;\n\talt?: string;\n\tcaption?: string;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tfolderId?: string | null;\n\tusage?: MediaUsageSummary;\n}\n\n/** Result of assigning local media to a folder or the Main library */\nexport interface MediaFolderAssignment {\n\tid: string;\n\tfolderId: string | null;\n}\n\n/** Flat media-library folder */\nexport interface MediaFolder {\n\tid: string;\n\tname: string;\n}\n\n/** Media usage repair request */\nexport type MediaUsageRepairInput = { scope: \"collection\"; collection: string } | { scope: \"all\" };\n\n/** Media usage repair status */\nexport type MediaUsageRepairStatus = \"complete\" | \"partial\" | \"failed\" | \"stale\";\n\n/** Per-collection media usage repair summary */\nexport interface MediaUsageRepairCollectionSummary {\n\tcollection: string;\n\tstatus: MediaUsageRepairStatus;\n\tindexedSourceCount: number;\n\tfailedSourceCount: number;\n\tskippedSourceCount: number;\n\tdeletedSourceCount: number;\n\tlastErrorCode: string | null;\n\tstartedAt: string;\n\tcompletedAt: string | null;\n}\n\n/** Media usage repair response */\nexport interface MediaUsageRepairResponse {\n\tstatus: MediaUsageRepairStatus;\n\tindexedSourceCount: number;\n\tfailedSourceCount: number;\n\tskippedSourceCount: number;\n\tdeletedSourceCount: number;\n\tcollections: MediaUsageRepairCollectionSummary[];\n}\n\nexport interface MediaUsageProgress {\n\tstatus: \"indexing\" | \"ready\" | \"needs_attention\";\n\treadyCollections: number;\n\ttotalCollections: number;\n}\n\nexport interface MediaUsageProgressAdvanceResponse {\n\tactivation: MediaUsageActivationStatus;\n\tprogress: MediaUsageProgress | null;\n\tnextRequestInMs: 0 | 30_000 | null;\n}\n\n/** Durable media usage entry-work state */\nexport type MediaUsageWorkState = \"pending\" | \"retry\" | \"leased\" | \"failed\";\n\n/** Redacted operator view of one durable media usage job */\nexport interface MediaUsageWorkItem {\n\tcollectionId: string;\n\tcollectionSlug: string;\n\tcontentId: string;\n\tstate: MediaUsageWorkState;\n\tattemptCount: number;\n\tnextAttemptAt: string;\n\tleaseExpiresAt: string | null;\n\tlastAttemptedAt: string | null;\n\tlastErrorCode: string | null;\n\tupdatedAt: string;\n}\n\n/** Filters and pagination for durable media usage work */\nexport interface MediaUsageWorkListOptions {\n\tcollection: string;\n\tstate?: MediaUsageWorkState;\n\tlimit?: number;\n\tcursor?: string;\n}\n\n/** One bounded page of durable media usage work */\nexport interface MediaUsageWorkListResponse {\n\titems: MediaUsageWorkItem[];\n\tnextCursor?: string;\n}\n\n/** Identity for explicitly retrying one durable media usage job */\nexport interface MediaUsageWorkRetryInput {\n\tcollectionId: string;\n\tcontentId: string;\n}\n\n/** Result of explicitly retrying one durable media usage job */\nexport interface MediaUsageWorkRetryResponse {\n\tchanged: boolean;\n\titem: MediaUsageWorkItem;\n}\n\nexport interface MediaUsageActivationStatus {\n\tstate: \"expanded\" | \"activating\" | \"active\";\n\tcollectionCursor: string | null;\n\tattemptCount: number;\n\tdrainConfirmedAt: string | null;\n\tlastAttemptedAt: string | null;\n\tlastErrorCode: \"MEDIA_USAGE_ACTIVATION_FAILED\" | null;\n\tleaseExpiresAt: string | null;\n\tactivatedAt: string | null;\n\tupdatedAt: string;\n}\n\nexport interface MediaUsageActivationAdvanceInput {\n\twritersDrained: true;\n}\n\nexport interface MediaUsageActivationAdvanceResponse {\n\toutcome: \"activating\" | \"active\";\n\tprocessedCollections: number;\n\tactivation: MediaUsageActivationStatus;\n}\n\nexport type MediaUsageCollectionDeletionState = \"pending\" | \"retry\" | \"leased\" | \"failed\";\nexport type MediaUsageCollectionDeletionPhase =\n\t| \"fence\"\n\t| \"registry\"\n\t| \"table\"\n\t| \"work\"\n\t| \"sources\"\n\t| \"status\"\n\t| \"finalize\";\nexport interface MediaUsageCollectionDeletionItem {\n\tcollectionId: string;\n\tcollectionSlug: string;\n\tstate: MediaUsageCollectionDeletionState;\n\tphase: MediaUsageCollectionDeletionPhase;\n\tattemptCount: number;\n\tnextAttemptAt: string;\n\tleaseExpiresAt: string | null;\n\tlastErrorCode: string | null;\n\tupdatedAt: string;\n}\nexport interface MediaUsageCollectionDeletionListResponse {\n\titems: MediaUsageCollectionDeletionItem[];\n\tnextCursor?: string;\n}\n\n/** Search result */\nexport interface SearchResult {\n\tid: string;\n\tcollection: string;\n\ttitle: string;\n\texcerpt?: string;\n\tscore: number;\n}\n\n/** Taxonomy */\nexport interface Taxonomy {\n\tname: string;\n\tlabel: string;\n\thierarchical: boolean;\n}\n\n/** Taxonomy term */\nexport interface Term {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\tparentId?: string | null;\n\tdescription?: string;\n\tcount?: number;\n}\n\n/** Menu */\nexport interface Menu {\n\tname: string;\n\tlabel: string;\n}\n\n/** Menu with items */\nexport interface MenuWithItems extends Menu {\n\titems: MenuItem[];\n}\n\n/** Menu item */\nexport interface MenuItem {\n\tid: string;\n\ttype: string;\n\tlabel: string;\n\tcustomUrl?: string;\n\treferenceCollection?: string;\n\treferenceId?: string;\n\ttarget?: string;\n\tparentId?: string | null;\n\tsortOrder: number;\n}\n\n/** Full schema export (returned by /api/schema) */\nexport interface SchemaExport {\n\tcollections: Array<{\n\t\tslug: string;\n\t\tlabel: string;\n\t\tlabelSingular: string;\n\t\tdescription?: string;\n\t\ticon?: string;\n\t\tsupports: string[];\n\t\tfields: Array<{\n\t\t\tslug: string;\n\t\t\tlabel: string;\n\t\t\ttype: string;\n\t\t\trequired: boolean;\n\t\t\tunique: boolean;\n\t\t\tdefaultValue?: unknown;\n\t\t\tvalidation?: unknown;\n\t\t\twidget?: string;\n\t\t\toptions?: unknown;\n\t\t}>;\n\t}>;\n\tversion: string;\n}\n\n/** Manifest — full schema + field descriptors */\nexport interface Manifest {\n\tversion: string;\n\thash: string;\n\tcollections: Record<\n\t\tstring,\n\t\t{\n\t\t\tlabel: string;\n\t\t\tlabelSingular: string;\n\t\t\tsupports: string[];\n\t\t\tfields: Record<string, { kind: string; label?: string; required?: boolean }>;\n\t\t}\n\t>;\n}\n\n// ---------------------------------------------------------------------------\n// Client errors\n// ---------------------------------------------------------------------------\n\nexport class EmDashApiError extends Error {\n\tconstructor(\n\t\tpublic readonly status: number,\n\t\tpublic readonly code: string,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashApiError\";\n\t}\n}\n\nexport class EmDashClientError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashClientError\";\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Client\n// ---------------------------------------------------------------------------\n\nexport class EmDashClient {\n\tprivate readonly baseUrl: string;\n\tprivate readonly transport: { fetch: (request: Request) => Promise<Response> };\n\n\t/** Cached field schemas per collection for PT conversion */\n\tprivate fieldSchemaCache = new Map<string, FieldSchema[]>();\n\n\tconstructor(options: EmDashClientOptions) {\n\t\tthis.baseUrl = options.baseUrl.replace(TRAILING_SLASH_PATTERN, \"\");\n\n\t\t// Build interceptor chain\n\t\tconst interceptors: Interceptor[] = [csrfInterceptor()];\n\n\t\tif (options.token) {\n\t\t\tinterceptors.push(tokenInterceptor(options.token));\n\t\t} else if (options.devBypass) {\n\t\t\tinterceptors.push(devBypassInterceptor(this.baseUrl));\n\t\t}\n\n\t\t// Auto-refresh expired OAuth tokens\n\t\tif (options.refreshToken) {\n\t\t\tinterceptors.push(\n\t\t\t\trefreshInterceptor({\n\t\t\t\t\trefreshToken: options.refreshToken,\n\t\t\t\t\ttokenEndpoint: `${this.baseUrl}/_emdash/api/oauth/token/refresh`,\n\t\t\t\t\tonTokenRefreshed: options.onTokenRefresh\n\t\t\t\t\t\t? (accessToken, _refreshToken, expiresAt) => {\n\t\t\t\t\t\t\t\tconst expiresIn = Math.floor((new Date(expiresAt).getTime() - Date.now()) / 1000);\n\t\t\t\t\t\t\t\toptions.onTokenRefresh!(accessToken, expiresIn);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (options.interceptors) {\n\t\t\tinterceptors.push(...options.interceptors);\n\t\t}\n\n\t\tthis.transport = createTransport({ interceptors });\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Schema\n\t// -----------------------------------------------------------------------\n\n\t/** List all collections */\n\tasync collections(): Promise<Collection[]> {\n\t\tconst data = await this.request<{ items: Collection[] }>(\"GET\", \"/schema/collections\");\n\t\treturn data.items;\n\t}\n\n\t/** Get a single collection with its fields */\n\tasync collection(slug: string): Promise<CollectionWithFields> {\n\t\tconst data = await this.request<{ item: CollectionWithFields }>(\n\t\t\t\"GET\",\n\t\t\t`/schema/collections/${encodeURIComponent(slug)}?includeFields=true`,\n\t\t);\n\t\tconst col = data.item;\n\t\t// Cache field schemas for PT conversion\n\t\tif (col.fields) {\n\t\t\tthis.fieldSchemaCache.set(\n\t\t\t\tslug,\n\t\t\t\tcol.fields.map((f) => ({ slug: f.slug, type: f.type })),\n\t\t\t);\n\t\t}\n\t\treturn col;\n\t}\n\n\t/** Create a collection */\n\tasync createCollection(input: {\n\t\tslug: string;\n\t\tlabel: string;\n\t\tlabelSingular?: string;\n\t\tdescription?: string;\n\t\ticon?: string;\n\t\tsupports?: string[];\n\t}): Promise<Collection> {\n\t\tconst data = await this.request<{ item: Collection }>(\"POST\", \"/schema/collections\", input);\n\t\treturn data.item;\n\t}\n\n\t/** Delete a collection */\n\tasync deleteCollection(slug: string): Promise<void> {\n\t\tawait this.request<unknown>(\"DELETE\", `/schema/collections/${encodeURIComponent(slug)}`);\n\t}\n\n\t/** Create a field on a collection */\n\tasync createField(\n\t\tcollection: string,\n\t\tinput: {\n\t\t\tslug: string;\n\t\t\ttype: string;\n\t\t\tlabel: string;\n\t\t\trequired?: boolean;\n\t\t\tunique?: boolean;\n\t\t\tdefaultValue?: unknown;\n\t\t\tvalidation?: unknown;\n\t\t\twidget?: string;\n\t\t\toptions?: unknown;\n\t\t\tsortOrder?: number;\n\t\t},\n\t): Promise<Field> {\n\t\tconst data = await this.request<{ item: Field }>(\n\t\t\t\"POST\",\n\t\t\t`/schema/collections/${encodeURIComponent(collection)}/fields`,\n\t\t\tinput,\n\t\t);\n\t\t// Invalidate field cache\n\t\tthis.fieldSchemaCache.delete(collection);\n\t\treturn data.item;\n\t}\n\n\t/** Delete a field from a collection */\n\tasync deleteField(collection: string, fieldSlug: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"DELETE\",\n\t\t\t`/schema/collections/${encodeURIComponent(collection)}/fields/${encodeURIComponent(fieldSlug)}`,\n\t\t);\n\t\tthis.fieldSchemaCache.delete(collection);\n\t}\n\n\t/** Get full manifest (schema + field descriptors + features) */\n\tasync manifest(): Promise<Manifest> {\n\t\treturn this.request<Manifest>(\"GET\", \"/manifest\");\n\t}\n\n\t/** Export full schema as JSON (used by `emdash types`) */\n\tasync schemaExport(): Promise<SchemaExport> {\n\t\treturn this.request<SchemaExport>(\"GET\", \"/schema\");\n\t}\n\n\t/** Export schema as TypeScript type definitions (used by `emdash types`) */\n\tasync schemaTypes(): Promise<string> {\n\t\tconst response = await this.requestRaw(\"GET\", \"/schema?format=typescript\");\n\t\tawait this.assertOk(response);\n\t\treturn response.text();\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Content\n\t// -----------------------------------------------------------------------\n\n\t/** List content in a collection */\n\tasync list(\n\t\tcollection: string,\n\t\toptions?: {\n\t\t\tstatus?: string;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torderBy?: string;\n\t\t\torder?: \"asc\" | \"desc\";\n\t\t\tlocale?: string;\n\t\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\t\tfieldFilters?: ContentFieldFilters;\n\t\t},\n\t): Promise<ListResult<ContentItem>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.status) params.set(\"status\", options.status);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\t\tif (options?.orderBy) params.set(\"orderBy\", options.orderBy);\n\t\tif (options?.order) params.set(\"order\", options.order);\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tif (options?.fieldFilters && Object.keys(options.fieldFilters).length > 0) {\n\t\t\tparams.set(\"fieldFilters\", JSON.stringify(options.fieldFilters));\n\t\t}\n\n\t\tconst qs = params.toString();\n\t\tconst path = `/content/${encodeURIComponent(collection)}${qs ? `?${qs}` : \"\"}`;\n\t\treturn this.request<ListResult<ContentItem>>(\"GET\", path);\n\t}\n\n\t/** Async iterator that auto-follows cursors */\n\tasync *listAll(\n\t\tcollection: string,\n\t\toptions?: {\n\t\t\tstatus?: string;\n\t\t\tlimit?: number;\n\t\t\torderBy?: string;\n\t\t\torder?: \"asc\" | \"desc\";\n\t\t\tlocale?: string;\n\t\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\t\tfieldFilters?: ContentFieldFilters;\n\t\t},\n\t): AsyncGenerator<ContentItem> {\n\t\tlet cursor: string | undefined;\n\t\tdo {\n\t\t\tconst result = await this.list(collection, { ...options, cursor });\n\t\t\tfor (const item of result.items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tcursor = result.nextCursor;\n\t\t} while (cursor);\n\t}\n\n\t/**\n\t * Get a single content item. Returns the item with a `_rev` token\n\t * that can be passed to update() for optimistic concurrency.\n\t */\n\tasync get(\n\t\tcollection: string,\n\t\tid: string,\n\t\toptions?: { raw?: boolean; locale?: string },\n\t): Promise<ContentItem> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tconst qs = params.size > 0 ? `?${params}` : \"\";\n\t\tconst result = await this.requestRaw(\n\t\t\t\"GET\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}${qs}`,\n\t\t);\n\t\tif (!result.ok) {\n\t\t\tawait this.assertOk(result);\n\t\t}\n\n\t\tconst raw = (await result.json()) as { data: { item: ContentItem; _rev?: string } };\n\t\tconst json = raw.data;\n\t\tconst item = json.item;\n\n\t\t// Attach _rev to the item so callers can pass it back on update\n\t\tif (json._rev) {\n\t\t\titem._rev = json._rev;\n\t\t}\n\n\t\t// Convert PT fields to markdown unless raw is requested\n\t\tif (!options?.raw && item.data) {\n\t\t\tconst fields = await this.getFieldSchemas(collection);\n\t\t\titem.data = convertDataForRead(item.data, fields, false);\n\t\t}\n\n\t\treturn item;\n\t}\n\n\t/** Create a new content item */\n\tasync create(\n\t\tcollection: string,\n\t\tinput: {\n\t\t\tdata: Record<string, unknown>;\n\t\t\tslug?: string;\n\t\t\tstatus?: string;\n\t\t\tlocale?: string;\n\t\t\ttranslationOf?: string;\n\t\t},\n\t): Promise<ContentItem> {\n\t\t// Convert markdown strings to PT for portableText fields\n\t\tconst fields = await this.getFieldSchemas(collection);\n\t\tconst data = convertDataForWrite(input.data, fields);\n\n\t\tconst result = await this.request<{ item: ContentItem }>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}`,\n\t\t\t{ ...input, data },\n\t\t);\n\t\treturn result.item;\n\t}\n\n\t/**\n\t * Update a content item. Pass `_rev` from a prior get() for optimistic\n\t * concurrency — the server returns 409 if the item has changed.\n\t * Omit `_rev` for a blind write (no conflict detection).\n\t */\n\tasync update(\n\t\tcollection: string,\n\t\tid: string,\n\t\tinput: {\n\t\t\tdata?: Record<string, unknown>;\n\t\t\tslug?: string;\n\t\t\tstatus?: string;\n\t\t\t_rev?: string;\n\t\t\tlocale?: string;\n\t\t},\n\t): Promise<ContentItem> {\n\t\t// Convert markdown strings to PT\n\t\tlet data = input.data;\n\t\tif (data) {\n\t\t\tconst fields = await this.getFieldSchemas(collection);\n\t\t\tdata = convertDataForWrite(data, fields);\n\t\t}\n\n\t\tconst body = {\n\t\t\tdata,\n\t\t\tslug: input.slug,\n\t\t\tstatus: input.status,\n\t\t\t...(input._rev ? { _rev: input._rev } : {}),\n\t\t};\n\t\tconst params = new URLSearchParams();\n\t\tif (input.locale) params.set(\"locale\", input.locale);\n\t\tconst result = await this.request<{ item: ContentItem; _rev?: string }>(\n\t\t\t\"PUT\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}${params.toString() ? `?${params}` : \"\"}`,\n\t\t\tbody,\n\t\t);\n\n\t\tconst item = result.item;\n\t\tif (result._rev) {\n\t\t\titem._rev = result._rev;\n\t\t}\n\t\treturn item;\n\t}\n\n\t/** Delete (soft) a content item */\n\tasync delete(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"DELETE\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}`,\n\t\t);\n\t}\n\n\t/** Publish a content item */\n\tasync publish(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/publish`,\n\t\t);\n\t}\n\n\t/** Unpublish a content item */\n\tasync unpublish(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/unpublish`,\n\t\t);\n\t}\n\n\t/** Schedule publishing */\n\tasync schedule(collection: string, id: string, options: { at: string }): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/schedule`,\n\t\t\t{ scheduledAt: options.at },\n\t\t);\n\t}\n\n\t/** Restore a trashed content item */\n\tasync restore(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/restore`,\n\t\t);\n\t}\n\n\t/** Compare live and draft revisions */\n\tasync compare(\n\t\tcollection: string,\n\t\tid: string,\n\t): Promise<{\n\t\thasChanges: boolean;\n\t\tlive: Record<string, unknown> | null;\n\t\tdraft: Record<string, unknown> | null;\n\t}> {\n\t\treturn this.request<{\n\t\t\thasChanges: boolean;\n\t\t\tlive: Record<string, unknown> | null;\n\t\t\tdraft: Record<string, unknown> | null;\n\t\t}>(\"GET\", `/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/compare`);\n\t}\n\n\t/** Discard draft revision, reverting to the published version */\n\tasync discardDraft(collection: string, id: string): Promise<void> {\n\t\tawait this.request<unknown>(\n\t\t\t\"POST\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/discard-draft`,\n\t\t);\n\t}\n\n\t/**\n\t * Get all translations of a content item.\n\t * Returns the translation group ID and a summary of each locale version.\n\t */\n\tasync translations(\n\t\tcollection: string,\n\t\tid: string,\n\t): Promise<{\n\t\ttranslationGroup: string;\n\t\ttranslations: Array<{\n\t\t\tid: string;\n\t\t\tlocale: string | null;\n\t\t\tslug: string | null;\n\t\t\tstatus: string;\n\t\t\tupdatedAt: string;\n\t\t}>;\n\t}> {\n\t\treturn this.request(\n\t\t\t\"GET\",\n\t\t\t`/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/translations`,\n\t\t);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Media\n\t// -----------------------------------------------------------------------\n\n\t/** List media items */\n\tasync mediaList(options?: {\n\t\tmimeType?: string;\n\t\tlimit?: number;\n\t\tcursor?: string;\n\t\tpage?: number;\n\t\tincludeUsage?: boolean;\n\t\tfolderId?: string | null;\n\t}): Promise<ListResult<MediaItem> & { totalCount?: number }> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.mimeType) params.set(\"mimeType\", options.mimeType);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\t\tif (options?.page !== undefined) params.set(\"page\", String(options.page));\n\t\tif (options?.includeUsage === true) params.set(\"includeUsage\", \"1\");\n\t\tif (options?.folderId === null) {\n\t\t\tparams.set(\"folderId\", \"unfiled\");\n\t\t} else if (options?.folderId !== undefined) {\n\t\t\tparams.set(\"folderId\", options.folderId);\n\t\t}\n\n\t\tconst qs = params.toString();\n\t\treturn this.request<ListResult<MediaItem> & { totalCount?: number }>(\n\t\t\t\"GET\",\n\t\t\t`/media${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Get a single media item */\n\tasync mediaGet(id: string, options?: { includeUsage?: boolean }): Promise<MediaItem> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.includeUsage === true) params.set(\"includeUsage\", \"1\");\n\n\t\tconst qs = params.toString();\n\t\tconst data = await this.request<{ item: MediaItem }>(\n\t\t\t\"GET\",\n\t\t\t`/media/${encodeURIComponent(id)}${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t\treturn data.item;\n\t}\n\n\t/** List media folders */\n\tasync mediaFolderList(\n\t\toptions: { limit?: number; cursor?: string; q?: string } = {},\n\t): Promise<ListResult<MediaFolder>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options.cursor !== undefined) params.set(\"cursor\", options.cursor);\n\t\tif (options.q !== undefined) params.set(\"q\", options.q);\n\t\tconst qs = params.toString();\n\t\treturn this.request<ListResult<MediaFolder>>(\"GET\", `/media/folders${qs ? `?${qs}` : \"\"}`);\n\t}\n\n\t/** Get one media folder */\n\tasync mediaFolderGet(id: string): Promise<MediaFolder> {\n\t\tconst data = await this.request<{ item: MediaFolder }>(\n\t\t\t\"GET\",\n\t\t\t`/media/folders/${encodeURIComponent(id)}`,\n\t\t);\n\t\treturn data.item;\n\t}\n\n\t/** Create a media folder */\n\tasync mediaFolderCreate(name: string): Promise<MediaFolder> {\n\t\tconst data = await this.request<{ item: MediaFolder }>(\"POST\", \"/media/folders\", { name });\n\t\treturn data.item;\n\t}\n\n\t/** Rename a media folder */\n\tasync mediaFolderUpdate(id: string, name: string): Promise<MediaFolder> {\n\t\tconst data = await this.request<{ item: MediaFolder }>(\n\t\t\t\"PUT\",\n\t\t\t`/media/folders/${encodeURIComponent(id)}`,\n\t\t\t{ name },\n\t\t);\n\t\treturn data.item;\n\t}\n\n\t/** Delete a media folder */\n\tasync mediaFolderDelete(id: string): Promise<void> {\n\t\tawait this.request<unknown>(\"DELETE\", `/media/folders/${encodeURIComponent(id)}`);\n\t}\n\n\t/** Assign media to a folder, or return it to the Main library */\n\tasync mediaSetFolder(id: string, folderId: string | null): Promise<MediaFolderAssignment> {\n\t\tconst data = await this.request<{ item: MediaFolderAssignment }>(\n\t\t\t\"PUT\",\n\t\t\t`/media/${encodeURIComponent(id)}`,\n\t\t\t{ folderId },\n\t\t);\n\t\treturn { id: data.item.id, folderId: data.item.folderId };\n\t}\n\n\t/** Get entry-grouped usage details for a media item */\n\tasync mediaGetUsage(\n\t\tid: string,\n\t\toptions?: { limit?: number; cursor?: string },\n\t): Promise<MediaUsageDetailsResponse> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor !== undefined) params.set(\"cursor\", options.cursor);\n\n\t\tconst qs = params.toString();\n\t\treturn this.request<MediaUsageDetailsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/media/${encodeURIComponent(id)}/usage${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t}\n\n\t/** Upload a media file */\n\tasync mediaUpload(\n\t\tfile: Uint8Array | Blob,\n\t\tfilename: string,\n\t\toptions?: { alt?: string; caption?: string; contentType?: string },\n\t): Promise<MediaItem> {\n\t\tconst formData = new FormData();\n\n\t\t// Handle different file types\n\t\tif (file instanceof Blob) {\n\t\t\tformData.append(\"file\", file, filename);\n\t\t} else {\n\t\t\tconst mimeType = options?.contentType ?? mimeFromFilename(filename);\n\t\t\tformData.append(\"file\", new Blob([file as BlobPart], { type: mimeType }), filename);\n\t\t}\n\n\t\tif (options?.alt) formData.append(\"alt\", options.alt);\n\t\tif (options?.caption) formData.append(\"caption\", options.caption);\n\n\t\tconst url = `${this.baseUrl}/_emdash/api/media`;\n\t\tconst request = new Request(url, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tconst response = await this.transport.fetch(request);\n\t\tawait this.assertOk(response);\n\n\t\tconst raw = (await response.json()) as { data: { item: MediaItem } };\n\t\treturn raw.data.item;\n\t}\n\n\t/** Delete a media item */\n\tasync mediaDelete(id: string): Promise<void> {\n\t\tawait this.request<unknown>(\"DELETE\", `/media/${encodeURIComponent(id)}`);\n\t}\n\n\t/** Repair content media usage indexes for one collection or all collections */\n\tasync mediaRepairUsage(input: MediaUsageRepairInput): Promise<MediaUsageRepairResponse> {\n\t\treturn this.request<MediaUsageRepairResponse>(\"POST\", \"/admin/media-usage/repair\", input);\n\t}\n\n\t/** Read aggregate Media Usage indexing progress */\n\tasync mediaGetUsageProgress(): Promise<MediaUsageProgress> {\n\t\treturn this.request<MediaUsageProgress>(\"GET\", \"/admin/media-usage/progress\");\n\t}\n\n\t/** Advance exactly one Media Usage maintenance step */\n\tasync mediaAdvanceUsageProgress(): Promise<MediaUsageProgressAdvanceResponse> {\n\t\treturn this.request<MediaUsageProgressAdvanceResponse>(\"POST\", \"/admin/media-usage/progress\");\n\t}\n\n\t/** Read the redacted controlled-activation status */\n\tasync mediaGetUsageActivation(): Promise<MediaUsageActivationStatus> {\n\t\treturn this.request<MediaUsageActivationStatus>(\"GET\", \"/admin/media-usage/activation\");\n\t}\n\n\t/** Advance exactly one controlled-activation batch */\n\tasync mediaAdvanceUsageActivation(\n\t\tinput: MediaUsageActivationAdvanceInput,\n\t): Promise<MediaUsageActivationAdvanceResponse> {\n\t\treturn this.request<MediaUsageActivationAdvanceResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/admin/media-usage/activation\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\t/** List a bounded page of durable media usage entry work */\n\tasync mediaListUsageWork(\n\t\toptions: MediaUsageWorkListOptions,\n\t): Promise<MediaUsageWorkListResponse> {\n\t\tconst params = new URLSearchParams({ collection: options.collection });\n\t\tif (options.state) params.set(\"state\", options.state);\n\t\tif (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options.cursor) params.set(\"cursor\", options.cursor);\n\t\treturn this.request<MediaUsageWorkListResponse>(\"GET\", `/admin/media-usage/work?${params}`);\n\t}\n\n\t/** Explicitly retry one durable media usage entry job */\n\tasync mediaRetryUsageWork(input: MediaUsageWorkRetryInput): Promise<MediaUsageWorkRetryResponse> {\n\t\treturn this.request<MediaUsageWorkRetryResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/admin/media-usage/work/retry\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\tasync mediaListCollectionDeletions(\n\t\toptions: {\n\t\t\tstate?: MediaUsageCollectionDeletionState;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t} = {},\n\t): Promise<MediaUsageCollectionDeletionListResponse> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options.state) params.set(\"state\", options.state);\n\t\tif (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n\t\tif (options.cursor) params.set(\"cursor\", options.cursor);\n\t\treturn this.request(\"GET\", `/admin/media-usage/collection-deletions?${params}`);\n\t}\n\n\tasync mediaRetryCollectionDeletion(collectionId: string): Promise<{\n\t\tchanged: boolean;\n\t\titem: MediaUsageCollectionDeletionItem;\n\t}> {\n\t\treturn this.request(\"POST\", \"/admin/media-usage/collection-deletions/retry\", {\n\t\t\tcollectionId,\n\t\t});\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Search\n\t// -----------------------------------------------------------------------\n\n\t/** Full-text search */\n\tasync search(\n\t\tquery: string,\n\t\toptions?: { collection?: string; locale?: string; limit?: number },\n\t): Promise<SearchResult[]> {\n\t\tconst params = new URLSearchParams({ q: query });\n\t\tif (options?.collection) params.set(\"collections\", options.collection);\n\t\tif (options?.locale) params.set(\"locale\", options.locale);\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\n\t\tconst data = await this.request<{ items: SearchResult[] }>(\"GET\", `/search?${params}`);\n\t\treturn data.items;\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Taxonomies\n\t// -----------------------------------------------------------------------\n\n\t/** List taxonomies */\n\tasync taxonomies(): Promise<Taxonomy[]> {\n\t\tconst data = await this.request<{ taxonomies: Taxonomy[] }>(\"GET\", \"/taxonomies\");\n\t\treturn data.taxonomies;\n\t}\n\n\t/** List terms in a taxonomy */\n\tasync terms(\n\t\ttaxonomy: string,\n\t\toptions?: { limit?: number; cursor?: string },\n\t): Promise<ListResult<Term>> {\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.limit) params.set(\"limit\", String(options.limit));\n\t\tif (options?.cursor) params.set(\"cursor\", options.cursor);\n\n\t\tconst qs = params.toString();\n\t\tconst data = await this.request<{ terms: Term[] }>(\n\t\t\t\"GET\",\n\t\t\t`/taxonomies/${encodeURIComponent(taxonomy)}/terms${qs ? `?${qs}` : \"\"}`,\n\t\t);\n\t\treturn { items: data.terms };\n\t}\n\n\t/** Create a taxonomy term */\n\tasync createTerm(\n\t\ttaxonomy: string,\n\t\tinput: { slug: string; label: string; parentId?: string; description?: string },\n\t): Promise<Term> {\n\t\treturn this.request<Term>(\"POST\", `/taxonomies/${encodeURIComponent(taxonomy)}/terms`, input);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Menus\n\t// -----------------------------------------------------------------------\n\n\t/** List menus */\n\tasync menus(): Promise<Menu[]> {\n\t\t// Handler returns a bare array, not { items: [...] }\n\t\treturn this.request<Menu[]>(\"GET\", \"/menus\");\n\t}\n\n\t/** Get a menu with its items */\n\tasync menu(name: string): Promise<MenuWithItems> {\n\t\treturn this.request<MenuWithItems>(\"GET\", `/menus/${encodeURIComponent(name)}`);\n\t}\n\n\t// -----------------------------------------------------------------------\n\t// Internal helpers\n\t// -----------------------------------------------------------------------\n\n\t/** Make a typed JSON request to the API */\n\tprivate async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n\t\tconst response = await this.requestRaw(method, path, body);\n\t\tawait this.assertOk(response);\n\t\tconst json = (await response.json()) as { data: T };\n\t\treturn json.data;\n\t}\n\n\t/** Make a raw request — caller handles response */\n\tprivate async requestRaw(method: string, path: string, body?: unknown): Promise<Response> {\n\t\tconst url = `${this.baseUrl}/_emdash/api${path}`;\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: \"application/json\",\n\t\t};\n\n\t\tlet requestBody: string | undefined;\n\t\tif (body !== undefined) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t\trequestBody = JSON.stringify(body);\n\t\t}\n\n\t\tconst request = new Request(url, {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: requestBody,\n\t\t});\n\n\t\treturn this.transport.fetch(request);\n\t}\n\n\t/** Assert a response is OK, throw typed error if not */\n\tprivate async assertOk(response: Response): Promise<void> {\n\t\tif (response.ok) return;\n\n\t\tlet code = \"UNKNOWN_ERROR\";\n\t\tlet message = `HTTP ${response.status}`;\n\t\tlet details: Record<string, unknown> | undefined;\n\n\t\ttry {\n\t\t\tconst json = (await response.json()) as {\n\t\t\t\terror?: { code?: string; message?: string; details?: Record<string, unknown> };\n\t\t\t};\n\t\t\tif (json.error) {\n\t\t\t\tcode = json.error.code ?? code;\n\t\t\t\tmessage = json.error.message ?? message;\n\t\t\t\tdetails = json.error.details;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response body isn't JSON — use status text\n\t\t\tmessage = response.statusText || message;\n\t\t}\n\n\t\tthrow new EmDashApiError(response.status, code, message, details);\n\t}\n\n\t/** Get cached field schemas for a collection, fetching if needed */\n\tprivate async getFieldSchemas(collection: string): Promise<FieldSchema[]> {\n\t\tlet cached = this.fieldSchemaCache.get(collection);\n\t\tif (cached) return cached;\n\n\t\ttry {\n\t\t\tconst col = await this.collection(collection);\n\t\t\tcached = col.fields.map((f) => ({ slug: f.slug, type: f.type }));\n\t\t\tthis.fieldSchemaCache.set(collection, cached);\n\t\t\treturn cached;\n\t\t} catch {\n\t\t\t// If we can't fetch the schema, skip conversion\n\t\t\treturn [];\n\t\t}\n\t}\n}\n\ntype _AssertTrue<T extends true> = T;\ntype _MediaRepairUsageRequiresExplicitInput = _AssertTrue<\n\tParameters<EmDashClient[\"mediaRepairUsage\"]> extends [MediaUsageRepairInput] ? true : false\n>;\n\n// Re-export transport types for interceptor authors\nexport type { Interceptor } from \"./transport.js\";\nexport {\n\tcreateTransport,\n\tcsrfInterceptor,\n\ttokenInterceptor,\n\tdevBypassInterceptor,\n} from \"./transport.js\";\nexport { portableTextToMarkdown, markdownToPortableText } from \"./portable-text.js\";\nexport type { PortableTextBlock } from \"./portable-text.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAM,yBAAyB;AAM/B,SAAS,iBAAiB,UAA0B;AACnD,QAAO,KAAK,QAAQ,SAAS,IAAI;;AAgZlC,IAAa,iBAAb,cAAoC,MAAM;CACzC,YACC,AAAgB,QAChB,AAAgB,MAChB,SACA,AAAgB,SACf;AACD,QAAM,QAAQ;EALE;EACA;EAEA;AAGhB,OAAK,OAAO;;;AAId,IAAa,oBAAb,cAAuC,MAAM;CAC5C,YAAY,SAAiB;AAC5B,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAQd,IAAa,eAAb,MAA0B;CACzB,AAAiB;CACjB,AAAiB;;CAGjB,AAAQ,mCAAmB,IAAI,KAA4B;CAE3D,YAAY,SAA8B;AACzC,OAAK,UAAU,QAAQ,QAAQ,QAAQ,wBAAwB,GAAG;EAGlE,MAAM,eAA8B,CAAC,iBAAiB,CAAC;AAEvD,MAAI,QAAQ,MACX,cAAa,KAAK,iBAAiB,QAAQ,MAAM,CAAC;WACxC,QAAQ,UAClB,cAAa,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAItD,MAAI,QAAQ,aACX,cAAa,KACZ,mBAAmB;GAClB,cAAc,QAAQ;GACtB,eAAe,GAAG,KAAK,QAAQ;GAC/B,kBAAkB,QAAQ,kBACtB,aAAa,eAAe,cAAc;IAC3C,MAAM,YAAY,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,SAAS,GAAG,KAAK,KAAK,IAAI,IAAK;AACjF,YAAQ,eAAgB,aAAa,UAAU;OAE/C;GACH,CAAC,CACF;AAGF,MAAI,QAAQ,aACX,cAAa,KAAK,GAAG,QAAQ,aAAa;AAG3C,OAAK,YAAY,gBAAgB,EAAE,cAAc,CAAC;;;CAQnD,MAAM,cAAqC;AAE1C,UADa,MAAM,KAAK,QAAiC,OAAO,sBAAsB,EAC1E;;;CAIb,MAAM,WAAW,MAA6C;EAK7D,MAAM,OAJO,MAAM,KAAK,QACvB,OACA,uBAAuB,mBAAmB,KAAK,CAAC,qBAChD,EACgB;AAEjB,MAAI,IAAI,OACP,MAAK,iBAAiB,IACrB,MACA,IAAI,OAAO,KAAK,OAAO;GAAE,MAAM,EAAE;GAAM,MAAM,EAAE;GAAM,EAAE,CACvD;AAEF,SAAO;;;CAIR,MAAM,iBAAiB,OAOC;AAEvB,UADa,MAAM,KAAK,QAA8B,QAAQ,uBAAuB,MAAM,EAC/E;;;CAIb,MAAM,iBAAiB,MAA6B;AACnD,QAAM,KAAK,QAAiB,UAAU,uBAAuB,mBAAmB,KAAK,GAAG;;;CAIzF,MAAM,YACL,YACA,OAYiB;EACjB,MAAM,OAAO,MAAM,KAAK,QACvB,QACA,uBAAuB,mBAAmB,WAAW,CAAC,UACtD,MACA;AAED,OAAK,iBAAiB,OAAO,WAAW;AACxC,SAAO,KAAK;;;CAIb,MAAM,YAAY,YAAoB,WAAkC;AACvE,QAAM,KAAK,QACV,UACA,uBAAuB,mBAAmB,WAAW,CAAC,UAAU,mBAAmB,UAAU,GAC7F;AACD,OAAK,iBAAiB,OAAO,WAAW;;;CAIzC,MAAM,WAA8B;AACnC,SAAO,KAAK,QAAkB,OAAO,YAAY;;;CAIlD,MAAM,eAAsC;AAC3C,SAAO,KAAK,QAAsB,OAAO,UAAU;;;CAIpD,MAAM,cAA+B;EACpC,MAAM,WAAW,MAAM,KAAK,WAAW,OAAO,4BAA4B;AAC1E,QAAM,KAAK,SAAS,SAAS;AAC7B,SAAO,SAAS,MAAM;;;CAQvB,MAAM,KACL,YACA,SAUmC;EACnC,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACzD,MAAI,SAAS,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC9D,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACzD,MAAI,SAAS,QAAS,QAAO,IAAI,WAAW,QAAQ,QAAQ;AAC5D,MAAI,SAAS,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM;AACtD,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACzD,MAAI,SAAS,gBAAgB,OAAO,KAAK,QAAQ,aAAa,CAAC,SAAS,EACvE,QAAO,IAAI,gBAAgB,KAAK,UAAU,QAAQ,aAAa,CAAC;EAGjE,MAAM,KAAK,OAAO,UAAU;EAC5B,MAAM,OAAO,YAAY,mBAAmB,WAAW,GAAG,KAAK,IAAI,OAAO;AAC1E,SAAO,KAAK,QAAiC,OAAO,KAAK;;;CAI1D,OAAO,QACN,YACA,SAS8B;EAC9B,IAAI;AACJ,KAAG;GACF,MAAM,SAAS,MAAM,KAAK,KAAK,YAAY;IAAE,GAAG;IAAS;IAAQ,CAAC;AAClE,QAAK,MAAM,QAAQ,OAAO,MACzB,OAAM;AAEP,YAAS,OAAO;WACR;;;;;;CAOV,MAAM,IACL,YACA,IACA,SACuB;EACvB,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;EACzD,MAAM,KAAK,OAAO,OAAO,IAAI,IAAI,WAAW;EAC5C,MAAM,SAAS,MAAM,KAAK,WACzB,OACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,GAAG,KACvE;AACD,MAAI,CAAC,OAAO,GACX,OAAM,KAAK,SAAS,OAAO;EAI5B,MAAM,QADO,MAAM,OAAO,MAAM,EACf;EACjB,MAAM,OAAO,KAAK;AAGlB,MAAI,KAAK,KACR,MAAK,OAAO,KAAK;AAIlB,MAAI,CAAC,SAAS,OAAO,KAAK,MAAM;GAC/B,MAAM,SAAS,MAAM,KAAK,gBAAgB,WAAW;AACrD,QAAK,OAAO,mBAAmB,KAAK,MAAM,QAAQ,MAAM;;AAGzD,SAAO;;;CAIR,MAAM,OACL,YACA,OAOuB;EAEvB,MAAM,SAAS,MAAM,KAAK,gBAAgB,WAAW;EACrD,MAAM,OAAO,oBAAoB,MAAM,MAAM,OAAO;AAOpD,UALe,MAAM,KAAK,QACzB,QACA,YAAY,mBAAmB,WAAW,IAC1C;GAAE,GAAG;GAAO;GAAM,CAClB,EACa;;;;;;;CAQf,MAAM,OACL,YACA,IACA,OAOuB;EAEvB,IAAI,OAAO,MAAM;AACjB,MAAI,MAAM;GACT,MAAM,SAAS,MAAM,KAAK,gBAAgB,WAAW;AACrD,UAAO,oBAAoB,MAAM,OAAO;;EAGzC,MAAM,OAAO;GACZ;GACA,MAAM,MAAM;GACZ,QAAQ,MAAM;GACd,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,MAAM,GAAG,EAAE;GAC1C;EACD,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,MAAM,OAAQ,QAAO,IAAI,UAAU,MAAM,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,QACzB,OACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,GAAG,OAAO,UAAU,GAAG,IAAI,WAAW,MAC1G,KACA;EAED,MAAM,OAAO,OAAO;AACpB,MAAI,OAAO,KACV,MAAK,OAAO,OAAO;AAEpB,SAAO;;;CAIR,MAAM,OAAO,YAAoB,IAA2B;AAC3D,QAAM,KAAK,QACV,UACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,GACpE;;;CAIF,MAAM,QAAQ,YAAoB,IAA2B;AAC5D,QAAM,KAAK,QACV,QACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,UACrE;;;CAIF,MAAM,UAAU,YAAoB,IAA2B;AAC9D,QAAM,KAAK,QACV,QACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,YACrE;;;CAIF,MAAM,SAAS,YAAoB,IAAY,SAAwC;AACtF,QAAM,KAAK,QACV,QACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,YACrE,EAAE,aAAa,QAAQ,IAAI,CAC3B;;;CAIF,MAAM,QAAQ,YAAoB,IAA2B;AAC5D,QAAM,KAAK,QACV,QACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,UACrE;;;CAIF,MAAM,QACL,YACA,IAKE;AACF,SAAO,KAAK,QAIT,OAAO,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,UAAU;;;CAI1F,MAAM,aAAa,YAAoB,IAA2B;AACjE,QAAM,KAAK,QACV,QACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,gBACrE;;;;;;CAOF,MAAM,aACL,YACA,IAUE;AACF,SAAO,KAAK,QACX,OACA,YAAY,mBAAmB,WAAW,CAAC,GAAG,mBAAmB,GAAG,CAAC,eACrE;;;CAQF,MAAM,UAAU,SAO6C;EAC5D,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,SAAU,QAAO,IAAI,YAAY,QAAQ,SAAS;AAC/D,MAAI,SAAS,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC9D,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACzD,MAAI,SAAS,SAAS,OAAW,QAAO,IAAI,QAAQ,OAAO,QAAQ,KAAK,CAAC;AACzE,MAAI,SAAS,iBAAiB,KAAM,QAAO,IAAI,gBAAgB,IAAI;AACnE,MAAI,SAAS,aAAa,KACzB,QAAO,IAAI,YAAY,UAAU;WACvB,SAAS,aAAa,OAChC,QAAO,IAAI,YAAY,QAAQ,SAAS;EAGzC,MAAM,KAAK,OAAO,UAAU;AAC5B,SAAO,KAAK,QACX,OACA,SAAS,KAAK,IAAI,OAAO,KACzB;;;CAIF,MAAM,SAAS,IAAY,SAA0D;EACpF,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,iBAAiB,KAAM,QAAO,IAAI,gBAAgB,IAAI;EAEnE,MAAM,KAAK,OAAO,UAAU;AAK5B,UAJa,MAAM,KAAK,QACvB,OACA,UAAU,mBAAmB,GAAG,GAAG,KAAK,IAAI,OAAO,KACnD,EACW;;;CAIb,MAAM,gBACL,UAA2D,EAAE,EAC1B;EACnC,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC3E,MAAI,QAAQ,WAAW,OAAW,QAAO,IAAI,UAAU,QAAQ,OAAO;AACtE,MAAI,QAAQ,MAAM,OAAW,QAAO,IAAI,KAAK,QAAQ,EAAE;EACvD,MAAM,KAAK,OAAO,UAAU;AAC5B,SAAO,KAAK,QAAiC,OAAO,iBAAiB,KAAK,IAAI,OAAO,KAAK;;;CAI3F,MAAM,eAAe,IAAkC;AAKtD,UAJa,MAAM,KAAK,QACvB,OACA,kBAAkB,mBAAmB,GAAG,GACxC,EACW;;;CAIb,MAAM,kBAAkB,MAAoC;AAE3D,UADa,MAAM,KAAK,QAA+B,QAAQ,kBAAkB,EAAE,MAAM,CAAC,EAC9E;;;CAIb,MAAM,kBAAkB,IAAY,MAAoC;AAMvE,UALa,MAAM,KAAK,QACvB,OACA,kBAAkB,mBAAmB,GAAG,IACxC,EAAE,MAAM,CACR,EACW;;;CAIb,MAAM,kBAAkB,IAA2B;AAClD,QAAM,KAAK,QAAiB,UAAU,kBAAkB,mBAAmB,GAAG,GAAG;;;CAIlF,MAAM,eAAe,IAAY,UAAyD;EACzF,MAAM,OAAO,MAAM,KAAK,QACvB,OACA,UAAU,mBAAmB,GAAG,IAChC,EAAE,UAAU,CACZ;AACD,SAAO;GAAE,IAAI,KAAK,KAAK;GAAI,UAAU,KAAK,KAAK;GAAU;;;CAI1D,MAAM,cACL,IACA,SACqC;EACrC,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC5E,MAAI,SAAS,WAAW,OAAW,QAAO,IAAI,UAAU,QAAQ,OAAO;EAEvE,MAAM,KAAK,OAAO,UAAU;AAC5B,SAAO,KAAK,QACX,OACA,UAAU,mBAAmB,GAAG,CAAC,QAAQ,KAAK,IAAI,OAAO,KACzD;;;CAIF,MAAM,YACL,MACA,UACA,SACqB;EACrB,MAAM,WAAW,IAAI,UAAU;AAG/B,MAAI,gBAAgB,KACnB,UAAS,OAAO,QAAQ,MAAM,SAAS;OACjC;GACN,MAAM,WAAW,SAAS,eAAe,iBAAiB,SAAS;AACnE,YAAS,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAiB,EAAE,EAAE,MAAM,UAAU,CAAC,EAAE,SAAS;;AAGpF,MAAI,SAAS,IAAK,UAAS,OAAO,OAAO,QAAQ,IAAI;AACrD,MAAI,SAAS,QAAS,UAAS,OAAO,WAAW,QAAQ,QAAQ;EAEjE,MAAM,MAAM,GAAG,KAAK,QAAQ;EAC5B,MAAM,UAAU,IAAI,QAAQ,KAAK;GAChC,QAAQ;GACR,MAAM;GACN,CAAC;EAEF,MAAM,WAAW,MAAM,KAAK,UAAU,MAAM,QAAQ;AACpD,QAAM,KAAK,SAAS,SAAS;AAG7B,UADa,MAAM,SAAS,MAAM,EACvB,KAAK;;;CAIjB,MAAM,YAAY,IAA2B;AAC5C,QAAM,KAAK,QAAiB,UAAU,UAAU,mBAAmB,GAAG,GAAG;;;CAI1E,MAAM,iBAAiB,OAAiE;AACvF,SAAO,KAAK,QAAkC,QAAQ,6BAA6B,MAAM;;;CAI1F,MAAM,wBAAqD;AAC1D,SAAO,KAAK,QAA4B,OAAO,8BAA8B;;;CAI9E,MAAM,4BAAwE;AAC7E,SAAO,KAAK,QAA2C,QAAQ,8BAA8B;;;CAI9F,MAAM,0BAA+D;AACpE,SAAO,KAAK,QAAoC,OAAO,gCAAgC;;;CAIxF,MAAM,4BACL,OAC+C;AAC/C,SAAO,KAAK,QACX,QACA,iCACA,MACA;;;CAIF,MAAM,mBACL,SACsC;EACtC,MAAM,SAAS,IAAI,gBAAgB,EAAE,YAAY,QAAQ,YAAY,CAAC;AACtE,MAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM;AACrD,MAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC3E,MAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACxD,SAAO,KAAK,QAAoC,OAAO,2BAA2B,SAAS;;;CAI5F,MAAM,oBAAoB,OAAuE;AAChG,SAAO,KAAK,QACX,QACA,iCACA,MACA;;CAGF,MAAM,6BACL,UAII,EAAE,EAC8C;EACpD,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM;AACrD,MAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC3E,MAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACxD,SAAO,KAAK,QAAQ,OAAO,2CAA2C,SAAS;;CAGhF,MAAM,6BAA6B,cAGhC;AACF,SAAO,KAAK,QAAQ,QAAQ,iDAAiD,EAC5E,cACA,CAAC;;;CAQH,MAAM,OACL,OACA,SAC0B;EAC1B,MAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,OAAO,CAAC;AAChD,MAAI,SAAS,WAAY,QAAO,IAAI,eAAe,QAAQ,WAAW;AACtE,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACzD,MAAI,SAAS,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAG9D,UADa,MAAM,KAAK,QAAmC,OAAO,WAAW,SAAS,EAC1E;;;CAQb,MAAM,aAAkC;AAEvC,UADa,MAAM,KAAK,QAAoC,OAAO,cAAc,EACrE;;;CAIb,MAAM,MACL,UACA,SAC4B;EAC5B,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC9D,MAAI,SAAS,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;EAEzD,MAAM,KAAK,OAAO,UAAU;AAK5B,SAAO,EAAE,QAJI,MAAM,KAAK,QACvB,OACA,eAAe,mBAAmB,SAAS,CAAC,QAAQ,KAAK,IAAI,OAAO,KACpE,EACoB,OAAO;;;CAI7B,MAAM,WACL,UACA,OACgB;AAChB,SAAO,KAAK,QAAc,QAAQ,eAAe,mBAAmB,SAAS,CAAC,SAAS,MAAM;;;CAQ9F,MAAM,QAAyB;AAE9B,SAAO,KAAK,QAAgB,OAAO,SAAS;;;CAI7C,MAAM,KAAK,MAAsC;AAChD,SAAO,KAAK,QAAuB,OAAO,UAAU,mBAAmB,KAAK,GAAG;;;CAQhF,MAAc,QAAW,QAAgB,MAAc,MAA4B;EAClF,MAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,MAAM,KAAK;AAC1D,QAAM,KAAK,SAAS,SAAS;AAE7B,UADc,MAAM,SAAS,MAAM,EACvB;;;CAIb,MAAc,WAAW,QAAgB,MAAc,MAAmC;EACzF,MAAM,MAAM,GAAG,KAAK,QAAQ,cAAc;EAC1C,MAAM,UAAkC,EACvC,QAAQ,oBACR;EAED,IAAI;AACJ,MAAI,SAAS,QAAW;AACvB,WAAQ,kBAAkB;AAC1B,iBAAc,KAAK,UAAU,KAAK;;EAGnC,MAAM,UAAU,IAAI,QAAQ,KAAK;GAChC;GACA;GACA,MAAM;GACN,CAAC;AAEF,SAAO,KAAK,UAAU,MAAM,QAAQ;;;CAIrC,MAAc,SAAS,UAAmC;AACzD,MAAI,SAAS,GAAI;EAEjB,IAAI,OAAO;EACX,IAAI,UAAU,QAAQ,SAAS;EAC/B,IAAI;AAEJ,MAAI;GACH,MAAM,OAAQ,MAAM,SAAS,MAAM;AAGnC,OAAI,KAAK,OAAO;AACf,WAAO,KAAK,MAAM,QAAQ;AAC1B,cAAU,KAAK,MAAM,WAAW;AAChC,cAAU,KAAK,MAAM;;UAEf;AAEP,aAAU,SAAS,cAAc;;AAGlC,QAAM,IAAI,eAAe,SAAS,QAAQ,MAAM,SAAS,QAAQ;;;CAIlE,MAAc,gBAAgB,YAA4C;EACzE,IAAI,SAAS,KAAK,iBAAiB,IAAI,WAAW;AAClD,MAAI,OAAQ,QAAO;AAEnB,MAAI;AAEH,aADY,MAAM,KAAK,WAAW,WAAW,EAChC,OAAO,KAAK,OAAO;IAAE,MAAM,EAAE;IAAM,MAAM,EAAE;IAAM,EAAE;AAChE,QAAK,iBAAiB,IAAI,YAAY,OAAO;AAC7C,UAAO;UACA;AAEP,UAAO,EAAE"}