emdash 0.28.1 → 0.30.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-hUy8vOB-.d.mts → adapters-C0ONzkUP.d.mts} +10 -1
- package/dist/adapters-C0ONzkUP.d.mts.map +1 -0
- package/dist/{allowed-origins-CRsJ6BPM.mjs → allowed-origins-CCEi9bPI.mjs} +2 -2
- package/dist/{allowed-origins-CRsJ6BPM.mjs.map → allowed-origins-CCEi9bPI.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.d.mts.map +1 -1
- 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 +5 -4
- package/dist/{api-DxFSorgk.mjs → api-b8WIiGU4.mjs} +306 -154
- package/dist/api-b8WIiGU4.mjs.map +1 -0
- package/dist/api-tokens-Cvmixds7.mjs +3 -0
- package/dist/{api-tokens-DvqeZmVq.mjs → api-tokens-uPt8UDpx.mjs} +2 -2
- package/dist/{api-tokens-DvqeZmVq.mjs.map → api-tokens-uPt8UDpx.mjs.map} +1 -1
- package/dist/{apply-CDJqIjPU.mjs → apply-CmIJK9j8.mjs} +35 -38
- package/dist/apply-CmIJK9j8.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 +97 -13
- 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 +56 -107
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/redirect.mjs +7 -7
- package/dist/astro/middleware/request-context.d.mts +3 -0
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +258 -31
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +47 -3
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +379 -117
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/PluginRegistry.d.mts +5 -1
- package/dist/astro/routes/PluginRegistry.d.mts.map +1 -1
- package/dist/astro/routes/PluginRegistry.mjs +2 -1
- package/dist/astro/routes/PluginRegistry.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 +7 -7
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -17
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +19 -24
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -17
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
- 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 +11 -10
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/comments/index.mjs +11 -10
- package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
- package/dist/astro/routes/api/admin/media-usage/repair.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/repair.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +30 -0
- package/dist/astro/routes/api/admin/media-usage/repair.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.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +49 -41
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +39 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.d.mts +9 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +78 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +43 -40
- 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 +46 -41
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +49 -41
- 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 +43 -40
- 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 +49 -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 +43 -40
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +43 -40
- 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 +47 -42
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +43 -40
- 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 +48 -43
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +43 -40
- 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 +43 -40
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +10 -9
- package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
- 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.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.mjs +14 -13
- package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/index.mjs +11 -10
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +13 -12
- 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 +13 -12
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +5 -5
- package/dist/astro/routes/api/auth/me.mjs +9 -8
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +6 -3
- package/dist/astro/routes/api/auth/mode.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +16 -6
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +11 -5
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +8 -7
- 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 +14 -13
- package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/request.mjs +13 -12
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +70 -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 +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +14 -13
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +10 -8
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +9 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +72 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.d.mts +8 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +51 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -8
- 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 +20 -19
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/authors.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/index.mjs +12 -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 +8 -8
- 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 +19 -18
- 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 +16 -16
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +12 -11
- package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +12 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -16
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -11
- 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 +19 -18
- 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 +29 -28
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +8 -9
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.d.mts.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +165 -52
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -9
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/usage.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/usage.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs +37 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +26 -10
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +4 -3
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +34 -14
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +10 -9
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -8
- package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -1
- 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 +71 -24
- 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 +20 -32
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/index.mjs +13 -12
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +13 -12
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +14 -13
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +14 -13
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.d.mts +10 -0
- package/dist/astro/routes/api/relations/_id_/index.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/_id_/index.mjs +70 -0
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -0
- package/dist/astro/routes/api/relations/_id_/translations.d.mts +8 -0
- package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/_id_/translations.mjs +34 -0
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -0
- package/dist/astro/routes/api/relations/index.d.mts +9 -0
- package/dist/astro/routes/api/relations/index.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/index.mjs +54 -0
- package/dist/astro/routes/api/relations/index.mjs.map +1 -0
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +43 -40
- 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 +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +9 -9
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +43 -40
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +43 -40
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +13 -12
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +14 -12
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +13 -12
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +8 -8
- package/dist/astro/routes/api/search/suggest.mjs +12 -11
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- 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_.d.mts +9 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +48 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/index.d.mts +8 -0
- package/dist/astro/routes/api/settings/backups/archives/index.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +23 -0
- package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/export.d.mts +8 -0
- package/dist/astro/routes/api/settings/backups/export.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/export.mjs +35 -0
- package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/index.d.mts +9 -0
- package/dist/astro/routes/api/settings/backups/index.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/index.mjs +52 -0
- package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -0
- package/dist/astro/routes/api/settings/email.mjs +6 -6
- package/dist/astro/routes/api/settings.mjs +16 -15
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +20 -16
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +19 -15
- package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +29 -29
- package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
- package/dist/astro/routes/api/setup/index.mjs +31 -30
- 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 +9 -216
- package/dist/astro/routes/api/snapshot.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.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- 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 +7 -7
- package/dist/astro/routes/api/typegen.mjs +6 -6
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +4 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +4 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +9 -8
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +13 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +13 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/index.mjs +13 -12
- 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 +9 -9
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +12 -12
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/types.d.mts +40 -16
- 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-Dz88F_Fw.mjs → authorize-WxsiePzy.mjs} +7 -4
- package/dist/authorize-WxsiePzy.mjs.map +1 -0
- package/dist/backup-S8kFWtwD.mjs +241 -0
- package/dist/backup-S8kFWtwD.mjs.map +1 -0
- package/dist/{base64-CmWvODNW.mjs → base64-B-PsqheR.mjs} +8 -4
- package/dist/base64-B-PsqheR.mjs.map +1 -0
- package/dist/{byline-Bm8ZgUP9.mjs → byline-XEjchwzZ.mjs} +8 -8
- package/dist/{byline-Bm8ZgUP9.mjs.map → byline-XEjchwzZ.mjs.map} +1 -1
- package/dist/{byline-fields-CIx_GuN4.mjs → byline-fields-CdU_LTF1.mjs} +2 -2
- package/dist/{byline-fields-CIx_GuN4.mjs.map → byline-fields-CdU_LTF1.mjs.map} +1 -1
- package/dist/{byline-registry-BOjqDOim.mjs → byline-registry-BCuOp4UF.mjs} +3 -3
- package/dist/{byline-registry-BOjqDOim.mjs.map → byline-registry-BCuOp4UF.mjs.map} +1 -1
- package/dist/{bylines-6tm9mgQb.mjs → bylines-BJbT4gKS.mjs} +4 -4
- package/dist/{bylines-6tm9mgQb.mjs.map → bylines-BJbT4gKS.mjs.map} +1 -1
- package/dist/{bylines-CAZxGSrm.mjs → bylines-czseViYo.mjs} +8 -8
- package/dist/{bylines-CAZxGSrm.mjs.map → bylines-czseViYo.mjs.map} +1 -1
- package/dist/{cache-CEBAZjir.mjs → cache-CGCd6AVM.mjs} +3 -3
- package/dist/{cache-CEBAZjir.mjs.map → cache-CGCd6AVM.mjs.map} +1 -1
- package/dist/{challenge-store-anhwVER0.mjs → challenge-store-BFzgFRog.mjs} +1 -1
- package/dist/{challenge-store-anhwVER0.mjs.map → challenge-store-BFzgFRog.mjs.map} +1 -1
- package/dist/{chunks-B2isWQhr.mjs → chunks-BxXyunY-.mjs} +2 -2
- package/dist/{chunks-B2isWQhr.mjs.map → chunks-BxXyunY-.mjs.map} +1 -1
- package/dist/cli/index.mjs +142 -35
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +86 -3
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +20 -4
- package/dist/client/index.mjs.map +1 -1
- package/dist/{comment-CzeatwBV.mjs → comment-DPT0WKyd.mjs} +2 -2
- package/dist/{comment-CzeatwBV.mjs.map → comment-DPT0WKyd.mjs.map} +1 -1
- package/dist/{comment-reaction-Cj9QJY7I.mjs → comment-reaction-C65MldIB.mjs} +2 -2
- package/dist/{comment-reaction-Cj9QJY7I.mjs.map → comment-reaction-C65MldIB.mjs.map} +1 -1
- package/dist/{comments-BLE-jv5k.mjs → comments-Bz6sCbgD.mjs} +3 -3
- package/dist/{comments-BLE-jv5k.mjs.map → comments-Bz6sCbgD.mjs.map} +1 -1
- package/dist/{components-B_sATNUc.mjs → components-DZkL4Fx0.mjs} +1 -1
- package/dist/{components-B_sATNUc.mjs.map → components-DZkL4Fx0.mjs.map} +1 -1
- package/dist/{content-DhgEth4k.mjs → content-Ci04z2z-.mjs} +227 -34
- package/dist/content-Ci04z2z-.mjs.map +1 -0
- package/dist/{content-refresh-Br4gMzh8.mjs → content-refresh-D4khvC0R.mjs} +100 -8
- package/dist/content-refresh-D4khvC0R.mjs.map +1 -0
- package/dist/{context-BRIpHARC.mjs → context-B6hc7zJL.mjs} +156 -76
- package/dist/context-B6hc7zJL.mjs.map +1 -0
- package/dist/{cron-v4FTEFR_.mjs → cron-BlKIMD_e.mjs} +1 -1
- package/dist/{cron-v4FTEFR_.mjs.map → cron-BlKIMD_e.mjs.map} +1 -1
- package/dist/{dashboard-EvEKF5en.mjs → dashboard-C5NkXFbi.mjs} +6 -5
- package/dist/dashboard-C5NkXFbi.mjs.map +1 -0
- package/dist/database/pg-migration-lock.d.mts +21 -0
- package/dist/database/pg-migration-lock.d.mts.map +1 -0
- package/dist/database/pg-migration-lock.mjs +45 -0
- package/dist/database/pg-migration-lock.mjs.map +1 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/postgres.d.mts.map +1 -1
- package/dist/db/postgres.mjs +2 -8
- package/dist/db/postgres.mjs.map +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{db-errors-CK46D-ly.mjs → db-errors-CcWLaRiR.mjs} +4 -2
- package/dist/db-errors-CcWLaRiR.mjs.map +1 -0
- package/dist/{default-CM_D83Mg.mjs → default-C4v9KP56.mjs} +1 -1
- package/dist/{default-CM_D83Mg.mjs.map → default-C4v9KP56.mjs.map} +1 -1
- package/dist/{device-flow-CfGP18Uw.mjs → device-flow-BeA6lUS1.mjs} +6 -7
- package/dist/device-flow-BeA6lUS1.mjs.map +1 -0
- package/dist/dialect-helpers-HxEQGl_1.mjs +175 -0
- package/dist/dialect-helpers-HxEQGl_1.mjs.map +1 -0
- package/dist/{email-console-CIf4Lfvv.mjs → email-console-C-9Ng8DM.mjs} +1 -1
- package/dist/{email-console-CIf4Lfvv.mjs.map → email-console-C-9Ng8DM.mjs.map} +1 -1
- package/dist/{enrich-BQ0mxJRs.mjs → enrich-CFJJgxs_.mjs} +2 -2
- package/dist/{enrich-BQ0mxJRs.mjs.map → enrich-CFJJgxs_.mjs.map} +1 -1
- package/dist/error-CEGF6UZb.mjs +90 -0
- package/dist/error-CEGF6UZb.mjs.map +1 -0
- package/dist/{error-CkAseSqZ.mjs → errors-DtEXIQQV.mjs} +24 -84
- package/dist/errors-DtEXIQQV.mjs.map +1 -0
- package/dist/{escape-DqD0aCKu.mjs → escape-CFedIB1C.mjs} +1 -1
- package/dist/{escape-DqD0aCKu.mjs.map → escape-CFedIB1C.mjs.map} +1 -1
- package/dist/{field-defs-cache-WUI88LX5.mjs → field-defs-cache-DvmlgP-D.mjs} +5 -5
- package/dist/{field-defs-cache-WUI88LX5.mjs.map → field-defs-cache-DvmlgP-D.mjs.map} +1 -1
- package/dist/{fts-manager-BbFaF_V8.mjs → fts-manager-DzqIBrrW.mjs} +27 -3
- package/dist/{fts-manager-BbFaF_V8.mjs.map → fts-manager-DzqIBrrW.mjs.map} +1 -1
- package/dist/{hash-DrvzIXcz.mjs → hash-DFFrkivP.mjs} +1 -1
- package/dist/{hash-DrvzIXcz.mjs.map → hash-DFFrkivP.mjs.map} +1 -1
- package/dist/hreflang-CIxH_LKz.d.mts +48 -0
- package/dist/hreflang-CIxH_LKz.d.mts.map +1 -0
- package/dist/hreflang-db2Tpb2o.mjs +102 -0
- package/dist/hreflang-db2Tpb2o.mjs.map +1 -0
- package/dist/{import-fYLf14Co.mjs → import-Dmkm8S1W.mjs} +6 -6
- package/dist/{import-fYLf14Co.mjs.map → import-Dmkm8S1W.mjs.map} +1 -1
- package/dist/{index-Bm-Gy8Mh.d.mts → index-BEui-cRd.d.mts} +3 -3
- package/dist/{index-Bm-Gy8Mh.d.mts.map → index-BEui-cRd.d.mts.map} +1 -1
- package/dist/{index-B9sIxwe4.d.mts → index-wYnC6u4o.d.mts} +881 -22
- package/dist/index-wYnC6u4o.d.mts.map +1 -0
- package/dist/index.d.mts +19 -19
- package/dist/index.mjs +69 -64
- 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-Djn3HWQS.mjs → load-Cx27ki1l.mjs} +2 -2
- package/dist/{load-Djn3HWQS.mjs.map → load-Cx27ki1l.mjs.map} +1 -1
- package/dist/{loader-CB6YHeul.mjs → loader-Be3ouI5L.mjs} +170 -21
- package/dist/loader-Be3ouI5L.mjs.map +1 -0
- package/dist/{manifest-schema-BHlgZM1W.mjs → manifest-schema-bCq54i7F.mjs} +18 -2
- package/dist/manifest-schema-bCq54i7F.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +30 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +30 -4
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +2 -2
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +8 -8
- package/dist/{media-BrXIaMFN.mjs → media-BjhhENaJ.mjs} +2 -2
- package/dist/media-BjhhENaJ.mjs.map +1 -0
- package/dist/{media-allowlist-CRHEeJ_i.mjs → media-allowlist-jUppPWFy.mjs} +2 -2
- package/dist/{media-allowlist-CRHEeJ_i.mjs.map → media-allowlist-jUppPWFy.mjs.map} +1 -1
- package/dist/media-kIV1IxFf.mjs +243 -0
- package/dist/media-kIV1IxFf.mjs.map +1 -0
- package/dist/media-upload-D2wk3EIt.mjs +145 -0
- package/dist/media-upload-D2wk3EIt.mjs.map +1 -0
- package/dist/{media-url-CKi5XSw4.mjs → media-url-BCm5vBn6.mjs} +1 -1
- package/dist/{media-url-CKi5XSw4.mjs.map → media-url-BCm5vBn6.mjs.map} +1 -1
- package/dist/media-usage-CljdO1mc.mjs +554 -0
- package/dist/media-usage-CljdO1mc.mjs.map +1 -0
- package/dist/{menus-b2T4clbO.mjs → menus-BcyElFtI.mjs} +177 -15
- package/dist/menus-BcyElFtI.mjs.map +1 -0
- package/dist/{menus-Cfivc2Ad.mjs → menus-CZyG6rvx.mjs} +3 -3
- package/dist/{menus-Cfivc2Ad.mjs.map → menus-CZyG6rvx.mjs.map} +1 -1
- package/dist/{mime-CCEzze7W.mjs → mime-DfIVjNkr.mjs} +1 -1
- package/dist/{mime-CCEzze7W.mjs.map → mime-DfIVjNkr.mjs.map} +1 -1
- package/dist/{mode-BM9QgEmt.mjs → mode-fiXRMfeA.mjs} +1 -1
- package/dist/{mode-BM9QgEmt.mjs.map → mode-fiXRMfeA.mjs.map} +1 -1
- package/dist/{normalize-CeglrBT9.mjs → normalize-C-SHXmra.mjs} +1 -1
- package/dist/{normalize-CeglrBT9.mjs.map → normalize-C-SHXmra.mjs.map} +1 -1
- package/dist/{oauth-authorization-CXWkIGT4.mjs → oauth-authorization-oqfbBuMH.mjs} +6 -7
- package/dist/oauth-authorization-oqfbBuMH.mjs.map +1 -0
- package/dist/{oauth-clients-BmTI5rsl.mjs → oauth-clients-BlrUHAsf.mjs} +1 -1
- package/dist/{oauth-clients-BmTI5rsl.mjs.map → oauth-clients-BlrUHAsf.mjs.map} +1 -1
- package/dist/{oauth-state-store-YLFLcH5F.mjs → oauth-state-store-DnvjRMy6.mjs} +2 -1
- package/dist/{oauth-state-store-YLFLcH5F.mjs.map → oauth-state-store-DnvjRMy6.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-Bsc_GsX-.mjs → oauth-user-lookup-oUllxvAv.mjs} +1 -1
- package/dist/{oauth-user-lookup-Bsc_GsX-.mjs.map → oauth-user-lookup-oUllxvAv.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-DTTML-Tx.mjs → options-BlmBHTvX.mjs} +1 -1
- package/dist/{options-DTTML-Tx.mjs.map → options-BlmBHTvX.mjs.map} +1 -1
- package/dist/{options-iMpRRxIe.d.mts → options-BqMkWfYa.d.mts} +6 -6
- package/dist/{options-iMpRRxIe.d.mts.map → options-BqMkWfYa.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.d.mts.map +1 -1
- package/dist/page/index.mjs.map +1 -1
- package/dist/{parse-GmjecGct.mjs → parse-C_-6klII.mjs} +4 -12
- package/dist/{parse-GmjecGct.mjs.map → parse-C_-6klII.mjs.map} +1 -1
- package/dist/{passkey-config-De0ahnRg.mjs → passkey-config-C-SKpc0-.mjs} +1 -1
- package/dist/{passkey-config-De0ahnRg.mjs.map → passkey-config-C-SKpc0-.mjs.map} +1 -1
- package/dist/{patterns-BKmjvM7K.mjs → patterns-CiyXeDgr.mjs} +1 -1
- package/dist/{patterns-BKmjvM7K.mjs.map → patterns-CiyXeDgr.mjs.map} +1 -1
- package/dist/{placeholder-BSKwzRe4.d.mts → placeholder-Dop47JMM.d.mts} +1 -1
- package/dist/{placeholder-BSKwzRe4.d.mts.map → placeholder-Dop47JMM.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +21 -2
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-utils.d.mts +18 -16
- package/dist/plugin-utils.d.mts.map +1 -1
- package/dist/plugin-utils.mjs +8 -6
- package/dist/plugin-utils.mjs.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +15 -3
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/{portable-text-cCa0cGV6.mjs → portable-text-sDj92Kxv.mjs} +1 -1
- package/dist/{portable-text-cCa0cGV6.mjs.map → portable-text-sDj92Kxv.mjs.map} +1 -1
- package/dist/{preview-SSXNVPAC.mjs → preview-D4Jnbfx7.mjs} +2 -2
- package/dist/{preview-SSXNVPAC.mjs.map → preview-D4Jnbfx7.mjs.map} +1 -1
- package/dist/{public-url-Danv47cS.mjs → public-url-DSGTnJFw.mjs} +5 -3
- package/dist/public-url-DSGTnJFw.mjs.map +1 -0
- package/dist/{query-1Cp6U9oo.mjs → query-DR73ZNfm.mjs} +15 -15
- package/dist/query-DR73ZNfm.mjs.map +1 -0
- package/dist/{schema-CX9cfNkZ.mjs → query-Di7DOmPV.mjs} +5 -10
- package/dist/query-Di7DOmPV.mjs.map +1 -0
- package/dist/{rate-limit-C_Lf63Dd.mjs → rate-limit-CMj83JNW.mjs} +2 -2
- package/dist/{rate-limit-C_Lf63Dd.mjs.map → rate-limit-CMj83JNW.mjs.map} +1 -1
- package/dist/{redirect-CoW3G-0U.mjs → redirect-Botom7X6.mjs} +1 -1
- package/dist/{redirect-CoW3G-0U.mjs.map → redirect-Botom7X6.mjs.map} +1 -1
- package/dist/{redirect-IyfNirgS.mjs → redirect-CgLPYflR.mjs} +11 -5
- package/dist/redirect-CgLPYflR.mjs.map +1 -0
- package/dist/{redirects-Bs1g42Ri.mjs → redirects-B7t9bKsL.mjs} +6 -6
- package/dist/{redirects-Bs1g42Ri.mjs.map → redirects-B7t9bKsL.mjs.map} +1 -1
- package/dist/{redirects-DXEXBAII.mjs → redirects-BBq3n2Rj.mjs} +10 -143
- package/dist/redirects-BBq3n2Rj.mjs.map +1 -0
- package/dist/{registry-B57vp_X9.mjs → registry-FV15nLge.mjs} +99 -10
- package/dist/registry-FV15nLge.mjs.map +1 -0
- package/dist/relation-9M9j_UWo.mjs +334 -0
- package/dist/relation-9M9j_UWo.mjs.map +1 -0
- package/dist/{byline-fields-2Lp5Hbgf.mjs → relations-5_avdrN_.mjs} +60 -4
- package/dist/relations-5_avdrN_.mjs.map +1 -0
- package/dist/relations-BKvO39-9.mjs +397 -0
- package/dist/relations-BKvO39-9.mjs.map +1 -0
- package/dist/{byline-fields-CHE8UStY.d.mts → relations-Bh8jlFsU.d.mts} +486 -31
- package/dist/relations-Bh8jlFsU.d.mts.map +1 -0
- package/dist/{request-cache-KCNHp_RJ.mjs → request-cache-BSUptuJR.mjs} +1 -1
- package/dist/{request-cache-KCNHp_RJ.mjs.map → request-cache-BSUptuJR.mjs.map} +1 -1
- package/dist/{request-meta-DbvXaAvU.mjs → request-meta-DzXYYI-n.mjs} +2 -2
- package/dist/{request-meta-DbvXaAvU.mjs.map → request-meta-DzXYYI-n.mjs.map} +1 -1
- package/dist/{resolve-DR3wqMTy.mjs → resolve-Cd9dzclN.mjs} +1 -1
- package/dist/{resolve-DR3wqMTy.mjs.map → resolve-Cd9dzclN.mjs.map} +1 -1
- package/dist/{runner-DvFWoz8-.d.mts → runner-Dd8m8k9F.d.mts} +8 -2
- package/dist/runner-Dd8m8k9F.d.mts.map +1 -0
- package/dist/{runner-K8XK101B.mjs → runner-DfnZ5eUr.mjs} +355 -204
- package/dist/runner-DfnZ5eUr.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +4 -4
- package/dist/schema-BXxlHeAf.mjs +9 -0
- package/dist/schema-BXxlHeAf.mjs.map +1 -0
- package/dist/scopes-Bl4IwHA-.mjs +27 -0
- package/dist/scopes-Bl4IwHA-.mjs.map +1 -0
- package/dist/{search-DZN2HZ-V.mjs → search-Bff-7jFt.mjs} +62 -12
- package/dist/search-Bff-7jFt.mjs.map +1 -0
- package/dist/{secrets-kp760LlD.mjs → secrets-CSwQIl4q.mjs} +4 -4
- package/dist/{secrets-kp760LlD.mjs.map → secrets-CSwQIl4q.mjs.map} +1 -1
- package/dist/{sections-CpF5SaGr.mjs → sections-CwW4s1al.mjs} +3 -3
- package/dist/{sections-CpF5SaGr.mjs.map → sections-CwW4s1al.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +23 -23
- package/dist/seo/index.d.mts +15 -2
- package/dist/seo/index.d.mts.map +1 -1
- package/dist/seo/index.mjs +22 -5
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-DXu2UQnC.mjs → seo-2cmFHZns.mjs} +2 -2
- package/dist/{seo-DXu2UQnC.mjs.map → seo-2cmFHZns.mjs.map} +1 -1
- package/dist/{seo-89-53DDs.mjs → seo-C3GDfT0V.mjs} +1 -1
- package/dist/{seo-89-53DDs.mjs.map → seo-C3GDfT0V.mjs.map} +1 -1
- package/dist/{service-DQmiBMzt.mjs → service-DkGTWGIi.mjs} +3 -3
- package/dist/{service-DQmiBMzt.mjs.map → service-DkGTWGIi.mjs.map} +1 -1
- package/dist/{session-user-Cascbax7.mjs → session-user-DbHqKDKe.mjs} +1 -1
- package/dist/{session-user-Cascbax7.mjs.map → session-user-DbHqKDKe.mjs.map} +1 -1
- package/dist/{settings-rZyHEcNT.mjs → settings-C4s8hFQm.mjs} +3 -3
- package/dist/{settings-rZyHEcNT.mjs.map → settings-C4s8hFQm.mjs.map} +1 -1
- package/dist/{settings-zhmdKyJQ.mjs → settings-CpA4lQFt.mjs} +6 -6
- package/dist/{settings-zhmdKyJQ.mjs.map → settings-CpA4lQFt.mjs.map} +1 -1
- package/dist/{setup-complete-Cb3LRyzy.mjs → setup-complete-CdIlqloh.mjs} +2 -2
- package/dist/{setup-complete-Cb3LRyzy.mjs.map → setup-complete-CdIlqloh.mjs.map} +1 -1
- package/dist/{setup-nonce-Z8x0tHf8.mjs → setup-nonce-DqiIPr-J.mjs} +1 -1
- package/dist/{setup-nonce-Z8x0tHf8.mjs.map → setup-nonce-DqiIPr-J.mjs.map} +1 -1
- package/dist/{single-flight-cache-BG3B_GhN.mjs → single-flight-cache-C2exrGAi.mjs} +2 -2
- package/dist/{single-flight-cache-BG3B_GhN.mjs.map → single-flight-cache-C2exrGAi.mjs.map} +1 -1
- package/dist/{site-url-BBfDTgZB.mjs → site-url-NGJT6NTU.mjs} +2 -2
- package/dist/{site-url-BBfDTgZB.mjs.map → site-url-NGJT6NTU.mjs.map} +1 -1
- package/dist/{slugify-Cce3dTdg.mjs → slugify-C_tqlU4G.mjs} +1 -1
- package/dist/{slugify-Cce3dTdg.mjs.map → slugify-C_tqlU4G.mjs.map} +1 -1
- package/dist/snapshot-BdpUJKD-.mjs +216 -0
- package/dist/snapshot-BdpUJKD-.mjs.map +1 -0
- package/dist/{ssrf-1g7usGBg.mjs → ssrf-CviKqWmq.mjs} +1 -1
- package/dist/{ssrf-1g7usGBg.mjs.map → ssrf-CviKqWmq.mjs.map} +1 -1
- package/dist/state-xxv6ZTMv.mjs +128 -0
- package/dist/state-xxv6ZTMv.mjs.map +1 -0
- package/dist/{status-CqJQX1QN.mjs → status-COfycGIU.mjs} +1 -1
- package/dist/{status-CqJQX1QN.mjs.map → status-COfycGIU.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-Bs13SN-F.mjs → taxonomies-Ce49uIzY.mjs} +13 -9
- package/dist/taxonomies-Ce49uIzY.mjs.map +1 -0
- package/dist/{taxonomies-kH9ABDUF.mjs → taxonomies-DjSKBZpq.mjs} +115 -36
- package/dist/taxonomies-DjSKBZpq.mjs.map +1 -0
- package/dist/{taxonomy-BxGxZZdu.mjs → taxonomy-DfVooU4W.mjs} +60 -13
- package/dist/taxonomy-DfVooU4W.mjs.map +1 -0
- package/dist/{tokens-BGT0TUUo.mjs → tokens-DVltpO2D.mjs} +2 -2
- package/dist/{tokens-BGT0TUUo.mjs.map → tokens-DVltpO2D.mjs.map} +1 -1
- package/dist/{transaction-qfqpPVpu.mjs → transaction-D0FOsb3X.mjs} +1 -1
- package/dist/{transaction-qfqpPVpu.mjs.map → transaction-D0FOsb3X.mjs.map} +1 -1
- package/dist/{transport-DPefPMcz.mjs → transport-CKrlqSpD.mjs} +1 -1
- package/dist/{transport-DPefPMcz.mjs.map → transport-CKrlqSpD.mjs.map} +1 -1
- package/dist/{transport-BMDWHSgZ.d.mts → transport-Vd7VdqHv.d.mts} +1 -1
- package/dist/{transport-BMDWHSgZ.d.mts.map → transport-Vd7VdqHv.d.mts.map} +1 -1
- package/dist/{trusted-proxy-VTPRiX2s.mjs → trusted-proxy-CwjQj0YG.mjs} +1 -1
- package/dist/{trusted-proxy-VTPRiX2s.mjs.map → trusted-proxy-CwjQj0YG.mjs.map} +1 -1
- package/dist/{types-CgvhU-hF.d.mts → types-B4vm81VH.d.mts} +1 -1
- package/dist/{types-CgvhU-hF.d.mts.map → types-B4vm81VH.d.mts.map} +1 -1
- package/dist/{types-ea9sAPck.d.mts → types-B97jg3aW.d.mts} +6 -1
- package/dist/{types-ea9sAPck.d.mts.map → types-B97jg3aW.d.mts.map} +1 -1
- package/dist/{types-Jo3UYd6b.mjs → types-BD40g7zz.mjs} +1 -1
- package/dist/{types-Jo3UYd6b.mjs.map → types-BD40g7zz.mjs.map} +1 -1
- package/dist/{types-DmHk7vAt.d.mts → types-BNfPHfay.d.mts} +1 -1
- package/dist/{types-DmHk7vAt.d.mts.map → types-BNfPHfay.d.mts.map} +1 -1
- package/dist/{types-BcLUUbbR.d.mts → types-BfYUPJdP.d.mts} +11 -3
- package/dist/{types-BcLUUbbR.d.mts.map → types-BfYUPJdP.d.mts.map} +1 -1
- package/dist/{types-CGbYowGQ.d.mts → types-BvB7gDOD.d.mts} +90 -4
- package/dist/types-BvB7gDOD.d.mts.map +1 -0
- package/dist/{types-vgEWF18A.d.mts → types-C7U0HlEr.d.mts} +1 -1
- package/dist/{types-vgEWF18A.d.mts.map → types-C7U0HlEr.d.mts.map} +1 -1
- package/dist/{types-CuW0zWDA.mjs → types-D1iJ3DpO.mjs} +3 -3
- package/dist/{types-CuW0zWDA.mjs.map → types-D1iJ3DpO.mjs.map} +1 -1
- package/dist/{types-_HFLRzTn.d.mts → types-DPKhI5ib.d.mts} +9 -1
- package/dist/types-DPKhI5ib.d.mts.map +1 -0
- package/dist/{types-g_aFIdW0.d.mts → types-Kmaxdarz.d.mts} +1 -1
- package/dist/{types-g_aFIdW0.d.mts.map → types-Kmaxdarz.d.mts.map} +1 -1
- package/dist/{types-ClUkdbWb.d.mts → types-iVeZ5g6N.d.mts} +1 -1
- package/dist/{types-ClUkdbWb.d.mts.map → types-iVeZ5g6N.d.mts.map} +1 -1
- package/dist/{types-tM44hEcf.mjs → types-o7xo7VgH.mjs} +1 -1
- package/dist/{types-tM44hEcf.mjs.map → types-o7xo7VgH.mjs.map} +1 -1
- package/dist/{user-BjAOvU3Z.mjs → user-Bh-L1qo6.mjs} +3 -3
- package/dist/{user-BjAOvU3Z.mjs.map → user-Bh-L1qo6.mjs.map} +1 -1
- package/dist/{utils-BJXElxdw.mjs → utils-BbUgmeZG.mjs} +3 -3
- package/dist/{utils-BJXElxdw.mjs.map → utils-BbUgmeZG.mjs.map} +1 -1
- package/dist/{validate-Z1b86_3B.d.mts → validate-DULfgpJP.d.mts} +5 -5
- package/dist/{validate-Z1b86_3B.d.mts.map → validate-DULfgpJP.d.mts.map} +1 -1
- package/dist/{validate-CWSnKVIJ.mjs → validate-V9nCwq_-.mjs} +3 -3
- package/dist/{validate-CWSnKVIJ.mjs.map → validate-V9nCwq_-.mjs.map} +1 -1
- package/dist/{validation-0l8-RYj4.mjs → validation-BsVUJfsP.mjs} +10 -10
- package/dist/{validation-0l8-RYj4.mjs.map → validation-BsVUJfsP.mjs.map} +1 -1
- package/dist/version-907opKac.mjs +7 -0
- package/dist/{version-qmeO1XZY.mjs.map → version-907opKac.mjs.map} +1 -1
- package/dist/{widgets-hWcIicX8.mjs → widgets-DGv1Z04V.mjs} +4 -4
- package/dist/{widgets-hWcIicX8.mjs.map → widgets-DGv1Z04V.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-0_uxSrmf.d.mts → wxr-taxonomies-B4tMuN5T.d.mts} +1 -1
- package/dist/{wxr-taxonomies-0_uxSrmf.d.mts.map → wxr-taxonomies-B4tMuN5T.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-CNFcsNCr.mjs → wxr-taxonomies-Cs1N6O8z.mjs} +4 -4
- package/dist/{wxr-taxonomies-CNFcsNCr.mjs.map → wxr-taxonomies-Cs1N6O8z.mjs.map} +1 -1
- package/dist/{zod-generator-CacrR-i8.mjs → zod-generator-B5prQ5M4.mjs} +3 -3
- package/dist/{zod-generator-CacrR-i8.mjs.map → zod-generator-B5prQ5M4.mjs.map} +1 -1
- package/package.json +12 -8
- package/src/api/authorize.ts +10 -1
- package/src/api/error.ts +5 -5
- package/src/api/errors.ts +25 -0
- package/src/api/handlers/backup.ts +312 -0
- package/src/api/handlers/content.ts +147 -3
- package/src/api/handlers/dashboard.ts +2 -0
- package/src/api/handlers/device-flow.ts +2 -3
- package/src/api/handlers/index.ts +22 -0
- package/src/api/handlers/marketplace.ts +38 -0
- package/src/api/handlers/media-upload.ts +210 -0
- package/src/api/handlers/media-usage.ts +289 -0
- package/src/api/handlers/oauth-authorization.ts +2 -6
- package/src/api/handlers/plugin-settings.ts +218 -0
- package/src/api/handlers/plugins.ts +41 -0
- package/src/api/handlers/registry.ts +39 -0
- package/src/api/handlers/relations.ts +474 -0
- package/src/api/handlers/snapshot.ts +21 -3
- package/src/api/handlers/taxonomies.ts +26 -4
- package/src/api/handlers/validate-media-fields.ts +1 -1
- package/src/api/openapi/document.ts +72 -5
- package/src/api/parse.ts +2 -16
- package/src/api/public-url.ts +4 -2
- package/src/api/schemas/comments.ts +6 -0
- package/src/api/schemas/common.ts +6 -2
- package/src/api/schemas/content.ts +8 -0
- package/src/api/schemas/index.ts +2 -0
- package/src/api/schemas/media-usage.ts +120 -0
- package/src/api/schemas/media.ts +32 -1
- package/src/api/schemas/relations.ts +109 -0
- package/src/api/schemas/search.ts +1 -0
- package/src/astro/integration/index.ts +39 -0
- package/src/astro/integration/routes.ts +40 -0
- package/src/astro/integration/runtime.ts +30 -0
- package/src/astro/integration/virtual-modules.ts +41 -7
- package/src/astro/integration/vite-config.ts +17 -1
- package/src/astro/middleware/auth.ts +70 -78
- package/src/astro/middleware/csp.ts +5 -2
- package/src/astro/middleware/request-context.ts +162 -20
- package/src/astro/middleware.ts +108 -40
- package/src/astro/public-plugin-api-routes.ts +2 -1
- package/src/astro/routes/PluginRegistry.tsx +5 -2
- package/src/astro/routes/admin.astro +56 -16
- package/src/astro/routes/api/admin/api-tokens/index.ts +2 -2
- package/src/astro/routes/api/admin/bylines/[id]/translations.ts +2 -5
- package/src/astro/routes/api/admin/comments/[id]/status.ts +1 -2
- package/src/astro/routes/api/admin/comments/index.ts +1 -2
- package/src/astro/routes/api/admin/media-usage/repair.ts +24 -0
- package/src/astro/routes/api/admin/plugins/[id]/index.ts +6 -0
- package/src/astro/routes/api/admin/plugins/[id]/mcp.ts +42 -0
- package/src/astro/routes/api/admin/plugins/[id]/settings.ts +80 -0
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +2 -0
- package/src/astro/routes/api/admin/plugins/index.ts +9 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +2 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +2 -0
- package/src/astro/routes/api/admin/plugins/registry/install.ts +2 -0
- package/src/astro/routes/api/admin/plugins/updates.ts +2 -4
- package/src/astro/routes/api/auth/mode.ts +6 -14
- package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +21 -5
- package/src/astro/routes/api/auth/oauth/[provider].ts +24 -7
- package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +13 -0
- package/src/astro/routes/api/content/[collection]/[id]/compare.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +2 -3
- package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -3
- package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +95 -0
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/parents.ts +47 -0
- package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +4 -6
- package/src/astro/routes/api/content/[collection]/[id]/translations.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -4
- package/src/astro/routes/api/content/[collection]/authors.ts +2 -3
- package/src/astro/routes/api/content/[collection]/index.ts +6 -8
- package/src/astro/routes/api/content/[collection]/trash.ts +2 -3
- package/src/astro/routes/api/manifest.ts +2 -9
- package/src/astro/routes/api/mcp.ts +2 -1
- package/src/astro/routes/api/media/[id]/usage.ts +30 -0
- package/src/astro/routes/api/media/[id].ts +17 -6
- package/src/astro/routes/api/media/file/[...key].ts +8 -0
- package/src/astro/routes/api/media.ts +21 -2
- package/src/astro/routes/api/oauth/authorize.ts +2 -6
- package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +17 -3
- package/src/astro/routes/api/relations/[id]/index.ts +84 -0
- package/src/astro/routes/api/relations/[id]/translations.ts +33 -0
- package/src/astro/routes/api/relations/index.ts +56 -0
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +1 -7
- package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +1 -2
- package/src/astro/routes/api/search/index.ts +2 -0
- package/src/astro/routes/api/settings/backups/archives/[name].ts +78 -0
- package/src/astro/routes/api/settings/backups/archives/index.ts +33 -0
- package/src/astro/routes/api/settings/backups/export.ts +43 -0
- package/src/astro/routes/api/settings/backups/index.ts +76 -0
- package/src/astro/routes/api/setup/admin-verify.ts +8 -4
- package/src/astro/routes/api/setup/admin.ts +11 -4
- package/src/astro/routes/api/well-known/oauth-authorization-server.ts +4 -1
- package/src/astro/routes/api/well-known/oauth-protected-resource.ts +5 -1
- package/src/astro/types.ts +50 -2
- package/src/auth/api-tokens.ts +1 -0
- package/src/auth/oauth-state-store.ts +3 -0
- package/src/auth/providers/github-admin.tsx +5 -6
- package/src/auth/providers/google-admin.tsx +5 -6
- package/src/auth/scopes.ts +3 -9
- package/src/cli/client-factory.ts +0 -1
- package/src/cli/commands/bundle-utils.ts +50 -1
- package/src/cli/commands/bundle.ts +9 -2
- package/src/cli/commands/export-seed.ts +1 -10
- package/src/cli/commands/media.ts +127 -0
- package/src/client/index.ts +123 -2
- package/src/client/transport.ts +1 -1
- package/src/comments/service.ts +1 -1
- package/src/comments/turnstile.ts +64 -0
- package/src/components/BlockquoteGroup.astro +34 -0
- package/src/components/CommentForm.astro +12 -5
- package/src/components/EmDashHead.astro +31 -9
- package/src/components/InlinePortableTextEditor.tsx +88 -33
- package/src/components/PortableText.astro +7 -1
- package/src/components/index.ts +2 -0
- package/src/components/marks/Link.astro +5 -1
- package/src/components/portable-text-blockquote-group.ts +68 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +32 -1
- package/src/database/dialect-helpers.ts +111 -3
- package/src/database/migrations/039_fix_fts5_triggers.ts +1 -1
- package/src/database/migrations/051_content_taxonomies_denorm.ts +120 -0
- package/src/database/migrations/052_media_usage_read_index.ts +26 -0
- package/src/database/migrations/053_plugin_mcp_tools.ts +21 -0
- package/src/database/migrations/runner.ts +52 -6
- package/src/database/pg-migration-lock.ts +72 -0
- package/src/database/repositories/audit.ts +2 -1
- package/src/database/repositories/comment.ts +1 -1
- package/src/database/repositories/content.ts +270 -37
- package/src/database/repositories/media-usage.ts +250 -1
- package/src/database/repositories/media.ts +1 -1
- package/src/database/repositories/plugin-storage.ts +29 -32
- package/src/database/repositories/redirect.ts +14 -2
- package/src/database/repositories/relation.ts +130 -5
- package/src/database/repositories/taxonomy.ts +66 -8
- package/src/database/repositories/types.ts +8 -0
- package/src/database/types.ts +23 -0
- package/src/db/adapters.ts +9 -0
- package/src/db/postgres.ts +5 -2
- package/src/emdash-runtime.ts +382 -70
- package/src/index.ts +6 -2
- package/src/loader.ts +293 -32
- package/src/mcp/server.ts +251 -8
- package/src/media/image-endpoint.ts +38 -2
- package/src/page/metadata.ts +27 -0
- package/src/plugin-types.ts +19 -0
- package/src/plugin-utils.ts +8 -6
- package/src/plugins/adapt-sandbox-entry.ts +30 -1
- package/src/plugins/context.ts +92 -0
- package/src/plugins/define-plugin.ts +17 -0
- package/src/plugins/index.ts +4 -0
- package/src/plugins/manifest-schema.ts +30 -1
- package/src/plugins/routes.ts +27 -1
- package/src/plugins/sandbox/runner-options.ts +16 -0
- package/src/plugins/sandbox/types.ts +6 -1
- package/src/plugins/state.ts +17 -1
- package/src/plugins/storage-query.ts +67 -33
- package/src/plugins/types.ts +100 -0
- package/src/schema/byline-registry.ts +1 -1
- package/src/schema/registry.ts +141 -5
- package/src/search/fts-manager.ts +34 -0
- package/src/search/match.ts +50 -0
- package/src/search/query.ts +94 -9
- package/src/seed/apply.ts +28 -29
- package/src/seo/hreflang.ts +192 -0
- package/src/seo/index.ts +22 -4
- package/src/storage/types.ts +6 -0
- package/src/taxonomies/index.ts +62 -45
- package/src/taxonomies/term-counts.ts +117 -0
- package/src/utils/base64.ts +7 -2
- package/src/utils/db-errors.ts +3 -1
- package/src/virtual-modules.d.ts +14 -0
- package/src/visual-editing/editable.ts +41 -35
- package/src/visual-editing/toolbar-bootstrap.ts +120 -0
- package/src/visual-editing/toolbar.ts +47 -1
- package/dist/adapters-hUy8vOB-.d.mts.map +0 -1
- package/dist/api-DxFSorgk.mjs.map +0 -1
- package/dist/api-tokens-DsvvCtdh.mjs +0 -3
- package/dist/apply-CDJqIjPU.mjs.map +0 -1
- package/dist/authorize-Dz88F_Fw.mjs.map +0 -1
- package/dist/base64-CmWvODNW.mjs.map +0 -1
- package/dist/byline-fields-2Lp5Hbgf.mjs.map +0 -1
- package/dist/byline-fields-CHE8UStY.d.mts.map +0 -1
- package/dist/content-DhgEth4k.mjs.map +0 -1
- package/dist/content-refresh-Br4gMzh8.mjs.map +0 -1
- package/dist/context-BRIpHARC.mjs.map +0 -1
- package/dist/dashboard-EvEKF5en.mjs.map +0 -1
- package/dist/db-errors-CK46D-ly.mjs.map +0 -1
- package/dist/device-flow-CfGP18Uw.mjs.map +0 -1
- package/dist/dialect-helpers-DRI5pyY3.mjs +0 -110
- package/dist/dialect-helpers-DRI5pyY3.mjs.map +0 -1
- package/dist/error-CkAseSqZ.mjs.map +0 -1
- package/dist/index-B9sIxwe4.d.mts.map +0 -1
- package/dist/loader-CB6YHeul.mjs.map +0 -1
- package/dist/manifest-schema-BHlgZM1W.mjs.map +0 -1
- package/dist/media-BrXIaMFN.mjs.map +0 -1
- package/dist/menus-b2T4clbO.mjs.map +0 -1
- package/dist/oauth-authorization-CXWkIGT4.mjs.map +0 -1
- package/dist/public-url-Danv47cS.mjs.map +0 -1
- package/dist/query-1Cp6U9oo.mjs.map +0 -1
- package/dist/redirect-IyfNirgS.mjs.map +0 -1
- package/dist/redirects-DXEXBAII.mjs.map +0 -1
- package/dist/registry-B57vp_X9.mjs.map +0 -1
- package/dist/runner-DvFWoz8-.d.mts.map +0 -1
- package/dist/runner-K8XK101B.mjs.map +0 -1
- package/dist/scheduled-publish-Drffrf2a.d.mts +0 -11
- package/dist/scheduled-publish-Drffrf2a.d.mts.map +0 -1
- package/dist/schema-CX9cfNkZ.mjs.map +0 -1
- package/dist/search-DZN2HZ-V.mjs.map +0 -1
- package/dist/taxonomies-Bs13SN-F.mjs.map +0 -1
- package/dist/taxonomies-kH9ABDUF.mjs.map +0 -1
- package/dist/taxonomy-BxGxZZdu.mjs.map +0 -1
- package/dist/types-CGbYowGQ.d.mts.map +0 -1
- package/dist/types-_HFLRzTn.d.mts.map +0 -1
- package/dist/version-qmeO1XZY.mjs +0 -7
- /package/dist/{ssrf-CmuGgCq3.mjs → ssrf-BB__xfNM.mjs} +0 -0
- /package/dist/{types-DROWRxYV.mjs → types-CK0LxPUQ.mjs} +0 -0
|
@@ -213,6 +213,11 @@ export function injectCoreRoutes(
|
|
|
213
213
|
entrypoint: resolveRoute("api/media/[id].ts"),
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
+
injectRoute({
|
|
217
|
+
pattern: "/_emdash/api/media/[id]/usage",
|
|
218
|
+
entrypoint: resolveRoute("api/media/[id]/usage.ts"),
|
|
219
|
+
});
|
|
220
|
+
|
|
216
221
|
injectRoute({
|
|
217
222
|
pattern: "/_emdash/api/media/[id]/confirm",
|
|
218
223
|
entrypoint: resolveRoute("api/media/[id]/confirm.ts"),
|
|
@@ -234,6 +239,11 @@ export function injectCoreRoutes(
|
|
|
234
239
|
entrypoint: resolveRoute("api/media/providers/[providerId]/[itemId].ts"),
|
|
235
240
|
});
|
|
236
241
|
|
|
242
|
+
injectRoute({
|
|
243
|
+
pattern: "/_emdash/api/admin/media-usage/repair",
|
|
244
|
+
entrypoint: resolveRoute("api/admin/media-usage/repair.ts"),
|
|
245
|
+
});
|
|
246
|
+
|
|
237
247
|
// Import API routes
|
|
238
248
|
injectRoute({
|
|
239
249
|
pattern: "/_emdash/api/import/probe",
|
|
@@ -341,6 +351,27 @@ export function injectCoreRoutes(
|
|
|
341
351
|
entrypoint: resolveRoute("api/settings/email.ts"),
|
|
342
352
|
});
|
|
343
353
|
|
|
354
|
+
// Backup routes
|
|
355
|
+
injectRoute({
|
|
356
|
+
pattern: "/_emdash/api/settings/backups",
|
|
357
|
+
entrypoint: resolveRoute("api/settings/backups/index.ts"),
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
injectRoute({
|
|
361
|
+
pattern: "/_emdash/api/settings/backups/export",
|
|
362
|
+
entrypoint: resolveRoute("api/settings/backups/export.ts"),
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
injectRoute({
|
|
366
|
+
pattern: "/_emdash/api/settings/backups/archives",
|
|
367
|
+
entrypoint: resolveRoute("api/settings/backups/archives/index.ts"),
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
injectRoute({
|
|
371
|
+
pattern: "/_emdash/api/settings/backups/archives/[name]",
|
|
372
|
+
entrypoint: resolveRoute("api/settings/backups/archives/[name].ts"),
|
|
373
|
+
});
|
|
374
|
+
|
|
344
375
|
// Snapshot route (for DO preview database population)
|
|
345
376
|
injectRoute({
|
|
346
377
|
pattern: "/_emdash/api/snapshot",
|
|
@@ -393,6 +424,15 @@ export function injectCoreRoutes(
|
|
|
393
424
|
pattern: "/_emdash/api/admin/plugins/[id]/disable",
|
|
394
425
|
entrypoint: resolveRoute("api/admin/plugins/[id]/disable.ts"),
|
|
395
426
|
});
|
|
427
|
+
injectRoute({
|
|
428
|
+
pattern: "/_emdash/api/admin/plugins/[id]/mcp",
|
|
429
|
+
entrypoint: resolveRoute("api/admin/plugins/[id]/mcp.ts"),
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
injectRoute({
|
|
433
|
+
pattern: "/_emdash/api/admin/plugins/[id]/settings",
|
|
434
|
+
entrypoint: resolveRoute("api/admin/plugins/[id]/settings.ts"),
|
|
435
|
+
});
|
|
396
436
|
|
|
397
437
|
// Marketplace plugin routes
|
|
398
438
|
injectRoute({
|
|
@@ -13,8 +13,10 @@ import type { MediaProviderDescriptor } from "../../media/types.js";
|
|
|
13
13
|
import type { ObjectCacheDescriptor } from "../../object-cache/types.js";
|
|
14
14
|
import type {
|
|
15
15
|
FieldWidgetConfig,
|
|
16
|
+
PluginMcpManifestConfig,
|
|
16
17
|
PortableTextBlockConfig,
|
|
17
18
|
ResolvedPlugin,
|
|
19
|
+
SettingField,
|
|
18
20
|
} from "../../plugins/types.js";
|
|
19
21
|
import type { ExperimentalConfig } from "../../registry/types.js";
|
|
20
22
|
import type { StorageDescriptor } from "../storage/types.js";
|
|
@@ -103,6 +105,8 @@ export interface PluginDescriptor<TOptions = Record<string, unknown>> {
|
|
|
103
105
|
adminPages?: PluginAdminPage[];
|
|
104
106
|
/** Dashboard widgets */
|
|
105
107
|
adminWidgets?: PluginDashboardWidget[];
|
|
108
|
+
/** Settings schema for the auto-generated admin settings form */
|
|
109
|
+
settingsSchema?: Record<string, SettingField>;
|
|
106
110
|
/**
|
|
107
111
|
* Portable Text block types this plugin contributes to the editor.
|
|
108
112
|
* Declarative (Block Kit) — surfaced in the admin slash menu and consumed
|
|
@@ -131,6 +135,8 @@ export interface PluginDescriptor<TOptions = Record<string, unknown>> {
|
|
|
131
135
|
* Sandboxed plugins can only access declared collections.
|
|
132
136
|
*/
|
|
133
137
|
storage?: Record<string, StorageCollectionDeclaration>;
|
|
138
|
+
/** Serialized MCP declarations emitted by the plugin build. */
|
|
139
|
+
mcp?: PluginMcpManifestConfig;
|
|
134
140
|
}
|
|
135
141
|
|
|
136
142
|
/**
|
|
@@ -589,6 +595,30 @@ export interface EmDashConfig {
|
|
|
589
595
|
favicon?: string;
|
|
590
596
|
};
|
|
591
597
|
|
|
598
|
+
/**
|
|
599
|
+
* Editor toolbar delivery on public pages.
|
|
600
|
+
*
|
|
601
|
+
* - `"server"` (default): the toolbar is injected server-side into every
|
|
602
|
+
* HTML response rendered for an authenticated editor. Simple and
|
|
603
|
+
* zero-config, but behind a shared cache (Cloudflare Cache Everything /
|
|
604
|
+
* Workers Cache, Fastly, Varnish, …) editors often receive the cached
|
|
605
|
+
* anonymous variant — without the toolbar — whenever an anonymous visitor
|
|
606
|
+
* primed the cache first, so the toolbar appears and disappears with
|
|
607
|
+
* cache state.
|
|
608
|
+
* - `"client"`: public HTML is identical for everyone (nothing
|
|
609
|
+
* session-specific is injected server-side, so shared caches stay fully
|
|
610
|
+
* effective). A tiny bootstrap script shows an "Edit" pill for browsers
|
|
611
|
+
* that have logged into the admin (non-secret localStorage flag). Clicking
|
|
612
|
+
* it verifies the session and reloads the page with an `_edit` query
|
|
613
|
+
* param, which is always rendered fresh (never cached) with the full
|
|
614
|
+
* toolbar. Logged-out visitors opening an `_edit` URL are redirected to
|
|
615
|
+
* the canonical URL.
|
|
616
|
+
* - `false`: never render the toolbar or bootstrap script.
|
|
617
|
+
*
|
|
618
|
+
* See the visual-editing docs for the cache-behavior details.
|
|
619
|
+
*/
|
|
620
|
+
toolbar?: "server" | "client" | false;
|
|
621
|
+
|
|
592
622
|
/**
|
|
593
623
|
* Version of Astro the host project is building with. Populated by the
|
|
594
624
|
* integration's `astro:config:setup` hook (not authored by the user) and
|
|
@@ -69,6 +69,9 @@ export const RESOLVED_VIRTUAL_WAIT_UNTIL_ID = "\0" + VIRTUAL_WAIT_UNTIL_ID;
|
|
|
69
69
|
export const VIRTUAL_SCHEDULER_ID = "virtual:emdash/scheduler";
|
|
70
70
|
export const RESOLVED_VIRTUAL_SCHEDULER_ID = "\0" + VIRTUAL_SCHEDULER_ID;
|
|
71
71
|
|
|
72
|
+
export const VIRTUAL_ENV_ID = "virtual:emdash/env";
|
|
73
|
+
export const RESOLVED_VIRTUAL_ENV_ID = "\0" + VIRTUAL_ENV_ID;
|
|
74
|
+
|
|
72
75
|
/**
|
|
73
76
|
* Generates the config virtual module.
|
|
74
77
|
*/
|
|
@@ -84,13 +87,18 @@ export function generateConfigModule(serializableConfig: Record<string, unknown>
|
|
|
84
87
|
* the generator re-exports it so middleware can ask for a per-request Kysely
|
|
85
88
|
* (used for D1 Sessions API, bookmark cookies, read-replica routing). Other
|
|
86
89
|
* adapters get a stub that returns null.
|
|
90
|
+
*
|
|
91
|
+
* Adapters independently opt into the cold-start coalescing dialect. Keeping
|
|
92
|
+
* this capability explicit prevents bundlers from probing exports that do not
|
|
93
|
+
* exist on SQLite, libSQL, PostgreSQL, or other adapters.
|
|
87
94
|
*/
|
|
88
95
|
export function generateDialectModule(opts: {
|
|
89
96
|
entrypoint?: string;
|
|
90
97
|
type?: string;
|
|
91
98
|
supportsRequestScope: boolean;
|
|
99
|
+
supportsCoalescing: boolean;
|
|
92
100
|
}): string {
|
|
93
|
-
const { entrypoint, supportsRequestScope } = opts;
|
|
101
|
+
const { entrypoint, supportsRequestScope, supportsCoalescing } = opts;
|
|
94
102
|
if (!entrypoint) {
|
|
95
103
|
return [
|
|
96
104
|
`export const createDialect = undefined;`,
|
|
@@ -101,16 +109,16 @@ export function generateDialectModule(opts: {
|
|
|
101
109
|
}
|
|
102
110
|
const type = opts.type ?? "sqlite";
|
|
103
111
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
export const createCoalescingDialect =
|
|
112
|
+
const coalescingExport = supportsCoalescing
|
|
113
|
+
? `import { createCoalescingDialect as _createCoalescingDialect } from "${entrypoint}";
|
|
114
|
+
export const createCoalescingDialect = _createCoalescingDialect;`
|
|
115
|
+
: `export const createCoalescingDialect = undefined;`;
|
|
108
116
|
|
|
109
117
|
if (supportsRequestScope) {
|
|
110
118
|
return `
|
|
111
119
|
import { createDialect as _createDialect } from "${entrypoint}";
|
|
112
120
|
export { createRequestScopedDb } from "${entrypoint}";
|
|
113
|
-
${
|
|
121
|
+
${coalescingExport}
|
|
114
122
|
export const createDialect = _createDialect;
|
|
115
123
|
export const dialectType = ${JSON.stringify(type)};
|
|
116
124
|
`;
|
|
@@ -118,7 +126,7 @@ export const dialectType = ${JSON.stringify(type)};
|
|
|
118
126
|
|
|
119
127
|
return `
|
|
120
128
|
import { createDialect as _createDialect } from "${entrypoint}";
|
|
121
|
-
${
|
|
129
|
+
${coalescingExport}
|
|
122
130
|
export const createDialect = _createDialect;
|
|
123
131
|
export const dialectType = ${JSON.stringify(type)};
|
|
124
132
|
export const createRequestScopedDb = (_opts) => null;
|
|
@@ -271,6 +279,7 @@ export function generatePluginsModule(descriptors: PluginDescriptor[]): string {
|
|
|
271
279
|
storage: descriptor.storage,
|
|
272
280
|
adminPages: descriptor.adminPages,
|
|
273
281
|
adminWidgets: descriptor.adminWidgets,
|
|
282
|
+
settingsSchema: descriptor.settingsSchema,
|
|
274
283
|
portableTextBlocks: descriptor.portableTextBlocks,
|
|
275
284
|
fieldWidgets: descriptor.fieldWidgets,
|
|
276
285
|
})})`,
|
|
@@ -469,6 +478,25 @@ export function generateWaitUntilModule(adapterName: string | undefined): string
|
|
|
469
478
|
return `export const waitUntil = undefined;`;
|
|
470
479
|
}
|
|
471
480
|
|
|
481
|
+
/**
|
|
482
|
+
* Generates the env virtual module.
|
|
483
|
+
*
|
|
484
|
+
* Under @astrojs/cloudflare, re-exports `env` from `cloudflare:workers` so
|
|
485
|
+
* routes can read Worker bindings/secrets without touching
|
|
486
|
+
* `Astro.locals.runtime.env`, which Astro 6+ removed (accessing it throws
|
|
487
|
+
* rather than returning undefined, so `locals.runtime?.env` optional-chaining
|
|
488
|
+
* doesn't help -- see #1736). For any other adapter, exports `undefined` so
|
|
489
|
+
* callers fall back to `import.meta.env`. Mirrors generateWaitUntilModule:
|
|
490
|
+
* core stays adapter-agnostic, with no direct `cloudflare:workers` import
|
|
491
|
+
* that would fail to resolve under a Node build.
|
|
492
|
+
*/
|
|
493
|
+
export function generateEnvModule(adapterName: string | undefined): string {
|
|
494
|
+
if (adapterName === "@astrojs/cloudflare") {
|
|
495
|
+
return `export { env } from "cloudflare:workers";`;
|
|
496
|
+
}
|
|
497
|
+
return `export const env = undefined;`;
|
|
498
|
+
}
|
|
499
|
+
|
|
472
500
|
/**
|
|
473
501
|
* Generates the scheduler virtual module.
|
|
474
502
|
*
|
|
@@ -598,12 +626,14 @@ function resolveModulePathFromProject(specifier: string, projectRoot: string): s
|
|
|
598
626
|
/**
|
|
599
627
|
* Generates the sandboxed plugins module.
|
|
600
628
|
* Resolves plugin entrypoints to files, reads them, and embeds the code.
|
|
629
|
+
* Notifies the caller about each resolved entry so build tools can watch it.
|
|
601
630
|
*
|
|
602
631
|
* At runtime, middleware uses SandboxRunner to load these into isolates.
|
|
603
632
|
*/
|
|
604
633
|
export function generateSandboxedPluginsModule(
|
|
605
634
|
sandboxed: PluginDescriptor[],
|
|
606
635
|
projectRoot: string,
|
|
636
|
+
onEntryResolved?: (filePath: string) => void,
|
|
607
637
|
): string {
|
|
608
638
|
if (sandboxed.length === 0) {
|
|
609
639
|
return `
|
|
@@ -630,6 +660,8 @@ export const sandboxedPlugins = [];
|
|
|
630
660
|
);
|
|
631
661
|
}
|
|
632
662
|
|
|
663
|
+
onEntryResolved?.(filePath);
|
|
664
|
+
|
|
633
665
|
const code = readFileSync(filePath, "utf-8");
|
|
634
666
|
|
|
635
667
|
// Create the plugin entry with embedded code and sandbox config
|
|
@@ -640,8 +672,10 @@ export const sandboxedPlugins = [];
|
|
|
640
672
|
capabilities: ${JSON.stringify(descriptor.capabilities ?? [])},
|
|
641
673
|
allowedHosts: ${JSON.stringify(descriptor.allowedHosts ?? [])},
|
|
642
674
|
storage: ${JSON.stringify(descriptor.storage ?? {})},
|
|
675
|
+
mcp: ${JSON.stringify(descriptor.mcp)},
|
|
643
676
|
adminPages: ${JSON.stringify(descriptor.adminPages ?? [])},
|
|
644
677
|
adminWidgets: ${JSON.stringify(descriptor.adminWidgets ?? [])},
|
|
678
|
+
settingsSchema: ${JSON.stringify(descriptor.settingsSchema)},
|
|
645
679
|
portableTextBlocks: ${JSON.stringify(descriptor.portableTextBlocks ?? [])},
|
|
646
680
|
fieldWidgets: ${JSON.stringify(descriptor.fieldWidgets ?? [])},
|
|
647
681
|
adminEntry: ${JSON.stringify(descriptor.adminEntry)},
|
|
@@ -46,9 +46,12 @@ import {
|
|
|
46
46
|
RESOLVED_VIRTUAL_WAIT_UNTIL_ID,
|
|
47
47
|
VIRTUAL_SCHEDULER_ID,
|
|
48
48
|
RESOLVED_VIRTUAL_SCHEDULER_ID,
|
|
49
|
+
VIRTUAL_ENV_ID,
|
|
50
|
+
RESOLVED_VIRTUAL_ENV_ID,
|
|
49
51
|
generateSeedModule,
|
|
50
52
|
generateWaitUntilModule,
|
|
51
53
|
generateSchedulerModule,
|
|
54
|
+
generateEnvModule,
|
|
52
55
|
generateConfigModule,
|
|
53
56
|
generateDialectModule,
|
|
54
57
|
generateStorageModule,
|
|
@@ -227,6 +230,9 @@ export function createVirtualModulesPlugin(
|
|
|
227
230
|
if (id === VIRTUAL_SCHEDULER_ID) {
|
|
228
231
|
return RESOLVED_VIRTUAL_SCHEDULER_ID;
|
|
229
232
|
}
|
|
233
|
+
if (id === VIRTUAL_ENV_ID) {
|
|
234
|
+
return RESOLVED_VIRTUAL_ENV_ID;
|
|
235
|
+
}
|
|
230
236
|
},
|
|
231
237
|
load(id: string) {
|
|
232
238
|
if (id === RESOLVED_VIRTUAL_CONFIG_ID) {
|
|
@@ -239,6 +245,7 @@ export function createVirtualModulesPlugin(
|
|
|
239
245
|
entrypoint: resolvedConfig.database?.entrypoint,
|
|
240
246
|
type: resolvedConfig.database?.type,
|
|
241
247
|
supportsRequestScope: resolvedConfig.database?.supportsRequestScope ?? false,
|
|
248
|
+
supportsCoalescing: resolvedConfig.database?.supportsCoalescing ?? false,
|
|
242
249
|
});
|
|
243
250
|
}
|
|
244
251
|
// Generate a module that statically imports the configured storage
|
|
@@ -271,7 +278,11 @@ export function createVirtualModulesPlugin(
|
|
|
271
278
|
if (id === RESOLVED_VIRTUAL_SANDBOXED_PLUGINS_ID) {
|
|
272
279
|
// Pass project root for proper module resolution
|
|
273
280
|
const projectRoot = fileURLToPath(astroConfig.root);
|
|
274
|
-
return generateSandboxedPluginsModule(
|
|
281
|
+
return generateSandboxedPluginsModule(
|
|
282
|
+
resolvedConfig.sandboxed ?? [],
|
|
283
|
+
projectRoot,
|
|
284
|
+
(filePath) => this.addWatchFile(filePath),
|
|
285
|
+
);
|
|
275
286
|
}
|
|
276
287
|
// Generate auth module that statically imports the configured auth provider
|
|
277
288
|
if (id === RESOLVED_VIRTUAL_AUTH_ID) {
|
|
@@ -317,6 +328,11 @@ export function createVirtualModulesPlugin(
|
|
|
317
328
|
const schedulerCommand = astroCommand === "dev" ? "serve" : "build";
|
|
318
329
|
return generateSchedulerModule(astroConfig.adapter?.name, schedulerCommand);
|
|
319
330
|
}
|
|
331
|
+
// Generate env module — re-exports cloudflare:workers' env under
|
|
332
|
+
// the Cloudflare adapter, undefined otherwise (#1736).
|
|
333
|
+
if (id === RESOLVED_VIRTUAL_ENV_ID) {
|
|
334
|
+
return generateEnvModule(astroConfig.adapter?.name);
|
|
335
|
+
}
|
|
320
336
|
},
|
|
321
337
|
};
|
|
322
338
|
}
|
|
@@ -60,13 +60,7 @@ function isUnsafeMethod(method: string): boolean {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
function csrfRejectedResponse(): Response {
|
|
63
|
-
return
|
|
64
|
-
JSON.stringify({ error: { code: "CSRF_REJECTED", message: "Missing required header" } }),
|
|
65
|
-
{
|
|
66
|
-
status: 403,
|
|
67
|
-
headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS },
|
|
68
|
-
},
|
|
69
|
-
);
|
|
63
|
+
return apiError("CSRF_REJECTED", "Missing required header", 403);
|
|
70
64
|
}
|
|
71
65
|
|
|
72
66
|
function mcpUnauthorizedResponse(
|
|
@@ -74,16 +68,13 @@ function mcpUnauthorizedResponse(
|
|
|
74
68
|
config?: Parameters<typeof getPublicOrigin>[1],
|
|
75
69
|
): Response {
|
|
76
70
|
const origin = getPublicOrigin(url, config);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"WWW-Authenticate": `Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`,
|
|
83
|
-
...MW_CACHE_HEADERS,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
71
|
+
const response = apiError("NOT_AUTHENTICATED", "Not authenticated", 401);
|
|
72
|
+
// Preserve the OAuth discovery header so MCP clients can find the auth server.
|
|
73
|
+
response.headers.set(
|
|
74
|
+
"WWW-Authenticate",
|
|
75
|
+
`Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`,
|
|
86
76
|
);
|
|
77
|
+
return response;
|
|
87
78
|
}
|
|
88
79
|
|
|
89
80
|
/**
|
|
@@ -224,15 +215,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
224
215
|
if (method !== "GET" && method !== "HEAD" && method !== "OPTIONS") {
|
|
225
216
|
const csrfHeader = context.request.headers.get("X-EmDash-Request");
|
|
226
217
|
if (csrfHeader !== "1") {
|
|
227
|
-
return
|
|
228
|
-
JSON.stringify({
|
|
229
|
-
error: { code: "CSRF_REJECTED", message: "Missing required header" },
|
|
230
|
-
}),
|
|
231
|
-
{
|
|
232
|
-
status: 403,
|
|
233
|
-
headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS },
|
|
234
|
-
},
|
|
235
|
-
);
|
|
218
|
+
return apiError("CSRF_REJECTED", "Missing required header", 403);
|
|
236
219
|
}
|
|
237
220
|
}
|
|
238
221
|
return next();
|
|
@@ -250,20 +233,16 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
250
233
|
const bearerResult = await handleBearerAuth(context);
|
|
251
234
|
|
|
252
235
|
if (bearerResult === "invalid") {
|
|
253
|
-
const
|
|
254
|
-
"Content-Type": "application/json",
|
|
255
|
-
...MW_CACHE_HEADERS,
|
|
256
|
-
};
|
|
236
|
+
const response = apiError("INVALID_TOKEN", "Invalid or expired token", 401);
|
|
257
237
|
// Add WWW-Authenticate header on MCP endpoint 401s to trigger OAuth discovery
|
|
258
238
|
if (url.pathname === "/_emdash/api/mcp") {
|
|
259
239
|
const origin = getPublicOrigin(url, context.locals.emdash?.config);
|
|
260
|
-
headers
|
|
261
|
-
|
|
240
|
+
response.headers.set(
|
|
241
|
+
"WWW-Authenticate",
|
|
242
|
+
`Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`,
|
|
243
|
+
);
|
|
262
244
|
}
|
|
263
|
-
return
|
|
264
|
-
JSON.stringify({ error: { code: "INVALID_TOKEN", message: "Invalid or expired token" } }),
|
|
265
|
-
{ status: 401, headers },
|
|
266
|
-
);
|
|
245
|
+
return response;
|
|
267
246
|
}
|
|
268
247
|
|
|
269
248
|
const isTokenAuth = bearerResult === "authenticated";
|
|
@@ -308,7 +287,10 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
308
287
|
"Content-Security-Policy",
|
|
309
288
|
buildEmDashCsp(
|
|
310
289
|
context.locals.emdash?.config.experimental?.registry,
|
|
311
|
-
getConfiguredStorageEndpoint(
|
|
290
|
+
getConfiguredStorageEndpoint(
|
|
291
|
+
context.locals.emdash?.config.storage,
|
|
292
|
+
context.locals.emdash?.storage,
|
|
293
|
+
),
|
|
312
294
|
),
|
|
313
295
|
);
|
|
314
296
|
}
|
|
@@ -323,7 +305,10 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
323
305
|
"Content-Security-Policy",
|
|
324
306
|
buildEmDashCsp(
|
|
325
307
|
context.locals.emdash?.config.experimental?.registry,
|
|
326
|
-
getConfiguredStorageEndpoint(
|
|
308
|
+
getConfiguredStorageEndpoint(
|
|
309
|
+
context.locals.emdash?.config.storage,
|
|
310
|
+
context.locals.emdash?.storage,
|
|
311
|
+
),
|
|
327
312
|
),
|
|
328
313
|
);
|
|
329
314
|
}
|
|
@@ -378,15 +363,28 @@ async function handleEmDashAuth(
|
|
|
378
363
|
}
|
|
379
364
|
|
|
380
365
|
/**
|
|
381
|
-
*
|
|
382
|
-
*
|
|
383
|
-
*
|
|
366
|
+
* Plugin-route auth. Resolves the user in three steps, stopping at the first that
|
|
367
|
+
* applies:
|
|
368
|
+
*
|
|
369
|
+
* 1. Bearer token (all modes). A valid token authenticates; an invalid/expired one
|
|
370
|
+
* returns 401 (we never silently downgrade a bad token to anonymous).
|
|
371
|
+
* 2. External provider — only for a *private* route in production external-auth
|
|
372
|
+
* mode. Here `handleExternalAuth` is the sole authority: the provider (e.g.
|
|
373
|
+
* Cloudflare Access) is re-verified on every request, so it hard-blocks with
|
|
374
|
+
* 401 on failure. It does persist an EmDash session (so public pages can
|
|
375
|
+
* identify the user), but on these routes that session is deliberately NOT
|
|
376
|
+
* consulted as a fallback — the provider check is authoritative every time.
|
|
377
|
+
* 3. Session — everything else (non-external mode, DEV, and all public routes).
|
|
378
|
+
* This is soft: it sets `locals.user` if a session exists but never blocks.
|
|
379
|
+
*
|
|
380
|
+
* Public routes are always allowed through. The catch-all handler still enforces
|
|
381
|
+
* the `plugins:manage` permission and CSRF for private invocations.
|
|
384
382
|
*/
|
|
385
383
|
async function handlePluginRouteAuth(
|
|
386
384
|
context: Parameters<Parameters<typeof defineMiddleware>[0]>[0],
|
|
387
385
|
next: Parameters<Parameters<typeof defineMiddleware>[0]>[1],
|
|
388
386
|
): Promise<Response> {
|
|
389
|
-
const { locals } = context;
|
|
387
|
+
const { locals, url } = context;
|
|
390
388
|
const { emdash } = locals;
|
|
391
389
|
|
|
392
390
|
try {
|
|
@@ -399,19 +397,22 @@ async function handlePluginRouteAuth(
|
|
|
399
397
|
if (bearerResult === "invalid") {
|
|
400
398
|
// A token was presented but is invalid/expired — return 401 so the
|
|
401
399
|
// caller knows their token is bad (don't silently downgrade to no-auth).
|
|
402
|
-
return
|
|
403
|
-
JSON.stringify({ error: { code: "INVALID_TOKEN", message: "Invalid or expired token" } }),
|
|
404
|
-
{
|
|
405
|
-
status: 401,
|
|
406
|
-
headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS },
|
|
407
|
-
},
|
|
408
|
-
);
|
|
400
|
+
return apiError("INVALID_TOKEN", "Invalid or expired token", 401);
|
|
409
401
|
}
|
|
410
|
-
// "none" — no token presented, try session auth below.
|
|
402
|
+
// "none" — no token presented, try external/session auth below.
|
|
411
403
|
} catch (error) {
|
|
412
404
|
console.error("Plugin route bearer auth error:", error);
|
|
413
405
|
}
|
|
414
406
|
|
|
407
|
+
const authMode = getAuthMode(emdash?.config);
|
|
408
|
+
if (
|
|
409
|
+
authMode.type === "external" &&
|
|
410
|
+
!import.meta.env.DEV &&
|
|
411
|
+
!isPublicPluginApiRoute(url.pathname, emdash)
|
|
412
|
+
) {
|
|
413
|
+
return handleExternalAuth(context, next, authMode, true);
|
|
414
|
+
}
|
|
415
|
+
|
|
415
416
|
try {
|
|
416
417
|
// Try session auth (sets locals.user if session exists)
|
|
417
418
|
const { session } = context;
|
|
@@ -431,6 +432,17 @@ async function handlePluginRouteAuth(
|
|
|
431
432
|
return next();
|
|
432
433
|
}
|
|
433
434
|
|
|
435
|
+
function isPublicPluginApiRoute(pathname: string, emdash: EmDashHandlers | undefined): boolean {
|
|
436
|
+
const prefix = "/_emdash/api/plugins/";
|
|
437
|
+
const route = pathname.slice(prefix.length);
|
|
438
|
+
const slashIndex = route.indexOf("/");
|
|
439
|
+
if (slashIndex <= 0 || !emdash?.getPluginRouteMeta) return false;
|
|
440
|
+
|
|
441
|
+
return (
|
|
442
|
+
emdash.getPluginRouteMeta(route.slice(0, slashIndex), route.slice(slashIndex))?.public === true
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
|
|
434
446
|
/**
|
|
435
447
|
* Soft auth check for public routes with edit mode cookie.
|
|
436
448
|
* Checks the session and sets locals.user if valid, but never blocks the request.
|
|
@@ -662,10 +674,7 @@ async function handlePasskeyAuth(
|
|
|
662
674
|
|
|
663
675
|
if (!sessionUser?.id) {
|
|
664
676
|
if (isApiRoute) {
|
|
665
|
-
return
|
|
666
|
-
{ error: { code: "NOT_AUTHENTICATED", message: "Not authenticated" } },
|
|
667
|
-
{ status: 401, headers: MW_CACHE_HEADERS },
|
|
668
|
-
);
|
|
677
|
+
return apiError("NOT_AUTHENTICATED", "Not authenticated", 401);
|
|
669
678
|
}
|
|
670
679
|
const loginUrl = new URL("/_emdash/admin/login", getPublicOrigin(url, emdash?.config));
|
|
671
680
|
loginUrl.searchParams.set("redirect", url.pathname);
|
|
@@ -680,10 +689,7 @@ async function handlePasskeyAuth(
|
|
|
680
689
|
// User no longer exists - clear session
|
|
681
690
|
session?.destroy();
|
|
682
691
|
if (isApiRoute) {
|
|
683
|
-
return
|
|
684
|
-
{ error: { code: "NOT_FOUND", message: "User not found" } },
|
|
685
|
-
{ status: 401, headers: MW_CACHE_HEADERS },
|
|
686
|
-
);
|
|
692
|
+
return apiError("NOT_FOUND", "User not found", 401);
|
|
687
693
|
}
|
|
688
694
|
const loginUrl = new URL("/_emdash/admin/login", getPublicOrigin(url, emdash?.config));
|
|
689
695
|
return context.redirect(loginUrl.toString());
|
|
@@ -764,9 +770,6 @@ const SCOPE_RULES: Array<[prefix: string, method: string, scope: string]> = [
|
|
|
764
770
|
// settings:manage are not rejected at the middleware level.
|
|
765
771
|
["/_emdash/api/settings", "GET", "settings:read"],
|
|
766
772
|
["/_emdash/api/settings", "WRITE", "settings:manage"],
|
|
767
|
-
|
|
768
|
-
// MCP endpoint — scopes enforced per-tool inside mcp/server.ts
|
|
769
|
-
["/_emdash/api/mcp", "*", "content:read"],
|
|
770
773
|
];
|
|
771
774
|
|
|
772
775
|
const WRITE_METHODS = new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
@@ -785,6 +788,11 @@ function enforceTokenScope(
|
|
|
785
788
|
// Session auth — implicit full access, no scope restrictions
|
|
786
789
|
if (!tokenScopes) return null;
|
|
787
790
|
|
|
791
|
+
// MCP is authenticated here, but each tool enforces its own scope. A
|
|
792
|
+
// blanket content:read/admin requirement would prevent plugin-scoped tokens
|
|
793
|
+
// from reaching `mcp/server.ts`, where the actual tool policy lives.
|
|
794
|
+
if (pathname === MCP_ENDPOINT_PATH) return null;
|
|
795
|
+
|
|
788
796
|
const isWrite = WRITE_METHODS.has(method);
|
|
789
797
|
|
|
790
798
|
for (const [prefix, ruleMethod, scope] of SCOPE_RULES) {
|
|
@@ -795,28 +803,12 @@ function enforceTokenScope(
|
|
|
795
803
|
if (ruleMethod === "*" || (ruleMethod === "WRITE" && isWrite) || ruleMethod === method) {
|
|
796
804
|
if (hasScope(tokenScopes, scope)) return null;
|
|
797
805
|
|
|
798
|
-
return
|
|
799
|
-
JSON.stringify({
|
|
800
|
-
error: {
|
|
801
|
-
code: "INSUFFICIENT_SCOPE",
|
|
802
|
-
message: `Token lacks required scope: ${scope}`,
|
|
803
|
-
},
|
|
804
|
-
}),
|
|
805
|
-
{ status: 403, headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS } },
|
|
806
|
-
);
|
|
806
|
+
return apiError("INSUFFICIENT_SCOPE", `Token lacks required scope: ${scope}`, 403);
|
|
807
807
|
}
|
|
808
808
|
}
|
|
809
809
|
|
|
810
810
|
// No rule matched — default to admin scope (fail-closed)
|
|
811
811
|
if (hasScope(tokenScopes, "admin")) return null;
|
|
812
812
|
|
|
813
|
-
return
|
|
814
|
-
JSON.stringify({
|
|
815
|
-
error: {
|
|
816
|
-
code: "INSUFFICIENT_SCOPE",
|
|
817
|
-
message: "Token lacks required scope: admin",
|
|
818
|
-
},
|
|
819
|
-
}),
|
|
820
|
-
{ status: 403, headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS } },
|
|
821
|
-
);
|
|
813
|
+
return apiError("INSUFFICIENT_SCOPE", "Token lacks required scope: admin", 403);
|
|
822
814
|
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* are configured, in which case those origins are allowed too.
|
|
14
14
|
*/
|
|
15
15
|
import type { RegistryConfigInput } from "../../registry/types.js";
|
|
16
|
+
import type { Storage } from "../../storage/types.js";
|
|
16
17
|
import type { StorageDescriptor } from "../storage/types.js";
|
|
17
18
|
|
|
18
19
|
/** Entrypoint constant used by the `s3()` adapter (see `astro/storage/adapters.ts`). */
|
|
@@ -28,10 +29,12 @@ const S3_ADAPTER_ENTRYPOINT = "emdash/storage/s3";
|
|
|
28
29
|
* `endpoint` -- from the matching `S3_*` env var at runtime (see
|
|
29
30
|
* `storage/s3.ts`'s `resolveS3Config`). A site configured as `s3({ ... })`
|
|
30
31
|
* with only `S3_ENDPOINT` set has no `endpoint` in the descriptor's config,
|
|
31
|
-
* so fall back to that env var for S3-adapter storage
|
|
32
|
+
* so fall back to that env var for S3-adapter storage. Custom adapters can
|
|
33
|
+
* expose their runtime upload origin through `getClientUploadOrigin()`.
|
|
32
34
|
*/
|
|
33
35
|
export function getConfiguredStorageEndpoint(
|
|
34
36
|
storage: StorageDescriptor | undefined,
|
|
37
|
+
runtimeStorage?: Pick<Storage, "getClientUploadOrigin"> | null,
|
|
35
38
|
): string | undefined {
|
|
36
39
|
const config = storage?.config;
|
|
37
40
|
if (typeof config === "object" && config !== null && "endpoint" in config) {
|
|
@@ -45,7 +48,7 @@ export function getConfiguredStorageEndpoint(
|
|
|
45
48
|
if (envEndpoint) return envEndpoint;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
return
|
|
51
|
+
return runtimeStorage?.getClientUploadOrigin?.();
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
function getRegistryAggregatorOrigin(
|