emdash 0.35.0 → 0.37.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/activation-K0kGBWuJ.mjs +382 -0
- package/dist/activation-K0kGBWuJ.mjs.map +1 -0
- package/dist/{adapters-Bb1vG41D.d.mts → adapters-BDQwg236.d.mts} +6 -4
- package/dist/{adapters-Bb1vG41D.d.mts.map → adapters-BDQwg236.d.mts.map} +1 -1
- package/dist/{allowed-origins-DW7sYyqg.mjs → allowed-origins-BGglilcs.mjs} +2 -2
- package/dist/{allowed-origins-DW7sYyqg.mjs.map → allowed-origins-BGglilcs.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +23 -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 +5 -5
- package/dist/api-Dz6rgoa3.mjs +10040 -0
- package/dist/api-Dz6rgoa3.mjs.map +1 -0
- package/dist/{api-tokens-KO24G1Fd.mjs → api-tokens-BSsQACNe.mjs} +2 -2
- package/dist/{api-tokens-KO24G1Fd.mjs.map → api-tokens-BSsQACNe.mjs.map} +1 -1
- package/dist/{apply-kUDt80-G.mjs → apply-B4SIOxR1.mjs} +34 -35
- package/dist/{apply-kUDt80-G.mjs.map → apply-B4SIOxR1.mjs.map} +1 -1
- package/dist/astro/image-endpoint.mjs +2 -2
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +128 -44
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +10 -7
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +2 -2
- package/dist/astro/middleware/redirect.mjs +4 -4
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +11 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +237 -1412
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/index.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/media-usage/activation.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/activation.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +46 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +44 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -11
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +55 -49
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -49
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +54 -48
- 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 +60 -50
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +179 -139
- 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 +61 -51
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +93 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/updates.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +53 -47
- 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 +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +53 -47
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +7 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +6 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +19 -9
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +14 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +13 -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 +17 -15
- 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 +17 -15
- 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 +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +14 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +8 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +2 -2
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +13 -13
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -10
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -27
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +188 -65
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
- package/dist/astro/routes/api/media/_id_/replace.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/replace.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs +91 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +18 -13
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +21 -13
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +3 -2
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.d.mts +10 -0
- package/dist/astro/routes/api/media/folders/_id_.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs +52 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -0
- package/dist/astro/routes/api/media/folders/index.d.mts +9 -0
- package/dist/astro/routes/api/media/folders/index.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/index.mjs +41 -0
- package/dist/astro/routes/api/media/folders/index.mjs.map +1 -0
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +16 -14
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +59 -27
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -13
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -12
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +21 -14
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +15 -11
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
- package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
- package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/register.mjs +2 -2
- package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
- package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
- package/dist/astro/routes/api/oauth/token.mjs +5 -5
- package/dist/astro/routes/api/openapi.json.mjs +253 -40
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +10 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +10 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +11 -11
- package/dist/astro/routes/api/redirects/index.mjs +11 -11
- package/dist/astro/routes/api/relations/_id_/index.mjs +17 -15
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +12 -10
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +17 -15
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +53 -47
- 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 +53 -47
- 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 +53 -47
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +10 -8
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +53 -47
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +53 -47
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +10 -10
- package/dist/astro/routes/api/search/index.mjs +9 -9
- package/dist/astro/routes/api/search/rebuild.mjs +10 -10
- package/dist/astro/routes/api/search/stats.mjs +5 -5
- package/dist/astro/routes/api/search/suggest.mjs +9 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
- package/dist/astro/routes/api/sections/index.mjs +9 -9
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +5 -5
- package/dist/astro/routes/api/settings/backups/export.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/index.mjs +7 -7
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings/email.mjs.map +1 -1
- package/dist/astro/routes/api/settings.d.mts.map +1 -1
- package/dist/astro/routes/api/settings.mjs +20 -16
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
- package/dist/astro/routes/api/setup/admin.mjs +11 -11
- package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -28
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +32 -30
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +7 -7
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +20 -16
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +21 -17
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -18
- 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 +20 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +14 -14
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +26 -19
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +20 -16
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -8
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +17 -13
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +15 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +8 -6
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +15 -12
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +7 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +8 -8
- package/dist/astro/types.d.mts +37 -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-DUElxgOQ.mjs → authorize-Bkf_UHhD.mjs} +2 -2
- package/dist/{authorize-DUElxgOQ.mjs.map → authorize-Bkf_UHhD.mjs.map} +1 -1
- package/dist/{backup-DWYpJlLj.mjs → backup-rwVAl9NI.mjs} +5 -5
- package/dist/{backup-DWYpJlLj.mjs.map → backup-rwVAl9NI.mjs.map} +1 -1
- package/dist/{bundle-vn56sLos.mjs → bundle-C8S2Zl6U.mjs} +4 -4
- package/dist/{bundle-vn56sLos.mjs.map → bundle-C8S2Zl6U.mjs.map} +1 -1
- package/dist/{byline-yjvWq4ip.mjs → byline-DuhF7NWl.mjs} +27 -14
- package/dist/byline-DuhF7NWl.mjs.map +1 -0
- package/dist/{byline-fields-txaLGoME.mjs → byline-fields-BovY4KYM.mjs} +2 -2
- package/dist/{byline-fields-txaLGoME.mjs.map → byline-fields-BovY4KYM.mjs.map} +1 -1
- package/dist/{byline-registry-DDun8sxh.mjs → byline-registry-Bpu9-MVs.mjs} +2 -2
- package/dist/{byline-registry-DDun8sxh.mjs.map → byline-registry-Bpu9-MVs.mjs.map} +1 -1
- package/dist/{bylines-DjXS5p0P.mjs → bylines-CJ5nd6Lw.mjs} +7 -7
- package/dist/{bylines-DjXS5p0P.mjs.map → bylines-CJ5nd6Lw.mjs.map} +1 -1
- package/dist/{bylines-Bu7pchQ4.mjs → bylines-RwBAeOF1.mjs} +3 -3
- package/dist/{bylines-Bu7pchQ4.mjs.map → bylines-RwBAeOF1.mjs.map} +1 -1
- package/dist/{cache-C46-3Irl.mjs → cache-BF5Kvn59.mjs} +4 -4
- package/dist/{cache-C46-3Irl.mjs.map → cache-BF5Kvn59.mjs.map} +1 -1
- package/dist/capture-triggers-CNW1q3HK.mjs +362 -0
- package/dist/capture-triggers-CNW1q3HK.mjs.map +1 -0
- package/dist/{challenge-store-SIL5DsF2.mjs → challenge-store-DQN_Yrck.mjs} +5 -3
- package/dist/challenge-store-DQN_Yrck.mjs.map +1 -0
- package/dist/chrome-tags-D8fiZG94.mjs +24 -0
- package/dist/chrome-tags-D8fiZG94.mjs.map +1 -0
- package/dist/{chunks-fiZ8G9RJ.mjs → chunks-C4szrD8o.mjs} +2 -2
- package/dist/{chunks-fiZ8G9RJ.mjs.map → chunks-C4szrD8o.mjs.map} +1 -1
- package/dist/cli/index.mjs +37 -53
- 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 +54 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-deletion-DQPvMD8R.mjs → collection-deletion-Bj07NHbj.mjs} +13 -356
- package/dist/collection-deletion-Bj07NHbj.mjs.map +1 -0
- package/dist/{comment-reaction-D-2J84UE.mjs → comment-reaction-BhrvSHml.mjs} +2 -2
- package/dist/{comment-reaction-D-2J84UE.mjs.map → comment-reaction-BhrvSHml.mjs.map} +1 -1
- package/dist/{comment-Dxlep6cE.mjs → comment-vxOzWbZN.mjs} +2 -2
- package/dist/{comment-Dxlep6cE.mjs.map → comment-vxOzWbZN.mjs.map} +1 -1
- package/dist/{comments-CTfZtLmM.mjs → comments-Ct4ensnf.mjs} +2 -2
- package/dist/{comments-CTfZtLmM.mjs.map → comments-Ct4ensnf.mjs.map} +1 -1
- package/dist/{components-CQy3lh9x.mjs → components-DJbo1z0S.mjs} +1 -1
- package/dist/{components-CQy3lh9x.mjs.map → components-DJbo1z0S.mjs.map} +1 -1
- package/dist/{config-COQzTe5Q.d.mts → config-B9eZ340f.d.mts} +1 -1
- package/dist/{config-COQzTe5Q.d.mts.map → config-B9eZ340f.d.mts.map} +1 -1
- package/dist/config-it29yDLA.mjs +1163 -0
- package/dist/config-it29yDLA.mjs.map +1 -0
- package/dist/{content-ZHCc1ngN.mjs → content-DjvM0T92.mjs} +86 -45
- package/dist/content-DjvM0T92.mjs.map +1 -0
- package/dist/{content-list-query-wJ2WN8Vp.d.mts → content-list-query-Btqd4uV2.d.mts} +1 -1
- package/dist/{content-list-query-wJ2WN8Vp.d.mts.map → content-list-query-Btqd4uV2.d.mts.map} +1 -1
- package/dist/{content-refresh-B_8SJzuU.mjs → content-refresh-Bwp-8yGy.mjs} +1139 -111
- package/dist/content-refresh-Bwp-8yGy.mjs.map +1 -0
- package/dist/{media-usage-BZCydfvu.mjs → content-repair-Czdp7jz5.mjs} +5 -196
- package/dist/content-repair-Czdp7jz5.mjs.map +1 -0
- package/dist/{context-ZldbZcle.mjs → context-CX6gxOLW.mjs} +55 -20
- package/dist/context-CX6gxOLW.mjs.map +1 -0
- package/dist/{cron-Y9aLtgrA.mjs → cron-C6o7VppJ.mjs} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs.map → cron-C6o7VppJ.mjs.map} +1 -1
- package/dist/{dashboard-DvHbk_cv.mjs → dashboard-C2kTeeRI.mjs} +5 -5
- package/dist/{dashboard-DvHbk_cv.mjs.map → dashboard-C2kTeeRI.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +3 -3
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +4 -4
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +4 -4
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/postgres.d.mts.map +1 -1
- package/dist/db/postgres.mjs +19 -3
- package/dist/db/postgres.mjs.map +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +4 -4
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +3 -3
- package/dist/db/sqlite.mjs.map +1 -1
- package/dist/{default-DdDl3fxv.mjs → default-Clra32mw.mjs} +1 -1
- package/dist/{default-DdDl3fxv.mjs.map → default-Clra32mw.mjs.map} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts → deferred-tasks-CvDETTJO.d.mts} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts.map → deferred-tasks-CvDETTJO.d.mts.map} +1 -1
- package/dist/dev-typegen-DzOPfsNj.mjs +29 -0
- package/dist/dev-typegen-DzOPfsNj.mjs.map +1 -0
- package/dist/{device-flow-C0GdD_z8.mjs → device-flow-D2oCWvLJ.mjs} +5 -5
- package/dist/{device-flow-C0GdD_z8.mjs.map → device-flow-D2oCWvLJ.mjs.map} +1 -1
- package/dist/{direct-executor-CDXeJCSs.mjs → direct-executor-Bfa5_ToE.mjs} +3 -3
- package/dist/{direct-executor-CDXeJCSs.mjs.map → direct-executor-Bfa5_ToE.mjs.map} +1 -1
- package/dist/{dist-D_6CKR8z.mjs → dist-89xCrGqi.mjs} +1 -1
- package/dist/{dist-D_6CKR8z.mjs.map → dist-89xCrGqi.mjs.map} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs → email-console-Dzb6uGYa.mjs} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs.map → email-console-Dzb6uGYa.mjs.map} +1 -1
- package/dist/{enrich-_ySMEvEE.mjs → enrich-BX0IDp4z.mjs} +3 -3
- package/dist/{enrich-_ySMEvEE.mjs.map → enrich-BX0IDp4z.mjs.map} +1 -1
- package/dist/{error-DupyJZE2.mjs → error-DFrQjppn.mjs} +2 -2
- package/dist/{error-DupyJZE2.mjs.map → error-DFrQjppn.mjs.map} +1 -1
- package/dist/{errors-CLUPm7aD.mjs → errors-DsVoDUjJ.mjs} +24 -2
- package/dist/errors-DsVoDUjJ.mjs.map +1 -0
- package/dist/{escape-DUY2r2Zs.mjs → escape-HmHTC1Is.mjs} +1 -1
- package/dist/{escape-DUY2r2Zs.mjs.map → escape-HmHTC1Is.mjs.map} +1 -1
- package/dist/{field-defs-cache-BzwBlJrR.mjs → field-defs-cache-BM4SIRqH.mjs} +5 -5
- package/dist/{field-defs-cache-BzwBlJrR.mjs.map → field-defs-cache-BM4SIRqH.mjs.map} +1 -1
- package/dist/focal-point-BeWFo6Xx.mjs +23 -0
- package/dist/focal-point-BeWFo6Xx.mjs.map +1 -0
- package/dist/{fts-manager-DyZEohZC.mjs → fts-manager-Do1BlW2r.mjs} +3 -3
- package/dist/{fts-manager-DyZEohZC.mjs.map → fts-manager-Do1BlW2r.mjs.map} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs → hash-3JJPlHF2.mjs} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs.map → hash-3JJPlHF2.mjs.map} +1 -1
- package/dist/hook-result-DCh2WUpe.d.mts +31 -0
- package/dist/hook-result-DCh2WUpe.d.mts.map +1 -0
- package/dist/{hreflang-DwT2E0Sa.d.mts → hreflang-B6hbAuuO.d.mts} +2 -2
- package/dist/{hreflang-DwT2E0Sa.d.mts.map → hreflang-B6hbAuuO.d.mts.map} +1 -1
- package/dist/{hreflang-BBe83kKa.mjs → hreflang-DQbPZliA.mjs} +7 -7
- package/dist/{hreflang-BBe83kKa.mjs.map → hreflang-DQbPZliA.mjs.map} +1 -1
- package/dist/{identity-Ys6Dlc9C.mjs → identity-DksvEazf.mjs} +3 -3
- package/dist/{identity-Ys6Dlc9C.mjs.map → identity-DksvEazf.mjs.map} +1 -1
- package/dist/{import-DPkLmeXO.mjs → import-CJpaBBBT.mjs} +6 -6
- package/dist/{import-DPkLmeXO.mjs.map → import-CJpaBBBT.mjs.map} +1 -1
- package/dist/{index-BVBZj4-7.d.mts → index-BJNMCWmu.d.mts} +267 -82
- package/dist/index-BJNMCWmu.d.mts.map +1 -0
- package/dist/{index-C9KuQyO-.d.mts → index-Du8K7bWa.d.mts} +3 -3
- package/dist/{index-C9KuQyO-.d.mts.map → index-Du8K7bWa.d.mts.map} +1 -1
- package/dist/index.d.mts +22 -21
- package/dist/index.mjs +79 -73
- package/dist/{init-lock-6b309ZrF.mjs → init-lock-DJkX6Hto.mjs} +1 -1
- package/dist/{init-lock-6b309ZrF.mjs.map → init-lock-DJkX6Hto.mjs.map} +1 -1
- package/dist/{load-YJ2xl3ra.mjs → load-CawHjTOH.mjs} +2 -2
- package/dist/{load-YJ2xl3ra.mjs.map → load-CawHjTOH.mjs.map} +1 -1
- package/dist/{loader-CdG_Ci3H.mjs → loader-Z8vl7zTq.mjs} +48 -13
- package/dist/loader-Z8vl7zTq.mjs.map +1 -0
- package/dist/{manifest-builder-B252yQUf.mjs → manifest-builder-COtzuca2.mjs} +2 -2
- package/dist/{manifest-builder-B252yQUf.mjs.map → manifest-builder-COtzuca2.mjs.map} +1 -1
- package/dist/{manifest-schema-BXbUAHod.mjs → manifest-schema-BNWwR8Vd.mjs} +5 -5
- package/dist/manifest-schema-BNWwR8Vd.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +4 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +6 -4
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +13 -3
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +14 -12
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +12 -6
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-CzhAn2--.mjs → media-BBm8Wg3f.mjs} +69 -12
- package/dist/media-BBm8Wg3f.mjs.map +1 -0
- package/dist/{media-BWWWb8kg.mjs → media-BHjus86Y.mjs} +133 -9
- package/dist/media-BHjus86Y.mjs.map +1 -0
- package/dist/{media-allowlist-D6x-Us02.mjs → media-allowlist-CoTBWoDp.mjs} +3 -2
- package/dist/media-allowlist-CoTBWoDp.mjs.map +1 -0
- package/dist/media-folders-BGkATs8n.mjs +210 -0
- package/dist/media-folders-BGkATs8n.mjs.map +1 -0
- package/dist/{media-upload-CHBVn6m-.mjs → media-upload-BCidR-EY.mjs} +9 -9
- package/dist/{media-upload-CHBVn6m-.mjs.map → media-upload-BCidR-EY.mjs.map} +1 -1
- package/dist/{media-url-BvoX88FA.mjs → media-url-DHoPr0hq.mjs} +1 -1
- package/dist/{media-url-BvoX88FA.mjs.map → media-url-DHoPr0hq.mjs.map} +1 -1
- package/dist/media-usage-CdY5jhSR.mjs +1833 -0
- package/dist/media-usage-CdY5jhSR.mjs.map +1 -0
- package/dist/media-usage-activation-BgeMtK5C.mjs +78 -0
- package/dist/media-usage-activation-BgeMtK5C.mjs.map +1 -0
- package/dist/{media-usage-work-CLo_6tct.mjs → media-usage-work-CnGCdHxx.mjs} +4 -4
- package/dist/{media-usage-work-CLo_6tct.mjs.map → media-usage-work-CnGCdHxx.mjs.map} +1 -1
- package/dist/{media-usage-work-DrCbqBcl.mjs → media-usage-work-D6D9sMCA.mjs} +221 -59
- package/dist/media-usage-work-D6D9sMCA.mjs.map +1 -0
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs → media-usage-write-fence-hjeD4u7s.mjs} +2 -2
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs.map → media-usage-write-fence-hjeD4u7s.mjs.map} +1 -1
- package/dist/{menus-DSo5QeW0.mjs → menus-6qSwTNxG.mjs} +375 -107
- package/dist/menus-6qSwTNxG.mjs.map +1 -0
- package/dist/{menus-TCNSd2vp.mjs → menus-uvPLXMZf.mjs} +4 -4
- package/dist/{menus-TCNSd2vp.mjs.map → menus-uvPLXMZf.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +3 -3
- package/dist/{mime-DfIVjNkr.mjs → mime-CUIG6x84.mjs} +1 -1
- package/dist/mime-CUIG6x84.mjs.map +1 -0
- package/dist/{mode-BDoH_WcF.mjs → mode-DN_WneRx.mjs} +1 -1
- package/dist/{mode-BDoH_WcF.mjs.map → mode-DN_WneRx.mjs.map} +1 -1
- package/dist/node-sqlite-compat-BuJXIeMz.mjs +46 -0
- package/dist/node-sqlite-compat-BuJXIeMz.mjs.map +1 -0
- package/dist/{normalize-Bc-s_r-a.mjs → normalize-C2xNjTSG.mjs} +36 -5
- package/dist/normalize-C2xNjTSG.mjs.map +1 -0
- package/dist/{oauth-authorization-iOikmrJd.mjs → oauth-authorization-Dj6Kwc21.mjs} +5 -5
- package/dist/{oauth-authorization-iOikmrJd.mjs.map → oauth-authorization-Dj6Kwc21.mjs.map} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs → oauth-clients-FD7I0J8m.mjs} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs.map → oauth-clients-FD7I0J8m.mjs.map} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs → oauth-state-store-DkmDOmHs.mjs} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs.map → oauth-state-store-DkmDOmHs.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs → oauth-user-lookup-CvIwGpYd.mjs} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs.map → oauth-user-lookup-CvIwGpYd.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-71tPfV4A.mjs → object-cache-DVKnyOfy.mjs} +19 -3
- package/dist/object-cache-DVKnyOfy.mjs.map +1 -0
- package/dist/{options-CBXIHUoT.mjs → options-BHPeIbBd.mjs} +1 -1
- package/dist/{options-CBXIHUoT.mjs.map → options-BHPeIbBd.mjs.map} +1 -1
- package/dist/{options--hhz-jZ1.d.mts → options-CYb4y7hM.d.mts} +24 -11
- package/dist/options-CYb4y7hM.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-DFbuc-Fh.mjs → parse-Ckpg-Qfp.mjs} +2 -2
- package/dist/{parse-DFbuc-Fh.mjs.map → parse-Ckpg-Qfp.mjs.map} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs → passkey-config-O_lj3y0k.mjs} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs.map → passkey-config-O_lj3y0k.mjs.map} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs → patterns-D9iDO3j8.mjs} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs.map → patterns-D9iDO3j8.mjs.map} +1 -1
- package/dist/{placeholder-Dp0K3RkD.d.mts → placeholder-4X9BrRrp.d.mts} +7 -1
- package/dist/placeholder-4X9BrRrp.d.mts.map +1 -0
- package/dist/plugin-types.d.mts +8 -3
- 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 +2 -2
- package/dist/{policy-TluUIxuu.mjs → policy-Dhtwntrt.mjs} +2 -2
- package/dist/{policy-TluUIxuu.mjs.map → policy-Dhtwntrt.mjs.map} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs → portable-text-U85hOafW.mjs} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs.map → portable-text-U85hOafW.mjs.map} +1 -1
- package/dist/{preview-PW-nOnq4.mjs → preview-B_vJLvf8.mjs} +2 -2
- package/dist/{preview-PW-nOnq4.mjs.map → preview-B_vJLvf8.mjs.map} +1 -1
- package/dist/{protocol-DjsJHTlK.d.mts → protocol-JdD2YhY9.d.mts} +2 -2
- package/dist/{protocol-DjsJHTlK.d.mts.map → protocol-JdD2YhY9.d.mts.map} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs → public-url-CarhZJgf.mjs} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs.map → public-url-CarhZJgf.mjs.map} +1 -1
- package/dist/{query-zTVAR1Sl.mjs → query-BZKZcG5b.mjs} +15 -15
- package/dist/{query-zTVAR1Sl.mjs.map → query-BZKZcG5b.mjs.map} +1 -1
- package/dist/{query-BWs7O5Il.mjs → query-BndaFxxp.mjs} +5 -5
- package/dist/{query-BWs7O5Il.mjs.map → query-BndaFxxp.mjs.map} +1 -1
- package/dist/{rate-limit-Bx4g9m3p.mjs → rate-limit-BZmATC6W.mjs} +2 -2
- package/dist/{rate-limit-Bx4g9m3p.mjs.map → rate-limit-BZmATC6W.mjs.map} +1 -1
- package/dist/{redirect-COsS6SWJ.mjs → redirect-CZkbozu9.mjs} +2 -2
- package/dist/{redirect-COsS6SWJ.mjs.map → redirect-CZkbozu9.mjs.map} +1 -1
- package/dist/{redirect-BgAOGHDq.mjs → redirect-CzqnLxK-.mjs} +1 -1
- package/dist/{redirect-BgAOGHDq.mjs.map → redirect-CzqnLxK-.mjs.map} +1 -1
- package/dist/{redirects-DTDHWH31.mjs → redirects-BLNOWQTn.mjs} +64 -29
- package/dist/redirects-BLNOWQTn.mjs.map +1 -0
- package/dist/{redirects-DyChwDkG.mjs → redirects-CqzNM0KM.mjs} +5 -5
- package/dist/{redirects-DyChwDkG.mjs.map → redirects-CqzNM0KM.mjs.map} +1 -1
- package/dist/{registry-Cqa2I749.mjs → registry-AZAsRsor.mjs} +30 -126
- package/dist/registry-AZAsRsor.mjs.map +1 -0
- package/dist/{relation-BnHB0T4J.mjs → relation-04DfKRTO.mjs} +2 -2
- package/dist/{relation-BnHB0T4J.mjs.map → relation-04DfKRTO.mjs.map} +1 -1
- package/dist/{relations-BBApI4e2.mjs → relations-C4htk5sb.mjs} +7 -7
- package/dist/relations-C4htk5sb.mjs.map +1 -0
- package/dist/{relations-D5sM5fW0.mjs → relations-CcFwDJdJ.mjs} +4 -4
- package/dist/{relations-D5sM5fW0.mjs.map → relations-CcFwDJdJ.mjs.map} +1 -1
- package/dist/{relations-BHo5A8Zf.d.mts → relations-DnRK4YIT.d.mts} +347 -54
- package/dist/relations-DnRK4YIT.d.mts.map +1 -0
- package/dist/{request-cache-BSUptuJR.mjs → request-cache-DH9zdCOD.mjs} +1 -1
- package/dist/{request-cache-BSUptuJR.mjs.map → request-cache-DH9zdCOD.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-DgZJh3zG.mjs → request-meta-DYxLlnmz.mjs} +2 -2
- package/dist/{request-meta-DgZJh3zG.mjs.map → request-meta-DYxLlnmz.mjs.map} +1 -1
- package/dist/{resolve-DOhVEvty.mjs → resolve-prZ3mP7l.mjs} +1 -1
- package/dist/{resolve-DOhVEvty.mjs.map → resolve-prZ3mP7l.mjs.map} +1 -1
- package/dist/{runner-C1T11CfC.mjs → runner-BLIDKpmA.mjs} +471 -290
- package/dist/runner-BLIDKpmA.mjs.map +1 -0
- package/dist/{runner-BYHZn3Jy.d.mts → runner-YKfIMnaF.d.mts} +3 -2
- package/dist/runner-YKfIMnaF.d.mts.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +1 -1
- package/dist/{schema-DZ5YVVZj.mjs → schema-CGnBeLiW.mjs} +3 -3
- package/dist/{schema-DZ5YVVZj.mjs.map → schema-CGnBeLiW.mjs.map} +1 -1
- package/dist/{schema-2AOsSn2v.mjs → schema-DYr-Vd-L.mjs} +36 -6
- package/dist/{schema-2AOsSn2v.mjs.map → schema-DYr-Vd-L.mjs.map} +1 -1
- package/dist/{scopes-8ClPF2bC.mjs → scopes-BhWvBavj.mjs} +3 -3
- package/dist/{scopes-8ClPF2bC.mjs.map → scopes-BhWvBavj.mjs.map} +1 -1
- package/dist/{search-u1QYdOCG.mjs → search-C-qDk4kx.mjs} +4 -4
- package/dist/{search-u1QYdOCG.mjs.map → search-C-qDk4kx.mjs.map} +1 -1
- package/dist/{secrets-BEgsAQEU.mjs → secrets-rEtHt-6z.mjs} +3 -3
- package/dist/{secrets-BEgsAQEU.mjs.map → secrets-rEtHt-6z.mjs.map} +1 -1
- package/dist/{sections-DmHviGyM.mjs → sections-B_nYvlwn.mjs} +2 -2
- package/dist/{sections-DmHviGyM.mjs.map → sections-B_nYvlwn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +25 -23
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +17 -15
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-Dq4G-RrO.mjs → seo-926NRIgt.mjs} +3 -3
- package/dist/{seo-Dq4G-RrO.mjs.map → seo-926NRIgt.mjs.map} +1 -1
- package/dist/{seo-AFpVvTqr.mjs → seo-CVWkdv6x.mjs} +1 -1
- package/dist/{seo-AFpVvTqr.mjs.map → seo-CVWkdv6x.mjs.map} +1 -1
- package/dist/{service-BpArayPr.mjs → service-CJl3ZAYs.mjs} +3 -3
- package/dist/{service-BpArayPr.mjs.map → service-CJl3ZAYs.mjs.map} +1 -1
- package/dist/{session-user-BEorKVT-.mjs → session-user-BlMgqCHS.mjs} +1 -1
- package/dist/{session-user-BEorKVT-.mjs.map → session-user-BlMgqCHS.mjs.map} +1 -1
- package/dist/{settings-xRdoUZr0.mjs → settings--wobrkkC.mjs} +21 -8
- package/dist/settings--wobrkkC.mjs.map +1 -0
- package/dist/{settings-DE9xtzqd.mjs → settings-Cwm6o2jY.mjs} +3 -3
- package/dist/{settings-DE9xtzqd.mjs.map → settings-Cwm6o2jY.mjs.map} +1 -1
- package/dist/{setup-complete-BnT8pq_C.mjs → setup-complete-DQbClIN2.mjs} +2 -2
- package/dist/{setup-complete-BnT8pq_C.mjs.map → setup-complete-DQbClIN2.mjs.map} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs → setup-nonce-DZCFS2sn.mjs} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs.map → setup-nonce-DZCFS2sn.mjs.map} +1 -1
- package/dist/{single-flight-cache-B0eLKS6K.mjs → single-flight-cache-BPuGPdcN.mjs} +2 -2
- package/dist/{single-flight-cache-B0eLKS6K.mjs.map → single-flight-cache-BPuGPdcN.mjs.map} +1 -1
- package/dist/{site-url-DjpIXMXJ.mjs → site-url-BrxA_E9H.mjs} +3 -3
- package/dist/{site-url-DjpIXMXJ.mjs.map → site-url-BrxA_E9H.mjs.map} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs → snapshot--OCDTqdb.mjs} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs.map → snapshot--OCDTqdb.mjs.map} +1 -1
- package/dist/{ssrf-Cpvg_n3A.mjs → ssrf-5sIM5jzl.mjs} +23 -6
- package/dist/{ssrf-Cpvg_n3A.mjs.map → ssrf-5sIM5jzl.mjs.map} +1 -1
- package/dist/{state-DYwPue40.mjs → state-BpFVsJZB.mjs} +12 -4
- package/dist/state-BpFVsJZB.mjs.map +1 -0
- package/dist/{status-CWVYpbD8.mjs → status-B777-dXz.mjs} +1 -1
- package/dist/{status-CWVYpbD8.mjs.map → status-B777-dXz.mjs.map} +1 -1
- package/dist/storage/local.d.mts +2 -1
- package/dist/storage/local.d.mts.map +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +2 -1
- package/dist/storage/s3.d.mts.map +1 -1
- package/dist/storage/s3.mjs +3 -2
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{target-DixqqV5i.mjs → target-BmR0iTwz.mjs} +1 -1
- package/dist/{target-DixqqV5i.mjs.map → target-BmR0iTwz.mjs.map} +1 -1
- package/dist/{taxonomies-OHUIiIpI.mjs → taxonomies-DkAkMupr.mjs} +17 -14
- package/dist/taxonomies-DkAkMupr.mjs.map +1 -0
- package/dist/{taxonomies-BlrncHi9.mjs → taxonomies-Wfy_Lg12.mjs} +43 -17
- package/dist/taxonomies-Wfy_Lg12.mjs.map +1 -0
- package/dist/{taxonomy-BqCZ1TdU.mjs → taxonomy-tJepplLL.mjs} +5 -5
- package/dist/{taxonomy-BqCZ1TdU.mjs.map → taxonomy-tJepplLL.mjs.map} +1 -1
- package/dist/{tokens-C39klX8R.mjs → tokens-BCO1oruF.mjs} +1 -1
- package/dist/{tokens-C39klX8R.mjs.map → tokens-BCO1oruF.mjs.map} +1 -1
- package/dist/{transaction-NQj4VJ7Z.mjs → transaction-0KOpOyMu.mjs} +2 -1
- package/dist/{transaction-NQj4VJ7Z.mjs.map → transaction-0KOpOyMu.mjs.map} +1 -1
- package/dist/{transport-DBJwa-Si.mjs → transport-Dr3qtwXC.mjs} +4 -3
- package/dist/{transport-DBJwa-Si.mjs.map → transport-Dr3qtwXC.mjs.map} +1 -1
- package/dist/{transport-RQE36APG.d.mts → transport-xh6YKW2G.d.mts} +1 -1
- package/dist/{transport-RQE36APG.d.mts.map → transport-xh6YKW2G.d.mts.map} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs → trusted-proxy-BR5F1Otp.mjs} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs.map → trusted-proxy-BR5F1Otp.mjs.map} +1 -1
- package/dist/{types-BW1syrlw.mjs → types-3qNFPlci.mjs} +1 -1
- package/dist/{types-BW1syrlw.mjs.map → types-3qNFPlci.mjs.map} +1 -1
- package/dist/types-75KIqzL9.mjs.map +1 -1
- package/dist/{types-DrJrVCT1.d.mts → types-B6GrPic4.d.mts} +9 -3
- package/dist/{types-DrJrVCT1.d.mts.map → types-B6GrPic4.d.mts.map} +1 -1
- package/dist/{types-DN64_zzZ.d.mts → types-BuHW4xDE.d.mts} +11 -10
- package/dist/types-BuHW4xDE.d.mts.map +1 -0
- package/dist/{types-DWRhk9xZ.d.mts → types-C00oyCZp.d.mts} +1 -1
- package/dist/{types-DWRhk9xZ.d.mts.map → types-C00oyCZp.d.mts.map} +1 -1
- package/dist/{types-BntycPTF.d.mts → types-CDtkNSFQ.d.mts} +1 -1
- package/dist/{types-BntycPTF.d.mts.map → types-CDtkNSFQ.d.mts.map} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts → types-CPeXo1wF.d.mts} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts.map → types-CPeXo1wF.d.mts.map} +1 -1
- package/dist/types-CQPWhPxE.mjs.map +1 -1
- package/dist/{types-BcqdcT-r.d.mts → types-CXFkwEGC.d.mts} +3 -2
- package/dist/types-CXFkwEGC.d.mts.map +1 -0
- package/dist/{types-CtzytVXn.mjs → types-DM3vioBY.mjs} +1 -1
- package/dist/{types-CtzytVXn.mjs.map → types-DM3vioBY.mjs.map} +1 -1
- package/dist/{types-CXnOzDe1.d.mts → types-DczELMop.d.mts} +1 -1
- package/dist/{types-CXnOzDe1.d.mts.map → types-DczELMop.d.mts.map} +1 -1
- package/dist/types-DfuTR6dL.mjs +3 -0
- package/dist/{types-DQIDRKF2.d.mts → types-FV23hEoW.d.mts} +10 -1
- package/dist/types-FV23hEoW.d.mts.map +1 -0
- package/dist/{types-C2pMvO62.d.mts → types-xDMtUFnO.d.mts} +2 -1
- package/dist/types-xDMtUFnO.d.mts.map +1 -0
- package/dist/{upload-attempts-D4FS8LT6.mjs → upload-attempts-BsqoQ1fn.mjs} +1 -1
- package/dist/{upload-attempts-D4FS8LT6.mjs.map → upload-attempts-BsqoQ1fn.mjs.map} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs → url-pattern-D4c2czpJ.mjs} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs.map → url-pattern-D4c2czpJ.mjs.map} +1 -1
- package/dist/{user-DJZfUJVE.mjs → user-BTZ40aq6.mjs} +2 -2
- package/dist/{user-DJZfUJVE.mjs.map → user-BTZ40aq6.mjs.map} +1 -1
- package/dist/{utils-D4vD_Y98.mjs → utils-BKvNjjhY.mjs} +1 -1
- package/dist/{utils-D4vD_Y98.mjs.map → utils-BKvNjjhY.mjs.map} +1 -1
- package/dist/{validate-BMLBvxOC.mjs → validate-DE_LRwo9.mjs} +2 -2
- package/dist/{validate-BMLBvxOC.mjs.map → validate-DE_LRwo9.mjs.map} +1 -1
- package/dist/{validate-CTqt5nuE.d.mts → validate-DUP27OYD.d.mts} +5 -5
- package/dist/{validate-CTqt5nuE.d.mts.map → validate-DUP27OYD.d.mts.map} +1 -1
- package/dist/{validation-npvENUCB.mjs → validation-BMImFJ11.mjs} +10 -8
- package/dist/{validation-npvENUCB.mjs.map → validation-BMImFJ11.mjs.map} +1 -1
- package/dist/version-Bii3suaO.mjs +7 -0
- package/dist/{version-DB_fqCSI.mjs.map → version-Bii3suaO.mjs.map} +1 -1
- package/dist/{widgets-BD3ho7Rq.mjs → widgets-D3gJ10xU.mjs} +18 -5
- package/dist/widgets-D3gJ10xU.mjs.map +1 -0
- package/dist/{wxr-taxonomies-Ca68766D.d.mts → wxr-taxonomies-B2Og_6rU.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Ca68766D.d.mts.map → wxr-taxonomies-B2Og_6rU.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs → wxr-taxonomies-Cxngsjwo.mjs} +4 -4
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs.map → wxr-taxonomies-Cxngsjwo.mjs.map} +1 -1
- package/dist/{zod-generator-LC-on_Vb.mjs → zod-generator-BuYSQJB7.mjs} +32 -22
- package/dist/zod-generator-BuYSQJB7.mjs.map +1 -0
- package/package.json +20 -9
- package/src/api/errors.ts +22 -0
- package/src/api/handlers/content.ts +49 -11
- package/src/api/handlers/index.ts +18 -0
- package/src/api/handlers/manifest.ts +161 -12
- package/src/api/handlers/media-allowlist.ts +1 -0
- package/src/api/handlers/media-folders.ts +130 -0
- package/src/api/handlers/media-usage-activation.ts +102 -0
- package/src/api/handlers/media-usage.ts +108 -0
- package/src/api/handlers/media.ts +92 -2
- package/src/api/handlers/registry.ts +483 -561
- package/src/api/handlers/taxonomies.ts +16 -9
- package/src/api/openapi/document.ts +277 -7
- package/src/api/parse.ts +1 -1
- package/src/api/schemas/auth.ts +4 -4
- package/src/api/schemas/bylines.ts +3 -3
- package/src/api/schemas/comments.ts +1 -1
- package/src/api/schemas/common.ts +3 -2
- package/src/api/schemas/content.ts +78 -22
- package/src/api/schemas/media-usage.ts +77 -0
- package/src/api/schemas/media.ts +121 -0
- package/src/api/schemas/redirects.ts +6 -1
- package/src/api/schemas/schema.ts +4 -0
- package/src/api/schemas/setup.ts +1 -1
- package/src/api/schemas/taxonomies.ts +2 -2
- package/src/api/schemas/users.ts +1 -1
- package/src/api/types.ts +23 -10
- package/src/astro/dev-typegen.ts +35 -0
- package/src/astro/image-endpoint.ts +2 -2
- package/src/astro/integration/dev-typegen.ts +91 -0
- package/src/astro/integration/index.ts +9 -44
- package/src/astro/integration/routes.ts +23 -0
- package/src/astro/integration/vite-config.ts +23 -9
- package/src/astro/middleware/auth.ts +4 -0
- package/src/astro/middleware.ts +5 -7
- package/src/astro/routes/api/admin/api-tokens/index.ts +4 -1
- package/src/astro/routes/api/admin/media-usage/activation.ts +42 -0
- package/src/astro/routes/api/admin/media-usage/progress.ts +37 -0
- package/src/astro/routes/api/admin/oauth-clients/[id].ts +1 -1
- package/src/astro/routes/api/admin/oauth-clients/index.ts +1 -1
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/artifact.ts +247 -101
- package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/verify.ts +60 -0
- package/src/astro/routes/api/auth/me.ts +14 -2
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +8 -2
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +6 -2
- package/src/astro/routes/api/manifest.ts +1 -1
- package/src/astro/routes/api/media/[id]/replace.ts +114 -0
- package/src/astro/routes/api/media/[id].ts +3 -0
- package/src/astro/routes/api/media/file/[...key].ts +4 -1
- package/src/astro/routes/api/media/folders/[id].ts +55 -0
- package/src/astro/routes/api/media/folders/index.ts +37 -0
- package/src/astro/routes/api/media/upload-url.ts +8 -4
- package/src/astro/routes/api/media.ts +66 -10
- package/src/astro/routes/api/menus/[name]/items/[id].ts +7 -2
- package/src/astro/routes/api/menus/[name]/items.ts +4 -1
- package/src/astro/routes/api/menus/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/menus/[name]/translations.ts +4 -1
- package/src/astro/routes/api/menus/[name].ts +7 -2
- package/src/astro/routes/api/menus/index.ts +4 -1
- package/src/astro/routes/api/settings/email.ts +1 -1
- package/src/astro/routes/api/settings.ts +4 -1
- package/src/astro/routes/api/setup/dev-bypass.ts +12 -0
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +7 -2
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name].ts +7 -2
- package/src/astro/routes/api/taxonomies/index.ts +4 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +5 -2
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name].ts +3 -1
- package/src/astro/routes/api/widget-areas/index.ts +3 -1
- package/src/astro/types.ts +34 -6
- package/src/auth/challenge-store.ts +3 -1
- package/src/aws-sdk.d.ts +1 -0
- package/src/cache/chrome-tags.ts +24 -0
- package/src/client/index.ts +140 -2
- package/src/client/transport.ts +6 -2
- package/src/components/EmDashImage.astro +156 -51
- package/src/components/EmDashMedia.astro +2 -1
- package/src/components/Gallery.astro +7 -0
- package/src/components/InlinePortableTextEditor.tsx +136 -2
- package/src/components/LiveSearch.astro +23 -0
- package/src/components/inline-code-block.tsx +180 -49
- package/src/components/widgets/Archives.astro +2 -37
- package/src/content/converters/gallery.ts +2 -0
- package/src/content/converters/index.ts +2 -0
- package/src/content/converters/mark-safety.ts +1 -0
- package/src/content/converters/portable-text-identity.ts +139 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +202 -69
- package/src/content/converters/prosemirror-to-portable-text.ts +96 -25
- package/src/content/converters/types.ts +3 -0
- package/src/database/connection.ts +2 -31
- package/src/database/index.ts +1 -1
- package/src/database/json-recordset.ts +16 -0
- package/src/database/migrations/017_authorization_codes.ts +14 -4
- package/src/database/migrations/019_i18n.ts +1 -1
- package/src/database/migrations/071_restore_content_bylines_table.ts +43 -0
- package/src/database/migrations/072_media_folders.ts +72 -0
- package/src/database/migrations/073_media_focal_point.ts +57 -0
- package/src/database/migrations/074_content_deleted_scheduled_index.ts +55 -0
- package/src/database/migrations/runner.ts +11 -3
- package/src/database/repositories/byline.ts +32 -16
- package/src/database/repositories/content.ts +119 -51
- package/src/database/repositories/media-folders.ts +115 -0
- package/src/database/repositories/media-usage-work.ts +395 -111
- package/src/database/repositories/media-usage.ts +1104 -47
- package/src/database/repositories/media.ts +156 -29
- package/src/database/repositories/plugin-storage.ts +74 -9
- package/src/database/repositories/types.ts +8 -7
- package/src/database/transaction.ts +1 -0
- package/src/database/types.ts +13 -0
- package/src/db/adapters.ts +10 -3
- package/src/db/node-sqlite-compat.ts +78 -0
- package/src/db/postgres.ts +23 -0
- package/src/db/sqlite.ts +3 -3
- package/src/emdash-runtime.ts +186 -251
- package/src/fields/boolean.ts +1 -1
- package/src/fields/datetime.ts +1 -1
- package/src/fields/file.ts +1 -1
- package/src/fields/image.ts +7 -1
- package/src/fields/integer.ts +1 -1
- package/src/fields/json.ts +1 -1
- package/src/fields/multiselect.ts +1 -1
- package/src/fields/number.ts +1 -1
- package/src/fields/portable-text.ts +1 -1
- package/src/fields/richtext.ts +1 -1
- package/src/fields/select.ts +1 -1
- package/src/fields/slug.ts +1 -1
- package/src/fields/text.ts +1 -1
- package/src/fields/textarea.ts +1 -1
- package/src/fields/types.ts +8 -4
- package/src/index.ts +30 -3
- package/src/loader.ts +63 -10
- package/src/mcp/server.ts +228 -24
- package/src/media/focal-point.ts +37 -0
- package/src/media/image-endpoint.ts +5 -2
- package/src/media/local-runtime.ts +8 -0
- package/src/media/mime.ts +1 -0
- package/src/media/normalize.ts +25 -4
- package/src/media/types.ts +10 -0
- package/src/media/usage/activation.ts +162 -35
- package/src/media/usage/capture-triggers.ts +19 -3
- package/src/media/usage/cleanup.ts +9 -8
- package/src/media/usage/collection-deletion-processor.ts +7 -3
- package/src/media/usage/collection-deletion.ts +10 -0
- package/src/media/usage/content-refresh.ts +258 -39
- package/src/media/usage/content-snapshots.ts +128 -31
- package/src/media/usage/extractor.ts +32 -13
- package/src/media/usage/maintenance-engine.ts +166 -0
- package/src/media/usage/reconciliation-processor.ts +106 -29
- package/src/media/usage/reconciliation.ts +90 -7
- package/src/media/usage/work-processor.ts +342 -101
- package/src/menus/index.ts +16 -0
- package/src/object-cache/index.ts +44 -2
- package/src/plugin-types.ts +18 -1
- package/src/plugins/hooks.ts +4 -1
- package/src/plugins/index.ts +7 -0
- package/src/plugins/manager.ts +2 -1
- package/src/plugins/manifest-schema.ts +1 -1
- package/src/plugins/routes.ts +3 -1
- package/src/plugins/sandbox/hook-result.ts +52 -0
- package/src/plugins/sandbox/index.ts +10 -0
- package/src/plugins/save-rejection.ts +20 -0
- package/src/plugins/scheduler/node.ts +1 -13
- package/src/plugins/scheduler/types.ts +0 -2
- package/src/plugins/state.ts +13 -3
- package/src/plugins/types.ts +6 -0
- package/src/registry/artifact-checksum.ts +15 -0
- package/src/registry/artifact-fetch.ts +530 -0
- package/src/registry/artifact-verification.ts +85 -0
- package/src/registry/authoritative-records.ts +180 -0
- package/src/registry/config.ts +24 -6
- package/src/registry/record-labels.ts +28 -0
- package/src/registry/types.ts +12 -15
- package/src/schema/registry.ts +26 -3
- package/src/schema/types.ts +1 -0
- package/src/schema/zod-generator.ts +28 -17
- package/src/security/ssrf.ts +26 -4
- package/src/seed/apply.ts +4 -4
- package/src/settings/index.ts +16 -0
- package/src/storage/local.ts +1 -0
- package/src/storage/s3.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/taxonomies/index.ts +40 -20
- package/src/ui.ts +2 -0
- package/src/widgets/archives.ts +67 -0
- package/src/widgets/index.ts +16 -0
- package/dist/api-BeBglVxU.mjs +0 -4695
- package/dist/api-BeBglVxU.mjs.map +0 -1
- package/dist/byline-yjvWq4ip.mjs.map +0 -1
- package/dist/challenge-store-SIL5DsF2.mjs.map +0 -1
- package/dist/collection-deletion-DQPvMD8R.mjs.map +0 -1
- package/dist/content-ZHCc1ngN.mjs.map +0 -1
- package/dist/content-refresh-B_8SJzuU.mjs.map +0 -1
- package/dist/context-ZldbZcle.mjs.map +0 -1
- package/dist/errors-CLUPm7aD.mjs.map +0 -1
- package/dist/index-BVBZj4-7.d.mts.map +0 -1
- package/dist/loader-CdG_Ci3H.mjs.map +0 -1
- package/dist/manifest-schema-BXbUAHod.mjs.map +0 -1
- package/dist/media-BWWWb8kg.mjs.map +0 -1
- package/dist/media-CzhAn2--.mjs.map +0 -1
- package/dist/media-allowlist-D6x-Us02.mjs.map +0 -1
- package/dist/media-usage-BZCydfvu.mjs.map +0 -1
- package/dist/media-usage-work-DrCbqBcl.mjs.map +0 -1
- package/dist/menus-DSo5QeW0.mjs.map +0 -1
- package/dist/mime-DfIVjNkr.mjs.map +0 -1
- package/dist/normalize-Bc-s_r-a.mjs.map +0 -1
- package/dist/object-cache-71tPfV4A.mjs.map +0 -1
- package/dist/options--hhz-jZ1.d.mts.map +0 -1
- package/dist/placeholder-Dp0K3RkD.d.mts.map +0 -1
- package/dist/redirects-DTDHWH31.mjs.map +0 -1
- package/dist/registry-Cqa2I749.mjs.map +0 -1
- package/dist/relations-BBApI4e2.mjs.map +0 -1
- package/dist/relations-BHo5A8Zf.d.mts.map +0 -1
- package/dist/runner-BYHZn3Jy.d.mts.map +0 -1
- package/dist/runner-C1T11CfC.mjs.map +0 -1
- package/dist/settings-xRdoUZr0.mjs.map +0 -1
- package/dist/state-DYwPue40.mjs.map +0 -1
- package/dist/taxonomies-BlrncHi9.mjs.map +0 -1
- package/dist/taxonomies-OHUIiIpI.mjs.map +0 -1
- package/dist/types-BcqdcT-r.d.mts.map +0 -1
- package/dist/types-C2pMvO62.d.mts.map +0 -1
- package/dist/types-CP1CflWf.mjs +0 -3
- package/dist/types-DN64_zzZ.d.mts.map +0 -1
- package/dist/types-DQIDRKF2.d.mts.map +0 -1
- package/dist/version-DB_fqCSI.mjs +0 -7
- package/dist/widgets-BD3ho7Rq.mjs.map +0 -1
- package/dist/zod-generator-LC-on_Vb.mjs.map +0 -1
- /package/dist/{api-tokens-rIXC6LdE.mjs → api-tokens-BfYts-sq.mjs} +0 -0
- /package/dist/{ssrf-DpXgKsna.mjs → ssrf-Dg3cIT-b.mjs} +0 -0
package/src/mcp/server.ts
CHANGED
|
@@ -21,8 +21,10 @@ import {
|
|
|
21
21
|
contentBylineInputSchema,
|
|
22
22
|
contentSeoInput,
|
|
23
23
|
createCollectionBody,
|
|
24
|
+
createTaxonomyDefBody,
|
|
24
25
|
updateCollectionBody,
|
|
25
26
|
updateFieldBody,
|
|
27
|
+
updateTaxonomyDefBody,
|
|
26
28
|
} from "#api/schemas.js";
|
|
27
29
|
|
|
28
30
|
import type { MediaUsageRepairRequest } from "../api/schemas/media-usage.js";
|
|
@@ -37,8 +39,34 @@ import { decodeBase64, encodeBase64 } from "../utils/base64.js";
|
|
|
37
39
|
const COLLECTION_SLUG_PATTERN = /^[a-z][a-z0-9_]*$/;
|
|
38
40
|
/** http(s) scheme matcher used by `settings_update` URL validation. */
|
|
39
41
|
const HTTP_SCHEME_PATTERN = /^https?:\/\//i;
|
|
42
|
+
/**
|
|
43
|
+
* Shared wording for the `_rev` parameter on write tools. Agents only see the
|
|
44
|
+
* tool schema, so the retry protocol is stated here.
|
|
45
|
+
*/
|
|
46
|
+
const REV_PARAM_DESCRIPTION =
|
|
47
|
+
"Revision token proving you have read the current item. Call content_get " +
|
|
48
|
+
"first and pass back the _rev it returns. If this call fails with CONFLICT " +
|
|
49
|
+
"the item changed in the meantime: call content_get again and retry with " +
|
|
50
|
+
"the new token.";
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Replaces Zod's "expected string, received undefined" for a caller that never
|
|
54
|
+
* read the schema, so the message says where the token comes from.
|
|
55
|
+
*/
|
|
56
|
+
const REV_MISSING_ERROR =
|
|
57
|
+
"_rev is required: call content_get for this item and pass back the _rev it returns.";
|
|
58
|
+
|
|
40
59
|
const TAXONOMY_CURSOR_VERSION = 2;
|
|
41
60
|
const MAX_TAXONOMY_CURSOR_LENGTH = 2048;
|
|
61
|
+
const contentDateTimeInputSchema = z.iso
|
|
62
|
+
.datetime({ offset: true, message: "must be an ISO 8601 datetime" })
|
|
63
|
+
.or(
|
|
64
|
+
z.iso.datetime({
|
|
65
|
+
offset: true,
|
|
66
|
+
precision: -1,
|
|
67
|
+
message: "must be an ISO 8601 datetime",
|
|
68
|
+
}),
|
|
69
|
+
);
|
|
42
70
|
|
|
43
71
|
// ---------------------------------------------------------------------------
|
|
44
72
|
// Shared schemas — kept in sync with `api/schemas/settings.ts` (which the
|
|
@@ -150,6 +178,12 @@ const schemaUpdateCollectionToolSchema = z.object({
|
|
|
150
178
|
commentsAutoApproveUsers: updateCollectionBody.shape.commentsAutoApproveUsers.describe(
|
|
151
179
|
"Whether comments from authenticated users are automatically approved",
|
|
152
180
|
),
|
|
181
|
+
titleField: updateCollectionBody.shape.titleField.describe(
|
|
182
|
+
"Field slug to use as the Title column in admin lists; pass null to fall back to the default",
|
|
183
|
+
),
|
|
184
|
+
dateField: updateCollectionBody.shape.dateField.describe(
|
|
185
|
+
"Datetime field slug to use as the Date column in admin lists; pass null to fall back to the default",
|
|
186
|
+
),
|
|
153
187
|
});
|
|
154
188
|
|
|
155
189
|
const schemaUpdateFieldToolSchema = z.object({
|
|
@@ -617,6 +651,13 @@ function extractContentId(data: unknown): string | undefined {
|
|
|
617
651
|
return typeof item?.id === "string" ? item.id : undefined;
|
|
618
652
|
}
|
|
619
653
|
|
|
654
|
+
/** Extract the `_rev` token from a content handler response. */
|
|
655
|
+
function extractContentRev(data: unknown): string | undefined {
|
|
656
|
+
if (!data || typeof data !== "object") return undefined;
|
|
657
|
+
const rev = (data as Record<string, unknown>)._rev;
|
|
658
|
+
return typeof rev === "string" ? rev : undefined;
|
|
659
|
+
}
|
|
660
|
+
|
|
620
661
|
// ---------------------------------------------------------------------------
|
|
621
662
|
// Server factory
|
|
622
663
|
// ---------------------------------------------------------------------------
|
|
@@ -827,8 +868,9 @@ export function createMcpServer(
|
|
|
827
868
|
title: "Get Content",
|
|
828
869
|
description:
|
|
829
870
|
"Get a single content item by its ID or slug. Returns the full content data " +
|
|
830
|
-
"including all field values, metadata, and a _rev token
|
|
831
|
-
"
|
|
871
|
+
"including all field values, metadata, and a _rev token. content_update, " +
|
|
872
|
+
"content_publish, content_unpublish and content_discard_draft require that " +
|
|
873
|
+
"token, so read the item here before calling them.",
|
|
832
874
|
inputSchema: z.object({
|
|
833
875
|
collection: z.string().describe("Collection slug (e.g. 'posts', 'pages')"),
|
|
834
876
|
id: z.string().describe("Content item ID (ULID) or slug"),
|
|
@@ -995,9 +1037,12 @@ export function createMcpServer(
|
|
|
995
1037
|
"in the 'data' object — unspecified fields are left unchanged. Rich text " +
|
|
996
1038
|
"(portableText) fields accept a Markdown string (recommended, converted " +
|
|
997
1039
|
"automatically); use a Portable Text JSON array only for complex content " +
|
|
998
|
-
"Markdown can't express (custom blocks, embeds).
|
|
999
|
-
"
|
|
1000
|
-
"
|
|
1040
|
+
"Markdown can't express (custom blocks, embeds). Requires the _rev " +
|
|
1041
|
+
"token from content_get, so read the item before updating it: the " +
|
|
1042
|
+
"update fails if the item changed since that read. When status is not " +
|
|
1043
|
+
"set, a change to a published item is staged as a draft, so the " +
|
|
1044
|
+
"response shows the new values while the live version keeps the old " +
|
|
1045
|
+
"ones until content_publish. " +
|
|
1001
1046
|
"`seo` and `bylines` are persisted alongside the field updates in a " +
|
|
1002
1047
|
"single transaction. `publishedAt` requires the content:publish_any " +
|
|
1003
1048
|
"permission and is useful for migrations or correcting historical dates.",
|
|
@@ -1043,16 +1088,12 @@ export function createMcpServer(
|
|
|
1043
1088
|
.describe(
|
|
1044
1089
|
"Replace taxonomy term assignments as { taxonomyName: [termSlug, ...] }. Term slugs are resolved in the entry's locale. Only named taxonomies are touched; other taxonomies are left unchanged. Pass an empty array to clear a taxonomy.",
|
|
1045
1090
|
),
|
|
1046
|
-
publishedAt:
|
|
1047
|
-
.datetime({ offset: true, message: "must be an ISO 8601 datetime" })
|
|
1091
|
+
publishedAt: contentDateTimeInputSchema
|
|
1048
1092
|
.nullish()
|
|
1049
1093
|
.describe(
|
|
1050
1094
|
"Override the publication timestamp (ISO 8601). Requires content:publish_any permission. Pass null to clear. Useful for content migrations.",
|
|
1051
1095
|
),
|
|
1052
|
-
_rev: z
|
|
1053
|
-
.string()
|
|
1054
|
-
.optional()
|
|
1055
|
-
.describe("Revision token from content_get for conflict detection"),
|
|
1096
|
+
_rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION),
|
|
1056
1097
|
}),
|
|
1057
1098
|
},
|
|
1058
1099
|
async (args, extra) => {
|
|
@@ -1090,6 +1131,7 @@ export function createMcpServer(
|
|
|
1090
1131
|
// Status transitions route through dedicated handlers for proper revision management
|
|
1091
1132
|
if (args.status === "published") {
|
|
1092
1133
|
requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
|
|
1134
|
+
let rev: string | undefined = args._rev;
|
|
1093
1135
|
if (
|
|
1094
1136
|
args.data ||
|
|
1095
1137
|
args.slug ||
|
|
@@ -1110,12 +1152,16 @@ export function createMcpServer(
|
|
|
1110
1152
|
_rev: args._rev,
|
|
1111
1153
|
});
|
|
1112
1154
|
if (!updateResult.success) return unwrap(updateResult);
|
|
1155
|
+
rev = extractContentRev(updateResult.data);
|
|
1113
1156
|
}
|
|
1114
|
-
return unwrap(
|
|
1157
|
+
return unwrap(
|
|
1158
|
+
await emdash.handleContentPublish(args.collection, resolvedId, { _rev: rev }),
|
|
1159
|
+
);
|
|
1115
1160
|
}
|
|
1116
1161
|
|
|
1117
1162
|
if (args.status === "draft") {
|
|
1118
1163
|
requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
|
|
1164
|
+
let rev: string | undefined = args._rev;
|
|
1119
1165
|
if (
|
|
1120
1166
|
args.data ||
|
|
1121
1167
|
args.slug ||
|
|
@@ -1136,8 +1182,11 @@ export function createMcpServer(
|
|
|
1136
1182
|
_rev: args._rev,
|
|
1137
1183
|
});
|
|
1138
1184
|
if (!updateResult.success) return unwrap(updateResult);
|
|
1185
|
+
rev = extractContentRev(updateResult.data);
|
|
1139
1186
|
}
|
|
1140
|
-
return unwrap(
|
|
1187
|
+
return unwrap(
|
|
1188
|
+
await emdash.handleContentUnpublish(args.collection, resolvedId, { _rev: rev }),
|
|
1189
|
+
);
|
|
1141
1190
|
}
|
|
1142
1191
|
|
|
1143
1192
|
return unwrap(
|
|
@@ -1260,8 +1309,8 @@ export function createMcpServer(
|
|
|
1260
1309
|
inputSchema: z.object({
|
|
1261
1310
|
collection: z.string().describe("Collection slug"),
|
|
1262
1311
|
id: z.string().describe("Content item ID or slug"),
|
|
1263
|
-
|
|
1264
|
-
|
|
1312
|
+
_rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION),
|
|
1313
|
+
publishedAt: contentDateTimeInputSchema
|
|
1265
1314
|
.optional()
|
|
1266
1315
|
.describe(
|
|
1267
1316
|
"Override publication timestamp (ISO 8601). Requires content:publish_any permission. Useful when importing content with original publish dates.",
|
|
@@ -1297,6 +1346,7 @@ export function createMcpServer(
|
|
|
1297
1346
|
return unwrap(
|
|
1298
1347
|
await emdash.handleContentPublish(args.collection, resolvedId, {
|
|
1299
1348
|
publishedAt: args.publishedAt,
|
|
1349
|
+
_rev: args._rev,
|
|
1300
1350
|
}),
|
|
1301
1351
|
);
|
|
1302
1352
|
},
|
|
@@ -1308,10 +1358,11 @@ export function createMcpServer(
|
|
|
1308
1358
|
title: "Unpublish Content",
|
|
1309
1359
|
description:
|
|
1310
1360
|
"Unpublish a content item, reverting it to draft status. It will no " +
|
|
1311
|
-
"longer be visible on the live site but its content
|
|
1361
|
+
"longer be visible on the live site, but its content and publication date are preserved.",
|
|
1312
1362
|
inputSchema: z.object({
|
|
1313
1363
|
collection: z.string().describe("Collection slug"),
|
|
1314
1364
|
id: z.string().describe("Content item ID or slug"),
|
|
1365
|
+
_rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION),
|
|
1315
1366
|
}),
|
|
1316
1367
|
},
|
|
1317
1368
|
async (args, extra) => {
|
|
@@ -1332,7 +1383,9 @@ export function createMcpServer(
|
|
|
1332
1383
|
);
|
|
1333
1384
|
|
|
1334
1385
|
const resolvedId = extractContentId(existing.data) ?? args.id;
|
|
1335
|
-
return unwrap(
|
|
1386
|
+
return unwrap(
|
|
1387
|
+
await ec.handleContentUnpublish(args.collection, resolvedId, { _rev: args._rev }),
|
|
1388
|
+
);
|
|
1336
1389
|
},
|
|
1337
1390
|
);
|
|
1338
1391
|
|
|
@@ -1440,6 +1493,7 @@ export function createMcpServer(
|
|
|
1440
1493
|
inputSchema: z.object({
|
|
1441
1494
|
collection: z.string().describe("Collection slug"),
|
|
1442
1495
|
id: z.string().describe("Content item ID or slug"),
|
|
1496
|
+
_rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION),
|
|
1443
1497
|
}),
|
|
1444
1498
|
annotations: { destructiveHint: true },
|
|
1445
1499
|
},
|
|
@@ -1461,7 +1515,9 @@ export function createMcpServer(
|
|
|
1461
1515
|
);
|
|
1462
1516
|
|
|
1463
1517
|
const resolvedId = extractContentId(existing.data) ?? args.id;
|
|
1464
|
-
return unwrap(
|
|
1518
|
+
return unwrap(
|
|
1519
|
+
await ec.handleContentDiscardDraft(args.collection, resolvedId, { _rev: args._rev }),
|
|
1520
|
+
);
|
|
1465
1521
|
},
|
|
1466
1522
|
);
|
|
1467
1523
|
|
|
@@ -1969,7 +2025,7 @@ export function createMcpServer(
|
|
|
1969
2025
|
.describe("Target collection slug for reference fields"),
|
|
1970
2026
|
rows: z.number().optional().describe("Number of rows for textarea"),
|
|
1971
2027
|
})
|
|
1972
|
-
.
|
|
2028
|
+
.loose()
|
|
1973
2029
|
.optional()
|
|
1974
2030
|
.describe("Widget configuration"),
|
|
1975
2031
|
searchable: z
|
|
@@ -2168,7 +2224,6 @@ export function createMcpServer(
|
|
|
2168
2224
|
.optional()
|
|
2169
2225
|
.describe("Base64-encoded file contents. Provide exactly one of base64 / url."),
|
|
2170
2226
|
url: z
|
|
2171
|
-
.string()
|
|
2172
2227
|
.url()
|
|
2173
2228
|
.optional()
|
|
2174
2229
|
.describe(
|
|
@@ -2423,6 +2478,158 @@ export function createMcpServer(
|
|
|
2423
2478
|
},
|
|
2424
2479
|
);
|
|
2425
2480
|
|
|
2481
|
+
server.registerTool(
|
|
2482
|
+
"taxonomy_get",
|
|
2483
|
+
{
|
|
2484
|
+
title: "Get Taxonomy Definition",
|
|
2485
|
+
description:
|
|
2486
|
+
"Get a single taxonomy definition by name. Taxonomy definitions describe " +
|
|
2487
|
+
"a classification system (e.g. categories or tags), which collections " +
|
|
2488
|
+
"it applies to, and whether it is hierarchical. Pass `locale` to resolve " +
|
|
2489
|
+
"a specific translation; otherwise the lowest matching locale is returned.",
|
|
2490
|
+
inputSchema: z.object({
|
|
2491
|
+
name: z.string().describe("Taxonomy name (e.g. 'categories', 'tags')"),
|
|
2492
|
+
locale: z.string().optional().describe("Locale to resolve the definition for"),
|
|
2493
|
+
}),
|
|
2494
|
+
annotations: { readOnlyHint: true },
|
|
2495
|
+
},
|
|
2496
|
+
async (args, extra) => {
|
|
2497
|
+
requireScope(extra, "content:read");
|
|
2498
|
+
const ec = getEmDash(extra);
|
|
2499
|
+
try {
|
|
2500
|
+
const { handleTaxonomyGet } = await import("../api/handlers/taxonomies.js");
|
|
2501
|
+
return unwrap(await handleTaxonomyGet(ec.db, args.name, { locale: args.locale }));
|
|
2502
|
+
} catch (error) {
|
|
2503
|
+
return respondHandlerError(error, "TAXONOMY_GET_ERROR");
|
|
2504
|
+
}
|
|
2505
|
+
},
|
|
2506
|
+
);
|
|
2507
|
+
|
|
2508
|
+
server.registerTool(
|
|
2509
|
+
"taxonomy_create",
|
|
2510
|
+
{
|
|
2511
|
+
title: "Create Taxonomy Definition",
|
|
2512
|
+
description:
|
|
2513
|
+
"Create a new taxonomy definition. Definitions are per-locale; pass " +
|
|
2514
|
+
"`locale` when the same taxonomy name exists in multiple translations. " +
|
|
2515
|
+
"`collections` names which content types the taxonomy applies to. " +
|
|
2516
|
+
"If `translationOf` is set, the new definition joins the source's " +
|
|
2517
|
+
"translation group and inherits `hierarchical` and `collections` from " +
|
|
2518
|
+
"the source when those fields are omitted.",
|
|
2519
|
+
inputSchema: z.object({
|
|
2520
|
+
name: createTaxonomyDefBody.shape.name.describe(
|
|
2521
|
+
"Taxonomy name (lowercase letters, numbers, underscores)",
|
|
2522
|
+
),
|
|
2523
|
+
label: createTaxonomyDefBody.shape.label.describe("Display name"),
|
|
2524
|
+
labelSingular: createTaxonomyDefBody.shape.labelSingular.describe(
|
|
2525
|
+
"Singular form of the display name",
|
|
2526
|
+
),
|
|
2527
|
+
hierarchical: createTaxonomyDefBody.shape.hierarchical.describe(
|
|
2528
|
+
"Whether the taxonomy supports parent/child terms (defaults to false, or inherited from translationOf)",
|
|
2529
|
+
),
|
|
2530
|
+
collections: createTaxonomyDefBody.shape.collections.describe(
|
|
2531
|
+
"Collection slugs this taxonomy applies to (defaults to [], or inherited from translationOf)",
|
|
2532
|
+
),
|
|
2533
|
+
locale: z.string().optional().describe("Locale for this definition (e.g. 'fr-fr')"),
|
|
2534
|
+
translationOf: z
|
|
2535
|
+
.string()
|
|
2536
|
+
.optional()
|
|
2537
|
+
.describe("Existing taxonomy definition id to create this locale variant from"),
|
|
2538
|
+
}),
|
|
2539
|
+
},
|
|
2540
|
+
async (args, extra) => {
|
|
2541
|
+
requireScope(extra, "taxonomies:manage");
|
|
2542
|
+
requireRole(extra, Role.EDITOR);
|
|
2543
|
+
const ec = getEmDash(extra);
|
|
2544
|
+
try {
|
|
2545
|
+
const { handleTaxonomyCreate } = await import("../api/handlers/taxonomies.js");
|
|
2546
|
+
return unwrap(
|
|
2547
|
+
await handleTaxonomyCreate(ec.db, {
|
|
2548
|
+
name: args.name,
|
|
2549
|
+
label: args.label,
|
|
2550
|
+
labelSingular: args.labelSingular,
|
|
2551
|
+
hierarchical: args.hierarchical,
|
|
2552
|
+
collections: args.collections,
|
|
2553
|
+
locale: args.locale,
|
|
2554
|
+
translationOf: args.translationOf,
|
|
2555
|
+
}),
|
|
2556
|
+
);
|
|
2557
|
+
} catch (error) {
|
|
2558
|
+
return respondHandlerError(error, "TAXONOMY_CREATE_ERROR");
|
|
2559
|
+
}
|
|
2560
|
+
},
|
|
2561
|
+
);
|
|
2562
|
+
|
|
2563
|
+
server.registerTool(
|
|
2564
|
+
"taxonomy_update",
|
|
2565
|
+
{
|
|
2566
|
+
title: "Update Taxonomy Definition",
|
|
2567
|
+
description:
|
|
2568
|
+
"Update an existing taxonomy definition. The taxonomy `name` cannot be " +
|
|
2569
|
+
"changed. Pass `locale` to update a specific translation; otherwise the " +
|
|
2570
|
+
"lowest matching locale is updated. Any field may be omitted to leave it " +
|
|
2571
|
+
"unchanged.",
|
|
2572
|
+
inputSchema: z.object({
|
|
2573
|
+
name: z.string().describe("Taxonomy name to update"),
|
|
2574
|
+
label: updateTaxonomyDefBody.shape.label.describe("New display name"),
|
|
2575
|
+
labelSingular: updateTaxonomyDefBody.shape.labelSingular.describe(
|
|
2576
|
+
"New singular display name; pass null to clear",
|
|
2577
|
+
),
|
|
2578
|
+
hierarchical: updateTaxonomyDefBody.shape.hierarchical.describe(
|
|
2579
|
+
"Whether the taxonomy supports parent/child terms",
|
|
2580
|
+
),
|
|
2581
|
+
collections: updateTaxonomyDefBody.shape.collections.describe(
|
|
2582
|
+
"Collection slugs this taxonomy applies to",
|
|
2583
|
+
),
|
|
2584
|
+
locale: z.string().optional().describe("Locale of the definition to update"),
|
|
2585
|
+
}),
|
|
2586
|
+
},
|
|
2587
|
+
async (args, extra) => {
|
|
2588
|
+
requireScope(extra, "taxonomies:manage");
|
|
2589
|
+
requireRole(extra, Role.EDITOR);
|
|
2590
|
+
const ec = getEmDash(extra);
|
|
2591
|
+
try {
|
|
2592
|
+
const { handleTaxonomyUpdate } = await import("../api/handlers/taxonomies.js");
|
|
2593
|
+
return unwrap(
|
|
2594
|
+
await handleTaxonomyUpdate(ec.db, args.name, {
|
|
2595
|
+
label: args.label,
|
|
2596
|
+
labelSingular: args.labelSingular,
|
|
2597
|
+
hierarchical: args.hierarchical,
|
|
2598
|
+
collections: args.collections,
|
|
2599
|
+
locale: args.locale,
|
|
2600
|
+
}),
|
|
2601
|
+
);
|
|
2602
|
+
} catch (error) {
|
|
2603
|
+
return respondHandlerError(error, "TAXONOMY_UPDATE_ERROR");
|
|
2604
|
+
}
|
|
2605
|
+
},
|
|
2606
|
+
);
|
|
2607
|
+
|
|
2608
|
+
server.registerTool(
|
|
2609
|
+
"taxonomy_delete",
|
|
2610
|
+
{
|
|
2611
|
+
title: "Delete Taxonomy Definition",
|
|
2612
|
+
description:
|
|
2613
|
+
"Delete a taxonomy definition and all of its terms in every locale, " +
|
|
2614
|
+
"along with any content assignments those terms hold. This cannot be undone.",
|
|
2615
|
+
inputSchema: z.object({
|
|
2616
|
+
name: z.string().describe("Taxonomy name to delete"),
|
|
2617
|
+
}),
|
|
2618
|
+
annotations: { destructiveHint: true },
|
|
2619
|
+
},
|
|
2620
|
+
async (args, extra) => {
|
|
2621
|
+
requireScope(extra, "taxonomies:manage");
|
|
2622
|
+
requireRole(extra, Role.EDITOR);
|
|
2623
|
+
const ec = getEmDash(extra);
|
|
2624
|
+
try {
|
|
2625
|
+
const { handleTaxonomyDelete } = await import("../api/handlers/taxonomies.js");
|
|
2626
|
+
return unwrap(await handleTaxonomyDelete(ec.db, args.name));
|
|
2627
|
+
} catch (error) {
|
|
2628
|
+
return respondHandlerError(error, "TAXONOMY_DELETE_ERROR");
|
|
2629
|
+
}
|
|
2630
|
+
},
|
|
2631
|
+
);
|
|
2632
|
+
|
|
2426
2633
|
server.registerTool(
|
|
2427
2634
|
"taxonomy_list_terms",
|
|
2428
2635
|
{
|
|
@@ -3026,10 +3233,7 @@ export function createMcpServer(
|
|
|
3026
3233
|
.describe("Favicon media reference ({ mediaId, alt? })"),
|
|
3027
3234
|
url: z
|
|
3028
3235
|
.union([
|
|
3029
|
-
z
|
|
3030
|
-
.string()
|
|
3031
|
-
.url()
|
|
3032
|
-
.refine((u) => HTTP_SCHEME_PATTERN.test(u), "URL must use http or https"),
|
|
3236
|
+
z.url().refine((u) => HTTP_SCHEME_PATTERN.test(u), "URL must use http or https"),
|
|
3033
3237
|
z.literal(""),
|
|
3034
3238
|
])
|
|
3035
3239
|
.optional()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface FocalPoint {
|
|
2
|
+
focalX: number;
|
|
3
|
+
focalY: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface FocalPointUpdate {
|
|
7
|
+
focalX?: number | null;
|
|
8
|
+
focalY?: number | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function isFocalCoordinate(value: unknown): value is number {
|
|
12
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function normalizeFocalPoint(focalX: unknown, focalY: unknown): FocalPoint | null {
|
|
16
|
+
if (!isFocalCoordinate(focalX) || !isFocalCoordinate(focalY)) return null;
|
|
17
|
+
return { focalX, focalY };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function isValidFocalPointUpdate(input: FocalPointUpdate): boolean {
|
|
21
|
+
const hasX = input.focalX !== undefined;
|
|
22
|
+
const hasY = input.focalY !== undefined;
|
|
23
|
+
if (!hasX && !hasY) return true;
|
|
24
|
+
if (!hasX || !hasY) return false;
|
|
25
|
+
if (input.focalX === null || input.focalY === null) {
|
|
26
|
+
return input.focalX === null && input.focalY === null;
|
|
27
|
+
}
|
|
28
|
+
return normalizeFocalPoint(input.focalX, input.focalY) !== null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function focalPointToObjectPosition(focalX: unknown, focalY: unknown): string | undefined {
|
|
32
|
+
const point = normalizeFocalPoint(focalX, focalY);
|
|
33
|
+
if (!point) return undefined;
|
|
34
|
+
const x = Math.round(point.focalX * 10_000) / 100;
|
|
35
|
+
const y = Math.round(point.focalY * 10_000) / 100;
|
|
36
|
+
return `${x}% ${y}%`;
|
|
37
|
+
}
|
|
@@ -50,9 +50,12 @@ export interface ImageTransformOptions {
|
|
|
50
50
|
quality?: number;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
/** Long-lived
|
|
53
|
+
/** Long-lived cache for content-addressed image URLs. */
|
|
54
54
|
export const IMMUTABLE_IMAGE_CACHE = "public, max-age=31536000, immutable";
|
|
55
55
|
|
|
56
|
+
/** Cache policy for media keys that Replace original may overwrite. */
|
|
57
|
+
export const MUTABLE_MEDIA_CACHE_CONTROL = "public, max-age=0, must-revalidate";
|
|
58
|
+
|
|
56
59
|
/**
|
|
57
60
|
* Raster types safe to render inline. Anything else (SVG, PDF, ...) is served
|
|
58
61
|
* as an attachment so it can't execute as an active document. Mirrors the
|
|
@@ -77,7 +80,7 @@ const SAFE_INLINE_IMAGE_TYPES = new Set([
|
|
|
77
80
|
export function originalMediaHeaders(contentType: string): Record<string, string> {
|
|
78
81
|
return {
|
|
79
82
|
"Content-Type": contentType,
|
|
80
|
-
"Cache-Control":
|
|
83
|
+
"Cache-Control": MUTABLE_MEDIA_CACHE_CONTROL,
|
|
81
84
|
"X-Content-Type-Options": "nosniff",
|
|
82
85
|
"Content-Security-Policy":
|
|
83
86
|
"sandbox; default-src 'none'; img-src 'self'; style-src 'unsafe-inline'",
|
|
@@ -73,6 +73,8 @@ export const createMediaProvider: CreateMediaProviderFn<LocalMediaRuntimeConfig>
|
|
|
73
73
|
size: item.size ?? undefined,
|
|
74
74
|
width: item.width ?? undefined,
|
|
75
75
|
height: item.height ?? undefined,
|
|
76
|
+
focalX: item.focalX ?? undefined,
|
|
77
|
+
focalY: item.focalY ?? undefined,
|
|
76
78
|
blurhash: item.blurhash ?? undefined,
|
|
77
79
|
dominantColor: item.dominantColor ?? undefined,
|
|
78
80
|
alt: item.alt ?? undefined,
|
|
@@ -99,6 +101,8 @@ export const createMediaProvider: CreateMediaProviderFn<LocalMediaRuntimeConfig>
|
|
|
99
101
|
size: item.size ?? undefined,
|
|
100
102
|
width: item.width ?? undefined,
|
|
101
103
|
height: item.height ?? undefined,
|
|
104
|
+
focalX: item.focalX ?? undefined,
|
|
105
|
+
focalY: item.focalY ?? undefined,
|
|
102
106
|
blurhash: item.blurhash ?? undefined,
|
|
103
107
|
dominantColor: item.dominantColor ?? undefined,
|
|
104
108
|
alt: item.alt ?? undefined,
|
|
@@ -225,6 +229,8 @@ export function repoItemToProviderItem(item: {
|
|
|
225
229
|
size: number | null;
|
|
226
230
|
width: number | null;
|
|
227
231
|
height: number | null;
|
|
232
|
+
focalX?: number | null;
|
|
233
|
+
focalY?: number | null;
|
|
228
234
|
alt: string | null;
|
|
229
235
|
caption: string | null;
|
|
230
236
|
storageKey: string;
|
|
@@ -238,6 +244,8 @@ export function repoItemToProviderItem(item: {
|
|
|
238
244
|
size: item.size ?? undefined,
|
|
239
245
|
width: item.width ?? undefined,
|
|
240
246
|
height: item.height ?? undefined,
|
|
247
|
+
focalX: item.focalX ?? undefined,
|
|
248
|
+
focalY: item.focalY ?? undefined,
|
|
241
249
|
blurhash: item.blurhash ?? undefined,
|
|
242
250
|
dominantColor: item.dominantColor ?? undefined,
|
|
243
251
|
alt: item.alt ?? undefined,
|
package/src/media/mime.ts
CHANGED
package/src/media/normalize.ts
CHANGED
|
@@ -9,11 +9,22 @@
|
|
|
9
9
|
* the provider's `get()` method.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import { normalizeFocalPoint } from "./focal-point.js";
|
|
12
13
|
import type { MediaProvider, MediaProviderItem, MediaValue } from "./types.js";
|
|
13
14
|
|
|
14
15
|
export const INTERNAL_MEDIA_PREFIX = "/_emdash/api/media/file/";
|
|
15
16
|
const URL_PATTERN = /^https?:\/\//;
|
|
16
17
|
|
|
18
|
+
export function normalizeLegacyExternalMediaValue(value: MediaValue): MediaValue {
|
|
19
|
+
if (value.provider !== "external-url") return value;
|
|
20
|
+
const src = value.src ?? value.previewUrl;
|
|
21
|
+
return {
|
|
22
|
+
...value,
|
|
23
|
+
provider: "external",
|
|
24
|
+
...(src === undefined ? {} : { src }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
17
28
|
/**
|
|
18
29
|
* Normalize a media field value into a consistent MediaValue shape.
|
|
19
30
|
*
|
|
@@ -40,16 +51,17 @@ export async function normalizeMediaValue(
|
|
|
40
51
|
// Must have at least an id to be a valid media value
|
|
41
52
|
if (!("id" in value) && !("src" in value)) return null;
|
|
42
53
|
|
|
43
|
-
const
|
|
44
|
-
const
|
|
54
|
+
const parsed = normalizeLegacyExternalMediaValue(recordToMediaValue(value));
|
|
55
|
+
const provider = parsed.provider || "local";
|
|
56
|
+
const id = parsed.id;
|
|
45
57
|
|
|
46
58
|
// External URLs — return as-is, no server-side dimension detection
|
|
47
59
|
if (provider === "external") {
|
|
48
|
-
return
|
|
60
|
+
return parsed;
|
|
49
61
|
}
|
|
50
62
|
|
|
51
63
|
// Build the base value from the input
|
|
52
|
-
const result: MediaValue = { ...
|
|
64
|
+
const result: MediaValue = { ...parsed, provider };
|
|
53
65
|
|
|
54
66
|
// For local media, strip `src` — it's derived at display time from storageKey
|
|
55
67
|
if (provider === "local") {
|
|
@@ -138,6 +150,7 @@ async function resolveInternalUrl(
|
|
|
138
150
|
return { provider: "external", id: "", src: url };
|
|
139
151
|
}
|
|
140
152
|
|
|
153
|
+
const focalPoint = normalizeFocalPoint(item.focalX, item.focalY);
|
|
141
154
|
return {
|
|
142
155
|
provider: "local",
|
|
143
156
|
id: item.id,
|
|
@@ -145,6 +158,7 @@ async function resolveInternalUrl(
|
|
|
145
158
|
mimeType: item.mimeType,
|
|
146
159
|
width: item.width,
|
|
147
160
|
height: item.height,
|
|
161
|
+
...focalPoint,
|
|
148
162
|
blurhash: item.blurhash,
|
|
149
163
|
dominantColor: item.dominantColor,
|
|
150
164
|
alt: item.alt,
|
|
@@ -169,6 +183,7 @@ async function resolveLocalId(
|
|
|
169
183
|
|
|
170
184
|
if (!item) return null;
|
|
171
185
|
|
|
186
|
+
const focalPoint = normalizeFocalPoint(item.focalX, item.focalY);
|
|
172
187
|
return {
|
|
173
188
|
provider: "local",
|
|
174
189
|
id: item.id,
|
|
@@ -176,6 +191,7 @@ async function resolveLocalId(
|
|
|
176
191
|
mimeType: item.mimeType,
|
|
177
192
|
width: item.width,
|
|
178
193
|
height: item.height,
|
|
194
|
+
...focalPoint,
|
|
179
195
|
blurhash: item.blurhash,
|
|
180
196
|
dominantColor: item.dominantColor,
|
|
181
197
|
alt: item.alt,
|
|
@@ -234,6 +250,11 @@ function recordToMediaValue(obj: Record<string, unknown>): MediaValue {
|
|
|
234
250
|
if (typeof obj.mimeType === "string") result.mimeType = obj.mimeType;
|
|
235
251
|
if (typeof obj.width === "number") result.width = obj.width;
|
|
236
252
|
if (typeof obj.height === "number") result.height = obj.height;
|
|
253
|
+
const focalPoint = normalizeFocalPoint(obj.focalX, obj.focalY);
|
|
254
|
+
if (focalPoint) {
|
|
255
|
+
result.focalX = focalPoint.focalX;
|
|
256
|
+
result.focalY = focalPoint.focalY;
|
|
257
|
+
}
|
|
237
258
|
if (typeof obj.blurhash === "string") result.blurhash = obj.blurhash;
|
|
238
259
|
if (typeof obj.dominantColor === "string") result.dominantColor = obj.dominantColor;
|
|
239
260
|
if (typeof obj.alt === "string") result.alt = obj.alt;
|
package/src/media/types.ts
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* alongside the built-in local media library.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { normalizeFocalPoint } from "./focal-point.js";
|
|
10
|
+
|
|
9
11
|
/**
|
|
10
12
|
* Serializable media provider configuration descriptor
|
|
11
13
|
* Returned by provider config functions (e.g., unsplash(), mux())
|
|
@@ -85,6 +87,9 @@ export interface MediaProviderItem {
|
|
|
85
87
|
/** Dimensions (for images/video) */
|
|
86
88
|
width?: number;
|
|
87
89
|
height?: number;
|
|
90
|
+
/** Default focal point for cover-cropped displays */
|
|
91
|
+
focalX?: number;
|
|
92
|
+
focalY?: number;
|
|
88
93
|
/** LQIP blurhash placeholder (images only) */
|
|
89
94
|
blurhash?: string;
|
|
90
95
|
/** LQIP dominant-color placeholder, as a CSS color (images only) */
|
|
@@ -264,6 +269,9 @@ export interface MediaValue {
|
|
|
264
269
|
mimeType?: string;
|
|
265
270
|
width?: number;
|
|
266
271
|
height?: number;
|
|
272
|
+
/** Default focal point copied when the media item is selected */
|
|
273
|
+
focalX?: number;
|
|
274
|
+
focalY?: number;
|
|
267
275
|
/** Cached LQIP blurhash placeholder (images only) */
|
|
268
276
|
blurhash?: string;
|
|
269
277
|
/** Cached LQIP dominant-color placeholder, as a CSS color (images only) */
|
|
@@ -278,6 +286,7 @@ export interface MediaValue {
|
|
|
278
286
|
* Convert a MediaProviderItem to a MediaValue for storage
|
|
279
287
|
*/
|
|
280
288
|
export function mediaItemToValue(providerId: string, item: MediaProviderItem): MediaValue {
|
|
289
|
+
const focalPoint = normalizeFocalPoint(item.focalX, item.focalY);
|
|
281
290
|
return {
|
|
282
291
|
provider: providerId,
|
|
283
292
|
id: item.id,
|
|
@@ -285,6 +294,7 @@ export function mediaItemToValue(providerId: string, item: MediaProviderItem): M
|
|
|
285
294
|
mimeType: item.mimeType,
|
|
286
295
|
width: item.width,
|
|
287
296
|
height: item.height,
|
|
297
|
+
...focalPoint,
|
|
288
298
|
blurhash: item.blurhash,
|
|
289
299
|
dominantColor: item.dominantColor,
|
|
290
300
|
alt: item.alt,
|