emdash 0.33.0 → 0.35.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.
- package/dist/{adapters-BMyNSSZi.d.mts → adapters-Bb1vG41D.d.mts} +33 -2
- package/dist/adapters-Bb1vG41D.d.mts.map +1 -0
- package/dist/{allowed-origins-CG1pACtS.mjs → allowed-origins-DW7sYyqg.mjs} +2 -2
- package/dist/{allowed-origins-CG1pACtS.mjs.map → allowed-origins-DW7sYyqg.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +22 -21
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +6 -5
- package/dist/{api-D2hunekQ.mjs → api-BeBglVxU.mjs} +98 -407
- package/dist/api-BeBglVxU.mjs.map +1 -0
- package/dist/{api-tokens-CSND0i1z.mjs → api-tokens-KO24G1Fd.mjs} +2 -2
- package/dist/{api-tokens-CSND0i1z.mjs.map → api-tokens-KO24G1Fd.mjs.map} +1 -1
- package/dist/{apply-kwNEJW2l.mjs → apply-kUDt80-G.mjs} +131 -107
- package/dist/apply-kUDt80-G.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +163 -49
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +8 -8
- package/dist/astro/middleware/media-usage-write-fence.d.mts +7 -0
- package/dist/astro/middleware/media-usage-write-fence.d.mts.map +1 -0
- package/dist/astro/middleware/media-usage-write-fence.mjs +35 -0
- package/dist/astro/middleware/media-usage-write-fence.mjs.map +1 -0
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +10 -7
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +12 -11
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +1763 -173
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -17
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -17
- package/dist/astro/routes/api/admin/bylines/index.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -13
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -11
- package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -11
- package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +36 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +36 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +15 -14
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +37 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +37 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -0
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -42
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -42
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +9 -8
- package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +9 -8
- package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -9
- package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +13 -12
- package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/index.mjs +10 -9
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/logout.mjs +4 -4
- package/dist/astro/routes/api/auth/magic-link/send.mjs +12 -11
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
- package/dist/astro/routes/api/auth/me.mjs +10 -9
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +9 -8
- package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.mjs +14 -13
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/complete.mjs +13 -12
- package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/request.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +14 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +44 -31
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
- package/dist/astro/routes/api/dashboard.mjs +10 -8
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +4 -4
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +18 -16
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -15
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +14 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +13 -12
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +14 -14
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +18 -16
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +28 -27
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.d.mts.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +174 -72
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +13 -11
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +17 -16
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +16 -15
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
- package/dist/astro/routes/api/media/providers/index.mjs +4 -4
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +18 -15
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/translations.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_.mjs +11 -11
- package/dist/astro/routes/api/menus/index.mjs +11 -11
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
- package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
- package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
- package/dist/astro/routes/api/oauth/token.mjs +7 -7
- package/dist/astro/routes/api/openapi.json.mjs +152 -6
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +8 -7
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +13 -12
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +13 -12
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +18 -17
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +13 -12
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +18 -17
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +10 -9
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -42
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +47 -42
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +13 -13
- package/dist/astro/routes/api/search/index.mjs +12 -12
- package/dist/astro/routes/api/search/rebuild.mjs +13 -13
- package/dist/astro/routes/api/search/stats.mjs +8 -8
- package/dist/astro/routes/api/search/suggest.mjs +12 -12
- package/dist/astro/routes/api/sections/_slug_.mjs +12 -11
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +12 -11
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +14 -13
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +13 -12
- package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +30 -31
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/index.mjs +31 -35
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +5 -5
- package/dist/astro/routes/api/snapshot.mjs +8 -8
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +18 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.d.mts +8 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +46 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_.d.mts +19 -0
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_.mjs +88 -0
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -0
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +6 -6
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -9
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +7 -6
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +4 -4
- package/dist/astro/routes/robots.txt.mjs +7 -6
- package/dist/astro/routes/robots.txt.mjs.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +8 -7
- package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
- package/dist/astro/types.d.mts +35 -17
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{authorize-qRhWQnel.mjs → authorize-DUElxgOQ.mjs} +2 -2
- package/dist/{authorize-qRhWQnel.mjs.map → authorize-DUElxgOQ.mjs.map} +1 -1
- package/dist/{backup-CtA6LDNw.mjs → backup-DWYpJlLj.mjs} +4 -4
- package/dist/{backup-CtA6LDNw.mjs.map → backup-DWYpJlLj.mjs.map} +1 -1
- package/dist/{base64-B-PsqheR.mjs → base64-CvLhUKQv.mjs} +1 -1
- package/dist/{base64-B-PsqheR.mjs.map → base64-CvLhUKQv.mjs.map} +1 -1
- package/dist/bundle-vn56sLos.mjs +663 -0
- package/dist/bundle-vn56sLos.mjs.map +1 -0
- package/dist/{byline-fields-CNc0Yq5i.mjs → byline-fields-txaLGoME.mjs} +2 -2
- package/dist/{byline-fields-CNc0Yq5i.mjs.map → byline-fields-txaLGoME.mjs.map} +1 -1
- package/dist/{byline-registry-ZkPKqEwC.mjs → byline-registry-DDun8sxh.mjs} +2 -2
- package/dist/{byline-registry-ZkPKqEwC.mjs.map → byline-registry-DDun8sxh.mjs.map} +1 -1
- package/dist/{byline-Cp6csL84.mjs → byline-yjvWq4ip.mjs} +5 -5
- package/dist/{byline-Cp6csL84.mjs.map → byline-yjvWq4ip.mjs.map} +1 -1
- package/dist/{bylines-cf-C9lmF.mjs → bylines-Bu7pchQ4.mjs} +5 -5
- package/dist/{bylines-cf-C9lmF.mjs.map → bylines-Bu7pchQ4.mjs.map} +1 -1
- package/dist/{bylines-CEj5CdT4.mjs → bylines-DjXS5p0P.mjs} +7 -7
- package/dist/{bylines-CEj5CdT4.mjs.map → bylines-DjXS5p0P.mjs.map} +1 -1
- package/dist/{cache-C9FptTFR.mjs → cache-C46-3Irl.mjs} +3 -3
- package/dist/{cache-C9FptTFR.mjs.map → cache-C46-3Irl.mjs.map} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs → challenge-store-SIL5DsF2.mjs} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs.map → challenge-store-SIL5DsF2.mjs.map} +1 -1
- package/dist/{chunks-DbYzib_k.mjs → chunks-fiZ8G9RJ.mjs} +2 -2
- package/dist/{chunks-DbYzib_k.mjs.map → chunks-fiZ8G9RJ.mjs.map} +1 -1
- package/dist/cli/index.mjs +655 -677
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +74 -4
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +25 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/collection-deletion-DQPvMD8R.mjs +779 -0
- package/dist/collection-deletion-DQPvMD8R.mjs.map +1 -0
- package/dist/{comment-BIkJ6Fil.mjs → comment-Dxlep6cE.mjs} +2 -2
- package/dist/{comment-BIkJ6Fil.mjs.map → comment-Dxlep6cE.mjs.map} +1 -1
- package/dist/{comment-reaction-D-laEceb.mjs → comment-reaction-D-2J84UE.mjs} +2 -2
- package/dist/{comment-reaction-D-laEceb.mjs.map → comment-reaction-D-2J84UE.mjs.map} +1 -1
- package/dist/{comments-0_w6KChA.mjs → comments-CTfZtLmM.mjs} +3 -3
- package/dist/{comments-0_w6KChA.mjs.map → comments-CTfZtLmM.mjs.map} +1 -1
- package/dist/{components-BPxrRjpE.mjs → components-CQy3lh9x.mjs} +1 -1
- package/dist/{components-BPxrRjpE.mjs.map → components-CQy3lh9x.mjs.map} +1 -1
- package/dist/{config-DyF3OKg_.mjs → config-C3EBstHi.mjs} +18 -2
- package/dist/config-C3EBstHi.mjs.map +1 -0
- package/dist/config-COQzTe5Q.d.mts +34 -0
- package/dist/config-COQzTe5Q.d.mts.map +1 -0
- package/dist/{content-CJ94NEx5.mjs → content-ZHCc1ngN.mjs} +509 -78
- package/dist/content-ZHCc1ngN.mjs.map +1 -0
- package/dist/content-list-query-wJ2WN8Vp.d.mts +26 -0
- package/dist/content-list-query-wJ2WN8Vp.d.mts.map +1 -0
- package/dist/content-refresh-B_8SJzuU.mjs +2560 -0
- package/dist/content-refresh-B_8SJzuU.mjs.map +1 -0
- package/dist/{context-C_1nrqnW.mjs → context-ZldbZcle.mjs} +25 -17
- package/dist/context-ZldbZcle.mjs.map +1 -0
- package/dist/{cron-DRV-UC4K.mjs → cron-Y9aLtgrA.mjs} +1 -1
- package/dist/{cron-DRV-UC4K.mjs.map → cron-Y9aLtgrA.mjs.map} +1 -1
- package/dist/{dashboard-DINnNVVU.mjs → dashboard-DvHbk_cv.mjs} +44 -10
- package/dist/dashboard-DvHbk_cv.mjs.map +1 -0
- package/dist/db/index.d.mts +4 -4
- package/dist/db/index.mjs +31 -8
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql-migrations.d.mts +11 -0
- package/dist/db/libsql-migrations.d.mts.map +1 -0
- package/dist/db/libsql-migrations.mjs +57 -0
- package/dist/db/libsql-migrations.mjs.map +1 -0
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +10 -0
- package/dist/db/postgres-migrations.d.mts.map +1 -0
- package/dist/db/postgres-migrations.mjs +47 -0
- package/dist/db/postgres-migrations.mjs.map +1 -0
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +10 -0
- package/dist/db/sqlite-migrations.d.mts.map +1 -0
- package/dist/db/sqlite-migrations.mjs +28 -0
- package/dist/db/sqlite-migrations.mjs.map +1 -0
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{db-errors-CcWLaRiR.mjs → db-errors-Cl-sKYTm.mjs} +1 -1
- package/dist/{db-errors-CcWLaRiR.mjs.map → db-errors-Cl-sKYTm.mjs.map} +1 -1
- package/dist/{default-BD2FG0xV.mjs → default-DdDl3fxv.mjs} +1 -1
- package/dist/{default-BD2FG0xV.mjs.map → default-DdDl3fxv.mjs.map} +1 -1
- package/dist/{deferred-tasks-C-WRCcKo.d.mts → deferred-tasks-SDWxrgzJ.d.mts} +1 -1
- package/dist/{deferred-tasks-C-WRCcKo.d.mts.map → deferred-tasks-SDWxrgzJ.d.mts.map} +1 -1
- package/dist/{device-flow-CTqd8mud.mjs → device-flow-C0GdD_z8.mjs} +4 -4
- package/dist/{device-flow-CTqd8mud.mjs.map → device-flow-C0GdD_z8.mjs.map} +1 -1
- package/dist/direct-executor-CDXeJCSs.mjs +85 -0
- package/dist/direct-executor-CDXeJCSs.mjs.map +1 -0
- package/dist/dist-D_6CKR8z.mjs +810 -0
- package/dist/dist-D_6CKR8z.mjs.map +1 -0
- package/dist/{email-console-C6WdcWbL.mjs → email-console-BHNjIwiB.mjs} +1 -1
- package/dist/{email-console-C6WdcWbL.mjs.map → email-console-BHNjIwiB.mjs.map} +1 -1
- package/dist/{enrich-CFJJgxs_.mjs → enrich-_ySMEvEE.mjs} +2 -2
- package/dist/{enrich-CFJJgxs_.mjs.map → enrich-_ySMEvEE.mjs.map} +1 -1
- package/dist/{error-oh_9i6bR.mjs → error-DupyJZE2.mjs} +3 -3
- package/dist/{error-oh_9i6bR.mjs.map → error-DupyJZE2.mjs.map} +1 -1
- package/dist/{errors-BucQ8VYz.mjs → errors-CLUPm7aD.mjs} +14 -2
- package/dist/errors-CLUPm7aD.mjs.map +1 -0
- package/dist/{escape-CXps5F_v.mjs → escape-DUY2r2Zs.mjs} +1 -1
- package/dist/{escape-CXps5F_v.mjs.map → escape-DUY2r2Zs.mjs.map} +1 -1
- package/dist/{field-defs-cache-WD82dMQq.mjs → field-defs-cache-BzwBlJrR.mjs} +4 -4
- package/dist/{field-defs-cache-WD82dMQq.mjs.map → field-defs-cache-BzwBlJrR.mjs.map} +1 -1
- package/dist/{fts-manager-BITakW_R.mjs → fts-manager-DyZEohZC.mjs} +76 -50
- package/dist/fts-manager-DyZEohZC.mjs.map +1 -0
- package/dist/{hreflang-BdZuVBhL.mjs → hreflang-BBe83kKa.mjs} +7 -7
- package/dist/{hreflang-BdZuVBhL.mjs.map → hreflang-BBe83kKa.mjs.map} +1 -1
- package/dist/{hreflang-BaLCNcDx.d.mts → hreflang-DwT2E0Sa.d.mts} +2 -2
- package/dist/{hreflang-BaLCNcDx.d.mts.map → hreflang-DwT2E0Sa.d.mts.map} +1 -1
- package/dist/identity-Ys6Dlc9C.mjs +35 -0
- package/dist/identity-Ys6Dlc9C.mjs.map +1 -0
- package/dist/{import-C-9uqyT3.mjs → import-DPkLmeXO.mjs} +5 -5
- package/dist/{import-C-9uqyT3.mjs.map → import-DPkLmeXO.mjs.map} +1 -1
- package/dist/{index-M37iz29I.d.mts → index-BVBZj4-7.d.mts} +236 -104
- package/dist/index-BVBZj4-7.d.mts.map +1 -0
- package/dist/{index-MGw47uWq.d.mts → index-C9KuQyO-.d.mts} +5 -10
- package/dist/index-C9KuQyO-.d.mts.map +1 -0
- package/dist/index.d.mts +21 -19
- package/dist/index.mjs +73 -67
- package/dist/{init-lock-DJkX6Hto.mjs → init-lock-6b309ZrF.mjs} +1 -1
- package/dist/{init-lock-DJkX6Hto.mjs.map → init-lock-6b309ZrF.mjs.map} +1 -1
- package/dist/{load-DV1DZuUJ.mjs → load-YJ2xl3ra.mjs} +2 -2
- package/dist/{load-DV1DZuUJ.mjs.map → load-YJ2xl3ra.mjs.map} +1 -1
- package/dist/{loader-CGugY7Zl.mjs → loader-CdG_Ci3H.mjs} +95 -53
- package/dist/loader-CdG_Ci3H.mjs.map +1 -0
- package/dist/manifest-builder-B252yQUf.mjs +189 -0
- package/dist/manifest-builder-B252yQUf.mjs.map +1 -0
- package/dist/{manifest-schema-Da7kj23y.mjs → manifest-schema-BXbUAHod.mjs} +1 -1
- package/dist/{manifest-schema-Da7kj23y.mjs.map → manifest-schema-BXbUAHod.mjs.map} +1 -1
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +3 -2
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +6 -5
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-OhYL-7Io.mjs → media-BWWWb8kg.mjs} +92 -3
- package/dist/media-BWWWb8kg.mjs.map +1 -0
- package/dist/{media-BP7S-nHT.mjs → media-CzhAn2--.mjs} +2 -2
- package/dist/{media-BP7S-nHT.mjs.map → media-CzhAn2--.mjs.map} +1 -1
- package/dist/{media-allowlist-D-peH1H5.mjs → media-allowlist-D6x-Us02.mjs} +14 -3
- package/dist/media-allowlist-D6x-Us02.mjs.map +1 -0
- package/dist/{media-upload-DtrwU2B0.mjs → media-upload-CHBVn6m-.mjs} +10 -8
- package/dist/{media-upload-DtrwU2B0.mjs.map → media-upload-CHBVn6m-.mjs.map} +1 -1
- package/dist/{media-url-DYs_YLOx.mjs → media-url-BvoX88FA.mjs} +1 -1
- package/dist/{media-url-DYs_YLOx.mjs.map → media-url-BvoX88FA.mjs.map} +1 -1
- package/dist/{media-usage-BlxfTkN0.mjs → media-usage-BZCydfvu.mjs} +137 -60
- package/dist/media-usage-BZCydfvu.mjs.map +1 -0
- package/dist/media-usage-work-CLo_6tct.mjs +152 -0
- package/dist/media-usage-work-CLo_6tct.mjs.map +1 -0
- package/dist/media-usage-work-DrCbqBcl.mjs +424 -0
- package/dist/media-usage-work-DrCbqBcl.mjs.map +1 -0
- package/dist/media-usage-write-fence-aHEgN1zB.mjs +42 -0
- package/dist/media-usage-write-fence-aHEgN1zB.mjs.map +1 -0
- package/dist/{menus-Y54RDPIN.mjs → menus-DSo5QeW0.mjs} +351 -95
- package/dist/menus-DSo5QeW0.mjs.map +1 -0
- package/dist/{menus-BcQWxeXu.mjs → menus-TCNSd2vp.mjs} +3 -3
- package/dist/{menus-BcQWxeXu.mjs.map → menus-TCNSd2vp.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +22 -0
- package/dist/migrations/index.d.mts.map +1 -0
- package/dist/migrations/index.mjs +7 -0
- package/dist/{mode-BWyTBe3I.mjs → mode-BDoH_WcF.mjs} +1 -1
- package/dist/{mode-BWyTBe3I.mjs.map → mode-BDoH_WcF.mjs.map} +1 -1
- package/dist/{normalize-C-SHXmra.mjs → normalize-Bc-s_r-a.mjs} +1 -1
- package/dist/{normalize-C-SHXmra.mjs.map → normalize-Bc-s_r-a.mjs.map} +1 -1
- package/dist/{oauth-authorization-ClvktmrL.mjs → oauth-authorization-iOikmrJd.mjs} +4 -4
- package/dist/{oauth-authorization-ClvktmrL.mjs.map → oauth-authorization-iOikmrJd.mjs.map} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs → oauth-clients-CvI0nHMJ.mjs} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs.map → oauth-clients-CvI0nHMJ.mjs.map} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs → oauth-state-store-Ba8KZlwW.mjs} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs.map → oauth-state-store-Ba8KZlwW.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs → oauth-user-lookup-C5SQwGYC.mjs} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs.map → oauth-user-lookup-C5SQwGYC.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-CA4eVX6P.d.mts → options--hhz-jZ1.d.mts} +4 -3
- package/dist/options--hhz-jZ1.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-CJKNuewM.mjs → parse-DFbuc-Fh.mjs} +2 -2
- package/dist/{parse-CJKNuewM.mjs.map → parse-DFbuc-Fh.mjs.map} +1 -1
- package/dist/{passkey-config-D-zrzMJI.mjs → passkey-config-DFAmUyuE.mjs} +1 -1
- package/dist/{passkey-config-D-zrzMJI.mjs.map → passkey-config-DFAmUyuE.mjs.map} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts → placeholder-Dp0K3RkD.d.mts} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts.map → placeholder-Dp0K3RkD.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +8 -1
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +7 -4
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/policy-TluUIxuu.mjs +45 -0
- package/dist/policy-TluUIxuu.mjs.map +1 -0
- package/dist/{portable-text-B_kqBmXB.mjs → portable-text-imBW5cHK.mjs} +1 -1
- package/dist/{portable-text-B_kqBmXB.mjs.map → portable-text-imBW5cHK.mjs.map} +1 -1
- package/dist/{preview-BU6PaLpM.mjs → preview-PW-nOnq4.mjs} +2 -2
- package/dist/{preview-BU6PaLpM.mjs.map → preview-PW-nOnq4.mjs.map} +1 -1
- package/dist/protocol-DjsJHTlK.d.mts +52 -0
- package/dist/protocol-DjsJHTlK.d.mts.map +1 -0
- package/dist/{public-url-Ox9oOlgp.mjs → public-url-CWoFhQT8.mjs} +1 -1
- package/dist/{public-url-Ox9oOlgp.mjs.map → public-url-CWoFhQT8.mjs.map} +1 -1
- package/dist/{query-rC9HKv1N.mjs → query-BWs7O5Il.mjs} +3 -3
- package/dist/{query-rC9HKv1N.mjs.map → query-BWs7O5Il.mjs.map} +1 -1
- package/dist/{query-C5w7PsRQ.mjs → query-zTVAR1Sl.mjs} +31 -49
- package/dist/query-zTVAR1Sl.mjs.map +1 -0
- package/dist/{rate-limit-kug6q99V.mjs → rate-limit-Bx4g9m3p.mjs} +2 -2
- package/dist/{rate-limit-kug6q99V.mjs.map → rate-limit-Bx4g9m3p.mjs.map} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs → redirect-BgAOGHDq.mjs} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs.map → redirect-BgAOGHDq.mjs.map} +1 -1
- package/dist/{redirect-DIJxXKOG.mjs → redirect-COsS6SWJ.mjs} +2 -2
- package/dist/{redirect-DIJxXKOG.mjs.map → redirect-COsS6SWJ.mjs.map} +1 -1
- package/dist/{redirects-G8wAhWAf.mjs → redirects-DTDHWH31.mjs} +133 -14
- package/dist/redirects-DTDHWH31.mjs.map +1 -0
- package/dist/{redirects-Bzm812bY.mjs → redirects-DyChwDkG.mjs} +4 -4
- package/dist/{redirects-Bzm812bY.mjs.map → redirects-DyChwDkG.mjs.map} +1 -1
- package/dist/registry-Cqa2I749.mjs +1275 -0
- package/dist/registry-Cqa2I749.mjs.map +1 -0
- package/dist/{relation-Cbe3Sd3m.mjs → relation-BnHB0T4J.mjs} +3 -3
- package/dist/{relation-Cbe3Sd3m.mjs.map → relation-BnHB0T4J.mjs.map} +1 -1
- package/dist/{relations-Bw_E1TXo.mjs → relations-BBApI4e2.mjs} +3 -3
- package/dist/{relations-Bw_E1TXo.mjs.map → relations-BBApI4e2.mjs.map} +1 -1
- package/dist/{relations-G2ta7GIl.d.mts → relations-BHo5A8Zf.d.mts} +367 -33
- package/dist/relations-BHo5A8Zf.d.mts.map +1 -0
- package/dist/{relations-qHwpUe66.mjs → relations-D5sM5fW0.mjs} +6 -6
- package/dist/{relations-qHwpUe66.mjs.map → relations-D5sM5fW0.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-Df-jFbAd.mjs → request-meta-DgZJh3zG.mjs} +2 -2
- package/dist/{request-meta-Df-jFbAd.mjs.map → request-meta-DgZJh3zG.mjs.map} +1 -1
- package/dist/{resolve-DZzG4HqM.mjs → resolve-DOhVEvty.mjs} +2 -2
- package/dist/{resolve-DZzG4HqM.mjs.map → resolve-DOhVEvty.mjs.map} +1 -1
- package/dist/{runner-BaADli8l.d.mts → runner-BYHZn3Jy.d.mts} +16 -3
- package/dist/runner-BYHZn3Jy.d.mts.map +1 -0
- package/dist/{runner-BFTrkYhu.mjs → runner-C1T11CfC.mjs} +1190 -257
- package/dist/runner-C1T11CfC.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +4 -3
- package/dist/runtime.mjs.map +1 -1
- package/dist/schema-2AOsSn2v.mjs +390 -0
- package/dist/schema-2AOsSn2v.mjs.map +1 -0
- package/dist/{schema-CiQXr6_F.mjs → schema-DZ5YVVZj.mjs} +3 -3
- package/dist/{schema-CiQXr6_F.mjs.map → schema-DZ5YVVZj.mjs.map} +1 -1
- package/dist/{scopes-CNJVT5i5.mjs → scopes-8ClPF2bC.mjs} +3 -3
- package/dist/{scopes-CNJVT5i5.mjs.map → scopes-8ClPF2bC.mjs.map} +1 -1
- package/dist/{search-FZhx5dDU.mjs → search-u1QYdOCG.mjs} +25 -15
- package/dist/search-u1QYdOCG.mjs.map +1 -0
- package/dist/{secrets-DLd8RXee.mjs → secrets-BEgsAQEU.mjs} +3 -3
- package/dist/{secrets-DLd8RXee.mjs.map → secrets-BEgsAQEU.mjs.map} +1 -1
- package/dist/{sections-BrIrMUCn.mjs → sections-DmHviGyM.mjs} +3 -3
- package/dist/{sections-BrIrMUCn.mjs.map → sections-DmHviGyM.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +24 -22
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +16 -15
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-CobNfOvb.mjs → seo-AFpVvTqr.mjs} +5 -3
- package/dist/seo-AFpVvTqr.mjs.map +1 -0
- package/dist/{seo-DTHRntNC.mjs → seo-Dq4G-RrO.mjs} +2 -2
- package/dist/{seo-DTHRntNC.mjs.map → seo-Dq4G-RrO.mjs.map} +1 -1
- package/dist/{service-B-pYGPgR.mjs → service-BpArayPr.mjs} +3 -3
- package/dist/{service-B-pYGPgR.mjs.map → service-BpArayPr.mjs.map} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs → session-user-BEorKVT-.mjs} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs.map → session-user-BEorKVT-.mjs.map} +1 -1
- package/dist/{settings-DPHau-WH.mjs → settings-DE9xtzqd.mjs} +3 -3
- package/dist/{settings-DPHau-WH.mjs.map → settings-DE9xtzqd.mjs.map} +1 -1
- package/dist/{settings-kJhGiQ4z.mjs → settings-xRdoUZr0.mjs} +4 -4
- package/dist/{settings-kJhGiQ4z.mjs.map → settings-xRdoUZr0.mjs.map} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs → setup-complete-BnT8pq_C.mjs} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs.map → setup-complete-BnT8pq_C.mjs.map} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs → setup-nonce-CBitf_oQ.mjs} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs.map → setup-nonce-CBitf_oQ.mjs.map} +1 -1
- package/dist/{single-flight-cache-DW3w11Pu.mjs → single-flight-cache-B0eLKS6K.mjs} +2 -2
- package/dist/{single-flight-cache-DW3w11Pu.mjs.map → single-flight-cache-B0eLKS6K.mjs.map} +1 -1
- package/dist/{site-url-I-lJ5kma.mjs → site-url-DjpIXMXJ.mjs} +2 -2
- package/dist/{site-url-I-lJ5kma.mjs.map → site-url-DjpIXMXJ.mjs.map} +1 -1
- package/dist/slugify-B994zkXC.mjs +17 -0
- package/dist/slugify-B994zkXC.mjs.map +1 -0
- package/dist/{snapshot-I_fjLDaD.mjs → snapshot-BBlGkb2q.mjs} +1 -1
- package/dist/{snapshot-I_fjLDaD.mjs.map → snapshot-BBlGkb2q.mjs.map} +1 -1
- package/dist/{ssrf-CTa6v21i.mjs → ssrf-Cpvg_n3A.mjs} +1 -1
- package/dist/{ssrf-CTa6v21i.mjs.map → ssrf-Cpvg_n3A.mjs.map} +1 -1
- package/dist/{state-CQvoefYP.mjs → state-DYwPue40.mjs} +1 -1
- package/dist/{state-CQvoefYP.mjs.map → state-DYwPue40.mjs.map} +1 -1
- package/dist/{status-CIsmlC1E.mjs → status-CWVYpbD8.mjs} +1 -1
- package/dist/{status-CIsmlC1E.mjs.map → status-CWVYpbD8.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +3 -3
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/target-DixqqV5i.mjs +27 -0
- package/dist/target-DixqqV5i.mjs.map +1 -0
- package/dist/{taxonomies-CLN1N92E.mjs → taxonomies-BlrncHi9.mjs} +75 -64
- package/dist/taxonomies-BlrncHi9.mjs.map +1 -0
- package/dist/{taxonomies-CKuaZER5.mjs → taxonomies-OHUIiIpI.mjs} +280 -56
- package/dist/taxonomies-OHUIiIpI.mjs.map +1 -0
- package/dist/{taxonomy-pOrB2kZe.mjs → taxonomy-BqCZ1TdU.mjs} +131 -78
- package/dist/taxonomy-BqCZ1TdU.mjs.map +1 -0
- package/dist/{tokens-DagaJGK8.mjs → tokens-C39klX8R.mjs} +2 -2
- package/dist/{tokens-DagaJGK8.mjs.map → tokens-C39klX8R.mjs.map} +1 -1
- package/dist/{transport-DVsa5YYo.mjs → transport-DBJwa-Si.mjs} +1 -1
- package/dist/{transport-DVsa5YYo.mjs.map → transport-DBJwa-Si.mjs.map} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts → transport-RQE36APG.d.mts} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts.map → transport-RQE36APG.d.mts.map} +1 -1
- package/dist/{trusted-proxy-D20_7fyX.mjs → trusted-proxy-CEVekpby.mjs} +1 -1
- package/dist/{trusted-proxy-D20_7fyX.mjs.map → trusted-proxy-CEVekpby.mjs.map} +1 -1
- package/dist/{types-NBI3rF-_.mjs → types-75KIqzL9.mjs} +18 -2
- package/dist/types-75KIqzL9.mjs.map +1 -0
- package/dist/{types-BjxTKxrZ.mjs → types-BW1syrlw.mjs} +1 -1
- package/dist/{types-BjxTKxrZ.mjs.map → types-BW1syrlw.mjs.map} +1 -1
- package/dist/{types-DLG4IFEQ.d.mts → types-BcqdcT-r.d.mts} +1 -1
- package/dist/{types-DLG4IFEQ.d.mts.map → types-BcqdcT-r.d.mts.map} +1 -1
- package/dist/{types-LoagAGzH.d.mts → types-BntycPTF.d.mts} +1 -1
- package/dist/{types-LoagAGzH.d.mts.map → types-BntycPTF.d.mts.map} +1 -1
- package/dist/{types-BnFP1M3J.d.mts → types-C2pMvO62.d.mts} +32 -10
- package/dist/types-C2pMvO62.d.mts.map +1 -0
- package/dist/{types-Cd8iuS1J.mjs → types-CQPWhPxE.mjs} +9 -12
- package/dist/types-CQPWhPxE.mjs.map +1 -0
- package/dist/{types-C8oz_ayJ.d.mts → types-CXnOzDe1.d.mts} +1 -1
- package/dist/{types-C8oz_ayJ.d.mts.map → types-CXnOzDe1.d.mts.map} +1 -1
- package/dist/types-CtzytVXn.mjs.map +1 -1
- package/dist/{types-BGWPMiBO.d.mts → types-DN64_zzZ.d.mts} +44 -5
- package/dist/types-DN64_zzZ.d.mts.map +1 -0
- package/dist/{types-Dc4ntQjQ.d.mts → types-DQIDRKF2.d.mts} +124 -1
- package/dist/types-DQIDRKF2.d.mts.map +1 -0
- package/dist/{types-CbUcuxxc.d.mts → types-DWRhk9xZ.d.mts} +1 -1
- package/dist/{types-CbUcuxxc.d.mts.map → types-DWRhk9xZ.d.mts.map} +1 -1
- package/dist/{types-BK6U01Ro.d.mts → types-Dfk8KI5R.d.mts} +1 -1
- package/dist/{types-BK6U01Ro.d.mts.map → types-Dfk8KI5R.d.mts.map} +1 -1
- package/dist/{types-Cz8hNch2.d.mts → types-DrJrVCT1.d.mts} +25 -5
- package/dist/types-DrJrVCT1.d.mts.map +1 -0
- package/dist/{upload-attempts-D8QAFLUJ.mjs → upload-attempts-D4FS8LT6.mjs} +1 -1
- package/dist/{upload-attempts-D8QAFLUJ.mjs.map → upload-attempts-D4FS8LT6.mjs.map} +1 -1
- package/dist/url-pattern-BHS0V5Ng.mjs +33 -0
- package/dist/url-pattern-BHS0V5Ng.mjs.map +1 -0
- package/dist/{user-DBrq4UVq.mjs → user-DJZfUJVE.mjs} +3 -3
- package/dist/{user-DBrq4UVq.mjs.map → user-DJZfUJVE.mjs.map} +1 -1
- package/dist/{utils-hLzi_2Fn.mjs → utils-D4vD_Y98.mjs} +3 -3
- package/dist/{utils-hLzi_2Fn.mjs.map → utils-D4vD_Y98.mjs.map} +1 -1
- package/dist/{validate-mKo3RxBM.mjs → validate-BMLBvxOC.mjs} +24 -5
- package/dist/validate-BMLBvxOC.mjs.map +1 -0
- package/dist/{validate-C3oSmA7F.d.mts → validate-CTqt5nuE.d.mts} +15 -7
- package/dist/validate-CTqt5nuE.d.mts.map +1 -0
- package/dist/{validation-BgpucsvF.mjs → validation-npvENUCB.mjs} +11 -10
- package/dist/{validation-BgpucsvF.mjs.map → validation-npvENUCB.mjs.map} +1 -1
- package/dist/version-DB_fqCSI.mjs +7 -0
- package/dist/{version-C4PnpmoV.mjs.map → version-DB_fqCSI.mjs.map} +1 -1
- package/dist/{widgets-CJJtkiKh.mjs → widgets-BD3ho7Rq.mjs} +3 -3
- package/dist/{widgets-CJJtkiKh.mjs.map → widgets-BD3ho7Rq.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs → wxr-taxonomies-B1R3vBoD.mjs} +13 -32
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs.map → wxr-taxonomies-B1R3vBoD.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts → wxr-taxonomies-Ca68766D.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts.map → wxr-taxonomies-Ca68766D.d.mts.map} +1 -1
- package/dist/{zod-generator-CG64Hnbh.mjs → zod-generator-LC-on_Vb.mjs} +52 -5
- package/dist/zod-generator-LC-on_Vb.mjs.map +1 -0
- package/package.json +32 -8
- package/src/api/errors.ts +12 -0
- package/src/api/handlers/content.ts +127 -29
- package/src/api/handlers/dashboard.ts +12 -2
- package/src/api/handlers/index.ts +16 -0
- package/src/api/handlers/manifest.ts +2 -0
- package/src/api/handlers/media-allowlist.ts +13 -2
- package/src/api/handlers/media-usage-work.ts +188 -0
- package/src/api/handlers/media-usage.ts +5 -3
- package/src/api/handlers/schema.ts +9 -3
- package/src/api/handlers/seo.ts +5 -2
- package/src/api/handlers/taxonomies.ts +345 -82
- package/src/api/media-usage-write-fence.ts +64 -0
- package/src/api/openapi/document.ts +199 -0
- package/src/api/schemas/common.ts +3 -1
- package/src/api/schemas/content.ts +122 -1
- package/src/api/schemas/media-usage.ts +133 -0
- package/src/api/schemas/schema.ts +78 -3
- package/src/api/schemas/taxonomies.ts +40 -8
- package/src/api/types.ts +1 -0
- package/src/astro/integration/index.ts +101 -56
- package/src/astro/integration/routes.ts +34 -4
- package/src/astro/integration/runtime.ts +18 -0
- package/src/astro/integration/virtual-modules.ts +25 -1
- package/src/astro/integration/vite-config.ts +16 -1
- package/src/astro/middleware/media-usage-write-fence.ts +30 -0
- package/src/astro/middleware/redirect.ts +12 -2
- package/src/astro/middleware/scoped-db.ts +21 -0
- package/src/astro/middleware.ts +140 -16
- package/src/astro/routes/api/admin/media-usage/collection-deletions/index.ts +22 -0
- package/src/astro/routes/api/admin/media-usage/collection-deletions/retry.ts +22 -0
- package/src/astro/routes/api/admin/media-usage/work/index.ts +26 -0
- package/src/astro/routes/api/admin/media-usage/work/retry.ts +26 -0
- package/src/astro/routes/api/admin/plugins/[id]/disable.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/enable.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
- package/src/astro/routes/api/auth/dev-bypass.ts +0 -4
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +67 -31
- package/src/astro/routes/api/import/wordpress/execute.ts +3 -10
- package/src/astro/routes/api/mcp.ts +1 -0
- package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +7 -1
- package/src/astro/routes/api/schema/collections/[slug]/index.ts +1 -7
- package/src/astro/routes/api/setup/dev-bypass.ts +2 -7
- package/src/astro/routes/api/setup/index.ts +5 -13
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +1 -0
- package/src/astro/routes/api/taxonomies/[name]/translations.ts +48 -0
- package/src/astro/routes/api/taxonomies/[name].ts +102 -0
- package/src/astro/types.ts +25 -4
- package/src/cleanup.ts +6 -12
- package/src/cli/commands/doctor.ts +193 -6
- package/src/cli/commands/export-seed.ts +4 -1
- package/src/cli/commands/migrate.ts +593 -0
- package/src/cli/index.ts +2 -23
- package/src/client/index.ts +119 -0
- package/src/components/Block.astro +12 -0
- package/src/components/InlinePortableTextEditor.tsx +89 -1
- package/src/content/converters/mark-safety.ts +120 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +25 -16
- package/src/content/converters/prosemirror-to-portable-text.ts +12 -2
- package/src/content-list-query.ts +29 -0
- package/src/database/index.ts +8 -2
- package/src/database/migrations/060_collection_admin_config.ts +16 -0
- package/src/database/migrations/061_media_usage_cleanup.ts +77 -0
- package/src/database/migrations/062_media_usage_cleanup_fence.ts +295 -0
- package/src/database/migrations/063_media_usage_incremental_work.ts +397 -0
- package/src/database/migrations/064_fts_plain_text.ts +253 -0
- package/src/database/migrations/065_media_usage_collection_deletion.ts +85 -0
- package/src/database/migrations/066_media_usage_reconciliation.ts +115 -0
- package/src/database/migrations/067_indexed_content_fields.ts +39 -0
- package/src/database/migrations/068_content_taxonomy_entry_groups.ts +61 -0
- package/src/database/migrations/069_collection_title_date_fields.ts +45 -0
- package/src/database/migrations/070_collection_routable.ts +18 -0
- package/src/database/migrations/policy.ts +70 -0
- package/src/database/migrations/runner.ts +71 -3
- package/src/database/repositories/content.ts +861 -96
- package/src/database/repositories/media-usage-work.ts +848 -0
- package/src/database/repositories/media-usage.ts +1502 -138
- package/src/database/repositories/revision.ts +17 -6
- package/src/database/repositories/taxonomy.ts +234 -103
- package/src/database/repositories/types.ts +51 -2
- package/src/database/types.ts +134 -16
- package/src/db/adapters.ts +78 -2
- package/src/db/index.ts +6 -1
- package/src/db/libsql-migrations.ts +72 -0
- package/src/db/postgres-migrations.ts +59 -0
- package/src/db/sqlite-migrations.ts +37 -0
- package/src/emdash-runtime.ts +271 -35
- package/src/fields/file.ts +7 -4
- package/src/fields/image.ts +8 -1
- package/src/fields/types.ts +18 -5
- package/src/i18n/config.ts +32 -0
- package/src/i18n/normalize.ts +31 -0
- package/src/i18n/repair-locale-casing.ts +0 -14
- package/src/i18n/taxonomy-locale-diagnostic.ts +47 -0
- package/src/import/wxr-taxonomies.ts +7 -47
- package/src/index.ts +32 -3
- package/src/loader.ts +119 -65
- package/src/mcp/server.ts +242 -34
- package/src/media/usage/activation.ts +626 -0
- package/src/media/usage/capture-triggers.ts +543 -0
- package/src/media/usage/cleanup.ts +305 -0
- package/src/media/usage/collection-deletion-processor.ts +356 -0
- package/src/media/usage/collection-deletion.ts +836 -0
- package/src/media/usage/content-fields.ts +40 -3
- package/src/media/usage/content-refresh.ts +356 -47
- package/src/media/usage/content-repair.ts +180 -61
- package/src/media/usage/content-snapshots.ts +85 -105
- package/src/media/usage/projection-fingerprint.ts +129 -0
- package/src/media/usage/reconciliation-processor.ts +372 -0
- package/src/media/usage/reconciliation.ts +1117 -0
- package/src/media/usage/source-key.ts +4 -0
- package/src/media/usage/types.ts +2 -0
- package/src/media/usage/work-processor.ts +248 -0
- package/src/menus/index.ts +246 -141
- package/src/migrations/config-loader.ts +205 -0
- package/src/migrations/direct-executor.ts +141 -0
- package/src/migrations/identity.ts +46 -0
- package/src/migrations/index.ts +19 -0
- package/src/migrations/integration-metadata.ts +67 -0
- package/src/migrations/manifest-builder.ts +55 -0
- package/src/migrations/manifest-writer.ts +63 -0
- package/src/migrations/manifest.ts +197 -0
- package/src/migrations/protocol.ts +59 -0
- package/src/migrations/target.ts +35 -0
- package/src/plugin-types.ts +8 -0
- package/src/plugins/adapt-sandbox-entry.ts +24 -5
- package/src/plugins/context.ts +24 -7
- package/src/plugins/index.ts +9 -0
- package/src/plugins/routes.ts +43 -1
- package/src/plugins/sandbox/index.ts +10 -1
- package/src/plugins/sandbox/types.ts +78 -1
- package/src/plugins/scheduler/node.ts +13 -1
- package/src/plugins/scheduler/types.ts +2 -0
- package/src/plugins/types.ts +39 -2
- package/src/query.ts +29 -37
- package/src/scheduler-health.ts +46 -0
- package/src/schema/registry.ts +777 -255
- package/src/schema/types.ts +50 -8
- package/src/schema/url-pattern.ts +33 -0
- package/src/schema/zod-generator.ts +77 -5
- package/src/search/fts-manager.ts +117 -76
- package/src/search/query.ts +32 -11
- package/src/search/types.ts +2 -0
- package/src/seed/apply.ts +68 -15
- package/src/seed/types.ts +11 -3
- package/src/seed/validate.ts +52 -2
- package/src/taxonomies/index.ts +77 -75
- package/src/taxonomies/term-counts.ts +21 -8
- package/src/utils/slugify.ts +1 -29
- package/src/virtual-modules.d.ts +24 -0
- package/dist/adapters-BMyNSSZi.d.mts.map +0 -1
- package/dist/api-D2hunekQ.mjs.map +0 -1
- package/dist/apply-kwNEJW2l.mjs.map +0 -1
- package/dist/config-DyF3OKg_.mjs.map +0 -1
- package/dist/content-CJ94NEx5.mjs.map +0 -1
- package/dist/content-refresh-Xw7aKmou.mjs +0 -1629
- package/dist/content-refresh-Xw7aKmou.mjs.map +0 -1
- package/dist/context-C_1nrqnW.mjs.map +0 -1
- package/dist/dashboard-DINnNVVU.mjs.map +0 -1
- package/dist/errors-BucQ8VYz.mjs.map +0 -1
- package/dist/fts-manager-BITakW_R.mjs.map +0 -1
- package/dist/index-M37iz29I.d.mts.map +0 -1
- package/dist/index-MGw47uWq.d.mts.map +0 -1
- package/dist/loader-CGugY7Zl.mjs.map +0 -1
- package/dist/media-OhYL-7Io.mjs.map +0 -1
- package/dist/media-allowlist-D-peH1H5.mjs.map +0 -1
- package/dist/media-usage-BlxfTkN0.mjs.map +0 -1
- package/dist/menus-Y54RDPIN.mjs.map +0 -1
- package/dist/options-CA4eVX6P.d.mts.map +0 -1
- package/dist/query-C5w7PsRQ.mjs.map +0 -1
- package/dist/redirects-G8wAhWAf.mjs.map +0 -1
- package/dist/registry-Dbodb4Uo.mjs +0 -840
- package/dist/registry-Dbodb4Uo.mjs.map +0 -1
- package/dist/relations-G2ta7GIl.d.mts.map +0 -1
- package/dist/runner-BFTrkYhu.mjs.map +0 -1
- package/dist/runner-BaADli8l.d.mts.map +0 -1
- package/dist/search-FZhx5dDU.mjs.map +0 -1
- package/dist/seo-CobNfOvb.mjs.map +0 -1
- package/dist/slugify-C_tqlU4G.mjs +0 -30
- package/dist/slugify-C_tqlU4G.mjs.map +0 -1
- package/dist/taxonomies-CKuaZER5.mjs.map +0 -1
- package/dist/taxonomies-CLN1N92E.mjs.map +0 -1
- package/dist/taxonomy-pOrB2kZe.mjs.map +0 -1
- package/dist/types-BGWPMiBO.d.mts.map +0 -1
- package/dist/types-BnFP1M3J.d.mts.map +0 -1
- package/dist/types-Cd8iuS1J.mjs.map +0 -1
- package/dist/types-Cz8hNch2.d.mts.map +0 -1
- package/dist/types-Dc4ntQjQ.d.mts.map +0 -1
- package/dist/types-NBI3rF-_.mjs.map +0 -1
- package/dist/validate-C3oSmA7F.d.mts.map +0 -1
- package/dist/validate-mKo3RxBM.mjs.map +0 -1
- package/dist/version-C4PnpmoV.mjs +0 -7
- package/dist/zod-generator-CG64Hnbh.mjs.map +0 -1
- /package/dist/{api-tokens-Dai9dND0.mjs → api-tokens-rIXC6LdE.mjs} +0 -0
- /package/dist/{ssrf-Cj568Dgs.mjs → ssrf-DpXgKsna.mjs} +0 -0
- /package/dist/{types-DKuWPYV5.mjs → types-CP1CflWf.mjs} +0 -0
|
@@ -48,10 +48,13 @@ import {
|
|
|
48
48
|
RESOLVED_VIRTUAL_SCHEDULER_ID,
|
|
49
49
|
VIRTUAL_ENV_ID,
|
|
50
50
|
RESOLVED_VIRTUAL_ENV_ID,
|
|
51
|
+
VIRTUAL_BUILD_ID,
|
|
52
|
+
RESOLVED_VIRTUAL_BUILD_ID,
|
|
51
53
|
generateSeedModule,
|
|
52
54
|
generateWaitUntilModule,
|
|
53
55
|
generateSchedulerModule,
|
|
54
56
|
generateEnvModule,
|
|
57
|
+
generateBuildModule,
|
|
55
58
|
generateConfigModule,
|
|
56
59
|
generateDialectModule,
|
|
57
60
|
generateStorageModule,
|
|
@@ -179,6 +182,11 @@ export function createVirtualModulesPlugin(
|
|
|
179
182
|
|
|
180
183
|
let viteCommand: "build" | "serve" | undefined;
|
|
181
184
|
|
|
185
|
+
// Captured once per plugin instance rather than inside load(): Vite may load
|
|
186
|
+
// the module more than once (client and server passes, dev reloads), and a
|
|
187
|
+
// validator that moved between those loads would invalidate at random.
|
|
188
|
+
const buildTime = Date.now();
|
|
189
|
+
|
|
182
190
|
return {
|
|
183
191
|
name: "emdash-virtual-modules",
|
|
184
192
|
configResolved(config) {
|
|
@@ -233,6 +241,9 @@ export function createVirtualModulesPlugin(
|
|
|
233
241
|
if (id === VIRTUAL_ENV_ID) {
|
|
234
242
|
return RESOLVED_VIRTUAL_ENV_ID;
|
|
235
243
|
}
|
|
244
|
+
if (id === VIRTUAL_BUILD_ID) {
|
|
245
|
+
return RESOLVED_VIRTUAL_BUILD_ID;
|
|
246
|
+
}
|
|
236
247
|
},
|
|
237
248
|
load(id: string) {
|
|
238
249
|
if (id === RESOLVED_VIRTUAL_CONFIG_ID) {
|
|
@@ -246,6 +257,8 @@ export function createVirtualModulesPlugin(
|
|
|
246
257
|
type: resolvedConfig.database?.type,
|
|
247
258
|
supportsRequestScope: resolvedConfig.database?.supportsRequestScope ?? false,
|
|
248
259
|
supportsCoalescing: resolvedConfig.database?.supportsCoalescing ?? false,
|
|
260
|
+
supportsCollectionDeletionGuard:
|
|
261
|
+
resolvedConfig.database?.supportsCollectionDeletionGuard ?? false,
|
|
249
262
|
});
|
|
250
263
|
}
|
|
251
264
|
// Generate a module that statically imports the configured storage
|
|
@@ -333,6 +346,9 @@ export function createVirtualModulesPlugin(
|
|
|
333
346
|
if (id === RESOLVED_VIRTUAL_ENV_ID) {
|
|
334
347
|
return generateEnvModule(astroConfig.adapter?.name);
|
|
335
348
|
}
|
|
349
|
+
if (id === RESOLVED_VIRTUAL_BUILD_ID) {
|
|
350
|
+
return generateBuildModule(buildTime);
|
|
351
|
+
}
|
|
336
352
|
},
|
|
337
353
|
};
|
|
338
354
|
}
|
|
@@ -478,7 +494,6 @@ export function createViteConfig(
|
|
|
478
494
|
"emdash > @unpic/placeholder",
|
|
479
495
|
"emdash > blurhash",
|
|
480
496
|
"emdash > croner",
|
|
481
|
-
"emdash > image-size",
|
|
482
497
|
"emdash > jose",
|
|
483
498
|
"emdash > jpeg-js",
|
|
484
499
|
"emdash > kysely",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineMiddleware } from "astro:middleware";
|
|
2
|
+
|
|
3
|
+
import { checkMediaUsageActivationWriteFence } from "#api/media-usage-write-fence.js";
|
|
4
|
+
|
|
5
|
+
const FENCED_WRITE_PATHS = [
|
|
6
|
+
"/_emdash/api/content",
|
|
7
|
+
"/_emdash/api/schema",
|
|
8
|
+
"/_emdash/api/admin/media-usage/repair",
|
|
9
|
+
"/_emdash/api/revisions",
|
|
10
|
+
"/_emdash/api/import",
|
|
11
|
+
"/_emdash/api/mcp",
|
|
12
|
+
] as const;
|
|
13
|
+
|
|
14
|
+
const SAFE_METHODS = new Set(["GET", "HEAD", "OPTIONS"]);
|
|
15
|
+
|
|
16
|
+
export const onRequest = defineMiddleware(async (context, next) => {
|
|
17
|
+
if (!isFencedWriteRequest(context.request.method, context.url.pathname)) return next();
|
|
18
|
+
const db = context.locals.emdash?.db;
|
|
19
|
+
if (!db) return next();
|
|
20
|
+
return (await checkMediaUsageActivationWriteFence(db)) ?? next();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
function isFencedWriteRequest(method: string, pathname: string): boolean {
|
|
24
|
+
if (SAFE_METHODS.has(method.toUpperCase())) return false;
|
|
25
|
+
return FENCED_WRITE_PATHS.some(
|
|
26
|
+
(prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default onRequest;
|
|
@@ -104,8 +104,18 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
104
104
|
// No redirect matched -- proceed and check for 404
|
|
105
105
|
const response = await next();
|
|
106
106
|
|
|
107
|
-
// Log
|
|
108
|
-
|
|
107
|
+
// Log misses (fire-and-forget) under the path the visitor requested.
|
|
108
|
+
// Two shapes count as a miss: an unmatched route rendering the error
|
|
109
|
+
// page with status 404, and a matched route answering a content miss
|
|
110
|
+
// with a redirect to /404 (the documented template pattern) — there the
|
|
111
|
+
// missed path exists only on this first pass, before the browser
|
|
112
|
+
// follows the redirect. The error page itself is never logged: /404
|
|
113
|
+
// answers 404 by design and carries no path information.
|
|
114
|
+
const location = response.headers.get("location");
|
|
115
|
+
const missedByRedirect =
|
|
116
|
+
isRedirectCode(response.status) && (location === "/404" || location === "/404/");
|
|
117
|
+
const missedDirectly = response.status === 404 && pathname !== "/404" && pathname !== "/404/";
|
|
118
|
+
if (missedDirectly || missedByRedirect) {
|
|
109
119
|
const referrer = context.request.headers.get("referer") ?? null;
|
|
110
120
|
const userAgent = context.request.headers.get("user-agent") ?? null;
|
|
111
121
|
repo
|
|
@@ -24,6 +24,27 @@ interface ScopedDbLifecycle {
|
|
|
24
24
|
close?: () => void;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Whether the request ended authenticated, for the db adapter's `commit()`.
|
|
29
|
+
* `isAuthenticated` is captured before the route runs, so it misses
|
|
30
|
+
* login/signup/invite requests that create the Astro session mid-request;
|
|
31
|
+
* `session.set()` writes the `astro-session` cookie into the jar synchronously,
|
|
32
|
+
* so scanning the outgoing cookies detects them. Only outgoing cookies count —
|
|
33
|
+
* a stale `astro-session` cookie arriving on an anonymous render must not
|
|
34
|
+
* qualify, or its replica-read bookmark would overwrite a fresher one from an
|
|
35
|
+
* earlier authenticated write.
|
|
36
|
+
*/
|
|
37
|
+
export function requestEndedAuthenticated(
|
|
38
|
+
isAuthenticated: boolean,
|
|
39
|
+
cookies: { headers(): Iterable<string> },
|
|
40
|
+
): boolean {
|
|
41
|
+
if (isAuthenticated) return true;
|
|
42
|
+
for (const header of cookies.headers()) {
|
|
43
|
+
if (header.startsWith("astro-session=")) return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
27
48
|
/** Hold the real adapter close behind both response and deferred-task completion. */
|
|
28
49
|
export function coordinateScopedDbLifecycle(scoped: ScopedDbLifecycle): {
|
|
29
50
|
closed?: Promise<void>;
|
package/src/astro/middleware.ts
CHANGED
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
* All heavy lifting happens in EmDashRuntime.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import type { APIContext } from "astro";
|
|
8
9
|
import { defineMiddleware } from "astro:middleware";
|
|
9
10
|
import type { Kysely } from "kysely";
|
|
10
11
|
// Import from virtual modules (populated by integration at build time)
|
|
11
12
|
// @ts-ignore - virtual module
|
|
13
|
+
import { buildTime as virtualBuildTime } from "virtual:emdash/build";
|
|
14
|
+
// @ts-ignore - virtual module
|
|
12
15
|
import virtualConfig from "virtual:emdash/config";
|
|
13
16
|
// @ts-ignore - virtual module
|
|
14
17
|
import {
|
|
@@ -36,9 +39,16 @@ import {
|
|
|
36
39
|
flushRecorder,
|
|
37
40
|
isInstrumentationEnabled,
|
|
38
41
|
} from "../database/instrumentation.js";
|
|
42
|
+
import {
|
|
43
|
+
PendingMigrationsError,
|
|
44
|
+
resolveRuntimeMigrationMode,
|
|
45
|
+
type RuntimeMigrationMode,
|
|
46
|
+
} from "../database/migrations/policy.js";
|
|
47
|
+
import { createDeferredTaskTracker } from "../deferred-tasks.js";
|
|
39
48
|
import {
|
|
40
49
|
DB_INIT_DEADLINE_MS,
|
|
41
50
|
EmDashRuntime,
|
|
51
|
+
type MediaUsageMaintenanceResult,
|
|
42
52
|
type RuntimeDependencies,
|
|
43
53
|
type SandboxedPluginEntry,
|
|
44
54
|
type MediaProviderEntry,
|
|
@@ -65,6 +75,7 @@ import {
|
|
|
65
75
|
ASTRO_COOKIES_SYMBOL,
|
|
66
76
|
coordinateScopedDbLifecycle,
|
|
67
77
|
finishScoped,
|
|
78
|
+
requestEndedAuthenticated,
|
|
68
79
|
} from "./middleware/scoped-db.js";
|
|
69
80
|
import { wrapBodyForStreamMetrics } from "./middleware/stream-end-metrics.js";
|
|
70
81
|
import { prefetchLayoutData } from "./prefetch.js";
|
|
@@ -187,7 +198,10 @@ function getPlugins(): ResolvedPlugin[] {
|
|
|
187
198
|
/**
|
|
188
199
|
* Build runtime dependencies from virtual modules
|
|
189
200
|
*/
|
|
190
|
-
function buildDependencies(
|
|
201
|
+
function buildDependencies(
|
|
202
|
+
config: EmDashConfig,
|
|
203
|
+
migrationMode: RuntimeMigrationMode,
|
|
204
|
+
): RuntimeDependencies {
|
|
191
205
|
/* eslint-disable typescript-eslint/no-unsafe-type-assertion --
|
|
192
206
|
The virtual:emdash/* imports above use @ts-ignore because tsgo/IDE
|
|
193
207
|
resolution can't see virtual-modules.d.ts in every consumer setup,
|
|
@@ -197,6 +211,7 @@ function buildDependencies(config: EmDashConfig): RuntimeDependencies {
|
|
|
197
211
|
const sandboxModule = virtualSandboxRunnerModule as Record<string, unknown>;
|
|
198
212
|
return {
|
|
199
213
|
config,
|
|
214
|
+
migrationMode,
|
|
200
215
|
plugins: getPlugins(),
|
|
201
216
|
createDialect: virtualCreateDialect as (config: Record<string, unknown>) => unknown,
|
|
202
217
|
// Optional: only batching backends (D1, DO) export this; undefined otherwise.
|
|
@@ -224,6 +239,7 @@ function buildDependencies(config: EmDashConfig): RuntimeDependencies {
|
|
|
224
239
|
*/
|
|
225
240
|
async function getRuntime(
|
|
226
241
|
config: EmDashConfig,
|
|
242
|
+
migrationMode: RuntimeMigrationMode,
|
|
227
243
|
initTimings?: Array<{ name: string; dur: number; desc?: string }>,
|
|
228
244
|
): Promise<EmDashRuntime> {
|
|
229
245
|
// Waiters poll rather than awaiting the initializing request's promise —
|
|
@@ -238,7 +254,7 @@ async function getRuntime(
|
|
|
238
254
|
holder.lock,
|
|
239
255
|
() => holder.instance,
|
|
240
256
|
async (isCurrentClaim) => {
|
|
241
|
-
const deps = buildDependencies(config);
|
|
257
|
+
const deps = buildDependencies(config, migrationMode);
|
|
242
258
|
const runtime = await EmDashRuntime.create(deps, initTimings);
|
|
243
259
|
if (isCurrentClaim()) {
|
|
244
260
|
holder.instance = runtime;
|
|
@@ -284,6 +300,12 @@ export async function runScheduledTasks(
|
|
|
284
300
|
return runOutsideRequest(config, (runtime) => runtime.runScheduledTasks(options));
|
|
285
301
|
}
|
|
286
302
|
|
|
303
|
+
export async function runScheduledMediaUsageTasks(): Promise<MediaUsageMaintenanceResult> {
|
|
304
|
+
const config = getConfig();
|
|
305
|
+
if (!config) return { outcome: "inactive", taskClass: null, turn: null };
|
|
306
|
+
return runOutsideRequest(config, (runtime) => runtime.runScheduledMediaUsageTasks());
|
|
307
|
+
}
|
|
308
|
+
|
|
287
309
|
/**
|
|
288
310
|
* Run a callback against the EmDash runtime outside any HTTP request — from a
|
|
289
311
|
* Cloudflare Queue consumer, a `scheduled()` handler, or any other
|
|
@@ -334,23 +356,51 @@ export async function withEmDashRuntime<T>(
|
|
|
334
356
|
/**
|
|
335
357
|
* Shared plumbing for request-free entry points (`runScheduledTasks`,
|
|
336
358
|
* `withEmDashRuntime`): resolve the runtime singleton, then run the callback
|
|
337
|
-
* under an event-scoped db
|
|
359
|
+
* under an event-scoped db when the adapter needs one.
|
|
338
360
|
*
|
|
339
361
|
* Connection-backed adapters (e.g. Postgres over Hyperdrive) cannot reuse
|
|
340
362
|
* the per-isolate singleton from a platform event: its socket belongs to the
|
|
341
363
|
* request that opened it, and workerd rejects cross-event I/O. Open an
|
|
342
364
|
* event-scoped connection and run the callback under it in ALS — the
|
|
343
365
|
* runtime's db getter, the cron executor, and plugin contexts all resolve
|
|
344
|
-
* the connection from ALS — then close it
|
|
345
|
-
*
|
|
346
|
-
*
|
|
366
|
+
* the connection from ALS — then close it when required. Stateless adapters
|
|
367
|
+
* that need primary routing can return a close-less scope; adapters with no
|
|
368
|
+
* event scoping return null and keep using the singleton.
|
|
347
369
|
*/
|
|
348
370
|
async function runOutsideRequest<T>(
|
|
349
371
|
config: EmDashConfig,
|
|
350
372
|
fn: (runtime: EmDashRuntime) => Promise<T>,
|
|
351
373
|
): Promise<T> {
|
|
352
|
-
const
|
|
374
|
+
const migrationMode = resolveConfiguredMigrationMode(config);
|
|
375
|
+
if (getRequestContext()) {
|
|
376
|
+
const runtime = await getRuntime(config, migrationMode);
|
|
377
|
+
return runOutsideRequestWithRuntime(config, runtime, fn);
|
|
378
|
+
}
|
|
353
379
|
|
|
380
|
+
const deferredTasks = createDeferredTaskTracker(() => {});
|
|
381
|
+
const context = {
|
|
382
|
+
editMode: false,
|
|
383
|
+
metrics: createRequestMetrics(performance.now()),
|
|
384
|
+
deferredTasks,
|
|
385
|
+
};
|
|
386
|
+
return runWithContext(context, async () => {
|
|
387
|
+
const runtime = await (async () => {
|
|
388
|
+
try {
|
|
389
|
+
return await getRuntime(config, migrationMode);
|
|
390
|
+
} finally {
|
|
391
|
+
deferredTasks.settle();
|
|
392
|
+
await deferredTasks.settled;
|
|
393
|
+
}
|
|
394
|
+
})();
|
|
395
|
+
return runOutsideRequestWithRuntime(config, runtime, fn);
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
async function runOutsideRequestWithRuntime<T>(
|
|
400
|
+
config: EmDashConfig,
|
|
401
|
+
runtime: EmDashRuntime,
|
|
402
|
+
fn: (runtime: EmDashRuntime) => Promise<T>,
|
|
403
|
+
): Promise<T> {
|
|
354
404
|
const scoped = createRequestScopedDb({
|
|
355
405
|
config: config.database?.config,
|
|
356
406
|
isAuthenticated: false,
|
|
@@ -361,9 +411,8 @@ async function runOutsideRequest<T>(
|
|
|
361
411
|
cookies: NOOP_COOKIE_JAR,
|
|
362
412
|
url: CRON_EVENT_URL,
|
|
363
413
|
});
|
|
364
|
-
if (!scoped
|
|
365
|
-
//
|
|
366
|
-
// outside a request. Any close-less scope created above is discarded.
|
|
414
|
+
if (!scoped) {
|
|
415
|
+
// This adapter needs no event-specific routing or connection.
|
|
367
416
|
return fn(runtime);
|
|
368
417
|
}
|
|
369
418
|
const { closed, deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);
|
|
@@ -415,6 +464,31 @@ const NOOP_COOKIE_JAR = {
|
|
|
415
464
|
*/
|
|
416
465
|
const CRON_EVENT_URL = new URL("https://cron.emdash.internal/");
|
|
417
466
|
|
|
467
|
+
function resolveConfiguredMigrationMode(config: EmDashConfig): RuntimeMigrationMode {
|
|
468
|
+
const processOverride =
|
|
469
|
+
typeof process !== "undefined" && process.env ? process.env.EMDASH_MIGRATIONS_MODE : undefined;
|
|
470
|
+
const importMetaOverride = import.meta.env.EMDASH_MIGRATIONS_MODE;
|
|
471
|
+
return resolveRuntimeMigrationMode(config.migrations, {
|
|
472
|
+
dev: import.meta.env.DEV,
|
|
473
|
+
override: processOverride ?? importMetaOverride,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
function pendingMigrationsResponse(error: PendingMigrationsError): Response {
|
|
478
|
+
console.error("[emdash] database migrations are pending:", error.pending.join(", "));
|
|
479
|
+
return migrationRequiredResponse();
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function migrationRequiredResponse(): Response {
|
|
483
|
+
return new Response(
|
|
484
|
+
"Database migrations are required. Apply the deployment migration manifest and retry.",
|
|
485
|
+
{
|
|
486
|
+
status: 503,
|
|
487
|
+
headers: { "Retry-After": "60" },
|
|
488
|
+
},
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
|
|
418
492
|
/**
|
|
419
493
|
* Baseline security headers applied to all responses.
|
|
420
494
|
* Admin routes get additional headers (strict CSP) from auth middleware.
|
|
@@ -509,6 +583,34 @@ function createRequestScopedDb(
|
|
|
509
583
|
return fn(opts);
|
|
510
584
|
}
|
|
511
585
|
|
|
586
|
+
const buildDate = virtualBuildTime ? new Date(virtualBuildTime) : null;
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Fold the build timestamp into the route cache validator.
|
|
590
|
+
*
|
|
591
|
+
* `CacheHint.lastModified` describes the content, but the response also depends
|
|
592
|
+
* on the build: `/_astro/*` names are content-hashed, and a deployment only
|
|
593
|
+
* serves its own. Without the build dimension a code-only deploy answers a
|
|
594
|
+
* returning visitor's conditional request with 304, leaving them on HTML whose
|
|
595
|
+
* assets 404.
|
|
596
|
+
*
|
|
597
|
+
* Prerendered pages are served by the host's static layer, which manages its
|
|
598
|
+
* own validators — only on-demand responses need the build dimension.
|
|
599
|
+
*
|
|
600
|
+
* Only forward moves are covered. `Last-Modified` expresses newer, not
|
|
601
|
+
* different, so after a rollback the earlier build still answers a conditional
|
|
602
|
+
* request with 304 and the browser stays on the newer build's HTML.
|
|
603
|
+
*
|
|
604
|
+
* Must run before next(): Astro keeps the later of two dates, so a route's own
|
|
605
|
+
* hint still wins when content is newer, and a route that opts out with
|
|
606
|
+
* `Astro.cache.set(false)` stays opted out — calling set() afterwards would
|
|
607
|
+
* clear that opt-out.
|
|
608
|
+
*/
|
|
609
|
+
function applyBuildValidator(context: APIContext): void {
|
|
610
|
+
if (context.isPrerendered || !buildDate || !context.cache?.enabled) return;
|
|
611
|
+
context.cache.set({ lastModified: buildDate });
|
|
612
|
+
}
|
|
613
|
+
|
|
512
614
|
export const onRequest = defineMiddleware(async (context, next) => {
|
|
513
615
|
const { request, locals, cookies } = context;
|
|
514
616
|
const url = context.url;
|
|
@@ -527,6 +629,8 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
527
629
|
}
|
|
528
630
|
}
|
|
529
631
|
|
|
632
|
+
applyBuildValidator(context);
|
|
633
|
+
|
|
530
634
|
const queryRecorder = isInstrumentationEnabled()
|
|
531
635
|
? createRecorder(url.pathname, request.method, request.headers.get("x-perf-phase") ?? "default")
|
|
532
636
|
: undefined;
|
|
@@ -534,6 +638,8 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
534
638
|
const metrics = createRequestMetrics(performance.now());
|
|
535
639
|
|
|
536
640
|
const run = async (): Promise<Response> => {
|
|
641
|
+
const config = getConfig();
|
|
642
|
+
const migrationMode = config ? resolveConfiguredMigrationMode(config) : "auto";
|
|
537
643
|
// Process /_emdash routes and public routes with an active session
|
|
538
644
|
// (logged-in editors need the runtime for toolbar/visual editing on public pages)
|
|
539
645
|
const isEmDashRoute = url.pathname.startsWith("/_emdash");
|
|
@@ -576,6 +682,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
576
682
|
.startsWith("bearer ");
|
|
577
683
|
const isWrite = request.method !== "GET" && request.method !== "HEAD";
|
|
578
684
|
const isAuthenticated = !!sessionUser || hasBearerAuth;
|
|
685
|
+
const endedAuthenticated = () => requestEndedAuthenticated(isAuthenticated, cookies);
|
|
579
686
|
const canUseCachedBinding =
|
|
580
687
|
!isAuthenticated &&
|
|
581
688
|
!isWrite &&
|
|
@@ -601,7 +708,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
601
708
|
// production. The build database is legitimately empty in CI and there
|
|
602
709
|
// is no live visitor to send to the wizard at build time (session reads
|
|
603
710
|
// are already skipped for prerender above for the same reason).
|
|
604
|
-
if (!isSetupVerified() && !context.isPrerendered) {
|
|
711
|
+
if (migrationMode === "auto" && !isSetupVerified() && !context.isPrerendered) {
|
|
605
712
|
const t0 = performance.now();
|
|
606
713
|
try {
|
|
607
714
|
const { getDb } = await import("../loader.js");
|
|
@@ -628,14 +735,13 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
628
735
|
// The runtime is a cached singleton — after the first request,
|
|
629
736
|
// getRuntime() is just a null-check. This enables SEO plugins to
|
|
630
737
|
// contribute meta tags for all visitors, not just logged-in editors.
|
|
631
|
-
const config = getConfig();
|
|
632
738
|
if (config) {
|
|
633
739
|
// Sub-phase timings are populated only on the cold init. Warm
|
|
634
740
|
// requests hit the cached runtime and leave this empty.
|
|
635
741
|
const initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];
|
|
636
742
|
const t0 = performance.now();
|
|
637
743
|
try {
|
|
638
|
-
const runtime = await getRuntime(config, initSubTimings);
|
|
744
|
+
const runtime = await getRuntime(config, migrationMode, initSubTimings);
|
|
639
745
|
markSetupVerified();
|
|
640
746
|
const handlePublicPluginApiRoute = createPublicPluginApiRouteHandler(runtime);
|
|
641
747
|
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- partial object; getPageRuntime() only checks for the page-contribution methods
|
|
@@ -650,6 +756,16 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
650
756
|
storage: runtime.storage,
|
|
651
757
|
} as EmDashHandlers;
|
|
652
758
|
} catch (error) {
|
|
759
|
+
if (error instanceof PendingMigrationsError) {
|
|
760
|
+
return pendingMigrationsResponse(error);
|
|
761
|
+
}
|
|
762
|
+
if (migrationMode === "manual" && isMissingTableError(error)) {
|
|
763
|
+
console.error(
|
|
764
|
+
"[emdash] database schema is unavailable in manual migration mode:",
|
|
765
|
+
error,
|
|
766
|
+
);
|
|
767
|
+
return migrationRequiredResponse();
|
|
768
|
+
}
|
|
653
769
|
// Non-fatal — EmDashHead falls back to base SEO contributions —
|
|
654
770
|
// but log it (throttled): a persistently failing init (e.g. a
|
|
655
771
|
// failing migration, #1744) is otherwise invisible on the
|
|
@@ -676,6 +792,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
676
792
|
const anonScoped = createRequestScopedDb({
|
|
677
793
|
config: config?.database?.config,
|
|
678
794
|
isAuthenticated,
|
|
795
|
+
endedAuthenticated,
|
|
679
796
|
isWrite,
|
|
680
797
|
canUseCachedBinding,
|
|
681
798
|
cookies,
|
|
@@ -729,7 +846,6 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
729
846
|
}
|
|
730
847
|
}
|
|
731
848
|
|
|
732
|
-
const config = getConfig();
|
|
733
849
|
if (!config) {
|
|
734
850
|
console.error("EmDash: No configuration found");
|
|
735
851
|
return finalizeResponse(await next());
|
|
@@ -749,14 +865,14 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
749
865
|
// instance and `initSubTimings` stays empty.
|
|
750
866
|
const initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];
|
|
751
867
|
let t0 = performance.now();
|
|
752
|
-
const runtime = await getRuntime(config, initSubTimings);
|
|
868
|
+
const runtime = await getRuntime(config, migrationMode, initSubTimings);
|
|
753
869
|
timings.push({ name: "rt", dur: performance.now() - t0, desc: "Runtime init" });
|
|
754
870
|
// Forward any sub-phase samples so cold-start breakdown is visible
|
|
755
871
|
// in Server-Timing. Each phase appears prefixed "rt." to distinguish
|
|
756
872
|
// from the aggregate "rt" timing above.
|
|
757
873
|
for (const sub of initSubTimings) timings.push(sub);
|
|
758
874
|
|
|
759
|
-
// Runtime
|
|
875
|
+
// Runtime initialization has satisfied the effective migration policy.
|
|
760
876
|
markSetupVerified();
|
|
761
877
|
|
|
762
878
|
// The manifest is no longer pre-loaded here. It's admin-only
|
|
@@ -875,6 +991,13 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
875
991
|
setPluginStatus: runtime.setPluginStatus.bind(runtime),
|
|
876
992
|
};
|
|
877
993
|
} catch (error) {
|
|
994
|
+
if (error instanceof PendingMigrationsError) {
|
|
995
|
+
return pendingMigrationsResponse(error);
|
|
996
|
+
}
|
|
997
|
+
if (migrationMode === "manual" && isMissingTableError(error)) {
|
|
998
|
+
console.error("[emdash] database schema is unavailable in manual migration mode:", error);
|
|
999
|
+
return migrationRequiredResponse();
|
|
1000
|
+
}
|
|
878
1001
|
console.error("EmDash middleware error:", error);
|
|
879
1002
|
}
|
|
880
1003
|
|
|
@@ -889,6 +1012,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
889
1012
|
const scoped = createRequestScopedDb({
|
|
890
1013
|
config: config?.database?.config,
|
|
891
1014
|
isAuthenticated,
|
|
1015
|
+
endedAuthenticated,
|
|
892
1016
|
isWrite,
|
|
893
1017
|
canUseCachedBinding,
|
|
894
1018
|
cookies: context.cookies,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import { handleMediaUsageCollectionDeletionList } from "#api/handlers/media-usage-work.js";
|
|
6
|
+
import { isParseError, parseQuery } from "#api/parse.js";
|
|
7
|
+
import { mediaUsageCollectionDeletionListQuery } from "#api/schemas.js";
|
|
8
|
+
import { requireScope } from "#auth/scopes.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
export const GET: APIRoute = async ({ request, locals }) => {
|
|
13
|
+
const dbErr = requireDb(locals.emdash?.db);
|
|
14
|
+
if (dbErr) return dbErr;
|
|
15
|
+
const denied = requirePerm(locals.user, "schema:manage");
|
|
16
|
+
if (denied) return denied;
|
|
17
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
18
|
+
if (scopeDenied) return scopeDenied;
|
|
19
|
+
const query = parseQuery(new URL(request.url), mediaUsageCollectionDeletionListQuery);
|
|
20
|
+
if (isParseError(query)) return query;
|
|
21
|
+
return unwrapResult(await handleMediaUsageCollectionDeletionList(locals.emdash.db, query));
|
|
22
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import { handleMediaUsageCollectionDeletionRetry } from "#api/handlers/media-usage-work.js";
|
|
6
|
+
import { isParseError, parseBody } from "#api/parse.js";
|
|
7
|
+
import { mediaUsageCollectionDeletionRetryBody } from "#api/schemas.js";
|
|
8
|
+
import { requireScope } from "#auth/scopes.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
export const POST: APIRoute = async ({ request, locals }) => {
|
|
13
|
+
const dbErr = requireDb(locals.emdash?.db);
|
|
14
|
+
if (dbErr) return dbErr;
|
|
15
|
+
const denied = requirePerm(locals.user, "schema:manage");
|
|
16
|
+
if (denied) return denied;
|
|
17
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
18
|
+
if (scopeDenied) return scopeDenied;
|
|
19
|
+
const body = await parseBody(request, mediaUsageCollectionDeletionRetryBody);
|
|
20
|
+
if (isParseError(body)) return body;
|
|
21
|
+
return unwrapResult(await handleMediaUsageCollectionDeletionRetry(locals.emdash.db, body));
|
|
22
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import { handleMediaUsageWorkList } from "#api/handlers/media-usage-work.js";
|
|
6
|
+
import { isParseError, parseQuery } from "#api/parse.js";
|
|
7
|
+
import { mediaUsageWorkListQuery } from "#api/schemas.js";
|
|
8
|
+
import { requireScope } from "#auth/scopes.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
export const GET: APIRoute = async ({ request, locals }) => {
|
|
13
|
+
const { emdash, user } = locals;
|
|
14
|
+
const dbErr = requireDb(emdash?.db);
|
|
15
|
+
if (dbErr) return dbErr;
|
|
16
|
+
|
|
17
|
+
const denied = requirePerm(user, "schema:manage");
|
|
18
|
+
if (denied) return denied;
|
|
19
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
20
|
+
if (scopeDenied) return scopeDenied;
|
|
21
|
+
|
|
22
|
+
const query = parseQuery(new URL(request.url), mediaUsageWorkListQuery);
|
|
23
|
+
if (isParseError(query)) return query;
|
|
24
|
+
|
|
25
|
+
return unwrapResult(await handleMediaUsageWorkList(emdash.db, query));
|
|
26
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import { handleMediaUsageWorkRetry } from "#api/handlers/media-usage-work.js";
|
|
6
|
+
import { isParseError, parseBody } from "#api/parse.js";
|
|
7
|
+
import { mediaUsageWorkRetryBody } from "#api/schemas.js";
|
|
8
|
+
import { requireScope } from "#auth/scopes.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
export const POST: APIRoute = async ({ request, locals }) => {
|
|
13
|
+
const { emdash, user } = locals;
|
|
14
|
+
const dbErr = requireDb(emdash?.db);
|
|
15
|
+
if (dbErr) return dbErr;
|
|
16
|
+
|
|
17
|
+
const denied = requirePerm(user, "schema:manage");
|
|
18
|
+
if (denied) return denied;
|
|
19
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
20
|
+
if (scopeDenied) return scopeDenied;
|
|
21
|
+
|
|
22
|
+
const body = await parseBody(request, mediaUsageWorkRetryBody);
|
|
23
|
+
if (isParseError(body)) return body;
|
|
24
|
+
|
|
25
|
+
return unwrapResult(await handleMediaUsageWorkRetry(emdash.db, body));
|
|
26
|
+
};
|
|
@@ -9,6 +9,7 @@ import type { APIRoute } from "astro";
|
|
|
9
9
|
import { requirePerm } from "#api/authorize.js";
|
|
10
10
|
import { apiError, unwrapResult } from "#api/error.js";
|
|
11
11
|
import { handlePluginDisable } from "#api/index.js";
|
|
12
|
+
import { checkMediaUsageActivationWriteFence } from "#api/media-usage-write-fence.js";
|
|
12
13
|
import { setCronTasksEnabled } from "#plugins/cron.js";
|
|
13
14
|
|
|
14
15
|
export const prerender = false;
|
|
@@ -24,6 +25,9 @@ export const POST: APIRoute = async ({ params, locals }) => {
|
|
|
24
25
|
const denied = requirePerm(user, "plugins:manage");
|
|
25
26
|
if (denied) return denied;
|
|
26
27
|
|
|
28
|
+
const activationFence = await checkMediaUsageActivationWriteFence(emdash.db);
|
|
29
|
+
if (activationFence) return activationFence;
|
|
30
|
+
|
|
27
31
|
if (!id) {
|
|
28
32
|
return apiError("INVALID_REQUEST", "Plugin ID required", 400);
|
|
29
33
|
}
|
|
@@ -9,6 +9,7 @@ import type { APIRoute } from "astro";
|
|
|
9
9
|
import { requirePerm } from "#api/authorize.js";
|
|
10
10
|
import { apiError, unwrapResult } from "#api/error.js";
|
|
11
11
|
import { handlePluginEnable } from "#api/index.js";
|
|
12
|
+
import { checkMediaUsageActivationWriteFence } from "#api/media-usage-write-fence.js";
|
|
12
13
|
import { setCronTasksEnabled } from "#plugins/cron.js";
|
|
13
14
|
|
|
14
15
|
export const prerender = false;
|
|
@@ -24,6 +25,9 @@ export const POST: APIRoute = async ({ params, locals }) => {
|
|
|
24
25
|
const denied = requirePerm(user, "plugins:manage");
|
|
25
26
|
if (denied) return denied;
|
|
26
27
|
|
|
28
|
+
const activationFence = await checkMediaUsageActivationWriteFence(emdash.db);
|
|
29
|
+
if (activationFence) return activationFence;
|
|
30
|
+
|
|
27
31
|
if (!id) {
|
|
28
32
|
return apiError("INVALID_REQUEST", "Plugin ID required", 400);
|
|
29
33
|
}
|
|
@@ -10,6 +10,7 @@ import { z } from "zod";
|
|
|
10
10
|
import { requirePerm } from "#api/authorize.js";
|
|
11
11
|
import { apiError, unwrapResult } from "#api/error.js";
|
|
12
12
|
import { handleMarketplaceUninstall } from "#api/index.js";
|
|
13
|
+
import { checkMediaUsageActivationWriteFence } from "#api/media-usage-write-fence.js";
|
|
13
14
|
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
14
15
|
|
|
15
16
|
export const prerender = false;
|
|
@@ -29,6 +30,9 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
29
30
|
const denied = requirePerm(user, "plugins:manage");
|
|
30
31
|
if (denied) return denied;
|
|
31
32
|
|
|
33
|
+
const activationFence = await checkMediaUsageActivationWriteFence(emdash.db);
|
|
34
|
+
if (activationFence) return activationFence;
|
|
35
|
+
|
|
32
36
|
if (!id) {
|
|
33
37
|
return apiError("INVALID_REQUEST", "Plugin ID required", 400);
|
|
34
38
|
}
|
|
@@ -10,6 +10,7 @@ import { z } from "zod";
|
|
|
10
10
|
import { requirePerm } from "#api/authorize.js";
|
|
11
11
|
import { apiError, unwrapResult } from "#api/error.js";
|
|
12
12
|
import { handleMarketplaceUpdate } from "#api/index.js";
|
|
13
|
+
import { checkMediaUsageActivationWriteFence } from "#api/media-usage-write-fence.js";
|
|
13
14
|
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
14
15
|
|
|
15
16
|
export const prerender = false;
|
|
@@ -32,6 +33,9 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
32
33
|
const denied = requirePerm(user, "plugins:manage");
|
|
33
34
|
if (denied) return denied;
|
|
34
35
|
|
|
36
|
+
const activationFence = await checkMediaUsageActivationWriteFence(emdash.db);
|
|
37
|
+
if (activationFence) return activationFence;
|
|
38
|
+
|
|
35
39
|
if (!id) {
|
|
36
40
|
return apiError("INVALID_REQUEST", "Plugin ID required", 400);
|
|
37
41
|
}
|