emdash 0.40.0 → 0.41.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 (1258) hide show
  1. package/dist/action-token-CbKDcPJi.mjs +26 -0
  2. package/dist/action-token-CbKDcPJi.mjs.map +1 -0
  3. package/dist/activation-PtniBLt9.mjs +382 -0
  4. package/dist/activation-PtniBLt9.mjs.map +1 -0
  5. package/dist/adapters-C_Tf5x90.d.mts +171 -0
  6. package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
  7. package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
  8. package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +46 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +10 -10
  14. package/dist/api-CXwQkV_m.mjs +5122 -0
  15. package/dist/api-CXwQkV_m.mjs.map +1 -0
  16. package/dist/api-tokens-89WlohEN.mjs +166 -0
  17. package/dist/api-tokens-89WlohEN.mjs.map +1 -0
  18. package/dist/apply-Do3KNnUk.mjs +1659 -0
  19. package/dist/apply-Do3KNnUk.mjs.map +1 -0
  20. package/dist/approvals-CAX9Yw33.mjs +460 -0
  21. package/dist/approvals-CAX9Yw33.mjs.map +1 -0
  22. package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
  23. package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
  24. package/dist/astro/index.d.mts +14 -14
  25. package/dist/astro/index.mjs +26 -30
  26. package/dist/astro/index.mjs.map +1 -1
  27. package/dist/astro/middleware/auth.d.mts +12 -12
  28. package/dist/astro/middleware/auth.mjs +10 -10
  29. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  30. package/dist/astro/middleware/redirect.mjs +7 -7
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +12 -12
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +110 -106
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  41. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  43. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  44. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  45. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
  46. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
  47. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  48. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  49. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  50. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  51. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  52. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  53. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  54. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  55. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  56. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  57. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  58. package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
  59. package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
  60. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  61. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  62. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  63. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  65. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  66. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
  67. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  69. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
  70. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
  72. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
  74. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
  76. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
  78. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
  79. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +81 -77
  81. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
  83. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
  85. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +83 -79
  87. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  89. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
  90. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
  93. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
  95. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  97. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
  98. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +5 -5
  100. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
  101. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  103. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
  104. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
  105. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
  106. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
  107. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
  108. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
  109. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
  110. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
  111. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
  112. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
  113. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
  114. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
  115. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
  116. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
  117. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
  118. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
  119. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
  121. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
  122. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
  124. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  125. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  126. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  127. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  128. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  129. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  130. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  131. package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
  132. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  133. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  134. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  135. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
  137. package/dist/astro/routes/api/auth/me.mjs +15 -15
  138. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
  148. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  154. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  156. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  157. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  160. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
  165. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  168. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  169. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
  170. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  175. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  176. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  177. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
  178. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  179. package/dist/astro/routes/api/dashboard.mjs +10 -9
  180. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  181. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  182. package/dist/astro/routes/api/health.mjs +6 -6
  183. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  184. package/dist/astro/routes/api/import/probe.mjs +23 -23
  185. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  186. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  187. package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
  188. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  189. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
  190. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  191. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  192. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
  193. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  194. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
  195. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  196. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
  197. package/dist/astro/routes/api/manifest.mjs +6 -6
  198. package/dist/astro/routes/api/mcp.mjs +98 -118
  199. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  200. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
  204. package/dist/astro/routes/api/media/_id_.mjs +31 -31
  205. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  207. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  208. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  209. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  210. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  211. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  212. package/dist/astro/routes/api/media/upload-url.mjs +18 -18
  213. package/dist/astro/routes/api/media.mjs +35 -35
  214. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
  215. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
  216. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
  217. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
  218. package/dist/astro/routes/api/menus/_name_.mjs +17 -17
  219. package/dist/astro/routes/api/menus/index.mjs +17 -17
  220. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  221. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  222. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  223. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  224. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  225. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  226. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  227. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  228. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  229. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  230. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  231. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  232. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  233. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  234. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  235. package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
  236. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  237. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
  238. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  239. package/dist/astro/routes/api/relations/index.mjs +36 -31
  240. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  241. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  242. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  243. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
  244. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  245. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
  246. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  247. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
  248. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
  250. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  251. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -67
  252. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -67
  254. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  255. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
  256. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
  258. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  259. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
  260. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/schema/index.mjs +16 -16
  262. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
  263. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
  265. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/search/enable.mjs +19 -19
  267. package/dist/astro/routes/api/search/index.mjs +18 -18
  268. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  269. package/dist/astro/routes/api/search/stats.mjs +9 -9
  270. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  271. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  272. package/dist/astro/routes/api/sections/index.mjs +18 -18
  273. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  274. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  275. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  276. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  277. package/dist/astro/routes/api/settings/email.mjs +6 -6
  278. package/dist/astro/routes/api/settings.mjs +21 -21
  279. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
  280. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  281. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
  282. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  283. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  284. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  285. package/dist/astro/routes/api/setup/index.mjs +80 -49
  286. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/setup/status.mjs +6 -6
  288. package/dist/astro/routes/api/snapshot.mjs +9 -9
  289. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  290. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
  291. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
  292. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
  293. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
  294. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
  295. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
  296. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
  297. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  298. package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
  299. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  300. package/dist/astro/routes/api/typegen.mjs +8 -8
  301. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  302. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
  303. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  304. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  305. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  306. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  307. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -16
  308. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  309. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  310. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  311. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  312. package/dist/astro/routes/api/widget-components.mjs +5 -5
  313. package/dist/astro/routes/robots.txt.mjs +6 -6
  314. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  315. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  316. package/dist/astro/types.d.mts +28 -18
  317. package/dist/astro/types.d.mts.map +1 -1
  318. package/dist/audit-CrgmE9LE.mjs +127 -0
  319. package/dist/audit-CrgmE9LE.mjs.map +1 -0
  320. package/dist/auth/providers/github.d.mts +1 -1
  321. package/dist/auth/providers/google.d.mts +1 -1
  322. package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
  323. package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
  324. package/dist/authorize-WgdKF8QY.mjs +49 -0
  325. package/dist/authorize-WgdKF8QY.mjs.map +1 -0
  326. package/dist/backup-Ck8_lMO3.mjs +246 -0
  327. package/dist/backup-Ck8_lMO3.mjs.map +1 -0
  328. package/dist/block-types-BQ90asVI.mjs +132 -0
  329. package/dist/block-types-BQ90asVI.mjs.map +1 -0
  330. package/dist/block-values-ACFqgB1D.mjs +175 -0
  331. package/dist/block-values-ACFqgB1D.mjs.map +1 -0
  332. package/dist/bundle-Db1iNMv_.mjs +667 -0
  333. package/dist/bundle-Db1iNMv_.mjs.map +1 -0
  334. package/dist/byline-BayaYGoj.mjs +909 -0
  335. package/dist/byline-BayaYGoj.mjs.map +1 -0
  336. package/dist/byline-fields-B8HH-35f.mjs +254 -0
  337. package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
  338. package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
  339. package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
  340. package/dist/byline-registry-B_EK_TQf.mjs +406 -0
  341. package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
  342. package/dist/bylines-DFAaFXWi.mjs +214 -0
  343. package/dist/bylines-DFAaFXWi.mjs.map +1 -0
  344. package/dist/bylines-DkIxUxmr.mjs +232 -0
  345. package/dist/bylines-DkIxUxmr.mjs.map +1 -0
  346. package/dist/cache-DkvhQ8XE.mjs +108 -0
  347. package/dist/cache-DkvhQ8XE.mjs.map +1 -0
  348. package/dist/canonical-CcSuuTlH.mjs +174 -0
  349. package/dist/canonical-CcSuuTlH.mjs.map +1 -0
  350. package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
  351. package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
  352. package/dist/challenge-store-CvBl81AQ.mjs +51 -0
  353. package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
  354. package/dist/checksum-CClweQzI.mjs +162 -0
  355. package/dist/checksum-CClweQzI.mjs.map +1 -0
  356. package/dist/chrome-tags-D5caJwwp.mjs +24 -0
  357. package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
  358. package/dist/chunks-DwBaj8aT.mjs +25 -0
  359. package/dist/chunks-DwBaj8aT.mjs.map +1 -0
  360. package/dist/cli/index.mjs +374 -761
  361. package/dist/cli/index.mjs.map +1 -1
  362. package/dist/client/cf-access.d.mts +1 -1
  363. package/dist/client/index.d.mts +18 -18
  364. package/dist/client/index.mjs +2 -2
  365. package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
  366. package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
  367. package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
  368. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
  369. package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
  370. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
  371. package/dist/comment-D2uvL63j.mjs +313 -0
  372. package/dist/comment-D2uvL63j.mjs.map +1 -0
  373. package/dist/comment-reaction-DevUuzg4.mjs +85 -0
  374. package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
  375. package/dist/comments-Cq0s7_hO.mjs +195 -0
  376. package/dist/comments-Cq0s7_hO.mjs.map +1 -0
  377. package/dist/comments-M4EDYAHw.mjs +99 -0
  378. package/dist/comments-M4EDYAHw.mjs.map +1 -0
  379. package/dist/components-CuIGwXMs.mjs +108 -0
  380. package/dist/components-CuIGwXMs.mjs.map +1 -0
  381. package/dist/config-52Ea5IWt.d.mts +39 -0
  382. package/dist/config-52Ea5IWt.d.mts.map +1 -0
  383. package/dist/config-CCz3xOLc.mjs +242 -0
  384. package/dist/config-CCz3xOLc.mjs.map +1 -0
  385. package/dist/config-D3d5Qudq.d.mts +6669 -0
  386. package/dist/config-D3d5Qudq.d.mts.map +1 -0
  387. package/dist/content-CbnufDsM.mjs +2018 -0
  388. package/dist/content-CbnufDsM.mjs.map +1 -0
  389. package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
  390. package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
  391. package/dist/content-policy-CYu6K1KB.mjs +46 -0
  392. package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
  393. package/dist/content-repair-DlDUgFGp.mjs +442 -0
  394. package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
  395. package/dist/context-CGQLA1-a.mjs +1922 -0
  396. package/dist/context-CGQLA1-a.mjs.map +1 -0
  397. package/dist/cron-c4D5C5Fx.mjs +284 -0
  398. package/dist/cron-c4D5C5Fx.mjs.map +1 -0
  399. package/dist/dashboard-CBq9kmOn.mjs +151 -0
  400. package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
  401. package/dist/db/index.d.mts +3 -3
  402. package/dist/db/index.mjs +1 -1
  403. package/dist/db/libsql-migrations.d.mts +1 -1
  404. package/dist/db/libsql-migrations.mjs +4 -4
  405. package/dist/db/libsql.d.mts +1 -1
  406. package/dist/db/postgres-migrations.d.mts +1 -1
  407. package/dist/db/postgres-migrations.mjs +4 -4
  408. package/dist/db/postgres.d.mts +1 -1
  409. package/dist/db/sqlite-migrations.d.mts +1 -1
  410. package/dist/db/sqlite-migrations.mjs +4 -4
  411. package/dist/db/sqlite.d.mts +1 -1
  412. package/dist/db/sqlite.mjs +1 -1
  413. package/dist/default-DPsys51U.mjs +81 -0
  414. package/dist/default-DPsys51U.mjs.map +1 -0
  415. package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
  416. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
  417. package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
  418. package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
  419. package/dist/device-flow-OcSqE9uY.mjs +521 -0
  420. package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
  421. package/dist/digest-DVZ--cE9.mjs +194 -0
  422. package/dist/digest-DVZ--cE9.mjs.map +1 -0
  423. package/dist/direct-executor-DyjAqkpT.mjs +104 -0
  424. package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
  425. package/dist/dist-FPR93_xf.mjs +810 -0
  426. package/dist/dist-FPR93_xf.mjs.map +1 -0
  427. package/dist/email-console-DyQIgEnz.mjs +50 -0
  428. package/dist/email-console-DyQIgEnz.mjs.map +1 -0
  429. package/dist/email-locale-BYb16rVd.mjs +25 -0
  430. package/dist/email-locale-BYb16rVd.mjs.map +1 -0
  431. package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
  432. package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
  433. package/dist/enrich-DBtCncE2.mjs +194 -0
  434. package/dist/enrich-DBtCncE2.mjs.map +1 -0
  435. package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
  436. package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
  437. package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
  438. package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
  439. package/dist/entry-lock-C6NcnZPV.mjs +163 -0
  440. package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
  441. package/dist/entry-locks-BTyQLdbC.mjs +167 -0
  442. package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
  443. package/dist/error-BfsNNrIE.mjs +90 -0
  444. package/dist/error-BfsNNrIE.mjs.map +1 -0
  445. package/dist/errors-BN1QAnEY.mjs +460 -0
  446. package/dist/errors-BN1QAnEY.mjs.map +1 -0
  447. package/dist/errors-Bt3goF8I.mjs +120 -0
  448. package/dist/errors-Bt3goF8I.mjs.map +1 -0
  449. package/dist/escape-BveidMa2.mjs +9 -0
  450. package/dist/escape-BveidMa2.mjs.map +1 -0
  451. package/dist/fence-Bb_IbCxI.mjs +162 -0
  452. package/dist/fence-Bb_IbCxI.mjs.map +1 -0
  453. package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
  454. package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
  455. package/dist/field-map-6m9rF49t.mjs +83 -0
  456. package/dist/field-map-6m9rF49t.mjs.map +1 -0
  457. package/dist/focal-point-CZ3d1wK5.mjs +23 -0
  458. package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
  459. package/dist/fts-manager-CCaZTp8y.mjs +443 -0
  460. package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
  461. package/dist/gc-xowRjczI.mjs +75 -0
  462. package/dist/gc-xowRjczI.mjs.map +1 -0
  463. package/dist/hash-COVK27Pc.mjs +37 -0
  464. package/dist/hash-COVK27Pc.mjs.map +1 -0
  465. package/dist/hook-result-CYSk0XFe.d.mts +31 -0
  466. package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
  467. package/dist/hreflang-CChPV7jx.mjs +105 -0
  468. package/dist/hreflang-CChPV7jx.mjs.map +1 -0
  469. package/dist/hreflang-DRslq3QI.d.mts +50 -0
  470. package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
  471. package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
  472. package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
  473. package/dist/identity-NVTOOQyq.mjs +35 -0
  474. package/dist/identity-NVTOOQyq.mjs.map +1 -0
  475. package/dist/import-wpSO2N0x.mjs +2020 -0
  476. package/dist/import-wpSO2N0x.mjs.map +1 -0
  477. package/dist/index-CDs2wq4X.d.mts +623 -0
  478. package/dist/index-CDs2wq4X.d.mts.map +1 -0
  479. package/dist/index.d.mts +24 -24
  480. package/dist/index.mjs +103 -101
  481. package/dist/install-finalization-D9R9R-W8.mjs +58 -0
  482. package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
  483. package/dist/keys-Bck6LBfF.mjs +61 -0
  484. package/dist/keys-Bck6LBfF.mjs.map +1 -0
  485. package/dist/kinds-CYmRESWj.mjs +974 -0
  486. package/dist/kinds-CYmRESWj.mjs.map +1 -0
  487. package/dist/lifecycle-C815ZQfV.mjs +25 -0
  488. package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
  489. package/dist/load-D99axixL.mjs +28 -0
  490. package/dist/load-D99axixL.mjs.map +1 -0
  491. package/dist/loader-CrRPfkHS.mjs +1197 -0
  492. package/dist/loader-CrRPfkHS.mjs.map +1 -0
  493. package/dist/loops-DMKlygqX.mjs +203 -0
  494. package/dist/loops-DMKlygqX.mjs.map +1 -0
  495. package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
  496. package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
  497. package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
  498. package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
  499. package/dist/media/image-endpoint.mjs +1 -1
  500. package/dist/media/index.d.mts +1 -1
  501. package/dist/media/index.mjs +4 -4
  502. package/dist/media/local-runtime.d.mts +14 -14
  503. package/dist/media/local-runtime.mjs +6 -6
  504. package/dist/media-BUQePMxP.mjs +373 -0
  505. package/dist/media-BUQePMxP.mjs.map +1 -0
  506. package/dist/media-DH8ibNlY.mjs +294 -0
  507. package/dist/media-DH8ibNlY.mjs.map +1 -0
  508. package/dist/media-OEIQ3bVc.mjs +408 -0
  509. package/dist/media-OEIQ3bVc.mjs.map +1 -0
  510. package/dist/media-allowlist-pYtaBA95.mjs +44 -0
  511. package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
  512. package/dist/media-folders-Bf8_s4de.mjs +210 -0
  513. package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
  514. package/dist/media-url-C6klEuNd.mjs +43 -0
  515. package/dist/media-url-C6klEuNd.mjs.map +1 -0
  516. package/dist/media-usage-D7Y64m6v.mjs +1629 -0
  517. package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
  518. package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
  519. package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
  520. package/dist/media-usage-work-DommYhYA.mjs +152 -0
  521. package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
  522. package/dist/media-usage-work-HU63hNDu.mjs +586 -0
  523. package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
  524. package/dist/menus-BQfusWEC.mjs +3608 -0
  525. package/dist/menus-BQfusWEC.mjs.map +1 -0
  526. package/dist/menus-BtwjQt5s.mjs +753 -0
  527. package/dist/menus-BtwjQt5s.mjs.map +1 -0
  528. package/dist/menus-p_M1V7J_.mjs +139 -0
  529. package/dist/menus-p_M1V7J_.mjs.map +1 -0
  530. package/dist/migrations/index.d.mts +1 -1
  531. package/dist/migrations/index.mjs +3 -3
  532. package/dist/mime-C94qBG-P.mjs +36 -0
  533. package/dist/mime-C94qBG-P.mjs.map +1 -0
  534. package/dist/mode-DpYW3w6U.mjs +23 -0
  535. package/dist/mode-DpYW3w6U.mjs.map +1 -0
  536. package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
  537. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
  538. package/dist/normalize-DduyxBjf.mjs +191 -0
  539. package/dist/normalize-DduyxBjf.mjs.map +1 -0
  540. package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
  541. package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
  542. package/dist/oauth-clients-DENiDQri.mjs +266 -0
  543. package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
  544. package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
  545. package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
  546. package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
  547. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
  548. package/dist/object-cache/memory.d.mts +1 -1
  549. package/dist/options-BYa1FgIM.d.mts +81 -0
  550. package/dist/options-BYa1FgIM.d.mts.map +1 -0
  551. package/dist/page/index.d.mts +2 -2
  552. package/dist/page/index.mjs +5 -5
  553. package/dist/parse-CORGGhHf.mjs +81 -0
  554. package/dist/parse-CORGGhHf.mjs.map +1 -0
  555. package/dist/parse-avNM1xWV.d.mts +168 -0
  556. package/dist/parse-avNM1xWV.d.mts.map +1 -0
  557. package/dist/passkey-config-Dih5YeIS.mjs +46 -0
  558. package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
  559. package/dist/paths-d51RFm8M.mjs +77 -0
  560. package/dist/paths-d51RFm8M.mjs.map +1 -0
  561. package/dist/patterns-CoqlXUvk.mjs +145 -0
  562. package/dist/patterns-CoqlXUvk.mjs.map +1 -0
  563. package/dist/placeholder-D2aksPMF.d.mts +306 -0
  564. package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
  565. package/dist/plan-DqeZKuaR.mjs +135 -0
  566. package/dist/plan-DqeZKuaR.mjs.map +1 -0
  567. package/dist/plugin-test-runtime.d.mts +14 -14
  568. package/dist/plugin-test-runtime.mjs +110 -107
  569. package/dist/plugin-types.d.mts +2 -2
  570. package/dist/plugin-utils.d.mts +12 -12
  571. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  572. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  573. package/dist/plugins/host.d.mts +5 -5
  574. package/dist/plugins/host.mjs +42 -41
  575. package/dist/plugins-Bb7oqjQA.mjs +277 -0
  576. package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
  577. package/dist/policy-BcEqut3n.mjs +45 -0
  578. package/dist/policy-BcEqut3n.mjs.map +1 -0
  579. package/dist/portable-text-DXE8ymtD.mjs +307 -0
  580. package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
  581. package/dist/preview-DEDWbwA_.mjs +107 -0
  582. package/dist/preview-DEDWbwA_.mjs.map +1 -0
  583. package/dist/protocol-BJbTzvwl.d.mts +61 -0
  584. package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
  585. package/dist/public-submission-D9c9S14m.mjs +250 -0
  586. package/dist/public-submission-D9c9S14m.mjs.map +1 -0
  587. package/dist/public-url-CIRe-2T6.mjs +101 -0
  588. package/dist/public-url-CIRe-2T6.mjs.map +1 -0
  589. package/dist/query-BzifXlPS.mjs +1156 -0
  590. package/dist/query-BzifXlPS.mjs.map +1 -0
  591. package/dist/query-OzMJ6vJP.mjs +41 -0
  592. package/dist/query-OzMJ6vJP.mjs.map +1 -0
  593. package/dist/rate-limit-Csp60Vik.mjs +120 -0
  594. package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
  595. package/dist/receipt-B-aU4hpJ.mjs +43 -0
  596. package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
  597. package/dist/redirect-CDSw1sU3.mjs +17 -0
  598. package/dist/redirect-CDSw1sU3.mjs.map +1 -0
  599. package/dist/redirect-D1ArbO85.mjs +411 -0
  600. package/dist/redirect-D1ArbO85.mjs.map +1 -0
  601. package/dist/redirects-BjTwDTsV.mjs +148 -0
  602. package/dist/redirects-BjTwDTsV.mjs.map +1 -0
  603. package/dist/redirects-Ck50kH3n.mjs +446 -0
  604. package/dist/redirects-Ck50kH3n.mjs.map +1 -0
  605. package/dist/registry/testing.mjs +3 -3
  606. package/dist/registry-CFcNCayZ.mjs +6754 -0
  607. package/dist/registry-CFcNCayZ.mjs.map +1 -0
  608. package/dist/relations-Cfaa1fDl.mjs +776 -0
  609. package/dist/relations-Cfaa1fDl.mjs.map +1 -0
  610. package/dist/request-cache-iHRlHx1d.mjs +104 -0
  611. package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
  612. package/dist/request-context.d.mts +1 -1
  613. package/dist/request-meta-D47mqyev.mjs +141 -0
  614. package/dist/request-meta-D47mqyev.mjs.map +1 -0
  615. package/dist/resolve-BPE8sMvx.mjs +99 -0
  616. package/dist/resolve-BPE8sMvx.mjs.map +1 -0
  617. package/dist/resolve-C0s1E_fH.mjs +199 -0
  618. package/dist/resolve-C0s1E_fH.mjs.map +1 -0
  619. package/dist/revision-j1p4-bOj.mjs +302 -0
  620. package/dist/revision-j1p4-bOj.mjs.map +1 -0
  621. package/dist/route-wire-C9PJV9aL.mjs +197 -0
  622. package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
  623. package/dist/routes-lyYw0mMf.mjs +272 -0
  624. package/dist/routes-lyYw0mMf.mjs.map +1 -0
  625. package/dist/runner-B3eyB9Gb.mjs +6121 -0
  626. package/dist/runner-B3eyB9Gb.mjs.map +1 -0
  627. package/dist/runner-DoYH2Jcu.d.mts +68 -0
  628. package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
  629. package/dist/runtime.d.mts +13 -13
  630. package/dist/runtime.mjs +3 -3
  631. package/dist/schema-BAayK46S.mjs +13 -0
  632. package/dist/schema-BAayK46S.mjs.map +1 -0
  633. package/dist/schema-Gqcl-8G4.mjs +815 -0
  634. package/dist/schema-Gqcl-8G4.mjs.map +1 -0
  635. package/dist/scopes-BqPOKoKf.mjs +34 -0
  636. package/dist/scopes-BqPOKoKf.mjs.map +1 -0
  637. package/dist/search-YJKPIEV6.mjs +448 -0
  638. package/dist/search-YJKPIEV6.mjs.map +1 -0
  639. package/dist/sections-BR_e-wK5.mjs +346 -0
  640. package/dist/sections-BR_e-wK5.mjs.map +1 -0
  641. package/dist/seed/index.d.mts +2 -2
  642. package/dist/seed/index.mjs +37 -31
  643. package/dist/seo/index.d.mts +3 -3
  644. package/dist/seo/index.mjs +22 -21
  645. package/dist/seo/index.mjs.map +1 -1
  646. package/dist/seo-Dsj8hy3j.mjs +114 -0
  647. package/dist/seo-Dsj8hy3j.mjs.map +1 -0
  648. package/dist/seo-XvH4LNNp.mjs +133 -0
  649. package/dist/seo-XvH4LNNp.mjs.map +1 -0
  650. package/dist/service-BsVG05gS.mjs +150 -0
  651. package/dist/service-BsVG05gS.mjs.map +1 -0
  652. package/dist/session-user-DgKbYrlj.mjs +51 -0
  653. package/dist/session-user-DgKbYrlj.mjs.map +1 -0
  654. package/dist/settings-CNPUntkh.mjs +51 -0
  655. package/dist/settings-CNPUntkh.mjs.map +1 -0
  656. package/dist/settings-D5EHi0Tk.mjs +439 -0
  657. package/dist/settings-D5EHi0Tk.mjs.map +1 -0
  658. package/dist/settings-DSfE7wOa.mjs +61 -0
  659. package/dist/settings-DSfE7wOa.mjs.map +1 -0
  660. package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
  661. package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
  662. package/dist/setup-nonce-DnSBP260.mjs +25 -0
  663. package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
  664. package/dist/site-settings-NGzdrt7O.mjs +50 -0
  665. package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
  666. package/dist/site-url-D6JB7tLW.mjs +16 -0
  667. package/dist/site-url-D6JB7tLW.mjs.map +1 -0
  668. package/dist/snapshot-CdcwwWAf.mjs +414 -0
  669. package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
  670. package/dist/ssrf-Dv0_tRpo.mjs +406 -0
  671. package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
  672. package/dist/stage-CUjhED3P.mjs +662 -0
  673. package/dist/stage-CUjhED3P.mjs.map +1 -0
  674. package/dist/staged-C36IWXff.mjs +659 -0
  675. package/dist/staged-C36IWXff.mjs.map +1 -0
  676. package/dist/state-CKouMCSY.mjs +153 -0
  677. package/dist/state-CKouMCSY.mjs.map +1 -0
  678. package/dist/status-lzyj4Uu7.mjs +30 -0
  679. package/dist/status-lzyj4Uu7.mjs.map +1 -0
  680. package/dist/storage/local.d.mts +1 -1
  681. package/dist/storage/local.mjs +1 -1
  682. package/dist/storage/s3.d.mts +1 -1
  683. package/dist/storage/s3.mjs +1 -1
  684. package/dist/storage-query-B-cWcTjJ.d.mts +1594 -0
  685. package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
  686. package/dist/tar-DsTXX6ch.mjs +449 -0
  687. package/dist/tar-DsTXX6ch.mjs.map +1 -0
  688. package/dist/target-DLQCwp_Z.mjs +27 -0
  689. package/dist/target-DLQCwp_Z.mjs.map +1 -0
  690. package/dist/taxonomies-BlAjr4BL.mjs +697 -0
  691. package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
  692. package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
  693. package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
  694. package/dist/taxonomy-CKDwM61Y.mjs +525 -0
  695. package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
  696. package/dist/tokens-BojXlk49.mjs +171 -0
  697. package/dist/tokens-BojXlk49.mjs.map +1 -0
  698. package/dist/transaction-DLPQWik1.mjs +29 -0
  699. package/dist/transaction-DLPQWik1.mjs.map +1 -0
  700. package/dist/transfer-XSTh2BCr.mjs +8706 -0
  701. package/dist/transfer-XSTh2BCr.mjs.map +1 -0
  702. package/dist/transfer-download-DkoCDA9d.mjs +33 -0
  703. package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
  704. package/dist/transfer-iQ26J-RT.mjs +166 -0
  705. package/dist/transfer-iQ26J-RT.mjs.map +1 -0
  706. package/dist/transformations-C7RQabKQ.mjs +196 -0
  707. package/dist/transformations-C7RQabKQ.mjs.map +1 -0
  708. package/dist/transport-D3RulfD6.mjs +136 -0
  709. package/dist/transport-D3RulfD6.mjs.map +1 -0
  710. package/dist/transport-DhlZlf4D.d.mts +42 -0
  711. package/dist/transport-DhlZlf4D.d.mts.map +1 -0
  712. package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
  713. package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
  714. package/dist/turnstile-lqUiY7lP.mjs +53 -0
  715. package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
  716. package/dist/types-4Dn9bZhu.mjs +77 -0
  717. package/dist/types-4Dn9bZhu.mjs.map +1 -0
  718. package/dist/types-5LSo7PPx.d.mts +85 -0
  719. package/dist/types-5LSo7PPx.d.mts.map +1 -0
  720. package/dist/types-BQ3hwYJT.d.mts +896 -0
  721. package/dist/types-BQ3hwYJT.d.mts.map +1 -0
  722. package/dist/types-BYEk7qo3.d.mts +198 -0
  723. package/dist/types-BYEk7qo3.d.mts.map +1 -0
  724. package/dist/types-CJKsWVFR.mjs +199 -0
  725. package/dist/types-CJKsWVFR.mjs.map +1 -0
  726. package/dist/types-Ca_w8mmY.d.mts +363 -0
  727. package/dist/types-Ca_w8mmY.d.mts.map +1 -0
  728. package/dist/types-CkE41ZAG.mjs +18 -0
  729. package/dist/types-CkE41ZAG.mjs.map +1 -0
  730. package/dist/types-D0aJW2uR.d.mts +1641 -0
  731. package/dist/types-D0aJW2uR.d.mts.map +1 -0
  732. package/dist/types-DbpN4Qto.d.mts +372 -0
  733. package/dist/types-DbpN4Qto.d.mts.map +1 -0
  734. package/dist/types-ILDI1sdY.mjs +16 -0
  735. package/dist/types-ILDI1sdY.mjs.map +1 -0
  736. package/dist/types-OC5c-edM.mjs +22 -0
  737. package/dist/types-OC5c-edM.mjs.map +1 -0
  738. package/dist/types-aOOxRSx6.mjs +103 -0
  739. package/dist/types-aOOxRSx6.mjs.map +1 -0
  740. package/dist/types-m1WbUffD.d.mts +198 -0
  741. package/dist/types-m1WbUffD.d.mts.map +1 -0
  742. package/dist/types-uxLoPBio.d.mts +124 -0
  743. package/dist/types-uxLoPBio.d.mts.map +1 -0
  744. package/dist/types-we5uR-tV.d.mts +287 -0
  745. package/dist/types-we5uR-tV.d.mts.map +1 -0
  746. package/dist/upload-attempts-DduMy6B0.mjs +32 -0
  747. package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
  748. package/dist/url-pattern-B3EwxAAk.mjs +33 -0
  749. package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
  750. package/dist/user-ElwQjTQT.mjs +171 -0
  751. package/dist/user-ElwQjTQT.mjs.map +1 -0
  752. package/dist/utils-BlAXmfOG.mjs +439 -0
  753. package/dist/utils-BlAXmfOG.mjs.map +1 -0
  754. package/dist/validate-CH0X5b2c.d.mts +468 -0
  755. package/dist/validate-CH0X5b2c.d.mts.map +1 -0
  756. package/dist/validate-CfgRpcjA.mjs +492 -0
  757. package/dist/validate-CfgRpcjA.mjs.map +1 -0
  758. package/dist/validation-DvYJtv4k.mjs +218 -0
  759. package/dist/validation-DvYJtv4k.mjs.map +1 -0
  760. package/dist/version-DgYjhTud.mjs +9 -0
  761. package/dist/version-DgYjhTud.mjs.map +1 -0
  762. package/dist/version-Dq71scUb.mjs +7 -0
  763. package/dist/version-Dq71scUb.mjs.map +1 -0
  764. package/dist/widgets-ChFIj0be.mjs +126 -0
  765. package/dist/widgets-ChFIj0be.mjs.map +1 -0
  766. package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
  767. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
  768. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
  769. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
  770. package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
  771. package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
  772. package/package.json +7 -6
  773. package/src/api/handlers/content.ts +593 -16
  774. package/src/api/handlers/device-flow.ts +74 -21
  775. package/src/api/handlers/index.ts +1 -0
  776. package/src/api/handlers/manifest.ts +79 -5
  777. package/src/api/handlers/media-upload.ts +17 -71
  778. package/src/api/handlers/media.ts +97 -3
  779. package/src/api/handlers/relations.ts +638 -157
  780. package/src/api/handlers/revision.ts +30 -0
  781. package/src/api/handlers/schema.ts +403 -1
  782. package/src/api/handlers/snapshot.ts +257 -3
  783. package/src/api/handlers/staged-references.ts +142 -0
  784. package/src/api/handlers/validate-references.ts +146 -0
  785. package/src/api/schemas/content.ts +13 -0
  786. package/src/api/schemas/relations.ts +54 -44
  787. package/src/api/schemas/schema.ts +14 -0
  788. package/src/astro/integration/routes.ts +15 -19
  789. package/src/astro/integration/vite-config.ts +10 -4
  790. package/src/astro/middleware.ts +1 -0
  791. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  792. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  793. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  794. package/src/astro/routes/api/relations/index.ts +4 -4
  795. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  796. package/src/astro/routes/api/setup/index.ts +66 -23
  797. package/src/astro/routes/api/snapshot.ts +2 -1
  798. package/src/astro/types.ts +10 -0
  799. package/src/cleanup.ts +10 -0
  800. package/src/cli/commands/export-seed.ts +510 -89
  801. package/src/components/Columns.astro +3 -1
  802. package/src/components/Cover.astro +3 -1
  803. package/src/components/WidgetArea.astro +3 -2
  804. package/src/database/migrations/086_relations_structural.ts +197 -0
  805. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  806. package/src/database/migrations/runner.ts +4 -0
  807. package/src/database/reference-backfill.ts +141 -0
  808. package/src/database/repositories/content.ts +43 -8
  809. package/src/database/repositories/media.ts +40 -1
  810. package/src/database/repositories/redirect.ts +17 -34
  811. package/src/database/repositories/relation.ts +620 -208
  812. package/src/database/repositories/revision.ts +16 -0
  813. package/src/database/repositories/types.ts +38 -0
  814. package/src/database/transaction.ts +12 -1
  815. package/src/database/types.ts +14 -5
  816. package/src/emdash-runtime.ts +114 -11
  817. package/src/index.ts +11 -0
  818. package/src/loader.ts +169 -22
  819. package/src/mcp/server.ts +13 -48
  820. package/src/query.ts +455 -25
  821. package/src/references/field-map.ts +115 -0
  822. package/src/references/resolve.ts +160 -0
  823. package/src/references/staged.ts +117 -0
  824. package/src/references/types.ts +16 -0
  825. package/src/registry/artifact-fetch.ts +45 -271
  826. package/src/schema/registry.ts +99 -24
  827. package/src/schema/types.ts +58 -0
  828. package/src/schema/zod-generator.ts +67 -1
  829. package/src/seed/apply.ts +841 -103
  830. package/src/seed/types.ts +36 -2
  831. package/src/seed/validate.ts +78 -2
  832. package/src/transfer/analyze/unique-keys.ts +3 -12
  833. package/src/transfer/analyze/validate.ts +65 -39
  834. package/src/transfer/analyze/values.ts +12 -1
  835. package/src/transfer/export/readers.ts +12 -8
  836. package/src/transfer/format/columns.ts +26 -6
  837. package/src/transfer/format/kinds.ts +21 -5
  838. package/src/transfer/import/context.ts +8 -1
  839. package/src/transfer/ops/package-index.ts +1 -1
  840. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  841. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  842. package/dist/activation-LOkDM5WT.mjs +0 -382
  843. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  844. package/dist/adapters-B64LbYcB.d.mts +0 -171
  845. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  846. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  847. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  848. package/dist/api-cFFZpyS0.mjs +0 -4718
  849. package/dist/api-cFFZpyS0.mjs.map +0 -1
  850. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  851. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  852. package/dist/apply-CoT603H3.mjs +0 -1163
  853. package/dist/apply-CoT603H3.mjs.map +0 -1
  854. package/dist/approvals-CqMfNxak.mjs +0 -460
  855. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  856. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  857. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  858. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  859. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  860. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  861. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  862. package/dist/audit-RfCugiSB.mjs +0 -127
  863. package/dist/audit-RfCugiSB.mjs.map +0 -1
  864. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  865. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  866. package/dist/authorize-seCifOMJ.mjs +0 -49
  867. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  868. package/dist/backup-CBu0LrXf.mjs +0 -246
  869. package/dist/backup-CBu0LrXf.mjs.map +0 -1
  870. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  871. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  872. package/dist/block-types-BmZmLmAD.mjs +0 -132
  873. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  874. package/dist/block-values-C_VIPr5t.mjs +0 -175
  875. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  876. package/dist/byline-DYmkXqvo.mjs +0 -909
  877. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  878. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  879. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  880. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  881. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  882. package/dist/bylines-BPwJqoYH.mjs +0 -232
  883. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  884. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  885. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  886. package/dist/cache-m7UEkRFV.mjs +0 -108
  887. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  888. package/dist/canonical-YhEQezjg.mjs +0 -174
  889. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  890. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  891. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  892. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  893. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  894. package/dist/checksum-B2IINIlN.mjs +0 -162
  895. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  896. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  897. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  898. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  899. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  900. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  901. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  902. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  903. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  904. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  905. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  906. package/dist/comment-CrBl22OF.mjs +0 -313
  907. package/dist/comment-CrBl22OF.mjs.map +0 -1
  908. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  909. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  910. package/dist/comments-2ah9du9y.mjs +0 -195
  911. package/dist/comments-2ah9du9y.mjs.map +0 -1
  912. package/dist/comments-fHZ8ON9O.mjs +0 -99
  913. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  914. package/dist/components-CXbq7CSM.mjs +0 -108
  915. package/dist/components-CXbq7CSM.mjs.map +0 -1
  916. package/dist/config-5ii2haYu.d.mts +0 -6528
  917. package/dist/config-5ii2haYu.d.mts.map +0 -1
  918. package/dist/config-IhybvkIQ.mjs +0 -242
  919. package/dist/config-IhybvkIQ.mjs.map +0 -1
  920. package/dist/config-Py43JK9r.d.mts +0 -39
  921. package/dist/config-Py43JK9r.d.mts.map +0 -1
  922. package/dist/content-DFaIEDj9.mjs +0 -2281
  923. package/dist/content-DFaIEDj9.mjs.map +0 -1
  924. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  925. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  926. package/dist/content-policy-DFNw91-d.mjs +0 -46
  927. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  928. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  929. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  930. package/dist/context-BeGccdUX.mjs +0 -1921
  931. package/dist/context-BeGccdUX.mjs.map +0 -1
  932. package/dist/cron-7DCJwPXq.mjs +0 -284
  933. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  934. package/dist/dashboard-DjrB-xxZ.mjs +0 -151
  935. package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
  936. package/dist/default-DQ6vsviu.mjs +0 -81
  937. package/dist/default-DQ6vsviu.mjs.map +0 -1
  938. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  939. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  940. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  941. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  942. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  943. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  944. package/dist/digest-BarSh-pN.mjs +0 -194
  945. package/dist/digest-BarSh-pN.mjs.map +0 -1
  946. package/dist/direct-executor-BmuFJJZV.mjs +0 -104
  947. package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
  948. package/dist/dist-BNwANFJR.mjs +0 -810
  949. package/dist/dist-BNwANFJR.mjs.map +0 -1
  950. package/dist/email-console-bJn3ctqA.mjs +0 -50
  951. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  952. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  953. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  954. package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
  955. package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
  956. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  957. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  958. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  959. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  960. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  961. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  962. package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
  963. package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
  964. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  965. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  966. package/dist/error-CfvOHP0M.mjs +0 -90
  967. package/dist/error-CfvOHP0M.mjs.map +0 -1
  968. package/dist/errors-BF0_LFhW.mjs +0 -460
  969. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  970. package/dist/errors-DgE1zJGG.mjs +0 -120
  971. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  972. package/dist/escape-CuaZhZvL.mjs +0 -9
  973. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  974. package/dist/fence-CMDXJYc_.mjs +0 -162
  975. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  976. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  977. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  978. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  979. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  980. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  981. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  982. package/dist/gc-DjKY0Ay1.mjs +0 -75
  983. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  984. package/dist/hash-SDAW6zC-.mjs +0 -37
  985. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  986. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  987. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  988. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  989. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  990. package/dist/hreflang-DMFBL2eb.mjs +0 -105
  991. package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
  992. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  993. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  994. package/dist/identity-IyNWwXr6.mjs +0 -35
  995. package/dist/identity-IyNWwXr6.mjs.map +0 -1
  996. package/dist/import-C3JZplWq.mjs +0 -2020
  997. package/dist/import-C3JZplWq.mjs.map +0 -1
  998. package/dist/index-D-hdtLe8.d.mts +0 -623
  999. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1000. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1001. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1002. package/dist/keys-yxLm5l35.mjs +0 -61
  1003. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1004. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1005. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1006. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1007. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1008. package/dist/load-XgJiE6_3.mjs +0 -28
  1009. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1010. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1011. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1012. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1013. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1014. package/dist/manifest-builder-B8zR-73J.mjs +0 -189
  1015. package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
  1016. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1017. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1018. package/dist/media-Pu1L6xir.mjs +0 -408
  1019. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1020. package/dist/media-Qp5S3eH3.mjs +0 -355
  1021. package/dist/media-Qp5S3eH3.mjs.map +0 -1
  1022. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1023. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1024. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1025. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1026. package/dist/media-h7tOiDLj.mjs +0 -221
  1027. package/dist/media-h7tOiDLj.mjs.map +0 -1
  1028. package/dist/media-url-jArBpzIG.mjs +0 -43
  1029. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1030. package/dist/media-usage-My-Vi-ex.mjs +0 -1629
  1031. package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
  1032. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1033. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1034. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1035. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1036. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1037. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1038. package/dist/menus-BM7BPLOb.mjs +0 -139
  1039. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1040. package/dist/menus-ITeAbcIF.mjs +0 -753
  1041. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1042. package/dist/menus-TsSGmSR4.mjs +0 -3608
  1043. package/dist/menus-TsSGmSR4.mjs.map +0 -1
  1044. package/dist/mime-ChLqYwDk.mjs +0 -36
  1045. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1046. package/dist/mode-CCuKXUci.mjs +0 -23
  1047. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1048. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1049. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1050. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1051. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1052. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1053. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1054. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1055. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1056. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1057. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1058. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1059. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1060. package/dist/options-SQCHQCPH.d.mts +0 -81
  1061. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1062. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1063. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1064. package/dist/parse-DY6OD1j_.mjs +0 -81
  1065. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1066. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1067. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1068. package/dist/paths-JxokKIbr.mjs +0 -77
  1069. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1070. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1071. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1072. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1073. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1074. package/dist/plan-xjcWrAah.mjs +0 -135
  1075. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1076. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1077. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1078. package/dist/policy-CUvwAARc.mjs +0 -45
  1079. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1080. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1081. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1082. package/dist/preview-CIUcPYr6.mjs +0 -107
  1083. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1084. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1085. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1086. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1087. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1088. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1089. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1090. package/dist/query-B48peoRT.mjs +0 -890
  1091. package/dist/query-B48peoRT.mjs.map +0 -1
  1092. package/dist/query-C4IH0uhR.mjs +0 -41
  1093. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1094. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1095. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1096. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1097. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1098. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1099. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1100. package/dist/redirect-iJf5fltD.mjs +0 -415
  1101. package/dist/redirect-iJf5fltD.mjs.map +0 -1
  1102. package/dist/redirects-CYu1u1aK.mjs +0 -446
  1103. package/dist/redirects-CYu1u1aK.mjs.map +0 -1
  1104. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1105. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1106. package/dist/relation-M4NUCb0b.mjs +0 -334
  1107. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1108. package/dist/relations-CCif47Oq.mjs +0 -403
  1109. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1110. package/dist/relations-CK9CYUyr.mjs +0 -310
  1111. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1112. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1113. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1114. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1115. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1116. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1117. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1118. package/dist/route-wire--1hLuACz.mjs +0 -197
  1119. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1120. package/dist/routes-CUsM40Cc.mjs +0 -272
  1121. package/dist/routes-CUsM40Cc.mjs.map +0 -1
  1122. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1123. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1124. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1125. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1126. package/dist/schema-BABiRdsH.mjs +0 -13
  1127. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1128. package/dist/schema-Du3MzCG0.mjs +0 -446
  1129. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1130. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1131. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1132. package/dist/search-Bt1PL1jf.mjs +0 -448
  1133. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1134. package/dist/sections-Ddptx_o9.mjs +0 -346
  1135. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1136. package/dist/seo-CZT2oLtT.mjs +0 -114
  1137. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1138. package/dist/seo-D5w3-Azy.mjs +0 -133
  1139. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1140. package/dist/service-DuykXPyW.mjs +0 -150
  1141. package/dist/service-DuykXPyW.mjs.map +0 -1
  1142. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1143. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1144. package/dist/settings-2xNYr90o.mjs +0 -51
  1145. package/dist/settings-2xNYr90o.mjs.map +0 -1
  1146. package/dist/settings-CgjRWGW9.mjs +0 -439
  1147. package/dist/settings-CgjRWGW9.mjs.map +0 -1
  1148. package/dist/settings-DYidIB26.mjs +0 -61
  1149. package/dist/settings-DYidIB26.mjs.map +0 -1
  1150. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1151. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1152. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1153. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1154. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1155. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1156. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1157. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1158. package/dist/snapshot-CugwUqKQ.mjs +0 -237
  1159. package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
  1160. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1161. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1162. package/dist/stage-DgrBz_du.mjs +0 -662
  1163. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1164. package/dist/state-DDiPySSG.mjs +0 -153
  1165. package/dist/state-DDiPySSG.mjs.map +0 -1
  1166. package/dist/status-DZKIG4a9.mjs +0 -30
  1167. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1168. package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
  1169. package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
  1170. package/dist/tar-_1AgTYFu.mjs +0 -449
  1171. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1172. package/dist/target-_7pn2Gbg.mjs +0 -27
  1173. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1174. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1175. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1176. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1177. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1178. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1179. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1180. package/dist/tokens-u78jETkX.mjs +0 -171
  1181. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1182. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1183. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1184. package/dist/transfer-BhUCrgDc.mjs +0 -8675
  1185. package/dist/transfer-BhUCrgDc.mjs.map +0 -1
  1186. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1187. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1188. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1189. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1190. package/dist/transformations-9gfpwY65.mjs +0 -196
  1191. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1192. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1193. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1194. package/dist/transport-DKWIq53q.mjs +0 -136
  1195. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1196. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1197. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1198. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1199. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1200. package/dist/types-B4sUC2p1.d.mts +0 -198
  1201. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1202. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1203. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1204. package/dist/types-BZakh7Ym.mjs +0 -22
  1205. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1206. package/dist/types-B_CppEmv.d.mts +0 -264
  1207. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1208. package/dist/types-BcrBrE6-.mjs +0 -159
  1209. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1210. package/dist/types-BkUg2yHx.mjs +0 -92
  1211. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1212. package/dist/types-CAZgq9fO.d.mts +0 -124
  1213. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1214. package/dist/types-Cd-O03VG.d.mts +0 -363
  1215. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1216. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1217. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1218. package/dist/types-D2fvWd1i.d.mts +0 -359
  1219. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1220. package/dist/types-D7HUsguf.mjs +0 -77
  1221. package/dist/types-D7HUsguf.mjs.map +0 -1
  1222. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1223. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1224. package/dist/types-DhV6Q5bP.mjs +0 -18
  1225. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1226. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1227. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1228. package/dist/types-VT4-BugW.mjs +0 -16
  1229. package/dist/types-VT4-BugW.mjs.map +0 -1
  1230. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1231. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1232. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1233. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1234. package/dist/user-DDSL-sGw.mjs +0 -171
  1235. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1236. package/dist/utils-DdhmO9w9.mjs +0 -439
  1237. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1238. package/dist/validate-CHosPEhs.mjs +0 -453
  1239. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1240. package/dist/validate-CM79QXYE.d.mts +0 -432
  1241. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1242. package/dist/validation-BFecQczG.mjs +0 -218
  1243. package/dist/validation-BFecQczG.mjs.map +0 -1
  1244. package/dist/version-BRZXVifl.mjs +0 -9
  1245. package/dist/version-BRZXVifl.mjs.map +0 -1
  1246. package/dist/version-DUQDHgrf.mjs +0 -7
  1247. package/dist/version-DUQDHgrf.mjs.map +0 -1
  1248. package/dist/widgets-WdV72brA.mjs +0 -126
  1249. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1250. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1251. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1252. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1253. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1254. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1255. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1256. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1257. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
  1258. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
@@ -0,0 +1,31 @@
1
+ //#region src/plugins/sandbox/hook-result.d.ts
2
+ /** Current wire-format version for sandbox hook result envelopes. */
3
+ declare const SANDBOX_HOOK_RESULT_VERSION: 1;
4
+ /** Maximum editor-facing rejection reason accepted from a sandboxed plugin. */
5
+ declare const MAX_SANDBOX_SAVE_REJECTION_REASON_LENGTH = 500;
6
+ interface SandboxSaveRejectedError {
7
+ code: "SAVE_REJECTED";
8
+ reason: string;
9
+ }
10
+ /**
11
+ * Returned from a sandboxed `content:beforeSave` hook to reject the save.
12
+ * The host validates every field before exposing the reason to an editor.
13
+ */
14
+ interface SandboxHookErrorEnvelope {
15
+ __emdashSandboxHookResult: true;
16
+ version: typeof SANDBOX_HOOK_RESULT_VERSION;
17
+ error: SandboxSaveRejectedError;
18
+ }
19
+ type SandboxHookResultInspection = {
20
+ kind: "value";
21
+ } | {
22
+ kind: "malformed";
23
+ } | {
24
+ kind: "error";
25
+ error: SandboxSaveRejectedError;
26
+ };
27
+ /** Validate and normalize an untrusted value returned across the sandbox boundary. */
28
+ declare function inspectSandboxHookResult(value: unknown): SandboxHookResultInspection;
29
+ //#endregion
30
+ export { SandboxSaveRejectedError as a, SandboxHookResultInspection as i, SANDBOX_HOOK_RESULT_VERSION as n, inspectSandboxHookResult as o, SandboxHookErrorEnvelope as r, MAX_SANDBOX_SAVE_REJECTION_REASON_LENGTH as t };
31
+ //# sourceMappingURL=hook-result-CYSk0XFe.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-result-CYSk0XFe.d.mts","names":[],"sources":["../src/plugins/sandbox/hook-result.ts"],"mappings":";;cACa,2BAAA;;cAGA,wCAAA;AAAA,UAEI,wBAAA;EAChB,IAAA;EACA,MAAA;AAAA;;;;AAFD;UASiB,wBAAA;EAChB,yBAAA;EACA,OAAA,SAAgB,2BAAA;EAChB,KAAA,EAAO,wBAAA;AAAA;AAAA,KAGI,2BAAA;EACP,IAAA;AAAA;EACA,IAAA;AAAA;EACA,IAAA;EAAe,KAAA,EAAO,wBAAA;AAAA;;iBAOX,wBAAA,CAAyB,KAAA,YAAiB,2BAAA"}
@@ -0,0 +1,105 @@
1
+ import { i as isI18nEnabled, r as getI18nConfig } from "./config-CvmjJcVw.mjs";
2
+ import { t as ContentRepository } from "./content-CbnufDsM.mjs";
3
+ import { a as resolveLocalizedContentRoutePath } from "./resolve-C0s1E_fH.mjs";
4
+ import { r as requestCached } from "./request-cache-iHRlHx1d.mjs";
5
+ import { n as getCollectionInfoWithDb } from "./query-OzMJ6vJP.mjs";
6
+ import { o as getSiteSettingsWithDb } from "./settings-D5EHi0Tk.mjs";
7
+
8
+ //#region src/seo/hreflang.ts
9
+ const TRAILING_SLASH_RE = /\/$/;
10
+ const ABSOLUTE_URL_RE = /^https?:\/\//i;
11
+ /**
12
+ * IDs of variants flagged `noindex` in the SEO panel. Entries without
13
+ * an `_emdash_seo` row are indexable by default (same as the sitemap).
14
+ * The id list is bounded by the number of configured locales, so no
15
+ * chunking is needed.
16
+ */
17
+ async function findNoindexIds(db, collection, ids) {
18
+ if (ids.length === 0) return /* @__PURE__ */ new Set();
19
+ const rows = await db.selectFrom("_emdash_seo").select("content_id").where("collection", "=", collection).where("content_id", "in", ids).where("seo_no_index", "=", 1).execute();
20
+ return new Set(rows.map((r) => r.content_id));
21
+ }
22
+ /**
23
+ * Resolve hreflang alternates for a content entry.
24
+ *
25
+ * @example
26
+ * ```astro
27
+ * ---
28
+ * import { getHreflangAlternates } from "emdash";
29
+ *
30
+ * const alternates = await getHreflangAlternates("posts", entry.data.id, {
31
+ * siteUrl: Astro.url.origin,
32
+ * });
33
+ * ---
34
+ * <head>
35
+ * {alternates.map((a) => <link rel="alternate" hreflang={a.hreflang} href={a.href} />)}
36
+ * </head>
37
+ * ```
38
+ */
39
+ async function getHreflangAlternates(collection, entryId, options = {}) {
40
+ if (!isI18nEnabled()) return [];
41
+ return requestCached(`hreflang:${collection}:${entryId}:${options.siteUrl ?? ""}:${options.trailingSlash ?? "ignore"}`, async () => {
42
+ const { getDb } = await import("./loader-CrRPfkHS.mjs").then((n) => n.l);
43
+ return getHreflangAlternatesWithDb(await getDb(), collection, entryId, options);
44
+ });
45
+ }
46
+ /**
47
+ * Resolve hreflang alternates with an explicit db handle.
48
+ *
49
+ * @internal Use `getHreflangAlternates()` in templates. This variant is
50
+ * for routes/components that already have a database handle.
51
+ */
52
+ async function getHreflangAlternatesWithDb(db, collection, entryId, options = {}) {
53
+ if (!isI18nEnabled()) return [];
54
+ let siteUrl = options.siteUrl;
55
+ if (!siteUrl) siteUrl = (await getSiteSettingsWithDb(db)).url;
56
+ if (!siteUrl || !ABSOLUTE_URL_RE.test(siteUrl)) return [];
57
+ siteUrl = siteUrl.replace(TRAILING_SLASH_RE, "");
58
+ const repo = new ContentRepository(db);
59
+ const item = await repo.findByIdOrSlug(collection, entryId);
60
+ if (!item) return [];
61
+ const group = item.translationGroup || item.id;
62
+ let variants = await repo.findTranslations(collection, group);
63
+ if (variants.length === 0) variants = [item];
64
+ let published = variants.filter((v) => v.status === "published");
65
+ if (published.length === 0) return [];
66
+ const noindexIds = await findNoindexIds(db, collection, published.map((v) => v.id));
67
+ if (noindexIds.has(item.id)) return [];
68
+ published = published.filter((v) => !noindexIds.has(v.id));
69
+ const urlPattern = (await getCollectionInfoWithDb(db, collection))?.urlPattern ?? null;
70
+ const resolved = [];
71
+ for (const variant of published) {
72
+ const locale = variant.locale || "en";
73
+ const path = await resolveLocalizedContentRoutePath({
74
+ pattern: urlPattern,
75
+ collection,
76
+ slug: variant.slug || variant.id,
77
+ id: variant.id,
78
+ date: variant.publishedAt,
79
+ locale,
80
+ trailingSlash: options.trailingSlash
81
+ });
82
+ if (path === null) continue;
83
+ resolved.push({
84
+ locale,
85
+ href: `${siteUrl}${path}`
86
+ });
87
+ }
88
+ if (resolved.length === 0) return [];
89
+ resolved.sort((a, b) => a.locale.localeCompare(b.locale));
90
+ const alternates = resolved.map((r) => ({
91
+ hreflang: r.locale,
92
+ href: r.href
93
+ }));
94
+ const defaultLocale = getI18nConfig()?.defaultLocale;
95
+ const xDefault = resolved.find((r) => r.locale === defaultLocale) ?? resolved[0];
96
+ if (xDefault) alternates.push({
97
+ hreflang: "x-default",
98
+ href: xDefault.href
99
+ });
100
+ return alternates;
101
+ }
102
+
103
+ //#endregion
104
+ export { getHreflangAlternatesWithDb as n, getHreflangAlternates as t };
105
+ //# sourceMappingURL=hreflang-CChPV7jx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hreflang-CChPV7jx.mjs","names":[],"sources":["../src/seo/hreflang.ts"],"sourcesContent":["/**\n * hreflang alternate resolution for translated content (#1690).\n *\n * Mirrors the sitemap route's semantics so the render path and the\n * sitemap always agree:\n *\n * - Alternates are emitted per published locale variant of a\n * translation group, including a self-referencing entry (Google\n * recommends the page annotate itself).\n * - `x-default` points at the default-locale variant, falling back to\n * the first routable variant when the default locale has no\n * translation.\n * - Variants whose locale isn't in the configured `i18n.locales` list\n * are dropped: linking to a route the site can't serve is worse than\n * no link at all.\n * - Variants flagged `noindex` in the SEO panel are excluded — the\n * sitemap doesn't list them, and pointing search engines at a page\n * that asks not to be indexed is a contradictory signal. When the\n * entry itself is noindex the result is empty: a page opting out of\n * indexing shouldn't announce an hreflang set at all.\n * - When i18n is disabled (or no absolute site URL can be resolved,\n * which hreflang requires) the result is empty and no queries run.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport { ContentRepository } from \"../database/repositories/content.js\";\nimport type { Database } from \"../database/types.js\";\nimport { getI18nConfig, isI18nEnabled } from \"../i18n/config.js\";\nimport { resolveLocalizedContentRoutePath } from \"../i18n/resolve.js\";\nimport { requestCached } from \"../request-cache.js\";\nimport { getCollectionInfoWithDb } from \"../schema/query.js\";\nimport { getSiteSettingsWithDb } from \"../settings/index.js\";\n\nconst TRAILING_SLASH_RE = /\\/$/;\nconst ABSOLUTE_URL_RE = /^https?:\\/\\//i;\n\n/**\n * IDs of variants flagged `noindex` in the SEO panel. Entries without\n * an `_emdash_seo` row are indexable by default (same as the sitemap).\n * The id list is bounded by the number of configured locales, so no\n * chunking is needed.\n */\nasync function findNoindexIds(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tids: string[],\n): Promise<Set<string>> {\n\tif (ids.length === 0) return new Set();\n\tconst rows = await db\n\t\t.selectFrom(\"_emdash_seo\")\n\t\t.select(\"content_id\")\n\t\t.where(\"collection\", \"=\", collection)\n\t\t.where(\"content_id\", \"in\", ids)\n\t\t.where(\"seo_no_index\", \"=\", 1)\n\t\t.execute();\n\treturn new Set(rows.map((r) => r.content_id));\n}\n\n/** A single alternate link, ready to render as `<link rel=\"alternate\">`. */\nexport interface HreflangAlternate {\n\t/** Locale code, or `\"x-default\"` for the default variant */\n\threflang: string;\n\t/** Absolute URL of the variant */\n\thref: string;\n}\n\nexport interface HreflangOptions {\n\t/**\n\t * Absolute site origin (e.g. `https://example.com`) used to build\n\t * the alternate URLs. Falls back to the site settings URL; when\n\t * neither is available the result is empty, since hreflang\n\t * requires fully-qualified URLs.\n\t */\n\tsiteUrl?: string;\n\t/** Astro's route trailing-slash policy. */\n\ttrailingSlash?: \"always\" | \"never\" | \"ignore\";\n}\n\n/**\n * Resolve hreflang alternates for a content entry.\n *\n * @example\n * ```astro\n * ---\n * import { getHreflangAlternates } from \"emdash\";\n *\n * const alternates = await getHreflangAlternates(\"posts\", entry.data.id, {\n * siteUrl: Astro.url.origin,\n * });\n * ---\n * <head>\n * {alternates.map((a) => <link rel=\"alternate\" hreflang={a.hreflang} href={a.href} />)}\n * </head>\n * ```\n */\nexport async function getHreflangAlternates(\n\tcollection: string,\n\tentryId: string,\n\toptions: HreflangOptions = {},\n): Promise<HreflangAlternate[]> {\n\tif (!isI18nEnabled()) return [];\n\tconst key = `hreflang:${collection}:${entryId}:${options.siteUrl ?? \"\"}:${options.trailingSlash ?? \"ignore\"}`;\n\treturn requestCached(key, async () => {\n\t\tconst { getDb } = await import(\"../loader.js\");\n\t\tconst db = await getDb();\n\t\treturn getHreflangAlternatesWithDb(db, collection, entryId, options);\n\t});\n}\n\n/**\n * Resolve hreflang alternates with an explicit db handle.\n *\n * @internal Use `getHreflangAlternates()` in templates. This variant is\n * for routes/components that already have a database handle.\n */\nexport async function getHreflangAlternatesWithDb(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tentryId: string,\n\toptions: HreflangOptions = {},\n): Promise<HreflangAlternate[]> {\n\tif (!isI18nEnabled()) return [];\n\n\tlet siteUrl = options.siteUrl;\n\tif (!siteUrl) {\n\t\tconst settings = await getSiteSettingsWithDb(db);\n\t\tsiteUrl = settings.url;\n\t}\n\t// hreflang requires fully-qualified URLs; a relative site URL would\n\t// produce invalid output (and EmDashHead's isSafeHref would drop it).\n\tif (!siteUrl || !ABSOLUTE_URL_RE.test(siteUrl)) return [];\n\tsiteUrl = siteUrl.replace(TRAILING_SLASH_RE, \"\");\n\n\tconst repo = new ContentRepository(db);\n\tconst item = await repo.findByIdOrSlug(collection, entryId);\n\tif (!item) return [];\n\n\t// Legacy rows imported before i18n may have no translation_group;\n\t// treat them as a single-variant group.\n\tconst group = item.translationGroup || item.id;\n\tlet variants = await repo.findTranslations(collection, group);\n\tif (variants.length === 0) variants = [item];\n\n\tlet published = variants.filter((v) => v.status === \"published\");\n\tif (published.length === 0) return [];\n\n\t// Exclude noindex variants, matching the sitemap's `_emdash_seo`\n\t// filter so head and sitemap agree on which variants are\n\t// discoverable. When the requested entry itself is noindex, emit\n\t// nothing: a page opting out of indexing shouldn't announce an\n\t// hreflang set.\n\tconst noindexIds = await findNoindexIds(\n\t\tdb,\n\t\tcollection,\n\t\tpublished.map((v) => v.id),\n\t);\n\tif (noindexIds.has(item.id)) return [];\n\tpublished = published.filter((v) => !noindexIds.has(v.id));\n\n\tconst info = await getCollectionInfoWithDb(db, collection);\n\tconst urlPattern = info?.urlPattern ?? null;\n\n\tconst resolved: Array<{ locale: string; href: string }> = [];\n\tfor (const variant of published) {\n\t\tconst locale = variant.locale || \"en\";\n\t\tconst path = await resolveLocalizedContentRoutePath({\n\t\t\tpattern: urlPattern,\n\t\t\tcollection,\n\t\t\tslug: variant.slug || variant.id,\n\t\t\tid: variant.id,\n\t\t\tdate: variant.publishedAt,\n\t\t\tlocale,\n\t\t\ttrailingSlash: options.trailingSlash,\n\t\t});\n\t\tif (path === null) continue;\n\t\tresolved.push({ locale, href: `${siteUrl}${path}` });\n\t}\n\tif (resolved.length === 0) return [];\n\n\tresolved.sort((a, b) => a.locale.localeCompare(b.locale));\n\tconst alternates: HreflangAlternate[] = resolved.map((r) => ({\n\t\threflang: r.locale,\n\t\thref: r.href,\n\t}));\n\n\t// x-default: default-locale variant, else the first routable one.\n\t// Same fallback the sitemap route uses.\n\tconst defaultLocale = getI18nConfig()?.defaultLocale;\n\tconst xDefault = resolved.find((r) => r.locale === defaultLocale) ?? resolved[0];\n\tif (xDefault) {\n\t\talternates.push({ hreflang: \"x-default\", href: xDefault.href });\n\t}\n\n\treturn alternates;\n}\n"],"mappings":";;;;;;;;AAkCA,MAAM,oBAAoB;AAC1B,MAAM,kBAAkB;;;;;;;AAQxB,eAAe,eACd,IACA,YACA,KACuB;AACvB,KAAI,IAAI,WAAW,EAAG,wBAAO,IAAI,KAAK;CACtC,MAAM,OAAO,MAAM,GACjB,WAAW,cAAc,CACzB,OAAO,aAAa,CACpB,MAAM,cAAc,KAAK,WAAW,CACpC,MAAM,cAAc,MAAM,IAAI,CAC9B,MAAM,gBAAgB,KAAK,EAAE,CAC7B,SAAS;AACX,QAAO,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;AAwC9C,eAAsB,sBACrB,YACA,SACA,UAA2B,EAAE,EACE;AAC/B,KAAI,CAAC,eAAe,CAAE,QAAO,EAAE;AAE/B,QAAO,cADK,YAAY,WAAW,GAAG,QAAQ,GAAG,QAAQ,WAAW,GAAG,GAAG,QAAQ,iBAAiB,YACzE,YAAY;EACrC,MAAM,EAAE,UAAU,MAAM,OAAO;AAE/B,SAAO,4BADI,MAAM,OAAO,EACe,YAAY,SAAS,QAAQ;GACnE;;;;;;;;AASH,eAAsB,4BACrB,IACA,YACA,SACA,UAA2B,EAAE,EACE;AAC/B,KAAI,CAAC,eAAe,CAAE,QAAO,EAAE;CAE/B,IAAI,UAAU,QAAQ;AACtB,KAAI,CAAC,QAEJ,YADiB,MAAM,sBAAsB,GAAG,EAC7B;AAIpB,KAAI,CAAC,WAAW,CAAC,gBAAgB,KAAK,QAAQ,CAAE,QAAO,EAAE;AACzD,WAAU,QAAQ,QAAQ,mBAAmB,GAAG;CAEhD,MAAM,OAAO,IAAI,kBAAkB,GAAG;CACtC,MAAM,OAAO,MAAM,KAAK,eAAe,YAAY,QAAQ;AAC3D,KAAI,CAAC,KAAM,QAAO,EAAE;CAIpB,MAAM,QAAQ,KAAK,oBAAoB,KAAK;CAC5C,IAAI,WAAW,MAAM,KAAK,iBAAiB,YAAY,MAAM;AAC7D,KAAI,SAAS,WAAW,EAAG,YAAW,CAAC,KAAK;CAE5C,IAAI,YAAY,SAAS,QAAQ,MAAM,EAAE,WAAW,YAAY;AAChE,KAAI,UAAU,WAAW,EAAG,QAAO,EAAE;CAOrC,MAAM,aAAa,MAAM,eACxB,IACA,YACA,UAAU,KAAK,MAAM,EAAE,GAAG,CAC1B;AACD,KAAI,WAAW,IAAI,KAAK,GAAG,CAAE,QAAO,EAAE;AACtC,aAAY,UAAU,QAAQ,MAAM,CAAC,WAAW,IAAI,EAAE,GAAG,CAAC;CAG1D,MAAM,cADO,MAAM,wBAAwB,IAAI,WAAW,GACjC,cAAc;CAEvC,MAAM,WAAoD,EAAE;AAC5D,MAAK,MAAM,WAAW,WAAW;EAChC,MAAM,SAAS,QAAQ,UAAU;EACjC,MAAM,OAAO,MAAM,iCAAiC;GACnD,SAAS;GACT;GACA,MAAM,QAAQ,QAAQ,QAAQ;GAC9B,IAAI,QAAQ;GACZ,MAAM,QAAQ;GACd;GACA,eAAe,QAAQ;GACvB,CAAC;AACF,MAAI,SAAS,KAAM;AACnB,WAAS,KAAK;GAAE;GAAQ,MAAM,GAAG,UAAU;GAAQ,CAAC;;AAErD,KAAI,SAAS,WAAW,EAAG,QAAO,EAAE;AAEpC,UAAS,MAAM,GAAG,MAAM,EAAE,OAAO,cAAc,EAAE,OAAO,CAAC;CACzD,MAAM,aAAkC,SAAS,KAAK,OAAO;EAC5D,UAAU,EAAE;EACZ,MAAM,EAAE;EACR,EAAE;CAIH,MAAM,gBAAgB,eAAe,EAAE;CACvC,MAAM,WAAW,SAAS,MAAM,MAAM,EAAE,WAAW,cAAc,IAAI,SAAS;AAC9E,KAAI,SACH,YAAW,KAAK;EAAE,UAAU;EAAa,MAAM,SAAS;EAAM,CAAC;AAGhE,QAAO"}
@@ -0,0 +1,50 @@
1
+ import { t as Database } from "./types-BQ3hwYJT.mjs";
2
+ import { Kysely } from "kysely";
3
+
4
+ //#region src/seo/hreflang.d.ts
5
+ /** A single alternate link, ready to render as `<link rel="alternate">`. */
6
+ interface HreflangAlternate {
7
+ /** Locale code, or `"x-default"` for the default variant */
8
+ hreflang: string;
9
+ /** Absolute URL of the variant */
10
+ href: string;
11
+ }
12
+ interface HreflangOptions {
13
+ /**
14
+ * Absolute site origin (e.g. `https://example.com`) used to build
15
+ * the alternate URLs. Falls back to the site settings URL; when
16
+ * neither is available the result is empty, since hreflang
17
+ * requires fully-qualified URLs.
18
+ */
19
+ siteUrl?: string;
20
+ /** Astro's route trailing-slash policy. */
21
+ trailingSlash?: "always" | "never" | "ignore";
22
+ }
23
+ /**
24
+ * Resolve hreflang alternates for a content entry.
25
+ *
26
+ * @example
27
+ * ```astro
28
+ * ---
29
+ * import { getHreflangAlternates } from "emdash";
30
+ *
31
+ * const alternates = await getHreflangAlternates("posts", entry.data.id, {
32
+ * siteUrl: Astro.url.origin,
33
+ * });
34
+ * ---
35
+ * <head>
36
+ * {alternates.map((a) => <link rel="alternate" hreflang={a.hreflang} href={a.href} />)}
37
+ * </head>
38
+ * ```
39
+ */
40
+ declare function getHreflangAlternates(collection: string, entryId: string, options?: HreflangOptions): Promise<HreflangAlternate[]>;
41
+ /**
42
+ * Resolve hreflang alternates with an explicit db handle.
43
+ *
44
+ * @internal Use `getHreflangAlternates()` in templates. This variant is
45
+ * for routes/components that already have a database handle.
46
+ */
47
+ declare function getHreflangAlternatesWithDb(db: Kysely<Database>, collection: string, entryId: string, options?: HreflangOptions): Promise<HreflangAlternate[]>;
48
+ //#endregion
49
+ export { getHreflangAlternatesWithDb as i, HreflangOptions as n, getHreflangAlternates as r, HreflangAlternate as t };
50
+ //# sourceMappingURL=hreflang-DRslq3QI.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hreflang-DRslq3QI.d.mts","names":[],"sources":["../src/seo/hreflang.ts"],"mappings":";;;;;UA4DiB,iBAAA;EAwCN;EAtCV,QAAA;EAsC2B;EApC3B,IAAA;AAAA;AAAA,UAGgB,eAAA;EAkDL;;;;;;EA3CX,OAAA;EA2CI;EAzCJ,aAAA;AAAA;;;;;;;;;;;;;;;;;;iBAoBqB,qBAAA,CACrB,UAAA,UACA,OAAA,UACA,OAAA,GAAS,eAAA,GACP,OAAA,CAAQ,iBAAA;;;;;;;iBAgBW,2BAAA,CACrB,EAAA,EAAI,MAAA,CAAO,QAAA,GACX,UAAA,UACA,OAAA,UACA,OAAA,GAAS,eAAA,GACP,OAAA,CAAQ,iBAAA"}
@@ -0,0 +1,339 @@
1
+ import { n as generateFieldSchema } from "./zod-generator-DmTKI-Ig.mjs";
2
+ import { n as apiSuccess, t as apiError } from "./error-BfsNNrIE.mjs";
3
+ import { i as pluginRouteResponseToWire, n as parseDeclaredPluginRouteInput, r as pluginRouteResponseFromWire, t as PluginRouteRequestError } from "./route-wire-C9PJV9aL.mjs";
4
+ import { i as requirePerm, r as requireOwnerPerm } from "./authorize-WgdKF8QY.mjs";
5
+ import { n as requireScope } from "./scopes-BqPOKoKf.mjs";
6
+ import { Permissions } from "@emdash-cms/auth";
7
+ import { getLocaleDir, resolveLocale } from "@emdash-cms/admin/locales";
8
+ import { isEditorDraftPatchEffect, validateContentEditorPanelInteraction, validateEditorDraftPatchEffect } from "@emdash-cms/blocks/server";
9
+
10
+ //#region src/plugins/editor-draft.ts
11
+ const EDITOR_DRAFT_LIMITS = {
12
+ maxFields: 32,
13
+ maxSnapshotBytes: 192 * 1024,
14
+ maxFieldBytes: 64 * 1024
15
+ };
16
+ const ENCODER = new TextEncoder();
17
+ const INVOCATION_PATTERN = /^[A-Za-z0-9_-]{16,128}$/;
18
+ function isRecord$1(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+ function isBrowserDraftRequest(value) {
22
+ return isRecord$1(value) && typeof value.collection === "string" && typeof value.entryId === "string" && (value.locale === null || typeof value.locale === "string") && typeof value.baseRevision === "string" && typeof value.generation === "number" && typeof value.invocationId === "string" && isRecord$1(value.fields);
23
+ }
24
+ function jsonBytes(value) {
25
+ try {
26
+ return ENCODER.encode(JSON.stringify(value)).byteLength;
27
+ } catch {
28
+ return null;
29
+ }
30
+ }
31
+ function selectedFields(collection, selector) {
32
+ const selected = new Set(selector?.fields ?? []);
33
+ if (selector?.translatable) {
34
+ for (const field of collection.fields) if (field.translatable) selected.add(field.slug);
35
+ }
36
+ return selected;
37
+ }
38
+ function sanitizeField(field) {
39
+ return {
40
+ slug: field.slug,
41
+ label: field.label,
42
+ type: field.type,
43
+ required: field.required,
44
+ translatable: field.translatable,
45
+ ...field.validation ? { validation: { ...field.validation } } : {}
46
+ };
47
+ }
48
+ function fail(code, message) {
49
+ return {
50
+ code,
51
+ message
52
+ };
53
+ }
54
+ function validateEditorDraftRequest(input) {
55
+ if (!isBrowserDraftRequest(input.request)) return fail("EDITOR_DRAFT_INVALID", "Invalid editor draft snapshot");
56
+ const request = input.request;
57
+ if (request.collection !== input.collection.slug || request.entryId !== input.entry.id || request.locale !== input.entry.locale) return fail("EDITOR_DRAFT_STALE", "Editor draft identity is stale");
58
+ if (request.baseRevision !== input.entry.revision) return fail("EDITOR_DRAFT_STALE", "Editor draft base revision is stale");
59
+ if (!Number.isSafeInteger(request.generation) || request.generation < 0 || typeof request.invocationId !== "string" || !INVOCATION_PATTERN.test(request.invocationId)) return fail("EDITOR_DRAFT_INVALID", "Invalid editor draft invocation identity");
60
+ const size = jsonBytes(request);
61
+ if (size === null) return fail("EDITOR_DRAFT_INVALID", "Editor draft snapshot must be JSON serializable");
62
+ if (size > EDITOR_DRAFT_LIMITS.maxSnapshotBytes) return fail("EDITOR_DRAFT_TOO_LARGE", "Editor draft snapshot exceeds the size limit");
63
+ const readFields = selectedFields(input.collection, input.readSelector);
64
+ const patchFields = selectedFields(input.collection, input.patchSelector);
65
+ if (readFields.size > EDITOR_DRAFT_LIMITS.maxFields || patchFields.size > EDITOR_DRAFT_LIMITS.maxFields) return fail("EDITOR_DRAFT_TOO_LARGE", "Editor draft selector exceeds the field limit");
66
+ const supplied = Object.keys(request.fields);
67
+ if (supplied.length > EDITOR_DRAFT_LIMITS.maxFields) return fail("EDITOR_DRAFT_TOO_LARGE", "Editor draft snapshot exceeds the field limit");
68
+ if (supplied.length > 0 && !input.canRead) return fail("EDITOR_DRAFT_CAPABILITY_REQUIRED", "Plugin cannot read unsaved editor content");
69
+ const bySlug = new Map(input.collection.fields.map((field) => [field.slug, field]));
70
+ const patchFieldDefinitions = Array.from(patchFields, (slug) => bySlug.get(slug)).filter((field) => Boolean(field && !field.unsupportedType)).map(sanitizeField);
71
+ const fields = {};
72
+ const fieldDefinitions = [];
73
+ for (const slug of supplied) {
74
+ if (!readFields.has(slug)) return fail("EDITOR_DRAFT_FIELD_FORBIDDEN", `Editor draft field '${slug}' is not allowed`);
75
+ const field = bySlug.get(slug);
76
+ if (!field || field.unsupportedType) return fail("EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE", `Editor draft field '${slug}' has an unsupported type`);
77
+ const fieldSize = jsonBytes(request.fields[slug]);
78
+ if (fieldSize === null) return fail("EDITOR_DRAFT_INVALID", `Editor draft field '${slug}' is invalid`);
79
+ if (fieldSize > EDITOR_DRAFT_LIMITS.maxFieldBytes) return fail("EDITOR_DRAFT_TOO_LARGE", `Editor draft field '${slug}' exceeds the size limit`);
80
+ if (!generateFieldSchema(field).safeParse(request.fields[slug]).success) return fail("EDITOR_DRAFT_INVALID", `Editor draft field '${slug}' is invalid`);
81
+ fields[slug] = request.fields[slug];
82
+ fieldDefinitions.push(sanitizeField(field));
83
+ }
84
+ if (input.readSelector && !input.canRead) return fail("EDITOR_DRAFT_CAPABILITY_REQUIRED", "Plugin cannot read unsaved editor content");
85
+ if (input.patchSelector && !input.canPatch) return fail("EDITOR_DRAFT_CAPABILITY_REQUIRED", "Plugin cannot propose unsaved editor changes");
86
+ return {
87
+ snapshot: {
88
+ collection: input.collection.slug,
89
+ entryId: input.entry.id,
90
+ locale: input.entry.locale,
91
+ baseRevision: input.entry.revision,
92
+ invocationId: request.invocationId,
93
+ fields,
94
+ fieldDefinitions
95
+ },
96
+ receipt: {
97
+ entryId: input.entry.id,
98
+ locale: input.entry.locale,
99
+ baseRevision: input.entry.revision,
100
+ generation: request.generation,
101
+ invocationId: request.invocationId,
102
+ fieldDefinitions: patchFieldDefinitions
103
+ },
104
+ readFields,
105
+ patchFields
106
+ };
107
+ }
108
+ function validateEditorDraftPatch(input) {
109
+ if (!validateEditorDraftPatchEffect(input.patch).valid || !isEditorDraftPatchEffect(input.patch)) return fail("EDITOR_DRAFT_INVALID", "Plugin returned an invalid editor draft patch");
110
+ const patch = input.patch;
111
+ const bySlug = new Map(input.collection.fields.map((field) => [field.slug, field]));
112
+ for (const operation of patch.operations) {
113
+ if (!input.allowedFields.has(operation.field)) return fail("EDITOR_DRAFT_FIELD_FORBIDDEN", `Editor draft field '${operation.field}' is not allowed`);
114
+ const field = bySlug.get(operation.field);
115
+ if (!field || field.unsupportedType) return fail("EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE", `Editor draft field '${operation.field}' has an unsupported type`);
116
+ const value = operation.op === "clear" ? null : operation.value;
117
+ if (!generateFieldSchema(field).safeParse(value).success) return fail("EDITOR_DRAFT_INVALID", `Editor draft field '${operation.field}' is invalid`);
118
+ const fieldSize = jsonBytes(value);
119
+ if (fieldSize === null || fieldSize > EDITOR_DRAFT_LIMITS.maxFieldBytes) return fail("EDITOR_DRAFT_TOO_LARGE", `Editor draft field '${operation.field}' exceeds the size limit`);
120
+ }
121
+ return patch;
122
+ }
123
+
124
+ //#endregion
125
+ //#region src/plugins/http-route-dispatch.ts
126
+ function editorDraftErrorResponse(error) {
127
+ const status = error.code === "EDITOR_DRAFT_STALE" ? 409 : error.code === "EDITOR_DRAFT_FIELD_FORBIDDEN" || error.code === "EDITOR_DRAFT_CAPABILITY_REQUIRED" ? 403 : error.code === "EDITOR_DRAFT_TOO_LARGE" ? 413 : error.code === "EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE" ? 422 : 400;
128
+ return apiError(error.code, error.message, status);
129
+ }
130
+ function toRoleLevel$1(value) {
131
+ if (value === 10 || value === 20 || value === 30 || value === 40 || value === 50) return value;
132
+ return null;
133
+ }
134
+ function isRecord(value) {
135
+ return typeof value === "object" && value !== null && !Array.isArray(value);
136
+ }
137
+ function isPermission(value) {
138
+ return Object.hasOwn(Permissions, value);
139
+ }
140
+ function authorizePrivatePluginRouteRequest(routeMeta, request, user, tokenScopes) {
141
+ const permission = routeMeta.permission ?? "plugins:manage";
142
+ if (!isPermission(permission)) return apiError("INVALID_PLUGIN_ROUTE", "Plugin route declares an invalid permission", 500);
143
+ let permissionUser;
144
+ if (user) {
145
+ const role = toRoleLevel$1(user.role);
146
+ if (role === null) return apiError("INVALID_USER", "Authenticated user has an invalid role", 500);
147
+ permissionUser = {
148
+ id: user.id,
149
+ role
150
+ };
151
+ } else permissionUser = user;
152
+ const denied = requirePerm(permissionUser, permission);
153
+ if (denied) return denied;
154
+ const scopeError = requireScope({ tokenScopes }, "admin");
155
+ if (scopeError) return scopeError;
156
+ if (!tokenScopes && request.headers.get("X-EmDash-Request") !== "1") return apiError("CSRF_REJECTED", "Missing required header", 403);
157
+ return null;
158
+ }
159
+ /** Dispatch a request through the production plugin-route policy boundary. */
160
+ async function dispatchPluginApiRequest({ runtime, pluginId, path, request, user, tokenScopes, invalidateContentCache, editorDispatch }) {
161
+ const method = request.method.toUpperCase();
162
+ const routeMeta = runtime.getPluginRouteMeta(pluginId, path);
163
+ if (!routeMeta) return apiError("NOT_FOUND", "Plugin route not found", 404);
164
+ if (!routeMeta.public) {
165
+ const denied = authorizePrivatePluginRouteRequest(routeMeta, request, user, tokenScopes);
166
+ if (denied) return denied;
167
+ }
168
+ if (routeMeta.methods && !routeMeta.methods.some((allowed) => allowed === method)) {
169
+ const response = apiError("METHOD_NOT_ALLOWED", "Method not allowed", 405);
170
+ response.headers.set("Allow", routeMeta.methods.join(", "));
171
+ return response;
172
+ }
173
+ const caller = routeMeta.public ? void 0 : user ?? void 0;
174
+ const result = await runtime.handlePluginApiRoute(pluginId, method, path, request, caller, invalidateContentCache, editorDispatch);
175
+ if (!result.success) {
176
+ const code = result.error?.code ?? "PLUGIN_ERROR";
177
+ return apiError(code, code === "INTERNAL_ERROR" ? "Plugin route error" : result.error?.message ?? "Plugin route error", result.status ?? (code === "NOT_FOUND" ? 404 : 400));
178
+ }
179
+ let response;
180
+ if (routeMeta.response === "raw") try {
181
+ response = pluginRouteResponseFromWire(await pluginRouteResponseToWire(result.data, routeMeta.public ? { publicRequestUrl: request.url } : { allowExternalLocation: true }), method);
182
+ } catch (error) {
183
+ console.error(`[plugin:${pluginId}] Invalid raw route response:`, error);
184
+ return apiError("INVALID_PLUGIN_RESPONSE", "Plugin returned an invalid response", 500);
185
+ }
186
+ else response = apiSuccess(result.data);
187
+ if (response.ok && routeMeta.public && routeMeta.cacheControl && (method === "GET" || method === "HEAD")) response.headers.set("Cache-Control", routeMeta.cacheControl);
188
+ else response.headers.set("Cache-Control", "private, no-store");
189
+ return response;
190
+ }
191
+ const EDITOR_EXTENSION_REQUEST_MAX_BYTES = 256 * 1024;
192
+ /** Dispatch a saved-entry extension through ownership, route, and isolate policy. */
193
+ async function dispatchPluginEditorExtensionApiRequest({ runtime, pluginId, kind, extensionId, collection, entryId, request, user, tokenScopes, invalidateContentCache }) {
194
+ const definition = runtime.getPluginEditorExtension(pluginId, kind, extensionId, collection);
195
+ if (!definition) return apiError("NOT_FOUND", "Plugin editor extension not found", 404);
196
+ const routeMeta = runtime.getPluginRouteMeta(pluginId, definition.extension.route);
197
+ if (!routeMeta || routeMeta.public) return apiError("INVALID_PLUGIN_EDITOR_EXTENSION", "Plugin editor extension must reference a private route", 500);
198
+ const denied = authorizePrivatePluginRouteRequest(routeMeta, request, user, tokenScopes);
199
+ if (denied) return denied;
200
+ const requestedLocale = new URL(request.url).searchParams.get("locale") || void 0;
201
+ const contentResult = await runtime.handleContentGet(collection, entryId, requestedLocale);
202
+ if (!contentResult.success) return contentResult.error?.code === "NOT_FOUND" ? apiError("NOT_FOUND", "Content item not found", 404) : apiError("CONTENT_GET_ERROR", "Failed to load content item", 500);
203
+ const contentData = contentResult.data;
204
+ const item = typeof contentData === "object" && contentData !== null && "item" in contentData ? contentData.item : null;
205
+ if (typeof item !== "object" || item === null) return apiError("CONTENT_GET_ERROR", "Failed to load content item", 500);
206
+ const authorId = "authorId" in item && typeof item.authorId === "string" ? item.authorId : "";
207
+ let ownershipUser = user == null ? user : void 0;
208
+ if (user) {
209
+ const ownerRole = toRoleLevel$1(user.role);
210
+ if (ownerRole === null) return apiError("INVALID_USER", "Authenticated user has an invalid role", 500);
211
+ ownershipUser = {
212
+ id: user.id,
213
+ role: ownerRole
214
+ };
215
+ }
216
+ const ownershipDenied = requireOwnerPerm(ownershipUser, authorId, "content:edit_own", "content:edit_any");
217
+ if (ownershipDenied) return ownershipDenied;
218
+ const canonicalId = "id" in item && typeof item.id === "string" ? item.id : null;
219
+ const canonicalLocale = "locale" in item && typeof item.locale === "string" ? item.locale : null;
220
+ const version = "version" in item && typeof item.version === "number" ? item.version : null;
221
+ const baseRevision = typeof contentData === "object" && contentData !== null && "_rev" in contentData && typeof contentData._rev === "string" ? contentData._rev : null;
222
+ if (!canonicalId || version === null) return apiError("CONTENT_GET_ERROR", "Content item has invalid identity", 500);
223
+ let input;
224
+ let editorBody;
225
+ try {
226
+ editorBody = await parseDeclaredPluginRouteInput(request, {
227
+ body: "json",
228
+ maxBytes: EDITOR_EXTENSION_REQUEST_MAX_BYTES
229
+ });
230
+ } catch (error) {
231
+ if (error instanceof PluginRouteRequestError) return apiError(error.status === 413 ? "EDITOR_DRAFT_TOO_LARGE" : "INVALID_REQUEST", error.status === 413 ? "Editor interaction exceeds the size limit" : "Invalid editor interaction", error.status);
232
+ return apiError("INVALID_REQUEST", "Editor interaction could not be read", 400);
233
+ }
234
+ if (kind === "panel") {
235
+ if (!isRecord(editorBody)) return apiError("INVALID_REQUEST", "Editor panel interaction must be an object", 400);
236
+ input = editorBody;
237
+ if (!validateContentEditorPanelInteraction(input).valid) return apiError("INVALID_PLUGIN_UI_CONTEXT", "Invalid editor panel interaction", 400);
238
+ } else {
239
+ if (!isRecord(editorBody)) return apiError("INVALID_REQUEST", "Invalid editor action interaction", 400);
240
+ input = {
241
+ type: "editor_action",
242
+ ...Object.hasOwn(editorBody, "draft") ? { draft: editorBody.draft } : {}
243
+ };
244
+ }
245
+ let validatedDraft = null;
246
+ if (input.draft !== void 0) {
247
+ if (!baseRevision) return apiError("EDITOR_DRAFT_INVALID", "Content item has no draft revision identity", 409);
248
+ const collectionSchema = await runtime.getPluginEditorDraftSchema(collection);
249
+ if (!collectionSchema) return apiError("NOT_FOUND", "Collection not found", 404);
250
+ const draft = validateEditorDraftRequest({
251
+ request: input.draft,
252
+ collection: collectionSchema,
253
+ entry: {
254
+ id: canonicalId,
255
+ locale: canonicalLocale,
256
+ revision: baseRevision
257
+ },
258
+ readSelector: definition.extension.draft?.read,
259
+ patchSelector: definition.extension.draft?.patch,
260
+ canRead: definition.capabilities.includes("admin.editor-draft:read"),
261
+ canPatch: definition.capabilities.includes("admin.editor-draft:patch")
262
+ });
263
+ if ("code" in draft) {
264
+ console.warn(`[plugin:${pluginId}] Editor draft ${kind}/${extensionId} rejected: ${draft.code}`);
265
+ return editorDraftErrorResponse(draft);
266
+ }
267
+ validatedDraft = draft;
268
+ input = {
269
+ ...input,
270
+ draft: draft.snapshot
271
+ };
272
+ }
273
+ const headers = new Headers(request.headers);
274
+ headers.delete("content-length");
275
+ headers.delete("content-encoding");
276
+ headers.set("Content-Type", "application/json");
277
+ const pluginRequest = new Request(request.url, {
278
+ method: "POST",
279
+ headers,
280
+ body: JSON.stringify(input)
281
+ });
282
+ const locale = resolveLocale(request);
283
+ const response = await dispatchPluginApiRequest({
284
+ runtime,
285
+ pluginId,
286
+ path: definition.extension.route,
287
+ request: pluginRequest,
288
+ user,
289
+ tokenScopes,
290
+ invalidateContentCache,
291
+ editorDispatch: {
292
+ kind,
293
+ policy: definition.policy,
294
+ ui: {
295
+ surface: kind === "panel" ? "content-editor-panel" : "content-editor-action",
296
+ locale,
297
+ direction: getLocaleDir(locale),
298
+ contentLocale: canonicalLocale ?? void 0,
299
+ extensionId,
300
+ entry: {
301
+ collection,
302
+ id: canonicalId,
303
+ locale: canonicalLocale,
304
+ version
305
+ }
306
+ }
307
+ }
308
+ });
309
+ if (!response.ok) return response;
310
+ const envelope = await response.clone().json();
311
+ if (!isRecord(envelope) || !isRecord(envelope.data)) return apiError("INVALID_PLUGIN_RESPONSE", "Plugin returned an invalid response", 502);
312
+ const data = envelope.data;
313
+ if (data.patch === void 0 && !validatedDraft) return response;
314
+ if (data.patch !== void 0 && !validatedDraft) return apiError("EDITOR_DRAFT_INVALID", "Plugin returned an editor draft patch without a draft invocation", 400);
315
+ if (data.patch !== void 0) {
316
+ const collectionSchema = await runtime.getPluginEditorDraftSchema(collection);
317
+ if (!collectionSchema) return apiError("NOT_FOUND", "Collection not found", 404);
318
+ const patch = validateEditorDraftPatch({
319
+ patch: data.patch,
320
+ collection: collectionSchema,
321
+ allowedFields: validatedDraft?.patchFields ?? /* @__PURE__ */ new Set()
322
+ });
323
+ if ("code" in patch) {
324
+ console.warn(`[plugin:${pluginId}] Editor draft ${kind}/${extensionId} rejected: ${patch.code}`);
325
+ return editorDraftErrorResponse(patch);
326
+ }
327
+ data.patch = patch;
328
+ }
329
+ const finalResponse = apiSuccess({
330
+ ...data,
331
+ editorInvocation: validatedDraft?.receipt
332
+ });
333
+ finalResponse.headers.set("Cache-Control", "private, no-store");
334
+ return finalResponse;
335
+ }
336
+
337
+ //#endregion
338
+ export { validateEditorDraftRequest as i, dispatchPluginEditorExtensionApiRequest as n, validateEditorDraftPatch as r, dispatchPluginApiRequest as t };
339
+ //# sourceMappingURL=http-route-dispatch-CAdp2onn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-route-dispatch-CAdp2onn.mjs","names":["isRecord","toRoleLevel"],"sources":["../src/plugins/editor-draft.ts","../src/plugins/http-route-dispatch.ts"],"sourcesContent":["import type {\n\tEditorDraftFieldDefinition,\n\tEditorDraftInvocationReceipt,\n\tEditorDraftPatchEffect,\n\tEditorDraftSnapshot,\n} from \"@emdash-cms/blocks\";\nimport {\n\tisEditorDraftPatchEffect,\n\tvalidateEditorDraftPatchEffect,\n} from \"@emdash-cms/blocks/server\";\n\nimport type { CollectionWithFields, Field } from \"../schema/types.js\";\nimport { generateFieldSchema } from \"../schema/zod-generator.js\";\nimport type { PluginEditorDraftFieldSelector } from \"./types.js\";\n\nexport const EDITOR_DRAFT_LIMITS = {\n\tmaxFields: 32,\n\tmaxSnapshotBytes: 192 * 1024,\n\tmaxFieldBytes: 64 * 1024,\n} as const;\n\nexport type EditorDraftErrorCode =\n\t| \"EDITOR_DRAFT_STALE\"\n\t| \"EDITOR_DRAFT_FIELD_FORBIDDEN\"\n\t| \"EDITOR_DRAFT_INVALID\"\n\t| \"EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE\"\n\t| \"EDITOR_DRAFT_TOO_LARGE\"\n\t| \"EDITOR_DRAFT_CAPABILITY_REQUIRED\";\n\nexport interface EditorDraftValidationError {\n\tcode: EditorDraftErrorCode;\n\tmessage: string;\n}\n\ninterface BrowserDraftRequest {\n\tcollection: string;\n\tentryId: string;\n\tlocale: string | null;\n\tbaseRevision: string;\n\tgeneration: number;\n\tinvocationId: string;\n\tfields: Record<string, unknown>;\n}\n\nexport interface ValidatedEditorDraftRequest {\n\tsnapshot: EditorDraftSnapshot;\n\treceipt: EditorDraftInvocationReceipt;\n\treadFields: ReadonlySet<string>;\n\tpatchFields: ReadonlySet<string>;\n}\n\nconst ENCODER = new TextEncoder();\nconst INVOCATION_PATTERN = /^[A-Za-z0-9_-]{16,128}$/;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isBrowserDraftRequest(value: unknown): value is BrowserDraftRequest {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value.collection === \"string\" &&\n\t\ttypeof value.entryId === \"string\" &&\n\t\t(value.locale === null || typeof value.locale === \"string\") &&\n\t\ttypeof value.baseRevision === \"string\" &&\n\t\ttypeof value.generation === \"number\" &&\n\t\ttypeof value.invocationId === \"string\" &&\n\t\tisRecord(value.fields)\n\t);\n}\n\nfunction jsonBytes(value: unknown): number | null {\n\ttry {\n\t\treturn ENCODER.encode(JSON.stringify(value)).byteLength;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction selectedFields(\n\tcollection: CollectionWithFields,\n\tselector: PluginEditorDraftFieldSelector | undefined,\n): Set<string> {\n\tconst selected = new Set(selector?.fields ?? []);\n\tif (selector?.translatable) {\n\t\tfor (const field of collection.fields) {\n\t\t\tif (field.translatable) selected.add(field.slug);\n\t\t}\n\t}\n\treturn selected;\n}\n\nfunction sanitizeField(field: Field): EditorDraftFieldDefinition {\n\treturn {\n\t\tslug: field.slug,\n\t\tlabel: field.label,\n\t\ttype: field.type,\n\t\trequired: field.required,\n\t\ttranslatable: field.translatable,\n\t\t...(field.validation ? { validation: { ...field.validation } } : {}),\n\t};\n}\n\nfunction fail(code: EditorDraftErrorCode, message: string): EditorDraftValidationError {\n\treturn { code, message };\n}\n\nexport function validateEditorDraftRequest(input: {\n\trequest: unknown;\n\tcollection: CollectionWithFields;\n\tentry: { id: string; locale: string | null; revision: string };\n\treadSelector?: PluginEditorDraftFieldSelector;\n\tpatchSelector?: PluginEditorDraftFieldSelector;\n\tcanRead: boolean;\n\tcanPatch: boolean;\n}): ValidatedEditorDraftRequest | EditorDraftValidationError {\n\tif (!isBrowserDraftRequest(input.request)) {\n\t\treturn fail(\"EDITOR_DRAFT_INVALID\", \"Invalid editor draft snapshot\");\n\t}\n\tconst request = input.request;\n\tif (\n\t\trequest.collection !== input.collection.slug ||\n\t\trequest.entryId !== input.entry.id ||\n\t\trequest.locale !== input.entry.locale\n\t) {\n\t\treturn fail(\"EDITOR_DRAFT_STALE\", \"Editor draft identity is stale\");\n\t}\n\tif (request.baseRevision !== input.entry.revision) {\n\t\treturn fail(\"EDITOR_DRAFT_STALE\", \"Editor draft base revision is stale\");\n\t}\n\tif (\n\t\t!Number.isSafeInteger(request.generation) ||\n\t\trequest.generation < 0 ||\n\t\ttypeof request.invocationId !== \"string\" ||\n\t\t!INVOCATION_PATTERN.test(request.invocationId)\n\t) {\n\t\treturn fail(\"EDITOR_DRAFT_INVALID\", \"Invalid editor draft invocation identity\");\n\t}\n\tconst size = jsonBytes(request);\n\tif (size === null)\n\t\treturn fail(\"EDITOR_DRAFT_INVALID\", \"Editor draft snapshot must be JSON serializable\");\n\tif (size > EDITOR_DRAFT_LIMITS.maxSnapshotBytes) {\n\t\treturn fail(\"EDITOR_DRAFT_TOO_LARGE\", \"Editor draft snapshot exceeds the size limit\");\n\t}\n\n\tconst readFields = selectedFields(input.collection, input.readSelector);\n\tconst patchFields = selectedFields(input.collection, input.patchSelector);\n\tif (\n\t\treadFields.size > EDITOR_DRAFT_LIMITS.maxFields ||\n\t\tpatchFields.size > EDITOR_DRAFT_LIMITS.maxFields\n\t) {\n\t\treturn fail(\"EDITOR_DRAFT_TOO_LARGE\", \"Editor draft selector exceeds the field limit\");\n\t}\n\tconst supplied = Object.keys(request.fields);\n\tif (supplied.length > EDITOR_DRAFT_LIMITS.maxFields) {\n\t\treturn fail(\"EDITOR_DRAFT_TOO_LARGE\", \"Editor draft snapshot exceeds the field limit\");\n\t}\n\tif (supplied.length > 0 && !input.canRead) {\n\t\treturn fail(\"EDITOR_DRAFT_CAPABILITY_REQUIRED\", \"Plugin cannot read unsaved editor content\");\n\t}\n\tconst bySlug = new Map(input.collection.fields.map((field) => [field.slug, field]));\n\tconst patchFieldDefinitions = Array.from(patchFields, (slug) => bySlug.get(slug))\n\t\t.filter((field): field is Field => Boolean(field && !field.unsupportedType))\n\t\t.map(sanitizeField);\n\tconst fields: Record<string, unknown> = {};\n\tconst fieldDefinitions: EditorDraftFieldDefinition[] = [];\n\tfor (const slug of supplied) {\n\t\tif (!readFields.has(slug)) {\n\t\t\treturn fail(\"EDITOR_DRAFT_FIELD_FORBIDDEN\", `Editor draft field '${slug}' is not allowed`);\n\t\t}\n\t\tconst field = bySlug.get(slug);\n\t\tif (!field || field.unsupportedType) {\n\t\t\treturn fail(\n\t\t\t\t\"EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE\",\n\t\t\t\t`Editor draft field '${slug}' has an unsupported type`,\n\t\t\t);\n\t\t}\n\t\tconst fieldSize = jsonBytes(request.fields[slug]);\n\t\tif (fieldSize === null)\n\t\t\treturn fail(\"EDITOR_DRAFT_INVALID\", `Editor draft field '${slug}' is invalid`);\n\t\tif (fieldSize > EDITOR_DRAFT_LIMITS.maxFieldBytes) {\n\t\t\treturn fail(\"EDITOR_DRAFT_TOO_LARGE\", `Editor draft field '${slug}' exceeds the size limit`);\n\t\t}\n\t\tif (!generateFieldSchema(field).safeParse(request.fields[slug]).success) {\n\t\t\treturn fail(\"EDITOR_DRAFT_INVALID\", `Editor draft field '${slug}' is invalid`);\n\t\t}\n\t\tfields[slug] = request.fields[slug];\n\t\tfieldDefinitions.push(sanitizeField(field));\n\t}\n\tif (input.readSelector && !input.canRead) {\n\t\treturn fail(\"EDITOR_DRAFT_CAPABILITY_REQUIRED\", \"Plugin cannot read unsaved editor content\");\n\t}\n\tif (input.patchSelector && !input.canPatch) {\n\t\treturn fail(\"EDITOR_DRAFT_CAPABILITY_REQUIRED\", \"Plugin cannot propose unsaved editor changes\");\n\t}\n\n\treturn {\n\t\tsnapshot: {\n\t\t\tcollection: input.collection.slug,\n\t\t\tentryId: input.entry.id,\n\t\t\tlocale: input.entry.locale,\n\t\t\tbaseRevision: input.entry.revision,\n\t\t\tinvocationId: request.invocationId,\n\t\t\tfields,\n\t\t\tfieldDefinitions,\n\t\t},\n\t\treceipt: {\n\t\t\tentryId: input.entry.id,\n\t\t\tlocale: input.entry.locale,\n\t\t\tbaseRevision: input.entry.revision,\n\t\t\tgeneration: request.generation,\n\t\t\tinvocationId: request.invocationId,\n\t\t\tfieldDefinitions: patchFieldDefinitions,\n\t\t},\n\t\treadFields,\n\t\tpatchFields,\n\t};\n}\n\nexport function validateEditorDraftPatch(input: {\n\tpatch: unknown;\n\tcollection: CollectionWithFields;\n\tallowedFields: ReadonlySet<string>;\n}): EditorDraftPatchEffect | EditorDraftValidationError {\n\tconst structural = validateEditorDraftPatchEffect(input.patch);\n\tif (!structural.valid || !isEditorDraftPatchEffect(input.patch))\n\t\treturn fail(\"EDITOR_DRAFT_INVALID\", \"Plugin returned an invalid editor draft patch\");\n\tconst patch = input.patch;\n\tconst bySlug = new Map(input.collection.fields.map((field) => [field.slug, field]));\n\tfor (const operation of patch.operations) {\n\t\tif (!input.allowedFields.has(operation.field)) {\n\t\t\treturn fail(\n\t\t\t\t\"EDITOR_DRAFT_FIELD_FORBIDDEN\",\n\t\t\t\t`Editor draft field '${operation.field}' is not allowed`,\n\t\t\t);\n\t\t}\n\t\tconst field = bySlug.get(operation.field);\n\t\tif (!field || field.unsupportedType) {\n\t\t\treturn fail(\n\t\t\t\t\"EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE\",\n\t\t\t\t`Editor draft field '${operation.field}' has an unsupported type`,\n\t\t\t);\n\t\t}\n\t\tconst value = operation.op === \"clear\" ? null : operation.value;\n\t\tif (!generateFieldSchema(field).safeParse(value).success) {\n\t\t\treturn fail(\"EDITOR_DRAFT_INVALID\", `Editor draft field '${operation.field}' is invalid`);\n\t\t}\n\t\tconst fieldSize = jsonBytes(value);\n\t\tif (fieldSize === null || fieldSize > EDITOR_DRAFT_LIMITS.maxFieldBytes) {\n\t\t\treturn fail(\n\t\t\t\t\"EDITOR_DRAFT_TOO_LARGE\",\n\t\t\t\t`Editor draft field '${operation.field}' exceeds the size limit`,\n\t\t\t);\n\t\t}\n\t}\n\treturn patch;\n}\n","import { getLocaleDir, resolveLocale } from \"@emdash-cms/admin/locales\";\nimport { Permissions, type Permission, type RoleLevel } from \"@emdash-cms/auth\";\nimport { validateContentEditorPanelInteraction } from \"@emdash-cms/blocks/server\";\n\nimport { requirePerm, requireOwnerPerm } from \"../api/authorize.js\";\nimport { apiError, apiSuccess } from \"../api/error.js\";\nimport { requireScope } from \"../auth/scopes.js\";\nimport type { EmDashRuntime, PluginEditorExtensionDispatch } from \"../emdash-runtime.js\";\nimport {\n\tvalidateEditorDraftPatch,\n\tvalidateEditorDraftRequest,\n\ttype ValidatedEditorDraftRequest,\n} from \"./editor-draft.js\";\nimport { pluginRouteResponseFromWire, pluginRouteResponseToWire } from \"./route-wire.js\";\nimport { parseDeclaredPluginRouteInput, PluginRouteRequestError } from \"./route-wire.js\";\nimport type { PluginContentCacheInvalidator, RouteMeta } from \"./routes.js\";\nimport type { UserInfo } from \"./types.js\";\n\nfunction editorDraftErrorResponse(error: { code: string; message: string }): Response {\n\tconst status =\n\t\terror.code === \"EDITOR_DRAFT_STALE\"\n\t\t\t? 409\n\t\t\t: error.code === \"EDITOR_DRAFT_FIELD_FORBIDDEN\" ||\n\t\t\t\t error.code === \"EDITOR_DRAFT_CAPABILITY_REQUIRED\"\n\t\t\t\t? 403\n\t\t\t\t: error.code === \"EDITOR_DRAFT_TOO_LARGE\"\n\t\t\t\t\t? 413\n\t\t\t\t\t: error.code === \"EDITOR_DRAFT_UNSUPPORTED_FIELD_TYPE\"\n\t\t\t\t\t\t? 422\n\t\t\t\t\t\t: 400;\n\treturn apiError(error.code, error.message, status);\n}\n\nfunction toRoleLevel(value: number): RoleLevel | null {\n\tif (value === 10 || value === 20 || value === 30 || value === 40 || value === 50) {\n\t\treturn value;\n\t}\n\treturn null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPermission(value: string): value is Permission {\n\treturn Object.hasOwn(Permissions, value);\n}\n\nfunction authorizePrivatePluginRouteRequest(\n\trouteMeta: RouteMeta,\n\trequest: Request,\n\tuser?: UserInfo | null,\n\ttokenScopes?: string[],\n): Response | null {\n\tconst permission = routeMeta.permission ?? \"plugins:manage\";\n\tif (!isPermission(permission)) {\n\t\treturn apiError(\"INVALID_PLUGIN_ROUTE\", \"Plugin route declares an invalid permission\", 500);\n\t}\n\n\tlet permissionUser: { id: string; role: RoleLevel } | null | undefined;\n\tif (user) {\n\t\tconst role = toRoleLevel(user.role);\n\t\tif (role === null) {\n\t\t\treturn apiError(\"INVALID_USER\", \"Authenticated user has an invalid role\", 500);\n\t\t}\n\t\tpermissionUser = { id: user.id, role };\n\t} else {\n\t\tpermissionUser = user;\n\t}\n\n\tconst denied = requirePerm(permissionUser, permission);\n\tif (denied) return denied;\n\tconst scopeError = requireScope({ tokenScopes }, \"admin\");\n\tif (scopeError) return scopeError;\n\tif (!tokenScopes && request.headers.get(\"X-EmDash-Request\") !== \"1\") {\n\t\treturn apiError(\"CSRF_REJECTED\", \"Missing required header\", 403);\n\t}\n\treturn null;\n}\n\nexport interface PluginApiRequestContext {\n\truntime: EmDashRuntime;\n\tpluginId: string;\n\tpath: string;\n\trequest: Request;\n\tuser?: UserInfo | null;\n\ttokenScopes?: string[];\n\tinvalidateContentCache?: PluginContentCacheInvalidator;\n\teditorDispatch?: PluginEditorExtensionDispatch;\n}\n\n/** Dispatch a request through the production plugin-route policy boundary. */\nexport async function dispatchPluginApiRequest({\n\truntime,\n\tpluginId,\n\tpath,\n\trequest,\n\tuser,\n\ttokenScopes,\n\tinvalidateContentCache,\n\teditorDispatch,\n}: PluginApiRequestContext): Promise<Response> {\n\tconst method = request.method.toUpperCase();\n\tconst routeMeta = runtime.getPluginRouteMeta(pluginId, path);\n\tif (!routeMeta) return apiError(\"NOT_FOUND\", \"Plugin route not found\", 404);\n\n\tif (!routeMeta.public) {\n\t\tconst denied = authorizePrivatePluginRouteRequest(routeMeta, request, user, tokenScopes);\n\t\tif (denied) return denied;\n\t}\n\tif (routeMeta.methods && !routeMeta.methods.some((allowed) => allowed === method)) {\n\t\tconst response = apiError(\"METHOD_NOT_ALLOWED\", \"Method not allowed\", 405);\n\t\tresponse.headers.set(\"Allow\", routeMeta.methods.join(\", \"));\n\t\treturn response;\n\t}\n\n\tconst caller = routeMeta.public ? undefined : (user ?? undefined);\n\tconst result = await runtime.handlePluginApiRoute(\n\t\tpluginId,\n\t\tmethod,\n\t\tpath,\n\t\trequest,\n\t\tcaller,\n\t\tinvalidateContentCache,\n\t\teditorDispatch,\n\t);\n\tif (!result.success) {\n\t\tconst code = result.error?.code ?? \"PLUGIN_ERROR\";\n\t\tconst message =\n\t\t\tcode === \"INTERNAL_ERROR\"\n\t\t\t\t? \"Plugin route error\"\n\t\t\t\t: (result.error?.message ?? \"Plugin route error\");\n\t\tconst status = (result as { status?: number }).status ?? (code === \"NOT_FOUND\" ? 404 : 400);\n\t\treturn apiError(code, message, status);\n\t}\n\n\tlet response: Response;\n\tif (routeMeta.response === \"raw\") {\n\t\ttry {\n\t\t\tresponse = pluginRouteResponseFromWire(\n\t\t\t\tawait pluginRouteResponseToWire(\n\t\t\t\t\tresult.data,\n\t\t\t\t\trouteMeta.public ? { publicRequestUrl: request.url } : { allowExternalLocation: true },\n\t\t\t\t),\n\t\t\t\tmethod,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[plugin:${pluginId}] Invalid raw route response:`, error);\n\t\t\treturn apiError(\"INVALID_PLUGIN_RESPONSE\", \"Plugin returned an invalid response\", 500);\n\t\t}\n\t} else {\n\t\tresponse = apiSuccess(result.data);\n\t}\n\tif (\n\t\tresponse.ok &&\n\t\trouteMeta.public &&\n\t\trouteMeta.cacheControl &&\n\t\t(method === \"GET\" || method === \"HEAD\")\n\t) {\n\t\tresponse.headers.set(\"Cache-Control\", routeMeta.cacheControl);\n\t} else {\n\t\tresponse.headers.set(\"Cache-Control\", \"private, no-store\");\n\t}\n\treturn response;\n}\n\nexport interface PluginEditorExtensionApiRequestContext {\n\truntime: EmDashRuntime;\n\tpluginId: string;\n\tkind: \"panel\" | \"action\";\n\textensionId: string;\n\tcollection: string;\n\tentryId: string;\n\trequest: Request;\n\tuser?: UserInfo | null;\n\ttokenScopes?: string[];\n\tinvalidateContentCache?: PluginContentCacheInvalidator;\n}\n\nconst EDITOR_EXTENSION_REQUEST_MAX_BYTES = 256 * 1024;\n\n/** Dispatch a saved-entry extension through ownership, route, and isolate policy. */\nexport async function dispatchPluginEditorExtensionApiRequest({\n\truntime,\n\tpluginId,\n\tkind,\n\textensionId,\n\tcollection,\n\tentryId,\n\trequest,\n\tuser,\n\ttokenScopes,\n\tinvalidateContentCache,\n}: PluginEditorExtensionApiRequestContext): Promise<Response> {\n\tconst definition = runtime.getPluginEditorExtension(pluginId, kind, extensionId, collection);\n\tif (!definition) return apiError(\"NOT_FOUND\", \"Plugin editor extension not found\", 404);\n\n\tconst routeMeta = runtime.getPluginRouteMeta(pluginId, definition.extension.route);\n\tif (!routeMeta || routeMeta.public) {\n\t\treturn apiError(\n\t\t\t\"INVALID_PLUGIN_EDITOR_EXTENSION\",\n\t\t\t\"Plugin editor extension must reference a private route\",\n\t\t\t500,\n\t\t);\n\t}\n\tconst denied = authorizePrivatePluginRouteRequest(routeMeta, request, user, tokenScopes);\n\tif (denied) return denied;\n\n\tconst requestedLocale = new URL(request.url).searchParams.get(\"locale\") || undefined;\n\tconst contentResult = await runtime.handleContentGet(collection, entryId, requestedLocale);\n\tif (!contentResult.success) {\n\t\treturn contentResult.error?.code === \"NOT_FOUND\"\n\t\t\t? apiError(\"NOT_FOUND\", \"Content item not found\", 404)\n\t\t\t: apiError(\"CONTENT_GET_ERROR\", \"Failed to load content item\", 500);\n\t}\n\tconst contentData = contentResult.data;\n\tconst item =\n\t\ttypeof contentData === \"object\" && contentData !== null && \"item\" in contentData\n\t\t\t? contentData.item\n\t\t\t: null;\n\tif (typeof item !== \"object\" || item === null) {\n\t\treturn apiError(\"CONTENT_GET_ERROR\", \"Failed to load content item\", 500);\n\t}\n\tconst authorId = \"authorId\" in item && typeof item.authorId === \"string\" ? item.authorId : \"\";\n\tlet ownershipUser: { id: string; role: RoleLevel } | null | undefined =\n\t\tuser == null ? user : undefined;\n\tif (user) {\n\t\tconst ownerRole = toRoleLevel(user.role);\n\t\tif (ownerRole === null) {\n\t\t\treturn apiError(\"INVALID_USER\", \"Authenticated user has an invalid role\", 500);\n\t\t}\n\t\townershipUser = { id: user.id, role: ownerRole };\n\t}\n\tconst ownershipDenied = requireOwnerPerm(\n\t\townershipUser,\n\t\tauthorId,\n\t\t\"content:edit_own\",\n\t\t\"content:edit_any\",\n\t);\n\tif (ownershipDenied) return ownershipDenied;\n\n\tconst canonicalId = \"id\" in item && typeof item.id === \"string\" ? item.id : null;\n\tconst canonicalLocale = \"locale\" in item && typeof item.locale === \"string\" ? item.locale : null;\n\tconst version = \"version\" in item && typeof item.version === \"number\" ? item.version : null;\n\tconst baseRevision =\n\t\ttypeof contentData === \"object\" &&\n\t\tcontentData !== null &&\n\t\t\"_rev\" in contentData &&\n\t\ttypeof contentData._rev === \"string\"\n\t\t\t? contentData._rev\n\t\t\t: null;\n\tif (!canonicalId || version === null) {\n\t\treturn apiError(\"CONTENT_GET_ERROR\", \"Content item has invalid identity\", 500);\n\t}\n\n\tlet input: Record<string, unknown>;\n\tlet editorBody: unknown;\n\ttry {\n\t\teditorBody = await parseDeclaredPluginRouteInput(request, {\n\t\t\tbody: \"json\",\n\t\t\tmaxBytes: EDITOR_EXTENSION_REQUEST_MAX_BYTES,\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof PluginRouteRequestError) {\n\t\t\treturn apiError(\n\t\t\t\terror.status === 413 ? \"EDITOR_DRAFT_TOO_LARGE\" : \"INVALID_REQUEST\",\n\t\t\t\terror.status === 413\n\t\t\t\t\t? \"Editor interaction exceeds the size limit\"\n\t\t\t\t\t: \"Invalid editor interaction\",\n\t\t\t\terror.status,\n\t\t\t);\n\t\t}\n\t\treturn apiError(\"INVALID_REQUEST\", \"Editor interaction could not be read\", 400);\n\t}\n\tif (kind === \"panel\") {\n\t\tif (!isRecord(editorBody)) {\n\t\t\treturn apiError(\"INVALID_REQUEST\", \"Editor panel interaction must be an object\", 400);\n\t\t}\n\t\tinput = editorBody;\n\t\tconst validation = validateContentEditorPanelInteraction(input);\n\t\tif (!validation.valid) {\n\t\t\treturn apiError(\"INVALID_PLUGIN_UI_CONTEXT\", \"Invalid editor panel interaction\", 400);\n\t\t}\n\t} else {\n\t\tif (!isRecord(editorBody)) {\n\t\t\treturn apiError(\"INVALID_REQUEST\", \"Invalid editor action interaction\", 400);\n\t\t}\n\t\tinput = {\n\t\t\ttype: \"editor_action\",\n\t\t\t...(Object.hasOwn(editorBody, \"draft\") ? { draft: editorBody.draft } : {}),\n\t\t};\n\t}\n\n\tlet validatedDraft: ValidatedEditorDraftRequest | null = null;\n\tif (input.draft !== undefined) {\n\t\tif (!baseRevision) {\n\t\t\treturn apiError(\"EDITOR_DRAFT_INVALID\", \"Content item has no draft revision identity\", 409);\n\t\t}\n\t\tconst collectionSchema = await runtime.getPluginEditorDraftSchema(collection);\n\t\tif (!collectionSchema) return apiError(\"NOT_FOUND\", \"Collection not found\", 404);\n\t\tconst draft = validateEditorDraftRequest({\n\t\t\trequest: input.draft,\n\t\t\tcollection: collectionSchema,\n\t\t\tentry: { id: canonicalId, locale: canonicalLocale, revision: baseRevision },\n\t\t\treadSelector: definition.extension.draft?.read,\n\t\t\tpatchSelector: definition.extension.draft?.patch,\n\t\t\tcanRead: definition.capabilities.includes(\"admin.editor-draft:read\"),\n\t\t\tcanPatch: definition.capabilities.includes(\"admin.editor-draft:patch\"),\n\t\t});\n\t\tif (\"code\" in draft) {\n\t\t\tconsole.warn(\n\t\t\t\t`[plugin:${pluginId}] Editor draft ${kind}/${extensionId} rejected: ${draft.code}`,\n\t\t\t);\n\t\t\treturn editorDraftErrorResponse(draft);\n\t\t}\n\t\tvalidatedDraft = draft;\n\t\tinput = { ...input, draft: draft.snapshot };\n\t}\n\n\tconst headers = new Headers(request.headers);\n\theaders.delete(\"content-length\");\n\theaders.delete(\"content-encoding\");\n\theaders.set(\"Content-Type\", \"application/json\");\n\tconst pluginRequest = new Request(request.url, {\n\t\tmethod: \"POST\",\n\t\theaders,\n\t\tbody: JSON.stringify(input),\n\t});\n\tconst locale = resolveLocale(request);\n\tconst response = await dispatchPluginApiRequest({\n\t\truntime,\n\t\tpluginId,\n\t\tpath: definition.extension.route,\n\t\trequest: pluginRequest,\n\t\tuser,\n\t\ttokenScopes,\n\t\tinvalidateContentCache,\n\t\teditorDispatch: {\n\t\t\tkind,\n\t\t\tpolicy: definition.policy,\n\t\t\tui: {\n\t\t\t\tsurface: kind === \"panel\" ? \"content-editor-panel\" : \"content-editor-action\",\n\t\t\t\tlocale,\n\t\t\t\tdirection: getLocaleDir(locale),\n\t\t\t\tcontentLocale: canonicalLocale ?? undefined,\n\t\t\t\textensionId,\n\t\t\t\tentry: {\n\t\t\t\t\tcollection,\n\t\t\t\t\tid: canonicalId,\n\t\t\t\t\tlocale: canonicalLocale,\n\t\t\t\t\tversion,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t});\n\tif (!response.ok) return response;\n\tconst envelope: unknown = await response.clone().json();\n\tif (!isRecord(envelope) || !isRecord(envelope.data)) {\n\t\treturn apiError(\"INVALID_PLUGIN_RESPONSE\", \"Plugin returned an invalid response\", 502);\n\t}\n\tconst data = envelope.data;\n\tif (data.patch === undefined && !validatedDraft) return response;\n\tif (data.patch !== undefined && !validatedDraft) {\n\t\treturn apiError(\n\t\t\t\"EDITOR_DRAFT_INVALID\",\n\t\t\t\"Plugin returned an editor draft patch without a draft invocation\",\n\t\t\t400,\n\t\t);\n\t}\n\tif (data.patch !== undefined) {\n\t\tconst collectionSchema = await runtime.getPluginEditorDraftSchema(collection);\n\t\tif (!collectionSchema) return apiError(\"NOT_FOUND\", \"Collection not found\", 404);\n\t\tconst patch = validateEditorDraftPatch({\n\t\t\tpatch: data.patch,\n\t\t\tcollection: collectionSchema,\n\t\t\tallowedFields: validatedDraft?.patchFields ?? new Set(),\n\t\t});\n\t\tif (\"code\" in patch) {\n\t\t\tconsole.warn(\n\t\t\t\t`[plugin:${pluginId}] Editor draft ${kind}/${extensionId} rejected: ${patch.code}`,\n\t\t\t);\n\t\t\treturn editorDraftErrorResponse(patch);\n\t\t}\n\t\tdata.patch = patch;\n\t}\n\tconst finalResponse = apiSuccess({ ...data, editorInvocation: validatedDraft?.receipt });\n\tfinalResponse.headers.set(\"Cache-Control\", \"private, no-store\");\n\treturn finalResponse;\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAa,sBAAsB;CAClC,WAAW;CACX,kBAAkB,MAAM;CACxB,eAAe,KAAK;CACpB;AAgCD,MAAM,UAAU,IAAI,aAAa;AACjC,MAAM,qBAAqB;AAE3B,SAASA,WAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,SAAS,sBAAsB,OAA8C;AAC5E,QACCA,WAAS,MAAM,IACf,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,YAAY,aACxB,MAAM,WAAW,QAAQ,OAAO,MAAM,WAAW,aAClD,OAAO,MAAM,iBAAiB,YAC9B,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,iBAAiB,YAC9BA,WAAS,MAAM,OAAO;;AAIxB,SAAS,UAAU,OAA+B;AACjD,KAAI;AACH,SAAO,QAAQ,OAAO,KAAK,UAAU,MAAM,CAAC,CAAC;SACtC;AACP,SAAO;;;AAIT,SAAS,eACR,YACA,UACc;CACd,MAAM,WAAW,IAAI,IAAI,UAAU,UAAU,EAAE,CAAC;AAChD,KAAI,UAAU,cACb;OAAK,MAAM,SAAS,WAAW,OAC9B,KAAI,MAAM,aAAc,UAAS,IAAI,MAAM,KAAK;;AAGlD,QAAO;;AAGR,SAAS,cAAc,OAA0C;AAChE,QAAO;EACN,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,MAAM,MAAM;EACZ,UAAU,MAAM;EAChB,cAAc,MAAM;EACpB,GAAI,MAAM,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,EAAE;EACnE;;AAGF,SAAS,KAAK,MAA4B,SAA6C;AACtF,QAAO;EAAE;EAAM;EAAS;;AAGzB,SAAgB,2BAA2B,OAQkB;AAC5D,KAAI,CAAC,sBAAsB,MAAM,QAAQ,CACxC,QAAO,KAAK,wBAAwB,gCAAgC;CAErE,MAAM,UAAU,MAAM;AACtB,KACC,QAAQ,eAAe,MAAM,WAAW,QACxC,QAAQ,YAAY,MAAM,MAAM,MAChC,QAAQ,WAAW,MAAM,MAAM,OAE/B,QAAO,KAAK,sBAAsB,iCAAiC;AAEpE,KAAI,QAAQ,iBAAiB,MAAM,MAAM,SACxC,QAAO,KAAK,sBAAsB,sCAAsC;AAEzE,KACC,CAAC,OAAO,cAAc,QAAQ,WAAW,IACzC,QAAQ,aAAa,KACrB,OAAO,QAAQ,iBAAiB,YAChC,CAAC,mBAAmB,KAAK,QAAQ,aAAa,CAE9C,QAAO,KAAK,wBAAwB,2CAA2C;CAEhF,MAAM,OAAO,UAAU,QAAQ;AAC/B,KAAI,SAAS,KACZ,QAAO,KAAK,wBAAwB,kDAAkD;AACvF,KAAI,OAAO,oBAAoB,iBAC9B,QAAO,KAAK,0BAA0B,+CAA+C;CAGtF,MAAM,aAAa,eAAe,MAAM,YAAY,MAAM,aAAa;CACvE,MAAM,cAAc,eAAe,MAAM,YAAY,MAAM,cAAc;AACzE,KACC,WAAW,OAAO,oBAAoB,aACtC,YAAY,OAAO,oBAAoB,UAEvC,QAAO,KAAK,0BAA0B,gDAAgD;CAEvF,MAAM,WAAW,OAAO,KAAK,QAAQ,OAAO;AAC5C,KAAI,SAAS,SAAS,oBAAoB,UACzC,QAAO,KAAK,0BAA0B,gDAAgD;AAEvF,KAAI,SAAS,SAAS,KAAK,CAAC,MAAM,QACjC,QAAO,KAAK,oCAAoC,4CAA4C;CAE7F,MAAM,SAAS,IAAI,IAAI,MAAM,WAAW,OAAO,KAAK,UAAU,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC;CACnF,MAAM,wBAAwB,MAAM,KAAK,cAAc,SAAS,OAAO,IAAI,KAAK,CAAC,CAC/E,QAAQ,UAA0B,QAAQ,SAAS,CAAC,MAAM,gBAAgB,CAAC,CAC3E,IAAI,cAAc;CACpB,MAAM,SAAkC,EAAE;CAC1C,MAAM,mBAAiD,EAAE;AACzD,MAAK,MAAM,QAAQ,UAAU;AAC5B,MAAI,CAAC,WAAW,IAAI,KAAK,CACxB,QAAO,KAAK,gCAAgC,uBAAuB,KAAK,kBAAkB;EAE3F,MAAM,QAAQ,OAAO,IAAI,KAAK;AAC9B,MAAI,CAAC,SAAS,MAAM,gBACnB,QAAO,KACN,uCACA,uBAAuB,KAAK,2BAC5B;EAEF,MAAM,YAAY,UAAU,QAAQ,OAAO,MAAM;AACjD,MAAI,cAAc,KACjB,QAAO,KAAK,wBAAwB,uBAAuB,KAAK,cAAc;AAC/E,MAAI,YAAY,oBAAoB,cACnC,QAAO,KAAK,0BAA0B,uBAAuB,KAAK,0BAA0B;AAE7F,MAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,QAAQ,OAAO,MAAM,CAAC,QAC/D,QAAO,KAAK,wBAAwB,uBAAuB,KAAK,cAAc;AAE/E,SAAO,QAAQ,QAAQ,OAAO;AAC9B,mBAAiB,KAAK,cAAc,MAAM,CAAC;;AAE5C,KAAI,MAAM,gBAAgB,CAAC,MAAM,QAChC,QAAO,KAAK,oCAAoC,4CAA4C;AAE7F,KAAI,MAAM,iBAAiB,CAAC,MAAM,SACjC,QAAO,KAAK,oCAAoC,+CAA+C;AAGhG,QAAO;EACN,UAAU;GACT,YAAY,MAAM,WAAW;GAC7B,SAAS,MAAM,MAAM;GACrB,QAAQ,MAAM,MAAM;GACpB,cAAc,MAAM,MAAM;GAC1B,cAAc,QAAQ;GACtB;GACA;GACA;EACD,SAAS;GACR,SAAS,MAAM,MAAM;GACrB,QAAQ,MAAM,MAAM;GACpB,cAAc,MAAM,MAAM;GAC1B,YAAY,QAAQ;GACpB,cAAc,QAAQ;GACtB,kBAAkB;GAClB;EACD;EACA;EACA;;AAGF,SAAgB,yBAAyB,OAIe;AAEvD,KAAI,CADe,+BAA+B,MAAM,MAAM,CAC9C,SAAS,CAAC,yBAAyB,MAAM,MAAM,CAC9D,QAAO,KAAK,wBAAwB,gDAAgD;CACrF,MAAM,QAAQ,MAAM;CACpB,MAAM,SAAS,IAAI,IAAI,MAAM,WAAW,OAAO,KAAK,UAAU,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC;AACnF,MAAK,MAAM,aAAa,MAAM,YAAY;AACzC,MAAI,CAAC,MAAM,cAAc,IAAI,UAAU,MAAM,CAC5C,QAAO,KACN,gCACA,uBAAuB,UAAU,MAAM,kBACvC;EAEF,MAAM,QAAQ,OAAO,IAAI,UAAU,MAAM;AACzC,MAAI,CAAC,SAAS,MAAM,gBACnB,QAAO,KACN,uCACA,uBAAuB,UAAU,MAAM,2BACvC;EAEF,MAAM,QAAQ,UAAU,OAAO,UAAU,OAAO,UAAU;AAC1D,MAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,MAAM,CAAC,QAChD,QAAO,KAAK,wBAAwB,uBAAuB,UAAU,MAAM,cAAc;EAE1F,MAAM,YAAY,UAAU,MAAM;AAClC,MAAI,cAAc,QAAQ,YAAY,oBAAoB,cACzD,QAAO,KACN,0BACA,uBAAuB,UAAU,MAAM,0BACvC;;AAGH,QAAO;;;;;AC7OR,SAAS,yBAAyB,OAAoD;CACrF,MAAM,SACL,MAAM,SAAS,uBACZ,MACA,MAAM,SAAS,kCACd,MAAM,SAAS,qCACf,MACA,MAAM,SAAS,2BACd,MACA,MAAM,SAAS,wCACd,MACA;AACP,QAAO,SAAS,MAAM,MAAM,MAAM,SAAS,OAAO;;AAGnD,SAASC,cAAY,OAAiC;AACrD,KAAI,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,GAC7E,QAAO;AAER,QAAO;;AAGR,SAAS,SAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,SAAS,aAAa,OAAoC;AACzD,QAAO,OAAO,OAAO,aAAa,MAAM;;AAGzC,SAAS,mCACR,WACA,SACA,MACA,aACkB;CAClB,MAAM,aAAa,UAAU,cAAc;AAC3C,KAAI,CAAC,aAAa,WAAW,CAC5B,QAAO,SAAS,wBAAwB,+CAA+C,IAAI;CAG5F,IAAI;AACJ,KAAI,MAAM;EACT,MAAM,OAAOA,cAAY,KAAK,KAAK;AACnC,MAAI,SAAS,KACZ,QAAO,SAAS,gBAAgB,0CAA0C,IAAI;AAE/E,mBAAiB;GAAE,IAAI,KAAK;GAAI;GAAM;OAEtC,kBAAiB;CAGlB,MAAM,SAAS,YAAY,gBAAgB,WAAW;AACtD,KAAI,OAAQ,QAAO;CACnB,MAAM,aAAa,aAAa,EAAE,aAAa,EAAE,QAAQ;AACzD,KAAI,WAAY,QAAO;AACvB,KAAI,CAAC,eAAe,QAAQ,QAAQ,IAAI,mBAAmB,KAAK,IAC/D,QAAO,SAAS,iBAAiB,2BAA2B,IAAI;AAEjE,QAAO;;;AAeR,eAAsB,yBAAyB,EAC9C,SACA,UACA,MACA,SACA,MACA,aACA,wBACA,kBAC8C;CAC9C,MAAM,SAAS,QAAQ,OAAO,aAAa;CAC3C,MAAM,YAAY,QAAQ,mBAAmB,UAAU,KAAK;AAC5D,KAAI,CAAC,UAAW,QAAO,SAAS,aAAa,0BAA0B,IAAI;AAE3E,KAAI,CAAC,UAAU,QAAQ;EACtB,MAAM,SAAS,mCAAmC,WAAW,SAAS,MAAM,YAAY;AACxF,MAAI,OAAQ,QAAO;;AAEpB,KAAI,UAAU,WAAW,CAAC,UAAU,QAAQ,MAAM,YAAY,YAAY,OAAO,EAAE;EAClF,MAAM,WAAW,SAAS,sBAAsB,sBAAsB,IAAI;AAC1E,WAAS,QAAQ,IAAI,SAAS,UAAU,QAAQ,KAAK,KAAK,CAAC;AAC3D,SAAO;;CAGR,MAAM,SAAS,UAAU,SAAS,SAAa,QAAQ;CACvD,MAAM,SAAS,MAAM,QAAQ,qBAC5B,UACA,QACA,MACA,SACA,QACA,wBACA,eACA;AACD,KAAI,CAAC,OAAO,SAAS;EACpB,MAAM,OAAO,OAAO,OAAO,QAAQ;AAMnC,SAAO,SAAS,MAJf,SAAS,mBACN,uBACC,OAAO,OAAO,WAAW,sBACd,OAA+B,WAAW,SAAS,cAAc,MAAM,KACjD;;CAGvC,IAAI;AACJ,KAAI,UAAU,aAAa,MAC1B,KAAI;AACH,aAAW,4BACV,MAAM,0BACL,OAAO,MACP,UAAU,SAAS,EAAE,kBAAkB,QAAQ,KAAK,GAAG,EAAE,uBAAuB,MAAM,CACtF,EACD,OACA;UACO,OAAO;AACf,UAAQ,MAAM,WAAW,SAAS,gCAAgC,MAAM;AACxE,SAAO,SAAS,2BAA2B,uCAAuC,IAAI;;KAGvF,YAAW,WAAW,OAAO,KAAK;AAEnC,KACC,SAAS,MACT,UAAU,UACV,UAAU,iBACT,WAAW,SAAS,WAAW,QAEhC,UAAS,QAAQ,IAAI,iBAAiB,UAAU,aAAa;KAE7D,UAAS,QAAQ,IAAI,iBAAiB,oBAAoB;AAE3D,QAAO;;AAgBR,MAAM,qCAAqC,MAAM;;AAGjD,eAAsB,wCAAwC,EAC7D,SACA,UACA,MACA,aACA,YACA,SACA,SACA,MACA,aACA,0BAC6D;CAC7D,MAAM,aAAa,QAAQ,yBAAyB,UAAU,MAAM,aAAa,WAAW;AAC5F,KAAI,CAAC,WAAY,QAAO,SAAS,aAAa,qCAAqC,IAAI;CAEvF,MAAM,YAAY,QAAQ,mBAAmB,UAAU,WAAW,UAAU,MAAM;AAClF,KAAI,CAAC,aAAa,UAAU,OAC3B,QAAO,SACN,mCACA,0DACA,IACA;CAEF,MAAM,SAAS,mCAAmC,WAAW,SAAS,MAAM,YAAY;AACxF,KAAI,OAAQ,QAAO;CAEnB,MAAM,kBAAkB,IAAI,IAAI,QAAQ,IAAI,CAAC,aAAa,IAAI,SAAS,IAAI;CAC3E,MAAM,gBAAgB,MAAM,QAAQ,iBAAiB,YAAY,SAAS,gBAAgB;AAC1F,KAAI,CAAC,cAAc,QAClB,QAAO,cAAc,OAAO,SAAS,cAClC,SAAS,aAAa,0BAA0B,IAAI,GACpD,SAAS,qBAAqB,+BAA+B,IAAI;CAErE,MAAM,cAAc,cAAc;CAClC,MAAM,OACL,OAAO,gBAAgB,YAAY,gBAAgB,QAAQ,UAAU,cAClE,YAAY,OACZ;AACJ,KAAI,OAAO,SAAS,YAAY,SAAS,KACxC,QAAO,SAAS,qBAAqB,+BAA+B,IAAI;CAEzE,MAAM,WAAW,cAAc,QAAQ,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;CAC3F,IAAI,gBACH,QAAQ,OAAO,OAAO;AACvB,KAAI,MAAM;EACT,MAAM,YAAYA,cAAY,KAAK,KAAK;AACxC,MAAI,cAAc,KACjB,QAAO,SAAS,gBAAgB,0CAA0C,IAAI;AAE/E,kBAAgB;GAAE,IAAI,KAAK;GAAI,MAAM;GAAW;;CAEjD,MAAM,kBAAkB,iBACvB,eACA,UACA,oBACA,mBACA;AACD,KAAI,gBAAiB,QAAO;CAE5B,MAAM,cAAc,QAAQ,QAAQ,OAAO,KAAK,OAAO,WAAW,KAAK,KAAK;CAC5E,MAAM,kBAAkB,YAAY,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;CAC5F,MAAM,UAAU,aAAa,QAAQ,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;CACvF,MAAM,eACL,OAAO,gBAAgB,YACvB,gBAAgB,QAChB,UAAU,eACV,OAAO,YAAY,SAAS,WACzB,YAAY,OACZ;AACJ,KAAI,CAAC,eAAe,YAAY,KAC/B,QAAO,SAAS,qBAAqB,qCAAqC,IAAI;CAG/E,IAAI;CACJ,IAAI;AACJ,KAAI;AACH,eAAa,MAAM,8BAA8B,SAAS;GACzD,MAAM;GACN,UAAU;GACV,CAAC;UACM,OAAO;AACf,MAAI,iBAAiB,wBACpB,QAAO,SACN,MAAM,WAAW,MAAM,2BAA2B,mBAClD,MAAM,WAAW,MACd,8CACA,8BACH,MAAM,OACN;AAEF,SAAO,SAAS,mBAAmB,wCAAwC,IAAI;;AAEhF,KAAI,SAAS,SAAS;AACrB,MAAI,CAAC,SAAS,WAAW,CACxB,QAAO,SAAS,mBAAmB,8CAA8C,IAAI;AAEtF,UAAQ;AAER,MAAI,CADe,sCAAsC,MAAM,CAC/C,MACf,QAAO,SAAS,6BAA6B,oCAAoC,IAAI;QAEhF;AACN,MAAI,CAAC,SAAS,WAAW,CACxB,QAAO,SAAS,mBAAmB,qCAAqC,IAAI;AAE7E,UAAQ;GACP,MAAM;GACN,GAAI,OAAO,OAAO,YAAY,QAAQ,GAAG,EAAE,OAAO,WAAW,OAAO,GAAG,EAAE;GACzE;;CAGF,IAAI,iBAAqD;AACzD,KAAI,MAAM,UAAU,QAAW;AAC9B,MAAI,CAAC,aACJ,QAAO,SAAS,wBAAwB,+CAA+C,IAAI;EAE5F,MAAM,mBAAmB,MAAM,QAAQ,2BAA2B,WAAW;AAC7E,MAAI,CAAC,iBAAkB,QAAO,SAAS,aAAa,wBAAwB,IAAI;EAChF,MAAM,QAAQ,2BAA2B;GACxC,SAAS,MAAM;GACf,YAAY;GACZ,OAAO;IAAE,IAAI;IAAa,QAAQ;IAAiB,UAAU;IAAc;GAC3E,cAAc,WAAW,UAAU,OAAO;GAC1C,eAAe,WAAW,UAAU,OAAO;GAC3C,SAAS,WAAW,aAAa,SAAS,0BAA0B;GACpE,UAAU,WAAW,aAAa,SAAS,2BAA2B;GACtE,CAAC;AACF,MAAI,UAAU,OAAO;AACpB,WAAQ,KACP,WAAW,SAAS,iBAAiB,KAAK,GAAG,YAAY,aAAa,MAAM,OAC5E;AACD,UAAO,yBAAyB,MAAM;;AAEvC,mBAAiB;AACjB,UAAQ;GAAE,GAAG;GAAO,OAAO,MAAM;GAAU;;CAG5C,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;AAC5C,SAAQ,OAAO,iBAAiB;AAChC,SAAQ,OAAO,mBAAmB;AAClC,SAAQ,IAAI,gBAAgB,mBAAmB;CAC/C,MAAM,gBAAgB,IAAI,QAAQ,QAAQ,KAAK;EAC9C,QAAQ;EACR;EACA,MAAM,KAAK,UAAU,MAAM;EAC3B,CAAC;CACF,MAAM,SAAS,cAAc,QAAQ;CACrC,MAAM,WAAW,MAAM,yBAAyB;EAC/C;EACA;EACA,MAAM,WAAW,UAAU;EAC3B,SAAS;EACT;EACA;EACA;EACA,gBAAgB;GACf;GACA,QAAQ,WAAW;GACnB,IAAI;IACH,SAAS,SAAS,UAAU,yBAAyB;IACrD;IACA,WAAW,aAAa,OAAO;IAC/B,eAAe,mBAAmB;IAClC;IACA,OAAO;KACN;KACA,IAAI;KACJ,QAAQ;KACR;KACA;IACD;GACD;EACD,CAAC;AACF,KAAI,CAAC,SAAS,GAAI,QAAO;CACzB,MAAM,WAAoB,MAAM,SAAS,OAAO,CAAC,MAAM;AACvD,KAAI,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,SAAS,KAAK,CAClD,QAAO,SAAS,2BAA2B,uCAAuC,IAAI;CAEvF,MAAM,OAAO,SAAS;AACtB,KAAI,KAAK,UAAU,UAAa,CAAC,eAAgB,QAAO;AACxD,KAAI,KAAK,UAAU,UAAa,CAAC,eAChC,QAAO,SACN,wBACA,oEACA,IACA;AAEF,KAAI,KAAK,UAAU,QAAW;EAC7B,MAAM,mBAAmB,MAAM,QAAQ,2BAA2B,WAAW;AAC7E,MAAI,CAAC,iBAAkB,QAAO,SAAS,aAAa,wBAAwB,IAAI;EAChF,MAAM,QAAQ,yBAAyB;GACtC,OAAO,KAAK;GACZ,YAAY;GACZ,eAAe,gBAAgB,+BAAe,IAAI,KAAK;GACvD,CAAC;AACF,MAAI,UAAU,OAAO;AACpB,WAAQ,KACP,WAAW,SAAS,iBAAiB,KAAK,GAAG,YAAY,aAAa,MAAM,OAC5E;AACD,UAAO,yBAAyB,MAAM;;AAEvC,OAAK,QAAQ;;CAEd,MAAM,gBAAgB,WAAW;EAAE,GAAG;EAAM,kBAAkB,gBAAgB;EAAS,CAAC;AACxF,eAAc,QAAQ,IAAI,iBAAiB,oBAAoB;AAC/D,QAAO"}