emdash 0.14.0 → 0.16.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 (650) hide show
  1. package/dist/{adapters-9DybjTO6.d.mts → adapters-C4yd_UJR.d.mts} +1 -1
  2. package/dist/{adapters-9DybjTO6.d.mts.map → adapters-C4yd_UJR.d.mts.map} +1 -1
  3. package/dist/{allowed-origins-CDdG-4Gd.mjs → allowed-origins-D0fFk9a6.mjs} +2 -2
  4. package/dist/{allowed-origins-CDdG-4Gd.mjs.map → allowed-origins-D0fFk9a6.mjs.map} +1 -1
  5. package/dist/api/route-utils.d.mts +3 -3
  6. package/dist/api/route-utils.mjs +15 -15
  7. package/dist/api/schemas/index.d.mts +2 -2
  8. package/dist/api/schemas/index.mjs +3 -3
  9. package/dist/{api-BMLZuwM4.mjs → api-BNKqxyFX.mjs} +560 -56
  10. package/dist/api-BNKqxyFX.mjs.map +1 -0
  11. package/dist/{api-tokens-eYymBhIT.mjs → api-tokens-ucpcNXDt.mjs} +2 -2
  12. package/dist/{api-tokens-eYymBhIT.mjs.map → api-tokens-ucpcNXDt.mjs.map} +1 -1
  13. package/dist/{apply-v4DBgjPw.mjs → apply-BOPaD-s9.mjs} +17 -17
  14. package/dist/{apply-v4DBgjPw.mjs.map → apply-BOPaD-s9.mjs.map} +1 -1
  15. package/dist/astro/index.d.mts +10 -10
  16. package/dist/astro/index.d.mts.map +1 -1
  17. package/dist/astro/index.mjs +53 -5
  18. package/dist/astro/index.mjs.map +1 -1
  19. package/dist/astro/middleware/auth.d.mts +9 -9
  20. package/dist/astro/middleware/auth.mjs +6 -6
  21. package/dist/astro/middleware/auth.mjs.map +1 -1
  22. package/dist/astro/middleware/redirect.mjs +4 -4
  23. package/dist/astro/middleware/request-context.mjs +3 -3
  24. package/dist/astro/middleware/request-context.mjs.map +1 -1
  25. package/dist/astro/middleware/setup.mjs +1 -1
  26. package/dist/astro/middleware.d.mts.map +1 -1
  27. package/dist/astro/middleware.mjs +377 -75
  28. package/dist/astro/middleware.mjs.map +1 -1
  29. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +5 -5
  30. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +5 -5
  31. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  32. package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
  33. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts.map +1 -1
  34. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +14 -17
  35. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  36. package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts +9 -0
  37. package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts.map +1 -0
  38. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +70 -0
  39. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -0
  40. package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
  41. package/dist/astro/routes/api/admin/bylines/index.mjs +25 -16
  42. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  43. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +10 -10
  44. package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
  45. package/dist/astro/routes/api/admin/comments/bulk.mjs +8 -8
  46. package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
  47. package/dist/astro/routes/api/admin/comments/index.mjs +8 -8
  48. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
  49. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  50. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  51. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  52. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +33 -32
  53. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +33 -32
  55. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +32 -31
  57. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +32 -31
  59. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  60. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +34 -32
  61. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/plugins/index.mjs +32 -31
  63. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +32 -31
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +34 -32
  68. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +32 -31
  70. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts +8 -0
  72. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -0
  73. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +59 -0
  74. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -0
  75. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts +8 -0
  76. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -0
  77. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +85 -0
  78. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -0
  79. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts +8 -0
  80. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -0
  81. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +301 -0
  82. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -0
  83. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +51 -32
  85. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
  87. package/dist/astro/routes/api/admin/plugins/updates.mjs +45 -32
  88. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +32 -31
  90. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
  92. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +32 -31
  93. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
  95. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  96. package/dist/astro/routes/api/admin/users/_id_/index.mjs +5 -5
  97. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  98. package/dist/astro/routes/api/admin/users/index.mjs +5 -5
  99. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  100. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  101. package/dist/astro/routes/api/auth/invite/complete.mjs +9 -9
  102. package/dist/astro/routes/api/auth/invite/index.mjs +6 -6
  103. package/dist/astro/routes/api/auth/invite/register-options.mjs +8 -8
  104. package/dist/astro/routes/api/auth/logout.mjs +3 -3
  105. package/dist/astro/routes/api/auth/magic-link/send.mjs +8 -8
  106. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  107. package/dist/astro/routes/api/auth/me.mjs +5 -5
  108. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  109. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  110. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
  111. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  112. package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -1
  113. package/dist/astro/routes/api/auth/passkey/_id_.mjs +5 -5
  114. package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
  115. package/dist/astro/routes/api/auth/passkey/options.mjs +10 -10
  116. package/dist/astro/routes/api/auth/passkey/register/options.mjs +8 -8
  117. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +9 -9
  118. package/dist/astro/routes/api/auth/passkey/verify.mjs +9 -9
  119. package/dist/astro/routes/api/auth/signup/complete.mjs +9 -9
  120. package/dist/astro/routes/api/auth/signup/request.mjs +8 -8
  121. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  122. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +11 -11
  123. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
  124. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
  125. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  126. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
  127. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  128. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
  129. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +9 -9
  130. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +6 -6
  131. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  132. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
  133. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  134. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
  135. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +6 -6
  136. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  137. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +10 -9
  138. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  139. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
  140. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  141. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
  142. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  143. package/dist/astro/routes/api/content/_collection_/_id_.mjs +6 -6
  144. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  145. package/dist/astro/routes/api/content/_collection_/index.mjs +6 -6
  146. package/dist/astro/routes/api/content/_collection_/trash.mjs +6 -6
  147. package/dist/astro/routes/api/dashboard.mjs +7 -7
  148. package/dist/astro/routes/api/dev/emails.mjs +3 -3
  149. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  150. package/dist/astro/routes/api/import/probe.mjs +10 -10
  151. package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
  152. package/dist/astro/routes/api/import/wordpress/execute.d.mts +9 -9
  153. package/dist/astro/routes/api/import/wordpress/execute.mjs +9 -8
  154. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  155. package/dist/astro/routes/api/import/wordpress/media.mjs +8 -8
  156. package/dist/astro/routes/api/import/wordpress/prepare.mjs +8 -8
  157. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  158. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +11 -1
  159. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
  160. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +17 -1
  161. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
  162. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  163. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +9 -9
  164. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  165. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  166. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +10 -10
  167. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
  168. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +11 -11
  169. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  170. package/dist/astro/routes/api/manifest.mjs +4 -4
  171. package/dist/astro/routes/api/mcp.mjs +29 -29
  172. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  173. package/dist/astro/routes/api/media/_id_/confirm.mjs +6 -6
  174. package/dist/astro/routes/api/media/_id_.mjs +6 -6
  175. package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
  176. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
  177. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
  178. package/dist/astro/routes/api/media/providers/index.mjs +3 -3
  179. package/dist/astro/routes/api/media/upload-url.mjs +7 -7
  180. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  181. package/dist/astro/routes/api/media.mjs +8 -8
  182. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +7 -7
  183. package/dist/astro/routes/api/menus/_name_/items.mjs +7 -7
  184. package/dist/astro/routes/api/menus/_name_/reorder.mjs +7 -7
  185. package/dist/astro/routes/api/menus/_name_/translations.mjs +7 -7
  186. package/dist/astro/routes/api/menus/_name_.mjs +7 -7
  187. package/dist/astro/routes/api/menus/index.mjs +7 -7
  188. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  189. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  190. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  191. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  192. package/dist/astro/routes/api/oauth/register.mjs +3 -3
  193. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  194. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  195. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  196. package/dist/astro/routes/api/openapi.json.mjs +3 -3
  197. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  198. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
  199. package/dist/astro/routes/api/redirects/404s/index.mjs +8 -8
  200. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  201. package/dist/astro/routes/api/redirects/404s/summary.mjs +8 -8
  202. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  203. package/dist/astro/routes/api/redirects/_id_.mjs +9 -9
  204. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  205. package/dist/astro/routes/api/redirects/index.mjs +9 -9
  206. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  207. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
  208. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
  209. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +32 -31
  210. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  211. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +32 -31
  212. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  213. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +32 -31
  214. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  215. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +32 -31
  216. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  217. package/dist/astro/routes/api/schema/collections/index.mjs +32 -31
  218. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  219. package/dist/astro/routes/api/schema/index.mjs +6 -6
  220. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  221. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +32 -31
  222. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  223. package/dist/astro/routes/api/schema/orphans/index.mjs +32 -31
  224. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  225. package/dist/astro/routes/api/search/enable.mjs +9 -9
  226. package/dist/astro/routes/api/search/index.mjs +8 -8
  227. package/dist/astro/routes/api/search/rebuild.mjs +9 -9
  228. package/dist/astro/routes/api/search/stats.mjs +6 -6
  229. package/dist/astro/routes/api/search/suggest.mjs +8 -8
  230. package/dist/astro/routes/api/sections/_slug_.mjs +8 -8
  231. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  232. package/dist/astro/routes/api/sections/index.mjs +8 -8
  233. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  234. package/dist/astro/routes/api/settings/email.mjs +4 -4
  235. package/dist/astro/routes/api/settings.mjs +10 -10
  236. package/dist/astro/routes/api/setup/admin-verify.mjs +10 -10
  237. package/dist/astro/routes/api/setup/admin.mjs +9 -9
  238. package/dist/astro/routes/api/setup/dev-bypass.mjs +22 -22
  239. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  240. package/dist/astro/routes/api/setup/index.mjs +22 -22
  241. package/dist/astro/routes/api/setup/status.mjs +4 -4
  242. package/dist/astro/routes/api/snapshot.mjs +6 -6
  243. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  244. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +11 -10
  245. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  246. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +11 -10
  247. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  248. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +11 -10
  249. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  250. package/dist/astro/routes/api/taxonomies/index.mjs +11 -10
  251. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  252. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  253. package/dist/astro/routes/api/typegen.mjs +5 -5
  254. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  255. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  256. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  257. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +6 -6
  258. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +8 -8
  259. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +8 -8
  260. package/dist/astro/routes/api/widget-areas/_name_.mjs +5 -5
  261. package/dist/astro/routes/api/widget-areas/index.mjs +8 -8
  262. package/dist/astro/routes/api/widget-components.mjs +3 -3
  263. package/dist/astro/routes/robots.txt.mjs +5 -5
  264. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  265. package/dist/astro/routes/sitemap-_collection_.xml.mjs +58 -13
  266. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  267. package/dist/astro/routes/sitemap.xml.mjs +6 -6
  268. package/dist/astro/types.d.mts +20 -12
  269. package/dist/astro/types.d.mts.map +1 -1
  270. package/dist/auth/providers/github.d.mts +1 -1
  271. package/dist/auth/providers/google.d.mts +1 -1
  272. package/dist/{authorize-BlyCH-96.mjs → authorize-Bn4S4DUT.mjs} +2 -2
  273. package/dist/{authorize-BlyCH-96.mjs.map → authorize-Bn4S4DUT.mjs.map} +1 -1
  274. package/dist/byline-BDylH_m4.mjs +404 -0
  275. package/dist/byline-BDylH_m4.mjs.map +1 -0
  276. package/dist/{bylines-BdUP8NuI.d.mts → bylines-B2_XmnSU.d.mts} +73 -28
  277. package/dist/bylines-B2_XmnSU.d.mts.map +1 -0
  278. package/dist/bylines-B7TFEvFf.mjs +118 -0
  279. package/dist/bylines-B7TFEvFf.mjs.map +1 -0
  280. package/dist/bylines-n6nykUyI.mjs +174 -0
  281. package/dist/bylines-n6nykUyI.mjs.map +1 -0
  282. package/dist/{cache-CXCpjWiL.mjs → cache-BcI1yUjR.mjs} +2 -2
  283. package/dist/{cache-CXCpjWiL.mjs.map → cache-BcI1yUjR.mjs.map} +1 -1
  284. package/dist/{challenge-store-CJ0OOHOr.mjs → challenge-store-Dng1SxKT.mjs} +1 -1
  285. package/dist/{challenge-store-CJ0OOHOr.mjs.map → challenge-store-Dng1SxKT.mjs.map} +1 -1
  286. package/dist/{chunks-DyGtu1Bv.mjs → chunks-cYG4SnIP.mjs} +2 -2
  287. package/dist/{chunks-DyGtu1Bv.mjs.map → chunks-cYG4SnIP.mjs.map} +1 -1
  288. package/dist/cli/index.mjs +68 -30
  289. package/dist/cli/index.mjs.map +1 -1
  290. package/dist/client/cf-access.d.mts +1 -1
  291. package/dist/client/index.d.mts +1 -1
  292. package/dist/client/index.mjs +1 -1
  293. package/dist/client/index.mjs.map +1 -1
  294. package/dist/{comment-Dd9MI82-.mjs → comment-C76G-9tz.mjs} +2 -2
  295. package/dist/{comment-Dd9MI82-.mjs.map → comment-C76G-9tz.mjs.map} +1 -1
  296. package/dist/{comments-koGI0FrK.mjs → comments-CCxFFGY1.mjs} +3 -3
  297. package/dist/{comments-koGI0FrK.mjs.map → comments-CCxFFGY1.mjs.map} +1 -1
  298. package/dist/{components-mZem7pbe.mjs → components-Dx3DM0gg.mjs} +1 -1
  299. package/dist/{components-mZem7pbe.mjs.map → components-Dx3DM0gg.mjs.map} +1 -1
  300. package/dist/config-CVssduLe.mjs.map +1 -1
  301. package/dist/{content-D6YG26WG.mjs → content-8voQNTXX.mjs} +3 -3
  302. package/dist/{content-D6YG26WG.mjs.map → content-8voQNTXX.mjs.map} +1 -1
  303. package/dist/{context-qF8d3IPR.mjs → context-B7qiYrz2.mjs} +10 -10
  304. package/dist/context-B7qiYrz2.mjs.map +1 -0
  305. package/dist/{cron-H8eJ46dv.mjs → cron-Bd3b3iuj.mjs} +1 -1
  306. package/dist/{cron-H8eJ46dv.mjs.map → cron-Bd3b3iuj.mjs.map} +1 -1
  307. package/dist/{dashboard-BmWSIUwY.mjs → dashboard-BeaFSPpx.mjs} +4 -4
  308. package/dist/{dashboard-BmWSIUwY.mjs.map → dashboard-BeaFSPpx.mjs.map} +1 -1
  309. package/dist/db/index.d.mts +3 -3
  310. package/dist/db/index.mjs +1 -1
  311. package/dist/db/libsql.d.mts +1 -1
  312. package/dist/db/postgres.d.mts +1 -1
  313. package/dist/db/sqlite.d.mts +1 -1
  314. package/dist/db/sqlite.mjs +1 -1
  315. package/dist/{db-errors-CGN9kJfo.mjs → db-errors-BiYqoX-n.mjs} +14 -2
  316. package/dist/db-errors-BiYqoX-n.mjs.map +1 -0
  317. package/dist/{default-Dbs22Gg4.mjs → default-BvTAYCzx.mjs} +1 -1
  318. package/dist/{default-Dbs22Gg4.mjs.map → default-BvTAYCzx.mjs.map} +1 -1
  319. package/dist/{device-flow-BqJRxa0Q.mjs → device-flow-B9oG8PwP.mjs} +4 -4
  320. package/dist/{device-flow-BqJRxa0Q.mjs.map → device-flow-B9oG8PwP.mjs.map} +1 -1
  321. package/dist/{email-console-Dmp5Q-P2.mjs → email-console-CubRll9q.mjs} +1 -1
  322. package/dist/email-console-CubRll9q.mjs.map +1 -0
  323. package/dist/{error-tSQWIl5U.mjs → error-ChfADBuu.mjs} +19 -9
  324. package/dist/error-ChfADBuu.mjs.map +1 -0
  325. package/dist/errors-9P_FDrJ_.mjs +17 -0
  326. package/dist/errors-9P_FDrJ_.mjs.map +1 -0
  327. package/dist/{escape-B8bdIryO.mjs → escape-Cg6kMELH.mjs} +1 -1
  328. package/dist/{escape-B8bdIryO.mjs.map → escape-Cg6kMELH.mjs.map} +1 -1
  329. package/dist/{fts-manager-B633C-kQ.mjs → fts-manager-C_b-4x8u.mjs} +2 -2
  330. package/dist/{fts-manager-B633C-kQ.mjs.map → fts-manager-C_b-4x8u.mjs.map} +1 -1
  331. package/dist/{import-CNfLOgDE.mjs → import-DG80rC_I.mjs} +3 -3
  332. package/dist/{import-CNfLOgDE.mjs.map → import-DG80rC_I.mjs.map} +1 -1
  333. package/dist/{index-BV8iJ-6s.d.mts → index-BPZFAcgE.d.mts} +384 -123
  334. package/dist/index-BPZFAcgE.d.mts.map +1 -0
  335. package/dist/{index-D2gvztOP.d.mts → index-CC42STEm.d.mts} +3 -3
  336. package/dist/{index-D2gvztOP.d.mts.map → index-CC42STEm.d.mts.map} +1 -1
  337. package/dist/index.d.mts +17 -17
  338. package/dist/index.mjs +53 -52
  339. package/dist/{load-QzYRpVN3.mjs → load-CLFRjk9r.mjs} +2 -2
  340. package/dist/{load-QzYRpVN3.mjs.map → load-CLFRjk9r.mjs.map} +1 -1
  341. package/dist/{loader-Cs6-Bqe6.mjs → loader-D-vIJjfY.mjs} +86 -46
  342. package/dist/loader-D-vIJjfY.mjs.map +1 -0
  343. package/dist/{manifest-schema-HCtSh4Jq.mjs → manifest-schema-Czqf0TLu.mjs} +1 -1
  344. package/dist/{manifest-schema-HCtSh4Jq.mjs.map → manifest-schema-Czqf0TLu.mjs.map} +1 -1
  345. package/dist/media/index.d.mts +1 -1
  346. package/dist/media/local-runtime.d.mts +11 -11
  347. package/dist/media/local-runtime.mjs +4 -4
  348. package/dist/{media-Dg7he9uK.mjs → media-CKQd8AYU.mjs} +2 -2
  349. package/dist/media-CKQd8AYU.mjs.map +1 -0
  350. package/dist/{media-allowlist-B8EX01DH.mjs → media-allowlist-BNloC69x.mjs} +1 -1
  351. package/dist/{media-allowlist-B8EX01DH.mjs.map → media-allowlist-BNloC69x.mjs.map} +1 -1
  352. package/dist/{menus-X4Z-eBA1.mjs → menus-C-nWT5Tu.mjs} +42 -17
  353. package/dist/menus-C-nWT5Tu.mjs.map +1 -0
  354. package/dist/{menus-DOzIecHi.mjs → menus-arUNspyU.mjs} +2 -2
  355. package/dist/menus-arUNspyU.mjs.map +1 -0
  356. package/dist/mime-KV5TqkMN.mjs.map +1 -1
  357. package/dist/{mode-DPRPvJYm.mjs → mode-CaaiebZI.mjs} +1 -1
  358. package/dist/{mode-DPRPvJYm.mjs.map → mode-CaaiebZI.mjs.map} +1 -1
  359. package/dist/{oauth-authorization-62GmpGIH.mjs → oauth-authorization-CTMeVfvj.mjs} +4 -4
  360. package/dist/{oauth-authorization-62GmpGIH.mjs.map → oauth-authorization-CTMeVfvj.mjs.map} +1 -1
  361. package/dist/{oauth-clients-D_B0_-Bz.mjs → oauth-clients-eJCbkVSG.mjs} +1 -1
  362. package/dist/oauth-clients-eJCbkVSG.mjs.map +1 -0
  363. package/dist/{oauth-state-store-DpsZViTu.mjs → oauth-state-store-vOSdOeGe.mjs} +1 -1
  364. package/dist/{oauth-state-store-DpsZViTu.mjs.map → oauth-state-store-vOSdOeGe.mjs.map} +1 -1
  365. package/dist/{oauth-user-lookup-meyS2oB1.mjs → oauth-user-lookup-3JwsVw6N.mjs} +1 -1
  366. package/dist/{oauth-user-lookup-meyS2oB1.mjs.map → oauth-user-lookup-3JwsVw6N.mjs.map} +1 -1
  367. package/dist/options-BL4X94qY.mjs.map +1 -1
  368. package/dist/{options-Cq64Wx0O.d.mts → options-DhV-gwJb.d.mts} +4 -4
  369. package/dist/options-DhV-gwJb.d.mts.map +1 -0
  370. package/dist/page/index.d.mts +2 -2
  371. package/dist/{parse-BFTPon-J.mjs → parse-DHbXfvxO.mjs} +2 -2
  372. package/dist/{parse-BFTPon-J.mjs.map → parse-DHbXfvxO.mjs.map} +1 -1
  373. package/dist/{passkey-config-Cg86_ISa.mjs → passkey-config-BloQOT3y.mjs} +1 -1
  374. package/dist/{passkey-config-Cg86_ISa.mjs.map → passkey-config-BloQOT3y.mjs.map} +1 -1
  375. package/dist/{placeholder-D3cFCU9y.d.mts → placeholder-KCkkCtgQ.d.mts} +1 -1
  376. package/dist/{placeholder-D3cFCU9y.d.mts.map → placeholder-KCkkCtgQ.d.mts.map} +1 -1
  377. package/dist/plugin-types.d.mts +1 -1
  378. package/dist/plugin-utils.d.mts +25 -10
  379. package/dist/plugin-utils.d.mts.map +1 -1
  380. package/dist/plugin-utils.mjs +11 -10
  381. package/dist/plugin-utils.mjs.map +1 -1
  382. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  383. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  384. package/dist/plugins/adapt-sandbox-entry.mjs +26 -15
  385. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  386. package/dist/{preview-C1LOEbWZ.mjs → preview-D4z0WONU.mjs} +2 -2
  387. package/dist/{preview-C1LOEbWZ.mjs.map → preview-D4z0WONU.mjs.map} +1 -1
  388. package/dist/{public-url-CseXl9Fv.mjs → public-url-CUWWFME2.mjs} +1 -1
  389. package/dist/{public-url-CseXl9Fv.mjs.map → public-url-CUWWFME2.mjs.map} +1 -1
  390. package/dist/{query-axZmO6Tn.mjs → query-7m6-l0f_.mjs} +27 -17
  391. package/dist/query-7m6-l0f_.mjs.map +1 -0
  392. package/dist/{rate-limit-t5CVjCO6.mjs → rate-limit-D8RAXN8b.mjs} +2 -2
  393. package/dist/{rate-limit-t5CVjCO6.mjs.map → rate-limit-D8RAXN8b.mjs.map} +1 -1
  394. package/dist/{redirect-DGRsLO2I.mjs → redirect-BINiRYq4.mjs} +1 -1
  395. package/dist/{redirect-DGRsLO2I.mjs.map → redirect-BINiRYq4.mjs.map} +1 -1
  396. package/dist/{redirect-DkaDxq8e.mjs → redirect-CjfDGrTd.mjs} +2 -2
  397. package/dist/{redirect-DkaDxq8e.mjs.map → redirect-CjfDGrTd.mjs.map} +1 -1
  398. package/dist/{redirects-Dmj6KRU3.mjs → redirects-COMLwsV5.mjs} +19 -5
  399. package/dist/redirects-COMLwsV5.mjs.map +1 -0
  400. package/dist/{redirects-D1fdd68T.mjs → redirects-CowoEHdE.mjs} +3 -3
  401. package/dist/{redirects-D1fdd68T.mjs.map → redirects-CowoEHdE.mjs.map} +1 -1
  402. package/dist/{registry-BnCeHYsf.mjs → registry-Cyp-dx6J.mjs} +4 -4
  403. package/dist/{registry-BnCeHYsf.mjs.map → registry-Cyp-dx6J.mjs.map} +1 -1
  404. package/dist/request-cache-dzCt8TZB.mjs.map +1 -1
  405. package/dist/request-context.mjs.map +1 -1
  406. package/dist/{request-meta-CLCwSQOS.mjs → request-meta-C_Cjii-T.mjs} +2 -2
  407. package/dist/{request-meta-CLCwSQOS.mjs.map → request-meta-C_Cjii-T.mjs.map} +1 -1
  408. package/dist/resolve-D6sM-SgF.mjs +143 -0
  409. package/dist/resolve-D6sM-SgF.mjs.map +1 -0
  410. package/dist/{runner-DcfZewkO.d.mts → runner-DSQBurMS.d.mts} +8 -5
  411. package/dist/runner-DSQBurMS.d.mts.map +1 -0
  412. package/dist/{runner-DdnQIwz_.mjs → runner-Drnvs96u.mjs} +491 -188
  413. package/dist/runner-Drnvs96u.mjs.map +1 -0
  414. package/dist/runtime.d.mts +10 -10
  415. package/dist/runtime.mjs +2 -2
  416. package/dist/{schema-BmqagCwG.mjs → schema-CI9mYPX3.mjs} +4 -4
  417. package/dist/{schema-BmqagCwG.mjs.map → schema-CI9mYPX3.mjs.map} +1 -1
  418. package/dist/{search-CPrvO5u8.mjs → search-DKz_mGBP.mjs} +4 -4
  419. package/dist/{search-CPrvO5u8.mjs.map → search-DKz_mGBP.mjs.map} +1 -1
  420. package/dist/{secrets-6pgZyq0K.mjs → secrets-rPdhEBkD.mjs} +1 -1
  421. package/dist/{secrets-6pgZyq0K.mjs.map → secrets-rPdhEBkD.mjs.map} +1 -1
  422. package/dist/{sections-Cm-zb-gZ.mjs → sections-DBbCDIAT.mjs} +3 -3
  423. package/dist/{sections-Cm-zb-gZ.mjs.map → sections-DBbCDIAT.mjs.map} +1 -1
  424. package/dist/seed/index.d.mts +2 -2
  425. package/dist/seed/index.mjs +16 -16
  426. package/dist/seo/index.d.mts +1 -1
  427. package/dist/{seo-DRq9-EPP.mjs → seo-BGCyDlkb.mjs} +2 -2
  428. package/dist/{seo-DRq9-EPP.mjs.map → seo-BGCyDlkb.mjs.map} +1 -1
  429. package/dist/{seo-BoR4wCUh.mjs → seo-Dq707mNQ.mjs} +5 -3
  430. package/dist/seo-Dq707mNQ.mjs.map +1 -0
  431. package/dist/{service-vByySp-2.mjs → service-B0H7U1Y9.mjs} +3 -3
  432. package/dist/{service-vByySp-2.mjs.map → service-B0H7U1Y9.mjs.map} +1 -1
  433. package/dist/{settings-xQKsWnzQ.mjs → settings-BSXRtTzk.mjs} +3 -3
  434. package/dist/settings-BSXRtTzk.mjs.map +1 -0
  435. package/dist/{settings-CBBj7HUd.mjs → settings-DfwNyQkf.mjs} +3 -3
  436. package/dist/{settings-CBBj7HUd.mjs.map → settings-DfwNyQkf.mjs.map} +1 -1
  437. package/dist/{setup-BGAJ2uXs.mjs → setup-Cf_TyOv5.mjs} +2 -2
  438. package/dist/{setup-BGAJ2uXs.mjs.map → setup-Cf_TyOv5.mjs.map} +1 -1
  439. package/dist/{setup-complete-C6ZCLhKo.mjs → setup-complete-MzzN9u0b.mjs} +1 -1
  440. package/dist/{setup-complete-C6ZCLhKo.mjs.map → setup-complete-MzzN9u0b.mjs.map} +1 -1
  441. package/dist/{setup-nonce-CY1gQiAU.mjs → setup-nonce-DXuriHsg.mjs} +1 -1
  442. package/dist/{setup-nonce-CY1gQiAU.mjs.map → setup-nonce-DXuriHsg.mjs.map} +1 -1
  443. package/dist/{site-url-D-M4Fd8O.mjs → site-url-xkhw1tcz.mjs} +1 -1
  444. package/dist/{site-url-D-M4Fd8O.mjs.map → site-url-xkhw1tcz.mjs.map} +1 -1
  445. package/dist/{ssrf-DzFN_qV-.mjs → ssrf-MZ-zrG6-.mjs} +1 -1
  446. package/dist/{ssrf-DzFN_qV-.mjs.map → ssrf-MZ-zrG6-.mjs.map} +1 -1
  447. package/dist/storage/local.d.mts +1 -1
  448. package/dist/storage/local.mjs +1 -1
  449. package/dist/storage/local.mjs.map +1 -1
  450. package/dist/storage/s3.d.mts +1 -1
  451. package/dist/storage/s3.mjs +1 -1
  452. package/dist/storage/s3.mjs.map +1 -1
  453. package/dist/{taxonomies-Dc0mzlms.mjs → taxonomies-4vx0nmMr.mjs} +4 -4
  454. package/dist/{taxonomies-Dc0mzlms.mjs.map → taxonomies-4vx0nmMr.mjs.map} +1 -1
  455. package/dist/{taxonomies-Cn9UpaR2.mjs → taxonomies-CcvrMLbR.mjs} +8 -43
  456. package/dist/taxonomies-CcvrMLbR.mjs.map +1 -0
  457. package/dist/{taxonomy-wPfusMK9.mjs → taxonomy-zqGQUqgu.mjs} +3 -3
  458. package/dist/{taxonomy-wPfusMK9.mjs.map → taxonomy-zqGQUqgu.mjs.map} +1 -1
  459. package/dist/{tokens-DILYNZMi.mjs → tokens-N8otWMmj.mjs} +1 -1
  460. package/dist/{tokens-DILYNZMi.mjs.map → tokens-N8otWMmj.mjs.map} +1 -1
  461. package/dist/{transport-fw-mKJzT.mjs → transport-B6CHddbu.mjs} +1 -1
  462. package/dist/{transport-fw-mKJzT.mjs.map → transport-B6CHddbu.mjs.map} +1 -1
  463. package/dist/{transport-GeXlLscf.d.mts → transport-C2MGqtL6.d.mts} +1 -1
  464. package/dist/{transport-GeXlLscf.d.mts.map → transport-C2MGqtL6.d.mts.map} +1 -1
  465. package/dist/{trusted-proxy-CJhQIk65.mjs → trusted-proxy-97pajC2f.mjs} +1 -1
  466. package/dist/{trusted-proxy-CJhQIk65.mjs.map → trusted-proxy-97pajC2f.mjs.map} +1 -1
  467. package/dist/{types-CwXMEPRr.mjs → types-B0bmgwMG.mjs} +2 -2
  468. package/dist/types-B0bmgwMG.mjs.map +1 -0
  469. package/dist/{types-Dz9CGX_d.mjs → types-Cd9UCu3t.mjs} +1 -1
  470. package/dist/{types-Dz9CGX_d.mjs.map → types-Cd9UCu3t.mjs.map} +1 -1
  471. package/dist/{types-DmxPPXGf.d.mts → types-CkDSF81F.d.mts} +1 -1
  472. package/dist/{types-DmxPPXGf.d.mts.map → types-CkDSF81F.d.mts.map} +1 -1
  473. package/dist/{types-BWhaSS7U.d.mts → types-CpUuGcd5.d.mts} +1 -1
  474. package/dist/{types-BWhaSS7U.d.mts.map → types-CpUuGcd5.d.mts.map} +1 -1
  475. package/dist/{types-DFowNO60.d.mts → types-D599-ruj.d.mts} +1 -1
  476. package/dist/{types-DFowNO60.d.mts.map → types-D599-ruj.d.mts.map} +1 -1
  477. package/dist/{types-B05e2naf.d.mts → types-DGHWRQgr.d.mts} +3 -3
  478. package/dist/{types-B05e2naf.d.mts.map → types-DGHWRQgr.d.mts.map} +1 -1
  479. package/dist/{types-CzvJd1ND.d.mts → types-DaYDYW6g.d.mts} +14 -1
  480. package/dist/types-DaYDYW6g.d.mts.map +1 -0
  481. package/dist/{types-C1KKK4VP.d.mts → types-DaqNzqVt.d.mts} +16 -1
  482. package/dist/{types-C1KKK4VP.d.mts.map → types-DaqNzqVt.d.mts.map} +1 -1
  483. package/dist/{types-DW1l0gCv.d.mts → types-Dgo6y-Ut.d.mts} +1 -1
  484. package/dist/{types-DW1l0gCv.d.mts.map → types-Dgo6y-Ut.d.mts.map} +1 -1
  485. package/dist/{types-Cb2UCDJg.d.mts → types-bYmRn_Uy.d.mts} +1 -1
  486. package/dist/{types-Cb2UCDJg.d.mts.map → types-bYmRn_Uy.d.mts.map} +1 -1
  487. package/dist/{user-Dr1bOCqS.mjs → user-hUSOaIJy.mjs} +2 -2
  488. package/dist/{user-Dr1bOCqS.mjs.map → user-hUSOaIJy.mjs.map} +1 -1
  489. package/dist/{utils-_F-rWBTN.mjs → utils-C3wTAP-P.mjs} +1 -1
  490. package/dist/{utils-_F-rWBTN.mjs.map → utils-C3wTAP-P.mjs.map} +1 -1
  491. package/dist/{validate-BpQGsmd7.d.mts → validate-DQtHw9NT.d.mts} +5 -5
  492. package/dist/{validate-BpQGsmd7.d.mts.map → validate-DQtHw9NT.d.mts.map} +1 -1
  493. package/dist/{validate-DlFxcVVK.mjs → validate-IGltez8n.mjs} +2 -2
  494. package/dist/{validate-DlFxcVVK.mjs.map → validate-IGltez8n.mjs.map} +1 -1
  495. package/dist/{validation-BiFJqUp5.mjs → validation-Bmymau7y.mjs} +6 -6
  496. package/dist/{validation-BiFJqUp5.mjs.map → validation-Bmymau7y.mjs.map} +1 -1
  497. package/dist/version-BTc87L3L.mjs +7 -0
  498. package/dist/{version-DNmQakZO.mjs.map → version-BTc87L3L.mjs.map} +1 -1
  499. package/dist/{widgets-B9j_yzlk.mjs → widgets-yHQa4c6c.mjs} +3 -3
  500. package/dist/widgets-yHQa4c6c.mjs.map +1 -0
  501. package/dist/{zod-generator-DSyz01KE.mjs → zod-generator-B80aap1J.mjs} +2 -2
  502. package/dist/{zod-generator-DSyz01KE.mjs.map → zod-generator-B80aap1J.mjs.map} +1 -1
  503. package/package.json +12 -10
  504. package/src/api/error.ts +18 -3
  505. package/src/api/errors.ts +8 -0
  506. package/src/api/handlers/bylines.ts +161 -0
  507. package/src/api/handlers/content.ts +125 -43
  508. package/src/api/handlers/index.ts +8 -0
  509. package/src/api/handlers/marketplace.ts +27 -5
  510. package/src/api/handlers/oauth-clients.ts +1 -1
  511. package/src/api/handlers/registry.ts +622 -5
  512. package/src/api/handlers/seo.ts +16 -1
  513. package/src/api/handlers/snapshot.ts +1 -1
  514. package/src/api/openapi/document.ts +1 -1
  515. package/src/api/schemas/bylines.ts +46 -0
  516. package/src/astro/integration/index.ts +27 -1
  517. package/src/astro/integration/routes.ts +10 -0
  518. package/src/astro/integration/runtime.ts +20 -1
  519. package/src/astro/integration/virtual-modules.ts +19 -2
  520. package/src/astro/integration/vite-config.ts +2 -2
  521. package/src/astro/middleware/auth.ts +7 -7
  522. package/src/astro/middleware/request-context.ts +1 -1
  523. package/src/astro/middleware.ts +35 -20
  524. package/src/astro/public-plugin-api-routes.ts +41 -0
  525. package/src/astro/routes/api/admin/bylines/[id]/index.ts +3 -12
  526. package/src/astro/routes/api/admin/bylines/[id]/translations.ts +99 -0
  527. package/src/astro/routes/api/admin/bylines/index.ts +22 -11
  528. package/src/astro/routes/api/admin/plugins/[id]/update.ts +1 -0
  529. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +6 -1
  530. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +51 -0
  531. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +83 -0
  532. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +388 -0
  533. package/src/astro/routes/api/admin/plugins/registry/install.ts +7 -1
  534. package/src/astro/routes/api/admin/plugins/updates.ts +43 -6
  535. package/src/astro/routes/api/admin/themes/marketplace/index.ts +1 -1
  536. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +2 -2
  537. package/src/astro/routes/api/auth/oauth/[provider].ts +2 -2
  538. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -2
  539. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +2 -2
  540. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -2
  541. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -2
  542. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +2 -2
  543. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +6 -6
  544. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +1 -1
  545. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -2
  546. package/src/astro/routes/api/content/[collection]/[id].ts +6 -6
  547. package/src/astro/routes/api/import/wordpress/execute.ts +1 -1
  548. package/src/astro/routes/api/import/wordpress/prepare.ts +2 -2
  549. package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +22 -0
  550. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +8 -5
  551. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +2 -2
  552. package/src/astro/routes/api/media/upload-url.ts +1 -1
  553. package/src/astro/routes/api/redirects/404s/index.ts +3 -3
  554. package/src/astro/routes/api/redirects/404s/summary.ts +1 -1
  555. package/src/astro/routes/api/redirects/[id].ts +3 -3
  556. package/src/astro/routes/api/redirects/index.ts +2 -2
  557. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +4 -4
  558. package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +2 -6
  559. package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +1 -1
  560. package/src/astro/routes/api/schema/collections/[slug]/index.ts +6 -6
  561. package/src/astro/routes/api/schema/collections/index.ts +4 -4
  562. package/src/astro/routes/api/schema/index.ts +1 -1
  563. package/src/astro/routes/api/schema/orphans/[slug].ts +1 -1
  564. package/src/astro/routes/api/schema/orphans/index.ts +1 -1
  565. package/src/astro/routes/api/sections/[slug].ts +3 -3
  566. package/src/astro/routes/api/sections/index.ts +2 -2
  567. package/src/astro/routes/sitemap-[collection].xml.ts +114 -14
  568. package/src/astro/types.ts +18 -0
  569. package/src/auth/rate-limit.ts +1 -1
  570. package/src/auth/trusted-proxy.ts +1 -1
  571. package/src/bylines/index.ts +154 -55
  572. package/src/cli/commands/init.ts +4 -8
  573. package/src/client/index.ts +1 -1
  574. package/src/components/InlinePortableTextEditor.tsx +5 -1
  575. package/src/components/inline-code-block.tsx +343 -0
  576. package/src/config/secrets.ts +3 -3
  577. package/src/content/converters/portable-text-to-prosemirror.ts +35 -11
  578. package/src/database/connection.ts +3 -10
  579. package/src/database/errors.ts +14 -0
  580. package/src/database/index.ts +3 -1
  581. package/src/database/migrations/006_taxonomy_defs.ts +1 -1
  582. package/src/database/migrations/014_draft_revisions.ts +6 -6
  583. package/src/database/migrations/040_byline_i18n.ts +497 -0
  584. package/src/database/migrations/runner.ts +33 -22
  585. package/src/database/repositories/audit.ts +2 -2
  586. package/src/database/repositories/byline.ts +320 -50
  587. package/src/database/repositories/media.ts +2 -2
  588. package/src/database/repositories/menu.ts +1 -1
  589. package/src/database/repositories/options.ts +3 -3
  590. package/src/database/repositories/plugin-storage.ts +3 -3
  591. package/src/database/repositories/types.ts +13 -0
  592. package/src/database/types.ts +15 -0
  593. package/src/emdash-runtime.ts +493 -20
  594. package/src/i18n/config.ts +1 -1
  595. package/src/i18n/resolve.ts +152 -0
  596. package/src/index.ts +9 -0
  597. package/src/loader.ts +134 -60
  598. package/src/mcp/server.ts +3 -3
  599. package/src/media/mime.ts +1 -1
  600. package/src/page/absolute-url.ts +1 -1
  601. package/src/plugin-utils.ts +23 -0
  602. package/src/plugins/adapt-sandbox-entry.ts +45 -40
  603. package/src/plugins/email-console.ts +1 -1
  604. package/src/plugins/index.ts +1 -0
  605. package/src/plugins/marketplace.ts +1 -1
  606. package/src/plugins/sandbox/index.ts +1 -0
  607. package/src/plugins/sandbox/noop.ts +11 -3
  608. package/src/plugins/sandbox/types.ts +28 -0
  609. package/src/query.ts +41 -7
  610. package/src/registry/config.ts +1 -1
  611. package/src/request-cache.ts +3 -3
  612. package/src/request-context.ts +1 -1
  613. package/src/settings/index.ts +4 -4
  614. package/src/storage/local.ts +1 -1
  615. package/src/storage/s3.ts +3 -3
  616. package/src/utils/db-errors.ts +24 -0
  617. package/src/widgets/index.ts +1 -1
  618. package/dist/api-BMLZuwM4.mjs.map +0 -1
  619. package/dist/byline-D09BaS4j.mjs +0 -220
  620. package/dist/byline-D09BaS4j.mjs.map +0 -1
  621. package/dist/bylines-BTM2xtP8.mjs +0 -113
  622. package/dist/bylines-BTM2xtP8.mjs.map +0 -1
  623. package/dist/bylines-BdUP8NuI.d.mts.map +0 -1
  624. package/dist/connection-2igzM-AT.mjs +0 -57
  625. package/dist/connection-2igzM-AT.mjs.map +0 -1
  626. package/dist/context-qF8d3IPR.mjs.map +0 -1
  627. package/dist/db-errors-CGN9kJfo.mjs.map +0 -1
  628. package/dist/email-console-Dmp5Q-P2.mjs.map +0 -1
  629. package/dist/error-tSQWIl5U.mjs.map +0 -1
  630. package/dist/index-BV8iJ-6s.d.mts.map +0 -1
  631. package/dist/loader-Cs6-Bqe6.mjs.map +0 -1
  632. package/dist/media-Dg7he9uK.mjs.map +0 -1
  633. package/dist/menus-DOzIecHi.mjs.map +0 -1
  634. package/dist/menus-X4Z-eBA1.mjs.map +0 -1
  635. package/dist/oauth-clients-D_B0_-Bz.mjs.map +0 -1
  636. package/dist/options-Cq64Wx0O.d.mts.map +0 -1
  637. package/dist/query-axZmO6Tn.mjs.map +0 -1
  638. package/dist/redirects-Dmj6KRU3.mjs.map +0 -1
  639. package/dist/runner-DcfZewkO.d.mts.map +0 -1
  640. package/dist/runner-DdnQIwz_.mjs.map +0 -1
  641. package/dist/seo-BoR4wCUh.mjs.map +0 -1
  642. package/dist/settings-xQKsWnzQ.mjs.map +0 -1
  643. package/dist/taxonomies-Cn9UpaR2.mjs.map +0 -1
  644. package/dist/types-CwXMEPRr.mjs.map +0 -1
  645. package/dist/types-CzvJd1ND.d.mts.map +0 -1
  646. package/dist/version-DNmQakZO.mjs +0 -7
  647. package/dist/widgets-B9j_yzlk.mjs.map +0 -1
  648. /package/dist/{api-tokens-D3C9v02m.mjs → api-tokens-iPIHAY8N.mjs} +0 -0
  649. /package/dist/{ssrf-CTul4uQi.mjs → ssrf-BIcd-aXW.mjs} +0 -0
  650. /package/dist/{types-Db67HHlU.mjs → types-1NNkmTIn.mjs} +0 -0
@@ -1,27 +1,29 @@
1
1
  import { r as validatePluginIdentifier, t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
- import { r as isI18nEnabled } from "./config-CVssduLe.mjs";
3
- import { r as RevisionRepository, t as ContentRepository } from "./content-D6YG26WG.mjs";
2
+ import { n as getI18nConfig, r as isI18nEnabled } from "./config-CVssduLe.mjs";
3
+ import { r as RevisionRepository, t as ContentRepository } from "./content-8voQNTXX.mjs";
4
4
  import { r as encodeBase64, t as decodeBase64 } from "./base64-CqR-7kqF.mjs";
5
- import { n as InvalidCursorError, t as EmDashValidationError } from "./types-CwXMEPRr.mjs";
6
- import { t as MediaRepository } from "./media-Dg7he9uK.mjs";
7
- import { t as CommentRepository } from "./comment-Dd9MI82-.mjs";
5
+ import { n as InvalidCursorError, t as EmDashValidationError } from "./types-B0bmgwMG.mjs";
6
+ import { t as MediaRepository } from "./media-CKQd8AYU.mjs";
7
+ import { t as CommentRepository } from "./comment-C76G-9tz.mjs";
8
8
  import { t as withTransaction } from "./transaction-NQj4VJ7Z.mjs";
9
- import { t as RedirectRepository } from "./redirect-DkaDxq8e.mjs";
10
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-DyGtu1Bv.mjs";
11
- import { t as BylineRepository } from "./byline-D09BaS4j.mjs";
12
- import { t as SeoRepository } from "./seo-DRq9-EPP.mjs";
13
- import { r as invalidateRedirectCache } from "./cache-CXCpjWiL.mjs";
14
- import { t as isMissingTableError } from "./db-errors-CGN9kJfo.mjs";
9
+ import { t as RedirectRepository } from "./redirect-CjfDGrTd.mjs";
10
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-cYG4SnIP.mjs";
11
+ import { t as BylineRepository } from "./byline-BDylH_m4.mjs";
12
+ import { t as SeoRepository } from "./seo-BGCyDlkb.mjs";
13
+ import { r as invalidateRedirectCache } from "./cache-BcI1yUjR.mjs";
14
+ import { n as isMissingTableError } from "./db-errors-BiYqoX-n.mjs";
15
15
  import { r as parseAllowedMimeTypes, t as matchesMimeAllowlist } from "./mime-KV5TqkMN.mjs";
16
16
  import { n as requestCached } from "./request-cache-dzCt8TZB.mjs";
17
17
  import { n as hashString } from "./hash-DlUxGhQS.mjs";
18
- import { n as SchemaRegistry, t as SchemaError } from "./registry-BnCeHYsf.mjs";
19
- import { i as pluginManifestSchema, r as normalizeManifestRoute } from "./manifest-schema-HCtSh4Jq.mjs";
20
- import { r as normalizeCapabilities } from "./types-Db67HHlU.mjs";
21
- import { t as EmDashStorageError } from "./types-Dz9CGX_d.mjs";
22
- import { n as resolveAndValidateExternalUrl, t as SsrfError } from "./ssrf-DzFN_qV-.mjs";
18
+ import { n as SchemaRegistry, t as SchemaError } from "./registry-Cyp-dx6J.mjs";
19
+ import { i as pluginManifestSchema, r as normalizeManifestRoute } from "./manifest-schema-Czqf0TLu.mjs";
20
+ import { r as normalizeCapabilities } from "./types-1NNkmTIn.mjs";
21
+ import { t as EmDashStorageError } from "./types-Cd9UCu3t.mjs";
22
+ import { n as resolveAndValidateExternalUrl, t as SsrfError } from "./ssrf-MZ-zrG6-.mjs";
23
23
  import { sql } from "kysely";
24
24
  import { createGzipDecoder, unpackTar } from "modern-tar";
25
+ import { ClientResponseError, ClientValidationError } from "@atcute/client";
26
+ import { checkEnvCompatibility, findSkippedEnvConstraints } from "@emdash-cms/registry-client/env";
25
27
 
26
28
  //#region src/api/rev.ts
27
29
  /**
@@ -195,7 +197,8 @@ async function hydrateSeoMany(db, collection, items, hasSeo) {
195
197
  }
196
198
  async function hydrateBylines(db, collection, item) {
197
199
  const bylineRepo = new BylineRepository(db);
198
- const bylines = await bylineRepo.getContentBylines(collection, item.id);
200
+ const localeOpt = item.locale ? { locale: item.locale } : void 0;
201
+ const bylines = await bylineRepo.getContentBylines(collection, item.id, localeOpt);
199
202
  if (bylines.length > 0) {
200
203
  item.bylines = bylines.map((c) => ({
201
204
  ...c,
@@ -204,9 +207,13 @@ async function hydrateBylines(db, collection, item) {
204
207
  item.byline = bylines[0]?.byline ?? null;
205
208
  return;
206
209
  }
207
- if (item.primaryBylineId) item.primaryBylineId = null;
210
+ if (item.primaryBylineId) {
211
+ item.bylines = [];
212
+ item.byline = null;
213
+ return;
214
+ }
208
215
  if (item.authorId) {
209
- const fallback = await bylineRepo.findByUserId(item.authorId);
216
+ const fallback = await bylineRepo.findByUserId(item.authorId, localeOpt);
210
217
  if (fallback) {
211
218
  item.bylines = [{
212
219
  byline: fallback,
@@ -223,18 +230,59 @@ async function hydrateBylines(db, collection, item) {
223
230
  }
224
231
  /**
225
232
  * Batch-hydrate bylines for multiple items using two bulk queries instead of N+1.
233
+ *
234
+ * Items may live at different locales (e.g. a list endpoint returning the
235
+ * translations of an entry). Group by `item.locale` and call the strict
236
+ * per-locale repo method once per group so each item resolves against its
237
+ * own locale's byline rows.
226
238
  */
227
239
  async function hydrateBylinesMany(db, collection, items) {
228
240
  if (items.length === 0) return;
229
241
  const bylineRepo = new BylineRepository(db);
230
- const contentIds = items.map((i) => i.id);
231
- const bylinesMap = await bylineRepo.getContentBylinesMany(collection, contentIds);
232
- const fallbackAuthorIds = [];
233
- for (const item of items) if (!bylinesMap.has(item.id) && item.authorId) fallbackAuthorIds.push(item.authorId);
234
- const uniqueAuthorIds = [...new Set(fallbackAuthorIds)];
235
- const authorBylineMap = await bylineRepo.findByUserIds(uniqueAuthorIds);
242
+ const localeBuckets = /* @__PURE__ */ new Map();
243
+ for (const item of items) {
244
+ const key = item.locale ?? null;
245
+ const bucket = localeBuckets.get(key);
246
+ if (bucket) bucket.push(item);
247
+ else localeBuckets.set(key, [item]);
248
+ }
249
+ const bylinesByItem = /* @__PURE__ */ new Map();
250
+ const itemsNeedingAuthorCheck = [];
251
+ for (const [locale, bucket] of localeBuckets) {
252
+ const localeOpt = locale ? { locale } : void 0;
253
+ const ids = bucket.map((i) => i.id);
254
+ const credits = await bylineRepo.getContentBylinesMany(collection, ids, localeOpt);
255
+ for (const [id, list] of credits) bylinesByItem.set(id, list);
256
+ for (const item of bucket) {
257
+ if (credits.has(item.id) && credits.get(item.id).length > 0) continue;
258
+ if (item.authorId) itemsNeedingAuthorCheck.push(item);
259
+ }
260
+ }
261
+ const fallbackByItem = /* @__PURE__ */ new Map();
262
+ if (itemsNeedingAuthorCheck.length > 0) {
263
+ const authorBuckets = /* @__PURE__ */ new Map();
264
+ for (const item of itemsNeedingAuthorCheck) {
265
+ if (item.primaryBylineId) continue;
266
+ const key = item.locale ?? null;
267
+ const bucket = authorBuckets.get(key);
268
+ if (bucket) bucket.push(item);
269
+ else authorBuckets.set(key, [item]);
270
+ }
271
+ for (const [locale, bucket] of authorBuckets) {
272
+ const localeOpt = locale ? { locale } : void 0;
273
+ const authorIds = bucket.map((i) => i.authorId).filter((id) => id !== null);
274
+ const uniqueAuthorIds = [...new Set(authorIds)];
275
+ if (uniqueAuthorIds.length === 0) continue;
276
+ const authorMap = await bylineRepo.findByUserIds(uniqueAuthorIds, localeOpt);
277
+ for (const item of bucket) {
278
+ if (!item.authorId) continue;
279
+ const f = authorMap.get(item.authorId);
280
+ if (f) fallbackByItem.set(item.id, f);
281
+ }
282
+ }
283
+ }
236
284
  for (const item of items) {
237
- const explicit = bylinesMap.get(item.id);
285
+ const explicit = bylinesByItem.get(item.id);
238
286
  if (explicit && explicit.length > 0) {
239
287
  item.bylines = explicit.map((c) => ({
240
288
  ...c,
@@ -243,19 +291,16 @@ async function hydrateBylinesMany(db, collection, items) {
243
291
  item.byline = explicit[0]?.byline ?? null;
244
292
  continue;
245
293
  }
246
- if (item.primaryBylineId) item.primaryBylineId = null;
247
- if (item.authorId) {
248
- const fallback = authorBylineMap.get(item.authorId);
249
- if (fallback) {
250
- item.bylines = [{
251
- byline: fallback,
252
- sortOrder: 0,
253
- roleLabel: null,
254
- source: "inferred"
255
- }];
256
- item.byline = fallback;
257
- continue;
258
- }
294
+ const fallback = fallbackByItem.get(item.id);
295
+ if (fallback) {
296
+ item.bylines = [{
297
+ byline: fallback,
298
+ sortOrder: 0,
299
+ roleLabel: null,
300
+ source: "inferred"
301
+ }];
302
+ item.byline = fallback;
303
+ continue;
259
304
  }
260
305
  item.bylines = [];
261
306
  item.byline = null;
@@ -426,10 +471,11 @@ async function handleContentCreate(db, collection, body) {
426
471
  const item = await withTransaction(db, async (trx) => {
427
472
  const repo = new ContentRepository(trx);
428
473
  const bylineRepo = new BylineRepository(trx);
474
+ const effectiveLocale = body.locale ?? getI18nConfig()?.defaultLocale;
429
475
  let slug = body.slug;
430
476
  if (!slug) {
431
477
  const slugSource = getSlugSource(body.data);
432
- if (slugSource) slug = await repo.generateUniqueSlug(collection, slugSource, body.locale);
478
+ if (slugSource) slug = await repo.generateUniqueSlug(collection, slugSource, effectiveLocale);
433
479
  }
434
480
  const created = await repo.create({
435
481
  type: collection,
@@ -437,20 +483,22 @@ async function handleContentCreate(db, collection, body) {
437
483
  data: body.data,
438
484
  status: body.status || "draft",
439
485
  authorId: body.authorId,
440
- locale: body.locale,
486
+ locale: effectiveLocale,
441
487
  translationOf: body.translationOf,
442
488
  createdAt: body.createdAt,
443
489
  publishedAt: body.publishedAt
444
490
  });
445
- if (body.bylines !== void 0) {
446
- await bylineRepo.setContentBylines(collection, created.id, body.bylines);
447
- created.primaryBylineId = body.bylines[0]?.bylineId ?? null;
448
- }
449
- await hydrateBylines(trx, collection, created);
491
+ if (body.bylines !== void 0) created.primaryBylineId = (await bylineRepo.setContentBylines(collection, created.id, body.bylines))[0]?.byline.translationGroup ?? null;
450
492
  if (body.translationOf) {
451
- const { TaxonomyRepository } = await import("./taxonomy-wPfusMK9.mjs").then((n) => n.n);
493
+ const { TaxonomyRepository } = await import("./taxonomy-zqGQUqgu.mjs").then((n) => n.n);
452
494
  await new TaxonomyRepository(trx).copyEntryTerms(collection, body.translationOf, created.id);
495
+ if (body.bylines === void 0) {
496
+ await bylineRepo.copyContentBylines(collection, body.translationOf, created.id);
497
+ const source = await repo.findById(collection, body.translationOf);
498
+ if (source) created.primaryBylineId = source.primaryBylineId;
499
+ }
453
500
  }
501
+ await hydrateBylines(trx, collection, created);
454
502
  if (body.seo && hasSeo) created.seo = await new SeoRepository(trx).upsert(collection, created.id, body.seo);
455
503
  else if (hasSeo) created.seo = { ...SEO_DEFAULTS };
456
504
  return created;
@@ -544,10 +592,7 @@ async function handleContentUpdate(db, collection, id, body) {
544
592
  authorId: body.authorId,
545
593
  publishedAt: body.publishedAt
546
594
  });
547
- if (body.bylines !== void 0) {
548
- await bylineRepo.setContentBylines(collection, resolvedId, body.bylines);
549
- updated.primaryBylineId = body.bylines[0]?.bylineId ?? null;
550
- }
595
+ if (body.bylines !== void 0) updated.primaryBylineId = (await bylineRepo.setContentBylines(collection, resolvedId, body.bylines))[0]?.byline.translationGroup ?? null;
551
596
  if (oldSlug && body.slug) {
552
597
  const collectionRow = await trx.selectFrom("_emdash_collections").select("url_pattern").where("slug", "=", collection).executeTakeFirst();
553
598
  await new RedirectRepository(trx).createAutoRedirect(collection, oldSlug, body.slug, resolvedId, collectionRow?.url_pattern ?? null);
@@ -2583,7 +2628,7 @@ async function handleMarketplaceInstall(db, storage, sandboxRunner, marketplaceU
2583
2628
  message: "Storage is required for marketplace plugin installation"
2584
2629
  }
2585
2630
  };
2586
- if (!sandboxRunner || !sandboxRunner.isAvailable()) return {
2631
+ if (!opts?.sandboxBypassed && (!sandboxRunner || !sandboxRunner.isAvailable())) return {
2587
2632
  success: false,
2588
2633
  error: {
2589
2634
  code: "SANDBOX_NOT_AVAILABLE",
@@ -2715,7 +2760,7 @@ async function handleMarketplaceUpdate(db, storage, sandboxRunner, marketplaceUr
2715
2760
  message: "Storage is required"
2716
2761
  }
2717
2762
  };
2718
- if (!sandboxRunner || !sandboxRunner.isAvailable()) return {
2763
+ if (!opts?.sandboxBypassed && (!sandboxRunner || !sandboxRunner.isAvailable())) return {
2719
2764
  success: false,
2720
2765
  error: {
2721
2766
  code: "SANDBOX_NOT_AVAILABLE",
@@ -3336,6 +3381,45 @@ async function makeRegistryPluginId(publisherDid, slug) {
3336
3381
 
3337
3382
  //#endregion
3338
3383
  //#region src/api/handlers/registry.ts
3384
+ /**
3385
+ * Registry plugin install handler.
3386
+ *
3387
+ * Installs a plugin published to the experimental decentralized plugin
3388
+ * registry described in RFC 0001. The install flow:
3389
+ *
3390
+ * 1. Resolve `(handle, slug)` to a publisher DID via the configured
3391
+ * aggregator's `resolvePackage` XRPC.
3392
+ * 2. Look up the requested release (or the policy-filtered latest one)
3393
+ * via `getLatestRelease` / `listReleases`.
3394
+ * 3. Reject the install if the aggregator surfaces a `security:yanked`
3395
+ * hard-enforcement label or the release is below the configured
3396
+ * minimum release age.
3397
+ * 4. Fetch the bundle artifact, walking aggregator mirrors first and
3398
+ * falling back to the publisher-declared URL.
3399
+ * 5. Verify the artifact's multibase checksum against the signed
3400
+ * release record's `artifacts.package.checksum`.
3401
+ * 6. Extract `manifest.json` + `backend.js` + optional `admin.js` from
3402
+ * the gzipped tar bundle.
3403
+ * 7. Store the extracted files in site-local R2 under the
3404
+ * `registry/<plugin-id>/<version>/` prefix.
3405
+ * 8. Write a `plugin_states` row with `source = "registry"` and the
3406
+ * `(publisher_did, slug)` pair so updates can be resolved later.
3407
+ * 9. Sync the runtime so the plugin becomes active immediately.
3408
+ *
3409
+ * Known gaps (tracked separately):
3410
+ *
3411
+ * - The aggregator-supplied records are not yet cryptographically
3412
+ * verified against the publisher's MST signature. The signed bytes
3413
+ * and CIDs are passed through verbatim per the lexicon, but full
3414
+ * PDS-direct verification with proof traversal is follow-up work.
3415
+ * The artifact checksum is verified end-to-end against the value
3416
+ * in the (aggregator-relayed) release record, which is the actual
3417
+ * trust boundary for the bytes that end up in the sandbox.
3418
+ * - `acceptLabelers` is forwarded as-is to the aggregator; this
3419
+ * handler does not independently re-fetch and verify labels from
3420
+ * each labeller's DID. Aggregator label envelope tampering is
3421
+ * mitigated by the artifact checksum but not detected.
3422
+ */
3339
3423
  /** Matches a bare 64-character lowercase/uppercase hex SHA-256 digest. */
3340
3424
  const SHA256_HEX_PATTERN = /^[a-f0-9]{64}$/i;
3341
3425
  /** Compute the SHA-256 of `bytes` as a lowercase hex string. */
@@ -3530,7 +3614,7 @@ async function assertSafeArtifactUrl(urlString) {
3530
3614
  try {
3531
3615
  return await resolveAndValidateExternalUrl(url.href);
3532
3616
  } catch (err) {
3533
- if (err instanceof SsrfError) throw new Error(`Artifact URL rejected: ${err.message}`);
3617
+ if (err instanceof SsrfError) throw new Error(`Artifact URL rejected: ${err.message}`, { cause: err });
3534
3618
  throw err;
3535
3619
  }
3536
3620
  }
@@ -3642,6 +3726,31 @@ async function fetchArtifact(mirrors, declaredUrl) {
3642
3726
  }
3643
3727
  throw new Error(`Failed to download artifact from any source. Tried:\n ${clientErrors.join("\n ")}`);
3644
3728
  }
3729
+ /**
3730
+ * Gate a release's `requires` constraints against the running host
3731
+ * environment. `requires` is the lexicon-`unknown` value off the signed
3732
+ * release record — never trust its shape; `checkEnvCompatibility` guards it.
3733
+ *
3734
+ * Returns `null` when every advertised constraint is satisfied (or there are
3735
+ * none), or a structured `ENV_INCOMPATIBLE` error naming the unsatisfied
3736
+ * constraints and the host versions. The error carries the guarded `requires`
3737
+ * and `host` maps so the admin can render the same mismatch the UI gate shows.
3738
+ */
3739
+ function assertEnvCompatible(requires, hostEnv) {
3740
+ for (const skipped of findSkippedEnvConstraints(requires, hostEnv)) console.warn(`[registry] env compatibility constraint skipped: ${skipped.key} requires ${skipped.required} but host version is ${skipped.reason}`);
3741
+ const mismatches = checkEnvCompatibility(requires, hostEnv);
3742
+ if (mismatches.length === 0) return null;
3743
+ const guarded = {};
3744
+ for (const m of mismatches) guarded[m.key] = m.required;
3745
+ return {
3746
+ code: "ENV_INCOMPATIBLE",
3747
+ message: `This release is not compatible with the current environment: ${mismatches.map((m) => `${m.key} requires ${m.required} but host is ${m.host}`).join("; ")}.`,
3748
+ details: {
3749
+ requires: guarded,
3750
+ host: hostEnv
3751
+ }
3752
+ };
3753
+ }
3645
3754
  async function handleRegistryInstall(db, storage, sandboxRunner, registryConfigInput, input, opts) {
3646
3755
  const registryConfig = coerceRegistryConfig(registryConfigInput);
3647
3756
  if (!registryConfig) return {
@@ -3753,6 +3862,13 @@ async function handleRegistryInstall(db, storage, sandboxRunner, registryConfigI
3753
3862
  message: "This release has been withdrawn (security:yanked label)."
3754
3863
  }
3755
3864
  };
3865
+ if (opts?.hostEnv) {
3866
+ const envError = assertEnvCompatible(releaseView.release?.requires, opts.hostEnv);
3867
+ if (envError) return {
3868
+ success: false,
3869
+ error: envError
3870
+ };
3871
+ }
3756
3872
  const minimumReleaseAge = registryConfig.policy?.minimumReleaseAge;
3757
3873
  let minimumReleaseAgeSeconds = 0;
3758
3874
  if (minimumReleaseAge !== void 0) try {
@@ -3918,6 +4034,20 @@ async function handleRegistryInstall(db, storage, sandboxRunner, registryConfigI
3918
4034
  }
3919
4035
  };
3920
4036
  } catch (err) {
4037
+ if (err instanceof ClientValidationError) return {
4038
+ success: false,
4039
+ error: {
4040
+ code: "AGGREGATOR_RESPONSE_INVALID",
4041
+ message: `Aggregator returned a response that does not conform to its lexicon (${err.target})`
4042
+ }
4043
+ };
4044
+ if (err instanceof ClientResponseError) return {
4045
+ success: false,
4046
+ error: {
4047
+ code: err.status === 404 ? "AGGREGATOR_NOT_FOUND" : "AGGREGATOR_HTTP_ERROR",
4048
+ message: `Aggregator returned ${err.status}: ${err.error}`
4049
+ }
4050
+ };
3921
4051
  if (err instanceof EmDashStorageError) return {
3922
4052
  success: false,
3923
4053
  error: {
@@ -3935,7 +4065,381 @@ async function handleRegistryInstall(db, storage, sandboxRunner, registryConfigI
3935
4065
  };
3936
4066
  }
3937
4067
  }
4068
+ /**
4069
+ * Uninstall a registry-source plugin. Deletes the R2 bundle under
4070
+ * `registry/<pluginId>/<version>/`, optionally drops the plugin's
4071
+ * `_plugin_storage` rows, and removes the `_plugin_state` row. The
4072
+ * sandbox runtime is reconciled by the route's `syncRegistryPlugins`
4073
+ * call after this returns.
4074
+ *
4075
+ * Refuses to uninstall plugins whose `source` is not `"registry"` to
4076
+ * avoid trashing a marketplace/config plugin that happens to share the
4077
+ * pluginId namespace.
4078
+ */
4079
+ async function handleRegistryUninstall(db, storage, pluginId, opts) {
4080
+ try {
4081
+ const stateRepo = new PluginStateRepository(db);
4082
+ const existing = await stateRepo.get(pluginId);
4083
+ if (!existing || existing.source !== "registry") return {
4084
+ success: false,
4085
+ error: {
4086
+ code: "NOT_FOUND",
4087
+ message: `No registry plugin found: ${pluginId}`
4088
+ }
4089
+ };
4090
+ const version = existing.version;
4091
+ let dataDeleted = false;
4092
+ if (opts?.deleteData) {
4093
+ await db.deleteFrom("_plugin_storage").where("plugin_id", "=", pluginId).execute();
4094
+ dataDeleted = true;
4095
+ }
4096
+ if (storage) await deleteBundleFromR2(storage, pluginId, version, "registry");
4097
+ await stateRepo.delete(pluginId);
4098
+ return {
4099
+ success: true,
4100
+ data: {
4101
+ pluginId,
4102
+ dataDeleted
4103
+ }
4104
+ };
4105
+ } catch (err) {
4106
+ console.error("[registry-uninstall] Failed:", err);
4107
+ return {
4108
+ success: false,
4109
+ error: {
4110
+ code: "UNINSTALL_FAILED",
4111
+ message: "Failed to uninstall plugin"
4112
+ }
4113
+ };
4114
+ }
4115
+ }
4116
+ /**
4117
+ * Update a registry-source plugin to a newer release. Mirrors
4118
+ * `handleMarketplaceUpdate`: resolves the target version via the aggregator,
4119
+ * re-runs the artifact fetch / checksum / extract pipeline, diffs capabilities
4120
+ * and route visibility against the currently installed bundle, and gates
4121
+ * escalations behind `confirmCapabilityChanges` / `confirmRouteVisibilityChanges`
4122
+ * so the admin re-consents to widened permissions.
4123
+ *
4124
+ * Refuses non-registry sources. Refuses when the stored state row is missing
4125
+ * the `(publisherDid, slug)` it needs to resolve against the aggregator.
4126
+ */
4127
+ async function handleRegistryUpdate(db, storage, sandboxRunner, registryConfigInput, pluginId, opts) {
4128
+ const registryConfig = coerceRegistryConfig(registryConfigInput);
4129
+ if (!registryConfig) return {
4130
+ success: false,
4131
+ error: {
4132
+ code: "REGISTRY_NOT_CONFIGURED",
4133
+ message: "Registry is not configured"
4134
+ }
4135
+ };
4136
+ if (!storage) return {
4137
+ success: false,
4138
+ error: {
4139
+ code: "STORAGE_NOT_CONFIGURED",
4140
+ message: "Storage is required for registry plugin updates"
4141
+ }
4142
+ };
4143
+ if (!sandboxRunner || !sandboxRunner.isAvailable()) return {
4144
+ success: false,
4145
+ error: {
4146
+ code: "SANDBOX_NOT_AVAILABLE",
4147
+ message: "Sandbox runner is required"
4148
+ }
4149
+ };
4150
+ try {
4151
+ validateAggregatorUrl(registryConfig.aggregatorUrl);
4152
+ } catch (err) {
4153
+ return {
4154
+ success: false,
4155
+ error: {
4156
+ code: "REGISTRY_NOT_CONFIGURED",
4157
+ message: err instanceof Error ? err.message : "Invalid aggregator URL"
4158
+ }
4159
+ };
4160
+ }
4161
+ try {
4162
+ const stateRepo = new PluginStateRepository(db);
4163
+ const existing = await stateRepo.get(pluginId);
4164
+ if (!existing || existing.source !== "registry") return {
4165
+ success: false,
4166
+ error: {
4167
+ code: "NOT_FOUND",
4168
+ message: `No registry plugin found: ${pluginId}`
4169
+ }
4170
+ };
4171
+ if (!existing.registryPublisherDid || !existing.registrySlug) return {
4172
+ success: false,
4173
+ error: {
4174
+ code: "INVALID_STATE",
4175
+ message: `Registry plugin ${pluginId} is missing publisher DID or slug in state`
4176
+ }
4177
+ };
4178
+ const oldVersion = existing.version;
4179
+ const publisherDid = existing.registryPublisherDid;
4180
+ const slug = existing.registrySlug;
4181
+ const { DiscoveryClient } = await import("@emdash-cms/registry-client/discovery");
4182
+ const aggregatorDeadline = Date.now() + AGGREGATOR_TOTAL_BUDGET_MS;
4183
+ const discovery = new DiscoveryClient({
4184
+ aggregatorUrl: registryConfig.aggregatorUrl,
4185
+ acceptLabelers: registryConfig.acceptLabelers,
4186
+ fetch: timedFetch(aggregatorDeadline)
4187
+ });
4188
+ const MAX_LIST_PAGES = 20;
4189
+ const releaseView = await (async () => {
4190
+ if (!opts?.version) return discovery.getLatestRelease({
4191
+ did: publisherDid,
4192
+ package: slug
4193
+ });
4194
+ let cursor;
4195
+ const seenCursors = /* @__PURE__ */ new Set();
4196
+ for (let page = 0; page < MAX_LIST_PAGES; page++) {
4197
+ if (cursor !== void 0) {
4198
+ if (seenCursors.has(cursor)) break;
4199
+ seenCursors.add(cursor);
4200
+ }
4201
+ const result = await discovery.listReleases({
4202
+ did: publisherDid,
4203
+ package: slug,
4204
+ cursor,
4205
+ limit: 50
4206
+ });
4207
+ for (const r of result.releases) if (r.version === opts.version) return r;
4208
+ if (!result.cursor) break;
4209
+ cursor = result.cursor;
4210
+ }
4211
+ })();
4212
+ if (!releaseView) return {
4213
+ success: false,
4214
+ error: {
4215
+ code: "NO_VERSION",
4216
+ message: opts?.version ? `Version ${opts.version} not found for ${publisherDid}/${slug}` : `No installable release found for ${publisherDid}/${slug}`
4217
+ }
4218
+ };
4219
+ const signedRelease = releaseView.release;
4220
+ if (releaseView.did !== publisherDid || releaseView.package !== slug || signedRelease?.package !== slug || opts?.version !== void 0 && releaseView.version !== opts.version || signedRelease?.version !== releaseView.version) return {
4221
+ success: false,
4222
+ error: {
4223
+ code: "AGGREGATOR_IDENTITY_MISMATCH",
4224
+ message: "Aggregator returned a release view that does not match the requested package or version."
4225
+ }
4226
+ };
4227
+ const newVersion = releaseView.version;
4228
+ if (newVersion === oldVersion) return {
4229
+ success: false,
4230
+ error: {
4231
+ code: "ALREADY_UP_TO_DATE",
4232
+ message: "Plugin is already at the requested version"
4233
+ }
4234
+ };
4235
+ if ((releaseView.labels ?? []).some((l) => l.val === "security:yanked")) return {
4236
+ success: false,
4237
+ error: {
4238
+ code: "YANKED",
4239
+ message: "Release has been yanked by a trusted labeller"
4240
+ }
4241
+ };
4242
+ if (opts?.hostEnv) {
4243
+ const envError = assertEnvCompatible(signedRelease.requires, opts.hostEnv);
4244
+ if (envError) return {
4245
+ success: false,
4246
+ error: envError
4247
+ };
4248
+ }
4249
+ const declaredUrl = signedRelease.artifacts?.package?.url;
4250
+ const declaredChecksum = signedRelease.artifacts?.package?.checksum;
4251
+ if (!declaredUrl || !declaredChecksum) return {
4252
+ success: false,
4253
+ error: {
4254
+ code: "INVALID_RELEASE",
4255
+ message: "Release record is missing artifact url or checksum"
4256
+ }
4257
+ };
4258
+ await assertSafeArtifactUrl(declaredUrl);
4259
+ const mirrors = (releaseView.mirrors ?? []).slice(0, MAX_MIRRORS);
4260
+ for (const mirror of mirrors) await assertSafeArtifactUrl(mirror);
4261
+ const artifactBytes = await fetchArtifact(mirrors, declaredUrl);
4262
+ if (!await verifyChecksum(artifactBytes, declaredChecksum)) return {
4263
+ success: false,
4264
+ error: {
4265
+ code: "CHECKSUM_MISMATCH",
4266
+ message: "Artifact bytes do not match the release's published checksum"
4267
+ }
4268
+ };
4269
+ const bundle = await extractBundle(artifactBytes);
4270
+ if (bundle.manifest.version !== newVersion) return {
4271
+ success: false,
4272
+ error: {
4273
+ code: "BUNDLE_VERSION_MISMATCH",
4274
+ message: `Bundle manifest version (${bundle.manifest.version}) does not match release version (${newVersion})`
4275
+ }
4276
+ };
4277
+ if (bundle.manifest.id !== slug) return {
4278
+ success: false,
4279
+ error: {
4280
+ code: "BUNDLE_IDENTITY_MISMATCH",
4281
+ message: `Bundle manifest id (${bundle.manifest.id}) does not match registry slug (${slug})`
4282
+ }
4283
+ };
4284
+ bundle.manifest = {
4285
+ ...bundle.manifest,
4286
+ id: pluginId
4287
+ };
4288
+ const oldBundle = await loadBundleFromR2(storage, pluginId, oldVersion, "registry");
4289
+ const capabilityChanges = diffCapabilities(oldBundle?.manifest.capabilities ?? [], bundle.manifest.capabilities);
4290
+ if (capabilityChanges.added.length > 0 && !opts?.confirmCapabilityChanges) return {
4291
+ success: false,
4292
+ error: {
4293
+ code: "CAPABILITY_ESCALATION",
4294
+ message: "Plugin update requires new capabilities",
4295
+ details: { capabilityChanges }
4296
+ }
4297
+ };
4298
+ const routeVisibilityChanges = diffRouteVisibility(oldBundle?.manifest, bundle.manifest);
4299
+ const hasNewPublicRoutes = routeVisibilityChanges.newlyPublic.length > 0;
4300
+ if (hasNewPublicRoutes && !opts?.confirmRouteVisibilityChanges) return {
4301
+ success: false,
4302
+ error: {
4303
+ code: "ROUTE_VISIBILITY_ESCALATION",
4304
+ message: "Plugin update exposes new public (unauthenticated) routes",
4305
+ details: {
4306
+ routeVisibilityChanges,
4307
+ capabilityChanges
4308
+ }
4309
+ }
4310
+ };
4311
+ await storeBundleInR2(storage, pluginId, newVersion, bundle, "registry");
4312
+ await stateRepo.upsert(pluginId, newVersion, "active", {
4313
+ source: "registry",
4314
+ registryPublisherDid: publisherDid,
4315
+ registrySlug: slug,
4316
+ displayName: existing.displayName ?? slug,
4317
+ description: existing.description ?? void 0
4318
+ });
4319
+ deleteBundleFromR2(storage, pluginId, oldVersion, "registry").catch(() => {});
4320
+ return {
4321
+ success: true,
4322
+ data: {
4323
+ pluginId,
4324
+ oldVersion,
4325
+ newVersion,
4326
+ capabilityChanges,
4327
+ routeVisibilityChanges: hasNewPublicRoutes ? routeVisibilityChanges : void 0
4328
+ }
4329
+ };
4330
+ } catch (err) {
4331
+ if (err instanceof ClientValidationError) return {
4332
+ success: false,
4333
+ error: {
4334
+ code: "AGGREGATOR_RESPONSE_INVALID",
4335
+ message: `Aggregator returned a response that does not conform to its lexicon (${err.target})`
4336
+ }
4337
+ };
4338
+ if (err instanceof ClientResponseError) return {
4339
+ success: false,
4340
+ error: {
4341
+ code: err.status === 404 ? "AGGREGATOR_NOT_FOUND" : "AGGREGATOR_HTTP_ERROR",
4342
+ message: `Aggregator returned ${err.status}: ${err.error}`
4343
+ }
4344
+ };
4345
+ if (err instanceof EmDashStorageError) return {
4346
+ success: false,
4347
+ error: {
4348
+ code: err.code ?? "STORAGE_ERROR",
4349
+ message: "Storage error while updating plugin"
4350
+ }
4351
+ };
4352
+ console.error("[registry-update] Failed:", err);
4353
+ return {
4354
+ success: false,
4355
+ error: {
4356
+ code: "UPDATE_FAILED",
4357
+ message: err instanceof Error ? err.message : "Failed to update plugin"
4358
+ }
4359
+ };
4360
+ }
4361
+ }
4362
+ /**
4363
+ * Bulk update check across every installed registry plugin. Queries the
4364
+ * aggregator for each plugin's latest release and reports `hasUpdate`
4365
+ * based on the version comparison. Plugins whose aggregator lookup fails
4366
+ * (unreachable, delisted, malformed) are skipped silently — one bad
4367
+ * publisher must not blank the whole admin Updates list.
4368
+ */
4369
+ async function handleRegistryUpdateCheck(db, registryConfigInput) {
4370
+ const registryConfig = coerceRegistryConfig(registryConfigInput);
4371
+ if (!registryConfig) return {
4372
+ success: false,
4373
+ error: {
4374
+ code: "REGISTRY_NOT_CONFIGURED",
4375
+ message: "Registry is not configured"
4376
+ }
4377
+ };
4378
+ try {
4379
+ const registryPlugins = await new PluginStateRepository(db).getRegistryPlugins();
4380
+ if (registryPlugins.length === 0) return {
4381
+ success: true,
4382
+ data: { items: [] }
4383
+ };
4384
+ const { DiscoveryClient } = await import("@emdash-cms/registry-client/discovery");
4385
+ const aggregatorDeadline = Date.now() + AGGREGATOR_TOTAL_BUDGET_MS;
4386
+ const discovery = new DiscoveryClient({
4387
+ aggregatorUrl: registryConfig.aggregatorUrl,
4388
+ acceptLabelers: registryConfig.acceptLabelers,
4389
+ fetch: timedFetch(aggregatorDeadline)
4390
+ });
4391
+ const items = [];
4392
+ for (const plugin of registryPlugins) {
4393
+ if (!plugin.registryPublisherDid || !plugin.registrySlug) continue;
4394
+ try {
4395
+ const latest = (await discovery.getLatestRelease({
4396
+ did: plugin.registryPublisherDid,
4397
+ package: plugin.registrySlug
4398
+ })).version;
4399
+ if (!latest) continue;
4400
+ const installed = plugin.version;
4401
+ items.push({
4402
+ pluginId: plugin.pluginId,
4403
+ installed,
4404
+ latest,
4405
+ hasUpdate: latest !== installed,
4406
+ hasCapabilityChanges: false,
4407
+ hasRouteVisibilityChanges: false
4408
+ });
4409
+ } catch (err) {
4410
+ console.warn(`[registry-update-check] Skipped ${plugin.pluginId}:`, err);
4411
+ }
4412
+ }
4413
+ return {
4414
+ success: true,
4415
+ data: { items }
4416
+ };
4417
+ } catch (err) {
4418
+ if (err instanceof ClientValidationError) return {
4419
+ success: false,
4420
+ error: {
4421
+ code: "AGGREGATOR_RESPONSE_INVALID",
4422
+ message: `Aggregator returned a response that does not conform to its lexicon (${err.target})`
4423
+ }
4424
+ };
4425
+ if (err instanceof ClientResponseError) return {
4426
+ success: false,
4427
+ error: {
4428
+ code: err.status === 404 ? "AGGREGATOR_NOT_FOUND" : "AGGREGATOR_HTTP_ERROR",
4429
+ message: `Aggregator returned ${err.status}: ${err.error}`
4430
+ }
4431
+ };
4432
+ console.error("[registry-update-check] Failed:", err);
4433
+ return {
4434
+ success: false,
4435
+ error: {
4436
+ code: "UPDATE_CHECK_FAILED",
4437
+ message: "Failed to check for registry updates"
4438
+ }
4439
+ };
4440
+ }
4441
+ }
3938
4442
 
3939
4443
  //#endregion
3940
- export { handleContentSchedule as $, handleMediaCreate as A, handleContentCountScheduled as B, handleSchemaCollectionUpdate as C, handleSchemaFieldList as D, handleSchemaFieldGet as E, handleRevisionGet as F, handleContentDuplicate as G, handleContentCreate as H, handleRevisionList as I, handleContentList as J, handleContentGet as K, handleRevisionRestore as L, handleMediaGet as M, handleMediaList as N, handleSchemaFieldReorder as O, handleMediaUpdate as P, handleContentRestore as Q, generateManifest as R, handleSchemaCollectionList as S, handleSchemaFieldDelete as T, handleContentDelete as U, handleContentCountTrashed as V, handleContentDiscardDraft as W, handleContentPermanentDelete as X, handleContentListTrashed as Y, handleContentPublish as Z, handleOrphanedTableList as _, handleMarketplaceSearch as a, handleSchemaCollectionDelete as b, handleMarketplaceUpdateCheck as c, loadBundleFromR2 as d, handleContentTranslations as et, handlePluginDisable as f, PluginStateRepository as g, handlePluginList as h, handleMarketplaceInstall as i, validateRev as it, handleMediaDelete as j, handleSchemaFieldUpdate as k, handleThemeGetDetail as l, handlePluginGet as m, normalizeRegistryConfig as n, handleContentUnschedule as nt, handleMarketplaceUninstall as o, handlePluginEnable as p, handleContentGetIncludingTrashed as q, handleMarketplaceGetPlugin as r, handleContentUpdate as rt, handleMarketplaceUpdate as s, handleRegistryInstall as t, handleContentUnpublish as tt, handleThemeSearch as u, handleOrphanedTableRegister as v, handleSchemaFieldCreate as w, handleSchemaCollectionGet as x, handleSchemaCollectionCreate as y, handleContentCompare as z };
3941
- //# sourceMappingURL=api-BMLZuwM4.mjs.map
4444
+ export { handleContentGetIncludingTrashed as $, handleSchemaFieldCreate as A, handleMediaUpdate as B, handleOrphanedTableList as C, handleSchemaCollectionGet as D, handleSchemaCollectionDelete as E, handleSchemaFieldUpdate as F, handleContentCompare as G, handleRevisionList as H, handleMediaCreate as I, handleContentCreate as J, handleContentCountScheduled as K, handleMediaDelete as L, handleSchemaFieldGet as M, handleSchemaFieldList as N, handleSchemaCollectionList as O, handleSchemaFieldReorder as P, handleContentGet as Q, handleMediaGet as R, PluginStateRepository as S, handleSchemaCollectionCreate as T, handleRevisionRestore as U, handleRevisionGet as V, generateManifest as W, handleContentDiscardDraft as X, handleContentDelete as Y, handleContentDuplicate as Z, loadBundleFromR2 as _, handleRegistryUpdateCheck as a, handleContentSchedule as at, handlePluginGet as b, validateAggregatorUrl as c, handleContentUnschedule as ct, handleMarketplaceSearch as d, handleContentList as et, handleMarketplaceUninstall as f, handleThemeSearch as g, handleThemeGetDetail as h, handleRegistryUpdate as i, handleContentRestore as it, handleSchemaFieldDelete as j, handleSchemaCollectionUpdate as k, handleMarketplaceGetPlugin as l, handleContentUpdate as lt, handleMarketplaceUpdateCheck as m, handleRegistryInstall as n, handleContentPermanentDelete as nt, coerceRegistryConfig as o, handleContentTranslations as ot, handleMarketplaceUpdate as p, handleContentCountTrashed as q, handleRegistryUninstall as r, handleContentPublish as rt, normalizeRegistryConfig as s, handleContentUnpublish as st, assertSafeArtifactUrl as t, handleContentListTrashed as tt, handleMarketplaceInstall as u, validateRev as ut, handlePluginDisable as v, handleOrphanedTableRegister as w, handlePluginList as x, handlePluginEnable as y, handleMediaList as z };
4445
+ //# sourceMappingURL=api-BNKqxyFX.mjs.map