emdash 0.26.0 → 0.28.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 (564) hide show
  1. package/dist/{adapters-DAAjOID4.d.mts → adapters-hUy8vOB-.d.mts} +1 -1
  2. package/dist/{adapters-DAAjOID4.d.mts.map → adapters-hUy8vOB-.d.mts.map} +1 -1
  3. package/dist/{allowed-origins-D5FxMUo8.mjs → allowed-origins-CRsJ6BPM.mjs} +2 -2
  4. package/dist/{allowed-origins-D5FxMUo8.mjs.map → allowed-origins-CRsJ6BPM.mjs.map} +1 -1
  5. package/dist/api/route-utils.d.mts +3 -3
  6. package/dist/api/route-utils.mjs +17 -16
  7. package/dist/api/route-utils.mjs.map +1 -1
  8. package/dist/api/schemas/index.d.mts +1 -1
  9. package/dist/api/schemas/index.mjs +3 -3
  10. package/dist/{api-BMfveMoB.mjs → api-BFURZn1i.mjs} +104 -38
  11. package/dist/api-BFURZn1i.mjs.map +1 -0
  12. package/dist/{api-tokens-D6ppjIVi.mjs → api-tokens-DvqeZmVq.mjs} +2 -2
  13. package/dist/{api-tokens-D6ppjIVi.mjs.map → api-tokens-DvqeZmVq.mjs.map} +1 -1
  14. package/dist/{apply--IVNSdXn.mjs → apply-Bu-8nYHL.mjs} +113 -76
  15. package/dist/apply-Bu-8nYHL.mjs.map +1 -0
  16. package/dist/astro/index.d.mts +12 -11
  17. package/dist/astro/index.d.mts.map +1 -1
  18. package/dist/astro/index.mjs +13 -5
  19. package/dist/astro/index.mjs.map +1 -1
  20. package/dist/astro/middleware/auth.d.mts +10 -9
  21. package/dist/astro/middleware/auth.d.mts.map +1 -1
  22. package/dist/astro/middleware/auth.mjs +52 -12
  23. package/dist/astro/middleware/auth.mjs.map +1 -1
  24. package/dist/astro/middleware/redirect.mjs +5 -5
  25. package/dist/astro/middleware/request-context.mjs +2 -2
  26. package/dist/astro/middleware/setup.mjs +1 -1
  27. package/dist/astro/middleware.d.mts +2 -9
  28. package/dist/astro/middleware.d.mts.map +1 -1
  29. package/dist/astro/middleware.mjs +125 -71
  30. package/dist/astro/middleware.mjs.map +1 -1
  31. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
  32. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
  33. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  34. package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
  35. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  36. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +8 -8
  37. package/dist/astro/routes/api/admin/byline-fields/index.mjs +8 -8
  38. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +8 -8
  39. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +14 -14
  40. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +14 -14
  41. package/dist/astro/routes/api/admin/bylines/index.mjs +14 -14
  42. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +12 -12
  43. package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
  44. package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
  45. package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
  46. package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
  47. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
  48. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  49. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  50. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  51. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +38 -37
  52. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +38 -37
  54. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +37 -36
  56. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +36 -35
  58. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +36 -35
  60. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/plugins/index.mjs +37 -36
  62. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +36 -35
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +36 -35
  67. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +36 -35
  69. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +36 -35
  71. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +37 -36
  73. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +36 -35
  75. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +37 -36
  77. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/plugins/updates.mjs +36 -35
  79. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +36 -35
  81. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
  83. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +36 -35
  84. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
  86. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  87. package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
  88. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  89. package/dist/astro/routes/api/admin/users/index.mjs +6 -6
  90. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  91. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  92. package/dist/astro/routes/api/auth/invite/complete.mjs +10 -10
  93. package/dist/astro/routes/api/auth/invite/index.mjs +7 -7
  94. package/dist/astro/routes/api/auth/invite/register-options.mjs +9 -9
  95. package/dist/astro/routes/api/auth/logout.mjs +3 -3
  96. package/dist/astro/routes/api/auth/magic-link/send.mjs +9 -9
  97. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  98. package/dist/astro/routes/api/auth/me.mjs +7 -7
  99. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  100. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  101. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  102. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
  103. package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
  104. package/dist/astro/routes/api/auth/passkey/options.mjs +11 -11
  105. package/dist/astro/routes/api/auth/passkey/register/options.mjs +9 -9
  106. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +10 -10
  107. package/dist/astro/routes/api/auth/passkey/verify.mjs +10 -10
  108. package/dist/astro/routes/api/auth/signup/complete.mjs +10 -10
  109. package/dist/astro/routes/api/auth/signup/request.mjs +9 -9
  110. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  111. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
  112. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +12 -12
  113. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
  114. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
  115. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
  116. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
  117. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +10 -10
  118. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +7 -7
  119. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
  120. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
  121. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +7 -7
  122. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
  123. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
  124. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
  125. package/dist/astro/routes/api/content/_collection_/_id_.mjs +7 -7
  126. package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
  127. package/dist/astro/routes/api/content/_collection_/index.mjs +7 -7
  128. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
  129. package/dist/astro/routes/api/dashboard.mjs +8 -8
  130. package/dist/astro/routes/api/dev/emails.mjs +3 -3
  131. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  132. package/dist/astro/routes/api/import/probe.mjs +19 -11
  133. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  134. package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
  135. package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -40
  136. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  137. package/dist/astro/routes/api/import/wordpress/execute.mjs +12 -407
  138. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  139. package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -9
  140. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  141. package/dist/astro/routes/api/import/wordpress/media.mjs +9 -9
  142. package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
  143. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +19 -1
  144. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  145. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +97 -79
  146. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  147. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  148. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +19 -11
  149. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  150. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +40 -2
  151. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  152. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +519 -39
  153. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  154. package/dist/astro/routes/api/manifest.d.mts.map +1 -1
  155. package/dist/astro/routes/api/manifest.mjs +14 -5
  156. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  157. package/dist/astro/routes/api/mcp.mjs +39 -39
  158. package/dist/astro/routes/api/media/_id_/confirm.mjs +7 -7
  159. package/dist/astro/routes/api/media/_id_.mjs +7 -7
  160. package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
  161. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
  162. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
  163. package/dist/astro/routes/api/media/providers/index.mjs +3 -3
  164. package/dist/astro/routes/api/media/upload-url.mjs +8 -8
  165. package/dist/astro/routes/api/media.mjs +9 -9
  166. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +9 -9
  167. package/dist/astro/routes/api/menus/_name_/items.mjs +9 -9
  168. package/dist/astro/routes/api/menus/_name_/reorder.mjs +9 -9
  169. package/dist/astro/routes/api/menus/_name_/translations.mjs +9 -9
  170. package/dist/astro/routes/api/menus/_name_.mjs +9 -9
  171. package/dist/astro/routes/api/menus/index.mjs +9 -9
  172. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  173. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  174. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  175. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  176. package/dist/astro/routes/api/oauth/register.mjs +3 -3
  177. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  178. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  179. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  180. package/dist/astro/routes/api/openapi.json.mjs +4 -4
  181. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
  182. package/dist/astro/routes/api/redirects/404s/index.mjs +9 -9
  183. package/dist/astro/routes/api/redirects/404s/summary.mjs +9 -9
  184. package/dist/astro/routes/api/redirects/_id_.mjs +10 -10
  185. package/dist/astro/routes/api/redirects/index.mjs +10 -10
  186. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
  187. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
  188. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +36 -35
  189. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  190. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +36 -35
  191. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  192. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +36 -35
  193. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  194. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +36 -35
  195. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  196. package/dist/astro/routes/api/schema/collections/index.mjs +36 -35
  197. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  198. package/dist/astro/routes/api/schema/index.mjs +7 -6
  199. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  200. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +36 -35
  201. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  202. package/dist/astro/routes/api/schema/orphans/index.mjs +36 -35
  203. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  204. package/dist/astro/routes/api/search/enable.mjs +10 -10
  205. package/dist/astro/routes/api/search/index.mjs +9 -9
  206. package/dist/astro/routes/api/search/rebuild.mjs +10 -10
  207. package/dist/astro/routes/api/search/stats.mjs +6 -6
  208. package/dist/astro/routes/api/search/suggest.mjs +9 -9
  209. package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
  210. package/dist/astro/routes/api/sections/index.mjs +9 -9
  211. package/dist/astro/routes/api/settings/email.mjs +4 -4
  212. package/dist/astro/routes/api/settings.mjs +12 -12
  213. package/dist/astro/routes/api/setup/admin-verify.mjs +11 -11
  214. package/dist/astro/routes/api/setup/admin.mjs +10 -10
  215. package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
  216. package/dist/astro/routes/api/setup/dev-bypass.mjs +28 -25
  217. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  218. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  219. package/dist/astro/routes/api/setup/index.mjs +26 -25
  220. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  221. package/dist/astro/routes/api/setup/status.mjs +4 -4
  222. package/dist/astro/routes/api/snapshot.mjs +6 -6
  223. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +13 -13
  224. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +13 -13
  225. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +13 -13
  226. package/dist/astro/routes/api/taxonomies/index.mjs +13 -13
  227. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  228. package/dist/astro/routes/api/typegen.mjs +5 -5
  229. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  230. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  231. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  232. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +7 -7
  233. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +9 -9
  234. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +9 -9
  235. package/dist/astro/routes/api/widget-areas/_name_.mjs +5 -5
  236. package/dist/astro/routes/api/widget-areas/index.mjs +9 -9
  237. package/dist/astro/routes/api/widget-components.mjs +3 -3
  238. package/dist/astro/routes/robots.txt.mjs +6 -6
  239. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  240. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  241. package/dist/astro/types.d.mts +14 -12
  242. package/dist/astro/types.d.mts.map +1 -1
  243. package/dist/auth/providers/github.d.mts +1 -1
  244. package/dist/auth/providers/google.d.mts +1 -1
  245. package/dist/{authorize-BZnOGJFo.mjs → authorize-Dz88F_Fw.mjs} +2 -2
  246. package/dist/{authorize-BZnOGJFo.mjs.map → authorize-Dz88F_Fw.mjs.map} +1 -1
  247. package/dist/{byline-LL8lyqdb.mjs → byline-Bm8ZgUP9.mjs} +6 -6
  248. package/dist/{byline-LL8lyqdb.mjs.map → byline-Bm8ZgUP9.mjs.map} +1 -1
  249. package/dist/{byline-fields-eyJMblSr.mjs → byline-fields-2Lp5Hbgf.mjs} +18 -3
  250. package/dist/byline-fields-2Lp5Hbgf.mjs.map +1 -0
  251. package/dist/{byline-fields-DaMKzkhO.mjs → byline-fields-CIx_GuN4.mjs} +1 -1
  252. package/dist/{byline-fields-DaMKzkhO.mjs.map → byline-fields-CIx_GuN4.mjs.map} +1 -1
  253. package/dist/{byline-fields-KD3JFRuH.d.mts → byline-fields-Cgrt9-aL.d.mts} +18 -3
  254. package/dist/{byline-fields-KD3JFRuH.d.mts.map → byline-fields-Cgrt9-aL.d.mts.map} +1 -1
  255. package/dist/{bylines-BmJ7Vg7J.mjs → bylines-6tm9mgQb.mjs} +4 -4
  256. package/dist/{bylines-BmJ7Vg7J.mjs.map → bylines-6tm9mgQb.mjs.map} +1 -1
  257. package/dist/{bylines-DE47vP8d.mjs → bylines-Woq87129.mjs} +6 -6
  258. package/dist/{bylines-DE47vP8d.mjs.map → bylines-Woq87129.mjs.map} +1 -1
  259. package/dist/{cache-D9jF5bYw.mjs → cache-CEBAZjir.mjs} +2 -2
  260. package/dist/{cache-D9jF5bYw.mjs.map → cache-CEBAZjir.mjs.map} +1 -1
  261. package/dist/{challenge-store-LhiqMccz.mjs → challenge-store-anhwVER0.mjs} +1 -1
  262. package/dist/{challenge-store-LhiqMccz.mjs.map → challenge-store-anhwVER0.mjs.map} +1 -1
  263. package/dist/{chunks-OCG163rN.mjs → chunks-B2isWQhr.mjs} +2 -2
  264. package/dist/{chunks-OCG163rN.mjs.map → chunks-B2isWQhr.mjs.map} +1 -1
  265. package/dist/cli/index.mjs +23 -22
  266. package/dist/cli/index.mjs.map +1 -1
  267. package/dist/client/cf-access.d.mts +1 -1
  268. package/dist/client/index.d.mts +1 -1
  269. package/dist/client/index.mjs +2 -2
  270. package/dist/{comment-D9BLDpZI.mjs → comment-CzeatwBV.mjs} +3 -3
  271. package/dist/{comment-D9BLDpZI.mjs.map → comment-CzeatwBV.mjs.map} +1 -1
  272. package/dist/{comment-reaction-Drl9SkNu.mjs → comment-reaction-Cj9QJY7I.mjs} +2 -2
  273. package/dist/{comment-reaction-Drl9SkNu.mjs.map → comment-reaction-Cj9QJY7I.mjs.map} +1 -1
  274. package/dist/{comments-BjJ9SKGU.mjs → comments-BLE-jv5k.mjs} +3 -3
  275. package/dist/{comments-BjJ9SKGU.mjs.map → comments-BLE-jv5k.mjs.map} +1 -1
  276. package/dist/{components-CYt4uVK9.mjs → components-B_sATNUc.mjs} +1 -1
  277. package/dist/{components-CYt4uVK9.mjs.map → components-B_sATNUc.mjs.map} +1 -1
  278. package/dist/{content-ncUWWjna.mjs → content-DhgEth4k.mjs} +4 -4
  279. package/dist/{content-ncUWWjna.mjs.map → content-DhgEth4k.mjs.map} +1 -1
  280. package/dist/content-refresh-CA4uKwzH.mjs +1531 -0
  281. package/dist/content-refresh-CA4uKwzH.mjs.map +1 -0
  282. package/dist/{context-C_g-iJVA.mjs → context-CUsR9dXL.mjs} +76 -54
  283. package/dist/context-CUsR9dXL.mjs.map +1 -0
  284. package/dist/{cron-C5LVoNmP.mjs → cron-v4FTEFR_.mjs} +1 -1
  285. package/dist/{cron-C5LVoNmP.mjs.map → cron-v4FTEFR_.mjs.map} +1 -1
  286. package/dist/{dashboard-CotyqQrW.mjs → dashboard-EvEKF5en.mjs} +4 -4
  287. package/dist/{dashboard-CotyqQrW.mjs.map → dashboard-EvEKF5en.mjs.map} +1 -1
  288. package/dist/db/index.d.mts +3 -3
  289. package/dist/db/index.mjs +1 -1
  290. package/dist/db/libsql.d.mts +1 -1
  291. package/dist/db/postgres.d.mts +1 -1
  292. package/dist/db/sqlite.d.mts +1 -1
  293. package/dist/{default-CeRG-Ot4.mjs → default-CM_D83Mg.mjs} +1 -1
  294. package/dist/{default-CeRG-Ot4.mjs.map → default-CM_D83Mg.mjs.map} +1 -1
  295. package/dist/{device-flow-DENDCQ9F.mjs → device-flow-CfGP18Uw.mjs} +4 -4
  296. package/dist/{device-flow-DENDCQ9F.mjs.map → device-flow-CfGP18Uw.mjs.map} +1 -1
  297. package/dist/{email-console-DJP32ucW.mjs → email-console-CIf4Lfvv.mjs} +1 -1
  298. package/dist/{email-console-DJP32ucW.mjs.map → email-console-CIf4Lfvv.mjs.map} +1 -1
  299. package/dist/{error-rVGiqWDt.mjs → error-CkAseSqZ.mjs} +2 -2
  300. package/dist/{error-rVGiqWDt.mjs.map → error-CkAseSqZ.mjs.map} +1 -1
  301. package/dist/{escape-Bjio4ZsM.mjs → escape-DqD0aCKu.mjs} +1 -1
  302. package/dist/{escape-Bjio4ZsM.mjs.map → escape-DqD0aCKu.mjs.map} +1 -1
  303. package/dist/{field-defs-cache-ljXzJCfc.mjs → field-defs-cache-WUI88LX5.mjs} +2 -2
  304. package/dist/{field-defs-cache-ljXzJCfc.mjs.map → field-defs-cache-WUI88LX5.mjs.map} +1 -1
  305. package/dist/{fts-manager-BbCCbEKA.mjs → fts-manager-BbFaF_V8.mjs} +2 -2
  306. package/dist/{fts-manager-BbCCbEKA.mjs.map → fts-manager-BbFaF_V8.mjs.map} +1 -1
  307. package/dist/{import-Bb1T9WJS.mjs → import-fYLf14Co.mjs} +514 -25
  308. package/dist/import-fYLf14Co.mjs.map +1 -0
  309. package/dist/{index-BRNabKrx.d.mts → index-B9sIxwe4.d.mts} +2420 -2379
  310. package/dist/index-B9sIxwe4.d.mts.map +1 -0
  311. package/dist/{index-Dt0OKJB4.d.mts → index-Bm-Gy8Mh.d.mts} +25 -4
  312. package/dist/index-Bm-Gy8Mh.d.mts.map +1 -0
  313. package/dist/index.d.mts +18 -17
  314. package/dist/index.mjs +54 -53
  315. package/dist/{load-DMjXghbZ.mjs → load-Djn3HWQS.mjs} +2 -2
  316. package/dist/{load-DMjXghbZ.mjs.map → load-Djn3HWQS.mjs.map} +1 -1
  317. package/dist/{loader-BA_zhkS_.mjs → loader-CB6YHeul.mjs} +6 -5
  318. package/dist/loader-CB6YHeul.mjs.map +1 -0
  319. package/dist/{manifest-schema-kPGX7VS-.mjs → manifest-schema-BHlgZM1W.mjs} +1 -1
  320. package/dist/{manifest-schema-kPGX7VS-.mjs.map → manifest-schema-BHlgZM1W.mjs.map} +1 -1
  321. package/dist/media/index.d.mts +1 -1
  322. package/dist/media/local-runtime.d.mts +12 -11
  323. package/dist/media/local-runtime.d.mts.map +1 -1
  324. package/dist/media/local-runtime.mjs +5 -5
  325. package/dist/{media-C5t_eCnk.mjs → media-BrXIaMFN.mjs} +2 -2
  326. package/dist/{media-C5t_eCnk.mjs.map → media-BrXIaMFN.mjs.map} +1 -1
  327. package/dist/{media-allowlist-Du8t1u6a.mjs → media-allowlist-CRHEeJ_i.mjs} +1 -1
  328. package/dist/{media-allowlist-Du8t1u6a.mjs.map → media-allowlist-CRHEeJ_i.mjs.map} +1 -1
  329. package/dist/{media-url-O4rm9-SQ.mjs → media-url-CKi5XSw4.mjs} +1 -1
  330. package/dist/{media-url-O4rm9-SQ.mjs.map → media-url-CKi5XSw4.mjs.map} +1 -1
  331. package/dist/{menus-CBb6UrMU.mjs → menus-Cfivc2Ad.mjs} +3 -3
  332. package/dist/{menus-CBb6UrMU.mjs.map → menus-Cfivc2Ad.mjs.map} +1 -1
  333. package/dist/{menus-CYH09a41.mjs → menus-CsZ2ZEK2.mjs} +16 -12
  334. package/dist/{menus-CYH09a41.mjs.map → menus-CsZ2ZEK2.mjs.map} +1 -1
  335. package/dist/{mode-BB0F8xTC.mjs → mode-BM9QgEmt.mjs} +1 -1
  336. package/dist/{mode-BB0F8xTC.mjs.map → mode-BM9QgEmt.mjs.map} +1 -1
  337. package/dist/{oauth-authorization-CsvzIp_F.mjs → oauth-authorization-CXWkIGT4.mjs} +4 -4
  338. package/dist/{oauth-authorization-CsvzIp_F.mjs.map → oauth-authorization-CXWkIGT4.mjs.map} +1 -1
  339. package/dist/{oauth-clients-C9SYwEbZ.mjs → oauth-clients-BmTI5rsl.mjs} +1 -1
  340. package/dist/{oauth-clients-C9SYwEbZ.mjs.map → oauth-clients-BmTI5rsl.mjs.map} +1 -1
  341. package/dist/{oauth-state-store---zrApfB.mjs → oauth-state-store-YLFLcH5F.mjs} +1 -1
  342. package/dist/{oauth-state-store---zrApfB.mjs.map → oauth-state-store-YLFLcH5F.mjs.map} +1 -1
  343. package/dist/{oauth-user-lookup-SHsWRlG9.mjs → oauth-user-lookup-Bsc_GsX-.mjs} +1 -1
  344. package/dist/{oauth-user-lookup-SHsWRlG9.mjs.map → oauth-user-lookup-Bsc_GsX-.mjs.map} +1 -1
  345. package/dist/object-cache/memory.d.mts +1 -1
  346. package/dist/{object-cache-CHbHv83-.mjs → object-cache-Bok5j2ae.mjs} +43 -3
  347. package/dist/object-cache-Bok5j2ae.mjs.map +1 -0
  348. package/dist/{options-41nCWqi9.d.mts → options-iMpRRxIe.d.mts} +3 -3
  349. package/dist/{options-41nCWqi9.d.mts.map → options-iMpRRxIe.d.mts.map} +1 -1
  350. package/dist/page/index.d.mts +2 -2
  351. package/dist/{parse-BwAdS7FZ.mjs → parse-GmjecGct.mjs} +2 -2
  352. package/dist/{parse-BwAdS7FZ.mjs.map → parse-GmjecGct.mjs.map} +1 -1
  353. package/dist/{passkey-config-C0YfSBko.mjs → passkey-config-De0ahnRg.mjs} +1 -1
  354. package/dist/{passkey-config-C0YfSBko.mjs.map → passkey-config-De0ahnRg.mjs.map} +1 -1
  355. package/dist/{placeholder-Cuce9U-m.d.mts → placeholder-BSKwzRe4.d.mts} +1 -1
  356. package/dist/{placeholder-Cuce9U-m.d.mts.map → placeholder-BSKwzRe4.d.mts.map} +1 -1
  357. package/dist/plugin-types.d.mts +1 -1
  358. package/dist/plugin-utils.d.mts +10 -9
  359. package/dist/plugin-utils.d.mts.map +1 -1
  360. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -9
  361. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  362. package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
  363. package/dist/{portable-text-BICg8bTk.mjs → portable-text-cCa0cGV6.mjs} +1 -1
  364. package/dist/{portable-text-BICg8bTk.mjs.map → portable-text-cCa0cGV6.mjs.map} +1 -1
  365. package/dist/{preview-DKGCt2_p.mjs → preview-SSXNVPAC.mjs} +2 -2
  366. package/dist/{preview-DKGCt2_p.mjs.map → preview-SSXNVPAC.mjs.map} +1 -1
  367. package/dist/{public-url-CTVqgMmg.mjs → public-url-Danv47cS.mjs} +1 -1
  368. package/dist/{public-url-CTVqgMmg.mjs.map → public-url-Danv47cS.mjs.map} +1 -1
  369. package/dist/{query-BpQb-blG.mjs → query-ByGq6ver.mjs} +14 -14
  370. package/dist/{query-BpQb-blG.mjs.map → query-ByGq6ver.mjs.map} +1 -1
  371. package/dist/{rate-limit-Dap6HMNM.mjs → rate-limit-C_Lf63Dd.mjs} +2 -2
  372. package/dist/{rate-limit-Dap6HMNM.mjs.map → rate-limit-C_Lf63Dd.mjs.map} +1 -1
  373. package/dist/{redirect-CS-PHtNh.mjs → redirect-CoW3G-0U.mjs} +1 -1
  374. package/dist/{redirect-CS-PHtNh.mjs.map → redirect-CoW3G-0U.mjs.map} +1 -1
  375. package/dist/{redirect-_M0trWoo.mjs → redirect-IyfNirgS.mjs} +2 -2
  376. package/dist/{redirect-_M0trWoo.mjs.map → redirect-IyfNirgS.mjs.map} +1 -1
  377. package/dist/{redirects-w0V9vj_j.mjs → redirects-Bs1g42Ri.mjs} +4 -4
  378. package/dist/{redirects-w0V9vj_j.mjs.map → redirects-Bs1g42Ri.mjs.map} +1 -1
  379. package/dist/{redirects-Dcbuisoj.mjs → redirects-DXEXBAII.mjs} +2 -2
  380. package/dist/{redirects-Dcbuisoj.mjs.map → redirects-DXEXBAII.mjs.map} +1 -1
  381. package/dist/{registry-g8yYt4cC.mjs → registry-B65mUtPa.mjs} +122 -79
  382. package/dist/registry-B65mUtPa.mjs.map +1 -0
  383. package/dist/{request-meta-CmS1tDFf.mjs → request-meta-DbvXaAvU.mjs} +2 -2
  384. package/dist/{request-meta-CmS1tDFf.mjs.map → request-meta-DbvXaAvU.mjs.map} +1 -1
  385. package/dist/{resolve-C7I0qiR0.mjs → resolve-DR3wqMTy.mjs} +1 -1
  386. package/dist/{resolve-C7I0qiR0.mjs.map → resolve-DR3wqMTy.mjs.map} +1 -1
  387. package/dist/{runner-BbR3DfrL.d.mts → runner-DvFWoz8-.d.mts} +2 -2
  388. package/dist/{runner-BbR3DfrL.d.mts.map → runner-DvFWoz8-.d.mts.map} +1 -1
  389. package/dist/{runner-DPdt_Wpa.mjs → runner-K8XK101B.mjs} +351 -199
  390. package/dist/runner-K8XK101B.mjs.map +1 -0
  391. package/dist/runtime.d.mts +11 -10
  392. package/dist/runtime.d.mts.map +1 -1
  393. package/dist/runtime.mjs +2 -2
  394. package/dist/scheduled-publish-Drffrf2a.d.mts +11 -0
  395. package/dist/scheduled-publish-Drffrf2a.d.mts.map +1 -0
  396. package/dist/{schema-DoLd3j2e.mjs → schema-Blhoxp3P.mjs} +5 -5
  397. package/dist/{schema-DoLd3j2e.mjs.map → schema-Blhoxp3P.mjs.map} +1 -1
  398. package/dist/{search-BR0ZeZmh.mjs → search-DZN2HZ-V.mjs} +6 -4
  399. package/dist/search-DZN2HZ-V.mjs.map +1 -0
  400. package/dist/{secrets-BSf9pRRY.mjs → secrets-kp760LlD.mjs} +2 -2
  401. package/dist/{secrets-BSf9pRRY.mjs.map → secrets-kp760LlD.mjs.map} +1 -1
  402. package/dist/{sections-5J2YJPqJ.mjs → sections-CpF5SaGr.mjs} +3 -3
  403. package/dist/{sections-5J2YJPqJ.mjs.map → sections-CpF5SaGr.mjs.map} +1 -1
  404. package/dist/seed/index.d.mts +2 -2
  405. package/dist/seed/index.mjs +19 -18
  406. package/dist/seo/index.d.mts +1 -1
  407. package/dist/seo/index.mjs +1 -1
  408. package/dist/{seo-BkhuuaaE.mjs → seo-89-53DDs.mjs} +1 -1
  409. package/dist/{seo-BkhuuaaE.mjs.map → seo-89-53DDs.mjs.map} +1 -1
  410. package/dist/{seo-DKeXHkzE.mjs → seo-DXu2UQnC.mjs} +3 -3
  411. package/dist/{seo-DKeXHkzE.mjs.map → seo-DXu2UQnC.mjs.map} +1 -1
  412. package/dist/{service-BbO2s8gT.mjs → service-DQmiBMzt.mjs} +3 -3
  413. package/dist/{service-BbO2s8gT.mjs.map → service-DQmiBMzt.mjs.map} +1 -1
  414. package/dist/{session-user-B8aLtKAH.mjs → session-user-Cascbax7.mjs} +1 -1
  415. package/dist/{session-user-B8aLtKAH.mjs.map → session-user-Cascbax7.mjs.map} +1 -1
  416. package/dist/{settings-BMNr9Dmi.mjs → settings-rZyHEcNT.mjs} +3 -3
  417. package/dist/{settings-BMNr9Dmi.mjs.map → settings-rZyHEcNT.mjs.map} +1 -1
  418. package/dist/{settings-DJeki-97.mjs → settings-zhmdKyJQ.mjs} +5 -5
  419. package/dist/{settings-DJeki-97.mjs.map → settings-zhmdKyJQ.mjs.map} +1 -1
  420. package/dist/{setup-complete-gEiySUc-.mjs → setup-complete-Cb3LRyzy.mjs} +1 -1
  421. package/dist/{setup-complete-gEiySUc-.mjs.map → setup-complete-Cb3LRyzy.mjs.map} +1 -1
  422. package/dist/{setup-nonce-DzS50zme.mjs → setup-nonce-Z8x0tHf8.mjs} +1 -1
  423. package/dist/{setup-nonce-DzS50zme.mjs.map → setup-nonce-Z8x0tHf8.mjs.map} +1 -1
  424. package/dist/{single-flight-cache-Cdfkic3t.mjs → single-flight-cache-BG3B_GhN.mjs} +1 -1
  425. package/dist/{single-flight-cache-Cdfkic3t.mjs.map → single-flight-cache-BG3B_GhN.mjs.map} +1 -1
  426. package/dist/{site-url-BLebyON8.mjs → site-url-BBfDTgZB.mjs} +1 -1
  427. package/dist/{site-url-BLebyON8.mjs.map → site-url-BBfDTgZB.mjs.map} +1 -1
  428. package/dist/{ssrf-BRKb343l.mjs → ssrf-1g7usGBg.mjs} +1 -1
  429. package/dist/{ssrf-BRKb343l.mjs.map → ssrf-1g7usGBg.mjs.map} +1 -1
  430. package/dist/{status-vUK0SA17.mjs → status-CqJQX1QN.mjs} +1 -1
  431. package/dist/{status-vUK0SA17.mjs.map → status-CqJQX1QN.mjs.map} +1 -1
  432. package/dist/storage/local.d.mts +1 -1
  433. package/dist/storage/local.mjs +1 -1
  434. package/dist/storage/s3.d.mts +1 -1
  435. package/dist/storage/s3.mjs +1 -1
  436. package/dist/{taxonomies-CM_fUqLU.mjs → taxonomies-BGBd16Eu.mjs} +4 -4
  437. package/dist/{taxonomies-CM_fUqLU.mjs.map → taxonomies-BGBd16Eu.mjs.map} +1 -1
  438. package/dist/{taxonomies-D13i2ctt.mjs → taxonomies-Cnb4F-Pb.mjs} +7 -7
  439. package/dist/{taxonomies-D13i2ctt.mjs.map → taxonomies-Cnb4F-Pb.mjs.map} +1 -1
  440. package/dist/{taxonomy-BU0LjdVb.mjs → taxonomy-BxGxZZdu.mjs} +4 -4
  441. package/dist/{taxonomy-BU0LjdVb.mjs.map → taxonomy-BxGxZZdu.mjs.map} +1 -1
  442. package/dist/{tokens-LeuXF9gG.mjs → tokens-BGT0TUUo.mjs} +1 -1
  443. package/dist/{tokens-LeuXF9gG.mjs.map → tokens-BGT0TUUo.mjs.map} +1 -1
  444. package/dist/{transport-BZ-03aFT.d.mts → transport-BMDWHSgZ.d.mts} +1 -1
  445. package/dist/{transport-BZ-03aFT.d.mts.map → transport-BMDWHSgZ.d.mts.map} +1 -1
  446. package/dist/{transport-_2nBz7e9.mjs → transport-DPefPMcz.mjs} +1 -1
  447. package/dist/{transport-_2nBz7e9.mjs.map → transport-DPefPMcz.mjs.map} +1 -1
  448. package/dist/{trusted-proxy-DZY5WCn2.mjs → trusted-proxy-VTPRiX2s.mjs} +1 -1
  449. package/dist/{trusted-proxy-DZY5WCn2.mjs.map → trusted-proxy-VTPRiX2s.mjs.map} +1 -1
  450. package/dist/{types-ETmO_jQr.d.mts → types-BcLUUbbR.d.mts} +2 -2
  451. package/dist/{types-ETmO_jQr.d.mts.map → types-BcLUUbbR.d.mts.map} +1 -1
  452. package/dist/{types-BYnDBVwe.d.mts → types-CGbYowGQ.d.mts} +2 -2
  453. package/dist/{types-BYnDBVwe.d.mts.map → types-CGbYowGQ.d.mts.map} +1 -1
  454. package/dist/{types-BWqGVhFn.d.mts → types-CgvhU-hF.d.mts} +1 -1
  455. package/dist/{types-BWqGVhFn.d.mts.map → types-CgvhU-hF.d.mts.map} +1 -1
  456. package/dist/{types-fS7-VTdR.d.mts → types-ClUkdbWb.d.mts} +1 -1
  457. package/dist/{types-fS7-VTdR.d.mts.map → types-ClUkdbWb.d.mts.map} +1 -1
  458. package/dist/{types-CZgK3EMW.mjs → types-CuW0zWDA.mjs} +2 -2
  459. package/dist/{types-CZgK3EMW.mjs.map → types-CuW0zWDA.mjs.map} +1 -1
  460. package/dist/{types-BG8_XTLj.d.mts → types-DmHk7vAt.d.mts} +1 -1
  461. package/dist/{types-BG8_XTLj.d.mts.map → types-DmHk7vAt.d.mts.map} +1 -1
  462. package/dist/{types-CQAugunJ.mjs → types-Jo3UYd6b.mjs} +1 -1
  463. package/dist/{types-CQAugunJ.mjs.map → types-Jo3UYd6b.mjs.map} +1 -1
  464. package/dist/{types-xIfVRNLp.d.mts → types-_HFLRzTn.d.mts} +22 -1
  465. package/dist/types-_HFLRzTn.d.mts.map +1 -0
  466. package/dist/{types-DrYMm9s5.d.mts → types-ea9sAPck.d.mts} +1 -1
  467. package/dist/{types-DrYMm9s5.d.mts.map → types-ea9sAPck.d.mts.map} +1 -1
  468. package/dist/{types-CNlaBFzx.d.mts → types-g_aFIdW0.d.mts} +1 -1
  469. package/dist/{types-CNlaBFzx.d.mts.map → types-g_aFIdW0.d.mts.map} +1 -1
  470. package/dist/{types-CUsXGRVj.d.mts → types-vgEWF18A.d.mts} +19 -1
  471. package/dist/{types-CUsXGRVj.d.mts.map → types-vgEWF18A.d.mts.map} +1 -1
  472. package/dist/{user-DkG2jKCp.mjs → user-BjAOvU3Z.mjs} +3 -3
  473. package/dist/{user-DkG2jKCp.mjs.map → user-BjAOvU3Z.mjs.map} +1 -1
  474. package/dist/{utils-B7A57fm9.mjs → utils-BJXElxdw.mjs} +156 -7
  475. package/dist/utils-BJXElxdw.mjs.map +1 -0
  476. package/dist/{validate-CuJ1Ps9j.mjs → validate-CWSnKVIJ.mjs} +2 -2
  477. package/dist/{validate-CuJ1Ps9j.mjs.map → validate-CWSnKVIJ.mjs.map} +1 -1
  478. package/dist/{validate-CG0V0wNR.d.mts → validate-Z1b86_3B.d.mts} +11 -6
  479. package/dist/{validate-CG0V0wNR.d.mts.map → validate-Z1b86_3B.d.mts.map} +1 -1
  480. package/dist/{validation-CwUfTdGF.mjs → validation-c8WjhH8z.mjs} +8 -5
  481. package/dist/{validation-CwUfTdGF.mjs.map → validation-c8WjhH8z.mjs.map} +1 -1
  482. package/dist/version-CaccU7DM.mjs +7 -0
  483. package/dist/{version-BoNBItP_.mjs.map → version-CaccU7DM.mjs.map} +1 -1
  484. package/dist/{widgets-BfOZ-ajY.mjs → widgets-hWcIicX8.mjs} +3 -3
  485. package/dist/{widgets-BfOZ-ajY.mjs.map → widgets-hWcIicX8.mjs.map} +1 -1
  486. package/dist/wxr-taxonomies-0_uxSrmf.d.mts +34 -0
  487. package/dist/wxr-taxonomies-0_uxSrmf.d.mts.map +1 -0
  488. package/dist/wxr-taxonomies-BC3OYpvx.mjs +425 -0
  489. package/dist/wxr-taxonomies-BC3OYpvx.mjs.map +1 -0
  490. package/dist/{zod-generator-gFsRuNNy.mjs → zod-generator-CacrR-i8.mjs} +2 -2
  491. package/dist/{zod-generator-gFsRuNNy.mjs.map → zod-generator-CacrR-i8.mjs.map} +1 -1
  492. package/package.json +6 -6
  493. package/src/api/handlers/content.ts +69 -23
  494. package/src/api/handlers/plugins.ts +77 -10
  495. package/src/api/schemas/import.ts +19 -0
  496. package/src/astro/integration/runtime.ts +3 -6
  497. package/src/astro/integration/vite-config.ts +19 -1
  498. package/src/astro/middleware/auth.ts +10 -3
  499. package/src/astro/middleware/csp.ts +54 -3
  500. package/src/astro/middleware.ts +1 -0
  501. package/src/astro/routes/admin.astro +9 -0
  502. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +6 -1
  503. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +6 -1
  504. package/src/astro/routes/api/admin/plugins/[id]/index.ts +1 -0
  505. package/src/astro/routes/api/admin/plugins/index.ts +1 -0
  506. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +122 -98
  507. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +794 -44
  508. package/src/astro/routes/api/manifest.ts +20 -1
  509. package/src/astro/routes/api/setup/dev-bypass.ts +7 -2
  510. package/src/astro/types.ts +4 -0
  511. package/src/cli/commands/seed.ts +1 -1
  512. package/src/components/EmDashImage.astro +59 -23
  513. package/src/components/Image.astro +36 -35
  514. package/src/components/LiveSearch.astro +40 -4
  515. package/src/components/live-search-routing.ts +30 -0
  516. package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +23 -18
  517. package/src/database/migrations/048_restore_content_taxonomies_term_index.ts +32 -0
  518. package/src/database/migrations/049_taxonomies_name_locale_index.ts +42 -0
  519. package/src/database/migrations/050_media_usage_index_status.ts +142 -0
  520. package/src/database/migrations/runner.ts +6 -0
  521. package/src/database/repositories/media-usage.ts +932 -58
  522. package/src/database/types.ts +22 -0
  523. package/src/emdash-runtime.ts +123 -3
  524. package/src/import/comments.ts +159 -0
  525. package/src/import/index.ts +8 -1
  526. package/src/import/settings.ts +65 -189
  527. package/src/import/sources/wordpress-plugin.ts +338 -42
  528. package/src/import/sources/wxr.ts +4 -1
  529. package/src/import/types.ts +12 -0
  530. package/src/import/utils.ts +207 -0
  531. package/src/import/wxr-taxonomies.ts +39 -0
  532. package/src/loader.ts +13 -2
  533. package/src/media/usage/content-fields.ts +119 -0
  534. package/src/media/usage/content-refresh.ts +524 -0
  535. package/src/media/usage/content-repair.ts +491 -0
  536. package/src/media/usage/content-snapshots.ts +435 -0
  537. package/src/media/usage/extractor.ts +4 -4
  538. package/src/media/usage/source-key.ts +22 -0
  539. package/src/menus/index.ts +17 -1
  540. package/src/object-cache/index.ts +82 -7
  541. package/src/plugins/context.ts +100 -71
  542. package/src/schema/registry.ts +240 -154
  543. package/src/search/query.ts +3 -0
  544. package/src/search/types.ts +2 -0
  545. package/src/seed/apply.ts +158 -101
  546. package/src/seed/types.ts +6 -1
  547. package/dist/api-BMfveMoB.mjs.map +0 -1
  548. package/dist/apply--IVNSdXn.mjs.map +0 -1
  549. package/dist/byline-fields-eyJMblSr.mjs.map +0 -1
  550. package/dist/context-C_g-iJVA.mjs.map +0 -1
  551. package/dist/import-Bb1T9WJS.mjs.map +0 -1
  552. package/dist/index-BRNabKrx.d.mts.map +0 -1
  553. package/dist/index-Dt0OKJB4.d.mts.map +0 -1
  554. package/dist/loader-BA_zhkS_.mjs.map +0 -1
  555. package/dist/object-cache-CHbHv83-.mjs.map +0 -1
  556. package/dist/registry-g8yYt4cC.mjs.map +0 -1
  557. package/dist/runner-DPdt_Wpa.mjs.map +0 -1
  558. package/dist/search-BR0ZeZmh.mjs.map +0 -1
  559. package/dist/types-xIfVRNLp.d.mts.map +0 -1
  560. package/dist/utils-B7A57fm9.mjs.map +0 -1
  561. package/dist/version-BoNBItP_.mjs +0 -7
  562. /package/dist/{api-tokens-B4BQybOp.mjs → api-tokens-DsvvCtdh.mjs} +0 -0
  563. /package/dist/{ssrf-CcX9zvMK.mjs → ssrf-CmuGgCq3.mjs} +0 -0
  564. /package/dist/{types-BvbeGEtr.mjs → types-DROWRxYV.mjs} +0 -0
@@ -118,4 +118,4 @@ interface PostgresConfig {
118
118
  declare function postgres(config: PostgresConfig): DatabaseDescriptor;
119
119
  //#endregion
120
120
  export { SqliteConfig as a, sqlite as c, PostgresConfig as i, DatabaseDialectType as n, libsql as o, LibsqlConfig as r, postgres as s, DatabaseDescriptor as t };
121
- //# sourceMappingURL=adapters-DAAjOID4.d.mts.map
121
+ //# sourceMappingURL=adapters-hUy8vOB-.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters-DAAjOID4.d.mts","names":[],"sources":["../src/db/adapters.ts"],"mappings":";;AA0BA;;;;;AAKA;;;;;;;;;;;AAqBA;;;;;AAOA;;;KAjCY,mBAAA;;AAsDZ;;UAjDiB,kBAAA;EAChB,UAAA;EACA,MAAA;EACA,IAAA,EAAM,mBAAA;EA8CuC;;;AAqB9C;;;;;;;;;AAWA;;EA/DC,oBAAA;AAAA;AAAA,UAGgB,YAAA;EA8DhB;;;EA1DA,GAAA;AAAA;AAAA,UAGgB,YAAA;EA6DhB;;;EAzDA,GAAA;EAyD0B;AAa3B;;EAlEC,SAAA;AAAA;;;;;;;;;;;iBAae,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;;;;;;;;;;;iBAqB9B,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;UAW7B,cAAA;EAChB,gBAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,GAAA;EACA,IAAA;IAAS,GAAA;IAAc,GAAA;EAAA;AAAA;;;;;;;;;;;iBAaR,QAAA,CAAS,MAAA,EAAQ,cAAA,GAAiB,kBAAA"}
1
+ {"version":3,"file":"adapters-hUy8vOB-.d.mts","names":[],"sources":["../src/db/adapters.ts"],"mappings":";;AA0BA;;;;;AAKA;;;;;;;;;;;AAqBA;;;;;AAOA;;;KAjCY,mBAAA;;AAsDZ;;UAjDiB,kBAAA;EAChB,UAAA;EACA,MAAA;EACA,IAAA,EAAM,mBAAA;EA8CuC;;;AAqB9C;;;;;;;;;AAWA;;EA/DC,oBAAA;AAAA;AAAA,UAGgB,YAAA;EA8DhB;;;EA1DA,GAAA;AAAA;AAAA,UAGgB,YAAA;EA6DhB;;;EAzDA,GAAA;EAyD0B;AAa3B;;EAlEC,SAAA;AAAA;;;;;;;;;;;iBAae,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;;;;;;;;;;;iBAqB9B,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;UAW7B,cAAA;EAChB,gBAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,GAAA;EACA,IAAA;IAAS,GAAA;IAAc,GAAA;EAAA;AAAA;;;;;;;;;;;iBAaR,QAAA,CAAS,MAAA,EAAQ,cAAA,GAAiB,kBAAA"}
@@ -1,4 +1,4 @@
1
- import { t as getEnvAllowedOrigins } from "./public-url-CTVqgMmg.mjs";
1
+ import { t as getEnvAllowedOrigins } from "./public-url-Danv47cS.mjs";
2
2
 
3
3
  //#region src/auth/allowed-origins.ts
4
4
  /**
@@ -113,4 +113,4 @@ function isIPLiteralHostname(h) {
113
113
 
114
114
  //#endregion
115
115
  export { validateAllowedOrigins as n, validateOriginShape as r, getConfiguredAllowedOrigins as t };
116
- //# sourceMappingURL=allowed-origins-D5FxMUo8.mjs.map
116
+ //# sourceMappingURL=allowed-origins-CRsJ6BPM.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-origins-D5FxMUo8.mjs","names":[],"sources":["../src/auth/allowed-origins.ts"],"sourcesContent":["/**\n * Resolution and validation of multi-origin passkey verification.\n *\n * `allowedOrigins` lets one EmDash deployment accept passkey assertions from\n * several hostnames sharing the same `rpId` (e.g. apex + preview/staging\n * subdomains under one registrable parent). Origins come from two sources:\n *\n * - `EmDashConfig.allowedOrigins` (declared in `astro.config.mjs`)\n * - `EMDASH_ALLOWED_ORIGINS` (comma-separated runtime env var)\n *\n * Sources are merged (union of permissions, deduplicated). Each entry is\n * validated against `siteUrl` to fail loud on dead config the browser would\n * never honor.\n */\n\nimport { getEnvAllowedOrigins } from \"../api/public-url.js\";\nimport type { EmDashConfig } from \"../astro/integration/runtime.js\";\n\nexport type AllowedOriginSource = \"config.allowedOrigins\" | \"EMDASH_ALLOWED_ORIGINS\";\n\nexport interface TaggedOrigin {\n\t/** Raw entry as declared by the operator. */\n\torigin: string;\n\t/** Where the entry came from (used for source-attributed errors). */\n\tsource: AllowedOriginSource;\n}\n\n/**\n * Collect raw allowedOrigins from config and env, source-tagged.\n *\n * Returns raw values — the caller is expected to pass the result through\n * `validateAllowedOrigins()` before use in passkey verification.\n */\nexport function getConfiguredAllowedOrigins(config?: EmDashConfig): TaggedOrigin[] {\n\tconst tagged: TaggedOrigin[] = [];\n\tif (config?.allowedOrigins) {\n\t\tfor (const origin of config.allowedOrigins) {\n\t\t\tif (origin) tagged.push({ origin, source: \"config.allowedOrigins\" });\n\t\t}\n\t}\n\tfor (const origin of getEnvAllowedOrigins()) {\n\t\ttagged.push({ origin, source: \"EMDASH_ALLOWED_ORIGINS\" });\n\t}\n\treturn tagged;\n}\n\n/**\n * Validate per-entry shape rules (no `siteUrl` needed):\n * - parses as `URL`\n * - protocol is `http:` or `https:`\n * - hostname has no trailing dot (`example.com.` rejected)\n * - hostname has no empty labels (`foo..example.com` rejected)\n *\n * Returns the deduplicated, normalized origin form (`URL.origin`) of every\n * input, in input order. Throws on the first violation with a source-tagged\n * error message.\n */\nexport function validateOriginShape(tagged: TaggedOrigin[]): string[] {\n\tconst normalized: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const { origin, source } of tagged) {\n\t\tlet parsed: URL;\n\t\ttry {\n\t\t\tparsed = new URL(origin);\n\t\t} catch (e) {\n\t\t\tthrow configError(source, `invalid URL: \"${origin}\"`, e);\n\t\t}\n\t\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`origin must be http or https: \"${origin}\" (got ${parsed.protocol})`,\n\t\t\t);\n\t\t}\n\t\tif (parsed.hostname.endsWith(\".\")) {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`hostname has a trailing dot: \"${origin}\". Remove the trailing dot — assertion origins from the browser do not include it.`,\n\t\t\t);\n\t\t}\n\t\tif (parsed.hostname.split(\".\").includes(\"\")) {\n\t\t\tthrow configError(source, `hostname has empty labels: \"${origin}\"`);\n\t\t}\n\t\tif (!seen.has(parsed.origin)) {\n\t\t\tseen.add(parsed.origin);\n\t\t\tnormalized.push(parsed.origin);\n\t\t}\n\t}\n\treturn normalized;\n}\n\n/**\n * Validate the effective merged allowedOrigins set against `siteUrl`.\n *\n * Performs `validateOriginShape()` plus the siteUrl-dependent rules:\n * - Rule A: non-empty origins ⇒ `siteUrl` is set\n * - `siteUrl` hostname is not an IP literal (multi-origin requires a domain)\n * - `siteUrl` hostname has no trailing dot (cannot match assertion origins)\n * - Rule B: each origin's hostname is `siteHost` exactly or a subdomain\n *\n * Throws on first violation. Returns the deduplicated normalized origins.\n *\n * Use this at the runtime chokepoint (where config + env are merged into the\n * effective set). At Astro integration init, prefer `validateOriginShape()`\n * for shape-only checks on `config.allowedOrigins`, since `siteUrl` may be\n * supplied at runtime via `EMDASH_SITE_URL`.\n */\nexport function validateAllowedOrigins(\n\tsiteUrl: string | undefined,\n\ttagged: TaggedOrigin[],\n): string[] {\n\tconst normalized = validateOriginShape(tagged);\n\tif (normalized.length === 0) return normalized;\n\n\tif (!siteUrl) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: allowedOrigins is set (${normalized.length} ${\n\t\t\t\tnormalized.length === 1 ? \"entry\" : \"entries\"\n\t\t\t}) but siteUrl is not. Without a canonical siteUrl, rpId is derived from the request hostname, defeating multi-origin passkeys. Set siteUrl in astro.config.mjs or via EMDASH_SITE_URL.`,\n\t\t);\n\t}\n\n\tlet siteHost: string;\n\ttry {\n\t\tsiteHost = new URL(siteUrl).hostname;\n\t} catch (e) {\n\t\tthrow new Error(`EmDash config error: siteUrl is not a valid URL: \"${siteUrl}\"`, {\n\t\t\tcause: e,\n\t\t});\n\t}\n\n\tif (siteHost.endsWith(\".\")) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: siteUrl \"${siteUrl}\" has a trailing-dot hostname, which cannot match assertion origins. Remove the trailing dot when using allowedOrigins.`,\n\t\t);\n\t}\n\tif (isIPLiteralHostname(siteHost)) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: siteUrl \"${siteUrl}\" uses an IP-literal hostname. Multi-origin passkeys require a domain-based siteUrl — IP addresses cannot have valid subdomains for WebAuthn rpId.`,\n\t\t);\n\t}\n\n\tfor (const { origin, source } of tagged) {\n\t\tconst h = new URL(origin).hostname;\n\t\tif (h !== siteHost && !h.endsWith(\".\" + siteHost)) {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`\"${origin}\" is not a subdomain of siteUrl \"${siteUrl}\". Allowed origins must be the same hostname as siteUrl or a subdomain of it.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn normalized;\n}\n\nfunction configError(source: AllowedOriginSource, detail: string, cause?: unknown): Error {\n\tconst err = new Error(`EmDash config error in ${source}: ${detail}`);\n\tif (cause !== undefined) (err as Error & { cause?: unknown }).cause = cause;\n\treturn err;\n}\n\nconst IPV4_DOTTED_DECIMAL_RE = /^\\d+(\\.\\d+){3}$/;\n\nfunction isIPLiteralHostname(h: string): boolean {\n\t// IPv6 hostnames are bracketed by URL.hostname, e.g. \"[::1]\"\n\tif (h.startsWith(\"[\")) return true;\n\t// IPv4 dotted-decimal\n\treturn IPV4_DOTTED_DECIMAL_RE.test(h);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,4BAA4B,QAAuC;CAClF,MAAM,SAAyB,EAAE;AACjC,KAAI,QAAQ,gBACX;OAAK,MAAM,UAAU,OAAO,eAC3B,KAAI,OAAQ,QAAO,KAAK;GAAE;GAAQ,QAAQ;GAAyB,CAAC;;AAGtE,MAAK,MAAM,UAAU,sBAAsB,CAC1C,QAAO,KAAK;EAAE;EAAQ,QAAQ;EAA0B,CAAC;AAE1D,QAAO;;;;;;;;;;;;;AAcR,SAAgB,oBAAoB,QAAkC;CACrE,MAAM,aAAuB,EAAE;CAC/B,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,MAAM,EAAE,QAAQ,YAAY,QAAQ;EACxC,IAAI;AACJ,MAAI;AACH,YAAS,IAAI,IAAI,OAAO;WAChB,GAAG;AACX,SAAM,YAAY,QAAQ,iBAAiB,OAAO,IAAI,EAAE;;AAEzD,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,SACtD,OAAM,YACL,QACA,kCAAkC,OAAO,SAAS,OAAO,SAAS,GAClE;AAEF,MAAI,OAAO,SAAS,SAAS,IAAI,CAChC,OAAM,YACL,QACA,iCAAiC,OAAO,oFACxC;AAEF,MAAI,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,CAC1C,OAAM,YAAY,QAAQ,+BAA+B,OAAO,GAAG;AAEpE,MAAI,CAAC,KAAK,IAAI,OAAO,OAAO,EAAE;AAC7B,QAAK,IAAI,OAAO,OAAO;AACvB,cAAW,KAAK,OAAO,OAAO;;;AAGhC,QAAO;;;;;;;;;;;;;;;;;;AAmBR,SAAgB,uBACf,SACA,QACW;CACX,MAAM,aAAa,oBAAoB,OAAO;AAC9C,KAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,KAAI,CAAC,QACJ,OAAM,IAAI,MACT,+CAA+C,WAAW,OAAO,GAChE,WAAW,WAAW,IAAI,UAAU,UACpC,wLACD;CAGF,IAAI;AACJ,KAAI;AACH,aAAW,IAAI,IAAI,QAAQ,CAAC;UACpB,GAAG;AACX,QAAM,IAAI,MAAM,qDAAqD,QAAQ,IAAI,EAChF,OAAO,GACP,CAAC;;AAGH,KAAI,SAAS,SAAS,IAAI,CACzB,OAAM,IAAI,MACT,iCAAiC,QAAQ,yHACzC;AAEF,KAAI,oBAAoB,SAAS,CAChC,OAAM,IAAI,MACT,iCAAiC,QAAQ,oJACzC;AAGF,MAAK,MAAM,EAAE,QAAQ,YAAY,QAAQ;EACxC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC;AAC1B,MAAI,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,SAAS,CAChD,OAAM,YACL,QACA,IAAI,OAAO,mCAAmC,QAAQ,+EACtD;;AAIH,QAAO;;AAGR,SAAS,YAAY,QAA6B,QAAgB,OAAwB;CACzF,MAAM,sBAAM,IAAI,MAAM,0BAA0B,OAAO,IAAI,SAAS;AACpE,KAAI,UAAU,OAAW,CAAC,IAAoC,QAAQ;AACtE,QAAO;;AAGR,MAAM,yBAAyB;AAE/B,SAAS,oBAAoB,GAAoB;AAEhD,KAAI,EAAE,WAAW,IAAI,CAAE,QAAO;AAE9B,QAAO,uBAAuB,KAAK,EAAE"}
1
+ {"version":3,"file":"allowed-origins-CRsJ6BPM.mjs","names":[],"sources":["../src/auth/allowed-origins.ts"],"sourcesContent":["/**\n * Resolution and validation of multi-origin passkey verification.\n *\n * `allowedOrigins` lets one EmDash deployment accept passkey assertions from\n * several hostnames sharing the same `rpId` (e.g. apex + preview/staging\n * subdomains under one registrable parent). Origins come from two sources:\n *\n * - `EmDashConfig.allowedOrigins` (declared in `astro.config.mjs`)\n * - `EMDASH_ALLOWED_ORIGINS` (comma-separated runtime env var)\n *\n * Sources are merged (union of permissions, deduplicated). Each entry is\n * validated against `siteUrl` to fail loud on dead config the browser would\n * never honor.\n */\n\nimport { getEnvAllowedOrigins } from \"../api/public-url.js\";\nimport type { EmDashConfig } from \"../astro/integration/runtime.js\";\n\nexport type AllowedOriginSource = \"config.allowedOrigins\" | \"EMDASH_ALLOWED_ORIGINS\";\n\nexport interface TaggedOrigin {\n\t/** Raw entry as declared by the operator. */\n\torigin: string;\n\t/** Where the entry came from (used for source-attributed errors). */\n\tsource: AllowedOriginSource;\n}\n\n/**\n * Collect raw allowedOrigins from config and env, source-tagged.\n *\n * Returns raw values — the caller is expected to pass the result through\n * `validateAllowedOrigins()` before use in passkey verification.\n */\nexport function getConfiguredAllowedOrigins(config?: EmDashConfig): TaggedOrigin[] {\n\tconst tagged: TaggedOrigin[] = [];\n\tif (config?.allowedOrigins) {\n\t\tfor (const origin of config.allowedOrigins) {\n\t\t\tif (origin) tagged.push({ origin, source: \"config.allowedOrigins\" });\n\t\t}\n\t}\n\tfor (const origin of getEnvAllowedOrigins()) {\n\t\ttagged.push({ origin, source: \"EMDASH_ALLOWED_ORIGINS\" });\n\t}\n\treturn tagged;\n}\n\n/**\n * Validate per-entry shape rules (no `siteUrl` needed):\n * - parses as `URL`\n * - protocol is `http:` or `https:`\n * - hostname has no trailing dot (`example.com.` rejected)\n * - hostname has no empty labels (`foo..example.com` rejected)\n *\n * Returns the deduplicated, normalized origin form (`URL.origin`) of every\n * input, in input order. Throws on the first violation with a source-tagged\n * error message.\n */\nexport function validateOriginShape(tagged: TaggedOrigin[]): string[] {\n\tconst normalized: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const { origin, source } of tagged) {\n\t\tlet parsed: URL;\n\t\ttry {\n\t\t\tparsed = new URL(origin);\n\t\t} catch (e) {\n\t\t\tthrow configError(source, `invalid URL: \"${origin}\"`, e);\n\t\t}\n\t\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`origin must be http or https: \"${origin}\" (got ${parsed.protocol})`,\n\t\t\t);\n\t\t}\n\t\tif (parsed.hostname.endsWith(\".\")) {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`hostname has a trailing dot: \"${origin}\". Remove the trailing dot — assertion origins from the browser do not include it.`,\n\t\t\t);\n\t\t}\n\t\tif (parsed.hostname.split(\".\").includes(\"\")) {\n\t\t\tthrow configError(source, `hostname has empty labels: \"${origin}\"`);\n\t\t}\n\t\tif (!seen.has(parsed.origin)) {\n\t\t\tseen.add(parsed.origin);\n\t\t\tnormalized.push(parsed.origin);\n\t\t}\n\t}\n\treturn normalized;\n}\n\n/**\n * Validate the effective merged allowedOrigins set against `siteUrl`.\n *\n * Performs `validateOriginShape()` plus the siteUrl-dependent rules:\n * - Rule A: non-empty origins ⇒ `siteUrl` is set\n * - `siteUrl` hostname is not an IP literal (multi-origin requires a domain)\n * - `siteUrl` hostname has no trailing dot (cannot match assertion origins)\n * - Rule B: each origin's hostname is `siteHost` exactly or a subdomain\n *\n * Throws on first violation. Returns the deduplicated normalized origins.\n *\n * Use this at the runtime chokepoint (where config + env are merged into the\n * effective set). At Astro integration init, prefer `validateOriginShape()`\n * for shape-only checks on `config.allowedOrigins`, since `siteUrl` may be\n * supplied at runtime via `EMDASH_SITE_URL`.\n */\nexport function validateAllowedOrigins(\n\tsiteUrl: string | undefined,\n\ttagged: TaggedOrigin[],\n): string[] {\n\tconst normalized = validateOriginShape(tagged);\n\tif (normalized.length === 0) return normalized;\n\n\tif (!siteUrl) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: allowedOrigins is set (${normalized.length} ${\n\t\t\t\tnormalized.length === 1 ? \"entry\" : \"entries\"\n\t\t\t}) but siteUrl is not. Without a canonical siteUrl, rpId is derived from the request hostname, defeating multi-origin passkeys. Set siteUrl in astro.config.mjs or via EMDASH_SITE_URL.`,\n\t\t);\n\t}\n\n\tlet siteHost: string;\n\ttry {\n\t\tsiteHost = new URL(siteUrl).hostname;\n\t} catch (e) {\n\t\tthrow new Error(`EmDash config error: siteUrl is not a valid URL: \"${siteUrl}\"`, {\n\t\t\tcause: e,\n\t\t});\n\t}\n\n\tif (siteHost.endsWith(\".\")) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: siteUrl \"${siteUrl}\" has a trailing-dot hostname, which cannot match assertion origins. Remove the trailing dot when using allowedOrigins.`,\n\t\t);\n\t}\n\tif (isIPLiteralHostname(siteHost)) {\n\t\tthrow new Error(\n\t\t\t`EmDash config error: siteUrl \"${siteUrl}\" uses an IP-literal hostname. Multi-origin passkeys require a domain-based siteUrl — IP addresses cannot have valid subdomains for WebAuthn rpId.`,\n\t\t);\n\t}\n\n\tfor (const { origin, source } of tagged) {\n\t\tconst h = new URL(origin).hostname;\n\t\tif (h !== siteHost && !h.endsWith(\".\" + siteHost)) {\n\t\t\tthrow configError(\n\t\t\t\tsource,\n\t\t\t\t`\"${origin}\" is not a subdomain of siteUrl \"${siteUrl}\". Allowed origins must be the same hostname as siteUrl or a subdomain of it.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn normalized;\n}\n\nfunction configError(source: AllowedOriginSource, detail: string, cause?: unknown): Error {\n\tconst err = new Error(`EmDash config error in ${source}: ${detail}`);\n\tif (cause !== undefined) (err as Error & { cause?: unknown }).cause = cause;\n\treturn err;\n}\n\nconst IPV4_DOTTED_DECIMAL_RE = /^\\d+(\\.\\d+){3}$/;\n\nfunction isIPLiteralHostname(h: string): boolean {\n\t// IPv6 hostnames are bracketed by URL.hostname, e.g. \"[::1]\"\n\tif (h.startsWith(\"[\")) return true;\n\t// IPv4 dotted-decimal\n\treturn IPV4_DOTTED_DECIMAL_RE.test(h);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,4BAA4B,QAAuC;CAClF,MAAM,SAAyB,EAAE;AACjC,KAAI,QAAQ,gBACX;OAAK,MAAM,UAAU,OAAO,eAC3B,KAAI,OAAQ,QAAO,KAAK;GAAE;GAAQ,QAAQ;GAAyB,CAAC;;AAGtE,MAAK,MAAM,UAAU,sBAAsB,CAC1C,QAAO,KAAK;EAAE;EAAQ,QAAQ;EAA0B,CAAC;AAE1D,QAAO;;;;;;;;;;;;;AAcR,SAAgB,oBAAoB,QAAkC;CACrE,MAAM,aAAuB,EAAE;CAC/B,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,MAAM,EAAE,QAAQ,YAAY,QAAQ;EACxC,IAAI;AACJ,MAAI;AACH,YAAS,IAAI,IAAI,OAAO;WAChB,GAAG;AACX,SAAM,YAAY,QAAQ,iBAAiB,OAAO,IAAI,EAAE;;AAEzD,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,SACtD,OAAM,YACL,QACA,kCAAkC,OAAO,SAAS,OAAO,SAAS,GAClE;AAEF,MAAI,OAAO,SAAS,SAAS,IAAI,CAChC,OAAM,YACL,QACA,iCAAiC,OAAO,oFACxC;AAEF,MAAI,OAAO,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,CAC1C,OAAM,YAAY,QAAQ,+BAA+B,OAAO,GAAG;AAEpE,MAAI,CAAC,KAAK,IAAI,OAAO,OAAO,EAAE;AAC7B,QAAK,IAAI,OAAO,OAAO;AACvB,cAAW,KAAK,OAAO,OAAO;;;AAGhC,QAAO;;;;;;;;;;;;;;;;;;AAmBR,SAAgB,uBACf,SACA,QACW;CACX,MAAM,aAAa,oBAAoB,OAAO;AAC9C,KAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,KAAI,CAAC,QACJ,OAAM,IAAI,MACT,+CAA+C,WAAW,OAAO,GAChE,WAAW,WAAW,IAAI,UAAU,UACpC,wLACD;CAGF,IAAI;AACJ,KAAI;AACH,aAAW,IAAI,IAAI,QAAQ,CAAC;UACpB,GAAG;AACX,QAAM,IAAI,MAAM,qDAAqD,QAAQ,IAAI,EAChF,OAAO,GACP,CAAC;;AAGH,KAAI,SAAS,SAAS,IAAI,CACzB,OAAM,IAAI,MACT,iCAAiC,QAAQ,yHACzC;AAEF,KAAI,oBAAoB,SAAS,CAChC,OAAM,IAAI,MACT,iCAAiC,QAAQ,oJACzC;AAGF,MAAK,MAAM,EAAE,QAAQ,YAAY,QAAQ;EACxC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC;AAC1B,MAAI,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,SAAS,CAChD,OAAM,YACL,QACA,IAAI,OAAO,mCAAmC,QAAQ,+EACtD;;AAIH,QAAO;;AAGR,SAAS,YAAY,QAA6B,QAAgB,OAAwB;CACzF,MAAM,sBAAM,IAAI,MAAM,0BAA0B,OAAO,IAAI,SAAS;AACpE,KAAI,UAAU,OAAW,CAAC,IAAoC,QAAQ;AACtE,QAAO;;AAGR,MAAM,yBAAyB;AAE/B,SAAS,oBAAoB,GAAoB;AAEhD,KAAI,EAAE,WAAW,IAAI,CAAE,QAAO;AAE9B,QAAO,uBAAuB,KAAK,EAAE"}
@@ -1,6 +1,6 @@
1
- import { a as parseQuery, c as handleError, i as parseBody, n as ParseResult, o as apiError, r as isParseError, s as apiSuccess, t as OptionsRepository } from "../options-41nCWqi9.mjs";
2
- import { t as Database } from "../types-xIfVRNLp.mjs";
3
- import { Ot as StorageCollection, kt as StorageCollectionConfig } from "../types-BYnDBVwe.mjs";
1
+ import { a as parseQuery, c as handleError, i as parseBody, n as ParseResult, o as apiError, r as isParseError, s as apiSuccess, t as OptionsRepository } from "../options-iMpRRxIe.mjs";
2
+ import { t as Database } from "../types-_HFLRzTn.mjs";
3
+ import { Ot as StorageCollection, kt as StorageCollectionConfig } from "../types-CGbYowGQ.mjs";
4
4
  import { Kysely } from "kysely";
5
5
 
6
6
  //#region src/api/setup-complete.d.ts
@@ -1,25 +1,26 @@
1
1
  import "../dialect-helpers-DRI5pyY3.mjs";
2
2
  import "../after-B1IIdH3Y.mjs";
3
- import "../object-cache-CHbHv83-.mjs";
4
- import "../content-ncUWWjna.mjs";
3
+ import "../object-cache-Bok5j2ae.mjs";
4
+ import "../content-DhgEth4k.mjs";
5
5
  import "../base64-CmWvODNW.mjs";
6
- import "../types-CZgK3EMW.mjs";
7
- import "../media-C5t_eCnk.mjs";
8
- import "../user-DkG2jKCp.mjs";
6
+ import "../types-CuW0zWDA.mjs";
7
+ import "../media-BrXIaMFN.mjs";
8
+ import "../user-BjAOvU3Z.mjs";
9
9
  import { t as OptionsRepository } from "../options-DTTML-Tx.mjs";
10
- import { r as createStorageAccess } from "../context-C_g-iJVA.mjs";
10
+ import { r as createStorageAccess } from "../context-CUsR9dXL.mjs";
11
11
  import "../request-cache-KCNHp_RJ.mjs";
12
12
  import "../enrich-BQ0mxJRs.mjs";
13
- import "../seo-DKeXHkzE.mjs";
14
- import "../loader-BA_zhkS_.mjs";
15
- import "../settings-DJeki-97.mjs";
16
- import "../ssrf-BRKb343l.mjs";
17
- import { n as apiSuccess, r as handleError, t as apiError } from "../error-rVGiqWDt.mjs";
18
- import { i as parseQuery, n as parseBody, t as isParseError } from "../parse-BwAdS7FZ.mjs";
19
- import "../ssrf-CcX9zvMK.mjs";
20
- import "../cron-C5LVoNmP.mjs";
21
- import { n as getPublicOrigin } from "../public-url-CTVqgMmg.mjs";
22
- import { t as finalizeSetup } from "../setup-complete-gEiySUc-.mjs";
13
+ import "../seo-DXu2UQnC.mjs";
14
+ import "../content-refresh-CA4uKwzH.mjs";
15
+ import "../loader-CB6YHeul.mjs";
16
+ import "../settings-zhmdKyJQ.mjs";
17
+ import "../ssrf-1g7usGBg.mjs";
18
+ import { n as apiSuccess, r as handleError, t as apiError } from "../error-CkAseSqZ.mjs";
19
+ import { i as parseQuery, n as parseBody, t as isParseError } from "../parse-GmjecGct.mjs";
20
+ import "../ssrf-CmuGgCq3.mjs";
21
+ import "../cron-v4FTEFR_.mjs";
22
+ import { n as getPublicOrigin } from "../public-url-Danv47cS.mjs";
23
+ import { t as finalizeSetup } from "../setup-complete-Cb3LRyzy.mjs";
23
24
 
24
25
  //#region src/api/auth-storage.ts
25
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"route-utils.mjs","names":[],"sources":["../../src/api/auth-storage.ts"],"sourcesContent":["/**\n * Auth provider storage helper.\n *\n * Gives auth provider routes access to plugin-style storage collections\n * namespaced under `auth:<providerId>`. Reuses the existing `_plugin_storage`\n * table and `PluginStorageRepository` infrastructure.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../database/types.js\";\nimport { createStorageAccess } from \"../plugins/context.js\";\nimport type { StorageCollection, StorageCollectionConfig } from \"../plugins/types.js\";\n\n/**\n * Get storage collections for an auth provider.\n *\n * Returns a record of `StorageCollection` instances, one per declared\n * collection in the provider's `storage` config. Data is stored in the\n * shared `_plugin_storage` table under the namespace `auth:<providerId>`.\n *\n * @example\n * ```ts\n * const storage = getAuthProviderStorage(emdash.db, \"atproto\", {\n * states: { indexes: [] },\n * sessions: { indexes: [] },\n * });\n * const session = await storage.sessions.get(sessionId);\n * ```\n */\nexport function getAuthProviderStorage(\n\tdb: Kysely<Database>,\n\tproviderId: string,\n\tstorageConfig: Record<string, StorageCollectionConfig>,\n): Record<string, StorageCollection> {\n\treturn createStorageAccess(db, `auth:${providerId}`, storageConfig);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,uBACf,IACA,YACA,eACoC;AACpC,QAAO,oBAAoB,IAAI,QAAQ,cAAc,cAAc"}
1
+ {"version":3,"file":"route-utils.mjs","names":[],"sources":["../../src/api/auth-storage.ts"],"sourcesContent":["/**\n * Auth provider storage helper.\n *\n * Gives auth provider routes access to plugin-style storage collections\n * namespaced under `auth:<providerId>`. Reuses the existing `_plugin_storage`\n * table and `PluginStorageRepository` infrastructure.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../database/types.js\";\nimport { createStorageAccess } from \"../plugins/context.js\";\nimport type { StorageCollection, StorageCollectionConfig } from \"../plugins/types.js\";\n\n/**\n * Get storage collections for an auth provider.\n *\n * Returns a record of `StorageCollection` instances, one per declared\n * collection in the provider's `storage` config. Data is stored in the\n * shared `_plugin_storage` table under the namespace `auth:<providerId>`.\n *\n * @example\n * ```ts\n * const storage = getAuthProviderStorage(emdash.db, \"atproto\", {\n * states: { indexes: [] },\n * sessions: { indexes: [] },\n * });\n * const session = await storage.sessions.get(sessionId);\n * ```\n */\nexport function getAuthProviderStorage(\n\tdb: Kysely<Database>,\n\tproviderId: string,\n\tstorageConfig: Record<string, StorageCollectionConfig>,\n): Record<string, StorageCollection> {\n\treturn createStorageAccess(db, `auth:${providerId}`, storageConfig);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,uBACf,IACA,YACA,eACoC;AACpC,QAAO,oBAAoB,IAAI,QAAQ,cAAc,cAAc"}
@@ -1,2 +1,2 @@
1
- import { $ as wpRewriteUrlsBody, $n as trashedContentItemSchema, $t as commentSchema, A as reorderWidgetsBody, An as mediaProviderListQuery, At as menuSchema, B as userSchema, Bn as contentListQuery, Bt as magicLinkSendBody, C as notFoundSummarySchema, Cn as formatFileSize, Ct as termWithCountSchema, D as updateRedirectBody, Dn as mediaItemSchema, Dt as menuItemSchema, E as redirectsListQuery, En as mediaExistingResponseSchema, Et as createMenuItemBody, F as widgetSchema, Fn as contentAuthorSchema, Ft as updateMenuItemBody, G as setupAdminVerifyBody, Gn as contentScheduleBody, Gt as passkeyVerifyBody, H as usersListQuery, Hn as contentPreviewUrlBody, Ht as passkeyRegisterOptionsBody, I as allowedDomainCreateBody, In as contentAuthorsResponseSchema, It as authMeActionBody, J as importProbeBody, Jn as contentTermsBody, Jt as adminCommentListResponseSchema, K as setupAtprotoAdminBody, Kn as contentSeoInput, Kt as signupCompleteBody, L as allowedDomainUpdateBody, Ln as contentCompareResponseSchema, Lt as inviteCompleteBody, M as widgetAreaSchema, Mn as mediaUpdateBody, Mt as menuWithItemsSchema, N as widgetAreaWithWidgetsAndCountSchema, Nn as mediaUploadUrlBody, Nt as reorderMenuItemsBody, O as createWidgetAreaBody, On as mediaListQuery, Ot as menuItemTypeEnum, P as widgetAreaWithWidgetsSchema, Pn as mediaUploadUrlResponseSchema, Pt as updateMenuBody, Q as wpPrepareBody, Qn as contentUpdateBody, Qt as commentListQuery, R as userDetailSchema, Rn as contentCreateBody, Rt as inviteCreateBody, S as notFoundSummaryResponseSchema, Sn as DEFAULT_MAX_UPLOAD_SIZE, St as termTranslationsSchema, T as redirectSchema, Tn as mediaConfirmResponseSchema, Tt as createMenuBody, U as atprotoLoginBody, Un as contentPublishBody, Ut as passkeyRegisterVerifyBody, V as userUpdateBody, Vn as contentListResponseSchema, Vt as passkeyOptionsBody, W as setupAdminBody, Wn as contentResponseSchema, Wt as passkeyRenameBody, X as wpPluginAnalyzeBody, Xn as contentTranslationsResponseSchema, Xt as commentBulkResponseSchema, Y as wpMediaImportBody, Yn as contentTranslationSchema, Yt as commentBulkBody, Z as wpPluginExecuteBody, Zn as contentTrashQuery, Zt as commentCountsResponseSchema, _ as notFoundEntrySchema, _n as orphanedTableListResponseSchema, _t as taxonomyListResponseSchema, a as bylineFieldUpdateBody, an as collectionGetQuery, ar as deleteResponseSchema, at as searchSuggestQuery, b as notFoundPruneBody, bn as updateCollectionBody, bt as termResponseSchema, c as bylineCreditSchema, cn as collectionSchema, cr as localeFilterQuery, ct as createSectionBody, d as bylineTranslationCreateBody, dn as createFieldBody, dr as slugPattern, dt as sectionsListQuery, en as commentStatusBody, er as trashedContentListResponseSchema, et as searchEnableBody, f as bylineTranslationsResponseSchema, fn as fieldListResponseSchema, fr as successEnvelope, ft as updateSectionBody, g as createRedirectBody, gn as orphanRegisterBody, gt as taxonomyDefTranslationsSchema, h as contentBylineInputSchema, hn as fieldSchema, ht as taxonomyDefSchema, i as bylineFieldReorderBody, in as publicCommentSchema, ir as cursorPaginationQuery, it as searchResultSchema, j as updateWidgetBody, jn as mediaResponseSchema, jt as menuTranslationsSchema, k as createWidgetBody, kn as mediaListResponseSchema, kt as menuListItemSchema, l as bylineListResponseSchema, ln as collectionWithFieldsResponseSchema, lr as offsetPaginationQuery, lt as sectionListResponseSchema, m as bylinesListQuery, mn as fieldResponseSchema, mt as createTermBody, n as bylineFieldDefinitionSchema, nn as createReactionBody, nr as apiErrorSchema, nt as searchRebuildBody, o as bylineFieldUsageResponseSchema, on as collectionListResponseSchema, or as httpUrl, ot as settingsUpdateBody, p as bylineUpdateBody, pn as fieldReorderBody, pt as createTaxonomyDefBody, q as setupBody, qn as contentSeoSchema, qt as signupRequestBody, r as bylineFieldListResponseSchema, rn as publicCommentListResponseSchema, rr as countResponseSchema, rt as searchResponseSchema, s as bylineCreateBody, sn as collectionResponseSchema, sr as localeCode, st as siteSettingsSchema, t as bylineFieldCreateBody, tn as createCommentBody, tr as VALID_ROLE_LEVELS, tt as searchQuery, u as bylineSummarySchema, un as createCollectionBody, ur as roleLevel, ut as sectionSchema, v as notFoundListQuery, vn as orphanedTableSchema, vt as termGetResponseSchema, w as redirectListResponseSchema, wn as mediaConfirmBody, wt as updateTermBody, x as notFoundSummaryQuery, xn as updateFieldBody, xt as termSchema, y as notFoundListResponseSchema, yn as schemaExportQuery, yt as termListResponseSchema, z as userListResponseSchema, zn as contentItemSchema, zt as inviteRegisterOptionsBody } from "../../byline-fields-KD3JFRuH.mjs";
1
+ import { $ as wpRewriteUrlsBody, $n as trashedContentItemSchema, $t as commentSchema, A as reorderWidgetsBody, An as mediaProviderListQuery, At as menuSchema, B as userSchema, Bn as contentListQuery, Bt as magicLinkSendBody, C as notFoundSummarySchema, Cn as formatFileSize, Ct as termWithCountSchema, D as updateRedirectBody, Dn as mediaItemSchema, Dt as menuItemSchema, E as redirectsListQuery, En as mediaExistingResponseSchema, Et as createMenuItemBody, F as widgetSchema, Fn as contentAuthorSchema, Ft as updateMenuItemBody, G as setupAdminVerifyBody, Gn as contentScheduleBody, Gt as passkeyVerifyBody, H as usersListQuery, Hn as contentPreviewUrlBody, Ht as passkeyRegisterOptionsBody, I as allowedDomainCreateBody, In as contentAuthorsResponseSchema, It as authMeActionBody, J as importProbeBody, Jn as contentTermsBody, Jt as adminCommentListResponseSchema, K as setupAtprotoAdminBody, Kn as contentSeoInput, Kt as signupCompleteBody, L as allowedDomainUpdateBody, Ln as contentCompareResponseSchema, Lt as inviteCompleteBody, M as widgetAreaSchema, Mn as mediaUpdateBody, Mt as menuWithItemsSchema, N as widgetAreaWithWidgetsAndCountSchema, Nn as mediaUploadUrlBody, Nt as reorderMenuItemsBody, O as createWidgetAreaBody, On as mediaListQuery, Ot as menuItemTypeEnum, P as widgetAreaWithWidgetsSchema, Pn as mediaUploadUrlResponseSchema, Pt as updateMenuBody, Q as wpPrepareBody, Qn as contentUpdateBody, Qt as commentListQuery, R as userDetailSchema, Rn as contentCreateBody, Rt as inviteCreateBody, S as notFoundSummaryResponseSchema, Sn as DEFAULT_MAX_UPLOAD_SIZE, St as termTranslationsSchema, T as redirectSchema, Tn as mediaConfirmResponseSchema, Tt as createMenuBody, U as atprotoLoginBody, Un as contentPublishBody, Ut as passkeyRegisterVerifyBody, V as userUpdateBody, Vn as contentListResponseSchema, Vt as passkeyOptionsBody, W as setupAdminBody, Wn as contentResponseSchema, Wt as passkeyRenameBody, X as wpPluginAnalyzeBody, Xn as contentTranslationsResponseSchema, Xt as commentBulkResponseSchema, Y as wpMediaImportBody, Yn as contentTranslationSchema, Yt as commentBulkBody, Z as wpPluginExecuteBody, Zn as contentTrashQuery, Zt as commentCountsResponseSchema, _ as notFoundEntrySchema, _n as orphanedTableListResponseSchema, _t as taxonomyListResponseSchema, a as bylineFieldUpdateBody, an as collectionGetQuery, ar as deleteResponseSchema, at as searchSuggestQuery, b as notFoundPruneBody, bn as updateCollectionBody, bt as termResponseSchema, c as bylineCreditSchema, cn as collectionSchema, cr as localeFilterQuery, ct as createSectionBody, d as bylineTranslationCreateBody, dn as createFieldBody, dr as slugPattern, dt as sectionsListQuery, en as commentStatusBody, er as trashedContentListResponseSchema, et as searchEnableBody, f as bylineTranslationsResponseSchema, fn as fieldListResponseSchema, fr as successEnvelope, ft as updateSectionBody, g as createRedirectBody, gn as orphanRegisterBody, gt as taxonomyDefTranslationsSchema, h as contentBylineInputSchema, hn as fieldSchema, ht as taxonomyDefSchema, i as bylineFieldReorderBody, in as publicCommentSchema, ir as cursorPaginationQuery, it as searchResultSchema, j as updateWidgetBody, jn as mediaResponseSchema, jt as menuTranslationsSchema, k as createWidgetBody, kn as mediaListResponseSchema, kt as menuListItemSchema, l as bylineListResponseSchema, ln as collectionWithFieldsResponseSchema, lr as offsetPaginationQuery, lt as sectionListResponseSchema, m as bylinesListQuery, mn as fieldResponseSchema, mt as createTermBody, n as bylineFieldDefinitionSchema, nn as createReactionBody, nr as apiErrorSchema, nt as searchRebuildBody, o as bylineFieldUsageResponseSchema, on as collectionListResponseSchema, or as httpUrl, ot as settingsUpdateBody, p as bylineUpdateBody, pn as fieldReorderBody, pt as createTaxonomyDefBody, q as setupBody, qn as contentSeoSchema, qt as signupRequestBody, r as bylineFieldListResponseSchema, rn as publicCommentListResponseSchema, rr as countResponseSchema, rt as searchResponseSchema, s as bylineCreateBody, sn as collectionResponseSchema, sr as localeCode, st as siteSettingsSchema, t as bylineFieldCreateBody, tn as createCommentBody, tr as VALID_ROLE_LEVELS, tt as searchQuery, u as bylineSummarySchema, un as createCollectionBody, ur as roleLevel, ut as sectionSchema, v as notFoundListQuery, vn as orphanedTableSchema, vt as termGetResponseSchema, w as redirectListResponseSchema, wn as mediaConfirmBody, wt as updateTermBody, x as notFoundSummaryQuery, xn as updateFieldBody, xt as termSchema, y as notFoundListResponseSchema, yn as schemaExportQuery, yt as termListResponseSchema, z as userListResponseSchema, zn as contentItemSchema, zt as inviteRegisterOptionsBody } from "../../byline-fields-Cgrt9-aL.mjs";
2
2
  export { DEFAULT_MAX_UPLOAD_SIZE, VALID_ROLE_LEVELS, adminCommentListResponseSchema, allowedDomainCreateBody, allowedDomainUpdateBody, apiErrorSchema, atprotoLoginBody, authMeActionBody, bylineCreateBody, bylineCreditSchema, bylineFieldCreateBody, bylineFieldDefinitionSchema, bylineFieldListResponseSchema, bylineFieldReorderBody, bylineFieldUpdateBody, bylineFieldUsageResponseSchema, bylineListResponseSchema, bylineSummarySchema, bylineTranslationCreateBody, bylineTranslationsResponseSchema, bylineUpdateBody, bylinesListQuery, collectionGetQuery, collectionListResponseSchema, collectionResponseSchema, collectionSchema, collectionWithFieldsResponseSchema, commentBulkBody, commentBulkResponseSchema, commentCountsResponseSchema, commentListQuery, commentSchema, commentStatusBody, contentAuthorSchema, contentAuthorsResponseSchema, contentBylineInputSchema, contentCompareResponseSchema, contentCreateBody, contentItemSchema, contentListQuery, contentListResponseSchema, contentPreviewUrlBody, contentPublishBody, contentResponseSchema, contentScheduleBody, contentSeoInput, contentSeoSchema, contentTermsBody, contentTranslationSchema, contentTranslationsResponseSchema, contentTrashQuery, contentUpdateBody, countResponseSchema, createCollectionBody, createCommentBody, createFieldBody, createMenuBody, createMenuItemBody, createReactionBody, createRedirectBody, createSectionBody, createTaxonomyDefBody, createTermBody, createWidgetAreaBody, createWidgetBody, cursorPaginationQuery, deleteResponseSchema, fieldListResponseSchema, fieldReorderBody, fieldResponseSchema, fieldSchema, formatFileSize, httpUrl, importProbeBody, inviteCompleteBody, inviteCreateBody, inviteRegisterOptionsBody, localeCode, localeFilterQuery, magicLinkSendBody, mediaConfirmBody, mediaConfirmResponseSchema, mediaExistingResponseSchema, mediaItemSchema, mediaListQuery, mediaListResponseSchema, mediaProviderListQuery, mediaResponseSchema, mediaUpdateBody, mediaUploadUrlBody, mediaUploadUrlResponseSchema, menuItemSchema, menuItemTypeEnum, menuListItemSchema, menuSchema, menuTranslationsSchema, menuWithItemsSchema, notFoundEntrySchema, notFoundListQuery, notFoundListResponseSchema, notFoundPruneBody, notFoundSummaryQuery, notFoundSummaryResponseSchema, notFoundSummarySchema, offsetPaginationQuery, orphanRegisterBody, orphanedTableListResponseSchema, orphanedTableSchema, passkeyOptionsBody, passkeyRegisterOptionsBody, passkeyRegisterVerifyBody, passkeyRenameBody, passkeyVerifyBody, publicCommentListResponseSchema, publicCommentSchema, redirectListResponseSchema, redirectSchema, redirectsListQuery, reorderMenuItemsBody, reorderWidgetsBody, roleLevel, schemaExportQuery, searchEnableBody, searchQuery, searchRebuildBody, searchResponseSchema, searchResultSchema, searchSuggestQuery, sectionListResponseSchema, sectionSchema, sectionsListQuery, settingsUpdateBody, setupAdminBody, setupAdminVerifyBody, setupAtprotoAdminBody, setupBody, signupCompleteBody, signupRequestBody, siteSettingsSchema, slugPattern, successEnvelope, taxonomyDefSchema, taxonomyDefTranslationsSchema, taxonomyListResponseSchema, termGetResponseSchema, termListResponseSchema, termResponseSchema, termSchema, termTranslationsSchema, termWithCountSchema, trashedContentItemSchema, trashedContentListResponseSchema, updateCollectionBody, updateFieldBody, updateMenuBody, updateMenuItemBody, updateRedirectBody, updateSectionBody, updateTermBody, updateWidgetBody, userDetailSchema, userListResponseSchema, userSchema, userUpdateBody, usersListQuery, widgetAreaSchema, widgetAreaWithWidgetsAndCountSchema, widgetAreaWithWidgetsSchema, widgetSchema, wpMediaImportBody, wpPluginAnalyzeBody, wpPluginExecuteBody, wpPrepareBody, wpRewriteUrlsBody };
@@ -1,5 +1,5 @@
1
- import { $ as createMenuBody, $t as contentAuthorSchema, A as searchRebuildBody, An as countResponseSchema, At as fieldListResponseSchema, B as updateSectionBody, Bt as DEFAULT_MAX_UPLOAD_SIZE, C as userDetailSchema, Cn as bylineTranslationCreateBody, Ct as collectionGetQuery, D as usersListQuery, Dn as contentBylineInputSchema, Dt as collectionWithFieldsResponseSchema, E as userUpdateBody, En as bylinesListQuery, Et as collectionSchema, F as siteSettingsSchema, Fn as localeFilterQuery, Ft as orphanedTableListResponseSchema, G as taxonomyListResponseSchema, Gt as mediaItemSchema, H as createTermBody, Ht as mediaConfirmBody, I as createSectionBody, In as offsetPaginationQuery, It as orphanedTableSchema, J as termResponseSchema, Jt as mediaProviderListQuery, K as termGetResponseSchema, Kt as mediaListQuery, L as sectionListResponseSchema, Ln as roleLevel, Lt as schemaExportQuery, M as searchResultSchema, Mn as deleteResponseSchema, Mt as fieldResponseSchema, N as searchSuggestQuery, Nn as httpUrl, Nt as fieldSchema, O as searchEnableBody, On as VALID_ROLE_LEVELS, Ot as createCollectionBody, P as settingsUpdateBody, Pn as localeCode, Pt as orphanRegisterBody, Q as updateTermBody, Qt as mediaUploadUrlResponseSchema, R as sectionSchema, Rn as slugPattern, Rt as updateCollectionBody, S as allowedDomainUpdateBody, Sn as bylineSummarySchema, St as publicCommentSchema, T as userSchema, Tn as bylineUpdateBody, Tt as collectionResponseSchema, U as taxonomyDefSchema, Ut as mediaConfirmResponseSchema, V as createTaxonomyDefBody, Vt as formatFileSize, W as taxonomyDefTranslationsSchema, Wt as mediaExistingResponseSchema, X as termTranslationsSchema, Xt as mediaUpdateBody, Y as termSchema, Yt as mediaResponseSchema, Z as termWithCountSchema, Zt as mediaUploadUrlBody, _ as widgetAreaSchema, _n as trashedContentItemSchema, _t as commentSchema, a as notFoundPruneBody, an as contentListResponseSchema, at as menuTranslationsSchema, b as widgetSchema, bn as bylineCreditSchema, bt as createReactionBody, c as notFoundSummarySchema, cn as contentResponseSchema, ct as updateMenuBody, d as redirectsListQuery, dn as contentSeoSchema, en as contentAuthorsResponseSchema, et as createMenuItemBody, f as updateRedirectBody, fn as contentTermsBody, ft as adminCommentListResponseSchema, g as updateWidgetBody, gn as contentUpdateBody, gt as commentListQuery, h as reorderWidgetsBody, hn as contentTrashQuery, ht as commentCountsResponseSchema, i as notFoundListResponseSchema, in as contentListQuery, it as menuSchema, j as searchResponseSchema, jn as cursorPaginationQuery, jt as fieldReorderBody, k as searchQuery, kn as apiErrorSchema, kt as createFieldBody, l as redirectListResponseSchema, ln as contentScheduleBody, lt as updateMenuItemBody, m as createWidgetBody, mn as contentTranslationsResponseSchema, mt as commentBulkResponseSchema, n as notFoundEntrySchema, nn as contentCreateBody, nt as menuItemTypeEnum, o as notFoundSummaryQuery, on as contentPreviewUrlBody, ot as menuWithItemsSchema, p as createWidgetAreaBody, pn as contentTranslationSchema, pt as commentBulkBody, q as termListResponseSchema, qt as mediaListResponseSchema, r as notFoundListQuery, rn as contentItemSchema, rt as menuListItemSchema, s as notFoundSummaryResponseSchema, sn as contentPublishBody, st as reorderMenuItemsBody, t as createRedirectBody, tn as contentCompareResponseSchema, tt as menuItemSchema, u as redirectSchema, un as contentSeoInput, v as widgetAreaWithWidgetsAndCountSchema, vn as trashedContentListResponseSchema, vt as commentStatusBody, w as userListResponseSchema, wn as bylineTranslationsResponseSchema, wt as collectionListResponseSchema, x as allowedDomainCreateBody, xn as bylineListResponseSchema, xt as publicCommentListResponseSchema, y as widgetAreaWithWidgetsSchema, yn as bylineCreateBody, yt as createCommentBody, z as sectionsListQuery, zn as successEnvelope, zt as updateFieldBody } from "../../redirects-Dcbuisoj.mjs";
2
- import { C as passkeyOptionsBody, D as passkeyVerifyBody, E as passkeyRenameBody, O as signupCompleteBody, S as magicLinkSendBody, T as passkeyRegisterVerifyBody, _ as wpRewriteUrlsBody, a as bylineFieldUpdateBody, b as inviteCreateBody, c as setupAdminBody, d as setupBody, f as importProbeBody, g as wpPrepareBody, h as wpPluginExecuteBody, i as bylineFieldReorderBody, k as signupRequestBody, l as setupAdminVerifyBody, m as wpPluginAnalyzeBody, n as bylineFieldDefinitionSchema, o as bylineFieldUsageResponseSchema, p as wpMediaImportBody, r as bylineFieldListResponseSchema, s as atprotoLoginBody, t as bylineFieldCreateBody, u as setupAtprotoAdminBody, v as authMeActionBody, w as passkeyRegisterOptionsBody, x as inviteRegisterOptionsBody, y as inviteCompleteBody } from "../../byline-fields-eyJMblSr.mjs";
3
- import "../../status-vUK0SA17.mjs";
1
+ import { $ as createMenuBody, $t as contentAuthorSchema, A as searchRebuildBody, An as countResponseSchema, At as fieldListResponseSchema, B as updateSectionBody, Bt as DEFAULT_MAX_UPLOAD_SIZE, C as userDetailSchema, Cn as bylineTranslationCreateBody, Ct as collectionGetQuery, D as usersListQuery, Dn as contentBylineInputSchema, Dt as collectionWithFieldsResponseSchema, E as userUpdateBody, En as bylinesListQuery, Et as collectionSchema, F as siteSettingsSchema, Fn as localeFilterQuery, Ft as orphanedTableListResponseSchema, G as taxonomyListResponseSchema, Gt as mediaItemSchema, H as createTermBody, Ht as mediaConfirmBody, I as createSectionBody, In as offsetPaginationQuery, It as orphanedTableSchema, J as termResponseSchema, Jt as mediaProviderListQuery, K as termGetResponseSchema, Kt as mediaListQuery, L as sectionListResponseSchema, Ln as roleLevel, Lt as schemaExportQuery, M as searchResultSchema, Mn as deleteResponseSchema, Mt as fieldResponseSchema, N as searchSuggestQuery, Nn as httpUrl, Nt as fieldSchema, O as searchEnableBody, On as VALID_ROLE_LEVELS, Ot as createCollectionBody, P as settingsUpdateBody, Pn as localeCode, Pt as orphanRegisterBody, Q as updateTermBody, Qt as mediaUploadUrlResponseSchema, R as sectionSchema, Rn as slugPattern, Rt as updateCollectionBody, S as allowedDomainUpdateBody, Sn as bylineSummarySchema, St as publicCommentSchema, T as userSchema, Tn as bylineUpdateBody, Tt as collectionResponseSchema, U as taxonomyDefSchema, Ut as mediaConfirmResponseSchema, V as createTaxonomyDefBody, Vt as formatFileSize, W as taxonomyDefTranslationsSchema, Wt as mediaExistingResponseSchema, X as termTranslationsSchema, Xt as mediaUpdateBody, Y as termSchema, Yt as mediaResponseSchema, Z as termWithCountSchema, Zt as mediaUploadUrlBody, _ as widgetAreaSchema, _n as trashedContentItemSchema, _t as commentSchema, a as notFoundPruneBody, an as contentListResponseSchema, at as menuTranslationsSchema, b as widgetSchema, bn as bylineCreditSchema, bt as createReactionBody, c as notFoundSummarySchema, cn as contentResponseSchema, ct as updateMenuBody, d as redirectsListQuery, dn as contentSeoSchema, en as contentAuthorsResponseSchema, et as createMenuItemBody, f as updateRedirectBody, fn as contentTermsBody, ft as adminCommentListResponseSchema, g as updateWidgetBody, gn as contentUpdateBody, gt as commentListQuery, h as reorderWidgetsBody, hn as contentTrashQuery, ht as commentCountsResponseSchema, i as notFoundListResponseSchema, in as contentListQuery, it as menuSchema, j as searchResponseSchema, jn as cursorPaginationQuery, jt as fieldReorderBody, k as searchQuery, kn as apiErrorSchema, kt as createFieldBody, l as redirectListResponseSchema, ln as contentScheduleBody, lt as updateMenuItemBody, m as createWidgetBody, mn as contentTranslationsResponseSchema, mt as commentBulkResponseSchema, n as notFoundEntrySchema, nn as contentCreateBody, nt as menuItemTypeEnum, o as notFoundSummaryQuery, on as contentPreviewUrlBody, ot as menuWithItemsSchema, p as createWidgetAreaBody, pn as contentTranslationSchema, pt as commentBulkBody, q as termListResponseSchema, qt as mediaListResponseSchema, r as notFoundListQuery, rn as contentItemSchema, rt as menuListItemSchema, s as notFoundSummaryResponseSchema, sn as contentPublishBody, st as reorderMenuItemsBody, t as createRedirectBody, tn as contentCompareResponseSchema, tt as menuItemSchema, u as redirectSchema, un as contentSeoInput, v as widgetAreaWithWidgetsAndCountSchema, vn as trashedContentListResponseSchema, vt as commentStatusBody, w as userListResponseSchema, wn as bylineTranslationsResponseSchema, wt as collectionListResponseSchema, x as allowedDomainCreateBody, xn as bylineListResponseSchema, xt as publicCommentListResponseSchema, y as widgetAreaWithWidgetsSchema, yn as bylineCreateBody, yt as createCommentBody, z as sectionsListQuery, zn as successEnvelope, zt as updateFieldBody } from "../../redirects-DXEXBAII.mjs";
2
+ import { C as passkeyOptionsBody, D as passkeyVerifyBody, E as passkeyRenameBody, O as signupCompleteBody, S as magicLinkSendBody, T as passkeyRegisterVerifyBody, _ as wpRewriteUrlsBody, a as bylineFieldUpdateBody, b as inviteCreateBody, c as setupAdminBody, d as setupBody, f as importProbeBody, g as wpPrepareBody, h as wpPluginExecuteBody, i as bylineFieldReorderBody, k as signupRequestBody, l as setupAdminVerifyBody, m as wpPluginAnalyzeBody, n as bylineFieldDefinitionSchema, o as bylineFieldUsageResponseSchema, p as wpMediaImportBody, r as bylineFieldListResponseSchema, s as atprotoLoginBody, t as bylineFieldCreateBody, u as setupAtprotoAdminBody, v as authMeActionBody, w as passkeyRegisterOptionsBody, x as inviteRegisterOptionsBody, y as inviteCompleteBody } from "../../byline-fields-2Lp5Hbgf.mjs";
3
+ import "../../status-CqJQX1QN.mjs";
4
4
 
5
5
  export { DEFAULT_MAX_UPLOAD_SIZE, VALID_ROLE_LEVELS, adminCommentListResponseSchema, allowedDomainCreateBody, allowedDomainUpdateBody, apiErrorSchema, atprotoLoginBody, authMeActionBody, bylineCreateBody, bylineCreditSchema, bylineFieldCreateBody, bylineFieldDefinitionSchema, bylineFieldListResponseSchema, bylineFieldReorderBody, bylineFieldUpdateBody, bylineFieldUsageResponseSchema, bylineListResponseSchema, bylineSummarySchema, bylineTranslationCreateBody, bylineTranslationsResponseSchema, bylineUpdateBody, bylinesListQuery, collectionGetQuery, collectionListResponseSchema, collectionResponseSchema, collectionSchema, collectionWithFieldsResponseSchema, commentBulkBody, commentBulkResponseSchema, commentCountsResponseSchema, commentListQuery, commentSchema, commentStatusBody, contentAuthorSchema, contentAuthorsResponseSchema, contentBylineInputSchema, contentCompareResponseSchema, contentCreateBody, contentItemSchema, contentListQuery, contentListResponseSchema, contentPreviewUrlBody, contentPublishBody, contentResponseSchema, contentScheduleBody, contentSeoInput, contentSeoSchema, contentTermsBody, contentTranslationSchema, contentTranslationsResponseSchema, contentTrashQuery, contentUpdateBody, countResponseSchema, createCollectionBody, createCommentBody, createFieldBody, createMenuBody, createMenuItemBody, createReactionBody, createRedirectBody, createSectionBody, createTaxonomyDefBody, createTermBody, createWidgetAreaBody, createWidgetBody, cursorPaginationQuery, deleteResponseSchema, fieldListResponseSchema, fieldReorderBody, fieldResponseSchema, fieldSchema, formatFileSize, httpUrl, importProbeBody, inviteCompleteBody, inviteCreateBody, inviteRegisterOptionsBody, localeCode, localeFilterQuery, magicLinkSendBody, mediaConfirmBody, mediaConfirmResponseSchema, mediaExistingResponseSchema, mediaItemSchema, mediaListQuery, mediaListResponseSchema, mediaProviderListQuery, mediaResponseSchema, mediaUpdateBody, mediaUploadUrlBody, mediaUploadUrlResponseSchema, menuItemSchema, menuItemTypeEnum, menuListItemSchema, menuSchema, menuTranslationsSchema, menuWithItemsSchema, notFoundEntrySchema, notFoundListQuery, notFoundListResponseSchema, notFoundPruneBody, notFoundSummaryQuery, notFoundSummaryResponseSchema, notFoundSummarySchema, offsetPaginationQuery, orphanRegisterBody, orphanedTableListResponseSchema, orphanedTableSchema, passkeyOptionsBody, passkeyRegisterOptionsBody, passkeyRegisterVerifyBody, passkeyRenameBody, passkeyVerifyBody, publicCommentListResponseSchema, publicCommentSchema, redirectListResponseSchema, redirectSchema, redirectsListQuery, reorderMenuItemsBody, reorderWidgetsBody, roleLevel, schemaExportQuery, searchEnableBody, searchQuery, searchRebuildBody, searchResponseSchema, searchResultSchema, searchSuggestQuery, sectionListResponseSchema, sectionSchema, sectionsListQuery, settingsUpdateBody, setupAdminBody, setupAdminVerifyBody, setupAtprotoAdminBody, setupBody, signupCompleteBody, signupRequestBody, siteSettingsSchema, slugPattern, successEnvelope, taxonomyDefSchema, taxonomyDefTranslationsSchema, taxonomyListResponseSchema, termGetResponseSchema, termListResponseSchema, termResponseSchema, termSchema, termTranslationsSchema, termWithCountSchema, trashedContentItemSchema, trashedContentListResponseSchema, updateCollectionBody, updateFieldBody, updateMenuBody, updateMenuItemBody, updateRedirectBody, updateSectionBody, updateTermBody, updateWidgetBody, userDetailSchema, userListResponseSchema, userSchema, userUpdateBody, usersListQuery, widgetAreaSchema, widgetAreaWithWidgetsAndCountSchema, widgetAreaWithWidgetsSchema, widgetSchema, wpMediaImportBody, wpPluginAnalyzeBody, wpPluginExecuteBody, wpPrepareBody, wpRewriteUrlsBody };
@@ -1,27 +1,27 @@
1
1
  import { r as validatePluginIdentifier, t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
2
  import { n as getI18nConfig, r as isI18nEnabled } from "./config-CVssduLe.mjs";
3
- import { o as invalidateCollectionCache } from "./object-cache-CHbHv83-.mjs";
4
- import { r as RevisionRepository, t as ContentRepository } from "./content-ncUWWjna.mjs";
3
+ import { o as invalidateCollectionCache } from "./object-cache-Bok5j2ae.mjs";
4
+ import { r as RevisionRepository, t as ContentRepository } from "./content-DhgEth4k.mjs";
5
5
  import { r as encodeBase64, t as decodeBase64 } from "./base64-CmWvODNW.mjs";
6
- import { n as InvalidCursorError, r as ScheduledNotDueError, t as EmDashValidationError } from "./types-CZgK3EMW.mjs";
7
- import { t as MediaRepository } from "./media-C5t_eCnk.mjs";
8
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-OCG163rN.mjs";
9
- import { t as UserRepository } from "./user-DkG2jKCp.mjs";
10
- import { t as CommentRepository } from "./comment-D9BLDpZI.mjs";
6
+ import { n as InvalidCursorError, r as ScheduledNotDueError, t as EmDashValidationError } from "./types-CuW0zWDA.mjs";
7
+ import { t as MediaRepository } from "./media-BrXIaMFN.mjs";
8
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-B2isWQhr.mjs";
9
+ import { t as UserRepository } from "./user-BjAOvU3Z.mjs";
10
+ import { t as CommentRepository } from "./comment-CzeatwBV.mjs";
11
11
  import { t as withTransaction } from "./transaction-qfqpPVpu.mjs";
12
- import { t as RedirectRepository } from "./redirect-_M0trWoo.mjs";
12
+ import { t as RedirectRepository } from "./redirect-IyfNirgS.mjs";
13
13
  import { r as requestCached } from "./request-cache-KCNHp_RJ.mjs";
14
- import { t as BylineRepository } from "./byline-LL8lyqdb.mjs";
14
+ import { t as BylineRepository } from "./byline-Bm8ZgUP9.mjs";
15
15
  import { r as parseAllowedMimeTypes, t as matchesMimeAllowlist } from "./mime-CCEzze7W.mjs";
16
- import { t as SeoRepository } from "./seo-DKeXHkzE.mjs";
17
- import { r as invalidateRedirectCache } from "./cache-D9jF5bYw.mjs";
16
+ import { t as SeoRepository } from "./seo-DXu2UQnC.mjs";
17
+ import { r as invalidateRedirectCache } from "./cache-CEBAZjir.mjs";
18
18
  import { n as isMissingTableError } from "./db-errors-CK46D-ly.mjs";
19
19
  import { n as hashString } from "./hash-DrvzIXcz.mjs";
20
- import { n as SchemaRegistry, t as SchemaError } from "./registry-g8yYt4cC.mjs";
21
- import { a as reconcileManifestAccess, i as pluginManifestSchema, r as normalizeManifestRoute } from "./manifest-schema-kPGX7VS-.mjs";
22
- import { a as normalizeCapabilities, r as declaredAccessToCapabilities } from "./types-BvbeGEtr.mjs";
23
- import { t as EmDashStorageError } from "./types-CQAugunJ.mjs";
24
- import { n as resolveAndValidateExternalUrl, t as SsrfError } from "./ssrf-BRKb343l.mjs";
20
+ import { n as SchemaRegistry, t as SchemaError } from "./registry-B65mUtPa.mjs";
21
+ import { a as reconcileManifestAccess, i as pluginManifestSchema, r as normalizeManifestRoute } from "./manifest-schema-BHlgZM1W.mjs";
22
+ import { a as normalizeCapabilities, r as declaredAccessToCapabilities } from "./types-DROWRxYV.mjs";
23
+ import { t as EmDashStorageError } from "./types-Jo3UYd6b.mjs";
24
+ import { n as resolveAndValidateExternalUrl, t as SsrfError } from "./ssrf-1g7usGBg.mjs";
25
25
  import { sql } from "kysely";
26
26
  import { createGzipDecoder, unpackTar } from "modern-tar";
27
27
  import { ClientResponseError, ClientValidationError } from "@atcute/client";
@@ -339,6 +339,17 @@ async function resolveSearchColumns(db, collection) {
339
339
  for (const candidate of ["title", "name"]) if (fieldSlugs.has(candidate)) columns.push(candidate);
340
340
  return columns;
341
341
  }
342
+ /**
343
+ * Create a 301 auto-redirect from an entry's old URL to its new one after a
344
+ * slug change, using the collection's URL pattern. Shared by
345
+ * handleContentUpdate (direct slug edits) and handleContentPublish (slug edits
346
+ * staged as `_slug` in a draft revision, which only land on publish).
347
+ */
348
+ async function createSlugChangeRedirect(db, collection, oldSlug, newSlug, contentId) {
349
+ const collectionRow = await db.selectFrom("_emdash_collections").select("url_pattern").where("slug", "=", collection).executeTakeFirst();
350
+ await new RedirectRepository(db).createAutoRedirect(collection, oldSlug, newSlug, contentId, collectionRow?.url_pattern ?? null);
351
+ invalidateRedirectCache();
352
+ }
342
353
  /** Matches a date-only `YYYY-MM-DD` bound (no time component). */
343
354
  const DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
344
355
  /**
@@ -577,7 +588,7 @@ async function handleContentCreate(db, collection, body) {
577
588
  });
578
589
  if (body.bylines !== void 0) created.primaryBylineId = (await bylineRepo.setContentBylines(collection, created.id, body.bylines))[0]?.byline.translationGroup ?? null;
579
590
  if (body.translationOf) {
580
- const { TaxonomyRepository } = await import("./taxonomy-BU0LjdVb.mjs").then((n) => n.n);
591
+ const { TaxonomyRepository } = await import("./taxonomy-BxGxZZdu.mjs").then((n) => n.n);
581
592
  await new TaxonomyRepository(trx).copyEntryTerms(collection, body.translationOf, created.id);
582
593
  if (body.bylines === void 0) {
583
594
  await bylineRepo.copyContentBylines(collection, body.translationOf, created.id);
@@ -680,11 +691,7 @@ async function handleContentUpdate(db, collection, id, body) {
680
691
  publishedAt: body.publishedAt
681
692
  });
682
693
  if (body.bylines !== void 0) updated.primaryBylineId = (await bylineRepo.setContentBylines(collection, resolvedId, body.bylines))[0]?.byline.translationGroup ?? null;
683
- if (oldSlug && body.slug) {
684
- const collectionRow = await trx.selectFrom("_emdash_collections").select("url_pattern").where("slug", "=", collection).executeTakeFirst();
685
- await new RedirectRepository(trx).createAutoRedirect(collection, oldSlug, body.slug, resolvedId, collectionRow?.url_pattern ?? null);
686
- invalidateRedirectCache();
687
- }
694
+ if (oldSlug && body.slug) await createSlugChangeRedirect(trx, collection, oldSlug, body.slug, resolvedId);
688
695
  if (isI18nEnabled() && body.data && updated.translationGroup) await syncNonTranslatableFields(trx, collection, updated.id, updated.translationGroup, body.data);
689
696
  if (body.seo && hasSeo) updated.seo = await new SeoRepository(trx).upsert(collection, resolvedId, body.seo);
690
697
  else if (hasSeo) updated.seo = await new SeoRepository(trx).get(collection, resolvedId);
@@ -800,11 +807,15 @@ async function handleContentDuplicate(db, collection, id, authorId) {
800
807
  */
801
808
  async function handleContentDelete(db, collection, id) {
802
809
  try {
803
- if (!await withTransaction(db, async (trx) => {
810
+ const result = await withTransaction(db, async (trx) => {
804
811
  const repo = new ContentRepository(trx);
805
812
  const resolvedId = await resolveId(repo, collection, id) ?? id;
806
- return repo.delete(collection, resolvedId);
807
- })) return {
813
+ return {
814
+ id: resolvedId,
815
+ deleted: await repo.delete(collection, resolvedId)
816
+ };
817
+ });
818
+ if (!result.deleted) return {
808
819
  success: false,
809
820
  error: {
810
821
  code: "NOT_FOUND",
@@ -813,7 +824,10 @@ async function handleContentDelete(db, collection, id) {
813
824
  };
814
825
  return {
815
826
  success: true,
816
- data: { deleted: true }
827
+ data: {
828
+ deleted: true,
829
+ id: result.id
830
+ }
817
831
  };
818
832
  } catch (error) {
819
833
  console.error("Content delete error:", error);
@@ -885,7 +899,10 @@ async function handleContentPermanentDelete(db, collection, id) {
885
899
  };
886
900
  return {
887
901
  success: true,
888
- data: { deleted: true }
902
+ data: {
903
+ deleted: true,
904
+ id: resolvedId
905
+ }
889
906
  };
890
907
  } catch (error) {
891
908
  console.error("Content permanent delete error:", error);
@@ -1041,7 +1058,10 @@ async function handleContentPublish(db, collection, id, options = {}) {
1041
1058
  const item = await withTransaction(db, async (trx) => {
1042
1059
  const repo = new ContentRepository(trx);
1043
1060
  const resolvedId = await resolveId(repo, collection, id) ?? id;
1044
- return repo.publish(collection, resolvedId, options.publishedAt, options.requireScheduledDue);
1061
+ const existing = await repo.findById(collection, resolvedId);
1062
+ const published = await repo.publish(collection, resolvedId, options.publishedAt, options.requireScheduledDue);
1063
+ if (existing?.status === "published" && existing.slug && published.slug && existing.slug !== published.slug) await createSlugChangeRedirect(trx, collection, existing.slug, published.slug, resolvedId);
1064
+ return published;
1045
1065
  });
1046
1066
  await hydrateSeo(db, collection, item, await collectionHasSeo(db, collection));
1047
1067
  return {
@@ -2157,9 +2177,34 @@ function buildPluginInfo(plugin, state, marketplaceUrl) {
2157
2177
  };
2158
2178
  }
2159
2179
  /**
2180
+ * Build plugin info for a statically-sandboxed plugin entry
2181
+ */
2182
+ function buildSandboxedPluginInfo(entry, state) {
2183
+ const status = state?.status ?? "active";
2184
+ const enabled = status === "active";
2185
+ return {
2186
+ id: entry.id,
2187
+ name: state?.displayName || entry.id,
2188
+ version: entry.version,
2189
+ package: void 0,
2190
+ enabled,
2191
+ status,
2192
+ source: "config",
2193
+ sandboxed: true,
2194
+ capabilities: entry.capabilities,
2195
+ hasAdminPages: (entry.adminPages?.length ?? 0) > 0,
2196
+ hasDashboardWidgets: (entry.adminWidgets?.length ?? 0) > 0,
2197
+ hasHooks: false,
2198
+ installedAt: state?.installedAt?.toISOString(),
2199
+ activatedAt: state?.activatedAt?.toISOString() ?? void 0,
2200
+ deactivatedAt: state?.deactivatedAt?.toISOString() ?? void 0,
2201
+ description: state?.description ?? void 0
2202
+ };
2203
+ }
2204
+ /**
2160
2205
  * List all configured plugins with their state
2161
2206
  */
2162
- async function handlePluginList(db, configuredPlugins, marketplaceUrl) {
2207
+ async function handlePluginList(db, configuredPlugins, sandboxedPluginEntries, marketplaceUrl) {
2163
2208
  try {
2164
2209
  const allStates = await new PluginStateRepository(db).getAll();
2165
2210
  const stateMap = new Map(allStates.map((s) => [s.pluginId, s]));
@@ -2167,6 +2212,11 @@ async function handlePluginList(db, configuredPlugins, marketplaceUrl) {
2167
2212
  const items = configuredPlugins.map((plugin) => {
2168
2213
  return buildPluginInfo(plugin, stateMap.get(plugin.id) ?? null, marketplaceUrl);
2169
2214
  });
2215
+ for (const entry of sandboxedPluginEntries) {
2216
+ if (configuredIds.has(entry.id)) continue;
2217
+ configuredIds.add(entry.id);
2218
+ items.push(buildSandboxedPluginInfo(entry, stateMap.get(entry.id) ?? null));
2219
+ }
2170
2220
  for (const state of allStates) {
2171
2221
  if (state.source !== "marketplace" && state.source !== "registry") continue;
2172
2222
  if (configuredIds.has(state.pluginId)) continue;
@@ -2208,20 +2258,26 @@ async function handlePluginList(db, configuredPlugins, marketplaceUrl) {
2208
2258
  /**
2209
2259
  * Get a single plugin's info
2210
2260
  */
2211
- async function handlePluginGet(db, configuredPlugins, pluginId, marketplaceUrl) {
2261
+ async function handlePluginGet(db, configuredPlugins, sandboxedPluginEntries, pluginId, marketplaceUrl) {
2212
2262
  try {
2263
+ const stateRepo = new PluginStateRepository(db);
2213
2264
  const plugin = configuredPlugins.find((p) => p.id === pluginId);
2214
- if (!plugin) return {
2265
+ if (plugin) return {
2266
+ success: true,
2267
+ data: { item: buildPluginInfo(plugin, await stateRepo.get(pluginId), marketplaceUrl) }
2268
+ };
2269
+ const sandboxed = sandboxedPluginEntries.find((e) => e.id === pluginId);
2270
+ if (sandboxed) return {
2271
+ success: true,
2272
+ data: { item: buildSandboxedPluginInfo(sandboxed, await stateRepo.get(pluginId)) }
2273
+ };
2274
+ return {
2215
2275
  success: false,
2216
2276
  error: {
2217
2277
  code: "NOT_FOUND",
2218
2278
  message: `Plugin not found: ${pluginId}`
2219
2279
  }
2220
2280
  };
2221
- return {
2222
- success: true,
2223
- data: { item: buildPluginInfo(plugin, await new PluginStateRepository(db).get(pluginId), marketplaceUrl) }
2224
- };
2225
2281
  } catch {
2226
2282
  return {
2227
2283
  success: false,
@@ -2264,7 +2320,7 @@ function buildStateOnlyPluginInfo(state) {
2264
2320
  /**
2265
2321
  * Enable a plugin
2266
2322
  */
2267
- async function handlePluginEnable(db, configuredPlugins, pluginId) {
2323
+ async function handlePluginEnable(db, configuredPlugins, sandboxedPluginEntries, pluginId) {
2268
2324
  try {
2269
2325
  const stateRepo = new PluginStateRepository(db);
2270
2326
  const plugin = configuredPlugins.find((p) => p.id === pluginId);
@@ -2272,6 +2328,11 @@ async function handlePluginEnable(db, configuredPlugins, pluginId) {
2272
2328
  success: true,
2273
2329
  data: { item: buildPluginInfo(plugin, await stateRepo.enable(pluginId, plugin.version)) }
2274
2330
  };
2331
+ const sandboxed = sandboxedPluginEntries.find((e) => e.id === pluginId);
2332
+ if (sandboxed) return {
2333
+ success: true,
2334
+ data: { item: buildSandboxedPluginInfo(sandboxed, await stateRepo.enable(pluginId, sandboxed.version)) }
2335
+ };
2275
2336
  const existing = await stateRepo.get(pluginId);
2276
2337
  if (!existing || existing.source !== "marketplace" && existing.source !== "registry") return {
2277
2338
  success: false,
@@ -2297,7 +2358,7 @@ async function handlePluginEnable(db, configuredPlugins, pluginId) {
2297
2358
  /**
2298
2359
  * Disable a plugin
2299
2360
  */
2300
- async function handlePluginDisable(db, configuredPlugins, pluginId) {
2361
+ async function handlePluginDisable(db, configuredPlugins, sandboxedPluginEntries, pluginId) {
2301
2362
  try {
2302
2363
  const stateRepo = new PluginStateRepository(db);
2303
2364
  const plugin = configuredPlugins.find((p) => p.id === pluginId);
@@ -2305,6 +2366,11 @@ async function handlePluginDisable(db, configuredPlugins, pluginId) {
2305
2366
  success: true,
2306
2367
  data: { item: buildPluginInfo(plugin, await stateRepo.disable(pluginId, plugin.version)) }
2307
2368
  };
2369
+ const sandboxed = sandboxedPluginEntries.find((e) => e.id === pluginId);
2370
+ if (sandboxed) return {
2371
+ success: true,
2372
+ data: { item: buildSandboxedPluginInfo(sandboxed, await stateRepo.disable(pluginId, sandboxed.version)) }
2373
+ };
2308
2374
  const existing = await stateRepo.get(pluginId);
2309
2375
  if (!existing || existing.source !== "marketplace" && existing.source !== "registry") return {
2310
2376
  success: false,
@@ -4577,4 +4643,4 @@ async function handleRegistryUpdateCheck(db, registryConfigInput) {
4577
4643
 
4578
4644
  //#endregion
4579
4645
  export { handleContentGet as $, handleSchemaFieldCreate as A, handleMediaUpdate as B, handleOrphanedTableList as C, handleSchemaCollectionGet as D, handleSchemaCollectionDelete as E, handleSchemaFieldUpdate as F, handleContentAuthors as G, handleRevisionList as H, handleMediaCreate as I, handleContentCountTrashed as J, handleContentCompare as K, handleMediaDelete as L, handleSchemaFieldGet as M, handleSchemaFieldList as N, handleSchemaCollectionList as O, handleSchemaFieldReorder as P, handleContentDuplicate as Q, handleMediaGet as R, PluginStateRepository as S, handleSchemaCollectionCreate as T, handleRevisionRestore as U, handleRevisionGet as V, generateManifest as W, handleContentDelete as X, handleContentCreate as Y, handleContentDiscardDraft as Z, loadBundleFromR2 as _, handleRegistryUpdateCheck as a, handleContentRestore as at, handlePluginGet as b, validateAggregatorUrl as c, handleContentUnpublish as ct, handleMarketplaceSearch as d, validateRev as dt, handleContentGetIncludingTrashed as et, handleMarketplaceUninstall as f, handleThemeSearch as g, handleThemeGetDetail as h, handleRegistryUpdate as i, handleContentPublish as it, handleSchemaFieldDelete as j, handleSchemaCollectionUpdate as k, handleMarketplaceGetPlugin as l, handleContentUnschedule as lt, handleMarketplaceUpdateCheck as m, handleRegistryInstall as n, handleContentListTrashed as nt, coerceRegistryConfig as o, handleContentSchedule as ot, handleMarketplaceUpdate as p, handleContentCountScheduled as q, handleRegistryUninstall as r, handleContentPermanentDelete as rt, normalizeRegistryConfig as s, handleContentTranslations as st, assertSafeArtifactUrl as t, handleContentList as tt, handleMarketplaceInstall as u, handleContentUpdate as ut, handlePluginDisable as v, handleOrphanedTableRegister as w, handlePluginList as x, handlePluginEnable as y, handleMediaList as z };
4580
- //# sourceMappingURL=api-BMfveMoB.mjs.map
4646
+ //# sourceMappingURL=api-BFURZn1i.mjs.map