emdash 0.38.0 → 0.39.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 (1394) hide show
  1. package/dist/action-token-On1sot_c.mjs +26 -0
  2. package/dist/action-token-On1sot_c.mjs.map +1 -0
  3. package/dist/activation-CaMfdBt1.mjs +382 -0
  4. package/dist/activation-CaMfdBt1.mjs.map +1 -0
  5. package/dist/adapters-Cq10K4_c.d.mts +171 -0
  6. package/dist/adapters-Cq10K4_c.d.mts.map +1 -0
  7. package/dist/after-PcEvMY_6.mjs +96 -0
  8. package/dist/after-PcEvMY_6.mjs.map +1 -0
  9. package/dist/allowed-origins-1Sa-2wZK.mjs +116 -0
  10. package/dist/allowed-origins-1Sa-2wZK.mjs.map +1 -0
  11. package/dist/api/route-utils.d.mts +4 -3
  12. package/dist/api/route-utils.d.mts.map +1 -1
  13. package/dist/api/route-utils.mjs +45 -30
  14. package/dist/api/route-utils.mjs.map +1 -1
  15. package/dist/api/schemas/index.d.mts +2 -2
  16. package/dist/api/schemas/index.mjs +7 -6
  17. package/dist/api-DmjKxPCY.mjs +4831 -0
  18. package/dist/api-DmjKxPCY.mjs.map +1 -0
  19. package/dist/api-tokens-BIXItFKV.mjs +163 -0
  20. package/dist/api-tokens-BIXItFKV.mjs.map +1 -0
  21. package/dist/apply-drpfmqrR.mjs +1005 -0
  22. package/dist/apply-drpfmqrR.mjs.map +1 -0
  23. package/dist/artifact-fetch-COiMhVgk.mjs +813 -0
  24. package/dist/artifact-fetch-COiMhVgk.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -12
  26. package/dist/astro/index.d.mts.map +1 -1
  27. package/dist/astro/index.mjs +99 -15
  28. package/dist/astro/index.mjs.map +1 -1
  29. package/dist/astro/middleware/auth.d.mts +12 -10
  30. package/dist/astro/middleware/auth.d.mts.map +1 -1
  31. package/dist/astro/middleware/auth.mjs +20 -11
  32. package/dist/astro/middleware/auth.mjs.map +1 -1
  33. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  34. package/dist/astro/middleware/redirect.mjs +11 -11
  35. package/dist/astro/middleware/request-context.d.mts +1 -1
  36. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  37. package/dist/astro/middleware/request-context.mjs +154 -28
  38. package/dist/astro/middleware/request-context.mjs.map +1 -1
  39. package/dist/astro/middleware/setup.mjs +1 -1
  40. package/dist/astro/middleware.d.mts +13 -10
  41. package/dist/astro/middleware.d.mts.map +1 -1
  42. package/dist/astro/middleware.mjs +114 -3062
  43. package/dist/astro/middleware.mjs.map +1 -1
  44. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +10 -9
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +10 -9
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  48. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
  49. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +13 -12
  52. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/byline-fields/index.mjs +13 -12
  54. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +13 -12
  56. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  62. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
  64. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -54
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  67. package/dist/astro/routes/api/admin/comments/bulk.mjs +15 -14
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  70. package/dist/astro/routes/api/admin/comments/index.mjs +15 -14
  71. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  73. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  74. package/dist/astro/routes/api/admin/media-usage/activation.mjs +17 -16
  75. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -18
  77. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -18
  79. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/media-usage/progress.mjs +17 -17
  81. package/dist/astro/routes/api/admin/media-usage/repair.mjs +21 -20
  82. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -18
  84. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -18
  86. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
  88. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
  89. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +9 -69
  91. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +9 -72
  94. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -62
  96. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
  98. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +65 -62
  99. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -64
  101. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +87 -66
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/index.mjs +66 -62
  106. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +65 -62
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -66
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +65 -62
  114. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -64
  116. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +90 -69
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -8
  122. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  123. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -66
  125. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -64
  128. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -63
  131. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts +8 -0
  133. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts.map +1 -0
  134. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +27 -0
  135. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -0
  136. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +65 -62
  137. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
  139. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +65 -62
  140. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  142. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  143. package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -10
  144. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  146. package/dist/astro/routes/api/admin/users/index.mjs +10 -9
  147. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  148. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  149. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  150. package/dist/astro/routes/api/auth/invite/complete.mjs +15 -14
  151. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  152. package/dist/astro/routes/api/auth/invite/index.mjs +12 -11
  153. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/auth/invite/register-options.mjs +14 -13
  155. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  156. package/dist/astro/routes/api/auth/logout.mjs +4 -4
  157. package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -13
  158. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  159. package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
  160. package/dist/astro/routes/api/auth/me.mjs +11 -10
  161. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  162. package/dist/astro/routes/api/auth/mode.mjs +4 -4
  163. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  164. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  165. package/dist/astro/routes/api/auth/passkey/_id_.mjs +10 -9
  166. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  167. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  168. package/dist/astro/routes/api/auth/passkey/options.mjs +16 -15
  169. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  170. package/dist/astro/routes/api/auth/passkey/register/options.mjs +14 -13
  171. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  172. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +15 -14
  173. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  174. package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -14
  175. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  176. package/dist/astro/routes/api/auth/signup/complete.mjs +15 -14
  177. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  178. package/dist/astro/routes/api/auth/signup/request.mjs +14 -13
  179. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  180. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  181. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
  182. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -211
  183. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  184. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -17
  185. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  186. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  187. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -14
  188. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  189. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  190. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -14
  191. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  192. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
  193. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts +8 -0
  194. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts.map +1 -0
  195. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +35 -0
  196. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -0
  197. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +16 -15
  198. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +9 -2
  200. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +25 -18
  202. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  203. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +27 -25
  204. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +27 -25
  206. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  208. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  209. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +23 -15
  211. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +23 -21
  213. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
  215. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +23 -15
  216. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -14
  218. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  220. package/dist/astro/routes/api/content/_collection_/index.mjs +12 -11
  221. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  222. package/dist/astro/routes/api/content/_collection_/trash.mjs +11 -10
  223. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  224. package/dist/astro/routes/api/dashboard.mjs +14 -12
  225. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  226. package/dist/astro/routes/api/dev/emails.mjs +4 -4
  227. package/dist/astro/routes/api/health.d.mts +8 -0
  228. package/dist/astro/routes/api/health.d.mts.map +1 -0
  229. package/dist/astro/routes/api/health.mjs +21 -0
  230. package/dist/astro/routes/api/health.mjs.map +1 -0
  231. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  232. package/dist/astro/routes/api/import/probe.mjs +25 -23
  233. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  234. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
  235. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -11
  236. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  237. package/dist/astro/routes/api/import/wordpress/execute.mjs +20 -20
  238. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -10
  239. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  240. package/dist/astro/routes/api/import/wordpress/media.mjs +15 -14
  241. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  242. package/dist/astro/routes/api/import/wordpress/prepare.mjs +14 -13
  243. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  244. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -11
  245. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  246. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +18 -17
  247. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  248. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  249. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -23
  250. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  252. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -11
  253. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  254. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -34
  255. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  256. package/dist/astro/routes/api/manifest.mjs +17 -9
  257. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  258. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  259. package/dist/astro/routes/api/mcp.mjs +167 -101
  260. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  261. package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -14
  262. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  263. package/dist/astro/routes/api/media/_id_/replace.mjs +12 -11
  264. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  265. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  266. package/dist/astro/routes/api/media/_id_/usage.mjs +23 -22
  267. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_.mjs +22 -21
  269. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  270. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts +8 -0
  271. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts.map +1 -0
  272. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +52 -0
  273. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -0
  274. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
  275. package/dist/astro/routes/api/media/folders/_id_.mjs +12 -11
  276. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  277. package/dist/astro/routes/api/media/folders/index.mjs +12 -11
  278. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  279. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  280. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  281. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  282. package/dist/astro/routes/api/media/upload-url.mjs +14 -13
  283. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  284. package/dist/astro/routes/api/media.mjs +26 -25
  285. package/dist/astro/routes/api/media.mjs.map +1 -1
  286. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +15 -14
  287. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  288. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -14
  289. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  290. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -14
  291. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/translations.mjs +15 -14
  293. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_.mjs +15 -14
  295. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  296. package/dist/astro/routes/api/menus/index.mjs +15 -14
  297. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  298. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  299. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
  300. package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
  301. package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
  302. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  303. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
  304. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
  305. package/dist/astro/routes/api/oauth/token.mjs +7 -7
  306. package/dist/astro/routes/api/openapi.json.mjs +28 -23
  307. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  308. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +2 -1
  309. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
  310. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +22 -40
  311. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  312. package/dist/astro/routes/api/redirects/404s/index.mjs +18 -15
  313. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  314. package/dist/astro/routes/api/redirects/404s/summary.mjs +18 -15
  315. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  316. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  317. package/dist/astro/routes/api/redirects/_id_.mjs +20 -23
  318. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  319. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  320. package/dist/astro/routes/api/redirects/index.mjs +19 -20
  321. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  322. package/dist/astro/routes/api/relations/_id_/index.mjs +27 -25
  323. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  324. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -20
  325. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  326. package/dist/astro/routes/api/relations/index.mjs +27 -25
  327. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  328. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  329. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  330. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +65 -62
  331. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  332. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +65 -62
  333. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  334. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +65 -62
  335. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  336. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +65 -62
  337. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  338. package/dist/astro/routes/api/schema/collections/index.mjs +65 -62
  339. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  340. package/dist/astro/routes/api/schema/collections/reorder.mjs +65 -62
  341. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  342. package/dist/astro/routes/api/schema/index.mjs +16 -16
  343. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +65 -62
  344. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/orphans/index.mjs +65 -62
  346. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/search/enable.mjs +16 -15
  348. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  349. package/dist/astro/routes/api/search/index.mjs +17 -15
  350. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/search/rebuild.mjs +16 -15
  352. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  353. package/dist/astro/routes/api/search/stats.mjs +10 -10
  354. package/dist/astro/routes/api/search/suggest.mjs +15 -14
  355. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  356. package/dist/astro/routes/api/sections/_slug_.mjs +15 -14
  357. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  358. package/dist/astro/routes/api/sections/index.mjs +15 -14
  359. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  360. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +9 -9
  361. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -8
  362. package/dist/astro/routes/api/settings/backups/export.mjs +9 -9
  363. package/dist/astro/routes/api/settings/backups/index.mjs +10 -10
  364. package/dist/astro/routes/api/settings/email.mjs +6 -6
  365. package/dist/astro/routes/api/settings.mjs +22 -20
  366. package/dist/astro/routes/api/settings.mjs.map +1 -1
  367. package/dist/astro/routes/api/setup/admin-verify.mjs +16 -15
  368. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  369. package/dist/astro/routes/api/setup/admin.mjs +15 -14
  370. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  371. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -40
  372. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  373. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  374. package/dist/astro/routes/api/setup/index.mjs +43 -40
  375. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/setup/status.mjs +5 -5
  377. package/dist/astro/routes/api/snapshot.mjs +11 -11
  378. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -22
  379. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  380. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -22
  381. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  382. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -22
  383. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  384. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -22
  385. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
  387. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  388. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -22
  389. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  390. package/dist/astro/routes/api/taxonomies/index.mjs +23 -22
  391. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  392. package/dist/astro/routes/api/themes/preview.mjs +8 -8
  393. package/dist/astro/routes/api/typegen.mjs +6 -6
  394. package/dist/astro/routes/api/visual-editing/action-token.d.mts +8 -0
  395. package/dist/astro/routes/api/visual-editing/action-token.d.mts.map +1 -0
  396. package/dist/astro/routes/api/visual-editing/action-token.mjs +25 -0
  397. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -0
  398. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts +8 -0
  399. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts.map +1 -0
  400. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +37 -0
  401. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -0
  402. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts +8 -0
  403. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts.map +1 -0
  404. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +20 -0
  405. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -0
  406. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  407. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  408. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  409. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +12 -11
  410. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  411. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -15
  412. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  413. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -15
  414. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  415. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -10
  416. package/dist/astro/routes/api/widget-areas/index.mjs +16 -15
  417. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  418. package/dist/astro/routes/api/widget-components.mjs +4 -4
  419. package/dist/astro/routes/robots.txt.mjs +13 -12
  420. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  421. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  422. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -19
  423. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  424. package/dist/astro/routes/sitemap.xml.mjs +14 -13
  425. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  426. package/dist/astro/types.d.mts +61 -23
  427. package/dist/astro/types.d.mts.map +1 -1
  428. package/dist/auth/providers/github.d.mts +1 -1
  429. package/dist/auth/providers/google.d.mts +1 -1
  430. package/dist/authoritative-records-DbqshfKD.mjs +5172 -0
  431. package/dist/authoritative-records-DbqshfKD.mjs.map +1 -0
  432. package/dist/authorize-BXpfMpp0.mjs +40 -0
  433. package/dist/authorize-BXpfMpp0.mjs.map +1 -0
  434. package/dist/backup-BsPQdwnS.mjs +246 -0
  435. package/dist/backup-BsPQdwnS.mjs.map +1 -0
  436. package/dist/base64-DvnNgP7e.mjs +63 -0
  437. package/dist/base64-DvnNgP7e.mjs.map +1 -0
  438. package/dist/byline-Doh-wt99.mjs +906 -0
  439. package/dist/byline-Doh-wt99.mjs.map +1 -0
  440. package/dist/byline-fields-CsrdvaLV.mjs +123 -0
  441. package/dist/byline-fields-CsrdvaLV.mjs.map +1 -0
  442. package/dist/byline-registry-D6lWzXk6.mjs +406 -0
  443. package/dist/byline-registry-D6lWzXk6.mjs.map +1 -0
  444. package/dist/bylines-Cop0hkoy.mjs +214 -0
  445. package/dist/bylines-Cop0hkoy.mjs.map +1 -0
  446. package/dist/bylines-kpBzHPr8.mjs +232 -0
  447. package/dist/bylines-kpBzHPr8.mjs.map +1 -0
  448. package/dist/cache-B0pOlXdM.mjs +108 -0
  449. package/dist/cache-B0pOlXdM.mjs.map +1 -0
  450. package/dist/capture-triggers-gxQxnxrJ.mjs +362 -0
  451. package/dist/capture-triggers-gxQxnxrJ.mjs.map +1 -0
  452. package/dist/challenge-store-CkRdSdd8.mjs +51 -0
  453. package/dist/challenge-store-CkRdSdd8.mjs.map +1 -0
  454. package/dist/checksum-Bsi2D9M1.mjs +162 -0
  455. package/dist/checksum-Bsi2D9M1.mjs.map +1 -0
  456. package/dist/chrome-tags-D7LGB91U.mjs +24 -0
  457. package/dist/chrome-tags-D7LGB91U.mjs.map +1 -0
  458. package/dist/chunks-BmWyou79.mjs +25 -0
  459. package/dist/chunks-BmWyou79.mjs.map +1 -0
  460. package/dist/cli/index.mjs +889 -102
  461. package/dist/cli/index.mjs.map +1 -1
  462. package/dist/client/cf-access.d.mts +1 -1
  463. package/dist/client/index.d.mts +2 -2
  464. package/dist/client/index.mjs +2 -2
  465. package/dist/collection-deletion-C3Xixmkx.mjs +436 -0
  466. package/dist/collection-deletion-C3Xixmkx.mjs.map +1 -0
  467. package/dist/collection-slugs-cache-D9auiKmI.mjs +85 -0
  468. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +1 -0
  469. package/dist/comment-DcT8qdPK.mjs +313 -0
  470. package/dist/comment-DcT8qdPK.mjs.map +1 -0
  471. package/dist/comment-reaction-DY5-y8Y5.mjs +85 -0
  472. package/dist/comment-reaction-DY5-y8Y5.mjs.map +1 -0
  473. package/dist/comments-B67VRNGw.mjs +204 -0
  474. package/dist/comments-B67VRNGw.mjs.map +1 -0
  475. package/dist/comments-BVzzt6x5.mjs +99 -0
  476. package/dist/comments-BVzzt6x5.mjs.map +1 -0
  477. package/dist/components-DIl9Qzh6.mjs +108 -0
  478. package/dist/components-DIl9Qzh6.mjs.map +1 -0
  479. package/dist/config-B2acLeC5.mjs +242 -0
  480. package/dist/config-B2acLeC5.mjs.map +1 -0
  481. package/dist/config-CGVeT8Hc.mjs +73 -0
  482. package/dist/config-CGVeT8Hc.mjs.map +1 -0
  483. package/dist/config-D3HhLON3.d.mts +39 -0
  484. package/dist/config-D3HhLON3.d.mts.map +1 -0
  485. package/dist/config-DS7e4EZ9.d.mts +6387 -0
  486. package/dist/config-DS7e4EZ9.d.mts.map +1 -0
  487. package/dist/content-DZ3B5qtA.mjs +2216 -0
  488. package/dist/content-DZ3B5qtA.mjs.map +1 -0
  489. package/dist/content-list-query-CbPdzsna.d.mts +26 -0
  490. package/dist/content-list-query-CbPdzsna.d.mts.map +1 -0
  491. package/dist/content-policy-CM4skrNi.mjs +46 -0
  492. package/dist/content-policy-CM4skrNi.mjs.map +1 -0
  493. package/dist/content-refresh-BHLHJgyt.mjs +3599 -0
  494. package/dist/content-refresh-BHLHJgyt.mjs.map +1 -0
  495. package/dist/content-repair-BVll5WNl.mjs +440 -0
  496. package/dist/content-repair-BVll5WNl.mjs.map +1 -0
  497. package/dist/context-B195kjqZ.mjs +1835 -0
  498. package/dist/context-B195kjqZ.mjs.map +1 -0
  499. package/dist/cron-BcR3RN4K.mjs +282 -0
  500. package/dist/cron-BcR3RN4K.mjs.map +1 -0
  501. package/dist/dashboard-CZD4G7k_.mjs +151 -0
  502. package/dist/dashboard-CZD4G7k_.mjs.map +1 -0
  503. package/dist/database/migration-lock.d.mts +37 -0
  504. package/dist/database/migration-lock.d.mts.map +1 -0
  505. package/dist/database/migration-lock.mjs +76 -0
  506. package/dist/database/migration-lock.mjs.map +1 -0
  507. package/dist/database/pg-migration-lock.d.mts +1 -1
  508. package/dist/database/pg-migration-lock.mjs +1 -1
  509. package/dist/database/pg-migration-lock.mjs.map +1 -1
  510. package/dist/datetime-normalization-PeiEdcRY.mjs +187 -0
  511. package/dist/datetime-normalization-PeiEdcRY.mjs.map +1 -0
  512. package/dist/db/index.d.mts +3 -3
  513. package/dist/db/index.mjs +4 -3
  514. package/dist/db/index.mjs.map +1 -1
  515. package/dist/db/libsql-migrations.d.mts +1 -1
  516. package/dist/db/libsql-migrations.mjs +7 -6
  517. package/dist/db/libsql-migrations.mjs.map +1 -1
  518. package/dist/db/libsql.d.mts +1 -1
  519. package/dist/db/postgres-migrations.d.mts +1 -1
  520. package/dist/db/postgres-migrations.mjs +7 -6
  521. package/dist/db/postgres-migrations.mjs.map +1 -1
  522. package/dist/db/postgres.d.mts +1 -1
  523. package/dist/db/sqlite-migrations.d.mts +1 -1
  524. package/dist/db/sqlite-migrations.mjs +7 -6
  525. package/dist/db/sqlite-migrations.mjs.map +1 -1
  526. package/dist/db/sqlite.d.mts +1 -1
  527. package/dist/db/sqlite.mjs +1 -1
  528. package/dist/db-errors-CBD5yMro.mjs +55 -0
  529. package/dist/db-errors-CBD5yMro.mjs.map +1 -0
  530. package/dist/default-BtlxWgh9.mjs +81 -0
  531. package/dist/default-BtlxWgh9.mjs.map +1 -0
  532. package/dist/deferred-tasks-Ba9fphlE.d.mts +9 -0
  533. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +1 -0
  534. package/dist/dev-typegen-CZaPLl3V.mjs +29 -0
  535. package/dist/dev-typegen-CZaPLl3V.mjs.map +1 -0
  536. package/dist/device-flow-3E5l0fpH.mjs +466 -0
  537. package/dist/device-flow-3E5l0fpH.mjs.map +1 -0
  538. package/dist/dialect-helpers-CtYdsX4W.mjs +307 -0
  539. package/dist/dialect-helpers-CtYdsX4W.mjs.map +1 -0
  540. package/dist/direct-executor-ZI8E01Yt.mjs +104 -0
  541. package/dist/direct-executor-ZI8E01Yt.mjs.map +1 -0
  542. package/dist/dist-2hDLsLeq.mjs +810 -0
  543. package/dist/dist-2hDLsLeq.mjs.map +1 -0
  544. package/dist/email-console-gc-E3Eqj.mjs +50 -0
  545. package/dist/email-console-gc-E3Eqj.mjs.map +1 -0
  546. package/dist/emdash-runtime-DZGinqTL.mjs +4041 -0
  547. package/dist/emdash-runtime-DZGinqTL.mjs.map +1 -0
  548. package/dist/enrich-C2Mk0lwE.mjs +194 -0
  549. package/dist/enrich-C2Mk0lwE.mjs.map +1 -0
  550. package/dist/entry-lock-D3C99MXS.mjs +1520 -0
  551. package/dist/entry-lock-D3C99MXS.mjs.map +1 -0
  552. package/dist/entry-lock-D9rnj2Lu.mjs +163 -0
  553. package/dist/entry-lock-D9rnj2Lu.mjs.map +1 -0
  554. package/dist/entry-lock-DX7QkqEg.d.mts +3503 -0
  555. package/dist/entry-lock-DX7QkqEg.d.mts.map +1 -0
  556. package/dist/entry-locks-CO_KaoU5.mjs +167 -0
  557. package/dist/entry-locks-CO_KaoU5.mjs.map +1 -0
  558. package/dist/error-CCTCskie.mjs +90 -0
  559. package/dist/error-CCTCskie.mjs.map +1 -0
  560. package/dist/errors-W3PA8HqB.mjs +447 -0
  561. package/dist/errors-W3PA8HqB.mjs.map +1 -0
  562. package/dist/escape-DN4Qmjsl.mjs +9 -0
  563. package/dist/escape-DN4Qmjsl.mjs.map +1 -0
  564. package/dist/field-defs-cache-B337z8UJ.mjs +77 -0
  565. package/dist/field-defs-cache-B337z8UJ.mjs.map +1 -0
  566. package/dist/focal-point-Gr34o-4o.mjs +23 -0
  567. package/dist/focal-point-Gr34o-4o.mjs.map +1 -0
  568. package/dist/fts-manager-DMb0sbIQ.mjs +413 -0
  569. package/dist/fts-manager-DMb0sbIQ.mjs.map +1 -0
  570. package/dist/hash-CLVFzWvx.mjs +37 -0
  571. package/dist/hash-CLVFzWvx.mjs.map +1 -0
  572. package/dist/hook-result-KY1jq21o.d.mts +31 -0
  573. package/dist/hook-result-KY1jq21o.d.mts.map +1 -0
  574. package/dist/hreflang-BgS2FqhH.d.mts +50 -0
  575. package/dist/hreflang-BgS2FqhH.d.mts.map +1 -0
  576. package/dist/hreflang-CrJwqoeb.mjs +105 -0
  577. package/dist/hreflang-CrJwqoeb.mjs.map +1 -0
  578. package/dist/http-route-dispatch-DAKlanXb.mjs +339 -0
  579. package/dist/http-route-dispatch-DAKlanXb.mjs.map +1 -0
  580. package/dist/identity-DRGSHEEr.mjs +35 -0
  581. package/dist/identity-DRGSHEEr.mjs.map +1 -0
  582. package/dist/import-DFr5B_hC.mjs +2020 -0
  583. package/dist/import-DFr5B_hC.mjs.map +1 -0
  584. package/dist/index-CDwKDkTq.d.mts +623 -0
  585. package/dist/index-CDwKDkTq.d.mts.map +1 -0
  586. package/dist/index.d.mts +27 -22
  587. package/dist/index.mjs +101 -89
  588. package/dist/init-lock-4eRRB4Le.mjs +56 -0
  589. package/dist/init-lock-4eRRB4Le.mjs.map +1 -0
  590. package/dist/install-finalization-5Os-QZ-2.mjs +58 -0
  591. package/dist/install-finalization-5Os-QZ-2.mjs.map +1 -0
  592. package/dist/lifecycle-7e-Lt_kX.mjs +25 -0
  593. package/dist/lifecycle-7e-Lt_kX.mjs.map +1 -0
  594. package/dist/load-Cu5bvCZh.mjs +28 -0
  595. package/dist/load-Cu5bvCZh.mjs.map +1 -0
  596. package/dist/loader-t4TxaFiQ.mjs +1004 -0
  597. package/dist/loader-t4TxaFiQ.mjs.map +1 -0
  598. package/dist/manifest-builder-D31UoJCu.mjs +189 -0
  599. package/dist/manifest-builder-D31UoJCu.mjs.map +1 -0
  600. package/dist/manifest-schema-Bkh8SeHd.mjs +491 -0
  601. package/dist/manifest-schema-Bkh8SeHd.mjs.map +1 -0
  602. package/dist/media/image-endpoint.mjs +1 -1
  603. package/dist/media/index.d.mts +1 -1
  604. package/dist/media/index.mjs +4 -4
  605. package/dist/media/local-runtime.d.mts +14 -12
  606. package/dist/media/local-runtime.d.mts.map +1 -1
  607. package/dist/media/local-runtime.mjs +12 -11
  608. package/dist/media/local-runtime.mjs.map +1 -1
  609. package/dist/media-TBlKCwo7.mjs +334 -0
  610. package/dist/media-TBlKCwo7.mjs.map +1 -0
  611. package/dist/media-allowlist-s60eAIf6.mjs +44 -0
  612. package/dist/media-allowlist-s60eAIf6.mjs.map +1 -0
  613. package/dist/media-folders-ClIRLUQv.mjs +210 -0
  614. package/dist/media-folders-ClIRLUQv.mjs.map +1 -0
  615. package/dist/media-url-DY_ijO3B.mjs +43 -0
  616. package/dist/media-url-DY_ijO3B.mjs.map +1 -0
  617. package/dist/media-usage-C4NolTpQ.mjs +1833 -0
  618. package/dist/media-usage-C4NolTpQ.mjs.map +1 -0
  619. package/dist/media-usage-activation-CAhmb14O.mjs +78 -0
  620. package/dist/media-usage-activation-CAhmb14O.mjs.map +1 -0
  621. package/dist/media-usage-work-Cu5DqewW.mjs +586 -0
  622. package/dist/media-usage-work-Cu5DqewW.mjs.map +1 -0
  623. package/dist/media-usage-work-DJr3rOEN.mjs +152 -0
  624. package/dist/media-usage-work-DJr3rOEN.mjs.map +1 -0
  625. package/dist/media-usage-write-fence-DW5oHT7q.mjs +42 -0
  626. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +1 -0
  627. package/dist/menus-DbgU9z5Q.mjs +3732 -0
  628. package/dist/menus-DbgU9z5Q.mjs.map +1 -0
  629. package/dist/menus-Wy8m5NcH.mjs +753 -0
  630. package/dist/menus-Wy8m5NcH.mjs.map +1 -0
  631. package/dist/migrations/index.d.mts +2 -2
  632. package/dist/migrations/index.d.mts.map +1 -1
  633. package/dist/migrations/index.mjs +6 -5
  634. package/dist/mime-CCYRC4r1.mjs +36 -0
  635. package/dist/mime-CCYRC4r1.mjs.map +1 -0
  636. package/dist/mode-CkmOhFqj.mjs +23 -0
  637. package/dist/mode-CkmOhFqj.mjs.map +1 -0
  638. package/dist/node-sqlite-compat-vpVaILnb.mjs +46 -0
  639. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +1 -0
  640. package/dist/normalize-dChXQjwS.mjs +191 -0
  641. package/dist/normalize-dChXQjwS.mjs.map +1 -0
  642. package/dist/oauth-authorization-DZ-R-hmx.mjs +274 -0
  643. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +1 -0
  644. package/dist/oauth-clients-BMPA8vjl.mjs +266 -0
  645. package/dist/oauth-clients-BMPA8vjl.mjs.map +1 -0
  646. package/dist/oauth-state-store-0gIdb48-.mjs +50 -0
  647. package/dist/oauth-state-store-0gIdb48-.mjs.map +1 -0
  648. package/dist/oauth-user-lookup-ChVW4UWu.mjs +26 -0
  649. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +1 -0
  650. package/dist/object-cache/memory.d.mts +1 -1
  651. package/dist/object-cache-DlSVbn5Y.mjs +534 -0
  652. package/dist/object-cache-DlSVbn5Y.mjs.map +1 -0
  653. package/dist/options-D5WcorD5.mjs +200 -0
  654. package/dist/options-D5WcorD5.mjs.map +1 -0
  655. package/dist/options-DAknChnw.d.mts +77 -0
  656. package/dist/options-DAknChnw.d.mts.map +1 -0
  657. package/dist/page/index.d.mts +2 -2
  658. package/dist/page/index.mjs +12 -11
  659. package/dist/page/index.mjs.map +1 -1
  660. package/dist/parse-Cr379Av9.mjs +81 -0
  661. package/dist/parse-Cr379Av9.mjs.map +1 -0
  662. package/dist/parse-tj9XLNO_.d.mts +165 -0
  663. package/dist/parse-tj9XLNO_.d.mts.map +1 -0
  664. package/dist/passkey-config-BD-wMaCf.mjs +46 -0
  665. package/dist/passkey-config-BD-wMaCf.mjs.map +1 -0
  666. package/dist/patterns-Do3iqi7N.mjs +145 -0
  667. package/dist/patterns-Do3iqi7N.mjs.map +1 -0
  668. package/dist/placeholder-CubPFn_L.d.mts +306 -0
  669. package/dist/placeholder-CubPFn_L.d.mts.map +1 -0
  670. package/dist/plugin-test-runtime.d.mts +97 -0
  671. package/dist/plugin-test-runtime.d.mts.map +1 -0
  672. package/dist/plugin-test-runtime.mjs +105 -0
  673. package/dist/plugin-types.d.mts +53 -15
  674. package/dist/plugin-types.d.mts.map +1 -1
  675. package/dist/plugin-types.mjs +18 -1
  676. package/dist/plugin-types.mjs.map +1 -0
  677. package/dist/plugin-utils.d.mts +12 -10
  678. package/dist/plugin-utils.d.mts.map +1 -1
  679. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -10
  680. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  681. package/dist/plugins/adapt-sandbox-entry.mjs +18 -13
  682. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  683. package/dist/plugins/host.d.mts +7 -0
  684. package/dist/plugins/host.mjs +45 -0
  685. package/dist/plugins/http-wire.d.mts +25 -0
  686. package/dist/plugins/http-wire.d.mts.map +1 -0
  687. package/dist/plugins/http-wire.mjs +148 -0
  688. package/dist/plugins/http-wire.mjs.map +1 -0
  689. package/dist/plugins/secret-redactor.d.mts +9 -0
  690. package/dist/plugins/secret-redactor.d.mts.map +1 -0
  691. package/dist/plugins/secret-redactor.mjs +51 -0
  692. package/dist/plugins/secret-redactor.mjs.map +1 -0
  693. package/dist/plugins-DHurtdXQ.mjs +277 -0
  694. package/dist/plugins-DHurtdXQ.mjs.map +1 -0
  695. package/dist/policy-lyZnjpwz.mjs +45 -0
  696. package/dist/policy-lyZnjpwz.mjs.map +1 -0
  697. package/dist/portable-text-oAwodbPS.mjs +286 -0
  698. package/dist/portable-text-oAwodbPS.mjs.map +1 -0
  699. package/dist/preview-Cup2bj8c.mjs +107 -0
  700. package/dist/preview-Cup2bj8c.mjs.map +1 -0
  701. package/dist/protocol-C1CNiKX4.d.mts +61 -0
  702. package/dist/protocol-C1CNiKX4.d.mts.map +1 -0
  703. package/dist/public-submission-Cs-pFMQK.mjs +245 -0
  704. package/dist/public-submission-Cs-pFMQK.mjs.map +1 -0
  705. package/dist/public-url-BWVHsfQv.mjs +101 -0
  706. package/dist/public-url-BWVHsfQv.mjs.map +1 -0
  707. package/dist/query-D-lxiOgn.mjs +890 -0
  708. package/dist/query-D-lxiOgn.mjs.map +1 -0
  709. package/dist/query-D7kHKOws.mjs +41 -0
  710. package/dist/query-D7kHKOws.mjs.map +1 -0
  711. package/dist/rate-limit-CqJn-w4h.mjs +120 -0
  712. package/dist/rate-limit-CqJn-w4h.mjs.map +1 -0
  713. package/dist/redirect-BrChFPIu.mjs +17 -0
  714. package/dist/redirect-BrChFPIu.mjs.map +1 -0
  715. package/dist/redirect-D2Yo-b6S.mjs +415 -0
  716. package/dist/redirect-D2Yo-b6S.mjs.map +1 -0
  717. package/dist/redirects-BCiTaIQ-.mjs +146 -0
  718. package/dist/redirects-BCiTaIQ-.mjs.map +1 -0
  719. package/dist/redirects-ByItliuu.mjs +644 -0
  720. package/dist/redirects-ByItliuu.mjs.map +1 -0
  721. package/dist/registry/testing.d.mts +14 -0
  722. package/dist/registry/testing.d.mts.map +1 -0
  723. package/dist/registry/testing.mjs +255 -0
  724. package/dist/registry/testing.mjs.map +1 -0
  725. package/dist/registry-CkuPoZs7.mjs +1222 -0
  726. package/dist/registry-CkuPoZs7.mjs.map +1 -0
  727. package/dist/relation-XTAtOpJO.mjs +334 -0
  728. package/dist/relation-XTAtOpJO.mjs.map +1 -0
  729. package/dist/relations-B4w-G5U9.mjs +309 -0
  730. package/dist/relations-B4w-G5U9.mjs.map +1 -0
  731. package/dist/relations-O63JWBRj.mjs +403 -0
  732. package/dist/relations-O63JWBRj.mjs.map +1 -0
  733. package/dist/request-cache-DaMhSQdx.mjs +104 -0
  734. package/dist/request-cache-DaMhSQdx.mjs.map +1 -0
  735. package/dist/request-context.d.mts +1 -1
  736. package/dist/request-meta-C8yl_sIs.mjs +141 -0
  737. package/dist/request-meta-C8yl_sIs.mjs.map +1 -0
  738. package/dist/resolve-BJIS8wKr.mjs +199 -0
  739. package/dist/resolve-BJIS8wKr.mjs.map +1 -0
  740. package/dist/route-wire-D66L2oaZ.mjs +197 -0
  741. package/dist/route-wire-D66L2oaZ.mjs.map +1 -0
  742. package/dist/routes-DYsTe-oR.mjs +321 -0
  743. package/dist/routes-DYsTe-oR.mjs.map +1 -0
  744. package/dist/runner-3gfxRsJG.d.mts +68 -0
  745. package/dist/runner-3gfxRsJG.d.mts.map +1 -0
  746. package/dist/runner-ClrleR8A.mjs +5502 -0
  747. package/dist/runner-ClrleR8A.mjs.map +1 -0
  748. package/dist/runtime.d.mts +13 -11
  749. package/dist/runtime.d.mts.map +1 -1
  750. package/dist/runtime.mjs +6 -6
  751. package/dist/schema-CPhPM9Do.mjs +420 -0
  752. package/dist/schema-CPhPM9Do.mjs.map +1 -0
  753. package/dist/schema-DEERRrKS.mjs +9 -0
  754. package/dist/schema-DEERRrKS.mjs.map +1 -0
  755. package/dist/scopes-Bn8_rCSt.mjs +27 -0
  756. package/dist/scopes-Bn8_rCSt.mjs.map +1 -0
  757. package/dist/search-lami_Ota.mjs +448 -0
  758. package/dist/search-lami_Ota.mjs.map +1 -0
  759. package/dist/secrets-DNgVgz_e.mjs +341 -0
  760. package/dist/secrets-DNgVgz_e.mjs.map +1 -0
  761. package/dist/sections-BIpd4Cxf.mjs +346 -0
  762. package/dist/sections-BIpd4Cxf.mjs.map +1 -0
  763. package/dist/seed/index.d.mts +2 -2
  764. package/dist/seed/index.mjs +35 -33
  765. package/dist/seo/index.d.mts +3 -3
  766. package/dist/seo/index.mjs +26 -24
  767. package/dist/seo/index.mjs.map +1 -1
  768. package/dist/seo-BtU70b7l.mjs +114 -0
  769. package/dist/seo-BtU70b7l.mjs.map +1 -0
  770. package/dist/seo-_4qmazxz.mjs +133 -0
  771. package/dist/seo-_4qmazxz.mjs.map +1 -0
  772. package/dist/service-Bpy5iTX0.mjs +150 -0
  773. package/dist/service-Bpy5iTX0.mjs.map +1 -0
  774. package/dist/session-user-BQeS2Mrb.mjs +51 -0
  775. package/dist/session-user-BQeS2Mrb.mjs.map +1 -0
  776. package/dist/settings-DmroR53o.mjs +420 -0
  777. package/dist/settings-DmroR53o.mjs.map +1 -0
  778. package/dist/settings-g2F2a3Ub.mjs +51 -0
  779. package/dist/settings-g2F2a3Ub.mjs.map +1 -0
  780. package/dist/setup-complete-BrZaXpVV.mjs +26 -0
  781. package/dist/setup-complete-BrZaXpVV.mjs.map +1 -0
  782. package/dist/setup-nonce-Cb9-884O.mjs +25 -0
  783. package/dist/setup-nonce-Cb9-884O.mjs.map +1 -0
  784. package/dist/single-flight-cache-B5O2qhO1.mjs +104 -0
  785. package/dist/single-flight-cache-B5O2qhO1.mjs.map +1 -0
  786. package/dist/site-url-DjhYCaep.mjs +16 -0
  787. package/dist/site-url-DjhYCaep.mjs.map +1 -0
  788. package/dist/slugify-T5GHH42D.mjs +17 -0
  789. package/dist/slugify-T5GHH42D.mjs.map +1 -0
  790. package/dist/snapshot-C32Xuv3o.mjs +233 -0
  791. package/dist/snapshot-C32Xuv3o.mjs.map +1 -0
  792. package/dist/ssrf-Co1GGFZz.mjs +406 -0
  793. package/dist/ssrf-Co1GGFZz.mjs.map +1 -0
  794. package/dist/state-C7gCoiHr.mjs +153 -0
  795. package/dist/state-C7gCoiHr.mjs.map +1 -0
  796. package/dist/status-DLoBmcDz.mjs +30 -0
  797. package/dist/status-DLoBmcDz.mjs.map +1 -0
  798. package/dist/storage/local.d.mts +1 -1
  799. package/dist/storage/local.mjs +1 -1
  800. package/dist/storage/s3.d.mts +1 -1
  801. package/dist/storage/s3.mjs +1 -1
  802. package/dist/storage-query-CPctdMKX.d.mts +1519 -0
  803. package/dist/storage-query-CPctdMKX.d.mts.map +1 -0
  804. package/dist/target-CUKlGrXb.mjs +27 -0
  805. package/dist/target-CUKlGrXb.mjs.map +1 -0
  806. package/dist/taxonomies-BpqpXJUE.mjs +707 -0
  807. package/dist/taxonomies-BpqpXJUE.mjs.map +1 -0
  808. package/dist/taxonomies-ClCo4IGO.mjs +899 -0
  809. package/dist/taxonomies-ClCo4IGO.mjs.map +1 -0
  810. package/dist/taxonomy-Dj1vpw5E.mjs +508 -0
  811. package/dist/taxonomy-Dj1vpw5E.mjs.map +1 -0
  812. package/dist/tokens-Ns02GAma.mjs +171 -0
  813. package/dist/tokens-Ns02GAma.mjs.map +1 -0
  814. package/dist/transaction-BcJO4Tmc.mjs +29 -0
  815. package/dist/transaction-BcJO4Tmc.mjs.map +1 -0
  816. package/dist/transport-B8P1xsqk.mjs +136 -0
  817. package/dist/transport-B8P1xsqk.mjs.map +1 -0
  818. package/dist/transport-BLHZZcD_.d.mts +42 -0
  819. package/dist/transport-BLHZZcD_.d.mts.map +1 -0
  820. package/dist/trusted-proxy-Cg7SuD15.mjs +51 -0
  821. package/dist/trusted-proxy-Cg7SuD15.mjs.map +1 -0
  822. package/dist/turnstile-DWCSh_Qc.mjs +53 -0
  823. package/dist/turnstile-DWCSh_Qc.mjs.map +1 -0
  824. package/dist/types-B3RkqvDW.mjs +156 -0
  825. package/dist/types-B3RkqvDW.mjs.map +1 -0
  826. package/dist/types-BkUg2yHx.mjs +92 -0
  827. package/dist/types-BkUg2yHx.mjs.map +1 -0
  828. package/dist/types-BtuppOTV.mjs +16 -0
  829. package/dist/types-BtuppOTV.mjs.map +1 -0
  830. package/dist/types-CCR3ivXE.d.mts +363 -0
  831. package/dist/types-CCR3ivXE.d.mts.map +1 -0
  832. package/dist/types-CSHgU_-_.mjs +18 -0
  833. package/dist/types-CSHgU_-_.mjs.map +1 -0
  834. package/dist/types-CbwqGOXm.d.mts +766 -0
  835. package/dist/types-CbwqGOXm.d.mts.map +1 -0
  836. package/dist/types-D4RGIc2I.d.mts +198 -0
  837. package/dist/types-D4RGIc2I.d.mts.map +1 -0
  838. package/dist/types-DEHidMEk.d.mts +1637 -0
  839. package/dist/types-DEHidMEk.d.mts.map +1 -0
  840. package/dist/types-DQeU2SR7.d.mts +279 -0
  841. package/dist/types-DQeU2SR7.d.mts.map +1 -0
  842. package/dist/types-DxQWoQLA.d.mts +264 -0
  843. package/dist/types-DxQWoQLA.d.mts.map +1 -0
  844. package/dist/types-FBBnGZ2Y.d.mts +198 -0
  845. package/dist/types-FBBnGZ2Y.d.mts.map +1 -0
  846. package/dist/types-ZCnlropY.mjs +69 -0
  847. package/dist/types-ZCnlropY.mjs.map +1 -0
  848. package/dist/types-_Qtyawiy.d.mts +124 -0
  849. package/dist/types-_Qtyawiy.d.mts.map +1 -0
  850. package/dist/types-gC6FAoa_.d.mts +75 -0
  851. package/dist/types-gC6FAoa_.d.mts.map +1 -0
  852. package/dist/types-k--LneIF.mjs +22 -0
  853. package/dist/types-k--LneIF.mjs.map +1 -0
  854. package/dist/upload-attempts-2xdnoKGe.mjs +27 -0
  855. package/dist/upload-attempts-2xdnoKGe.mjs.map +1 -0
  856. package/dist/url-pattern-3m3reMzr.mjs +33 -0
  857. package/dist/url-pattern-3m3reMzr.mjs.map +1 -0
  858. package/dist/user-DroRntkx.mjs +171 -0
  859. package/dist/user-DroRntkx.mjs.map +1 -0
  860. package/dist/utils-CC2oNGV8.mjs +435 -0
  861. package/dist/utils-CC2oNGV8.mjs.map +1 -0
  862. package/dist/validate-BCP9HNDn.mjs +384 -0
  863. package/dist/validate-BCP9HNDn.mjs.map +1 -0
  864. package/dist/validate-CyQ7I3xF.d.mts +410 -0
  865. package/dist/validate-CyQ7I3xF.d.mts.map +1 -0
  866. package/dist/validate-DANX1-Qi.mjs +120 -0
  867. package/dist/validate-DANX1-Qi.mjs.map +1 -0
  868. package/dist/validation-DBy6WF94.mjs +216 -0
  869. package/dist/validation-DBy6WF94.mjs.map +1 -0
  870. package/dist/version-B57E4Uo7.mjs +7 -0
  871. package/dist/version-B57E4Uo7.mjs.map +1 -0
  872. package/dist/widgets-wQ7Xcgq8.mjs +126 -0
  873. package/dist/widgets-wQ7Xcgq8.mjs.map +1 -0
  874. package/dist/wxr-taxonomies-DIHfvEDt.mjs +406 -0
  875. package/dist/wxr-taxonomies-DIHfvEDt.mjs.map +1 -0
  876. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +34 -0
  877. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +1 -0
  878. package/dist/zod-generator-D_yHIWfs.mjs +329 -0
  879. package/dist/zod-generator-D_yHIWfs.mjs.map +1 -0
  880. package/package.json +36 -11
  881. package/src/api/errors.ts +16 -0
  882. package/src/api/handlers/backup.ts +11 -5
  883. package/src/api/handlers/content.ts +160 -6
  884. package/src/api/handlers/dashboard.ts +31 -1
  885. package/src/api/handlers/index.ts +3 -0
  886. package/src/api/handlers/manifest.ts +4 -6
  887. package/src/api/handlers/marketplace.ts +99 -15
  888. package/src/api/handlers/media-upload.ts +31 -4
  889. package/src/api/handlers/plugin-settings.ts +35 -3
  890. package/src/api/handlers/redirects.ts +221 -138
  891. package/src/api/handlers/registry.ts +62 -21
  892. package/src/api/handlers/revision.ts +14 -26
  893. package/src/api/handlers/snapshot.ts +4 -1
  894. package/src/api/handlers/taxonomies.ts +70 -5
  895. package/src/api/handlers/validation.ts +120 -19
  896. package/src/api/openapi/document.ts +34 -17
  897. package/src/api/schemas/content.ts +26 -14
  898. package/src/api/schemas/entry-lock.ts +9 -0
  899. package/src/api/schemas/search.ts +4 -0
  900. package/src/api/types.ts +2 -0
  901. package/src/astro/integration/index.ts +16 -3
  902. package/src/astro/integration/routes.ts +84 -0
  903. package/src/astro/integration/runtime.ts +31 -23
  904. package/src/astro/integration/virtual-modules.ts +4 -0
  905. package/src/astro/integration/vite-config.ts +1 -0
  906. package/src/astro/middleware/auth.ts +25 -4
  907. package/src/astro/middleware/request-context.ts +28 -10
  908. package/src/astro/middleware.ts +17 -1
  909. package/src/astro/prefetch.ts +2 -2
  910. package/src/astro/routes/api/admin/comments/[id]/status.ts +22 -58
  911. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +2 -15
  912. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +2 -25
  913. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +1 -0
  914. package/src/astro/routes/api/admin/plugins/[id]/update.ts +23 -4
  915. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +12 -2
  916. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +1 -0
  917. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +29 -10
  918. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +8 -2
  919. package/src/astro/routes/api/admin/plugins/registry/install.ts +15 -4
  920. package/src/astro/routes/api/admin/plugins/registry/verify.ts +2 -1
  921. package/src/astro/routes/api/admin/plugins/updates.ts +6 -1
  922. package/src/astro/routes/api/admin/scheduled-policy-rejections/[collection]/[id].ts +34 -0
  923. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +4 -259
  924. package/src/astro/routes/api/content/[collection]/[id]/plugin-extensions/[pluginId]/[kind]/[extensionId].ts +29 -0
  925. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +10 -3
  926. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +10 -1
  927. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +5 -1
  928. package/src/astro/routes/api/health.ts +23 -0
  929. package/src/astro/routes/api/manifest.ts +14 -4
  930. package/src/astro/routes/api/mcp.ts +2 -1
  931. package/src/astro/routes/api/media/asset/[id]/[filename].ts +50 -0
  932. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +13 -81
  933. package/src/astro/routes/api/redirects/[id].ts +0 -3
  934. package/src/astro/routes/api/redirects/index.ts +0 -2
  935. package/src/astro/routes/api/search/index.ts +1 -0
  936. package/src/astro/routes/api/visual-editing/action-token.ts +36 -0
  937. package/src/astro/routes/api/visual-editing/content/[collection]/[id]/publish.ts +32 -0
  938. package/src/astro/routes/api/visual-editing/toolbar-labels.ts +16 -0
  939. package/src/astro/routes/sitemap-[collection].xml.ts +7 -4
  940. package/src/astro/types.ts +70 -9
  941. package/src/cli/commands/bundle-utils.ts +19 -19
  942. package/src/cli/commands/bundle.ts +9 -6
  943. package/src/cli/commands/content.ts +1 -1
  944. package/src/cli/commands/doctor.ts +25 -0
  945. package/src/cli/commands/export-seed.ts +193 -56
  946. package/src/cli/commands/migrate.ts +71 -23
  947. package/src/cli/commands/publish.ts +2 -2
  948. package/src/comments/public-submission.ts +246 -0
  949. package/src/comments/service.ts +59 -12
  950. package/src/components/EmDashHead.astro +1 -0
  951. package/src/components/widgets/Archives.astro +6 -5
  952. package/src/config/secrets.ts +25 -11
  953. package/src/content/known-fields.ts +44 -0
  954. package/src/database/connection.ts +5 -1
  955. package/src/database/content-datetime.ts +123 -0
  956. package/src/database/datetime-storage.ts +452 -0
  957. package/src/database/dialect-helpers.ts +36 -1
  958. package/src/database/migration-lock.ts +140 -0
  959. package/src/database/migrations/078_menu_item_translation_groups.ts +15 -0
  960. package/src/database/migrations/079_datetime_normalization.ts +13 -0
  961. package/src/database/migrations/080_content_translation_locale_unique.ts +88 -0
  962. package/src/database/migrations/081_redirect_write_guards.ts +257 -0
  963. package/src/database/migrations/082_taxonomy_translation_locale_unique.ts +49 -0
  964. package/src/database/migrations/runner.ts +57 -15
  965. package/src/database/pg-migration-lock.ts +2 -2
  966. package/src/database/repositories/byline.ts +9 -0
  967. package/src/database/repositories/comment.ts +86 -0
  968. package/src/database/repositories/content.ts +391 -69
  969. package/src/database/repositories/media.ts +35 -4
  970. package/src/database/repositories/menu.ts +1 -0
  971. package/src/database/repositories/options.ts +46 -4
  972. package/src/database/repositories/redirect.ts +259 -64
  973. package/src/database/repositories/revision.ts +116 -17
  974. package/src/database/repositories/taxonomy.ts +34 -0
  975. package/src/database/repositories/types.ts +2 -0
  976. package/src/database/types.ts +11 -0
  977. package/src/datetime-normalization.ts +311 -0
  978. package/src/db/node-sqlite-compat.ts +3 -2
  979. package/src/emdash-runtime.ts +1925 -422
  980. package/src/fields/image.ts +2 -0
  981. package/src/i18n/config.ts +6 -6
  982. package/src/i18n/resolve.ts +54 -11
  983. package/src/index.ts +87 -0
  984. package/src/loader.ts +14 -0
  985. package/src/mcp/server.ts +194 -64
  986. package/src/media/usage/extractor.ts +50 -15
  987. package/src/media/usage/types.ts +1 -1
  988. package/src/menus/index.ts +49 -16
  989. package/src/migrations/direct-executor.ts +40 -2
  990. package/src/migrations/index.ts +1 -0
  991. package/src/migrations/protocol.ts +11 -1
  992. package/src/plugin-test-runtime.ts +17 -0
  993. package/src/plugin-types.ts +119 -21
  994. package/src/plugins/adapt-sandbox-entry.ts +34 -27
  995. package/src/plugins/content-access.ts +170 -0
  996. package/src/plugins/content-policy.ts +74 -0
  997. package/src/plugins/context.ts +742 -150
  998. package/src/plugins/cron.ts +18 -10
  999. package/src/plugins/define-plugin.ts +55 -54
  1000. package/src/plugins/editor-draft.ts +257 -0
  1001. package/src/plugins/hooks.ts +129 -2
  1002. package/src/plugins/host.ts +29 -0
  1003. package/src/plugins/http-route-dispatch.ts +389 -0
  1004. package/src/plugins/http-wire.ts +180 -0
  1005. package/src/plugins/index.ts +88 -3
  1006. package/src/plugins/install-finalization.ts +77 -0
  1007. package/src/plugins/lifecycle.ts +47 -0
  1008. package/src/plugins/manifest-schema.ts +314 -58
  1009. package/src/plugins/media.ts +166 -0
  1010. package/src/plugins/request-meta.ts +12 -2
  1011. package/src/plugins/route-wire.ts +304 -0
  1012. package/src/plugins/routes.ts +38 -5
  1013. package/src/plugins/sandbox/index.ts +4 -0
  1014. package/src/plugins/sandbox/proxy.ts +129 -0
  1015. package/src/plugins/sandbox/types.ts +67 -5
  1016. package/src/plugins/secret-redactor.ts +65 -0
  1017. package/src/plugins/settings.ts +303 -0
  1018. package/src/plugins/state.ts +26 -0
  1019. package/src/plugins/types.ts +488 -15
  1020. package/src/query.ts +55 -1
  1021. package/src/registry/authoritative-records.ts +26 -0
  1022. package/src/registry/config.ts +70 -22
  1023. package/src/registry/testing.ts +100 -0
  1024. package/src/registry/types.ts +7 -64
  1025. package/src/scheduled-publish.ts +70 -3
  1026. package/src/schema/index.ts +1 -0
  1027. package/src/schema/registry.ts +45 -1
  1028. package/src/schema/types.ts +7 -0
  1029. package/src/schema/zod-generator.ts +5 -13
  1030. package/src/search/fts-manager.ts +3 -3
  1031. package/src/search/query.ts +32 -5
  1032. package/src/search/types.ts +8 -0
  1033. package/src/seed/apply.ts +37 -3
  1034. package/src/seed/types.ts +6 -1
  1035. package/src/seo/hreflang.ts +9 -6
  1036. package/src/settings/index.ts +53 -11
  1037. package/src/visual-editing/action-token.ts +31 -0
  1038. package/src/visual-editing/toolbar-bootstrap.ts +31 -6
  1039. package/src/visual-editing/toolbar.ts +103 -12
  1040. package/src/widgets/archives.ts +10 -9
  1041. package/src/widgets/index.ts +11 -1
  1042. package/dist/activation-DyNTe_Tl.mjs +0 -382
  1043. package/dist/activation-DyNTe_Tl.mjs.map +0 -1
  1044. package/dist/adapters-DCEgOBXi.d.mts +0 -171
  1045. package/dist/adapters-DCEgOBXi.d.mts.map +0 -1
  1046. package/dist/after-CBU2vkoO.mjs +0 -96
  1047. package/dist/after-CBU2vkoO.mjs.map +0 -1
  1048. package/dist/allowed-origins-GFUVavRj.mjs +0 -116
  1049. package/dist/allowed-origins-GFUVavRj.mjs.map +0 -1
  1050. package/dist/api-BvxJmnFY.mjs +0 -10094
  1051. package/dist/api-BvxJmnFY.mjs.map +0 -1
  1052. package/dist/api-tokens-xpGqMHrC.mjs +0 -163
  1053. package/dist/api-tokens-xpGqMHrC.mjs.map +0 -1
  1054. package/dist/apply-DLmM3R7f.mjs +0 -984
  1055. package/dist/apply-DLmM3R7f.mjs.map +0 -1
  1056. package/dist/artifact-fetch-P2JXVwOq.mjs +0 -972
  1057. package/dist/artifact-fetch-P2JXVwOq.mjs.map +0 -1
  1058. package/dist/authorize-C2QHlWSS.mjs +0 -40
  1059. package/dist/authorize-C2QHlWSS.mjs.map +0 -1
  1060. package/dist/backup-oS8ft5Cm.mjs +0 -241
  1061. package/dist/backup-oS8ft5Cm.mjs.map +0 -1
  1062. package/dist/base64-CvLhUKQv.mjs +0 -63
  1063. package/dist/base64-CvLhUKQv.mjs.map +0 -1
  1064. package/dist/bundle-CL0JjIPx.mjs +0 -663
  1065. package/dist/bundle-CL0JjIPx.mjs.map +0 -1
  1066. package/dist/byline-Vdi85CsZ.mjs +0 -902
  1067. package/dist/byline-Vdi85CsZ.mjs.map +0 -1
  1068. package/dist/byline-fields-DPVRFMz2.mjs +0 -123
  1069. package/dist/byline-fields-DPVRFMz2.mjs.map +0 -1
  1070. package/dist/byline-registry-BxDGIO0I.mjs +0 -406
  1071. package/dist/byline-registry-BxDGIO0I.mjs.map +0 -1
  1072. package/dist/bylines-BX8QhcTk.mjs +0 -232
  1073. package/dist/bylines-BX8QhcTk.mjs.map +0 -1
  1074. package/dist/bylines-w-E1IEQd.mjs +0 -214
  1075. package/dist/bylines-w-E1IEQd.mjs.map +0 -1
  1076. package/dist/cache--7HKu5Xm.mjs +0 -108
  1077. package/dist/cache--7HKu5Xm.mjs.map +0 -1
  1078. package/dist/capture-triggers-CeAsC76Z.mjs +0 -362
  1079. package/dist/capture-triggers-CeAsC76Z.mjs.map +0 -1
  1080. package/dist/challenge-store-BIOak-tp.mjs +0 -51
  1081. package/dist/challenge-store-BIOak-tp.mjs.map +0 -1
  1082. package/dist/chrome-tags-DzDQBCjX.mjs +0 -24
  1083. package/dist/chrome-tags-DzDQBCjX.mjs.map +0 -1
  1084. package/dist/chunks-VG_tyqnP.mjs +0 -25
  1085. package/dist/chunks-VG_tyqnP.mjs.map +0 -1
  1086. package/dist/collection-deletion-BCwaWTDw.mjs +0 -436
  1087. package/dist/collection-deletion-BCwaWTDw.mjs.map +0 -1
  1088. package/dist/collection-slugs-cache-7lTmNzeA.mjs +0 -85
  1089. package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +0 -1
  1090. package/dist/comment-reaction-CDyvPQRj.mjs +0 -85
  1091. package/dist/comment-reaction-CDyvPQRj.mjs.map +0 -1
  1092. package/dist/comment-vxOzWbZN.mjs +0 -255
  1093. package/dist/comment-vxOzWbZN.mjs.map +0 -1
  1094. package/dist/comments-VzmVLyaC.mjs +0 -204
  1095. package/dist/comments-VzmVLyaC.mjs.map +0 -1
  1096. package/dist/components-CL6Wkdk-.mjs +0 -108
  1097. package/dist/components-CL6Wkdk-.mjs.map +0 -1
  1098. package/dist/config--eWjQJE5.mjs +0 -217
  1099. package/dist/config--eWjQJE5.mjs.map +0 -1
  1100. package/dist/config-C3EBstHi.mjs +0 -72
  1101. package/dist/config-C3EBstHi.mjs.map +0 -1
  1102. package/dist/config-CGAhyOjP.d.mts +0 -6653
  1103. package/dist/config-CGAhyOjP.d.mts.map +0 -1
  1104. package/dist/config-ChFzshGd.d.mts +0 -34
  1105. package/dist/config-ChFzshGd.d.mts.map +0 -1
  1106. package/dist/content-CNfMWuhY.mjs +0 -1841
  1107. package/dist/content-CNfMWuhY.mjs.map +0 -1
  1108. package/dist/content-list-query-B8d4UQp9.d.mts +0 -26
  1109. package/dist/content-list-query-B8d4UQp9.d.mts.map +0 -1
  1110. package/dist/content-refresh-GTMyi2Xy.mjs +0 -3588
  1111. package/dist/content-refresh-GTMyi2Xy.mjs.map +0 -1
  1112. package/dist/content-repair-CIMt5C0U.mjs +0 -440
  1113. package/dist/content-repair-CIMt5C0U.mjs.map +0 -1
  1114. package/dist/context-C9PB8vGd.mjs +0 -1308
  1115. package/dist/context-C9PB8vGd.mjs.map +0 -1
  1116. package/dist/cron-DHAy9oyq.mjs +0 -277
  1117. package/dist/cron-DHAy9oyq.mjs.map +0 -1
  1118. package/dist/dashboard-BNSvAN8A.mjs +0 -140
  1119. package/dist/dashboard-BNSvAN8A.mjs.map +0 -1
  1120. package/dist/db-errors-Cl-sKYTm.mjs +0 -55
  1121. package/dist/db-errors-Cl-sKYTm.mjs.map +0 -1
  1122. package/dist/default-ByZ0JqZo.mjs +0 -81
  1123. package/dist/default-ByZ0JqZo.mjs.map +0 -1
  1124. package/dist/deferred-tasks-Cu4NSJpa.d.mts +0 -9
  1125. package/dist/deferred-tasks-Cu4NSJpa.d.mts.map +0 -1
  1126. package/dist/dev-typegen-DHT7lcMU.mjs +0 -29
  1127. package/dist/dev-typegen-DHT7lcMU.mjs.map +0 -1
  1128. package/dist/device-flow-Cf6bhCCT.mjs +0 -466
  1129. package/dist/device-flow-Cf6bhCCT.mjs.map +0 -1
  1130. package/dist/dialect-helpers-BcQvkHgn.mjs +0 -283
  1131. package/dist/dialect-helpers-BcQvkHgn.mjs.map +0 -1
  1132. package/dist/direct-executor-yAyUGSqB.mjs +0 -85
  1133. package/dist/direct-executor-yAyUGSqB.mjs.map +0 -1
  1134. package/dist/dist-BAsh8dbf.mjs +0 -810
  1135. package/dist/dist-BAsh8dbf.mjs.map +0 -1
  1136. package/dist/email-console-DNup1Fku.mjs +0 -50
  1137. package/dist/email-console-DNup1Fku.mjs.map +0 -1
  1138. package/dist/enrich-t2Xvjdqa.mjs +0 -194
  1139. package/dist/enrich-t2Xvjdqa.mjs.map +0 -1
  1140. package/dist/entry-lock-BEr8gDkG.mjs +0 -163
  1141. package/dist/entry-lock-BEr8gDkG.mjs.map +0 -1
  1142. package/dist/entry-lock-CGAtrwAR.d.mts +0 -3409
  1143. package/dist/entry-lock-CGAtrwAR.d.mts.map +0 -1
  1144. package/dist/entry-lock-DIYHAaSw.mjs +0 -1281
  1145. package/dist/entry-lock-DIYHAaSw.mjs.map +0 -1
  1146. package/dist/entry-locks-BEcX7ET0.mjs +0 -167
  1147. package/dist/entry-locks-BEcX7ET0.mjs.map +0 -1
  1148. package/dist/error-BDcFyoRt.mjs +0 -90
  1149. package/dist/error-BDcFyoRt.mjs.map +0 -1
  1150. package/dist/errors-DvMdNrgf.mjs +0 -434
  1151. package/dist/errors-DvMdNrgf.mjs.map +0 -1
  1152. package/dist/escape-B3asJC6W.mjs +0 -9
  1153. package/dist/escape-B3asJC6W.mjs.map +0 -1
  1154. package/dist/field-defs-cache-Cf5FHK0M.mjs +0 -77
  1155. package/dist/field-defs-cache-Cf5FHK0M.mjs.map +0 -1
  1156. package/dist/focal-point-BeWFo6Xx.mjs +0 -23
  1157. package/dist/focal-point-BeWFo6Xx.mjs.map +0 -1
  1158. package/dist/fts-manager-iddym8cd.mjs +0 -413
  1159. package/dist/fts-manager-iddym8cd.mjs.map +0 -1
  1160. package/dist/hash-BRweX6jz.mjs +0 -37
  1161. package/dist/hash-BRweX6jz.mjs.map +0 -1
  1162. package/dist/hook-result-BrshYHLx.d.mts +0 -31
  1163. package/dist/hook-result-BrshYHLx.d.mts.map +0 -1
  1164. package/dist/hreflang-CQpu5bMy.d.mts +0 -48
  1165. package/dist/hreflang-CQpu5bMy.d.mts.map +0 -1
  1166. package/dist/hreflang-DshnweTC.mjs +0 -103
  1167. package/dist/hreflang-DshnweTC.mjs.map +0 -1
  1168. package/dist/identity-CjGKDq8J.mjs +0 -35
  1169. package/dist/identity-CjGKDq8J.mjs.map +0 -1
  1170. package/dist/import-D96g2otw.mjs +0 -2020
  1171. package/dist/import-D96g2otw.mjs.map +0 -1
  1172. package/dist/index-1ECYpfiF.d.mts +0 -278
  1173. package/dist/index-1ECYpfiF.d.mts.map +0 -1
  1174. package/dist/init-lock-CFNBe_iH.mjs +0 -56
  1175. package/dist/init-lock-CFNBe_iH.mjs.map +0 -1
  1176. package/dist/load-DPtY9cZo.mjs +0 -28
  1177. package/dist/load-DPtY9cZo.mjs.map +0 -1
  1178. package/dist/loader-WJi6GFRn.mjs +0 -1004
  1179. package/dist/loader-WJi6GFRn.mjs.map +0 -1
  1180. package/dist/manifest-builder-BfNlGQIA.mjs +0 -189
  1181. package/dist/manifest-builder-BfNlGQIA.mjs.map +0 -1
  1182. package/dist/manifest-schema-CILooI5J.mjs +0 -301
  1183. package/dist/manifest-schema-CILooI5J.mjs.map +0 -1
  1184. package/dist/media-BBm8Wg3f.mjs +0 -318
  1185. package/dist/media-BBm8Wg3f.mjs.map +0 -1
  1186. package/dist/media-C1EIZKh1.mjs +0 -464
  1187. package/dist/media-C1EIZKh1.mjs.map +0 -1
  1188. package/dist/media-allowlist-elXJgb_K.mjs +0 -44
  1189. package/dist/media-allowlist-elXJgb_K.mjs.map +0 -1
  1190. package/dist/media-folders-DASfX_DH.mjs +0 -210
  1191. package/dist/media-folders-DASfX_DH.mjs.map +0 -1
  1192. package/dist/media-upload-C7_AQJ5v.mjs +0 -147
  1193. package/dist/media-upload-C7_AQJ5v.mjs.map +0 -1
  1194. package/dist/media-url-8dVl1loq.mjs +0 -43
  1195. package/dist/media-url-8dVl1loq.mjs.map +0 -1
  1196. package/dist/media-usage-C1EswMTq.mjs +0 -1833
  1197. package/dist/media-usage-C1EswMTq.mjs.map +0 -1
  1198. package/dist/media-usage-activation-CrHNltlL.mjs +0 -78
  1199. package/dist/media-usage-activation-CrHNltlL.mjs.map +0 -1
  1200. package/dist/media-usage-work-C5B1zT1c.mjs +0 -586
  1201. package/dist/media-usage-work-C5B1zT1c.mjs.map +0 -1
  1202. package/dist/media-usage-work-IkQx_Yz6.mjs +0 -152
  1203. package/dist/media-usage-work-IkQx_Yz6.mjs.map +0 -1
  1204. package/dist/media-usage-write-fence-B9anjOSg.mjs +0 -42
  1205. package/dist/media-usage-write-fence-B9anjOSg.mjs.map +0 -1
  1206. package/dist/menus-D8mC4eaN.mjs +0 -3989
  1207. package/dist/menus-D8mC4eaN.mjs.map +0 -1
  1208. package/dist/menus-UdwjHZJC.mjs +0 -752
  1209. package/dist/menus-UdwjHZJC.mjs.map +0 -1
  1210. package/dist/mime-DYpsOAny.mjs +0 -36
  1211. package/dist/mime-DYpsOAny.mjs.map +0 -1
  1212. package/dist/mode-Dm4BHhRH.mjs +0 -23
  1213. package/dist/mode-Dm4BHhRH.mjs.map +0 -1
  1214. package/dist/node-sqlite-compat-2sezm-Zd.mjs +0 -46
  1215. package/dist/node-sqlite-compat-2sezm-Zd.mjs.map +0 -1
  1216. package/dist/normalize-4nkKGsuW.mjs +0 -191
  1217. package/dist/normalize-4nkKGsuW.mjs.map +0 -1
  1218. package/dist/oauth-authorization-BxE_lURD.mjs +0 -274
  1219. package/dist/oauth-authorization-BxE_lURD.mjs.map +0 -1
  1220. package/dist/oauth-clients-DJIdOdq0.mjs +0 -266
  1221. package/dist/oauth-clients-DJIdOdq0.mjs.map +0 -1
  1222. package/dist/oauth-state-store-CsdxP57n.mjs +0 -50
  1223. package/dist/oauth-state-store-CsdxP57n.mjs.map +0 -1
  1224. package/dist/oauth-user-lookup-HzzW-dkF.mjs +0 -26
  1225. package/dist/oauth-user-lookup-HzzW-dkF.mjs.map +0 -1
  1226. package/dist/object-cache-DVKnyOfy.mjs +0 -534
  1227. package/dist/object-cache-DVKnyOfy.mjs.map +0 -1
  1228. package/dist/options-D1FBiAv1.mjs +0 -172
  1229. package/dist/options-D1FBiAv1.mjs.map +0 -1
  1230. package/dist/options-D8Y0VHc7.d.mts +0 -227
  1231. package/dist/options-D8Y0VHc7.d.mts.map +0 -1
  1232. package/dist/parse-WRg5C3NX.mjs +0 -81
  1233. package/dist/parse-WRg5C3NX.mjs.map +0 -1
  1234. package/dist/passkey-config-qIdO-wF6.mjs +0 -46
  1235. package/dist/passkey-config-qIdO-wF6.mjs.map +0 -1
  1236. package/dist/patterns-DC8CLptu.mjs +0 -145
  1237. package/dist/patterns-DC8CLptu.mjs.map +0 -1
  1238. package/dist/placeholder-COrvARyD.d.mts +0 -306
  1239. package/dist/placeholder-COrvARyD.d.mts.map +0 -1
  1240. package/dist/policy-XCfb-IE9.mjs +0 -45
  1241. package/dist/policy-XCfb-IE9.mjs.map +0 -1
  1242. package/dist/portable-text-BS3d5n-0.mjs +0 -286
  1243. package/dist/portable-text-BS3d5n-0.mjs.map +0 -1
  1244. package/dist/preview-BxwsGgGp.mjs +0 -107
  1245. package/dist/preview-BxwsGgGp.mjs.map +0 -1
  1246. package/dist/protocol-CLn58-nw.d.mts +0 -52
  1247. package/dist/protocol-CLn58-nw.d.mts.map +0 -1
  1248. package/dist/public-url-FWWAvnre.mjs +0 -101
  1249. package/dist/public-url-FWWAvnre.mjs.map +0 -1
  1250. package/dist/query-DygOte9M.mjs +0 -890
  1251. package/dist/query-DygOte9M.mjs.map +0 -1
  1252. package/dist/query-gtXT03Wc.mjs +0 -41
  1253. package/dist/query-gtXT03Wc.mjs.map +0 -1
  1254. package/dist/rate-limit-CQUPm0dh.mjs +0 -120
  1255. package/dist/rate-limit-CQUPm0dh.mjs.map +0 -1
  1256. package/dist/redirect-D1cWafi6.mjs +0 -17
  1257. package/dist/redirect-D1cWafi6.mjs.map +0 -1
  1258. package/dist/redirect-DId44BS1.mjs +0 -326
  1259. package/dist/redirect-DId44BS1.mjs.map +0 -1
  1260. package/dist/redirects-DN-ZE33W.mjs +0 -579
  1261. package/dist/redirects-DN-ZE33W.mjs.map +0 -1
  1262. package/dist/registry-DTqaqxed.mjs +0 -1195
  1263. package/dist/registry-DTqaqxed.mjs.map +0 -1
  1264. package/dist/relation-DxgCHOBw.mjs +0 -334
  1265. package/dist/relation-DxgCHOBw.mjs.map +0 -1
  1266. package/dist/relations-KKDSLUwS.mjs +0 -403
  1267. package/dist/relations-KKDSLUwS.mjs.map +0 -1
  1268. package/dist/relations-rOmbndUJ.mjs +0 -309
  1269. package/dist/relations-rOmbndUJ.mjs.map +0 -1
  1270. package/dist/request-cache-DAZZmesc.mjs +0 -104
  1271. package/dist/request-cache-DAZZmesc.mjs.map +0 -1
  1272. package/dist/request-meta-BgjUQLQ-.mjs +0 -140
  1273. package/dist/request-meta-BgjUQLQ-.mjs.map +0 -1
  1274. package/dist/resolve-Cy0aWSRj.mjs +0 -176
  1275. package/dist/resolve-Cy0aWSRj.mjs.map +0 -1
  1276. package/dist/runner-CfwysRM0.d.mts +0 -67
  1277. package/dist/runner-CfwysRM0.d.mts.map +0 -1
  1278. package/dist/runner-nEzvnogG.mjs +0 -4800
  1279. package/dist/runner-nEzvnogG.mjs.map +0 -1
  1280. package/dist/schema-CRu38Pr5.mjs +0 -9
  1281. package/dist/schema-CRu38Pr5.mjs.map +0 -1
  1282. package/dist/schema-DifxndJx.mjs +0 -420
  1283. package/dist/schema-DifxndJx.mjs.map +0 -1
  1284. package/dist/scopes-D5A1OZbq.mjs +0 -27
  1285. package/dist/scopes-D5A1OZbq.mjs.map +0 -1
  1286. package/dist/search-DEPFSBFq.mjs +0 -439
  1287. package/dist/search-DEPFSBFq.mjs.map +0 -1
  1288. package/dist/secrets-CdfzLdoO.mjs +0 -330
  1289. package/dist/secrets-CdfzLdoO.mjs.map +0 -1
  1290. package/dist/sections-3X52kmIR.mjs +0 -346
  1291. package/dist/sections-3X52kmIR.mjs.map +0 -1
  1292. package/dist/seo-Bw68KxRc.mjs +0 -133
  1293. package/dist/seo-Bw68KxRc.mjs.map +0 -1
  1294. package/dist/seo-C4AmbsMU.mjs +0 -114
  1295. package/dist/seo-C4AmbsMU.mjs.map +0 -1
  1296. package/dist/service-J_-Vgo7R.mjs +0 -195
  1297. package/dist/service-J_-Vgo7R.mjs.map +0 -1
  1298. package/dist/session-user-CbnMMwk6.mjs +0 -51
  1299. package/dist/session-user-CbnMMwk6.mjs.map +0 -1
  1300. package/dist/settings-AnEFYICn.mjs +0 -51
  1301. package/dist/settings-AnEFYICn.mjs.map +0 -1
  1302. package/dist/settings-DcMjREe5.mjs +0 -258
  1303. package/dist/settings-DcMjREe5.mjs.map +0 -1
  1304. package/dist/setup-complete-BClXXTvr.mjs +0 -26
  1305. package/dist/setup-complete-BClXXTvr.mjs.map +0 -1
  1306. package/dist/setup-nonce-BheRa4RG.mjs +0 -25
  1307. package/dist/setup-nonce-BheRa4RG.mjs.map +0 -1
  1308. package/dist/single-flight-cache-jaswDzmQ.mjs +0 -104
  1309. package/dist/single-flight-cache-jaswDzmQ.mjs.map +0 -1
  1310. package/dist/site-url-Bqf-ea3N.mjs +0 -16
  1311. package/dist/site-url-Bqf-ea3N.mjs.map +0 -1
  1312. package/dist/slugify-B994zkXC.mjs +0 -17
  1313. package/dist/slugify-B994zkXC.mjs.map +0 -1
  1314. package/dist/snapshot-C4CtXntb.mjs +0 -232
  1315. package/dist/snapshot-C4CtXntb.mjs.map +0 -1
  1316. package/dist/ssrf-gl4gFNhw.mjs +0 -406
  1317. package/dist/ssrf-gl4gFNhw.mjs.map +0 -1
  1318. package/dist/state-1F6IOhdQ.mjs +0 -136
  1319. package/dist/state-1F6IOhdQ.mjs.map +0 -1
  1320. package/dist/status-Cenfk_r5.mjs +0 -30
  1321. package/dist/status-Cenfk_r5.mjs.map +0 -1
  1322. package/dist/target-CRzeTs8G.mjs +0 -27
  1323. package/dist/target-CRzeTs8G.mjs.map +0 -1
  1324. package/dist/taxonomies-BOdxuZpV.mjs +0 -844
  1325. package/dist/taxonomies-BOdxuZpV.mjs.map +0 -1
  1326. package/dist/taxonomies-NcFDq5Gg.mjs +0 -707
  1327. package/dist/taxonomies-NcFDq5Gg.mjs.map +0 -1
  1328. package/dist/taxonomy-DP1vny4K.mjs +0 -492
  1329. package/dist/taxonomy-DP1vny4K.mjs.map +0 -1
  1330. package/dist/tokens-CDk8ox9p.mjs +0 -171
  1331. package/dist/tokens-CDk8ox9p.mjs.map +0 -1
  1332. package/dist/transaction-0KOpOyMu.mjs +0 -29
  1333. package/dist/transaction-0KOpOyMu.mjs.map +0 -1
  1334. package/dist/transport-BVn4tVb9.d.mts +0 -42
  1335. package/dist/transport-BVn4tVb9.d.mts.map +0 -1
  1336. package/dist/transport-DP0JI-8i.mjs +0 -136
  1337. package/dist/transport-DP0JI-8i.mjs.map +0 -1
  1338. package/dist/trusted-proxy-BTM6UxqD.mjs +0 -51
  1339. package/dist/trusted-proxy-BTM6UxqD.mjs.map +0 -1
  1340. package/dist/types-2n848aVW.d.mts +0 -198
  1341. package/dist/types-2n848aVW.d.mts.map +0 -1
  1342. package/dist/types-A2cN6a4a.mjs +0 -3
  1343. package/dist/types-BMXnRIrX.mjs +0 -144
  1344. package/dist/types-BMXnRIrX.mjs.map +0 -1
  1345. package/dist/types-BouXpOsa.d.mts +0 -1446
  1346. package/dist/types-BouXpOsa.d.mts.map +0 -1
  1347. package/dist/types-ByG2coLw.mjs +0 -16
  1348. package/dist/types-ByG2coLw.mjs.map +0 -1
  1349. package/dist/types-CQPWhPxE.mjs +0 -92
  1350. package/dist/types-CQPWhPxE.mjs.map +0 -1
  1351. package/dist/types-DEfNJ__A.d.mts +0 -75
  1352. package/dist/types-DEfNJ__A.d.mts.map +0 -1
  1353. package/dist/types-DKcKSbtB.d.mts +0 -273
  1354. package/dist/types-DKcKSbtB.d.mts.map +0 -1
  1355. package/dist/types-DRYs7uTL.d.mts +0 -198
  1356. package/dist/types-DRYs7uTL.d.mts.map +0 -1
  1357. package/dist/types-DaEg7KX2.d.mts +0 -363
  1358. package/dist/types-DaEg7KX2.d.mts.map +0 -1
  1359. package/dist/types-LU8utpP_.d.mts +0 -262
  1360. package/dist/types-LU8utpP_.d.mts.map +0 -1
  1361. package/dist/types-VpYfPUxN.d.mts +0 -124
  1362. package/dist/types-VpYfPUxN.d.mts.map +0 -1
  1363. package/dist/types-c9GP7Dj5.mjs +0 -18
  1364. package/dist/types-c9GP7Dj5.mjs.map +0 -1
  1365. package/dist/types-tJWDK__M.d.mts +0 -756
  1366. package/dist/types-tJWDK__M.d.mts.map +0 -1
  1367. package/dist/upload-attempts-C6S2y-lp.mjs +0 -27
  1368. package/dist/upload-attempts-C6S2y-lp.mjs.map +0 -1
  1369. package/dist/url-pattern-UYtxVTuj.mjs +0 -33
  1370. package/dist/url-pattern-UYtxVTuj.mjs.map +0 -1
  1371. package/dist/user-DIsIXogT.mjs +0 -171
  1372. package/dist/user-DIsIXogT.mjs.map +0 -1
  1373. package/dist/utils-BicP5Qbg.mjs +0 -435
  1374. package/dist/utils-BicP5Qbg.mjs.map +0 -1
  1375. package/dist/validate-BpwoDOgt.mjs +0 -120
  1376. package/dist/validate-BpwoDOgt.mjs.map +0 -1
  1377. package/dist/validate-D8VPn4Hv.mjs +0 -384
  1378. package/dist/validate-D8VPn4Hv.mjs.map +0 -1
  1379. package/dist/validate-Df6Dvwbw.d.mts +0 -405
  1380. package/dist/validate-Df6Dvwbw.d.mts.map +0 -1
  1381. package/dist/validation-CzMJn9Ku.mjs +0 -155
  1382. package/dist/validation-CzMJn9Ku.mjs.map +0 -1
  1383. package/dist/version-CK67_SXX.mjs +0 -7
  1384. package/dist/version-CK67_SXX.mjs.map +0 -1
  1385. package/dist/widgets-RFVAxQl3.mjs +0 -122
  1386. package/dist/widgets-RFVAxQl3.mjs.map +0 -1
  1387. package/dist/wxr-taxonomies-BX4yQL9s.d.mts +0 -34
  1388. package/dist/wxr-taxonomies-BX4yQL9s.d.mts.map +0 -1
  1389. package/dist/wxr-taxonomies-Csdp7yde.mjs +0 -406
  1390. package/dist/wxr-taxonomies-Csdp7yde.mjs.map +0 -1
  1391. package/dist/zod-generator-CNRGdnBY.mjs +0 -331
  1392. package/dist/zod-generator-CNRGdnBY.mjs.map +0 -1
  1393. /package/dist/{api-tokens-B_lfpmH3.mjs → api-tokens-DS1VzN7_.mjs} +0 -0
  1394. /package/dist/{ssrf-TQhaljuI.mjs → ssrf-BRpTDMV6.mjs} +0 -0
@@ -0,0 +1,1520 @@
1
+ import { a as MAX_COLLECTION_LIST_COLUMNS, i as MAX_COLLECTION_GROUP_LENGTH } from "./types-B3RkqvDW.mjs";
2
+ import { t as SQL_BATCH_SIZE } from "./chunks-BmWyou79.mjs";
3
+ import { t as isValidFocalPointUpdate } from "./focal-point-Gr34o-4o.mjs";
4
+ import { t as SEARCH_TOKENIZERS } from "./types-CSHgU_-_.mjs";
5
+ import { C as slugPattern, S as roleLevel, g as cursorPaginationQuery, v as httpUrl, y as localeCode } from "./redirects-BCiTaIQ-.mjs";
6
+ import { t as compileUrlPattern } from "./url-pattern-3m3reMzr.mjs";
7
+ import { z } from "zod";
8
+
9
+ //#region src/api/schemas/bylines.ts
10
+ /** Slug pattern: lowercase letters, digits, and hyphens; must start with a letter */
11
+ const bylineSlugPattern = /^[a-z][a-z0-9-]*$/;
12
+ const bylineSummarySchema = z.object({
13
+ id: z.string(),
14
+ slug: z.string(),
15
+ displayName: z.string(),
16
+ bio: z.string().nullable(),
17
+ avatarMediaId: z.string().nullable(),
18
+ avatarStorageKey: z.string().nullish(),
19
+ avatarAlt: z.string().nullish(),
20
+ avatarBlurhash: z.string().nullish(),
21
+ avatarDominantColor: z.string().nullish(),
22
+ websiteUrl: z.string().nullable(),
23
+ userId: z.string().nullable(),
24
+ isGuest: z.boolean(),
25
+ createdAt: z.string(),
26
+ updatedAt: z.string(),
27
+ locale: z.string(),
28
+ translationGroup: z.string().nullable(),
29
+ customFields: z.record(z.string(), z.union([
30
+ z.string(),
31
+ z.boolean(),
32
+ z.null()
33
+ ])).optional()
34
+ }).meta({ id: "BylineSummary" });
35
+ const bylineCreditSchema = z.object({
36
+ byline: bylineSummarySchema,
37
+ sortOrder: z.number().int(),
38
+ roleLabel: z.string().nullable(),
39
+ source: z.enum(["explicit", "inferred"]).optional().meta({ description: "Whether this credit was explicitly assigned or inferred from authorId" })
40
+ }).meta({ id: "BylineCredit" });
41
+ const contentBylineInputSchema = z.object({
42
+ bylineId: z.string().min(1),
43
+ roleLabel: z.string().nullish()
44
+ }).meta({ id: "ContentBylineInput" });
45
+ const bylinesListQuery = cursorPaginationQuery.extend({
46
+ search: z.string().optional(),
47
+ isGuest: z.coerce.boolean().optional(),
48
+ userId: z.string().optional(),
49
+ locale: localeCode.optional()
50
+ }).meta({ id: "BylinesListQuery" });
51
+ const bylineCreateBody = z.object({
52
+ slug: z.string().min(1).regex(bylineSlugPattern, "Slug must contain only lowercase letters, digits, and hyphens"),
53
+ displayName: z.string().min(1),
54
+ bio: z.string().nullish(),
55
+ avatarMediaId: z.string().nullish(),
56
+ websiteUrl: httpUrl.nullish(),
57
+ userId: z.string().nullish(),
58
+ isGuest: z.boolean().optional(),
59
+ locale: localeCode.optional(),
60
+ translationOf: z.string().min(1).optional(),
61
+ customFields: z.record(z.string(), z.unknown()).optional()
62
+ }).meta({ id: "BylineCreateBody" });
63
+ const bylineTranslationCreateBody = z.object({
64
+ locale: localeCode,
65
+ slug: z.string().min(1).regex(bylineSlugPattern, "Slug must contain only lowercase letters, digits, and hyphens").optional(),
66
+ displayName: z.string().min(1).optional(),
67
+ bio: z.string().nullish(),
68
+ avatarMediaId: z.string().nullish(),
69
+ websiteUrl: httpUrl.nullish()
70
+ }).meta({ id: "BylineTranslationCreateBody" });
71
+ const bylineTranslationsResponseSchema = z.object({ items: z.array(bylineSummarySchema) }).meta({ id: "BylineTranslationsResponse" });
72
+ const bylineUpdateBody = z.object({
73
+ slug: z.string().min(1).regex(bylineSlugPattern, "Slug must contain only lowercase letters, digits, and hyphens").optional(),
74
+ displayName: z.string().min(1).optional(),
75
+ bio: z.string().nullish(),
76
+ avatarMediaId: z.string().nullish(),
77
+ websiteUrl: httpUrl.nullish(),
78
+ userId: z.string().nullish(),
79
+ isGuest: z.boolean().optional(),
80
+ customFields: z.record(z.string(), z.unknown()).optional()
81
+ }).meta({ id: "BylineUpdateBody" });
82
+ const bylineListResponseSchema = z.object({
83
+ items: z.array(bylineSummarySchema),
84
+ nextCursor: z.string().optional()
85
+ }).meta({ id: "BylineListResponse" });
86
+
87
+ //#endregion
88
+ //#region src/api/schemas/content.ts
89
+ const contentDateTime = z.iso.datetime({
90
+ offset: true,
91
+ message: "must be an ISO 8601 datetime"
92
+ }).or(z.iso.datetime({
93
+ offset: true,
94
+ precision: -1,
95
+ message: "must be an ISO 8601 datetime"
96
+ }));
97
+ /** SEO input — per-content meta fields */
98
+ const contentSeoInput = z.object({
99
+ title: z.string().max(200).nullish(),
100
+ description: z.string().max(500).nullish(),
101
+ image: z.string().nullish(),
102
+ canonical: httpUrl.nullish(),
103
+ noIndex: z.boolean().optional()
104
+ }).meta({ id: "ContentSeoInput" });
105
+ /** ISO 8601 date or datetime bound for the content-list date range filter. */
106
+ const contentDateBound = z.union([contentDateTime, z.iso.date({ message: "must be an ISO 8601 date" })]).optional();
107
+ /**
108
+ * Byline ids for the content-list filter: either the literal `none` or a
109
+ * comma-separated list, parsed into an array.
110
+ *
111
+ * The 25-id cap keeps the `IN (...)` clause clear of D1's bound-parameter
112
+ * ceiling once the rest of the list query's placeholders are counted
113
+ * (`SQL_BATCH_SIZE` is 50 for a query binding nothing else).
114
+ */
115
+ const bylineFilterParam = z.string().trim().min(1).max(2e3).optional().transform((value) => value === void 0 ? void 0 : value === "none" ? "none" : [...new Set(value.split(",").map((id) => id.trim()))].filter((id) => id.length > 0)).refine((value) => value === void 0 || value === "none" || value.length <= 25, { message: "at most 25 bylines may be selected" }).refine((value) => value === void 0 || value === "none" || value.length > 0, { message: "must contain at least one byline id" });
116
+ /** Query-string boolean. Explicit values only — `z.coerce.boolean()` reads "false" as true. */
117
+ const booleanParam = z.enum([
118
+ "1",
119
+ "0",
120
+ "true",
121
+ "false"
122
+ ]).optional().transform((value) => value === "1" || value === "true");
123
+ const contentFieldComparable = z.union([z.string().max(2048), z.number()]);
124
+ const contentFieldFilterScalar = z.union([
125
+ contentFieldComparable,
126
+ z.boolean(),
127
+ z.null()
128
+ ]);
129
+ const contentFieldFilterValue = z.union([
130
+ contentFieldFilterScalar,
131
+ z.object({ in: z.array(z.union([contentFieldComparable, z.boolean()])).min(1).max(SQL_BATCH_SIZE) }).strict(),
132
+ z.object({
133
+ gt: contentFieldComparable.optional(),
134
+ gte: contentFieldComparable.optional(),
135
+ lt: contentFieldComparable.optional(),
136
+ lte: contentFieldComparable.optional()
137
+ }).strict().refine((value) => Object.values(value).some((bound) => bound !== void 0), { message: "Range filter must include at least one bound" })
138
+ ]);
139
+ function contentFieldFilterOperandCount(value) {
140
+ if (value === null) return 0;
141
+ if (!value || typeof value !== "object" || Array.isArray(value)) return 1;
142
+ if ("in" in value && Array.isArray(value.in)) return value.in.length;
143
+ return Object.values(value).filter((bound) => bound !== void 0).length;
144
+ }
145
+ /** AND-combined filters over custom fields explicitly marked as indexed. */
146
+ const contentFieldFiltersSchema = z.record(z.string().max(128).regex(/^[a-z][a-z0-9_]*$/, "must be a safe field identifier"), contentFieldFilterValue).refine((filters) => Object.keys(filters).length <= 20, { message: "At most 20 indexed field filters are allowed" }).refine((filters) => Object.values(filters).reduce((total, value) => total + contentFieldFilterOperandCount(value), 0) <= SQL_BATCH_SIZE, { message: `Indexed field filters have a total operand budget of ${SQL_BATCH_SIZE}` });
147
+ const contentFieldFiltersQuery = z.string().max(8192).transform((value, ctx) => {
148
+ try {
149
+ return JSON.parse(value);
150
+ } catch {
151
+ ctx.addIssue({
152
+ code: "custom",
153
+ message: "must be valid JSON"
154
+ });
155
+ return z.NEVER;
156
+ }
157
+ }).pipe(contentFieldFiltersSchema);
158
+ const contentListQuery = cursorPaginationQuery.extend({
159
+ status: z.string().optional(),
160
+ orderBy: z.string().optional(),
161
+ order: z.enum(["asc", "desc"]).optional(),
162
+ locale: localeCode.optional(),
163
+ q: z.string().trim().min(1).max(200).optional(),
164
+ authorId: z.string().min(1).max(64).optional(),
165
+ dateField: z.enum([
166
+ "createdAt",
167
+ "updatedAt",
168
+ "publishedAt"
169
+ ]).optional(),
170
+ dateFrom: contentDateBound,
171
+ dateTo: contentDateBound,
172
+ bylines: bylineFilterParam,
173
+ includeInferredBylines: booleanParam,
174
+ fieldFilters: contentFieldFiltersQuery.optional()
175
+ }).transform(({ bylines, ...rest }) => ({
176
+ ...rest,
177
+ bylinesNone: bylines === "none",
178
+ bylines: bylines === "none" ? void 0 : bylines
179
+ })).meta({ id: "ContentListQuery" });
180
+ /** ISO 8601 datetime for `publishedAt` / `createdAt`. Routes gate writes behind `content:publish_any`. */
181
+ const contentDateOverride = contentDateTime.nullish();
182
+ const overrideLockFlag = z.boolean().optional().meta({ description: "Write even though another editor holds this entry's edit lock. Without it the write is refused with 409 ENTRY_LOCKED." });
183
+ const contentCreateBody = z.object({
184
+ data: z.record(z.string(), z.unknown()),
185
+ slug: z.string().nullish(),
186
+ status: z.enum(["draft"]).optional(),
187
+ bylines: z.array(contentBylineInputSchema).optional(),
188
+ locale: localeCode.optional(),
189
+ translationOf: z.string().optional(),
190
+ seo: contentSeoInput.optional(),
191
+ taxonomies: z.record(z.string(), z.array(z.string())).optional().meta({ description: "Taxonomy term assignments as { taxonomyName: [termSlug, ...] }, resolved in the entry's locale." }),
192
+ publishedAt: contentDateOverride,
193
+ createdAt: contentDateOverride
194
+ }).meta({ id: "ContentCreateBody" });
195
+ const contentUpdateBody = z.object({
196
+ data: z.record(z.string(), z.unknown()).optional(),
197
+ slug: z.string().nullish(),
198
+ status: z.enum(["draft"]).optional(),
199
+ authorId: z.string().nullish(),
200
+ bylines: z.array(contentBylineInputSchema).optional(),
201
+ _rev: z.string().optional().meta({ description: "Opaque revision token for optimistic concurrency" }),
202
+ skipRevision: z.boolean().optional(),
203
+ overrideLock: overrideLockFlag,
204
+ seo: contentSeoInput.optional(),
205
+ taxonomies: z.record(z.string(), z.array(z.string())).optional().meta({ description: "Replace taxonomy assignments as { taxonomyName: [termSlug, ...] }. Only named taxonomies are touched; pass an empty array to clear a taxonomy." }),
206
+ publishedAt: contentDateOverride
207
+ }).meta({ id: "ContentUpdateBody" });
208
+ const contentScheduleBody = z.object({
209
+ scheduledAt: contentDateTime.meta({
210
+ description: "ISO 8601 datetime with Z or an explicit offset for scheduled publishing",
211
+ examples: ["2025-06-15T09:00:00Z"]
212
+ }),
213
+ overrideLock: overrideLockFlag,
214
+ _rev: z.string().optional().meta({ description: "Opaque revision token for optimistic concurrency" })
215
+ }).meta({ id: "ContentScheduleBody" });
216
+ const contentRevisionConditionBody = z.object({
217
+ _rev: z.string().optional().meta({ description: "Opaque revision token for optimistic concurrency" }),
218
+ overrideLock: overrideLockFlag
219
+ }).meta({ id: "ContentRevisionConditionBody" });
220
+ const contentPublishBody = contentRevisionConditionBody.extend({ publishedAt: contentDateTime.optional().meta({ description: "Optional ISO 8601 datetime to backdate the publish (e.g. when migrating content). Requires content:publish_any permission. Without this, existing published_at is preserved on re-publish." }) }).meta({ id: "ContentPublishBody" });
221
+ const contentPreviewUrlBody = z.object({
222
+ expiresIn: z.union([z.string(), z.number()]).optional(),
223
+ pathPattern: z.string().optional()
224
+ }).meta({ id: "ContentPreviewUrlBody" });
225
+ const contentTermsBody = z.object({ termIds: z.array(z.string()) }).meta({ id: "ContentTermsBody" });
226
+ /** A single term variant returned as part of an entry's term assignments. */
227
+ const contentEntryTermSchema = z.object({
228
+ id: z.string(),
229
+ name: z.string().meta({ description: "Taxonomy name" }),
230
+ slug: z.string(),
231
+ label: z.string(),
232
+ parentId: z.string().nullable(),
233
+ locale: localeCode,
234
+ translationGroup: z.string().nullable()
235
+ }).meta({ id: "ContentEntryTerm" });
236
+ /** Term assignments response for the content terms endpoint. */
237
+ const contentTermsResponseSchema = z.object({
238
+ terms: z.array(contentEntryTermSchema),
239
+ unresolved: z.array(z.object({
240
+ translationGroup: z.string(),
241
+ availableLocales: z.array(localeCode),
242
+ translations: z.array(z.object({
243
+ id: z.string(),
244
+ slug: z.string(),
245
+ locale: localeCode
246
+ }))
247
+ })),
248
+ entryLocale: localeCode,
249
+ defaultLocale: localeCode,
250
+ implicitDefaultLocale: z.boolean()
251
+ }).meta({ id: "ContentTermsResponse" });
252
+ const contentTrashQuery = cursorPaginationQuery.extend({ locale: localeCode.optional().meta({ description: "Restrict the trash listing to entries in this locale" }) }).meta({ id: "ContentTrashQuery" });
253
+ /** SEO metadata on a content item */
254
+ const contentSeoSchema = z.object({
255
+ title: z.string().nullable(),
256
+ description: z.string().nullable(),
257
+ image: z.string().nullable(),
258
+ canonical: z.string().nullable(),
259
+ noIndex: z.boolean()
260
+ }).meta({ id: "ContentSeo" });
261
+ /** A single content item as returned by the API */
262
+ const contentItemSchema = z.object({
263
+ id: z.string(),
264
+ type: z.string().meta({ description: "Collection slug this item belongs to" }),
265
+ slug: z.string().nullable(),
266
+ status: z.string().meta({ description: "draft, published, or scheduled" }),
267
+ data: z.record(z.string(), z.unknown()).meta({ description: "User-defined field values" }),
268
+ authorId: z.string().nullable(),
269
+ primaryBylineId: z.string().nullable(),
270
+ byline: bylineSummarySchema.nullable().optional(),
271
+ bylines: z.array(bylineCreditSchema).optional(),
272
+ createdAt: z.string(),
273
+ updatedAt: z.string(),
274
+ publishedAt: z.string().nullable(),
275
+ scheduledAt: z.string().nullable(),
276
+ liveRevisionId: z.string().nullable(),
277
+ draftRevisionId: z.string().nullable(),
278
+ version: z.number().int(),
279
+ locale: z.string().nullable(),
280
+ translationGroup: z.string().nullable(),
281
+ seo: contentSeoSchema.optional()
282
+ }).meta({ id: "ContentItem" });
283
+ /** Response for single content item endpoints (get, create, update) */
284
+ const contentResponseSchema = z.object({
285
+ item: contentItemSchema,
286
+ _rev: z.string().optional().meta({ description: "Opaque revision token for optimistic concurrency" })
287
+ }).meta({ id: "ContentResponse" });
288
+ /** Response for restoring an item from trash */
289
+ const contentRestoreResponseSchema = z.object({
290
+ restored: z.literal(true),
291
+ item: contentItemSchema,
292
+ _rev: z.string().meta({ description: "Opaque revision token for optimistic concurrency" })
293
+ }).meta({ id: "ContentRestoreResponse" });
294
+ /** Response for content list endpoints */
295
+ const contentListResponseSchema = z.object({
296
+ items: z.array(contentItemSchema),
297
+ nextCursor: z.string().optional(),
298
+ total: z.number().int().nonnegative().optional()
299
+ }).meta({ id: "ContentListResponse" });
300
+ /** A distinct content author for the admin author filter */
301
+ const contentAuthorSchema = z.object({
302
+ id: z.string(),
303
+ name: z.string().nullable(),
304
+ email: z.string(),
305
+ avatarUrl: z.string().nullable()
306
+ }).meta({ id: "ContentAuthor" });
307
+ /** Response for the content authors endpoint */
308
+ const contentAuthorsResponseSchema = z.object({ items: z.array(contentAuthorSchema) }).meta({ id: "ContentAuthorsResponse" });
309
+ /** Trashed content item */
310
+ const trashedContentItemSchema = z.object({
311
+ id: z.string(),
312
+ type: z.string(),
313
+ slug: z.string().nullable(),
314
+ status: z.string(),
315
+ locale: z.string().nullable(),
316
+ translationGroup: z.string().nullable(),
317
+ data: z.record(z.string(), z.unknown()),
318
+ authorId: z.string().nullable(),
319
+ createdAt: z.string(),
320
+ updatedAt: z.string(),
321
+ publishedAt: z.string().nullable(),
322
+ deletedAt: z.string()
323
+ }).meta({ id: "TrashedContentItem" });
324
+ /** Response for trashed content list */
325
+ const trashedContentListResponseSchema = z.object({
326
+ items: z.array(trashedContentItemSchema),
327
+ nextCursor: z.string().optional()
328
+ }).meta({ id: "TrashedContentListResponse" });
329
+ /** Response for content compare (live vs draft) */
330
+ const contentCompareResponseSchema = z.object({
331
+ hasChanges: z.boolean(),
332
+ live: z.record(z.string(), z.unknown()).nullable(),
333
+ draft: z.record(z.string(), z.unknown()).nullable()
334
+ }).meta({ id: "ContentCompareResponse" });
335
+ /** Translation summary for a content item */
336
+ const contentTranslationSchema = z.object({
337
+ id: z.string(),
338
+ locale: z.string().nullable(),
339
+ slug: z.string().nullable(),
340
+ status: z.string(),
341
+ updatedAt: z.string()
342
+ });
343
+ /** Response for content translations endpoint */
344
+ const contentTranslationsResponseSchema = z.object({
345
+ translationGroup: z.string(),
346
+ translations: z.array(contentTranslationSchema)
347
+ }).meta({ id: "ContentTranslationsResponse" });
348
+
349
+ //#endregion
350
+ //#region src/api/schemas/media-usage.ts
351
+ const mediaUsageCoverageStatusSchema = z.enum([
352
+ "complete",
353
+ "never",
354
+ "running",
355
+ "partial",
356
+ "failed",
357
+ "stale",
358
+ "unknown"
359
+ ]).meta({ id: "MediaUsageCoverageStatus" });
360
+ const mediaUsageCoverageSchema = z.object({
361
+ scope: z.literal("all_content_collections"),
362
+ status: mediaUsageCoverageStatusSchema
363
+ }).meta({ id: "MediaUsageCoverage" });
364
+ const mediaUsageProgressSchema = z.object({
365
+ status: z.enum([
366
+ "indexing",
367
+ "ready",
368
+ "needs_attention"
369
+ ]),
370
+ readyCollections: z.number().int().min(0),
371
+ totalCollections: z.number().int().min(0)
372
+ }).meta({ id: "MediaUsageProgress" });
373
+ const mediaUsageSummarySchema = z.object({
374
+ count: z.number().int().min(0).nullable(),
375
+ coverage: mediaUsageCoverageSchema
376
+ }).meta({ id: "MediaUsageSummary" });
377
+ const mediaUsageDetailsQuery = z.object({
378
+ cursor: z.string().min(1).max(2048).optional().meta({ description: "Opaque content-entry-group cursor" }),
379
+ limit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({ description: "Maximum number of content entry groups to return (1-100, default 50)" })
380
+ });
381
+ const mediaUsageOccurrenceDetailSchema = z.object({
382
+ fieldSlug: z.string(),
383
+ fieldPath: z.string(),
384
+ occurrenceIndex: z.number().int().min(0),
385
+ referenceType: z.enum([
386
+ "image_field",
387
+ "file_field",
388
+ "portable_text_image",
389
+ "unknown"
390
+ ])
391
+ }).meta({ id: "MediaUsageOccurrenceDetail" });
392
+ const mediaUsageSourceDetailSchema = z.object({
393
+ variant: z.enum(["columns", "draft_overlay"]),
394
+ occurrences: z.array(mediaUsageOccurrenceDetailSchema)
395
+ }).meta({ id: "MediaUsageSourceDetail" });
396
+ const mediaUsageEntryDetailSchema = z.object({
397
+ collection: z.string(),
398
+ contentId: z.string(),
399
+ title: z.string().nullable(),
400
+ slug: z.string().nullable(),
401
+ locale: z.string().nullable(),
402
+ status: z.string().nullable(),
403
+ scheduledAt: z.string().nullable(),
404
+ deletedAt: z.string().nullable(),
405
+ sources: z.array(mediaUsageSourceDetailSchema)
406
+ }).meta({ id: "MediaUsageEntryDetail" });
407
+ const mediaUsageDetailsResponseSchema = z.object({
408
+ items: z.array(mediaUsageEntryDetailSchema),
409
+ nextCursor: z.string().optional(),
410
+ coverage: mediaUsageCoverageSchema
411
+ }).meta({ id: "MediaUsageDetailsResponse" });
412
+ const mediaUsageRepairStatusSchema = z.enum([
413
+ "complete",
414
+ "partial",
415
+ "failed",
416
+ "stale"
417
+ ]).meta({ id: "MediaUsageRepairStatus" });
418
+ const mediaUsageRepairCollectionBody = z.object({
419
+ scope: z.literal("collection"),
420
+ collection: z.string().min(1).max(63).regex(slugPattern, "Invalid collection slug")
421
+ }).strict();
422
+ const mediaUsageRepairAllBody = z.object({ scope: z.literal("all") }).strict();
423
+ const mediaUsageRepairBody = z.discriminatedUnion("scope", [mediaUsageRepairCollectionBody, mediaUsageRepairAllBody]).meta({ id: "MediaUsageRepairBody" });
424
+ const mediaUsageRepairCollectionSummarySchema = z.object({
425
+ collection: z.string(),
426
+ status: mediaUsageRepairStatusSchema,
427
+ indexedSourceCount: z.number().int().min(0),
428
+ failedSourceCount: z.number().int().min(0),
429
+ skippedSourceCount: z.number().int().min(0),
430
+ deletedSourceCount: z.number().int().min(0),
431
+ lastErrorCode: z.string().nullable(),
432
+ startedAt: z.string(),
433
+ completedAt: z.string().nullable()
434
+ }).meta({ id: "MediaUsageRepairCollectionSummary" });
435
+ const mediaUsageRepairResponseSchema = z.object({
436
+ status: mediaUsageRepairStatusSchema,
437
+ indexedSourceCount: z.number().int().min(0),
438
+ failedSourceCount: z.number().int().min(0),
439
+ skippedSourceCount: z.number().int().min(0),
440
+ deletedSourceCount: z.number().int().min(0),
441
+ collections: z.array(mediaUsageRepairCollectionSummarySchema)
442
+ }).meta({ id: "MediaUsageRepairResponse" });
443
+ const mediaUsageWorkStateSchema = z.enum([
444
+ "pending",
445
+ "retry",
446
+ "leased",
447
+ "failed"
448
+ ]).meta({ id: "MediaUsageWorkState" });
449
+ const mediaUsageWorkListQuery = z.object({
450
+ collection: z.string().min(1).max(63).regex(slugPattern, "Invalid collection slug"),
451
+ state: mediaUsageWorkStateSchema.optional(),
452
+ cursor: z.string().min(1).max(2048).optional().meta({ description: "Opaque work-page cursor" }),
453
+ limit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({ description: "Maximum number of work items to return (1-100, default 50)" })
454
+ });
455
+ const mediaUsageWorkItemSchema = z.object({
456
+ collectionId: z.string(),
457
+ collectionSlug: z.string(),
458
+ contentId: z.string(),
459
+ state: mediaUsageWorkStateSchema,
460
+ attemptCount: z.number().int().min(0),
461
+ nextAttemptAt: z.string(),
462
+ leaseExpiresAt: z.string().nullable(),
463
+ lastAttemptedAt: z.string().nullable(),
464
+ lastErrorCode: z.string().nullable(),
465
+ updatedAt: z.string()
466
+ }).meta({ id: "MediaUsageWorkItem" });
467
+ const mediaUsageWorkListResponseSchema = z.object({
468
+ items: z.array(mediaUsageWorkItemSchema),
469
+ nextCursor: z.string().optional()
470
+ }).meta({ id: "MediaUsageWorkListResponse" });
471
+ const boundedOpaqueMediaUsageId = z.string().min(1).max(2048);
472
+ const mediaUsageWorkRetryBody = z.object({
473
+ collectionId: boundedOpaqueMediaUsageId.meta({ description: "Current immutable collection identity" }),
474
+ contentId: boundedOpaqueMediaUsageId.meta({ description: "Content entry identity, including a deleted entry" })
475
+ }).strict().meta({ id: "MediaUsageWorkRetryBody" });
476
+ const mediaUsageWorkRetryResponseSchema = z.object({
477
+ changed: z.boolean(),
478
+ item: mediaUsageWorkItemSchema
479
+ }).meta({ id: "MediaUsageWorkRetryResponse" });
480
+ const mediaUsageWorkRetryConflictSchema = z.object({
481
+ success: z.literal(false),
482
+ error: z.discriminatedUnion("code", [z.object({
483
+ code: z.literal("WORK_LEASE_ACTIVE"),
484
+ message: z.string(),
485
+ details: z.object({ leaseExpiresAt: z.string() })
486
+ }), z.object({
487
+ code: z.literal("WORK_CHANGED"),
488
+ message: z.string()
489
+ })])
490
+ });
491
+ const mediaUsageActivationStateSchema = z.enum([
492
+ "expanded",
493
+ "activating",
494
+ "active"
495
+ ]).meta({ id: "MediaUsageActivationState" });
496
+ const mediaUsageActivationStatusSchema = z.object({
497
+ state: mediaUsageActivationStateSchema,
498
+ collectionCursor: z.string().nullable(),
499
+ attemptCount: z.number().int().min(0),
500
+ drainConfirmedAt: z.string().nullable(),
501
+ lastAttemptedAt: z.string().nullable(),
502
+ lastErrorCode: z.literal("MEDIA_USAGE_ACTIVATION_FAILED").nullable(),
503
+ leaseExpiresAt: z.string().nullable(),
504
+ activatedAt: z.string().nullable(),
505
+ updatedAt: z.string()
506
+ }).meta({ id: "MediaUsageActivationStatus" });
507
+ const mediaUsageActivationAdvanceBody = z.object({ writersDrained: z.literal(true) }).strict().meta({ id: "MediaUsageActivationAdvanceBody" });
508
+ const mediaUsageActivationAdvanceResponseSchema = z.object({
509
+ outcome: z.enum(["activating", "active"]),
510
+ processedCollections: z.number().int().min(0).max(1),
511
+ activation: mediaUsageActivationStatusSchema
512
+ }).meta({ id: "MediaUsageActivationAdvanceResponse" });
513
+ const mediaUsageProgressAdvanceResponseSchema = z.object({
514
+ activation: mediaUsageActivationStatusSchema,
515
+ progress: mediaUsageProgressSchema.nullable(),
516
+ nextRequestInMs: z.union([
517
+ z.literal(0),
518
+ z.literal(3e4),
519
+ z.null()
520
+ ])
521
+ }).meta({ id: "MediaUsageProgressAdvanceResponse" });
522
+ const mediaUsageActivationConflictSchema = z.object({
523
+ success: z.literal(false),
524
+ error: z.discriminatedUnion("code", [
525
+ z.object({
526
+ code: z.literal("MEDIA_USAGE_ACTIVATION_BUSY"),
527
+ message: z.string(),
528
+ details: z.object({ leaseExpiresAt: z.string() })
529
+ }),
530
+ z.object({
531
+ code: z.literal("MEDIA_USAGE_ACTIVATION_CONFLICT"),
532
+ message: z.string()
533
+ }),
534
+ z.object({
535
+ code: z.literal("MEDIA_USAGE_ACTIVATION_VERSION_MISMATCH"),
536
+ message: z.string()
537
+ })
538
+ ])
539
+ });
540
+ const mediaUsageCollectionDeletionStateSchema = z.enum([
541
+ "pending",
542
+ "retry",
543
+ "leased",
544
+ "failed"
545
+ ]).meta({ id: "MediaUsageCollectionDeletionState" });
546
+ const mediaUsageCollectionDeletionPhaseSchema = z.enum([
547
+ "fence",
548
+ "registry",
549
+ "table",
550
+ "work",
551
+ "sources",
552
+ "status",
553
+ "finalize"
554
+ ]).meta({ id: "MediaUsageCollectionDeletionPhase" });
555
+ const mediaUsageCollectionDeletionListQuery = z.object({
556
+ state: mediaUsageCollectionDeletionStateSchema.optional().default("failed"),
557
+ cursor: z.string().min(1).max(2048).optional(),
558
+ limit: z.coerce.number().int().min(1).max(100).optional().default(50)
559
+ }).meta({ id: "MediaUsageCollectionDeletionListQuery" });
560
+ const mediaUsageCollectionDeletionItemSchema = z.object({
561
+ collectionId: z.string(),
562
+ collectionSlug: z.string(),
563
+ state: mediaUsageCollectionDeletionStateSchema,
564
+ phase: mediaUsageCollectionDeletionPhaseSchema,
565
+ attemptCount: z.number().int().min(0),
566
+ nextAttemptAt: z.string(),
567
+ leaseExpiresAt: z.string().nullable(),
568
+ lastErrorCode: z.string().nullable(),
569
+ updatedAt: z.string()
570
+ }).meta({ id: "MediaUsageCollectionDeletionItem" });
571
+ const mediaUsageCollectionDeletionListResponseSchema = z.object({
572
+ items: z.array(mediaUsageCollectionDeletionItemSchema),
573
+ nextCursor: z.string().optional()
574
+ }).meta({ id: "MediaUsageCollectionDeletionListResponse" });
575
+ const mediaUsageCollectionDeletionRetryBody = z.object({ collectionId: boundedOpaqueMediaUsageId }).strict().meta({ id: "MediaUsageCollectionDeletionRetryBody" });
576
+ const mediaUsageCollectionDeletionRetryResponseSchema = z.object({
577
+ changed: z.boolean(),
578
+ item: mediaUsageCollectionDeletionItemSchema
579
+ }).meta({ id: "MediaUsageCollectionDeletionRetryResponse" });
580
+
581
+ //#endregion
582
+ //#region src/api/schemas/media.ts
583
+ /**
584
+ * Accepts a comma-separated string (from URL query params) or an array of
585
+ * strings (from JSON body or programmatic use) and normalises to string[].
586
+ */
587
+ const mimeTypeFilter = z.union([z.string(), z.array(z.string())]).transform((v) => {
588
+ return (Array.isArray(v) ? v : v.split(",")).map((s) => s.trim()).filter((s) => s.length > 0);
589
+ }).optional();
590
+ const mediaListQuery = cursorPaginationQuery.extend({
591
+ page: z.coerce.number().int().min(1).max(Number.MAX_SAFE_INTEGER).optional(),
592
+ mimeType: mimeTypeFilter,
593
+ folderId: z.union([z.literal("unfiled"), z.string().min(1).max(64)]).optional().meta({ description: "Filter by a media folder ID. Use `unfiled` for the Main library; omit for all media." }),
594
+ q: z.string().trim().min(1).max(200).optional(),
595
+ includeUsage: z.literal("1").optional().meta({ description: "Include a coverage-aware usage summary on each media item" })
596
+ }).refine(({ cursor, page }) => cursor === void 0 || page === void 0, {
597
+ message: "cursor and page cannot be used together",
598
+ path: ["page"]
599
+ }).meta({ id: "MediaListQuery" });
600
+ const mediaGetQuery = z.object({ includeUsage: z.literal("1").optional().meta({ description: "Include a coverage-aware usage summary on the media item" }) }).meta({ id: "MediaGetQuery" });
601
+ const mediaUpdateBody = z.object({
602
+ alt: z.string().optional(),
603
+ caption: z.string().optional(),
604
+ width: z.number().int().positive().optional(),
605
+ height: z.number().int().positive().optional(),
606
+ folderId: z.union([z.literal("unfiled"), z.string().min(1).max(64)]).nullable().optional().transform((value) => value === "unfiled" ? null : value).meta({ description: "Assign a media folder ID, or use null or `unfiled` to return the item to the Main library." }),
607
+ focalX: z.number().min(0).max(1).nullable().optional(),
608
+ focalY: z.number().min(0).max(1).nullable().optional()
609
+ }).superRefine((value, context) => {
610
+ if (!isValidFocalPointUpdate(value)) context.addIssue({
611
+ code: "custom",
612
+ message: "focalX and focalY must both be numbers or both be null",
613
+ path: ["focalX"]
614
+ });
615
+ }).meta({ id: "MediaUpdateBody" });
616
+ const mediaFolderIdSchema = z.string().min(1).max(64);
617
+ const mediaFolderListQuery = cursorPaginationQuery.extend({ q: z.string().trim().min(1).max(200).optional() }).meta({ id: "MediaFolderListQuery" });
618
+ const mediaFolderNameSchema = z.string().refine((value) => {
619
+ const length = value.trim().length;
620
+ return length >= 1 && length <= 200;
621
+ }, { message: "Folder name must be between 1 and 200 characters" });
622
+ const mediaFolderBody = z.object({ name: mediaFolderNameSchema }).meta({ id: "MediaFolderBody" });
623
+ /** Default maximum allowed file upload size (50 MB). */
624
+ const DEFAULT_MAX_UPLOAD_SIZE = 50 * 1024 * 1024;
625
+ function formatFileSize(bytes) {
626
+ if (bytes < 1024) return `${bytes}B`;
627
+ if (bytes < 1024 * 1024) return `${Math.floor(bytes / 1024)}KB`;
628
+ return `${Math.floor(bytes / 1024 / 1024)}MB`;
629
+ }
630
+ const CONTENT_TYPE_RE = /^[a-z0-9][a-z0-9!#$&^_+\-.]*\/[a-z0-9!#$&^_+\-.]+(\s*;[^\r\n]*)?$/i;
631
+ function mediaUploadUrlBody(maxSize) {
632
+ if (!Number.isFinite(maxSize) || maxSize <= 0) throw new Error(`EmDash: maxUploadSize must be a positive finite number, got ${maxSize}`);
633
+ return z.object({
634
+ filename: z.string().min(1, "filename is required"),
635
+ contentType: z.string().min(1, "contentType is required").regex(CONTENT_TYPE_RE, "Invalid content type"),
636
+ size: z.number().int().nonnegative().max(maxSize, `File size must not exceed ${formatFileSize(maxSize)}`),
637
+ contentHash: z.string().optional(),
638
+ fieldId: z.string().optional(),
639
+ deduplicate: z.boolean().optional(),
640
+ ensureUniqueFilename: z.boolean().optional(),
641
+ folderId: mediaFolderIdSchema.nullable().optional()
642
+ }).meta({ id: "MediaUploadUrlBody" });
643
+ }
644
+ const mediaUploadDeduplicateForm = z.enum(["true", "false"]).default("true").transform((value) => value === "true");
645
+ const mediaUploadEnsureUniqueFilenameForm = z.enum(["true", "false"]).default("false").transform((value) => value === "true");
646
+ const mediaReplaceMetadataForm = z.object({
647
+ width: z.coerce.number().int().positive().max(Number.MAX_SAFE_INTEGER),
648
+ height: z.coerce.number().int().positive().max(Number.MAX_SAFE_INTEGER)
649
+ });
650
+ const binaryFileSchema = z.string().meta({ format: "binary" });
651
+ const mediaDirectUploadBody = z.object({
652
+ file: binaryFileSchema,
653
+ width: z.string().optional(),
654
+ height: z.string().optional(),
655
+ thumbnail: binaryFileSchema.optional(),
656
+ fieldId: z.string().optional(),
657
+ deduplicate: z.enum(["true", "false"]).optional(),
658
+ ensureUniqueFilename: z.enum(["true", "false"]).optional(),
659
+ folderId: z.union([mediaFolderIdSchema, z.literal("unfiled")]).optional()
660
+ }).meta({ id: "MediaDirectUploadBody" });
661
+ const mediaReplaceBody = z.object({
662
+ file: binaryFileSchema,
663
+ width: z.number().int().positive(),
664
+ height: z.number().int().positive()
665
+ }).meta({ id: "MediaReplaceBody" });
666
+ const mediaConfirmBody = z.object({
667
+ size: z.number().int().nonnegative().optional(),
668
+ width: z.number().int().positive().optional(),
669
+ height: z.number().int().positive().optional()
670
+ }).meta({ id: "MediaConfirmBody" });
671
+ const mediaProviderListQuery = cursorPaginationQuery.extend({
672
+ query: z.string().optional(),
673
+ mimeType: mimeTypeFilter
674
+ }).meta({ id: "MediaProviderListQuery" });
675
+ const mediaStatusSchema = z.enum([
676
+ "pending",
677
+ "ready",
678
+ "failed"
679
+ ]);
680
+ const mediaItemSchema = z.object({
681
+ id: z.string(),
682
+ filename: z.string(),
683
+ mimeType: z.string(),
684
+ size: z.number().nullable(),
685
+ width: z.number().nullable(),
686
+ height: z.number().nullable(),
687
+ focalX: z.number().nullable(),
688
+ focalY: z.number().nullable(),
689
+ alt: z.string().nullable(),
690
+ caption: z.string().nullable(),
691
+ storageKey: z.string(),
692
+ status: mediaStatusSchema,
693
+ contentHash: z.string().nullable(),
694
+ blurhash: z.string().nullable(),
695
+ dominantColor: z.string().nullable(),
696
+ createdAt: z.string(),
697
+ authorId: z.string().nullable(),
698
+ folderId: z.string().nullable()
699
+ }).meta({ id: "MediaItem" });
700
+ const mediaFolderSchema = z.object({
701
+ id: z.string(),
702
+ name: z.string()
703
+ }).meta({ id: "MediaFolder" });
704
+ const mediaFolderResponseSchema = z.object({ item: mediaFolderSchema }).meta({ id: "MediaFolderResponse" });
705
+ const mediaFolderListResponseSchema = z.object({
706
+ items: z.array(mediaFolderSchema),
707
+ nextCursor: z.string().optional()
708
+ }).meta({ id: "MediaFolderListResponse" });
709
+ const mediaResponseSchema = z.object({ item: mediaItemSchema }).meta({ id: "MediaResponse" });
710
+ const mediaReadItemSchema = mediaItemSchema.extend({ usage: mediaUsageSummarySchema.optional() }).meta({ id: "MediaReadItem" });
711
+ const mediaReadResponseSchema = z.object({ item: mediaReadItemSchema }).meta({ id: "MediaReadResponse" });
712
+ const mediaListReadItemSchema = mediaReadItemSchema.extend({ url: z.string() }).meta({ id: "MediaListReadItem" });
713
+ const mediaListReadResponseSchema = z.object({
714
+ items: z.array(mediaListReadItemSchema),
715
+ nextCursor: z.string().optional(),
716
+ totalCount: z.number().int().nonnegative().optional()
717
+ }).meta({ id: "MediaListReadResponse" });
718
+ const mediaListResponseSchema = z.object({
719
+ items: z.array(mediaItemSchema),
720
+ nextCursor: z.string().optional(),
721
+ totalCount: z.number().int().nonnegative().optional()
722
+ }).meta({ id: "MediaListResponse" });
723
+ const mediaUploadUrlResponseSchema = z.object({
724
+ uploadUrl: z.string(),
725
+ method: z.literal("PUT"),
726
+ headers: z.record(z.string(), z.string()),
727
+ mediaId: z.string(),
728
+ storageKey: z.string(),
729
+ expiresAt: z.string()
730
+ }).meta({ id: "MediaUploadUrlResponse" });
731
+ const mediaExistingResponseSchema = z.object({
732
+ existing: z.literal(true),
733
+ mediaId: z.string(),
734
+ storageKey: z.string(),
735
+ url: z.string()
736
+ }).meta({ id: "MediaExistingResponse" });
737
+ const mediaConfirmResponseSchema = z.object({ item: mediaItemSchema.extend({ url: z.string() }) }).meta({ id: "MediaConfirmResponse" });
738
+ const mediaUploadResponseSchema = z.object({
739
+ item: mediaItemSchema.extend({ url: z.string() }),
740
+ deduplicated: z.literal(true).optional()
741
+ }).meta({ id: "MediaUploadResponse" });
742
+ const mediaReplaceResponseSchema = z.object({ item: mediaItemSchema.extend({ url: z.string() }) }).meta({ id: "MediaReplaceResponse" });
743
+ const mediaStreamUploadResponseSchema = z.object({
744
+ uploaded: z.literal(true),
745
+ size: z.number().int().nonnegative()
746
+ }).meta({ id: "MediaStreamUploadResponse" });
747
+
748
+ //#endregion
749
+ //#region src/api/schemas/schema.ts
750
+ const collectionSupportValues = z.enum([
751
+ "drafts",
752
+ "revisions",
753
+ "preview",
754
+ "scheduling",
755
+ "search",
756
+ "seo"
757
+ ]);
758
+ const collectionSourcePattern = /^(template:.+|import:.+|manual|discovered|seed)$/;
759
+ const collectionListColumns = z.array(z.string().min(1).max(63).regex(slugPattern, "Invalid field slug format"));
760
+ const collectionAdminInputConfig = z.object({ listColumns: collectionListColumns.max(MAX_COLLECTION_LIST_COLUMNS, `At most ${MAX_COLLECTION_LIST_COLUMNS} list columns are allowed`).optional() });
761
+ const collectionAdminResponseConfig = z.object({ listColumns: collectionListColumns.optional() });
762
+ const fieldTypeValues = z.enum([
763
+ "string",
764
+ "text",
765
+ "url",
766
+ "number",
767
+ "integer",
768
+ "boolean",
769
+ "datetime",
770
+ "select",
771
+ "multiSelect",
772
+ "portableText",
773
+ "image",
774
+ "file",
775
+ "reference",
776
+ "json",
777
+ "slug",
778
+ "repeater"
779
+ ]);
780
+ const repeaterSubFieldSchema = z.object({
781
+ slug: z.string().min(1).max(63).regex(slugPattern, "Invalid slug format"),
782
+ type: z.enum([
783
+ "string",
784
+ "text",
785
+ "url",
786
+ "number",
787
+ "integer",
788
+ "boolean",
789
+ "datetime",
790
+ "select",
791
+ "image"
792
+ ]),
793
+ label: z.string().min(1),
794
+ required: z.boolean().optional(),
795
+ options: z.array(z.string()).optional()
796
+ });
797
+ const urlPatternValue = z.string().superRefine((pattern, ctx) => {
798
+ try {
799
+ compileUrlPattern(pattern);
800
+ } catch {
801
+ ctx.addIssue({
802
+ code: "custom",
803
+ message: "Invalid URL pattern"
804
+ });
805
+ }
806
+ });
807
+ const fieldValidation = z.object({
808
+ required: z.boolean().optional(),
809
+ min: z.number().optional(),
810
+ max: z.number().optional(),
811
+ minLength: z.number().int().min(0).optional(),
812
+ maxLength: z.number().int().min(0).optional(),
813
+ pattern: z.string().optional(),
814
+ options: z.array(z.string()).optional(),
815
+ subFields: z.array(repeaterSubFieldSchema).min(1).optional(),
816
+ minItems: z.number().int().min(0).optional(),
817
+ maxItems: z.number().int().min(1).optional(),
818
+ allowedMimeTypes: z.array(z.string().regex(/^[a-z0-9][a-z0-9!#$&^_+\-.]*\/[a-z0-9!#$&^_+\-.]*$/i, "Invalid MIME type")).min(1, "allowedMimeTypes must not be empty — omit the field to allow all types").max(64, "allowedMimeTypes may contain at most 64 entries").optional()
819
+ }).superRefine((validation, ctx) => {
820
+ for (const [minimum, maximum] of [
821
+ ["min", "max"],
822
+ ["minLength", "maxLength"],
823
+ ["minItems", "maxItems"]
824
+ ]) {
825
+ const minimumValue = validation[minimum];
826
+ const maximumValue = validation[maximum];
827
+ if (minimumValue !== void 0 && maximumValue !== void 0 && minimumValue > maximumValue) ctx.addIssue({
828
+ code: "custom",
829
+ path: [maximum],
830
+ message: `${maximum} must be greater than or equal to ${minimum}`
831
+ });
832
+ }
833
+ if (validation.pattern !== void 0) try {
834
+ RegExp(validation.pattern);
835
+ } catch {
836
+ ctx.addIssue({
837
+ code: "custom",
838
+ path: ["pattern"],
839
+ message: "Invalid validation pattern"
840
+ });
841
+ }
842
+ }).optional();
843
+ const fieldWidgetOptions = z.record(z.string(), z.unknown()).optional();
844
+ /** Admin sidebar folder label; an empty string clears it like `null`. */
845
+ const navGroupValue = z.string().trim().max(MAX_COLLECTION_GROUP_LENGTH);
846
+ const createCollectionBody = z.object({
847
+ slug: z.string().min(1).max(63).regex(slugPattern, "Invalid slug format"),
848
+ label: z.string().min(1),
849
+ labelSingular: z.string().optional(),
850
+ description: z.string().optional(),
851
+ icon: z.string().optional(),
852
+ admin: collectionAdminInputConfig.optional(),
853
+ supports: z.array(collectionSupportValues).optional(),
854
+ source: z.string().regex(collectionSourcePattern).optional(),
855
+ urlPattern: urlPatternValue.optional(),
856
+ routable: z.boolean().optional(),
857
+ hasSeo: z.boolean().optional(),
858
+ hidden: z.boolean().optional(),
859
+ sortOrder: z.number().int().nullish(),
860
+ editLocking: z.boolean().optional(),
861
+ group: navGroupValue.nullish()
862
+ }).meta({ id: "CreateCollectionBody" });
863
+ const updateCollectionBody = z.object({
864
+ label: z.string().min(1).optional(),
865
+ labelSingular: z.string().optional(),
866
+ description: z.string().optional(),
867
+ icon: z.string().optional(),
868
+ admin: collectionAdminInputConfig.optional(),
869
+ supports: z.array(collectionSupportValues).optional(),
870
+ urlPattern: urlPatternValue.nullish(),
871
+ routable: z.boolean().optional(),
872
+ hasSeo: z.boolean().optional(),
873
+ hidden: z.boolean().optional(),
874
+ sortOrder: z.number().int().nullish(),
875
+ group: navGroupValue.nullish(),
876
+ commentsEnabled: z.boolean().optional(),
877
+ commentsModeration: z.enum([
878
+ "all",
879
+ "first_time",
880
+ "none"
881
+ ]).optional(),
882
+ commentsClosedAfterDays: z.number().int().min(0).optional(),
883
+ commentsAutoApproveUsers: z.boolean().optional(),
884
+ editLocking: z.boolean().optional(),
885
+ titleField: z.string().min(1).max(63).regex(slugPattern, "Invalid field slug format").nullish(),
886
+ dateField: z.string().min(1).max(63).regex(slugPattern, "Invalid field slug format").nullish()
887
+ }).meta({ id: "UpdateCollectionBody" });
888
+ const createFieldBody = z.object({
889
+ slug: z.string().min(1).max(63).regex(slugPattern, "Invalid slug format"),
890
+ label: z.string().min(1),
891
+ type: fieldTypeValues,
892
+ required: z.boolean().optional(),
893
+ unique: z.boolean().optional(),
894
+ defaultValue: z.unknown().optional(),
895
+ validation: fieldValidation.nullable(),
896
+ widget: z.string().optional(),
897
+ options: fieldWidgetOptions,
898
+ sortOrder: z.number().int().min(0).optional(),
899
+ searchable: z.boolean().optional(),
900
+ indexed: z.boolean().optional(),
901
+ translatable: z.boolean().optional()
902
+ }).meta({ id: "CreateFieldBody" });
903
+ const updateFieldBody = z.object({
904
+ label: z.string().min(1).optional(),
905
+ type: fieldTypeValues.optional(),
906
+ required: z.boolean().optional(),
907
+ unique: z.boolean().optional(),
908
+ defaultValue: z.unknown().optional(),
909
+ validation: fieldValidation.nullable(),
910
+ widget: z.string().optional(),
911
+ options: fieldWidgetOptions,
912
+ sortOrder: z.number().int().min(0).optional(),
913
+ searchable: z.boolean().optional(),
914
+ indexed: z.boolean().optional(),
915
+ translatable: z.boolean().optional()
916
+ }).meta({ id: "UpdateFieldBody" });
917
+ const fieldReorderBody = z.object({ fieldSlugs: z.array(z.string().min(1)) }).meta({ id: "FieldReorderBody" });
918
+ const collectionReorderBody = z.object({ slugs: z.array(z.string().min(1)) }).meta({ id: "CollectionReorderBody" });
919
+ const orphanRegisterBody = z.object({
920
+ label: z.string().optional(),
921
+ labelSingular: z.string().optional(),
922
+ description: z.string().optional()
923
+ }).meta({ id: "OrphanRegisterBody" });
924
+ const schemaExportQuery = z.object({ format: z.string().optional() });
925
+ const collectionGetQuery = z.object({ includeFields: z.string().transform((v) => v === "true").optional() });
926
+ const collectionSchema = z.object({
927
+ id: z.string(),
928
+ slug: z.string(),
929
+ label: z.string(),
930
+ labelSingular: z.string().nullable(),
931
+ description: z.string().nullable(),
932
+ icon: z.string().nullable(),
933
+ admin: collectionAdminResponseConfig.optional(),
934
+ supports: z.array(z.string()),
935
+ source: z.string().nullable(),
936
+ urlPattern: z.string().nullable(),
937
+ routable: z.boolean(),
938
+ hasSeo: z.boolean(),
939
+ hidden: z.boolean(),
940
+ sortOrder: z.number().int().nullable(),
941
+ editLocking: z.boolean(),
942
+ group: z.string().nullish(),
943
+ createdAt: z.string(),
944
+ updatedAt: z.string(),
945
+ titleField: z.string().nullish(),
946
+ dateField: z.string().nullish()
947
+ }).meta({ id: "Collection" });
948
+ const fieldSchema = z.object({
949
+ id: z.string(),
950
+ collectionId: z.string(),
951
+ slug: z.string(),
952
+ label: z.string(),
953
+ type: fieldTypeValues,
954
+ required: z.boolean(),
955
+ unique: z.boolean(),
956
+ defaultValue: z.unknown().nullable(),
957
+ validation: z.record(z.string(), z.unknown()).nullable(),
958
+ widget: z.string().nullable(),
959
+ options: z.record(z.string(), z.unknown()).nullable(),
960
+ sortOrder: z.number().int(),
961
+ searchable: z.boolean(),
962
+ indexed: z.boolean(),
963
+ translatable: z.boolean(),
964
+ createdAt: z.string(),
965
+ updatedAt: z.string()
966
+ }).meta({ id: "Field" });
967
+ const collectionResponseSchema = z.object({ item: collectionSchema }).meta({ id: "CollectionResponse" });
968
+ const collectionWithFieldsResponseSchema = z.object({ item: collectionSchema.extend({ fields: z.array(fieldSchema) }) }).meta({ id: "CollectionWithFieldsResponse" });
969
+ const collectionListResponseSchema = z.object({ items: z.array(collectionSchema) }).meta({ id: "CollectionListResponse" });
970
+ const fieldResponseSchema = z.object({ item: fieldSchema }).meta({ id: "FieldResponse" });
971
+ const fieldListResponseSchema = z.object({ items: z.array(fieldSchema) }).meta({ id: "FieldListResponse" });
972
+ const orphanedTableSchema = z.object({
973
+ slug: z.string(),
974
+ tableName: z.string(),
975
+ rowCount: z.number().int()
976
+ }).meta({ id: "OrphanedTable" });
977
+ const orphanedTableListResponseSchema = z.object({ items: z.array(orphanedTableSchema) }).meta({ id: "OrphanedTableListResponse" });
978
+
979
+ //#endregion
980
+ //#region src/utils/url.ts
981
+ /**
982
+ * URL scheme validation utilities
983
+ *
984
+ * Prevents XSS via dangerous URL schemes (javascript:, data:, vbscript:, etc.)
985
+ * by allowlisting known-safe schemes before rendering into href attributes.
986
+ */
987
+ /**
988
+ * Matches URLs that are safe to render in href attributes.
989
+ *
990
+ * Allowed:
991
+ * - http:// and https://
992
+ * - mailto: and tel:
993
+ * - Relative paths (starting with /)
994
+ * - Fragment links (starting with #)
995
+ * - Protocol-relative URLs are NOT allowed (starting with //) as they can
996
+ * redirect to attacker-controlled hosts.
997
+ */
998
+ const SAFE_URL_SCHEME_RE = /^(https?:|mailto:|tel:|\/(?!\/)|#)/i;
999
+ /**
1000
+ * Returns the URL unchanged if it uses a safe scheme, otherwise returns "#".
1001
+ *
1002
+ * Use this at the render layer as the primary defense against XSS via
1003
+ * dangerous URL schemes like `javascript:`, `data:`, or `vbscript:`.
1004
+ *
1005
+ * @example
1006
+ * ```ts
1007
+ * sanitizeHref("https://example.com") // "https://example.com"
1008
+ * sanitizeHref("/about") // "/about"
1009
+ * sanitizeHref("#section") // "#section"
1010
+ * sanitizeHref("mailto:a@b.com") // "mailto:a@b.com"
1011
+ * sanitizeHref("javascript:alert(1)") // "#"
1012
+ * sanitizeHref("data:text/html,<script>") // "#"
1013
+ * sanitizeHref("") // "#"
1014
+ * ```
1015
+ */
1016
+ function sanitizeHref(url) {
1017
+ if (!url) return "#";
1018
+ return SAFE_URL_SCHEME_RE.test(url) ? url : "#";
1019
+ }
1020
+ /**
1021
+ * Returns true if the URL uses a safe scheme for rendering in href attributes.
1022
+ */
1023
+ function isSafeHref(url) {
1024
+ return SAFE_URL_SCHEME_RE.test(url);
1025
+ }
1026
+
1027
+ //#endregion
1028
+ //#region src/api/schemas/menus.ts
1029
+ /**
1030
+ * Allowed menu item types. `custom` uses `customUrl`; the others resolve a URL
1031
+ * from `referenceCollection` + `referenceId` (a translation_group id).
1032
+ */
1033
+ const menuItemTypeEnum = z.enum([
1034
+ "custom",
1035
+ "page",
1036
+ "post",
1037
+ "taxonomy",
1038
+ "collection"
1039
+ ]);
1040
+ const safeHref = z.string().trim().refine(isSafeHref, "URL must use http, https, mailto, tel, a relative path, or a fragment identifier");
1041
+ const createMenuBody = z.object({
1042
+ name: z.string().min(1),
1043
+ label: z.string().min(1),
1044
+ locale: localeCode.optional(),
1045
+ translationOf: z.string().min(1).optional()
1046
+ }).strict().meta({ id: "CreateMenuBody" });
1047
+ const updateMenuBody = z.object({ label: z.string().min(1).optional() }).strict().meta({ id: "UpdateMenuBody" });
1048
+ const createMenuItemBody = z.object({
1049
+ type: menuItemTypeEnum,
1050
+ label: z.string().min(1),
1051
+ referenceCollection: z.string().optional(),
1052
+ referenceId: z.string().optional(),
1053
+ customUrl: safeHref.optional(),
1054
+ target: z.string().optional(),
1055
+ titleAttr: z.string().optional(),
1056
+ cssClasses: z.string().optional(),
1057
+ parentId: z.string().optional(),
1058
+ sortOrder: z.number().int().min(0).optional()
1059
+ }).strict().meta({ id: "CreateMenuItemBody" });
1060
+ const updateMenuItemBody = z.object({
1061
+ label: z.string().min(1).optional(),
1062
+ customUrl: safeHref.optional(),
1063
+ target: z.string().optional(),
1064
+ titleAttr: z.string().optional(),
1065
+ cssClasses: z.string().optional(),
1066
+ parentId: z.string().nullish(),
1067
+ sortOrder: z.number().int().min(0).optional()
1068
+ }).strict().meta({ id: "UpdateMenuItemBody" });
1069
+ const reorderMenuItemsBody = z.object({ items: z.array(z.object({
1070
+ id: z.string().min(1),
1071
+ parentId: z.string().nullable(),
1072
+ sortOrder: z.number().int().min(0)
1073
+ })) }).meta({ id: "ReorderMenuItemsBody" });
1074
+ const menuSchema = z.object({
1075
+ id: z.string(),
1076
+ name: z.string(),
1077
+ label: z.string(),
1078
+ createdAt: z.string(),
1079
+ updatedAt: z.string(),
1080
+ locale: z.string(),
1081
+ translationGroup: z.string().nullable()
1082
+ }).meta({ id: "Menu" });
1083
+ const menuItemSchema = z.object({
1084
+ id: z.string(),
1085
+ menuId: z.string(),
1086
+ parentId: z.string().nullable(),
1087
+ sortOrder: z.number().int(),
1088
+ type: z.string(),
1089
+ referenceCollection: z.string().nullable(),
1090
+ referenceId: z.string().nullable(),
1091
+ customUrl: z.string().nullable(),
1092
+ label: z.string(),
1093
+ titleAttr: z.string().nullable(),
1094
+ target: z.string().nullable(),
1095
+ cssClasses: z.string().nullable(),
1096
+ createdAt: z.string(),
1097
+ locale: z.string(),
1098
+ translationGroup: z.string().nullable()
1099
+ }).meta({ id: "MenuItem" });
1100
+ const menuTranslationsSchema = z.object({
1101
+ translationGroup: z.string().nullable(),
1102
+ translations: z.array(z.object({
1103
+ id: z.string(),
1104
+ name: z.string(),
1105
+ label: z.string(),
1106
+ locale: z.string(),
1107
+ updatedAt: z.string()
1108
+ }))
1109
+ }).meta({ id: "MenuTranslations" });
1110
+ const menuListItemSchema = menuSchema.extend({ itemCount: z.number().int() }).meta({ id: "MenuListItem" });
1111
+ const menuWithItemsSchema = menuSchema.extend({ items: z.array(menuItemSchema) }).meta({ id: "MenuWithItems" });
1112
+
1113
+ //#endregion
1114
+ //#region src/api/schemas/taxonomies.ts
1115
+ const collectionSlug = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/, "Invalid collection slug format");
1116
+ const createTaxonomyDefBody = z.object({
1117
+ name: z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/, "Name must be lowercase alphanumeric with underscores"),
1118
+ label: z.string().min(1).max(200),
1119
+ labelSingular: z.string().min(1).max(200).optional(),
1120
+ hierarchical: z.boolean().optional(),
1121
+ collections: z.array(collectionSlug).max(100).optional(),
1122
+ locale: localeCode.optional(),
1123
+ translationOf: z.string().min(1).optional()
1124
+ }).meta({ id: "CreateTaxonomyDefBody" });
1125
+ /**
1126
+ * `name` and `locale` are absent on purpose: both identify the definition row
1127
+ * being written, and `.strict()` turns an attempt to change either into a 400
1128
+ * rather than a silently ignored field.
1129
+ */
1130
+ const updateTaxonomyDefBody = z.object({
1131
+ label: z.string().min(1).max(200).optional(),
1132
+ labelSingular: z.string().min(1).max(200).nullish(),
1133
+ hierarchical: z.boolean().optional(),
1134
+ collections: z.array(collectionSlug).max(100).optional()
1135
+ }).strict().meta({ id: "UpdateTaxonomyDefBody" });
1136
+ const createTermBody = z.object({
1137
+ slug: z.string().min(1).optional().meta({ description: "Term slug. Omit to derive a unique slug from the label." }),
1138
+ label: z.string().min(1),
1139
+ parentId: z.string().nullish(),
1140
+ description: z.string().optional(),
1141
+ locale: localeCode.optional(),
1142
+ translationOf: z.string().min(1).optional()
1143
+ }).meta({ id: "CreateTermBody" });
1144
+ const updateTermBody = z.object({
1145
+ slug: z.string().min(1).optional(),
1146
+ label: z.string().min(1).optional(),
1147
+ parentId: z.string().nullish(),
1148
+ description: z.string().optional()
1149
+ }).meta({ id: "UpdateTermBody" });
1150
+ const reorderTermsBody = z.object({
1151
+ parentId: z.string().min(1).nullish().meta({ description: "Parent term whose children are being ordered (translation_group or row id). Omit or null for the top level, which for a flat taxonomy is every term." }),
1152
+ ids: z.array(z.string().min(1)).max(100).meta({ description: "Terms to move, in the desired order — each a row id or translation_group. May be a subset of the group: the listed terms are permuted within the positions they already occupy and every other member keeps its place. An id outside the group is rejected with REORDER_MISMATCH." })
1153
+ }).strict().meta({ id: "ReorderTermsBody" });
1154
+ const termListQuery = z.object({
1155
+ locale: localeCode.optional(),
1156
+ includeCounts: z.enum(["true", "false"]).transform((v) => v === "true").optional().default(true).meta({ description: "Include each term's visible-usage count. Pass false to skip the aggregate; `count` is then absent from every term." }),
1157
+ resolveFallback: z.enum(["true", "false"]).transform((value) => value === "true").optional().default(false).meta({ description: "Resolve one term per translation group, preferring the requested locale and then the configured default locale." })
1158
+ }).meta({ id: "TermListQuery" });
1159
+ const taxonomyDefSchema = z.object({
1160
+ id: z.string(),
1161
+ name: z.string(),
1162
+ label: z.string(),
1163
+ labelSingular: z.string().optional(),
1164
+ hierarchical: z.boolean(),
1165
+ collections: z.array(z.string()),
1166
+ locale: z.string(),
1167
+ translationGroup: z.string().nullable()
1168
+ }).meta({ id: "TaxonomyDef" });
1169
+ const taxonomyDefTranslationsSchema = z.object({
1170
+ translationGroup: z.string().nullable(),
1171
+ translations: z.array(z.object({
1172
+ id: z.string(),
1173
+ name: z.string(),
1174
+ label: z.string(),
1175
+ locale: z.string()
1176
+ }))
1177
+ }).meta({ id: "TaxonomyDefTranslations" });
1178
+ const taxonomyListResponseSchema = z.object({ taxonomies: z.array(taxonomyDefSchema) }).meta({ id: "TaxonomyListResponse" });
1179
+ const taxonomyResponseSchema = z.object({ taxonomy: taxonomyDefSchema }).meta({ id: "TaxonomyResponse" });
1180
+ const termSchema = z.object({
1181
+ id: z.string(),
1182
+ name: z.string(),
1183
+ slug: z.string(),
1184
+ label: z.string(),
1185
+ parentId: z.string().nullable(),
1186
+ description: z.string().optional(),
1187
+ locale: z.string(),
1188
+ translationGroup: z.string().nullable()
1189
+ }).meta({ id: "Term" });
1190
+ const termTranslationsSchema = z.object({
1191
+ translationGroup: z.string().nullable(),
1192
+ translations: z.array(z.object({
1193
+ id: z.string(),
1194
+ slug: z.string(),
1195
+ label: z.string(),
1196
+ locale: z.string()
1197
+ }))
1198
+ }).meta({ id: "TermTranslations" });
1199
+ const termWithCountSchema = z.object({
1200
+ id: z.string(),
1201
+ name: z.string(),
1202
+ slug: z.string(),
1203
+ label: z.string(),
1204
+ parentId: z.string().nullable(),
1205
+ description: z.string().optional(),
1206
+ count: z.number().int().optional(),
1207
+ children: z.array(z.lazy(() => termWithCountSchema)),
1208
+ locale: z.string(),
1209
+ translationGroup: z.string().nullable()
1210
+ }).meta({ id: "TermWithCount" });
1211
+ const termListResponseSchema = z.object({ terms: z.array(termWithCountSchema) }).meta({ id: "TermListResponse" });
1212
+ const termResponseSchema = z.object({ term: termSchema }).meta({ id: "TermResponse" });
1213
+ const termReorderResponseSchema = z.object({ reordered: z.literal(true) }).meta({ id: "TermReorderResponse" });
1214
+ const termGetResponseSchema = z.object({ term: termSchema.extend({
1215
+ count: z.number().int(),
1216
+ children: z.array(z.object({
1217
+ id: z.string(),
1218
+ slug: z.string(),
1219
+ label: z.string()
1220
+ }))
1221
+ }) }).meta({ id: "TermGetResponse" });
1222
+
1223
+ //#endregion
1224
+ //#region src/api/schemas/sections.ts
1225
+ const sectionSource = z.enum([
1226
+ "theme",
1227
+ "user",
1228
+ "import"
1229
+ ]);
1230
+ const sectionsListQuery = z.object({
1231
+ source: sectionSource.optional(),
1232
+ search: z.string().optional(),
1233
+ limit: z.coerce.number().int().min(1).max(100).optional().default(50),
1234
+ cursor: z.string().max(2048).optional()
1235
+ }).meta({ id: "SectionsListQuery" });
1236
+ const createSectionBody = z.object({
1237
+ slug: z.string().min(1),
1238
+ title: z.string().min(1),
1239
+ description: z.string().optional(),
1240
+ keywords: z.array(z.string()).optional(),
1241
+ content: z.array(z.record(z.string(), z.unknown())),
1242
+ previewMediaId: z.string().optional(),
1243
+ source: z.enum(["user", "import"]).optional(),
1244
+ themeId: z.string().optional()
1245
+ }).meta({ id: "CreateSectionBody" });
1246
+ const updateSectionBody = z.object({
1247
+ slug: z.string().min(1).optional(),
1248
+ title: z.string().min(1).optional(),
1249
+ description: z.string().optional(),
1250
+ keywords: z.array(z.string()).optional(),
1251
+ content: z.array(z.record(z.string(), z.unknown())).optional(),
1252
+ previewMediaId: z.string().nullish()
1253
+ }).meta({ id: "UpdateSectionBody" });
1254
+ const sectionSchema = z.object({
1255
+ id: z.string(),
1256
+ slug: z.string(),
1257
+ title: z.string(),
1258
+ description: z.string().nullable(),
1259
+ keywords: z.array(z.string()).nullable(),
1260
+ content: z.array(z.record(z.string(), z.unknown())),
1261
+ previewMediaId: z.string().nullable(),
1262
+ source: z.string(),
1263
+ themeId: z.string().nullable(),
1264
+ createdAt: z.string(),
1265
+ updatedAt: z.string()
1266
+ }).meta({ id: "Section" });
1267
+ const sectionListResponseSchema = z.object({
1268
+ items: z.array(sectionSchema),
1269
+ nextCursor: z.string().optional()
1270
+ }).meta({ id: "SectionListResponse" });
1271
+
1272
+ //#endregion
1273
+ //#region src/api/schemas/settings.ts
1274
+ const mediaReferenceInput = z.object({
1275
+ mediaId: z.string(),
1276
+ alt: z.string().optional()
1277
+ });
1278
+ const socialSettings = z.object({
1279
+ twitter: z.string().optional(),
1280
+ github: z.string().optional(),
1281
+ facebook: z.string().optional(),
1282
+ instagram: z.string().optional(),
1283
+ linkedin: z.string().optional(),
1284
+ youtube: z.string().optional()
1285
+ });
1286
+ const seoSettingsInput = z.object({
1287
+ titleSeparator: z.string().max(10).optional(),
1288
+ defaultOgImage: mediaReferenceInput.optional(),
1289
+ robotsTxt: z.string().max(5e3).optional(),
1290
+ googleVerification: z.string().max(100).optional(),
1291
+ bingVerification: z.string().max(100).optional()
1292
+ });
1293
+ const settingsUpdateBody = z.object({
1294
+ title: z.string().optional(),
1295
+ tagline: z.string().optional(),
1296
+ logo: mediaReferenceInput.optional(),
1297
+ favicon: mediaReferenceInput.optional(),
1298
+ url: z.union([httpUrl, z.literal("")]).optional(),
1299
+ postsPerPage: z.number().int().min(1).max(100).optional(),
1300
+ dateFormat: z.string().optional(),
1301
+ timezone: z.string().optional(),
1302
+ social: socialSettings.optional(),
1303
+ seo: seoSettingsInput.optional()
1304
+ }).meta({ id: "SettingsUpdateBody" });
1305
+ const mediaReferenceResponse = z.object({
1306
+ mediaId: z.string(),
1307
+ alt: z.string().optional(),
1308
+ url: z.string().optional(),
1309
+ contentType: z.string().optional(),
1310
+ width: z.number().int().optional(),
1311
+ height: z.number().int().optional()
1312
+ });
1313
+ const seoSettingsResponse = z.object({
1314
+ titleSeparator: z.string().max(10).optional(),
1315
+ defaultOgImage: mediaReferenceResponse.optional(),
1316
+ robotsTxt: z.string().max(5e3).optional(),
1317
+ googleVerification: z.string().max(100).optional(),
1318
+ bingVerification: z.string().max(100).optional()
1319
+ });
1320
+ const siteSettingsSchema = z.object({
1321
+ title: z.string().optional(),
1322
+ tagline: z.string().optional(),
1323
+ logo: mediaReferenceResponse.optional(),
1324
+ favicon: mediaReferenceResponse.optional(),
1325
+ url: z.string().optional(),
1326
+ postsPerPage: z.number().int().optional(),
1327
+ dateFormat: z.string().optional(),
1328
+ timezone: z.string().optional(),
1329
+ social: socialSettings.optional(),
1330
+ seo: seoSettingsResponse.optional()
1331
+ }).meta({ id: "SiteSettings" });
1332
+
1333
+ //#endregion
1334
+ //#region src/api/schemas/search.ts
1335
+ const searchQuery = z.object({
1336
+ q: z.string().min(1),
1337
+ collections: z.string().optional(),
1338
+ status: z.string().optional(),
1339
+ locale: localeCode.optional(),
1340
+ limit: z.coerce.number().int().min(1).max(100).optional(),
1341
+ cursor: z.string().optional(),
1342
+ scope: z.enum(["all", "title"]).optional().meta({ description: "Which indexed fields to match against. 'title' matches only the collection's title field; collections without an indexed title field return no results. Defaults to 'all'." })
1343
+ }).meta({ id: "SearchQuery" });
1344
+ const searchSuggestQuery = z.object({
1345
+ q: z.string().min(1),
1346
+ collections: z.string().optional(),
1347
+ locale: localeCode.optional(),
1348
+ limit: z.coerce.number().int().min(1).max(20).optional()
1349
+ }).meta({ id: "SearchSuggestQuery" });
1350
+ const searchRebuildBody = z.object({ collection: z.string().min(1) }).meta({ id: "SearchRebuildBody" });
1351
+ const searchEnableBody = z.object({
1352
+ collection: z.string().min(1),
1353
+ enabled: z.boolean(),
1354
+ weights: z.record(z.string(), z.number()).optional(),
1355
+ tokenize: z.enum(SEARCH_TOKENIZERS).optional()
1356
+ }).meta({ id: "SearchEnableBody" });
1357
+ const searchResultSchema = z.object({
1358
+ collection: z.string(),
1359
+ id: z.string(),
1360
+ slug: z.string().nullable(),
1361
+ locale: z.string(),
1362
+ title: z.string().optional(),
1363
+ snippet: z.string().optional(),
1364
+ score: z.number()
1365
+ }).meta({ id: "SearchResult" });
1366
+ const searchResponseSchema = z.object({
1367
+ items: z.array(searchResultSchema),
1368
+ nextCursor: z.string().optional()
1369
+ }).meta({ id: "SearchResponse" });
1370
+
1371
+ //#endregion
1372
+ //#region src/api/schemas/users.ts
1373
+ const usersListQuery = z.object({
1374
+ search: z.string().optional(),
1375
+ role: z.string().optional(),
1376
+ cursor: z.string().max(2048).optional(),
1377
+ limit: z.coerce.number().int().min(1).max(100).optional().default(50)
1378
+ }).meta({ id: "UsersListQuery" });
1379
+ const userUpdateBody = z.object({
1380
+ name: z.string().optional(),
1381
+ email: z.email().optional(),
1382
+ role: roleLevel.optional()
1383
+ }).meta({ id: "UserUpdateBody" });
1384
+ const allowedDomainCreateBody = z.object({
1385
+ domain: z.string().min(1),
1386
+ defaultRole: roleLevel
1387
+ }).meta({ id: "AllowedDomainCreateBody" });
1388
+ const allowedDomainUpdateBody = z.object({
1389
+ enabled: z.boolean().optional(),
1390
+ defaultRole: roleLevel.optional()
1391
+ }).meta({ id: "AllowedDomainUpdateBody" });
1392
+ const userSchema = z.object({
1393
+ id: z.string(),
1394
+ email: z.string(),
1395
+ name: z.string().nullable(),
1396
+ avatarUrl: z.string().nullable(),
1397
+ role: z.number().int(),
1398
+ emailVerified: z.boolean(),
1399
+ disabled: z.boolean(),
1400
+ createdAt: z.string(),
1401
+ updatedAt: z.string(),
1402
+ lastLogin: z.string().nullable(),
1403
+ credentialCount: z.number().int().optional(),
1404
+ oauthProviders: z.array(z.string()).optional()
1405
+ }).meta({ id: "User" });
1406
+ const userListResponseSchema = z.object({
1407
+ items: z.array(userSchema),
1408
+ nextCursor: z.string().optional()
1409
+ }).meta({ id: "UserListResponse" });
1410
+ const userDetailSchema = z.object({
1411
+ id: z.string(),
1412
+ email: z.string(),
1413
+ name: z.string().nullable(),
1414
+ avatarUrl: z.string().nullable(),
1415
+ role: z.number().int(),
1416
+ emailVerified: z.boolean(),
1417
+ disabled: z.boolean(),
1418
+ createdAt: z.string(),
1419
+ updatedAt: z.string(),
1420
+ lastLogin: z.string().nullable(),
1421
+ credentials: z.array(z.object({
1422
+ id: z.string(),
1423
+ name: z.string().nullable(),
1424
+ deviceType: z.string().nullable(),
1425
+ createdAt: z.string(),
1426
+ lastUsedAt: z.string()
1427
+ })),
1428
+ oauthAccounts: z.array(z.object({
1429
+ provider: z.string(),
1430
+ createdAt: z.string()
1431
+ }))
1432
+ }).meta({ id: "UserDetail" });
1433
+
1434
+ //#endregion
1435
+ //#region src/api/schemas/widgets.ts
1436
+ const widgetType = z.enum([
1437
+ "content",
1438
+ "menu",
1439
+ "component"
1440
+ ]);
1441
+ const createWidgetAreaBody = z.object({
1442
+ name: z.string().min(1),
1443
+ label: z.string().min(1),
1444
+ description: z.string().optional()
1445
+ }).meta({ id: "CreateWidgetAreaBody" });
1446
+ const createWidgetBody = z.object({
1447
+ type: widgetType,
1448
+ title: z.string().optional(),
1449
+ content: z.array(z.record(z.string(), z.unknown())).optional(),
1450
+ menuName: z.string().optional(),
1451
+ componentId: z.string().optional(),
1452
+ componentProps: z.record(z.string(), z.unknown()).optional()
1453
+ }).meta({ id: "CreateWidgetBody" });
1454
+ const updateWidgetBody = z.object({
1455
+ type: widgetType.optional(),
1456
+ title: z.string().optional(),
1457
+ content: z.array(z.record(z.string(), z.unknown())).optional(),
1458
+ menuName: z.string().optional(),
1459
+ componentId: z.string().optional(),
1460
+ componentProps: z.record(z.string(), z.unknown()).optional()
1461
+ }).meta({ id: "UpdateWidgetBody" });
1462
+ const reorderWidgetsBody = z.object({ widgetIds: z.array(z.string().min(1)) }).meta({ id: "ReorderWidgetsBody" });
1463
+ const widgetAreaSchema = z.object({
1464
+ id: z.string(),
1465
+ name: z.string(),
1466
+ label: z.string(),
1467
+ description: z.string().nullable(),
1468
+ created_at: z.string(),
1469
+ updated_at: z.string()
1470
+ }).meta({ id: "WidgetArea" });
1471
+ const widgetSchema = z.object({
1472
+ id: z.string(),
1473
+ type: widgetType,
1474
+ title: z.string().optional(),
1475
+ content: z.array(z.record(z.string(), z.unknown())).optional(),
1476
+ menuName: z.string().optional(),
1477
+ componentId: z.string().optional(),
1478
+ componentProps: z.record(z.string(), z.unknown()).optional()
1479
+ }).meta({ id: "Widget" });
1480
+ const widgetAreaWithWidgetsSchema = widgetAreaSchema.extend({ widgets: z.array(widgetSchema) }).meta({ id: "WidgetAreaWithWidgets" });
1481
+ const widgetAreaWithWidgetsAndCountSchema = widgetAreaWithWidgetsSchema.extend({ widgetCount: z.number().int() }).meta({ id: "WidgetAreaWithWidgetsAndCount" });
1482
+
1483
+ //#endregion
1484
+ //#region src/api/schemas/entry-lock.ts
1485
+ const entryLockAcquireBody = z.object({
1486
+ takeover: z.boolean().optional().meta({ description: "Take the lock from whoever holds it. Their next heartbeat or save reports the new holder." }),
1487
+ token: z.string().min(1).max(128).optional().meta({ description: "Identifies the caller's editing session. Send the same value on DELETE so a release from one tab does not drop a lock another tab of the same account still relies on." })
1488
+ }).meta({ id: "EntryLockAcquireBody" });
1489
+ const entryLockHolderSchema = z.object({
1490
+ userId: z.string(),
1491
+ userName: z.string().nullable(),
1492
+ acquiredAt: z.string(),
1493
+ expiresAt: z.string()
1494
+ }).meta({ id: "EntryLockHolder" });
1495
+ const entryLockStatusSchema = z.object({
1496
+ enabled: z.boolean().meta({ description: "Whether the collection takes edit locks at all" }),
1497
+ holder: entryLockHolderSchema.nullable(),
1498
+ heldByCaller: z.boolean()
1499
+ }).meta({ id: "EntryLockStatus" });
1500
+ const entryLockReleaseResponseSchema = z.object({ released: z.boolean() }).meta({ id: "EntryLockReleaseResponse" });
1501
+ const entryLockConflictSchema = z.object({
1502
+ success: z.literal(false),
1503
+ error: z.object({
1504
+ code: z.literal("ENTRY_LOCKED"),
1505
+ message: z.string(),
1506
+ details: entryLockHolderSchema
1507
+ })
1508
+ });
1509
+ const entryMutationConflictSchema = z.object({
1510
+ success: z.literal(false),
1511
+ error: z.object({
1512
+ code: z.string().meta({ examples: ["CONFLICT", "ENTRY_LOCKED"] }),
1513
+ message: z.string(),
1514
+ details: entryLockHolderSchema.optional()
1515
+ })
1516
+ });
1517
+
1518
+ //#endregion
1519
+ export { createMenuItemBody as $, contentRevisionConditionBody as $n, mediaReplaceResponseSchema as $t, createSectionBody as A, mediaUsageRepairResponseSchema as An, DEFAULT_MAX_UPLOAD_SIZE as At, taxonomyListResponseSchema as B, mediaUsageWorkStateSchema as Bn, mediaFolderResponseSchema as Bt, searchQuery as C, mediaUsageDetailsResponseSchema as Cn, orphanRegisterBody as Ct, searchSuggestQuery as D, mediaUsageProgressSchema as Dn, updateCollectionBody as Dt, searchResultSchema as E, mediaUsageProgressAdvanceResponseSchema as En, schemaExportQuery as Et, createTaxonomyDefBody as F, mediaUsageWorkListQuery as Fn, mediaExistingResponseSchema as Ft, termReorderResponseSchema as G, contentFieldFiltersSchema as Gn, mediaListReadItemSchema as Gt, termGetResponseSchema as H, contentAuthorsResponseSchema as Hn, mediaGetQuery as Ht, createTermBody as I, mediaUsageWorkListResponseSchema as In, mediaFolderBody as It, termTranslationsSchema as J, contentListResponseSchema as Jn, mediaProviderListQuery as Jt, termResponseSchema as K, contentItemSchema as Kn, mediaListReadResponseSchema as Kt, reorderTermsBody as L, mediaUsageWorkRetryBody as Ln, mediaFolderIdSchema as Lt, sectionSchema as M, mediaUsageSourceDetailSchema as Mn, mediaConfirmBody as Mt, sectionsListQuery as N, mediaUsageSummarySchema as Nn, mediaConfirmResponseSchema as Nt, settingsUpdateBody as O, mediaUsageRepairBody as On, updateFieldBody as Ot, updateSectionBody as P, mediaUsageWorkItemSchema as Pn, mediaDirectUploadBody as Pt, createMenuBody as Q, contentRestoreResponseSchema as Qn, mediaReplaceMetadataForm as Qt, taxonomyDefSchema as R, mediaUsageWorkRetryConflictSchema as Rn, mediaFolderListQuery as Rt, searchEnableBody as S, mediaUsageDetailsQuery as Sn, fieldSchema as St, searchResponseSchema as T, mediaUsageOccurrenceDetailSchema as Tn, orphanedTableSchema as Tt, termListQuery as U, contentCompareResponseSchema as Un, mediaItemSchema as Ut, taxonomyResponseSchema as V, contentAuthorSchema as Vn, mediaFolderSchema as Vt, termListResponseSchema as W, contentCreateBody as Wn, mediaListQuery as Wt, updateTaxonomyDefBody as X, contentPublishBody as Xn, mediaReadResponseSchema as Xt, termWithCountSchema as Y, contentPreviewUrlBody as Yn, mediaReadItemSchema as Yt, updateTermBody as Z, contentResponseSchema as Zn, mediaReplaceBody as Zt, userDetailSchema as _, mediaUsageCollectionDeletionRetryBody as _n, bylineUpdateBody as _r, createCollectionBody as _t, entryLockStatusSchema as a, mediaUploadResponseSchema as an, contentTranslationSchema as ar, menuWithItemsSchema as at, userUpdateBody as b, mediaUsageCoverageSchema as bn, fieldReorderBody as bt, createWidgetBody as c, mediaUsageActivationAdvanceBody as cn, contentUpdateBody as cr, updateMenuItemBody as ct, widgetAreaSchema as d, mediaUsageActivationStateSchema as dn, bylineCreateBody as dr, collectionGetQuery as dt, mediaResponseSchema as en, contentScheduleBody as er, menuItemSchema as et, widgetAreaWithWidgetsAndCountSchema as f, mediaUsageActivationStatusSchema as fn, bylineCreditSchema as fr, collectionListResponseSchema as ft, allowedDomainUpdateBody as g, mediaUsageCollectionDeletionPhaseSchema as gn, bylineTranslationsResponseSchema as gr, collectionWithFieldsResponseSchema as gt, allowedDomainCreateBody as h, mediaUsageCollectionDeletionListResponseSchema as hn, bylineTranslationCreateBody as hr, collectionSchema as ht, entryLockReleaseResponseSchema as i, mediaUploadEnsureUniqueFilenameForm as in, contentTermsResponseSchema as ir, menuTranslationsSchema as it, sectionListResponseSchema as j, mediaUsageRepairStatusSchema as jn, formatFileSize as jt, siteSettingsSchema as k, mediaUsageRepairCollectionSummarySchema as kn, CONTENT_TYPE_RE as kt, reorderWidgetsBody as l, mediaUsageActivationAdvanceResponseSchema as ln, trashedContentItemSchema as lr, isSafeHref as lt, widgetSchema as m, mediaUsageCollectionDeletionListQuery as mn, bylineSummarySchema as mr, collectionResponseSchema as mt, entryLockConflictSchema as n, mediaUpdateBody as nn, contentSeoSchema as nr, menuListItemSchema as nt, entryMutationConflictSchema as o, mediaUploadUrlBody as on, contentTranslationsResponseSchema as or, reorderMenuItemsBody as ot, widgetAreaWithWidgetsSchema as p, mediaUsageCollectionDeletionItemSchema as pn, bylineListResponseSchema as pr, collectionReorderBody as pt, termSchema as q, contentListQuery as qn, mediaListResponseSchema as qt, entryLockHolderSchema as r, mediaUploadDeduplicateForm as rn, contentTermsBody as rr, menuSchema as rt, createWidgetAreaBody as s, mediaUploadUrlResponseSchema as sn, contentTrashQuery as sr, updateMenuBody as st, entryLockAcquireBody as t, mediaStreamUploadResponseSchema as tn, contentSeoInput as tr, menuItemTypeEnum as tt, updateWidgetBody as u, mediaUsageActivationConflictSchema as un, trashedContentListResponseSchema as ur, sanitizeHref as ut, userListResponseSchema as v, mediaUsageCollectionDeletionRetryResponseSchema as vn, bylinesListQuery as vr, createFieldBody as vt, searchRebuildBody as w, mediaUsageEntryDetailSchema as wn, orphanedTableListResponseSchema as wt, usersListQuery as x, mediaUsageCoverageStatusSchema as xn, fieldResponseSchema as xt, userSchema as y, mediaUsageCollectionDeletionStateSchema as yn, contentBylineInputSchema as yr, fieldListResponseSchema as yt, taxonomyDefTranslationsSchema as z, mediaUsageWorkRetryResponseSchema as zn, mediaFolderListResponseSchema as zt };
1520
+ //# sourceMappingURL=entry-lock-D3C99MXS.mjs.map