emdash 0.35.0 → 0.36.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-CzL3H752.d.mts} +3 -3
- package/dist/{adapters-Bb1vG41D.d.mts.map → adapters-CzL3H752.d.mts.map} +1 -1
- package/dist/{allowed-origins-DW7sYyqg.mjs → allowed-origins-maylGaHv.mjs} +2 -2
- package/dist/{allowed-origins-DW7sYyqg.mjs.map → allowed-origins-maylGaHv.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +22 -20
- 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-B0w3uBiG.mjs +2269 -0
- package/dist/api-B0w3uBiG.mjs.map +1 -0
- package/dist/{api-tokens-KO24G1Fd.mjs → api-tokens-9YrrCoE6.mjs} +2 -2
- package/dist/{api-tokens-KO24G1Fd.mjs.map → api-tokens-9YrrCoE6.mjs.map} +1 -1
- package/dist/{apply-kUDt80-G.mjs → apply-B_VMpJ2P.mjs} +34 -35
- package/dist/{apply-kUDt80-G.mjs.map → apply-B_VMpJ2P.mjs.map} +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.mjs +26 -15
- 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 +168 -1305
- 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.mjs +4 -4
- 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 +15 -15
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +15 -15
- package/dist/astro/routes/api/admin/bylines/index.mjs +15 -15
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/comments/bulk.mjs +9 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +4 -4
- package/dist/astro/routes/api/admin/comments/index.mjs +9 -9
- 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 +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +52 -46
- 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 +52 -46
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +52 -46
- 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 +52 -46
- 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 +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +52 -46
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +54 -48
- 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 +172 -133
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +52 -46
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +52 -46
- 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 +52 -46
- 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 +13 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +12 -12
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
- 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 +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +16 -14
- 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 +16 -14
- 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 +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- 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 +7 -7
- 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 +16 -16
- 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 +12 -12
- 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 +16 -16
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +26 -26
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/mcp.mjs +42 -42
- package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
- 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_.mjs +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 +9 -9
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +28 -19
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/items.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/translations.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_.mjs +8 -8
- package/dist/astro/routes/api/menus/index.mjs +8 -8
- 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 +153 -6
- 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 +16 -14
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +11 -9
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +16 -14
- 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 +52 -46
- 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 +52 -46
- 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 +52 -46
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +52 -46
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +52 -46
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +52 -46
- 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 +52 -46
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +52 -46
- 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 +4 -4
- package/dist/astro/routes/api/settings.mjs +13 -13
- 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 +34 -27
- 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 +31 -29
- 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.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/index.mjs +13 -13
- 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.mjs +7 -7
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_.mjs +5 -5
- package/dist/astro/routes/api/widget-areas/index.mjs +10 -10
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
- package/dist/astro/routes/sitemap.xml.mjs +7 -7
- package/dist/astro/types.d.mts +19 -14
- 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-ByYs-Uxs.mjs} +2 -2
- package/dist/{authorize-DUElxgOQ.mjs.map → authorize-ByYs-Uxs.mjs.map} +1 -1
- package/dist/{backup-DWYpJlLj.mjs → backup-ChyHfIoX.mjs} +5 -5
- package/dist/{backup-DWYpJlLj.mjs.map → backup-ChyHfIoX.mjs.map} +1 -1
- package/dist/{bundle-vn56sLos.mjs → bundle-DZFhFurR.mjs} +4 -4
- package/dist/{bundle-vn56sLos.mjs.map → bundle-DZFhFurR.mjs.map} +1 -1
- package/dist/{byline-yjvWq4ip.mjs → byline-Cpnwrje1.mjs} +6 -6
- package/dist/{byline-yjvWq4ip.mjs.map → byline-Cpnwrje1.mjs.map} +1 -1
- package/dist/{byline-fields-txaLGoME.mjs → byline-fields-CAyA_Umd.mjs} +2 -2
- package/dist/{byline-fields-txaLGoME.mjs.map → byline-fields-CAyA_Umd.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-BSo9B9RX.mjs} +7 -7
- package/dist/{bylines-DjXS5p0P.mjs.map → bylines-BSo9B9RX.mjs.map} +1 -1
- package/dist/{bylines-Bu7pchQ4.mjs → bylines-CHjvehVX.mjs} +3 -3
- package/dist/{bylines-Bu7pchQ4.mjs.map → bylines-CHjvehVX.mjs.map} +1 -1
- package/dist/{cache-C46-3Irl.mjs → cache-5VirJ2Cn.mjs} +4 -4
- package/dist/{cache-C46-3Irl.mjs.map → cache-5VirJ2Cn.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-D5pSY2S1.mjs} +1 -1
- package/dist/{challenge-store-SIL5DsF2.mjs.map → challenge-store-D5pSY2S1.mjs.map} +1 -1
- package/dist/{chunks-fiZ8G9RJ.mjs → chunks-bNiX6_DR.mjs} +2 -2
- package/dist/{chunks-fiZ8G9RJ.mjs.map → chunks-bNiX6_DR.mjs.map} +1 -1
- package/dist/cli/index.mjs +36 -52
- 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-m_oi2c0N.mjs} +13 -356
- package/dist/collection-deletion-m_oi2c0N.mjs.map +1 -0
- package/dist/{comment-Dxlep6cE.mjs → comment-DhvLEdhQ.mjs} +1 -1
- package/dist/{comment-Dxlep6cE.mjs.map → comment-DhvLEdhQ.mjs.map} +1 -1
- package/dist/{comment-reaction-D-2J84UE.mjs → comment-reaction-CRuItEjt.mjs} +2 -2
- package/dist/{comment-reaction-D-2J84UE.mjs.map → comment-reaction-CRuItEjt.mjs.map} +1 -1
- package/dist/{comments-CTfZtLmM.mjs → comments-CLj4bi8I.mjs} +2 -2
- package/dist/{comments-CTfZtLmM.mjs.map → comments-CLj4bi8I.mjs.map} +1 -1
- package/dist/{components-CQy3lh9x.mjs → components-v4U4DT2y.mjs} +1 -1
- package/dist/{components-CQy3lh9x.mjs.map → components-v4U4DT2y.mjs.map} +1 -1
- package/dist/{config-COQzTe5Q.d.mts → config-DrfghTPe.d.mts} +1 -1
- package/dist/{config-COQzTe5Q.d.mts.map → config-DrfghTPe.d.mts.map} +1 -1
- package/dist/{content-ZHCc1ngN.mjs → content-CP-SeXNa.mjs} +5 -4
- package/dist/content-CP-SeXNa.mjs.map +1 -0
- package/dist/{content-list-query-wJ2WN8Vp.d.mts → content-list-query-BhejKVqb.d.mts} +1 -1
- package/dist/{content-list-query-wJ2WN8Vp.d.mts.map → content-list-query-BhejKVqb.d.mts.map} +1 -1
- package/dist/{content-refresh-B_8SJzuU.mjs → content-refresh-DLOfIhYc.mjs} +1094 -93
- package/dist/content-refresh-DLOfIhYc.mjs.map +1 -0
- package/dist/{media-usage-BZCydfvu.mjs → content-repair-BCxzy0r4.mjs} +5 -196
- package/dist/content-repair-BCxzy0r4.mjs.map +1 -0
- package/dist/{context-ZldbZcle.mjs → context-BR5hRWiK.mjs} +13 -13
- package/dist/{context-ZldbZcle.mjs.map → context-BR5hRWiK.mjs.map} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs → cron-CWfWrWKG.mjs} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs.map → cron-CWfWrWKG.mjs.map} +1 -1
- package/dist/{dashboard-DvHbk_cv.mjs → dashboard-CkIV2rnQ.mjs} +5 -5
- package/dist/{dashboard-DvHbk_cv.mjs.map → dashboard-CkIV2rnQ.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/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-YMEfcQUx.mjs} +1 -1
- package/dist/{default-DdDl3fxv.mjs.map → default-YMEfcQUx.mjs.map} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts → deferred-tasks-DfqxH5Xf.d.mts} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts.map → deferred-tasks-DfqxH5Xf.d.mts.map} +1 -1
- package/dist/{device-flow-C0GdD_z8.mjs → device-flow-CojjSBwb.mjs} +5 -5
- package/dist/{device-flow-C0GdD_z8.mjs.map → device-flow-CojjSBwb.mjs.map} +1 -1
- package/dist/{direct-executor-CDXeJCSs.mjs → direct-executor-BWeWiRYB.mjs} +3 -3
- package/dist/{direct-executor-CDXeJCSs.mjs.map → direct-executor-BWeWiRYB.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-CEJgR_LB.mjs} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs.map → email-console-CEJgR_LB.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-D9w94fjV.mjs} +2 -2
- package/dist/{error-DupyJZE2.mjs.map → error-D9w94fjV.mjs.map} +1 -1
- package/dist/{errors-CLUPm7aD.mjs → errors-n2j49uNf.mjs} +22 -2
- package/dist/errors-n2j49uNf.mjs.map +1 -0
- package/dist/{escape-DUY2r2Zs.mjs → escape-DN4Qmjsl.mjs} +1 -1
- package/dist/{escape-DUY2r2Zs.mjs.map → escape-DN4Qmjsl.mjs.map} +1 -1
- package/dist/{field-defs-cache-BzwBlJrR.mjs → field-defs-cache-Bh4q6oar.mjs} +5 -5
- package/dist/{field-defs-cache-BzwBlJrR.mjs.map → field-defs-cache-Bh4q6oar.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-BhOdW0bi.mjs} +3 -3
- package/dist/{fts-manager-DyZEohZC.mjs.map → fts-manager-BhOdW0bi.mjs.map} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs → hash-CTcngWvj.mjs} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs.map → hash-CTcngWvj.mjs.map} +1 -1
- package/dist/{hreflang-DwT2E0Sa.d.mts → hreflang-7pTHsLZJ.d.mts} +2 -2
- package/dist/{hreflang-DwT2E0Sa.d.mts.map → hreflang-7pTHsLZJ.d.mts.map} +1 -1
- package/dist/{hreflang-BBe83kKa.mjs → hreflang-Huc6O5wa.mjs} +7 -7
- package/dist/{hreflang-BBe83kKa.mjs.map → hreflang-Huc6O5wa.mjs.map} +1 -1
- package/dist/{identity-Ys6Dlc9C.mjs → identity-DXmb4aVp.mjs} +3 -3
- package/dist/{identity-Ys6Dlc9C.mjs.map → identity-DXmb4aVp.mjs.map} +1 -1
- package/dist/{import-DPkLmeXO.mjs → import-C4_O3KXU.mjs} +5 -5
- package/dist/{import-DPkLmeXO.mjs.map → import-C4_O3KXU.mjs.map} +1 -1
- package/dist/{index-C9KuQyO-.d.mts → index-6bRee8zb.d.mts} +3 -3
- package/dist/{index-C9KuQyO-.d.mts.map → index-6bRee8zb.d.mts.map} +1 -1
- package/dist/{index-BVBZj4-7.d.mts → index-DWbJrsAg.d.mts} +128 -52
- package/dist/index-DWbJrsAg.d.mts.map +1 -0
- package/dist/index.d.mts +21 -21
- package/dist/index.mjs +78 -72
- 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-Bo7fZAbg.mjs} +2 -2
- package/dist/{load-YJ2xl3ra.mjs.map → load-Bo7fZAbg.mjs.map} +1 -1
- package/dist/{loader-CdG_Ci3H.mjs → loader-ZsjE4paL.mjs} +2 -2
- package/dist/{loader-CdG_Ci3H.mjs.map → loader-ZsjE4paL.mjs.map} +1 -1
- package/dist/{manifest-builder-B252yQUf.mjs → manifest-builder-QXuqvVMP.mjs} +2 -2
- package/dist/{manifest-builder-B252yQUf.mjs.map → manifest-builder-QXuqvVMP.mjs.map} +1 -1
- package/dist/{manifest-schema-BXbUAHod.mjs → manifest-schema-CUYPfCEH.mjs} +1 -1
- package/dist/{manifest-schema-BXbUAHod.mjs.map → manifest-schema-CUYPfCEH.mjs.map} +1 -1
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +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 +11 -5
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-BWWWb8kg.mjs → media-BjwNuLEu.mjs} +100 -6
- package/dist/media-BjwNuLEu.mjs.map +1 -0
- package/dist/{media-CzhAn2--.mjs → media-D6SeAfBl.mjs} +41 -12
- package/dist/media-D6SeAfBl.mjs.map +1 -0
- package/dist/{media-allowlist-D6x-Us02.mjs → media-allowlist-D35v7bmL.mjs} +3 -2
- package/dist/media-allowlist-D35v7bmL.mjs.map +1 -0
- package/dist/media-folders-D-0CmRZj.mjs +210 -0
- package/dist/media-folders-D-0CmRZj.mjs.map +1 -0
- package/dist/{media-upload-CHBVn6m-.mjs → media-upload-C7bLXGcI.mjs} +9 -9
- package/dist/{media-upload-CHBVn6m-.mjs.map → media-upload-C7bLXGcI.mjs.map} +1 -1
- package/dist/{media-url-BvoX88FA.mjs → media-url-DH7giMx_.mjs} +1 -1
- package/dist/{media-url-BvoX88FA.mjs.map → media-url-DH7giMx_.mjs.map} +1 -1
- package/dist/media-usage-BTRJvS6V.mjs +1833 -0
- package/dist/media-usage-BTRJvS6V.mjs.map +1 -0
- package/dist/media-usage-activation-Dx0kPV6b.mjs +78 -0
- package/dist/media-usage-activation-Dx0kPV6b.mjs.map +1 -0
- package/dist/{media-usage-work-DrCbqBcl.mjs → media-usage-work-C-fhM30c.mjs} +221 -59
- package/dist/media-usage-work-C-fhM30c.mjs.map +1 -0
- package/dist/{media-usage-work-CLo_6tct.mjs → media-usage-work-DWb2XPMI.mjs} +4 -4
- package/dist/{media-usage-work-CLo_6tct.mjs.map → media-usage-work-DWb2XPMI.mjs.map} +1 -1
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs → media-usage-write-fence-BwoJVRDC.mjs} +2 -2
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs.map → media-usage-write-fence-BwoJVRDC.mjs.map} +1 -1
- package/dist/{menus-TCNSd2vp.mjs → menus-CD7EFLwz.mjs} +3 -3
- package/dist/{menus-TCNSd2vp.mjs.map → menus-CD7EFLwz.mjs.map} +1 -1
- package/dist/{menus-DSo5QeW0.mjs → menus-CNg0QlDt.mjs} +42 -26
- package/dist/menus-CNg0QlDt.mjs.map +1 -0
- 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-DaUM_MB2.mjs} +1 -1
- package/dist/{mode-BDoH_WcF.mjs.map → mode-DaUM_MB2.mjs.map} +1 -1
- package/dist/node-sqlite-compat-Udb4Y-rs.mjs +46 -0
- package/dist/node-sqlite-compat-Udb4Y-rs.mjs.map +1 -0
- package/dist/{normalize-Bc-s_r-a.mjs → normalize-CSxdKBVa.mjs} +22 -1
- package/dist/normalize-CSxdKBVa.mjs.map +1 -0
- package/dist/{oauth-authorization-iOikmrJd.mjs → oauth-authorization-Dpsb-fMJ.mjs} +5 -5
- package/dist/{oauth-authorization-iOikmrJd.mjs.map → oauth-authorization-Dpsb-fMJ.mjs.map} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs → oauth-clients-Bxnoe_67.mjs} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs.map → oauth-clients-Bxnoe_67.mjs.map} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs → oauth-state-store-0C4s0K6w.mjs} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs.map → oauth-state-store-0C4s0K6w.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs → oauth-user-lookup-wlGYSeqX.mjs} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs.map → oauth-user-lookup-wlGYSeqX.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- 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-BhZIeFY1.d.mts} +3 -3
- package/dist/{options--hhz-jZ1.d.mts.map → options-BhZIeFY1.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-DFbuc-Fh.mjs → parse-BRJg1kz8.mjs} +2 -2
- package/dist/{parse-DFbuc-Fh.mjs.map → parse-BRJg1kz8.mjs.map} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs → passkey-config-B3P0nHRR.mjs} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs.map → passkey-config-B3P0nHRR.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-BR4ZhVJl.d.mts} +7 -1
- package/dist/placeholder-BR4ZhVJl.d.mts.map +1 -0
- package/dist/plugin-types.d.mts +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-BVRganJQ.mjs} +2 -2
- package/dist/{policy-TluUIxuu.mjs.map → policy-BVRganJQ.mjs.map} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs → portable-text-C8Tvp4_g.mjs} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs.map → portable-text-C8Tvp4_g.mjs.map} +1 -1
- package/dist/{preview-PW-nOnq4.mjs → preview-dn2dUyM0.mjs} +2 -2
- package/dist/{preview-PW-nOnq4.mjs.map → preview-dn2dUyM0.mjs.map} +1 -1
- package/dist/{protocol-DjsJHTlK.d.mts → protocol-CuBEsqgE.d.mts} +2 -2
- package/dist/{protocol-DjsJHTlK.d.mts.map → protocol-CuBEsqgE.d.mts.map} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs → public-url-DRz_AinV.mjs} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs.map → public-url-DRz_AinV.mjs.map} +1 -1
- package/dist/{query-zTVAR1Sl.mjs → query-D18vTdha.mjs} +14 -14
- package/dist/{query-zTVAR1Sl.mjs.map → query-D18vTdha.mjs.map} +1 -1
- package/dist/{query-BWs7O5Il.mjs → query-tZDEdtCN.mjs} +4 -4
- package/dist/{query-BWs7O5Il.mjs.map → query-tZDEdtCN.mjs.map} +1 -1
- package/dist/{rate-limit-Bx4g9m3p.mjs → rate-limit-on7KPo-v.mjs} +2 -2
- package/dist/{rate-limit-Bx4g9m3p.mjs.map → rate-limit-on7KPo-v.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-DrbEmU9a.mjs} +1 -1
- package/dist/{redirect-BgAOGHDq.mjs.map → redirect-DrbEmU9a.mjs.map} +1 -1
- package/dist/{redirects-DyChwDkG.mjs → redirects-BahWiu8Z.mjs} +5 -5
- package/dist/{redirects-DyChwDkG.mjs.map → redirects-BahWiu8Z.mjs.map} +1 -1
- package/dist/{redirects-DTDHWH31.mjs → redirects-CRIM55KH.mjs} +6 -6
- package/dist/{redirects-DTDHWH31.mjs.map → redirects-CRIM55KH.mjs.map} +1 -1
- package/dist/{api-BeBglVxU.mjs → registry-BiO5WwPq.mjs} +483 -2462
- package/dist/registry-BiO5WwPq.mjs.map +1 -0
- package/dist/{registry-Cqa2I749.mjs → registry-Cx-jEJOS.mjs} +9 -123
- package/dist/registry-Cx-jEJOS.mjs.map +1 -0
- package/dist/{relation-BnHB0T4J.mjs → relation-A6wLF_DS.mjs} +2 -2
- package/dist/{relation-BnHB0T4J.mjs.map → relation-A6wLF_DS.mjs.map} +1 -1
- package/dist/{relations-BBApI4e2.mjs → relations-BTPM2saV.mjs} +2 -2
- package/dist/{relations-BBApI4e2.mjs.map → relations-BTPM2saV.mjs.map} +1 -1
- package/dist/{relations-BHo5A8Zf.d.mts → relations-C7B46bcU.d.mts} +192 -33
- package/dist/relations-C7B46bcU.d.mts.map +1 -0
- package/dist/{relations-D5sM5fW0.mjs → relations-Cj5hZ6Zg.mjs} +4 -4
- package/dist/{relations-D5sM5fW0.mjs.map → relations-Cj5hZ6Zg.mjs.map} +1 -1
- 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-DRp5ENd_.mjs} +2 -2
- package/dist/{request-meta-DgZJh3zG.mjs.map → request-meta-DRp5ENd_.mjs.map} +1 -1
- package/dist/{resolve-DOhVEvty.mjs → resolve-DxUpTMmE.mjs} +1 -1
- package/dist/{resolve-DOhVEvty.mjs.map → resolve-DxUpTMmE.mjs.map} +1 -1
- package/dist/{runner-C1T11CfC.mjs → runner-77GOZCnH.mjs} +410 -286
- package/dist/runner-77GOZCnH.mjs.map +1 -0
- package/dist/{runner-BYHZn3Jy.d.mts → runner-zgqA_CqP.d.mts} +2 -2
- package/dist/{runner-BYHZn3Jy.d.mts.map → runner-zgqA_CqP.d.mts.map} +1 -1
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +1 -1
- package/dist/{schema-DZ5YVVZj.mjs → schema-BY-oVntF.mjs} +3 -3
- package/dist/{schema-DZ5YVVZj.mjs.map → schema-BY-oVntF.mjs.map} +1 -1
- package/dist/{schema-2AOsSn2v.mjs → schema-Cw9kVK0I.mjs} +35 -5
- package/dist/{schema-2AOsSn2v.mjs.map → schema-Cw9kVK0I.mjs.map} +1 -1
- package/dist/{scopes-8ClPF2bC.mjs → scopes-vMR1uIbt.mjs} +3 -3
- package/dist/{scopes-8ClPF2bC.mjs.map → scopes-vMR1uIbt.mjs.map} +1 -1
- package/dist/{search-u1QYdOCG.mjs → search-CfT3KxO5.mjs} +4 -4
- package/dist/{search-u1QYdOCG.mjs.map → search-CfT3KxO5.mjs.map} +1 -1
- package/dist/{secrets-BEgsAQEU.mjs → secrets-BH2Qow1-.mjs} +3 -3
- package/dist/{secrets-BEgsAQEU.mjs.map → secrets-BH2Qow1-.mjs.map} +1 -1
- package/dist/{sections-DmHviGyM.mjs → sections-DTfjyf1z.mjs} +2 -2
- package/dist/{sections-DmHviGyM.mjs.map → sections-DTfjyf1z.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +24 -22
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +16 -14
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-AFpVvTqr.mjs → seo-BSiTIXzd.mjs} +1 -1
- package/dist/{seo-AFpVvTqr.mjs.map → seo-BSiTIXzd.mjs.map} +1 -1
- package/dist/{seo-Dq4G-RrO.mjs → seo-Cm-dtvgk.mjs} +2 -2
- package/dist/{seo-Dq4G-RrO.mjs.map → seo-Cm-dtvgk.mjs.map} +1 -1
- package/dist/{service-BpArayPr.mjs → service-DYsDHEKe.mjs} +3 -3
- package/dist/{service-BpArayPr.mjs.map → service-DYsDHEKe.mjs.map} +1 -1
- package/dist/{session-user-BEorKVT-.mjs → session-user-CNAfvsdw.mjs} +1 -1
- package/dist/{session-user-BEorKVT-.mjs.map → session-user-CNAfvsdw.mjs.map} +1 -1
- package/dist/{settings-xRdoUZr0.mjs → settings-BgN-0DT-.mjs} +6 -6
- package/dist/{settings-xRdoUZr0.mjs.map → settings-BgN-0DT-.mjs.map} +1 -1
- package/dist/{settings-DE9xtzqd.mjs → settings-DjtkUo__.mjs} +3 -3
- package/dist/{settings-DE9xtzqd.mjs.map → settings-DjtkUo__.mjs.map} +1 -1
- package/dist/{setup-complete-BnT8pq_C.mjs → setup-complete-CcpXaPU7.mjs} +2 -2
- package/dist/{setup-complete-BnT8pq_C.mjs.map → setup-complete-CcpXaPU7.mjs.map} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs → setup-nonce-Reyw30jg.mjs} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs.map → setup-nonce-Reyw30jg.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-Cs_V9n3V.mjs} +3 -3
- package/dist/{site-url-DjpIXMXJ.mjs.map → site-url-Cs_V9n3V.mjs.map} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs → snapshot-DSB8P7Lm.mjs} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs.map → snapshot-DSB8P7Lm.mjs.map} +1 -1
- package/dist/{ssrf-Cpvg_n3A.mjs → ssrf-DqebVE34.mjs} +21 -5
- package/dist/{ssrf-Cpvg_n3A.mjs.map → ssrf-DqebVE34.mjs.map} +1 -1
- package/dist/{state-DYwPue40.mjs → state-BJfU9Uzw.mjs} +12 -4
- package/dist/state-BJfU9Uzw.mjs.map +1 -0
- package/dist/{status-CWVYpbD8.mjs → status-DDu8HIQl.mjs} +1 -1
- package/dist/{status-CWVYpbD8.mjs.map → status-DDu8HIQl.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/{target-DixqqV5i.mjs → target-D0o26Azo.mjs} +1 -1
- package/dist/{target-DixqqV5i.mjs.map → target-D0o26Azo.mjs.map} +1 -1
- package/dist/{taxonomies-OHUIiIpI.mjs → taxonomies-CPGxo-bn.mjs} +5 -5
- package/dist/{taxonomies-OHUIiIpI.mjs.map → taxonomies-CPGxo-bn.mjs.map} +1 -1
- package/dist/{taxonomies-BlrncHi9.mjs → taxonomies-kmyudNGP.mjs} +7 -7
- package/dist/{taxonomies-BlrncHi9.mjs.map → taxonomies-kmyudNGP.mjs.map} +1 -1
- package/dist/{taxonomy-BqCZ1TdU.mjs → taxonomy-8X09dLN5.mjs} +4 -4
- package/dist/{taxonomy-BqCZ1TdU.mjs.map → taxonomy-8X09dLN5.mjs.map} +1 -1
- package/dist/{tokens-C39klX8R.mjs → tokens-gTS-IVUp.mjs} +1 -1
- package/dist/{tokens-C39klX8R.mjs.map → tokens-gTS-IVUp.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-RQE36APG.d.mts → transport-_6R1ub7t.d.mts} +1 -1
- package/dist/{transport-RQE36APG.d.mts.map → transport-_6R1ub7t.d.mts.map} +1 -1
- package/dist/{transport-DBJwa-Si.mjs → transport-fX59xaJz.mjs} +4 -3
- package/dist/{transport-DBJwa-Si.mjs.map → transport-fX59xaJz.mjs.map} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs → trusted-proxy-fe6nEgR4.mjs} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs.map → trusted-proxy-fe6nEgR4.mjs.map} +1 -1
- package/dist/types-75KIqzL9.mjs.map +1 -1
- package/dist/{types-BW1syrlw.mjs → types-BXUmsINL.mjs} +1 -1
- package/dist/{types-BW1syrlw.mjs.map → types-BXUmsINL.mjs.map} +1 -1
- package/dist/{types-BntycPTF.d.mts → types-Blb-MRC3.d.mts} +1 -1
- package/dist/{types-BntycPTF.d.mts.map → types-Blb-MRC3.d.mts.map} +1 -1
- package/dist/{types-C2pMvO62.d.mts → types-Br-ERaxh.d.mts} +2 -1
- package/dist/types-Br-ERaxh.d.mts.map +1 -0
- package/dist/{types-DWRhk9xZ.d.mts → types-BzBd3PeX.d.mts} +1 -1
- package/dist/{types-DWRhk9xZ.d.mts.map → types-BzBd3PeX.d.mts.map} +1 -1
- package/dist/{types-CXnOzDe1.d.mts → types-CLqvnd05.d.mts} +1 -1
- package/dist/{types-CXnOzDe1.d.mts.map → types-CLqvnd05.d.mts.map} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts → types-D5VVLr7J.d.mts} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts.map → types-D5VVLr7J.d.mts.map} +1 -1
- package/dist/{types-DQIDRKF2.d.mts → types-DHxzBjbD.d.mts} +10 -1
- package/dist/types-DHxzBjbD.d.mts.map +1 -0
- package/dist/{types-DN64_zzZ.d.mts → types-DJQxln7q.d.mts} +3 -3
- package/dist/{types-DN64_zzZ.d.mts.map → types-DJQxln7q.d.mts.map} +1 -1
- 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-BcqdcT-r.d.mts → types-D_DWe7k9.d.mts} +1 -1
- package/dist/{types-BcqdcT-r.d.mts.map → types-D_DWe7k9.d.mts.map} +1 -1
- package/dist/{types-DrJrVCT1.d.mts → types-Vg6f5i3s.d.mts} +3 -3
- package/dist/{types-DrJrVCT1.d.mts.map → types-Vg6f5i3s.d.mts.map} +1 -1
- package/dist/{upload-attempts-D4FS8LT6.mjs → upload-attempts-CNyGSepg.mjs} +1 -1
- package/dist/{upload-attempts-D4FS8LT6.mjs.map → upload-attempts-CNyGSepg.mjs.map} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs → url-pattern-K-KdXcSe.mjs} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs.map → url-pattern-K-KdXcSe.mjs.map} +1 -1
- package/dist/{user-DJZfUJVE.mjs → user-CtYY0tp2.mjs} +2 -2
- package/dist/{user-DJZfUJVE.mjs.map → user-CtYY0tp2.mjs.map} +1 -1
- package/dist/{utils-D4vD_Y98.mjs → utils-HztC73hq.mjs} +1 -1
- package/dist/{utils-D4vD_Y98.mjs.map → utils-HztC73hq.mjs.map} +1 -1
- package/dist/{validate-BMLBvxOC.mjs → validate-Dd-IUjnZ.mjs} +2 -2
- package/dist/{validate-BMLBvxOC.mjs.map → validate-Dd-IUjnZ.mjs.map} +1 -1
- package/dist/{validate-CTqt5nuE.d.mts → validate-DlqdOZXB.d.mts} +5 -5
- package/dist/{validate-CTqt5nuE.d.mts.map → validate-DlqdOZXB.d.mts.map} +1 -1
- package/dist/{validation-npvENUCB.mjs → validation-D83n7Npi.mjs} +10 -8
- package/dist/{validation-npvENUCB.mjs.map → validation-D83n7Npi.mjs.map} +1 -1
- package/dist/version-ri-sCyAp.mjs +7 -0
- package/dist/{version-DB_fqCSI.mjs.map → version-ri-sCyAp.mjs.map} +1 -1
- package/dist/{widgets-BD3ho7Rq.mjs → widgets-CpmZd9Q-.mjs} +4 -4
- package/dist/{widgets-BD3ho7Rq.mjs.map → widgets-CpmZd9Q-.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-Ca68766D.d.mts → wxr-taxonomies-BFd0y72_.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Ca68766D.d.mts.map → wxr-taxonomies-BFd0y72_.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs → wxr-taxonomies-Df4vxWcU.mjs} +4 -4
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs.map → wxr-taxonomies-Df4vxWcU.mjs.map} +1 -1
- package/dist/{zod-generator-LC-on_Vb.mjs → zod-generator-DylzusHh.mjs} +24 -18
- package/dist/zod-generator-DylzusHh.mjs.map +1 -0
- package/package.json +16 -8
- package/src/api/errors.ts +20 -0
- package/src/api/handlers/index.ts +17 -0
- 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 +62 -2
- package/src/api/handlers/registry.ts +134 -316
- package/src/api/openapi/document.ts +192 -2
- package/src/api/schemas/media-usage.ts +77 -0
- package/src/api/schemas/media.ts +69 -0
- package/src/astro/integration/routes.ts +18 -0
- package/src/astro/integration/vite-config.ts +2 -7
- package/src/astro/middleware/auth.ts +4 -0
- package/src/astro/middleware.ts +0 -7
- 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/plugins/registry/artifact.ts +246 -96
- package/src/astro/routes/api/auth/me.ts +14 -2
- package/src/astro/routes/api/media/[id].ts +3 -0
- 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.ts +12 -2
- package/src/astro/routes/api/setup/dev-bypass.ts +12 -0
- package/src/astro/types.ts +11 -1
- package/src/client/index.ts +140 -2
- package/src/client/transport.ts +6 -2
- package/src/components/EmDashImage.astro +154 -50
- package/src/components/Gallery.astro +7 -0
- package/src/components/InlinePortableTextEditor.tsx +130 -1
- package/src/components/LiveSearch.astro +23 -0
- package/src/components/inline-code-block.tsx +180 -49
- package/src/content/converters/gallery.ts +2 -0
- package/src/content/converters/types.ts +2 -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/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/runner.ts +8 -2
- package/src/database/repositories/content.ts +5 -4
- 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 +1038 -10
- package/src/database/repositories/media.ts +97 -29
- package/src/database/transaction.ts +1 -0
- package/src/database/types.ts +13 -0
- package/src/db/adapters.ts +2 -2
- package/src/db/node-sqlite-compat.ts +78 -0
- package/src/db/sqlite.ts +3 -3
- package/src/emdash-runtime.ts +110 -105
- package/src/fields/image.ts +7 -1
- package/src/fields/types.ts +6 -2
- package/src/index.ts +5 -0
- package/src/media/focal-point.ts +37 -0
- package/src/media/local-runtime.ts +8 -0
- package/src/media/mime.ts +1 -0
- package/src/media/normalize.ts +10 -0
- 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/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/plugins/index.ts +1 -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/registry/artifact-fetch.ts +530 -0
- package/src/registry/config.ts +24 -6
- package/src/registry/types.ts +12 -15
- package/src/schema/types.ts +1 -0
- package/src/schema/zod-generator.ts +12 -4
- package/src/security/ssrf.ts +21 -2
- package/src/seed/apply.ts +4 -4
- package/src/ui.ts +2 -0
- package/dist/api-BeBglVxU.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/errors-CLUPm7aD.mjs.map +0 -1
- package/dist/index-BVBZj4-7.d.mts.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/placeholder-Dp0K3RkD.d.mts.map +0 -1
- package/dist/registry-Cqa2I749.mjs.map +0 -1
- package/dist/relations-BHo5A8Zf.d.mts.map +0 -1
- package/dist/runner-C1T11CfC.mjs.map +0 -1
- package/dist/state-DYwPue40.mjs.map +0 -1
- package/dist/types-C2pMvO62.d.mts.map +0 -1
- package/dist/types-DQIDRKF2.d.mts.map +0 -1
- package/dist/version-DB_fqCSI.mjs +0 -7
- package/dist/zod-generator-LC-on_Vb.mjs.map +0 -1
- /package/dist/{api-tokens-rIXC6LdE.mjs → api-tokens-B5NHLNUN.mjs} +0 -0
- /package/dist/{ssrf-DpXgKsna.mjs → ssrf-BPKzkm6O.mjs} +0 -0
- /package/dist/{types-CP1CflWf.mjs → types-D6OcIp2P.mjs} +0 -0
|
@@ -40,10 +40,16 @@ import {
|
|
|
40
40
|
import {
|
|
41
41
|
mediaUsageDetailsQuery,
|
|
42
42
|
mediaUsageDetailsResponseSchema,
|
|
43
|
+
mediaUsageProgressSchema,
|
|
44
|
+
mediaUsageProgressAdvanceResponseSchema,
|
|
43
45
|
mediaUsageCollectionDeletionListQuery,
|
|
44
46
|
mediaUsageCollectionDeletionListResponseSchema,
|
|
45
47
|
mediaUsageCollectionDeletionRetryBody,
|
|
46
48
|
mediaUsageCollectionDeletionRetryResponseSchema,
|
|
49
|
+
mediaUsageActivationStatusSchema,
|
|
50
|
+
mediaUsageActivationAdvanceBody,
|
|
51
|
+
mediaUsageActivationAdvanceResponseSchema,
|
|
52
|
+
mediaUsageActivationConflictSchema,
|
|
47
53
|
mediaUsageRepairBody,
|
|
48
54
|
mediaUsageRepairResponseSchema,
|
|
49
55
|
mediaUsageWorkListQuery,
|
|
@@ -57,6 +63,11 @@ import {
|
|
|
57
63
|
mediaConfirmBody,
|
|
58
64
|
mediaConfirmResponseSchema,
|
|
59
65
|
mediaExistingResponseSchema,
|
|
66
|
+
mediaFolderBody,
|
|
67
|
+
mediaFolderIdSchema,
|
|
68
|
+
mediaFolderListQuery,
|
|
69
|
+
mediaFolderListResponseSchema,
|
|
70
|
+
mediaFolderResponseSchema,
|
|
60
71
|
mediaGetQuery,
|
|
61
72
|
mediaListQuery,
|
|
62
73
|
mediaListReadResponseSchema,
|
|
@@ -178,6 +189,7 @@ function standardErrors(
|
|
|
178
189
|
404: "Not Found",
|
|
179
190
|
409: "Conflict",
|
|
180
191
|
413: "Payload Too Large",
|
|
192
|
+
422: "Unprocessable Entity",
|
|
181
193
|
500: "Internal Server Error",
|
|
182
194
|
};
|
|
183
195
|
for (const code of codes) {
|
|
@@ -244,7 +256,7 @@ const contentPaths = {
|
|
|
244
256
|
},
|
|
245
257
|
},
|
|
246
258
|
...authErrors,
|
|
247
|
-
...standardErrors(400, 500),
|
|
259
|
+
...standardErrors(400, 422, 500),
|
|
248
260
|
},
|
|
249
261
|
},
|
|
250
262
|
},
|
|
@@ -302,7 +314,7 @@ const contentPaths = {
|
|
|
302
314
|
},
|
|
303
315
|
},
|
|
304
316
|
...authErrors,
|
|
305
|
-
...standardErrors(400, 404, 409, 500),
|
|
317
|
+
...standardErrors(400, 404, 409, 422, 500),
|
|
306
318
|
},
|
|
307
319
|
},
|
|
308
320
|
delete: {
|
|
@@ -702,6 +714,98 @@ function buildMediaPaths(maxUploadSize: number) {
|
|
|
702
714
|
},
|
|
703
715
|
},
|
|
704
716
|
},
|
|
717
|
+
"/_emdash/api/media/folders": {
|
|
718
|
+
get: {
|
|
719
|
+
operationId: "listMediaFolders",
|
|
720
|
+
summary: "List media folders",
|
|
721
|
+
tags: ["Media"],
|
|
722
|
+
requestParams: { query: mediaFolderListQuery },
|
|
723
|
+
responses: {
|
|
724
|
+
"200": {
|
|
725
|
+
description: "Media folder list",
|
|
726
|
+
content: {
|
|
727
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaFolderListResponseSchema) },
|
|
728
|
+
},
|
|
729
|
+
},
|
|
730
|
+
...authErrors,
|
|
731
|
+
...standardErrors(400, 500),
|
|
732
|
+
},
|
|
733
|
+
},
|
|
734
|
+
post: {
|
|
735
|
+
operationId: "createMediaFolder",
|
|
736
|
+
summary: "Create a media folder",
|
|
737
|
+
tags: ["Media"],
|
|
738
|
+
requestBody: { content: { [JSON_CONTENT]: { schema: mediaFolderBody } } },
|
|
739
|
+
responses: {
|
|
740
|
+
"201": {
|
|
741
|
+
description: "Created media folder",
|
|
742
|
+
content: {
|
|
743
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaFolderResponseSchema) },
|
|
744
|
+
},
|
|
745
|
+
},
|
|
746
|
+
...authErrors,
|
|
747
|
+
...standardErrors(400, 409, 500),
|
|
748
|
+
},
|
|
749
|
+
},
|
|
750
|
+
},
|
|
751
|
+
"/_emdash/api/media/folders/{id}": {
|
|
752
|
+
get: {
|
|
753
|
+
operationId: "getMediaFolder",
|
|
754
|
+
summary: "Get a media folder",
|
|
755
|
+
tags: ["Media"],
|
|
756
|
+
requestParams: {
|
|
757
|
+
path: z.object({ id: mediaFolderIdSchema.meta({ description: "Media folder ID" }) }),
|
|
758
|
+
},
|
|
759
|
+
responses: {
|
|
760
|
+
"200": {
|
|
761
|
+
description: "Media folder",
|
|
762
|
+
content: {
|
|
763
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaFolderResponseSchema) },
|
|
764
|
+
},
|
|
765
|
+
},
|
|
766
|
+
...authErrors,
|
|
767
|
+
...standardErrors(400, 404, 500),
|
|
768
|
+
},
|
|
769
|
+
},
|
|
770
|
+
put: {
|
|
771
|
+
operationId: "updateMediaFolder",
|
|
772
|
+
summary: "Update a media folder",
|
|
773
|
+
tags: ["Media"],
|
|
774
|
+
requestParams: {
|
|
775
|
+
path: z.object({ id: mediaFolderIdSchema.meta({ description: "Media folder ID" }) }),
|
|
776
|
+
},
|
|
777
|
+
requestBody: { content: { [JSON_CONTENT]: { schema: mediaFolderBody } } },
|
|
778
|
+
responses: {
|
|
779
|
+
"200": {
|
|
780
|
+
description: "Updated media folder",
|
|
781
|
+
content: {
|
|
782
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaFolderResponseSchema) },
|
|
783
|
+
},
|
|
784
|
+
},
|
|
785
|
+
...authErrors,
|
|
786
|
+
...standardErrors(400, 404, 409, 500),
|
|
787
|
+
},
|
|
788
|
+
},
|
|
789
|
+
delete: {
|
|
790
|
+
operationId: "deleteMediaFolder",
|
|
791
|
+
summary: "Delete a media folder",
|
|
792
|
+
description: "Deletes the folder and returns its media to the Main library.",
|
|
793
|
+
tags: ["Media"],
|
|
794
|
+
requestParams: {
|
|
795
|
+
path: z.object({ id: mediaFolderIdSchema.meta({ description: "Media folder ID" }) }),
|
|
796
|
+
},
|
|
797
|
+
responses: {
|
|
798
|
+
"200": {
|
|
799
|
+
description: "Deleted media folder",
|
|
800
|
+
content: {
|
|
801
|
+
[JSON_CONTENT]: { schema: successEnvelope(deleteResponseSchema) },
|
|
802
|
+
},
|
|
803
|
+
},
|
|
804
|
+
...authErrors,
|
|
805
|
+
...standardErrors(400, 404, 500),
|
|
806
|
+
},
|
|
807
|
+
},
|
|
808
|
+
},
|
|
705
809
|
"/_emdash/api/media/{id}": {
|
|
706
810
|
get: {
|
|
707
811
|
operationId: "getMedia",
|
|
@@ -802,6 +906,46 @@ function buildMediaPaths(maxUploadSize: number) {
|
|
|
802
906
|
},
|
|
803
907
|
},
|
|
804
908
|
},
|
|
909
|
+
"/_emdash/api/admin/media-usage/progress": {
|
|
910
|
+
get: {
|
|
911
|
+
operationId: "getMediaUsageProgress",
|
|
912
|
+
summary: "Get media usage indexing progress",
|
|
913
|
+
description:
|
|
914
|
+
"Returns aggregate indexing readiness for current content collections after controlled activation is active. Requires `schema:manage`; bearer tokens also require the `admin` scope.",
|
|
915
|
+
tags: ["Media"],
|
|
916
|
+
responses: {
|
|
917
|
+
"200": {
|
|
918
|
+
description: "Aggregate media usage indexing progress",
|
|
919
|
+
content: {
|
|
920
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaUsageProgressSchema) },
|
|
921
|
+
},
|
|
922
|
+
},
|
|
923
|
+
...authErrors,
|
|
924
|
+
...standardErrors(409),
|
|
925
|
+
...standardErrors(500),
|
|
926
|
+
},
|
|
927
|
+
},
|
|
928
|
+
post: {
|
|
929
|
+
operationId: "advanceMediaUsageProgress",
|
|
930
|
+
summary: "Advance media usage indexing",
|
|
931
|
+
description:
|
|
932
|
+
"Runs one bounded Media Usage maintenance step and returns the stored activation and indexing state. Requires `schema:manage`; bearer tokens also require the `admin` scope.",
|
|
933
|
+
tags: ["Media"],
|
|
934
|
+
responses: {
|
|
935
|
+
"200": {
|
|
936
|
+
description: "Media Usage progress after one maintenance step",
|
|
937
|
+
content: {
|
|
938
|
+
[JSON_CONTENT]: {
|
|
939
|
+
schema: successEnvelope(mediaUsageProgressAdvanceResponseSchema),
|
|
940
|
+
},
|
|
941
|
+
},
|
|
942
|
+
},
|
|
943
|
+
...authErrors,
|
|
944
|
+
...standardErrors(409),
|
|
945
|
+
...standardErrors(500),
|
|
946
|
+
},
|
|
947
|
+
},
|
|
948
|
+
},
|
|
805
949
|
"/_emdash/api/admin/media-usage/work": {
|
|
806
950
|
get: {
|
|
807
951
|
operationId: "listMediaUsageWork",
|
|
@@ -822,6 +966,52 @@ function buildMediaPaths(maxUploadSize: number) {
|
|
|
822
966
|
},
|
|
823
967
|
},
|
|
824
968
|
},
|
|
969
|
+
"/_emdash/api/admin/media-usage/activation": {
|
|
970
|
+
get: {
|
|
971
|
+
operationId: "getMediaUsageActivation",
|
|
972
|
+
summary: "Get media usage activation status",
|
|
973
|
+
description:
|
|
974
|
+
"Returns the redacted status of controlled Media Usage capture activation. This operation is read-only and does not start or resume activation. Requires `schema:manage`; bearer tokens also require the `admin` scope.",
|
|
975
|
+
tags: ["Media"],
|
|
976
|
+
responses: {
|
|
977
|
+
"200": {
|
|
978
|
+
description: "Media usage activation status",
|
|
979
|
+
content: {
|
|
980
|
+
[JSON_CONTENT]: { schema: successEnvelope(mediaUsageActivationStatusSchema) },
|
|
981
|
+
},
|
|
982
|
+
},
|
|
983
|
+
...authErrors,
|
|
984
|
+
...standardErrors(409, 500),
|
|
985
|
+
},
|
|
986
|
+
},
|
|
987
|
+
post: {
|
|
988
|
+
operationId: "advanceMediaUsageActivation",
|
|
989
|
+
summary: "Advance media usage activation",
|
|
990
|
+
description:
|
|
991
|
+
"Starts, resumes, or retries exactly one bounded activation batch after the operator confirms that all writers are drained. Continue setup through the Media Usage progress endpoint. Requires `schema:manage`; bearer tokens also require the `admin` scope.",
|
|
992
|
+
tags: ["Media"],
|
|
993
|
+
requestBody: {
|
|
994
|
+
required: true,
|
|
995
|
+
content: { [JSON_CONTENT]: { schema: mediaUsageActivationAdvanceBody } },
|
|
996
|
+
},
|
|
997
|
+
responses: {
|
|
998
|
+
"200": {
|
|
999
|
+
description: "Current media usage activation progress",
|
|
1000
|
+
content: {
|
|
1001
|
+
[JSON_CONTENT]: {
|
|
1002
|
+
schema: successEnvelope(mediaUsageActivationAdvanceResponseSchema),
|
|
1003
|
+
},
|
|
1004
|
+
},
|
|
1005
|
+
},
|
|
1006
|
+
...authErrors,
|
|
1007
|
+
...standardErrors(400, 500),
|
|
1008
|
+
"409": {
|
|
1009
|
+
description: "Activation is busy, changed ownership, or is incompatible",
|
|
1010
|
+
content: { [JSON_CONTENT]: { schema: mediaUsageActivationConflictSchema } },
|
|
1011
|
+
},
|
|
1012
|
+
},
|
|
1013
|
+
},
|
|
1014
|
+
},
|
|
825
1015
|
"/_emdash/api/admin/media-usage/work/retry": {
|
|
826
1016
|
post: {
|
|
827
1017
|
operationId: "retryMediaUsageWork",
|
|
@@ -13,6 +13,14 @@ export const mediaUsageCoverageSchema = z
|
|
|
13
13
|
})
|
|
14
14
|
.meta({ id: "MediaUsageCoverage" });
|
|
15
15
|
|
|
16
|
+
export const mediaUsageProgressSchema = z
|
|
17
|
+
.object({
|
|
18
|
+
status: z.enum(["indexing", "ready", "needs_attention"]),
|
|
19
|
+
readyCollections: z.number().int().min(0),
|
|
20
|
+
totalCollections: z.number().int().min(0),
|
|
21
|
+
})
|
|
22
|
+
.meta({ id: "MediaUsageProgress" });
|
|
23
|
+
|
|
16
24
|
export const mediaUsageSummarySchema = z
|
|
17
25
|
.object({
|
|
18
26
|
count: z.number().int().min(0).nullable(),
|
|
@@ -182,6 +190,66 @@ export const mediaUsageWorkRetryConflictSchema = z.object({
|
|
|
182
190
|
]),
|
|
183
191
|
});
|
|
184
192
|
|
|
193
|
+
export const mediaUsageActivationStateSchema = z
|
|
194
|
+
.enum(["expanded", "activating", "active"])
|
|
195
|
+
.meta({ id: "MediaUsageActivationState" });
|
|
196
|
+
|
|
197
|
+
export const mediaUsageActivationStatusSchema = z
|
|
198
|
+
.object({
|
|
199
|
+
state: mediaUsageActivationStateSchema,
|
|
200
|
+
collectionCursor: z.string().nullable(),
|
|
201
|
+
attemptCount: z.number().int().min(0),
|
|
202
|
+
drainConfirmedAt: z.string().nullable(),
|
|
203
|
+
lastAttemptedAt: z.string().nullable(),
|
|
204
|
+
lastErrorCode: z.literal("MEDIA_USAGE_ACTIVATION_FAILED").nullable(),
|
|
205
|
+
leaseExpiresAt: z.string().nullable(),
|
|
206
|
+
activatedAt: z.string().nullable(),
|
|
207
|
+
updatedAt: z.string(),
|
|
208
|
+
})
|
|
209
|
+
.meta({ id: "MediaUsageActivationStatus" });
|
|
210
|
+
|
|
211
|
+
export const mediaUsageActivationAdvanceBody = z
|
|
212
|
+
.object({
|
|
213
|
+
writersDrained: z.literal(true),
|
|
214
|
+
})
|
|
215
|
+
.strict()
|
|
216
|
+
.meta({ id: "MediaUsageActivationAdvanceBody" });
|
|
217
|
+
|
|
218
|
+
export const mediaUsageActivationAdvanceResponseSchema = z
|
|
219
|
+
.object({
|
|
220
|
+
outcome: z.enum(["activating", "active"]),
|
|
221
|
+
processedCollections: z.number().int().min(0).max(1),
|
|
222
|
+
activation: mediaUsageActivationStatusSchema,
|
|
223
|
+
})
|
|
224
|
+
.meta({ id: "MediaUsageActivationAdvanceResponse" });
|
|
225
|
+
|
|
226
|
+
export const mediaUsageProgressAdvanceResponseSchema = z
|
|
227
|
+
.object({
|
|
228
|
+
activation: mediaUsageActivationStatusSchema,
|
|
229
|
+
progress: mediaUsageProgressSchema.nullable(),
|
|
230
|
+
nextRequestInMs: z.union([z.literal(0), z.literal(30_000), z.null()]),
|
|
231
|
+
})
|
|
232
|
+
.meta({ id: "MediaUsageProgressAdvanceResponse" });
|
|
233
|
+
|
|
234
|
+
export const mediaUsageActivationConflictSchema = z.object({
|
|
235
|
+
success: z.literal(false),
|
|
236
|
+
error: z.discriminatedUnion("code", [
|
|
237
|
+
z.object({
|
|
238
|
+
code: z.literal("MEDIA_USAGE_ACTIVATION_BUSY"),
|
|
239
|
+
message: z.string(),
|
|
240
|
+
details: z.object({ leaseExpiresAt: z.string() }),
|
|
241
|
+
}),
|
|
242
|
+
z.object({
|
|
243
|
+
code: z.literal("MEDIA_USAGE_ACTIVATION_CONFLICT"),
|
|
244
|
+
message: z.string(),
|
|
245
|
+
}),
|
|
246
|
+
z.object({
|
|
247
|
+
code: z.literal("MEDIA_USAGE_ACTIVATION_VERSION_MISMATCH"),
|
|
248
|
+
message: z.string(),
|
|
249
|
+
}),
|
|
250
|
+
]),
|
|
251
|
+
});
|
|
252
|
+
|
|
185
253
|
export const mediaUsageCollectionDeletionStateSchema = z
|
|
186
254
|
.enum(["pending", "retry", "leased", "failed"])
|
|
187
255
|
.meta({ id: "MediaUsageCollectionDeletionState" });
|
|
@@ -227,11 +295,20 @@ export const mediaUsageCollectionDeletionRetryResponseSchema = z
|
|
|
227
295
|
|
|
228
296
|
export type MediaUsageRepairRequest = z.infer<typeof mediaUsageRepairBody>;
|
|
229
297
|
export type MediaUsageRepairResponse = z.infer<typeof mediaUsageRepairResponseSchema>;
|
|
298
|
+
export type MediaUsageProgress = z.infer<typeof mediaUsageProgressSchema>;
|
|
299
|
+
export type MediaUsageProgressAdvanceResponse = z.infer<
|
|
300
|
+
typeof mediaUsageProgressAdvanceResponseSchema
|
|
301
|
+
>;
|
|
230
302
|
export type MediaUsageWorkListQuery = z.infer<typeof mediaUsageWorkListQuery>;
|
|
231
303
|
export type MediaUsageWorkItem = z.infer<typeof mediaUsageWorkItemSchema>;
|
|
232
304
|
export type MediaUsageWorkListResponse = z.infer<typeof mediaUsageWorkListResponseSchema>;
|
|
233
305
|
export type MediaUsageWorkRetryRequest = z.infer<typeof mediaUsageWorkRetryBody>;
|
|
234
306
|
export type MediaUsageWorkRetryResponse = z.infer<typeof mediaUsageWorkRetryResponseSchema>;
|
|
307
|
+
export type MediaUsageActivationStatus = z.infer<typeof mediaUsageActivationStatusSchema>;
|
|
308
|
+
export type MediaUsageActivationAdvanceRequest = z.infer<typeof mediaUsageActivationAdvanceBody>;
|
|
309
|
+
export type MediaUsageActivationAdvanceResponse = z.infer<
|
|
310
|
+
typeof mediaUsageActivationAdvanceResponseSchema
|
|
311
|
+
>;
|
|
235
312
|
export type MediaUsageCollectionDeletionListQuery = z.infer<
|
|
236
313
|
typeof mediaUsageCollectionDeletionListQuery
|
|
237
314
|
>;
|
package/src/api/schemas/media.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
import { isValidFocalPointUpdate } from "#media/focal-point.js";
|
|
4
|
+
|
|
3
5
|
import { cursorPaginationQuery } from "./common.js";
|
|
4
6
|
import { mediaUsageSummarySchema } from "./media-usage.js";
|
|
5
7
|
|
|
@@ -21,13 +23,25 @@ const mimeTypeFilter = z
|
|
|
21
23
|
|
|
22
24
|
export const mediaListQuery = cursorPaginationQuery
|
|
23
25
|
.extend({
|
|
26
|
+
page: z.coerce.number().int().min(1).max(Number.MAX_SAFE_INTEGER).optional(),
|
|
24
27
|
mimeType: mimeTypeFilter,
|
|
28
|
+
folderId: z
|
|
29
|
+
.union([z.literal("unfiled"), z.string().min(1).max(64)])
|
|
30
|
+
.optional()
|
|
31
|
+
.meta({
|
|
32
|
+
description:
|
|
33
|
+
"Filter by a media folder ID. Use `unfiled` for the Main library; omit for all media.",
|
|
34
|
+
}),
|
|
25
35
|
/** Case-insensitive filename substring search (also matches extensions). */
|
|
26
36
|
q: z.string().trim().min(1).max(200).optional(),
|
|
27
37
|
includeUsage: z.literal("1").optional().meta({
|
|
28
38
|
description: "Include a coverage-aware usage summary on each media item",
|
|
29
39
|
}),
|
|
30
40
|
})
|
|
41
|
+
.refine(({ cursor, page }) => cursor === undefined || page === undefined, {
|
|
42
|
+
message: "cursor and page cannot be used together",
|
|
43
|
+
path: ["page"],
|
|
44
|
+
})
|
|
31
45
|
.meta({ id: "MediaListQuery" });
|
|
32
46
|
|
|
33
47
|
export const mediaGetQuery = z
|
|
@@ -44,9 +58,47 @@ export const mediaUpdateBody = z
|
|
|
44
58
|
caption: z.string().optional(),
|
|
45
59
|
width: z.number().int().positive().optional(),
|
|
46
60
|
height: z.number().int().positive().optional(),
|
|
61
|
+
folderId: z
|
|
62
|
+
.union([z.literal("unfiled"), z.string().min(1).max(64)])
|
|
63
|
+
.nullable()
|
|
64
|
+
.optional()
|
|
65
|
+
.transform((value) => (value === "unfiled" ? null : value))
|
|
66
|
+
.meta({
|
|
67
|
+
description:
|
|
68
|
+
"Assign a media folder ID, or use null or `unfiled` to return the item to the Main library.",
|
|
69
|
+
}),
|
|
70
|
+
focalX: z.number().min(0).max(1).nullable().optional(),
|
|
71
|
+
focalY: z.number().min(0).max(1).nullable().optional(),
|
|
72
|
+
})
|
|
73
|
+
.superRefine((value, context) => {
|
|
74
|
+
if (!isValidFocalPointUpdate(value)) {
|
|
75
|
+
context.addIssue({
|
|
76
|
+
code: "custom",
|
|
77
|
+
message: "focalX and focalY must both be numbers or both be null",
|
|
78
|
+
path: ["focalX"],
|
|
79
|
+
});
|
|
80
|
+
}
|
|
47
81
|
})
|
|
48
82
|
.meta({ id: "MediaUpdateBody" });
|
|
49
83
|
|
|
84
|
+
export const mediaFolderIdSchema = z.string().min(1).max(64);
|
|
85
|
+
|
|
86
|
+
export const mediaFolderListQuery = cursorPaginationQuery
|
|
87
|
+
.extend({ q: z.string().trim().min(1).max(200).optional() })
|
|
88
|
+
.meta({ id: "MediaFolderListQuery" });
|
|
89
|
+
|
|
90
|
+
const mediaFolderNameSchema = z.string().refine(
|
|
91
|
+
(value) => {
|
|
92
|
+
const length = value.trim().length;
|
|
93
|
+
return length >= 1 && length <= 200;
|
|
94
|
+
},
|
|
95
|
+
{ message: "Folder name must be between 1 and 200 characters" },
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
export const mediaFolderBody = z
|
|
99
|
+
.object({ name: mediaFolderNameSchema })
|
|
100
|
+
.meta({ id: "MediaFolderBody" });
|
|
101
|
+
|
|
50
102
|
/** Default maximum allowed file upload size (50 MB). */
|
|
51
103
|
export const DEFAULT_MAX_UPLOAD_SIZE = 50 * 1024 * 1024;
|
|
52
104
|
|
|
@@ -111,6 +163,8 @@ export const mediaItemSchema = z
|
|
|
111
163
|
size: z.number().nullable(),
|
|
112
164
|
width: z.number().nullable(),
|
|
113
165
|
height: z.number().nullable(),
|
|
166
|
+
focalX: z.number().nullable(),
|
|
167
|
+
focalY: z.number().nullable(),
|
|
114
168
|
alt: z.string().nullable(),
|
|
115
169
|
caption: z.string().nullable(),
|
|
116
170
|
storageKey: z.string(),
|
|
@@ -120,9 +174,22 @@ export const mediaItemSchema = z
|
|
|
120
174
|
dominantColor: z.string().nullable(),
|
|
121
175
|
createdAt: z.string(),
|
|
122
176
|
authorId: z.string().nullable(),
|
|
177
|
+
folderId: z.string().nullable(),
|
|
123
178
|
})
|
|
124
179
|
.meta({ id: "MediaItem" });
|
|
125
180
|
|
|
181
|
+
export const mediaFolderSchema = z
|
|
182
|
+
.object({ id: z.string(), name: z.string() })
|
|
183
|
+
.meta({ id: "MediaFolder" });
|
|
184
|
+
|
|
185
|
+
export const mediaFolderResponseSchema = z
|
|
186
|
+
.object({ item: mediaFolderSchema })
|
|
187
|
+
.meta({ id: "MediaFolderResponse" });
|
|
188
|
+
|
|
189
|
+
export const mediaFolderListResponseSchema = z
|
|
190
|
+
.object({ items: z.array(mediaFolderSchema), nextCursor: z.string().optional() })
|
|
191
|
+
.meta({ id: "MediaFolderListResponse" });
|
|
192
|
+
|
|
126
193
|
export const mediaResponseSchema = z
|
|
127
194
|
.object({ item: mediaItemSchema })
|
|
128
195
|
.meta({ id: "MediaResponse" });
|
|
@@ -143,6 +210,7 @@ export const mediaListReadResponseSchema = z
|
|
|
143
210
|
.object({
|
|
144
211
|
items: z.array(mediaListReadItemSchema),
|
|
145
212
|
nextCursor: z.string().optional(),
|
|
213
|
+
totalCount: z.number().int().nonnegative().optional(),
|
|
146
214
|
})
|
|
147
215
|
.meta({ id: "MediaListReadResponse" });
|
|
148
216
|
|
|
@@ -150,6 +218,7 @@ export const mediaListResponseSchema = z
|
|
|
150
218
|
.object({
|
|
151
219
|
items: z.array(mediaItemSchema),
|
|
152
220
|
nextCursor: z.string().optional(),
|
|
221
|
+
totalCount: z.number().int().nonnegative().optional(),
|
|
153
222
|
})
|
|
154
223
|
.meta({ id: "MediaListResponse" });
|
|
155
224
|
|
|
@@ -208,6 +208,16 @@ export function injectCoreRoutes(
|
|
|
208
208
|
entrypoint: resolveRoute("api/media/file/[...key].ts"),
|
|
209
209
|
});
|
|
210
210
|
|
|
211
|
+
injectRoute({
|
|
212
|
+
pattern: "/_emdash/api/media/folders",
|
|
213
|
+
entrypoint: resolveRoute("api/media/folders/index.ts"),
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
injectRoute({
|
|
217
|
+
pattern: "/_emdash/api/media/folders/[id]",
|
|
218
|
+
entrypoint: resolveRoute("api/media/folders/[id].ts"),
|
|
219
|
+
});
|
|
220
|
+
|
|
211
221
|
injectRoute({
|
|
212
222
|
pattern: "/_emdash/api/media/[id]",
|
|
213
223
|
entrypoint: resolveRoute("api/media/[id].ts"),
|
|
@@ -258,6 +268,14 @@ export function injectCoreRoutes(
|
|
|
258
268
|
pattern: "/_emdash/api/admin/media-usage/work/retry",
|
|
259
269
|
entrypoint: resolveRoute("api/admin/media-usage/work/retry.ts"),
|
|
260
270
|
});
|
|
271
|
+
injectRoute({
|
|
272
|
+
pattern: "/_emdash/api/admin/media-usage/activation",
|
|
273
|
+
entrypoint: resolveRoute("api/admin/media-usage/activation.ts"),
|
|
274
|
+
});
|
|
275
|
+
injectRoute({
|
|
276
|
+
pattern: "/_emdash/api/admin/media-usage/progress",
|
|
277
|
+
entrypoint: resolveRoute("api/admin/media-usage/progress.ts"),
|
|
278
|
+
});
|
|
261
279
|
injectRoute({
|
|
262
280
|
pattern: "/_emdash/api/admin/media-usage/collection-deletions",
|
|
263
281
|
entrypoint: resolveRoute("api/admin/media-usage/collection-deletions/index.ts"),
|
|
@@ -363,13 +363,7 @@ export function createVirtualModulesPlugin(
|
|
|
363
363
|
// `?url`), so both forms resolve to dist rather than the source alias.
|
|
364
364
|
const ADMIN_STYLES_ALIAS = /^@emdash-cms\/admin\/styles\.css/;
|
|
365
365
|
|
|
366
|
-
const NODE_NATIVE_EXTERNALS = [
|
|
367
|
-
"better-sqlite3",
|
|
368
|
-
"bindings",
|
|
369
|
-
"file-uri-to-path",
|
|
370
|
-
"@libsql/kysely-libsql",
|
|
371
|
-
"pg",
|
|
372
|
-
];
|
|
366
|
+
const NODE_NATIVE_EXTERNALS = ["@libsql/kysely-libsql", "pg"];
|
|
373
367
|
|
|
374
368
|
/**
|
|
375
369
|
* Detect whether the Cloudflare adapter is being used.
|
|
@@ -546,6 +540,7 @@ export function createViteConfig(
|
|
|
546
540
|
"emdash > zod",
|
|
547
541
|
"@emdash-cms/cloudflare > kysely-d1",
|
|
548
542
|
// Astro internal deps not covered by @astrojs/cloudflare adapter
|
|
543
|
+
"astro/app/manifest",
|
|
549
544
|
"astro/virtual-modules/middleware.js",
|
|
550
545
|
"astro/virtual-modules/live-config",
|
|
551
546
|
"astro/content/runtime",
|
|
@@ -54,6 +54,7 @@ declare global {
|
|
|
54
54
|
// Role level constants (matching @emdash-cms/auth)
|
|
55
55
|
const ROLE_ADMIN = 50;
|
|
56
56
|
const MCP_ENDPOINT_PATH = "/_emdash/api/mcp";
|
|
57
|
+
const COMMENT_SUBMISSION_PATH = /^\/_emdash\/api\/comments\/[^/]+\/[^/]+\/?$/;
|
|
57
58
|
|
|
58
59
|
function isUnsafeMethod(method: string): boolean {
|
|
59
60
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS";
|
|
@@ -191,6 +192,9 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
191
192
|
const csrfError = checkPublicCsrf(context.request, url, publicOrigin);
|
|
192
193
|
if (csrfError) return csrfError;
|
|
193
194
|
}
|
|
195
|
+
if (method === "POST" && COMMENT_SUBMISSION_PATH.test(url.pathname)) {
|
|
196
|
+
return handlePublicRouteAuth(context, next);
|
|
197
|
+
}
|
|
194
198
|
return next();
|
|
195
199
|
}
|
|
196
200
|
|
package/src/astro/middleware.ts
CHANGED
|
@@ -48,7 +48,6 @@ import { createDeferredTaskTracker } from "../deferred-tasks.js";
|
|
|
48
48
|
import {
|
|
49
49
|
DB_INIT_DEADLINE_MS,
|
|
50
50
|
EmDashRuntime,
|
|
51
|
-
type MediaUsageMaintenanceResult,
|
|
52
51
|
type RuntimeDependencies,
|
|
53
52
|
type SandboxedPluginEntry,
|
|
54
53
|
type MediaProviderEntry,
|
|
@@ -300,12 +299,6 @@ export async function runScheduledTasks(
|
|
|
300
299
|
return runOutsideRequest(config, (runtime) => runtime.runScheduledTasks(options));
|
|
301
300
|
}
|
|
302
301
|
|
|
303
|
-
export async function runScheduledMediaUsageTasks(): Promise<MediaUsageMaintenanceResult> {
|
|
304
|
-
const config = getConfig();
|
|
305
|
-
if (!config) return { outcome: "inactive", taskClass: null, turn: null };
|
|
306
|
-
return runOutsideRequest(config, (runtime) => runtime.runScheduledMediaUsageTasks());
|
|
307
|
-
}
|
|
308
|
-
|
|
309
302
|
/**
|
|
310
303
|
* Run a callback against the EmDash runtime outside any HTTP request — from a
|
|
311
304
|
* Cloudflare Queue consumer, a `scheduled()` handler, or any other
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import {
|
|
6
|
+
handleMediaUsageActivationAdvance,
|
|
7
|
+
handleMediaUsageActivationStatus,
|
|
8
|
+
} from "#api/handlers/media-usage-activation.js";
|
|
9
|
+
import { isParseError, parseBody } from "#api/parse.js";
|
|
10
|
+
import { mediaUsageActivationAdvanceBody } from "#api/schemas.js";
|
|
11
|
+
import { requireScope } from "#auth/scopes.js";
|
|
12
|
+
|
|
13
|
+
export const prerender = false;
|
|
14
|
+
|
|
15
|
+
export const GET: APIRoute = async ({ locals }) => {
|
|
16
|
+
const { emdash, user } = locals;
|
|
17
|
+
const dbErr = requireDb(emdash?.db);
|
|
18
|
+
if (dbErr) return dbErr;
|
|
19
|
+
|
|
20
|
+
const denied = requirePerm(user, "schema:manage");
|
|
21
|
+
if (denied) return denied;
|
|
22
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
23
|
+
if (scopeDenied) return scopeDenied;
|
|
24
|
+
|
|
25
|
+
return unwrapResult(await handleMediaUsageActivationStatus(emdash.db));
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const POST: APIRoute = async ({ request, locals }) => {
|
|
29
|
+
const { emdash, user } = locals;
|
|
30
|
+
const dbErr = requireDb(emdash?.db);
|
|
31
|
+
if (dbErr) return dbErr;
|
|
32
|
+
|
|
33
|
+
const denied = requirePerm(user, "schema:manage");
|
|
34
|
+
if (denied) return denied;
|
|
35
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
36
|
+
if (scopeDenied) return scopeDenied;
|
|
37
|
+
|
|
38
|
+
const body = await parseBody(request, mediaUsageActivationAdvanceBody);
|
|
39
|
+
if (isParseError(body)) return body;
|
|
40
|
+
|
|
41
|
+
return unwrapResult(await handleMediaUsageActivationAdvance(emdash.db, body));
|
|
42
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { APIRoute } from "astro";
|
|
2
|
+
|
|
3
|
+
import { requirePerm } from "#api/authorize.js";
|
|
4
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
5
|
+
import {
|
|
6
|
+
handleMediaUsageProgress,
|
|
7
|
+
handleMediaUsageProgressAdvance,
|
|
8
|
+
} from "#api/handlers/media-usage.js";
|
|
9
|
+
import { requireScope } from "#auth/scopes.js";
|
|
10
|
+
|
|
11
|
+
export const prerender = false;
|
|
12
|
+
|
|
13
|
+
export const GET: APIRoute = async ({ locals }) => {
|
|
14
|
+
const { emdash, user } = locals;
|
|
15
|
+
const dbErr = requireDb(emdash?.db);
|
|
16
|
+
if (dbErr) return dbErr;
|
|
17
|
+
|
|
18
|
+
const denied = requirePerm(user, "schema:manage");
|
|
19
|
+
if (denied) return denied;
|
|
20
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
21
|
+
if (scopeDenied) return scopeDenied;
|
|
22
|
+
|
|
23
|
+
return unwrapResult(await handleMediaUsageProgress(emdash.db));
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const POST: APIRoute = async ({ locals }) => {
|
|
27
|
+
const { emdash, user } = locals;
|
|
28
|
+
const dbErr = requireDb(emdash?.db);
|
|
29
|
+
if (dbErr) return dbErr;
|
|
30
|
+
|
|
31
|
+
const denied = requirePerm(user, "schema:manage");
|
|
32
|
+
if (denied) return denied;
|
|
33
|
+
const scopeDenied = requireScope(locals, "admin");
|
|
34
|
+
if (scopeDenied) return scopeDenied;
|
|
35
|
+
|
|
36
|
+
return unwrapResult(await handleMediaUsageProgressAdvance(emdash.db));
|
|
37
|
+
};
|