emdash 1.1.0 → 1.2.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/action-token-BdWad2YG.mjs +26 -0
- package/dist/action-token-BdWad2YG.mjs.map +1 -0
- package/dist/adapters-B4-nbElt.d.mts +173 -0
- package/dist/adapters-B4-nbElt.d.mts.map +1 -0
- package/dist/allowed-origins-CLpHGGlc.mjs +116 -0
- package/dist/allowed-origins-CLpHGGlc.mjs.map +1 -0
- package/dist/api/route-utils.d.mts +4 -4
- package/dist/api/route-utils.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +39 -39
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +10 -10
- package/dist/api-DBw_IWoi.mjs +5024 -0
- package/dist/api-DBw_IWoi.mjs.map +1 -0
- package/dist/api-tokens-B0ZipcZ-.mjs +173 -0
- package/dist/api-tokens-B0ZipcZ-.mjs.map +1 -0
- package/dist/apply-Cx48saFC.mjs +1680 -0
- package/dist/apply-Cx48saFC.mjs.map +1 -0
- package/dist/approvals-BXgtXA2s.mjs +460 -0
- package/dist/approvals-BXgtXA2s.mjs.map +1 -0
- package/dist/artifact-fetch-DsRczRGG.mjs +659 -0
- package/dist/artifact-fetch-DsRczRGG.mjs.map +1 -0
- package/dist/artifacts-D-O-qj9C.mjs +307 -0
- package/dist/artifacts-D-O-qj9C.mjs.map +1 -0
- package/dist/astro/image-endpoint.d.mts.map +1 -1
- package/dist/astro/image-endpoint.mjs +26 -6
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +14 -14
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +225 -15
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +12 -12
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +15 -11
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +4 -4
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +30 -15
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +71 -44
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +12 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +129 -107
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +13 -13
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +13 -13
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -5
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +15 -15
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +15 -15
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +15 -15
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +20 -20
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +20 -20
- package/dist/astro/routes/api/admin/bylines/index.mjs +20 -20
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +16 -16
- package/dist/astro/routes/api/admin/core-update.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +17 -17
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +16 -16
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +22 -22
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -19
- 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 +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +63 -63
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +62 -62
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +63 -63
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +72 -72
- package/dist/astro/routes/api/admin/plugins/index.mjs +63 -63
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +62 -62
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +71 -71
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +62 -62
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +63 -63
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +73 -73
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +65 -65
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +63 -63
- package/dist/astro/routes/api/admin/plugins/updates.mjs +62 -62
- package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +62 -62
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +6 -6
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +62 -62
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +3 -3
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +30 -30
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +30 -30
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +33 -33
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +33 -33
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +33 -33
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +34 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +34 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +34 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +34 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +32 -32
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +34 -34
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +13 -13
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
- package/dist/astro/routes/api/admin/users/index.mjs +13 -13
- package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
- package/dist/astro/routes/api/auth/handover.d.mts +8 -0
- package/dist/astro/routes/api/auth/handover.d.mts.map +1 -0
- package/dist/astro/routes/api/auth/handover.mjs +49 -0
- package/dist/astro/routes/api/auth/handover.mjs.map +1 -0
- package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
- package/dist/astro/routes/api/auth/invite/index.mjs +15 -15
- package/dist/astro/routes/api/auth/invite/register-options.mjs +16 -16
- package/dist/astro/routes/api/auth/logout.mjs +4 -4
- package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -17
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +22 -16
- package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +14 -14
- package/dist/astro/routes/api/auth/mode.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +7 -7
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +13 -13
- package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +26 -19
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +16 -16
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +17 -17
- package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
- package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
- package/dist/astro/routes/api/auth/signup/request.mjs +17 -16
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
- package/dist/astro/routes/api/calendar.mjs +14 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +11 -11
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +23 -23
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +27 -27
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +27 -27
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +20 -20
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/index.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/trash.mjs +14 -14
- package/dist/astro/routes/api/dashboard.mjs +9 -9
- package/dist/astro/routes/api/dev/emails.mjs +4 -4
- package/dist/astro/routes/api/health.mjs +5 -5
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +22 -22
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +4 -4
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/execute.mjs +28 -21
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +8 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +67 -31
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +20 -20
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +22 -22
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +35 -28
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +8 -5
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +81 -81
- package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +32 -16
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/replace.mjs +13 -13
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +24 -24
- package/dist/astro/routes/api/media/_id_.mjs +22 -22
- package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -5
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +44 -14
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.mjs +15 -15
- package/dist/astro/routes/api/media/folders/index.mjs +15 -15
- 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 +39 -19
- 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 +33 -23
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +15 -15
- package/dist/astro/routes/api/menus/_name_/items.mjs +15 -15
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -15
- package/dist/astro/routes/api/menus/_name_/translations.mjs +15 -15
- package/dist/astro/routes/api/menus/_name_.mjs +15 -15
- package/dist/astro/routes/api/menus/index.mjs +15 -15
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/code.mjs +11 -10
- package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/token.mjs +10 -9
- package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/register.mjs +7 -6
- package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
- 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 +21 -21
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +8 -8
- package/dist/astro/routes/api/redirects/404s/index.mjs +18 -18
- package/dist/astro/routes/api/redirects/404s/summary.mjs +18 -18
- package/dist/astro/routes/api/redirects/_id_.mjs +18 -18
- package/dist/astro/routes/api/redirects/index.mjs +18 -18
- package/dist/astro/routes/api/relations/_id_/index.mjs +27 -27
- package/dist/astro/routes/api/relations/index.mjs +27 -27
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +15 -15
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +62 -62
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +62 -62
- package/dist/astro/routes/api/schema/block-types/index.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/index.mjs +62 -62
- package/dist/astro/routes/api/schema/collections/reorder.mjs +62 -62
- package/dist/astro/routes/api/schema/index.mjs +10 -10
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +62 -62
- package/dist/astro/routes/api/schema/orphans/index.mjs +62 -62
- package/dist/astro/routes/api/search/enable.mjs +17 -17
- package/dist/astro/routes/api/search/index.mjs +16 -16
- package/dist/astro/routes/api/search/rebuild.mjs +17 -17
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +16 -16
- package/dist/astro/routes/api/sections/_slug_.mjs +16 -16
- package/dist/astro/routes/api/sections/index.mjs +16 -16
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
- 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/domain-notify.d.mts +8 -0
- package/dist/astro/routes/api/settings/domain-notify.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/domain-notify.mjs +125 -0
- package/dist/astro/routes/api/settings/domain-notify.mjs.map +1 -0
- package/dist/astro/routes/api/settings/domain.d.mts +9 -0
- package/dist/astro/routes/api/settings/domain.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/domain.mjs +61 -0
- package/dist/astro/routes/api/settings/domain.mjs.map +1 -0
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +18 -18
- package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
- package/dist/astro/routes/api/setup/admin.mjs +17 -17
- package/dist/astro/routes/api/setup/dev-bypass.mjs +34 -34
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/index.mjs +44 -40
- 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/site/domain-proof.d.mts +8 -0
- package/dist/astro/routes/api/site/domain-proof.d.mts.map +1 -0
- package/dist/astro/routes/api/site/domain-proof.mjs +33 -0
- package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -0
- package/dist/astro/routes/api/snapshot.mjs +7 -7
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/_name_.mjs +19 -19
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +27 -27
- package/dist/astro/routes/api/taxonomies/index.mjs +19 -19
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/visual-editing/action-token.mjs +5 -5
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +17 -17
- package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -3
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +14 -14
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -16
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -16
- package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/index.mjs +16 -16
- package/dist/astro/routes/api/widget-components.mjs +4 -4
- package/dist/astro/routes/robots.txt.mjs +4 -4
- package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +27 -10
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.d.mts.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +11 -10
- package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
- package/dist/astro/types.d.mts +30 -18
- 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/auth/providers/microsoft.d.mts +1 -1
- package/dist/authoritative-records-Dcs7l2H5.mjs +5183 -0
- package/dist/authoritative-records-Dcs7l2H5.mjs.map +1 -0
- package/dist/authorize-TdIGpRSE.mjs +49 -0
- package/dist/authorize-TdIGpRSE.mjs.map +1 -0
- package/dist/backup-CZt5Mzwx.mjs +246 -0
- package/dist/backup-CZt5Mzwx.mjs.map +1 -0
- package/dist/block-types-DHnkzE6u.mjs +132 -0
- package/dist/block-types-DHnkzE6u.mjs.map +1 -0
- package/dist/block-values-C4N_F2-G.mjs +175 -0
- package/dist/block-values-C4N_F2-G.mjs.map +1 -0
- package/dist/byline-BmVKOQ8l.mjs +909 -0
- package/dist/byline-BmVKOQ8l.mjs.map +1 -0
- package/dist/byline-fields-B8SDs3M_.mjs +123 -0
- package/dist/byline-fields-B8SDs3M_.mjs.map +1 -0
- package/dist/byline-fields-Bze3ZdAw.mjs +280 -0
- package/dist/byline-fields-Bze3ZdAw.mjs.map +1 -0
- package/dist/bylines-CHhR28r9.mjs +150 -0
- package/dist/bylines-CHhR28r9.mjs.map +1 -0
- package/dist/bylines-DZS4OflA.mjs +234 -0
- package/dist/bylines-DZS4OflA.mjs.map +1 -0
- package/dist/cache-x0z8t_m9.mjs +133 -0
- package/dist/cache-x0z8t_m9.mjs.map +1 -0
- package/dist/canonical-BUcKRYpG.mjs +174 -0
- package/dist/canonical-BUcKRYpG.mjs.map +1 -0
- package/dist/challenge-store-BHgdPVze.mjs +51 -0
- package/dist/challenge-store-BHgdPVze.mjs.map +1 -0
- package/dist/checksum-BYR5i7qe.mjs +162 -0
- package/dist/checksum-BYR5i7qe.mjs.map +1 -0
- package/dist/chunks-Dr5Vr0zA.mjs +25 -0
- package/dist/chunks-Dr5Vr0zA.mjs.map +1 -0
- package/dist/cli/index.mjs +44 -42
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +107 -107
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +2 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/comment-CWla6OHV.mjs +325 -0
- package/dist/comment-CWla6OHV.mjs.map +1 -0
- package/dist/comment-reaction-RZrcs5cW.mjs +85 -0
- package/dist/comment-reaction-RZrcs5cW.mjs.map +1 -0
- package/dist/comments-BzmIKVb2.mjs +99 -0
- package/dist/comments-BzmIKVb2.mjs.map +1 -0
- package/dist/comments-Da_dI2O1.mjs +195 -0
- package/dist/comments-Da_dI2O1.mjs.map +1 -0
- package/dist/components-oFXumpf5.mjs +112 -0
- package/dist/components-oFXumpf5.mjs.map +1 -0
- package/dist/config--wamYxBW.d.mts +39 -0
- package/dist/config--wamYxBW.d.mts.map +1 -0
- package/dist/config-Bo4eOOdV.mjs +228 -0
- package/dist/config-Bo4eOOdV.mjs.map +1 -0
- package/dist/config-C4-UxIk7.d.mts +6790 -0
- package/dist/config-C4-UxIk7.d.mts.map +1 -0
- package/dist/connection-UpzYxtE2.mjs +36 -0
- package/dist/connection-UpzYxtE2.mjs.map +1 -0
- package/dist/content-CcHrqkgp.mjs +2072 -0
- package/dist/content-CcHrqkgp.mjs.map +1 -0
- package/dist/content-list-query-Bxxdd9fv.d.mts +26 -0
- package/dist/content-list-query-Bxxdd9fv.d.mts.map +1 -0
- package/dist/content-repair-havk1F0-.mjs +442 -0
- package/dist/content-repair-havk1F0-.mjs.map +1 -0
- package/dist/context-CvhgHgSH.mjs +2043 -0
- package/dist/context-CvhgHgSH.mjs.map +1 -0
- package/dist/credits-CygUrPOi.mjs +110 -0
- package/dist/credits-CygUrPOi.mjs.map +1 -0
- package/dist/cron-C6ytTOLw.mjs +306 -0
- package/dist/cron-C6ytTOLw.mjs.map +1 -0
- package/dist/dashboard-7_FYfafc.mjs +151 -0
- package/dist/dashboard-7_FYfafc.mjs.map +1 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +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 +1 -1
- package/dist/default-CHCUkV4Z.mjs +81 -0
- package/dist/default-CHCUkV4Z.mjs.map +1 -0
- package/dist/deferred-tasks-G0xhcJTl.d.mts +9 -0
- package/dist/deferred-tasks-G0xhcJTl.d.mts.map +1 -0
- package/dist/device-flow-CzDJmQ1q.mjs +521 -0
- package/dist/device-flow-CzDJmQ1q.mjs.map +1 -0
- package/dist/digest-xJmyPv2r.mjs +194 -0
- package/dist/digest-xJmyPv2r.mjs.map +1 -0
- package/dist/direct-executor-BXiYIVJ9.mjs +104 -0
- package/dist/direct-executor-BXiYIVJ9.mjs.map +1 -0
- package/dist/email-console-7ZPApLlm.mjs +50 -0
- package/dist/email-console-7ZPApLlm.mjs.map +1 -0
- package/dist/email-locale-DFdUA6UF.mjs +25 -0
- package/dist/email-locale-DFdUA6UF.mjs.map +1 -0
- package/dist/emdash-runtime-C4oFeVpN.mjs +4363 -0
- package/dist/emdash-runtime-C4oFeVpN.mjs.map +1 -0
- package/dist/entry-lock-B4n0HdQ_.mjs +163 -0
- package/dist/entry-lock-B4n0HdQ_.mjs.map +1 -0
- package/dist/entry-lock-BAAlKYrz.d.mts +4566 -0
- package/dist/entry-lock-BAAlKYrz.d.mts.map +1 -0
- package/dist/entry-lock-Cjz0h45X.mjs +1209 -0
- package/dist/entry-lock-Cjz0h45X.mjs.map +1 -0
- package/dist/env-types-4bkF6Bqg.mjs +38 -0
- package/dist/env-types-4bkF6Bqg.mjs.map +1 -0
- package/dist/error-DxgQdaZ_.mjs +90 -0
- package/dist/error-DxgQdaZ_.mjs.map +1 -0
- package/dist/errors-CjtE5aWF.mjs +120 -0
- package/dist/errors-CjtE5aWF.mjs.map +1 -0
- package/dist/errors-hskQ0C8G.mjs +479 -0
- package/dist/errors-hskQ0C8G.mjs.map +1 -0
- package/dist/escape-ESFhYzwG.mjs +9 -0
- package/dist/escape-ESFhYzwG.mjs.map +1 -0
- package/dist/fence-vc3aHgRA.mjs +162 -0
- package/dist/fence-vc3aHgRA.mjs.map +1 -0
- package/dist/field-defs-cache-zoow36nz.mjs +77 -0
- package/dist/field-defs-cache-zoow36nz.mjs.map +1 -0
- package/dist/field-map-JD1wG0Tq.mjs +83 -0
- package/dist/field-map-JD1wG0Tq.mjs.map +1 -0
- package/dist/fts-manager-WJCN8uU6.mjs +443 -0
- package/dist/fts-manager-WJCN8uU6.mjs.map +1 -0
- package/dist/gc-CsGZiKdH.mjs +75 -0
- package/dist/gc-CsGZiKdH.mjs.map +1 -0
- package/dist/hook-result-CXjtMk7Q.d.mts +31 -0
- package/dist/hook-result-CXjtMk7Q.d.mts.map +1 -0
- package/dist/hreflang-BAma7iRr.mjs +105 -0
- package/dist/hreflang-BAma7iRr.mjs.map +1 -0
- package/dist/hreflang-BsYo4x_M.d.mts +50 -0
- package/dist/hreflang-BsYo4x_M.d.mts.map +1 -0
- package/dist/http-route-dispatch-C8G7hAK6.mjs +342 -0
- package/dist/http-route-dispatch-C8G7hAK6.mjs.map +1 -0
- package/dist/identity-BwBKM1fH.mjs +35 -0
- package/dist/identity-BwBKM1fH.mjs.map +1 -0
- package/dist/import-DJ3Z2wxE.mjs +2021 -0
- package/dist/import-DJ3Z2wxE.mjs.map +1 -0
- package/dist/index-DYsn97dY.d.mts +623 -0
- package/dist/index-DYsn97dY.d.mts.map +1 -0
- package/dist/index.d.mts +24 -24
- package/dist/index.mjs +87 -87
- package/dist/install-finalization-DCFnFSHv.mjs +58 -0
- package/dist/install-finalization-DCFnFSHv.mjs.map +1 -0
- package/dist/keys-CGvAndSp.mjs +61 -0
- package/dist/keys-CGvAndSp.mjs.map +1 -0
- package/dist/kinds-DT1W4T4Y.mjs +974 -0
- package/dist/kinds-DT1W4T4Y.mjs.map +1 -0
- package/dist/lifecycle-BzglCSY0.mjs +25 -0
- package/dist/lifecycle-BzglCSY0.mjs.map +1 -0
- package/dist/load-DjUqmf3s.mjs +28 -0
- package/dist/load-DjUqmf3s.mjs.map +1 -0
- package/dist/loader-CetY659y.mjs +1355 -0
- package/dist/loader-CetY659y.mjs.map +1 -0
- package/dist/loops-DkT1zkPH.mjs +205 -0
- package/dist/loops-DkT1zkPH.mjs.map +1 -0
- package/dist/manifest-builder-BOFCd9rX.mjs +189 -0
- package/dist/manifest-builder-BOFCd9rX.mjs.map +1 -0
- package/dist/manifest-schema-BiFBPEsp.mjs +497 -0
- package/dist/manifest-schema-BiFBPEsp.mjs.map +1 -0
- package/dist/marketplace-CUlenvZm.mjs +257 -0
- package/dist/marketplace-CUlenvZm.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +26 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +73 -3
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +14 -14
- package/dist/media/local-runtime.mjs +4 -4
- package/dist/media-CRKsKlfK.mjs +416 -0
- package/dist/media-CRKsKlfK.mjs.map +1 -0
- package/dist/media-C_z7sRuC.mjs +294 -0
- package/dist/media-C_z7sRuC.mjs.map +1 -0
- package/dist/media-IT8hQleU.mjs +373 -0
- package/dist/media-IT8hQleU.mjs.map +1 -0
- package/dist/media-allowlist-Ct6wvnT2.mjs +45 -0
- package/dist/media-allowlist-Ct6wvnT2.mjs.map +1 -0
- package/dist/media-folders-DtMt-vAA.mjs +210 -0
- package/dist/media-folders-DtMt-vAA.mjs.map +1 -0
- package/dist/media-url-BpXLqCmf.mjs +43 -0
- package/dist/media-url-BpXLqCmf.mjs.map +1 -0
- package/dist/media-usage-DEPHZZ9X.mjs +282 -0
- package/dist/media-usage-DEPHZZ9X.mjs.map +1 -0
- package/dist/media-usage-activation-V2Siabtw.mjs +78 -0
- package/dist/media-usage-activation-V2Siabtw.mjs.map +1 -0
- package/dist/media-usage-work-Cv1OE59F.mjs +151 -0
- package/dist/media-usage-work-Cv1OE59F.mjs.map +1 -0
- package/dist/media-usage-work-cgDYGvrt.mjs +1015 -0
- package/dist/media-usage-work-cgDYGvrt.mjs.map +1 -0
- package/dist/menus-CvVYfsuk.mjs +753 -0
- package/dist/menus-CvVYfsuk.mjs.map +1 -0
- package/dist/menus-D1HC8npj.mjs +92 -0
- package/dist/menus-D1HC8npj.mjs.map +1 -0
- package/dist/menus-DL8IPIcm.mjs +3721 -0
- package/dist/menus-DL8IPIcm.mjs.map +1 -0
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +3 -3
- package/dist/mode-eieqAWLe.mjs +23 -0
- package/dist/mode-eieqAWLe.mjs.map +1 -0
- package/dist/node-sqlite-compat-VuyzJw1b.mjs +63 -0
- package/dist/node-sqlite-compat-VuyzJw1b.mjs.map +1 -0
- package/dist/oauth-authorization-B6ZJbMd2.mjs +274 -0
- package/dist/oauth-authorization-B6ZJbMd2.mjs.map +1 -0
- package/dist/oauth-clients-DVjRc9v3.mjs +266 -0
- package/dist/oauth-clients-DVjRc9v3.mjs.map +1 -0
- package/dist/oauth-state-store-CnmYYsVQ.mjs +50 -0
- package/dist/oauth-state-store-CnmYYsVQ.mjs.map +1 -0
- package/dist/oauth-user-lookup-Dz1_R5vT.mjs +26 -0
- package/dist/oauth-user-lookup-Dz1_R5vT.mjs.map +1 -0
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/options-BR9XZl7h.d.mts +81 -0
- package/dist/options-BR9XZl7h.d.mts.map +1 -0
- package/dist/ownership-COPyVysP.mjs +12 -0
- package/dist/ownership-COPyVysP.mjs.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +3 -3
- package/dist/parse-BOGhrwSq.d.mts +174 -0
- package/dist/parse-BOGhrwSq.d.mts.map +1 -0
- package/dist/parse-Cn5aSk1N.mjs +81 -0
- package/dist/parse-Cn5aSk1N.mjs.map +1 -0
- package/dist/passkey-config-mMFRQUCj.mjs +46 -0
- package/dist/passkey-config-mMFRQUCj.mjs.map +1 -0
- package/dist/paths-BmcAdBo9.mjs +77 -0
- package/dist/paths-BmcAdBo9.mjs.map +1 -0
- package/dist/patterns-CMNnYCgf.mjs +159 -0
- package/dist/patterns-CMNnYCgf.mjs.map +1 -0
- package/dist/placeholder-nOep3_Gn.d.mts +306 -0
- package/dist/placeholder-nOep3_Gn.d.mts.map +1 -0
- package/dist/plan-CDY4K8CH.mjs +135 -0
- package/dist/plan-CDY4K8CH.mjs.map +1 -0
- package/dist/plugin-test-runtime.d.mts +14 -14
- package/dist/plugin-test-runtime.d.mts.map +1 -1
- package/dist/plugin-test-runtime.mjs +100 -100
- package/dist/plugin-types.d.mts +2 -2
- package/dist/plugin-utils.d.mts +12 -12
- package/dist/plugin-utils.mjs +1 -1
- package/dist/plugin-utils.mjs.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
- package/dist/plugins/host.d.mts +5 -5
- package/dist/plugins/host.mjs +35 -35
- package/dist/plugins-DFBpfbO3.mjs +261 -0
- package/dist/plugins-DFBpfbO3.mjs.map +1 -0
- package/dist/policy-B_2qnHSy.mjs +45 -0
- package/dist/policy-B_2qnHSy.mjs.map +1 -0
- package/dist/portable-text-Dc2YAusw.mjs +307 -0
- package/dist/portable-text-Dc2YAusw.mjs.map +1 -0
- package/dist/preview-BtzikJ9O.mjs +107 -0
- package/dist/preview-BtzikJ9O.mjs.map +1 -0
- package/dist/protocol-M268ox8L.d.mts +61 -0
- package/dist/protocol-M268ox8L.d.mts.map +1 -0
- package/dist/public-submission-BQZavgZU.mjs +251 -0
- package/dist/public-submission-BQZavgZU.mjs.map +1 -0
- package/dist/public-url-uT1Ok2Tu.mjs +101 -0
- package/dist/public-url-uT1Ok2Tu.mjs.map +1 -0
- package/dist/query-BGG3sDEd.mjs +1127 -0
- package/dist/query-BGG3sDEd.mjs.map +1 -0
- package/dist/query-C_CWlifp.mjs +41 -0
- package/dist/query-C_CWlifp.mjs.map +1 -0
- package/dist/range-CXK_kDbI.mjs +51 -0
- package/dist/range-CXK_kDbI.mjs.map +1 -0
- package/dist/rate-limit-Dvamvay-.mjs +127 -0
- package/dist/rate-limit-Dvamvay-.mjs.map +1 -0
- package/dist/receipt-BmQGzquP.mjs +43 -0
- package/dist/receipt-BmQGzquP.mjs.map +1 -0
- package/dist/redirect-B39kTQ_0.mjs +423 -0
- package/dist/redirect-B39kTQ_0.mjs.map +1 -0
- package/dist/redirect-BguJ00Pv.mjs +19 -0
- package/dist/redirect-BguJ00Pv.mjs.map +1 -0
- package/dist/redirects-C8G4BsfP.mjs +446 -0
- package/dist/redirects-C8G4BsfP.mjs.map +1 -0
- package/dist/redirects-DFT7Wr-e.mjs +148 -0
- package/dist/redirects-DFT7Wr-e.mjs.map +1 -0
- package/dist/registry/testing.mjs +3 -3
- package/dist/registry-DeZ27gVi.mjs +8374 -0
- package/dist/registry-DeZ27gVi.mjs.map +1 -0
- package/dist/relations-DBB1bRJW.mjs +776 -0
- package/dist/relations-DBB1bRJW.mjs.map +1 -0
- package/dist/request-context.d.mts +1 -1
- package/dist/request-meta-BSvkhIBX.mjs +141 -0
- package/dist/request-meta-BSvkhIBX.mjs.map +1 -0
- package/dist/resolve-BxH64HN9.mjs +100 -0
- package/dist/resolve-BxH64HN9.mjs.map +1 -0
- package/dist/route-wire-CwbWB_6O.mjs +197 -0
- package/dist/route-wire-CwbWB_6O.mjs.map +1 -0
- package/dist/routes-BfIxc7ft.mjs +272 -0
- package/dist/routes-BfIxc7ft.mjs.map +1 -0
- package/dist/runner-DkeafPBA.d.mts +68 -0
- package/dist/runner-DkeafPBA.d.mts.map +1 -0
- package/dist/runner-wqt4BrIW.mjs +6383 -0
- package/dist/runner-wqt4BrIW.mjs.map +1 -0
- package/dist/runtime.d.mts +13 -13
- package/dist/runtime.mjs +1 -1
- package/dist/schema/project-env-types.mjs +29 -29
- package/dist/schema-BXIW-JHi.mjs +815 -0
- package/dist/schema-BXIW-JHi.mjs.map +1 -0
- package/dist/schema-I74JwYte.mjs +13 -0
- package/dist/schema-I74JwYte.mjs.map +1 -0
- package/dist/scopes-RWZ5ft_Z.mjs +34 -0
- package/dist/scopes-RWZ5ft_Z.mjs.map +1 -0
- package/dist/search-DxwagyWS.mjs +450 -0
- package/dist/search-DxwagyWS.mjs.map +1 -0
- package/dist/sections-Ccq9ZgyD.mjs +346 -0
- package/dist/sections-Ccq9ZgyD.mjs.map +1 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +27 -27
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +14 -14
- package/dist/seo-CCnfPWAQ.mjs +133 -0
- package/dist/seo-CCnfPWAQ.mjs.map +1 -0
- package/dist/seo-QCtJ1jjV.mjs +188 -0
- package/dist/seo-QCtJ1jjV.mjs.map +1 -0
- package/dist/service-DX84s2rw.mjs +150 -0
- package/dist/service-DX84s2rw.mjs.map +1 -0
- package/dist/session-user-1dtJc2zv.mjs +61 -0
- package/dist/session-user-1dtJc2zv.mjs.map +1 -0
- package/dist/settings-B1jOxAIl.mjs +443 -0
- package/dist/settings-B1jOxAIl.mjs.map +1 -0
- package/dist/settings-Bc1IBl1t.mjs +66 -0
- package/dist/settings-Bc1IBl1t.mjs.map +1 -0
- package/dist/settings-GaZ5sVgg.mjs +73 -0
- package/dist/settings-GaZ5sVgg.mjs.map +1 -0
- package/dist/setup-complete-DidMAWJS.mjs +65 -0
- package/dist/setup-complete-DidMAWJS.mjs.map +1 -0
- package/dist/setup-nonce-DKl4S4c6.mjs +25 -0
- package/dist/setup-nonce-DKl4S4c6.mjs.map +1 -0
- package/dist/site-domain-CbI51Pc2.mjs +113 -0
- package/dist/site-domain-CbI51Pc2.mjs.map +1 -0
- package/dist/site-settings-CDdT4mVm.mjs +50 -0
- package/dist/site-settings-CDdT4mVm.mjs.map +1 -0
- package/dist/site-url-CrDZaAvo.mjs +45 -0
- package/dist/site-url-CrDZaAvo.mjs.map +1 -0
- package/dist/sitemap-name-W3BTor6X.mjs +26 -0
- package/dist/sitemap-name-W3BTor6X.mjs.map +1 -0
- package/dist/slug-BJhHKoOH.mjs +16 -0
- package/dist/slug-BJhHKoOH.mjs.map +1 -0
- package/dist/slugify-bu2-jKia.mjs +22 -0
- package/dist/slugify-bu2-jKia.mjs.map +1 -0
- package/dist/snapshot-BuI_2uDe.mjs +414 -0
- package/dist/snapshot-BuI_2uDe.mjs.map +1 -0
- package/dist/ssrf-LM_0wpGA.mjs +406 -0
- package/dist/ssrf-LM_0wpGA.mjs.map +1 -0
- package/dist/stage-DhzZuYaT.mjs +662 -0
- package/dist/stage-DhzZuYaT.mjs.map +1 -0
- package/dist/staged-DboEaWsV.mjs +686 -0
- package/dist/staged-DboEaWsV.mjs.map +1 -0
- package/dist/state-DCXDzjHq.mjs +178 -0
- package/dist/state-DCXDzjHq.mjs.map +1 -0
- package/dist/status-Dl85BK39.mjs +30 -0
- package/dist/status-Dl85BK39.mjs.map +1 -0
- package/dist/storage/local.d.mts +2 -2
- package/dist/storage/local.d.mts.map +1 -1
- package/dist/storage/local.mjs +11 -4
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +4 -2
- package/dist/storage/s3.d.mts.map +1 -1
- package/dist/storage/s3.mjs +56 -9
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/storage-query-BOBmeDMD.d.mts +1615 -0
- package/dist/storage-query-BOBmeDMD.d.mts.map +1 -0
- package/dist/tar-K40edFMt.mjs +449 -0
- package/dist/tar-K40edFMt.mjs.map +1 -0
- package/dist/target-BOighEY1.mjs +27 -0
- package/dist/target-BOighEY1.mjs.map +1 -0
- package/dist/taxonomies-DQSywBvX.mjs +697 -0
- package/dist/taxonomies-DQSywBvX.mjs.map +1 -0
- package/dist/taxonomies-Dj5eaobC.mjs +939 -0
- package/dist/taxonomies-Dj5eaobC.mjs.map +1 -0
- package/dist/taxonomy-QrNmTfIZ.mjs +550 -0
- package/dist/taxonomy-QrNmTfIZ.mjs.map +1 -0
- package/dist/tokens-j5L0as2H.mjs +171 -0
- package/dist/tokens-j5L0as2H.mjs.map +1 -0
- package/dist/transfer-CYEw8Tu4.mjs +8873 -0
- package/dist/transfer-CYEw8Tu4.mjs.map +1 -0
- package/dist/transfer-DDX10hkD.mjs +166 -0
- package/dist/transfer-DDX10hkD.mjs.map +1 -0
- package/dist/transfer-download-BAqq6GJv.mjs +33 -0
- package/dist/transfer-download-BAqq6GJv.mjs.map +1 -0
- package/dist/transformations-De44wqV_.mjs +196 -0
- package/dist/transformations-De44wqV_.mjs.map +1 -0
- package/dist/transport-1QjUhCRO.d.mts +42 -0
- package/dist/transport-1QjUhCRO.d.mts.map +1 -0
- package/dist/transport-Ds5pVX7p.mjs +136 -0
- package/dist/transport-Ds5pVX7p.mjs.map +1 -0
- package/dist/trusted-proxy-d4Tk6biT.mjs +51 -0
- package/dist/trusted-proxy-d4Tk6biT.mjs.map +1 -0
- package/dist/turnstile-DaFLtyrs.mjs +58 -0
- package/dist/turnstile-DaFLtyrs.mjs.map +1 -0
- package/dist/types-B4-1P2DK.d.mts +227 -0
- package/dist/types-B4-1P2DK.d.mts.map +1 -0
- package/dist/types-BKXA0f-c.mjs +16 -0
- package/dist/types-BKXA0f-c.mjs.map +1 -0
- package/dist/types-BiHcpUoO.d.mts +374 -0
- package/dist/types-BiHcpUoO.d.mts.map +1 -0
- package/dist/types-BihhvkyN.d.mts +85 -0
- package/dist/types-BihhvkyN.d.mts.map +1 -0
- package/dist/types-Bq9Wohd7.d.mts +363 -0
- package/dist/types-Bq9Wohd7.d.mts.map +1 -0
- package/dist/types-C-Xp0CcN.mjs.map +1 -1
- package/dist/types-C4P7F1Vq.d.mts +1741 -0
- package/dist/types-C4P7F1Vq.d.mts.map +1 -0
- package/dist/types-CGaqwHw4.mjs +37 -0
- package/dist/types-CGaqwHw4.mjs.map +1 -0
- package/dist/types-D4ECCE4X.mjs +77 -0
- package/dist/types-D4ECCE4X.mjs.map +1 -0
- package/dist/types-DcRJp0vS.d.mts +125 -0
- package/dist/types-DcRJp0vS.d.mts.map +1 -0
- package/dist/types-Ff85fTzU.d.mts +289 -0
- package/dist/types-Ff85fTzU.d.mts.map +1 -0
- package/dist/types-UKr5Sf4y.d.mts +916 -0
- package/dist/types-UKr5Sf4y.d.mts.map +1 -0
- package/dist/types-YpN8hZW7.d.mts +204 -0
- package/dist/types-YpN8hZW7.d.mts.map +1 -0
- package/dist/update-check-DrlsK-tt.mjs +161 -0
- package/dist/update-check-DrlsK-tt.mjs.map +1 -0
- package/dist/upload-attempts-D8CPPvRU.mjs +32 -0
- package/dist/upload-attempts-D8CPPvRU.mjs.map +1 -0
- package/dist/url-pattern-Di4Nn3vP.mjs +41 -0
- package/dist/url-pattern-Di4Nn3vP.mjs.map +1 -0
- package/dist/user-B-ZdGjhI.mjs +171 -0
- package/dist/user-B-ZdGjhI.mjs.map +1 -0
- package/dist/utils-D7wL3r6-.mjs +437 -0
- package/dist/utils-D7wL3r6-.mjs.map +1 -0
- package/dist/validate-BSZbSUDk.mjs +524 -0
- package/dist/validate-BSZbSUDk.mjs.map +1 -0
- package/dist/validate-Dfv0DpZi.d.mts +468 -0
- package/dist/validate-Dfv0DpZi.d.mts.map +1 -0
- package/dist/validation-DRyC_Vm5.mjs +219 -0
- package/dist/validation-DRyC_Vm5.mjs.map +1 -0
- package/dist/version-C4kz0PcO.mjs +7 -0
- package/dist/version-C4kz0PcO.mjs.map +1 -0
- package/dist/version-jhs2BRtl.mjs +9 -0
- package/dist/version-jhs2BRtl.mjs.map +1 -0
- package/dist/video-DReZ48Un.mjs +54 -0
- package/dist/video-DReZ48Un.mjs.map +1 -0
- package/dist/virtual-modules-D0e6VbEv.mjs +516 -0
- package/dist/virtual-modules-D0e6VbEv.mjs.map +1 -0
- package/dist/widgets-BkcMzKct.mjs +121 -0
- package/dist/widgets-BkcMzKct.mjs.map +1 -0
- package/dist/wxr-taxonomies-BxI0CbTg.mjs +453 -0
- package/dist/wxr-taxonomies-BxI0CbTg.mjs.map +1 -0
- package/dist/wxr-taxonomies-Dad33GJi.d.mts +34 -0
- package/dist/wxr-taxonomies-Dad33GJi.d.mts.map +1 -0
- package/package.json +13 -10
- package/src/api/errors.ts +9 -0
- package/src/api/handlers/api-tokens.ts +12 -6
- package/src/api/handlers/content.ts +57 -8
- package/src/api/handlers/domain-move-notice.ts +94 -0
- package/src/api/handlers/index.ts +2 -0
- package/src/api/handlers/manifest.ts +5 -0
- package/src/api/handlers/media-usage.ts +2 -1
- package/src/api/handlers/media.ts +1 -0
- package/src/api/handlers/seo.ts +155 -59
- package/src/api/handlers/settings.ts +31 -1
- package/src/api/handlers/site-domain.ts +143 -0
- package/src/api/openapi/document.ts +2 -2
- package/src/api/public-url.ts +1 -1
- package/src/api/schemas/content.ts +20 -0
- package/src/api/schemas/media-usage.ts +7 -1
- package/src/api/schemas/media.ts +12 -0
- package/src/api/site-url.ts +53 -5
- package/src/api/types.ts +2 -0
- package/src/astro/image-endpoint.ts +46 -4
- package/src/astro/integration/admin-locales.ts +168 -0
- package/src/astro/integration/dev-env.ts +84 -0
- package/src/astro/integration/index.ts +49 -9
- package/src/astro/integration/routes.ts +20 -0
- package/src/astro/integration/runtime.ts +15 -0
- package/src/astro/integration/vite-config.ts +18 -1
- package/src/astro/middleware/auth.ts +16 -3
- package/src/astro/middleware/csp.ts +1 -0
- package/src/astro/middleware/redirect.ts +27 -12
- package/src/astro/middleware/request-context.ts +12 -6
- package/src/astro/middleware.ts +53 -14
- package/src/astro/routes/api/auth/handover.ts +58 -0
- package/src/astro/routes/api/auth/magic-link/verify.ts +11 -3
- package/src/astro/routes/api/auth/passkey/options.ts +10 -2
- package/src/astro/routes/api/import/wordpress/execute.ts +19 -0
- package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +80 -42
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +15 -0
- package/src/astro/routes/api/manifest.ts +10 -0
- package/src/astro/routes/api/media/[id]/confirm.ts +19 -0
- package/src/astro/routes/api/media/file/[...key].ts +60 -12
- package/src/astro/routes/api/media/upload-url.ts +28 -4
- package/src/astro/routes/api/media.ts +15 -0
- package/src/astro/routes/api/schema/index.ts +1 -1
- package/src/astro/routes/api/settings/domain-notify.ts +76 -0
- package/src/astro/routes/api/settings/domain.ts +63 -0
- package/src/astro/routes/api/setup/index.ts +7 -0
- package/src/astro/routes/api/site/domain-proof.ts +28 -0
- package/src/astro/routes/sitemap-[collection].xml.ts +31 -8
- package/src/astro/routes/sitemap.xml.ts +12 -10
- package/src/astro/types.ts +13 -1
- package/src/auth/rate-limit.ts +18 -13
- package/src/auth/types.ts +7 -0
- package/src/aws-sdk.d.ts +2 -1
- package/src/cleanup.ts +26 -0
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/cli/commands/seed.ts +5 -4
- package/src/client/index.ts +6 -1
- package/src/comments/public-submission.ts +15 -8
- package/src/components/CommentForm.astro +48 -8
- package/src/components/Comments.astro +50 -28
- package/src/components/EmDashImage.astro +6 -4
- package/src/components/Gallery.astro +4 -3
- package/src/components/Image.astro +4 -3
- package/src/components/InlinePortableTextEditor.tsx +148 -26
- package/src/components/Video.astro +100 -0
- package/src/components/index.ts +4 -1
- package/src/components/inline-code-block.tsx +8 -0
- package/src/components/webmcp-search.ts +15 -19
- package/src/components/widgets/RecentPosts.astro +57 -17
- package/src/content/converters/mark-safety.ts +3 -3
- package/src/content/converters/portable-text-identity.ts +1 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +7 -0
- package/src/content/converters/prosemirror-to-portable-text.ts +16 -0
- package/src/content/converters/types.ts +22 -0
- package/src/content/converters/video.ts +77 -0
- package/src/database/datetime-storage.ts +1 -1
- package/src/database/migrations/runner.ts +13 -1
- package/src/database/repositories/comment.ts +17 -3
- package/src/database/repositories/content.ts +22 -3
- package/src/database/repositories/plugin-storage.ts +28 -19
- package/src/database/repositories/redirect.ts +24 -2
- package/src/database/repositories/taxonomy.ts +61 -46
- package/src/database/repositories/types.ts +2 -0
- package/src/emdash-runtime.ts +217 -68
- package/src/import/sources/wordpress-plugin.ts +3 -2
- package/src/import/utils.ts +2 -3
- package/src/index.ts +3 -0
- package/src/loader.ts +134 -43
- package/src/media/image-endpoint.ts +101 -1
- package/src/media/responsive.ts +14 -7
- package/src/media/usage/extractor.ts +19 -2
- package/src/media/usage/types.ts +5 -1
- package/src/plugin-utils.ts +1 -1
- package/src/plugins/context.ts +3 -7
- package/src/plugins/hooks.ts +1 -1
- package/src/plugins/http-route-dispatch.ts +5 -1
- package/src/plugins/manifest-schema.ts +1 -0
- package/src/plugins/route-error.ts +14 -0
- package/src/plugins/routes.ts +2 -2
- package/src/plugins/state.ts +36 -0
- package/src/plugins/types.ts +6 -0
- package/src/query.ts +8 -0
- package/src/redirects/patterns.ts +26 -2
- package/src/schema/registry.ts +7 -4
- package/src/schema/slug.ts +19 -0
- package/src/search/text-extraction.ts +6 -1
- package/src/seed/validate.ts +31 -0
- package/src/seo/sitemap-name.ts +22 -0
- package/src/storage/index.ts +2 -0
- package/src/storage/local.ts +10 -2
- package/src/storage/range.ts +54 -0
- package/src/storage/s3.ts +52 -8
- package/src/storage/types.ts +30 -3
- package/src/ui.ts +1 -0
- package/src/utils/slugify.ts +6 -1
- package/src/visual-editing/toolbar.ts +80 -35
- package/src/widgets/components.ts +4 -0
- package/src/widgets/index.ts +74 -82
- package/src/widgets/recent-posts.ts +62 -0
- package/dist/action-token-AgOs1UWD.mjs +0 -26
- package/dist/action-token-AgOs1UWD.mjs.map +0 -1
- package/dist/adapters-DM1oyHIN.d.mts +0 -173
- package/dist/adapters-DM1oyHIN.d.mts.map +0 -1
- package/dist/allowed-origins-CFtudhyw.mjs +0 -116
- package/dist/allowed-origins-CFtudhyw.mjs.map +0 -1
- package/dist/api-CltsXhiX.mjs +0 -4980
- package/dist/api-CltsXhiX.mjs.map +0 -1
- package/dist/api-tokens-P3mAaQgr.mjs +0 -166
- package/dist/api-tokens-P3mAaQgr.mjs.map +0 -1
- package/dist/apply-Q7uvzBWW.mjs +0 -1680
- package/dist/apply-Q7uvzBWW.mjs.map +0 -1
- package/dist/approvals-DycwI6lZ.mjs +0 -460
- package/dist/approvals-DycwI6lZ.mjs.map +0 -1
- package/dist/artifact-fetch-CWxyELVI.mjs +0 -659
- package/dist/artifact-fetch-CWxyELVI.mjs.map +0 -1
- package/dist/artifacts-UzWbysb8.mjs +0 -307
- package/dist/artifacts-UzWbysb8.mjs.map +0 -1
- package/dist/authoritative-records-dSvXCfzb.mjs +0 -5172
- package/dist/authoritative-records-dSvXCfzb.mjs.map +0 -1
- package/dist/authorize-DeWfk--K.mjs +0 -49
- package/dist/authorize-DeWfk--K.mjs.map +0 -1
- package/dist/backup-CFnbdTSJ.mjs +0 -246
- package/dist/backup-CFnbdTSJ.mjs.map +0 -1
- package/dist/block-types-C0YFSfR7.mjs +0 -132
- package/dist/block-types-C0YFSfR7.mjs.map +0 -1
- package/dist/block-values-H4E0XwE8.mjs +0 -175
- package/dist/block-values-H4E0XwE8.mjs.map +0 -1
- package/dist/byline-BhVslYLz.mjs +0 -909
- package/dist/byline-BhVslYLz.mjs.map +0 -1
- package/dist/byline-fields-DHJs0Mja.mjs +0 -280
- package/dist/byline-fields-DHJs0Mja.mjs.map +0 -1
- package/dist/byline-fields-xdxE9kxZ.mjs +0 -123
- package/dist/byline-fields-xdxE9kxZ.mjs.map +0 -1
- package/dist/bylines-B_nN9liM.mjs +0 -234
- package/dist/bylines-B_nN9liM.mjs.map +0 -1
- package/dist/bylines-C71YACkL.mjs +0 -150
- package/dist/bylines-C71YACkL.mjs.map +0 -1
- package/dist/cache-aTYCL9nK.mjs +0 -133
- package/dist/cache-aTYCL9nK.mjs.map +0 -1
- package/dist/canonical-Y1dpjCnp.mjs +0 -174
- package/dist/canonical-Y1dpjCnp.mjs.map +0 -1
- package/dist/challenge-store-CxZxPqaw.mjs +0 -51
- package/dist/challenge-store-CxZxPqaw.mjs.map +0 -1
- package/dist/checksum-DtH6m5uk.mjs +0 -162
- package/dist/checksum-DtH6m5uk.mjs.map +0 -1
- package/dist/chunks-zlGB5IQP.mjs +0 -25
- package/dist/chunks-zlGB5IQP.mjs.map +0 -1
- package/dist/comment-Bu08Wvr3.mjs +0 -313
- package/dist/comment-Bu08Wvr3.mjs.map +0 -1
- package/dist/comment-reaction-B8SfT-yM.mjs +0 -85
- package/dist/comment-reaction-B8SfT-yM.mjs.map +0 -1
- package/dist/comments-BRtp992B.mjs +0 -99
- package/dist/comments-BRtp992B.mjs.map +0 -1
- package/dist/comments-DVUYqdyC.mjs +0 -195
- package/dist/comments-DVUYqdyC.mjs.map +0 -1
- package/dist/components-CQY-Sgm-.mjs +0 -108
- package/dist/components-CQY-Sgm-.mjs.map +0 -1
- package/dist/config-B-uePMLj.d.mts +0 -39
- package/dist/config-B-uePMLj.d.mts.map +0 -1
- package/dist/config-B6BDSsz2.d.mts +0 -6712
- package/dist/config-B6BDSsz2.d.mts.map +0 -1
- package/dist/config-BsJHiQxC.mjs +0 -228
- package/dist/config-BsJHiQxC.mjs.map +0 -1
- package/dist/connection-B9pIasFd.mjs +0 -36
- package/dist/connection-B9pIasFd.mjs.map +0 -1
- package/dist/content-Dji9vEiW.mjs +0 -2063
- package/dist/content-Dji9vEiW.mjs.map +0 -1
- package/dist/content-list-query-DiNwyKtd.d.mts +0 -26
- package/dist/content-list-query-DiNwyKtd.d.mts.map +0 -1
- package/dist/content-repair-B7wnbzhN.mjs +0 -442
- package/dist/content-repair-B7wnbzhN.mjs.map +0 -1
- package/dist/context-Ctcxc8Ia.mjs +0 -2026
- package/dist/context-Ctcxc8Ia.mjs.map +0 -1
- package/dist/credits-Bu7dlobo.mjs +0 -110
- package/dist/credits-Bu7dlobo.mjs.map +0 -1
- package/dist/cron-xe5XKqA-.mjs +0 -306
- package/dist/cron-xe5XKqA-.mjs.map +0 -1
- package/dist/dashboard-B5hVHOtf.mjs +0 -151
- package/dist/dashboard-B5hVHOtf.mjs.map +0 -1
- package/dist/default-DaoYyFRS.mjs +0 -81
- package/dist/default-DaoYyFRS.mjs.map +0 -1
- package/dist/deferred-tasks-BYcDx2o_.d.mts +0 -9
- package/dist/deferred-tasks-BYcDx2o_.d.mts.map +0 -1
- package/dist/device-flow-Ma5P5d2e.mjs +0 -521
- package/dist/device-flow-Ma5P5d2e.mjs.map +0 -1
- package/dist/digest-xIpR3o64.mjs +0 -194
- package/dist/digest-xIpR3o64.mjs.map +0 -1
- package/dist/direct-executor-DMWwCey3.mjs +0 -104
- package/dist/direct-executor-DMWwCey3.mjs.map +0 -1
- package/dist/email-console-DmqVF5J_.mjs +0 -50
- package/dist/email-console-DmqVF5J_.mjs.map +0 -1
- package/dist/email-locale-Cc5YSXfJ.mjs +0 -25
- package/dist/email-locale-Cc5YSXfJ.mjs.map +0 -1
- package/dist/emdash-runtime-BlybX9Ui.mjs +0 -4249
- package/dist/emdash-runtime-BlybX9Ui.mjs.map +0 -1
- package/dist/entry-lock-De1L8qUQ.mjs +0 -163
- package/dist/entry-lock-De1L8qUQ.mjs.map +0 -1
- package/dist/entry-lock-esmMbgI9.d.mts +0 -4551
- package/dist/entry-lock-esmMbgI9.d.mts.map +0 -1
- package/dist/entry-lock-sxz2PGAT.mjs +0 -1197
- package/dist/entry-lock-sxz2PGAT.mjs.map +0 -1
- package/dist/env-types-BkjCtN13.mjs +0 -38
- package/dist/env-types-BkjCtN13.mjs.map +0 -1
- package/dist/error-B0rgPgsQ.mjs +0 -90
- package/dist/error-B0rgPgsQ.mjs.map +0 -1
- package/dist/errors-CuHQRiBW.mjs +0 -120
- package/dist/errors-CuHQRiBW.mjs.map +0 -1
- package/dist/errors-DTE6C3K_.mjs +0 -470
- package/dist/errors-DTE6C3K_.mjs.map +0 -1
- package/dist/escape-nJW7dR0s.mjs +0 -9
- package/dist/escape-nJW7dR0s.mjs.map +0 -1
- package/dist/fence-CGw57S4v.mjs +0 -162
- package/dist/fence-CGw57S4v.mjs.map +0 -1
- package/dist/field-defs-cache-Bw8w499w.mjs +0 -77
- package/dist/field-defs-cache-Bw8w499w.mjs.map +0 -1
- package/dist/field-map-hn-D-SyH.mjs +0 -83
- package/dist/field-map-hn-D-SyH.mjs.map +0 -1
- package/dist/fts-manager-DacCYIe4.mjs +0 -443
- package/dist/fts-manager-DacCYIe4.mjs.map +0 -1
- package/dist/gc-BBplHrv6.mjs +0 -75
- package/dist/gc-BBplHrv6.mjs.map +0 -1
- package/dist/hook-result-DSRRxu_-.d.mts +0 -31
- package/dist/hook-result-DSRRxu_-.d.mts.map +0 -1
- package/dist/hreflang-CKPunvU0.mjs +0 -105
- package/dist/hreflang-CKPunvU0.mjs.map +0 -1
- package/dist/hreflang-egumj6WF.d.mts +0 -50
- package/dist/hreflang-egumj6WF.d.mts.map +0 -1
- package/dist/http-route-dispatch-DjNFZcJ2.mjs +0 -339
- package/dist/http-route-dispatch-DjNFZcJ2.mjs.map +0 -1
- package/dist/identity-Dfrx2_Bc.mjs +0 -35
- package/dist/identity-Dfrx2_Bc.mjs.map +0 -1
- package/dist/import-ROBvhbNc.mjs +0 -2021
- package/dist/import-ROBvhbNc.mjs.map +0 -1
- package/dist/index-B4sIdCAT.d.mts +0 -623
- package/dist/index-B4sIdCAT.d.mts.map +0 -1
- package/dist/install-finalization-CPM7Gged.mjs +0 -58
- package/dist/install-finalization-CPM7Gged.mjs.map +0 -1
- package/dist/keys-DxqxcAD4.mjs +0 -61
- package/dist/keys-DxqxcAD4.mjs.map +0 -1
- package/dist/kinds-BQl5gN6e.mjs +0 -974
- package/dist/kinds-BQl5gN6e.mjs.map +0 -1
- package/dist/lifecycle-DGQI7itS.mjs +0 -25
- package/dist/lifecycle-DGQI7itS.mjs.map +0 -1
- package/dist/load-DMxRl4VK.mjs +0 -28
- package/dist/load-DMxRl4VK.mjs.map +0 -1
- package/dist/loader-1DMiOq5s.mjs +0 -1303
- package/dist/loader-1DMiOq5s.mjs.map +0 -1
- package/dist/loops-Dn1i16FP.mjs +0 -205
- package/dist/loops-Dn1i16FP.mjs.map +0 -1
- package/dist/manifest-builder-CTw4FmZk.mjs +0 -189
- package/dist/manifest-builder-CTw4FmZk.mjs.map +0 -1
- package/dist/manifest-schema-gy37bD_D.mjs +0 -496
- package/dist/manifest-schema-gy37bD_D.mjs.map +0 -1
- package/dist/marketplace-tHWSsCUo.mjs +0 -257
- package/dist/marketplace-tHWSsCUo.mjs.map +0 -1
- package/dist/media-Bw-Q65ve.mjs +0 -294
- package/dist/media-Bw-Q65ve.mjs.map +0 -1
- package/dist/media-BzUDu7nl.mjs +0 -373
- package/dist/media-BzUDu7nl.mjs.map +0 -1
- package/dist/media-aahnKHze.mjs +0 -408
- package/dist/media-aahnKHze.mjs.map +0 -1
- package/dist/media-allowlist-RMrjo8TU.mjs +0 -45
- package/dist/media-allowlist-RMrjo8TU.mjs.map +0 -1
- package/dist/media-folders-kabR1oJf.mjs +0 -210
- package/dist/media-folders-kabR1oJf.mjs.map +0 -1
- package/dist/media-url-DloW2xrP.mjs +0 -43
- package/dist/media-url-DloW2xrP.mjs.map +0 -1
- package/dist/media-usage-CHHpV7ee.mjs +0 -282
- package/dist/media-usage-CHHpV7ee.mjs.map +0 -1
- package/dist/media-usage-activation-BinYqC_r.mjs +0 -78
- package/dist/media-usage-activation-BinYqC_r.mjs.map +0 -1
- package/dist/media-usage-work-C734aq6s.mjs +0 -1015
- package/dist/media-usage-work-C734aq6s.mjs.map +0 -1
- package/dist/media-usage-work-lxvV0-UO.mjs +0 -151
- package/dist/media-usage-work-lxvV0-UO.mjs.map +0 -1
- package/dist/menus-6RHNq4ZK.mjs +0 -753
- package/dist/menus-6RHNq4ZK.mjs.map +0 -1
- package/dist/menus-AuCTaO9W.mjs +0 -3704
- package/dist/menus-AuCTaO9W.mjs.map +0 -1
- package/dist/menus-BQKqf0Up.mjs +0 -92
- package/dist/menus-BQKqf0Up.mjs.map +0 -1
- package/dist/mode-nh0ppSX5.mjs +0 -23
- package/dist/mode-nh0ppSX5.mjs.map +0 -1
- package/dist/node-sqlite-compat-CDOEcc97.mjs +0 -63
- package/dist/node-sqlite-compat-CDOEcc97.mjs.map +0 -1
- package/dist/oauth-authorization-BtYQ80uU.mjs +0 -274
- package/dist/oauth-authorization-BtYQ80uU.mjs.map +0 -1
- package/dist/oauth-clients-C1S4NQHh.mjs +0 -266
- package/dist/oauth-clients-C1S4NQHh.mjs.map +0 -1
- package/dist/oauth-state-store-CpGi2FZH.mjs +0 -50
- package/dist/oauth-state-store-CpGi2FZH.mjs.map +0 -1
- package/dist/oauth-user-lookup-BNp1aFAr.mjs +0 -26
- package/dist/oauth-user-lookup-BNp1aFAr.mjs.map +0 -1
- package/dist/options-B41aLm1I.d.mts +0 -81
- package/dist/options-B41aLm1I.d.mts.map +0 -1
- package/dist/ownership-DoeAIuTg.mjs +0 -12
- package/dist/ownership-DoeAIuTg.mjs.map +0 -1
- package/dist/parse-CmFDTGzp.mjs +0 -81
- package/dist/parse-CmFDTGzp.mjs.map +0 -1
- package/dist/parse-QVS0t5oR.d.mts +0 -172
- package/dist/parse-QVS0t5oR.d.mts.map +0 -1
- package/dist/passkey-config-C-MxsV22.mjs +0 -46
- package/dist/passkey-config-C-MxsV22.mjs.map +0 -1
- package/dist/paths-kr8hAMMI.mjs +0 -77
- package/dist/paths-kr8hAMMI.mjs.map +0 -1
- package/dist/patterns-DyZJ67I7.mjs +0 -140
- package/dist/patterns-DyZJ67I7.mjs.map +0 -1
- package/dist/placeholder-Dn7MMdWr.d.mts +0 -306
- package/dist/placeholder-Dn7MMdWr.d.mts.map +0 -1
- package/dist/plan-CuQOeU9g.mjs +0 -135
- package/dist/plan-CuQOeU9g.mjs.map +0 -1
- package/dist/plugins-CGb-G98c.mjs +0 -261
- package/dist/plugins-CGb-G98c.mjs.map +0 -1
- package/dist/policy-C5wrDXYV.mjs +0 -45
- package/dist/policy-C5wrDXYV.mjs.map +0 -1
- package/dist/portable-text-BnRuiR1-.mjs +0 -307
- package/dist/portable-text-BnRuiR1-.mjs.map +0 -1
- package/dist/preview-xWNSR1Li.mjs +0 -107
- package/dist/preview-xWNSR1Li.mjs.map +0 -1
- package/dist/protocol-ClxN-m1e.d.mts +0 -61
- package/dist/protocol-ClxN-m1e.d.mts.map +0 -1
- package/dist/public-submission-CkmT2SKv.mjs +0 -250
- package/dist/public-submission-CkmT2SKv.mjs.map +0 -1
- package/dist/public-url-B5a0QAh6.mjs +0 -101
- package/dist/public-url-B5a0QAh6.mjs.map +0 -1
- package/dist/query-DHqFiqqH.mjs +0 -41
- package/dist/query-DHqFiqqH.mjs.map +0 -1
- package/dist/query-DT85BehD.mjs +0 -1125
- package/dist/query-DT85BehD.mjs.map +0 -1
- package/dist/rate-limit-iMvcu3eu.mjs +0 -120
- package/dist/rate-limit-iMvcu3eu.mjs.map +0 -1
- package/dist/receipt-Dpp1uaX9.mjs +0 -43
- package/dist/receipt-Dpp1uaX9.mjs.map +0 -1
- package/dist/redirect-BRoLiWQE.mjs +0 -19
- package/dist/redirect-BRoLiWQE.mjs.map +0 -1
- package/dist/redirect-xZNpBoGp.mjs +0 -417
- package/dist/redirect-xZNpBoGp.mjs.map +0 -1
- package/dist/redirects-D4EWeXAo.mjs +0 -148
- package/dist/redirects-D4EWeXAo.mjs.map +0 -1
- package/dist/redirects-DCKqwiWp.mjs +0 -446
- package/dist/redirects-DCKqwiWp.mjs.map +0 -1
- package/dist/registry-DaXmUsD4.mjs +0 -8369
- package/dist/registry-DaXmUsD4.mjs.map +0 -1
- package/dist/relations-JvBP8nGP.mjs +0 -776
- package/dist/relations-JvBP8nGP.mjs.map +0 -1
- package/dist/request-meta-B6blULFY.mjs +0 -141
- package/dist/request-meta-B6blULFY.mjs.map +0 -1
- package/dist/resolve-DAhHi5tn.mjs +0 -100
- package/dist/resolve-DAhHi5tn.mjs.map +0 -1
- package/dist/route-wire-DK600v4u.mjs +0 -197
- package/dist/route-wire-DK600v4u.mjs.map +0 -1
- package/dist/routes-BeZyaCzv.mjs +0 -272
- package/dist/routes-BeZyaCzv.mjs.map +0 -1
- package/dist/runner-CskI4Hmq.mjs +0 -6372
- package/dist/runner-CskI4Hmq.mjs.map +0 -1
- package/dist/runner-J3Cj6DGk.d.mts +0 -68
- package/dist/runner-J3Cj6DGk.d.mts.map +0 -1
- package/dist/schema-CK0ihqMR.mjs +0 -815
- package/dist/schema-CK0ihqMR.mjs.map +0 -1
- package/dist/schema-VtaZSrC-.mjs +0 -13
- package/dist/schema-VtaZSrC-.mjs.map +0 -1
- package/dist/scopes-BRnGlL9t.mjs +0 -34
- package/dist/scopes-BRnGlL9t.mjs.map +0 -1
- package/dist/search-D6-XK1Sn.mjs +0 -448
- package/dist/search-D6-XK1Sn.mjs.map +0 -1
- package/dist/sections-CBDCf7qR.mjs +0 -346
- package/dist/sections-CBDCf7qR.mjs.map +0 -1
- package/dist/seo-BdeEPDNW.mjs +0 -133
- package/dist/seo-BdeEPDNW.mjs.map +0 -1
- package/dist/seo-C61bnPuV.mjs +0 -114
- package/dist/seo-C61bnPuV.mjs.map +0 -1
- package/dist/service-BuRKLMxa.mjs +0 -150
- package/dist/service-BuRKLMxa.mjs.map +0 -1
- package/dist/session-user-CqkPtrPL.mjs +0 -61
- package/dist/session-user-CqkPtrPL.mjs.map +0 -1
- package/dist/settings-0u0lTthS.mjs +0 -51
- package/dist/settings-0u0lTthS.mjs.map +0 -1
- package/dist/settings-WHr45II1.mjs +0 -61
- package/dist/settings-WHr45II1.mjs.map +0 -1
- package/dist/settings-m5tIYnF0.mjs +0 -443
- package/dist/settings-m5tIYnF0.mjs.map +0 -1
- package/dist/setup-complete-B2_dhZZz.mjs +0 -65
- package/dist/setup-complete-B2_dhZZz.mjs.map +0 -1
- package/dist/setup-nonce-CJV9ftSK.mjs +0 -25
- package/dist/setup-nonce-CJV9ftSK.mjs.map +0 -1
- package/dist/site-settings-KJOqJW6W.mjs +0 -50
- package/dist/site-settings-KJOqJW6W.mjs.map +0 -1
- package/dist/site-url-Ceq_AUK0.mjs +0 -16
- package/dist/site-url-Ceq_AUK0.mjs.map +0 -1
- package/dist/slugify-T5GHH42D.mjs +0 -17
- package/dist/slugify-T5GHH42D.mjs.map +0 -1
- package/dist/snapshot-Dzsn3NZa.mjs +0 -414
- package/dist/snapshot-Dzsn3NZa.mjs.map +0 -1
- package/dist/ssrf-DsmvZB80.mjs +0 -406
- package/dist/ssrf-DsmvZB80.mjs.map +0 -1
- package/dist/stage-Csnh_yEd.mjs +0 -662
- package/dist/stage-Csnh_yEd.mjs.map +0 -1
- package/dist/staged-Q7pnEVvI.mjs +0 -686
- package/dist/staged-Q7pnEVvI.mjs.map +0 -1
- package/dist/state-kGdOMQRY.mjs +0 -153
- package/dist/state-kGdOMQRY.mjs.map +0 -1
- package/dist/status-D39Fpy8R.mjs +0 -30
- package/dist/status-D39Fpy8R.mjs.map +0 -1
- package/dist/storage-query-C7iy6eUb.d.mts +0 -1615
- package/dist/storage-query-C7iy6eUb.d.mts.map +0 -1
- package/dist/tar-BWiraSUY.mjs +0 -449
- package/dist/tar-BWiraSUY.mjs.map +0 -1
- package/dist/target-DOFs5oUC.mjs +0 -27
- package/dist/target-DOFs5oUC.mjs.map +0 -1
- package/dist/taxonomies-BS40Wxvi.mjs +0 -939
- package/dist/taxonomies-BS40Wxvi.mjs.map +0 -1
- package/dist/taxonomies-DAZU9VDd.mjs +0 -697
- package/dist/taxonomies-DAZU9VDd.mjs.map +0 -1
- package/dist/taxonomy-XzLE95Vx.mjs +0 -525
- package/dist/taxonomy-XzLE95Vx.mjs.map +0 -1
- package/dist/tokens-DSQan4p7.mjs +0 -171
- package/dist/tokens-DSQan4p7.mjs.map +0 -1
- package/dist/transfer-BcCVxDgf.mjs +0 -166
- package/dist/transfer-BcCVxDgf.mjs.map +0 -1
- package/dist/transfer-OMrancOt.mjs +0 -8873
- package/dist/transfer-OMrancOt.mjs.map +0 -1
- package/dist/transfer-download-Dc-ltjZY.mjs +0 -33
- package/dist/transfer-download-Dc-ltjZY.mjs.map +0 -1
- package/dist/transformations-Ddx7UtrY.mjs +0 -196
- package/dist/transformations-Ddx7UtrY.mjs.map +0 -1
- package/dist/transport-flR-Zmds.d.mts +0 -42
- package/dist/transport-flR-Zmds.d.mts.map +0 -1
- package/dist/transport-umzEbgYO.mjs +0 -136
- package/dist/transport-umzEbgYO.mjs.map +0 -1
- package/dist/trusted-proxy-BqfQFs6a.mjs +0 -51
- package/dist/trusted-proxy-BqfQFs6a.mjs.map +0 -1
- package/dist/turnstile-Do60baId.mjs +0 -58
- package/dist/turnstile-Do60baId.mjs.map +0 -1
- package/dist/types-BT1p3uyb.d.mts +0 -1735
- package/dist/types-BT1p3uyb.d.mts.map +0 -1
- package/dist/types-BYaPWs_F.d.mts +0 -198
- package/dist/types-BYaPWs_F.d.mts.map +0 -1
- package/dist/types-CLTQ9b_r.d.mts +0 -374
- package/dist/types-CLTQ9b_r.d.mts.map +0 -1
- package/dist/types-CPkQw2T2.d.mts +0 -85
- package/dist/types-CPkQw2T2.d.mts.map +0 -1
- package/dist/types-CQLvuXoZ.d.mts +0 -198
- package/dist/types-CQLvuXoZ.d.mts.map +0 -1
- package/dist/types-CV5xszpF.d.mts +0 -363
- package/dist/types-CV5xszpF.d.mts.map +0 -1
- package/dist/types-CdEMurNh.mjs +0 -77
- package/dist/types-CdEMurNh.mjs.map +0 -1
- package/dist/types-CxwtnuSS.mjs +0 -37
- package/dist/types-CxwtnuSS.mjs.map +0 -1
- package/dist/types-DGw8KMX_.mjs +0 -16
- package/dist/types-DGw8KMX_.mjs.map +0 -1
- package/dist/types-DOfVMPoo.d.mts +0 -125
- package/dist/types-DOfVMPoo.d.mts.map +0 -1
- package/dist/types-LtS0SM4F.d.mts +0 -287
- package/dist/types-LtS0SM4F.d.mts.map +0 -1
- package/dist/types-ifgOkcBa.d.mts +0 -916
- package/dist/types-ifgOkcBa.d.mts.map +0 -1
- package/dist/update-check-DOc2aBIU.mjs +0 -161
- package/dist/update-check-DOc2aBIU.mjs.map +0 -1
- package/dist/upload-attempts-nzdc3cay.mjs +0 -32
- package/dist/upload-attempts-nzdc3cay.mjs.map +0 -1
- package/dist/url-pattern-hVbqpXs6.mjs +0 -41
- package/dist/url-pattern-hVbqpXs6.mjs.map +0 -1
- package/dist/user-Dnp53zTq.mjs +0 -171
- package/dist/user-Dnp53zTq.mjs.map +0 -1
- package/dist/utils-CoV-PYhg.mjs +0 -439
- package/dist/utils-CoV-PYhg.mjs.map +0 -1
- package/dist/validate-CfQ9_YlD.d.mts +0 -468
- package/dist/validate-CfQ9_YlD.d.mts.map +0 -1
- package/dist/validate-DBX3DKtL.mjs +0 -516
- package/dist/validate-DBX3DKtL.mjs.map +0 -1
- package/dist/validation-BJMiDhB1.mjs +0 -219
- package/dist/validation-BJMiDhB1.mjs.map +0 -1
- package/dist/version-BaT8yKIT.mjs +0 -7
- package/dist/version-BaT8yKIT.mjs.map +0 -1
- package/dist/version-BwEGkqkx.mjs +0 -9
- package/dist/version-BwEGkqkx.mjs.map +0 -1
- package/dist/virtual-modules-B6vJW15k.mjs +0 -516
- package/dist/virtual-modules-B6vJW15k.mjs.map +0 -1
- package/dist/widgets-BkxBAgZ_.mjs +0 -126
- package/dist/widgets-BkxBAgZ_.mjs.map +0 -1
- package/dist/wxr-taxonomies-D7gAJyOF.mjs +0 -453
- package/dist/wxr-taxonomies-D7gAJyOF.mjs.map +0 -1
- package/dist/wxr-taxonomies-DM5J9AsT.d.mts +0 -34
- package/dist/wxr-taxonomies-DM5J9AsT.d.mts.map +0 -1
- /package/dist/{api-tokens-BLz2MtQs.mjs → api-tokens-D2zgAIEt.mjs} +0 -0
- /package/dist/{ssrf-tA45vIPX.mjs → ssrf-BvNItdxk.mjs} +0 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { m as listTablesLike, p as listTableColumns } from "./dialect-helpers-7_IqPdh9.mjs";
|
|
2
|
+
import { sql } from "kysely";
|
|
3
|
+
|
|
4
|
+
//#region src/api/handlers/snapshot.ts
|
|
5
|
+
/**
|
|
6
|
+
* Verify HMAC-SHA256 preview signature using crypto.subtle.
|
|
7
|
+
* Returns true if the signature is valid and not expired.
|
|
8
|
+
*/
|
|
9
|
+
async function verifyPreviewSignature(source, exp, sig, secret) {
|
|
10
|
+
if (exp < Date.now() / 1e3) return false;
|
|
11
|
+
const encoder = new TextEncoder();
|
|
12
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
|
|
13
|
+
name: "HMAC",
|
|
14
|
+
hash: "SHA-256"
|
|
15
|
+
}, false, ["verify"]);
|
|
16
|
+
const sigBytes = new Uint8Array(sig.length / 2);
|
|
17
|
+
for (let i = 0; i < sig.length; i += 2) sigBytes[i / 2] = parseInt(sig.substring(i, i + 2), 16);
|
|
18
|
+
return crypto.subtle.verify("HMAC", key, sigBytes, encoder.encode(`${source}:${exp}`));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse an X-Preview-Signature header value into its components.
|
|
22
|
+
*
|
|
23
|
+
* Format: "source:exp:sig" where source is a URL (contains colons),
|
|
24
|
+
* exp is a unix timestamp, and sig is 64 hex chars.
|
|
25
|
+
*
|
|
26
|
+
* Parses from the right since source URLs contain colons.
|
|
27
|
+
*
|
|
28
|
+
* @returns Parsed components, or null if the format is invalid
|
|
29
|
+
*/
|
|
30
|
+
function parsePreviewSignatureHeader(header) {
|
|
31
|
+
const lastColon = header.lastIndexOf(":");
|
|
32
|
+
if (lastColon <= 0) return null;
|
|
33
|
+
const sig = header.substring(lastColon + 1);
|
|
34
|
+
if (sig.length !== 64) return null;
|
|
35
|
+
const rest = header.substring(0, lastColon);
|
|
36
|
+
const secondLastColon = rest.lastIndexOf(":");
|
|
37
|
+
if (secondLastColon <= 0) return null;
|
|
38
|
+
const source = rest.substring(0, secondLastColon);
|
|
39
|
+
const exp = parseInt(rest.substring(secondLastColon + 1), 10);
|
|
40
|
+
if (isNaN(exp) || source.length === 0) return null;
|
|
41
|
+
return {
|
|
42
|
+
source,
|
|
43
|
+
exp,
|
|
44
|
+
sig
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const MEDIA_FILE_PREFIX = "/_emdash/api/media/file/";
|
|
48
|
+
const MEDIA_FILE_SUFFIX = /[?#]/;
|
|
49
|
+
const EXTERNAL_OR_ROOT_URL = /^(?:[a-z][a-z0-9+.-]*:|\/)/i;
|
|
50
|
+
/**
|
|
51
|
+
* Parse a JSON string value and inject `src` for local media objects.
|
|
52
|
+
* Returns the original string if it's not a local media value.
|
|
53
|
+
*/
|
|
54
|
+
function injectMediaSrc(jsonStr, origin) {
|
|
55
|
+
try {
|
|
56
|
+
const obj = JSON.parse(jsonStr);
|
|
57
|
+
if (typeof obj !== "object" || obj === null || Array.isArray(obj)) return jsonStr;
|
|
58
|
+
if (injectMediaSrcInto(obj, origin)) return JSON.stringify(obj);
|
|
59
|
+
return jsonStr;
|
|
60
|
+
} catch {
|
|
61
|
+
return jsonStr;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function isRecord(value) {
|
|
65
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Recursively walk an object and inject `src` into local media values.
|
|
69
|
+
* Returns true if any modifications were made.
|
|
70
|
+
*/
|
|
71
|
+
function injectMediaSrcInto(obj, origin) {
|
|
72
|
+
let modified = false;
|
|
73
|
+
if ((obj.provider === "local" || !obj.provider && obj.id && obj.meta) && !obj.src) {
|
|
74
|
+
const storageKey = (isRecord(obj.meta) ? obj.meta : void 0)?.storageKey ?? obj.id;
|
|
75
|
+
if (typeof storageKey === "string" && storageKey) {
|
|
76
|
+
obj.src = `${origin}${MEDIA_FILE_PREFIX}${storageKey}`;
|
|
77
|
+
modified = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const value of Object.values(obj)) if (Array.isArray(value)) {
|
|
81
|
+
for (const item of value) if (isRecord(item)) {
|
|
82
|
+
if (injectMediaSrcInto(item, origin)) modified = true;
|
|
83
|
+
}
|
|
84
|
+
} else if (isRecord(value)) {
|
|
85
|
+
if (injectMediaSrcInto(value, origin)) modified = true;
|
|
86
|
+
}
|
|
87
|
+
return modified;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Safe identifier pattern for snapshot table names.
|
|
91
|
+
* More permissive than validateIdentifier() — allows leading underscores
|
|
92
|
+
* (needed for system tables like _emdash_collections).
|
|
93
|
+
*/
|
|
94
|
+
const SAFE_TABLE_NAME = /^[a-z_][a-z0-9_]*$/;
|
|
95
|
+
/**
|
|
96
|
+
* System tables included in snapshots.
|
|
97
|
+
* Content tables (ec_*) are discovered dynamically.
|
|
98
|
+
*/
|
|
99
|
+
const SYSTEM_TABLES = [
|
|
100
|
+
"_emdash_block_types",
|
|
101
|
+
"_emdash_block_type_versions",
|
|
102
|
+
"_emdash_collections",
|
|
103
|
+
"_emdash_fields",
|
|
104
|
+
"_emdash_taxonomy_defs",
|
|
105
|
+
"_emdash_taxonomy_def_groups",
|
|
106
|
+
"_emdash_menus",
|
|
107
|
+
"_emdash_menu_items",
|
|
108
|
+
"_emdash_sections",
|
|
109
|
+
"_emdash_widget_areas",
|
|
110
|
+
"_emdash_widgets",
|
|
111
|
+
"_emdash_seo",
|
|
112
|
+
"_emdash_migrations",
|
|
113
|
+
"content_taxonomies",
|
|
114
|
+
"taxonomies",
|
|
115
|
+
"options",
|
|
116
|
+
"media",
|
|
117
|
+
"revisions"
|
|
118
|
+
];
|
|
119
|
+
/**
|
|
120
|
+
* Published snapshots are available to preview-signature callers, so every
|
|
121
|
+
* system table must be classified explicitly. Adding a snapshot table without
|
|
122
|
+
* choosing a policy is a type error rather than an accidental data export.
|
|
123
|
+
*/
|
|
124
|
+
const PUBLISHED_TABLE_POLICIES = {
|
|
125
|
+
_emdash_block_types: "full",
|
|
126
|
+
_emdash_block_type_versions: "full",
|
|
127
|
+
_emdash_collections: "full",
|
|
128
|
+
_emdash_fields: "full",
|
|
129
|
+
_emdash_taxonomy_defs: "full",
|
|
130
|
+
_emdash_taxonomy_def_groups: "full",
|
|
131
|
+
_emdash_menus: "full",
|
|
132
|
+
_emdash_menu_items: "content-linked",
|
|
133
|
+
_emdash_sections: "full",
|
|
134
|
+
_emdash_widget_areas: "full",
|
|
135
|
+
_emdash_widgets: "full",
|
|
136
|
+
_emdash_seo: "content-linked",
|
|
137
|
+
_emdash_migrations: "full",
|
|
138
|
+
content_taxonomies: "content-linked",
|
|
139
|
+
taxonomies: "content-linked",
|
|
140
|
+
options: "content-linked",
|
|
141
|
+
media: "content-linked",
|
|
142
|
+
revisions: "omit"
|
|
143
|
+
};
|
|
144
|
+
const SYSTEM_TABLE_SET = new Set(SYSTEM_TABLES);
|
|
145
|
+
function isSystemTable(tableName) {
|
|
146
|
+
return SYSTEM_TABLE_SET.has(tableName);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Table name prefixes excluded from snapshots (auth/security data).
|
|
150
|
+
*/
|
|
151
|
+
const EXCLUDED_PREFIXES = [
|
|
152
|
+
"_emdash_api_tokens",
|
|
153
|
+
"_emdash_oauth_tokens",
|
|
154
|
+
"_emdash_authorization_codes",
|
|
155
|
+
"_emdash_device_codes",
|
|
156
|
+
"_emdash_migrations_lock",
|
|
157
|
+
"_emdash_transfer_",
|
|
158
|
+
"_plugin_",
|
|
159
|
+
"users",
|
|
160
|
+
"sessions",
|
|
161
|
+
"credentials",
|
|
162
|
+
"challenges"
|
|
163
|
+
];
|
|
164
|
+
/**
|
|
165
|
+
* Options key prefixes safe for inclusion in snapshots.
|
|
166
|
+
*
|
|
167
|
+
* The options table contains plugin secrets (plugin:*), passkey challenges
|
|
168
|
+
* (emdash:passkey_pending:*), and setup state that must not leak to
|
|
169
|
+
* preview databases. Only site-level rendering settings are needed.
|
|
170
|
+
*/
|
|
171
|
+
const SAFE_OPTIONS_PREFIXES = ["site:"];
|
|
172
|
+
function isExcluded(tableName) {
|
|
173
|
+
return EXCLUDED_PREFIXES.some((prefix) => tableName.startsWith(prefix));
|
|
174
|
+
}
|
|
175
|
+
function normalizeColumnType(type) {
|
|
176
|
+
switch (type.toLowerCase()) {
|
|
177
|
+
case "smallint":
|
|
178
|
+
case "integer":
|
|
179
|
+
case "bigint":
|
|
180
|
+
case "boolean": return "INTEGER";
|
|
181
|
+
case "real":
|
|
182
|
+
case "double precision":
|
|
183
|
+
case "numeric":
|
|
184
|
+
case "decimal": return "REAL";
|
|
185
|
+
case "blob":
|
|
186
|
+
case "bytea": return "BLOB";
|
|
187
|
+
case "json":
|
|
188
|
+
case "jsonb": return "JSON";
|
|
189
|
+
default: return "TEXT";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function normalizeRows(rows, types) {
|
|
193
|
+
for (const row of rows) for (const [column, type] of Object.entries(types)) {
|
|
194
|
+
const value = row[column];
|
|
195
|
+
if (type === "JSON" && value !== null && value !== void 0 && typeof value !== "string") row[column] = JSON.stringify(value);
|
|
196
|
+
}
|
|
197
|
+
return rows;
|
|
198
|
+
}
|
|
199
|
+
function createPublishedProjection() {
|
|
200
|
+
return {
|
|
201
|
+
content: /* @__PURE__ */ new Map(),
|
|
202
|
+
taxonomyGroups: /* @__PURE__ */ new Set(),
|
|
203
|
+
mediaIds: /* @__PURE__ */ new Set(),
|
|
204
|
+
mediaStorageKeys: /* @__PURE__ */ new Set()
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function readString(value) {
|
|
208
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
209
|
+
}
|
|
210
|
+
function recordPublishedContent(projection, tableName, rows) {
|
|
211
|
+
const references = {
|
|
212
|
+
ids: /* @__PURE__ */ new Set(),
|
|
213
|
+
translationGroups: /* @__PURE__ */ new Set()
|
|
214
|
+
};
|
|
215
|
+
for (const row of rows) {
|
|
216
|
+
const id = readString(row.id);
|
|
217
|
+
const translationGroup = readString(row.translation_group);
|
|
218
|
+
if (id) references.ids.add(id);
|
|
219
|
+
if (translationGroup) references.translationGroups.add(translationGroup);
|
|
220
|
+
}
|
|
221
|
+
projection.content.set(tableName.slice(3), references);
|
|
222
|
+
}
|
|
223
|
+
function isPublishedContentReference(projection, collection, reference) {
|
|
224
|
+
const collectionName = readString(collection);
|
|
225
|
+
const id = readString(reference);
|
|
226
|
+
if (!collectionName || !id) return false;
|
|
227
|
+
const references = projection.content.get(collectionName);
|
|
228
|
+
return references?.ids.has(id) === true || references?.translationGroups.has(id) === true;
|
|
229
|
+
}
|
|
230
|
+
function collectMediaReferences(value, projection) {
|
|
231
|
+
if (typeof value === "string") {
|
|
232
|
+
if (value.startsWith(MEDIA_FILE_PREFIX)) {
|
|
233
|
+
const storageKey = value.slice(24).split(MEDIA_FILE_SUFFIX, 1)[0];
|
|
234
|
+
if (storageKey) projection.mediaStorageKeys.add(storageKey);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const trimmed = value.trimStart();
|
|
238
|
+
if (trimmed.startsWith("{") || trimmed.startsWith("[")) try {
|
|
239
|
+
collectMediaReferences(JSON.parse(value), projection);
|
|
240
|
+
} catch {}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (Array.isArray(value)) {
|
|
244
|
+
for (const item of value) collectMediaReferences(item, projection);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (!isRecord(value)) return;
|
|
248
|
+
const mediaId = readString(value.mediaId);
|
|
249
|
+
if (mediaId) projection.mediaIds.add(mediaId);
|
|
250
|
+
const provider = readString(value.provider);
|
|
251
|
+
const meta = isRecord(value.meta) ? value.meta : null;
|
|
252
|
+
const localMediaId = readString(value.id);
|
|
253
|
+
if ((provider === "local" || !provider && meta) && localMediaId) projection.mediaIds.add(localMediaId);
|
|
254
|
+
const storageKey = readString(value.storageKey) ?? readString(meta?.storageKey);
|
|
255
|
+
if (storageKey) projection.mediaStorageKeys.add(storageKey);
|
|
256
|
+
const assetRef = readString((isRecord(value.asset) ? value.asset : null)?._ref);
|
|
257
|
+
if (assetRef) {
|
|
258
|
+
projection.mediaIds.add(assetRef);
|
|
259
|
+
projection.mediaStorageKeys.add(assetRef);
|
|
260
|
+
}
|
|
261
|
+
for (const child of Object.values(value)) collectMediaReferences(child, projection);
|
|
262
|
+
}
|
|
263
|
+
function projectTaxonomyRows(rows, projection) {
|
|
264
|
+
const includedGroups = new Set(projection.taxonomyGroups);
|
|
265
|
+
const includedIds = new Set(projection.taxonomyGroups);
|
|
266
|
+
let changed = true;
|
|
267
|
+
while (changed) {
|
|
268
|
+
changed = false;
|
|
269
|
+
for (const row of rows) {
|
|
270
|
+
const id = readString(row.id);
|
|
271
|
+
const group = readString(row.translation_group);
|
|
272
|
+
if (!id) continue;
|
|
273
|
+
if (includedIds.has(id) || group && includedGroups.has(group)) {
|
|
274
|
+
if (!includedIds.has(id)) {
|
|
275
|
+
includedIds.add(id);
|
|
276
|
+
changed = true;
|
|
277
|
+
}
|
|
278
|
+
if (group && !includedGroups.has(group)) {
|
|
279
|
+
includedGroups.add(group);
|
|
280
|
+
changed = true;
|
|
281
|
+
}
|
|
282
|
+
const parentId = readString(row.parent_id);
|
|
283
|
+
if (parentId && !includedIds.has(parentId)) {
|
|
284
|
+
includedIds.add(parentId);
|
|
285
|
+
changed = true;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return rows.filter((row) => {
|
|
291
|
+
const id = readString(row.id);
|
|
292
|
+
const group = readString(row.translation_group);
|
|
293
|
+
return id && includedIds.has(id) || group && includedGroups.has(group);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
function projectPublishedRows(tableName, rows, projection) {
|
|
297
|
+
switch (tableName) {
|
|
298
|
+
case "_emdash_seo": return rows.filter((row) => {
|
|
299
|
+
if (!isPublishedContentReference(projection, row.collection, row.content_id)) return false;
|
|
300
|
+
const image = readString(row.seo_image);
|
|
301
|
+
if (image) {
|
|
302
|
+
collectMediaReferences(image, projection);
|
|
303
|
+
if (!EXTERNAL_OR_ROOT_URL.test(image)) {
|
|
304
|
+
projection.mediaIds.add(image);
|
|
305
|
+
projection.mediaStorageKeys.add(image);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return true;
|
|
309
|
+
});
|
|
310
|
+
case "content_taxonomies": return rows.filter((row) => {
|
|
311
|
+
const published = isPublishedContentReference(projection, row.collection, row.entry_id);
|
|
312
|
+
const taxonomyGroup = readString(row.taxonomy_id);
|
|
313
|
+
if (published && taxonomyGroup) projection.taxonomyGroups.add(taxonomyGroup);
|
|
314
|
+
return published;
|
|
315
|
+
});
|
|
316
|
+
case "taxonomies": return projectTaxonomyRows(rows, projection);
|
|
317
|
+
case "_emdash_menu_items": return rows.filter((row) => {
|
|
318
|
+
const type = readString(row.type);
|
|
319
|
+
const referenceId = readString(row.reference_id);
|
|
320
|
+
if (!referenceId || type === "custom") return true;
|
|
321
|
+
if (type === "taxonomy") {
|
|
322
|
+
projection.taxonomyGroups.add(referenceId);
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
if (type === "collection" && !row.reference_id) return true;
|
|
326
|
+
return isPublishedContentReference(projection, readString(row.reference_collection) ?? (type === "post" || type === "page" ? `${type}s` : null), referenceId);
|
|
327
|
+
});
|
|
328
|
+
case "media": return rows.filter((row) => {
|
|
329
|
+
const id = readString(row.id);
|
|
330
|
+
const storageKey = readString(row.storage_key);
|
|
331
|
+
return id !== null && projection.mediaIds.has(id) || storageKey !== null && projection.mediaStorageKeys.has(storageKey);
|
|
332
|
+
});
|
|
333
|
+
case "options": return rows;
|
|
334
|
+
default: return [];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Generate a portable database snapshot.
|
|
339
|
+
*
|
|
340
|
+
* Discovers ec_* content tables dynamically, exports system tables
|
|
341
|
+
* needed for rendering, and includes schema info for table recreation.
|
|
342
|
+
*/
|
|
343
|
+
async function generateSnapshot(db, options) {
|
|
344
|
+
const includeDrafts = options?.includeDrafts ?? false;
|
|
345
|
+
const includeTrashed = options?.includeTrashed ?? false;
|
|
346
|
+
const optionPrefixes = options?.optionPrefixes ?? SAFE_OPTIONS_PREFIXES;
|
|
347
|
+
const optionKeys = new Set(options?.optionKeys);
|
|
348
|
+
const publishedOnly = !includeDrafts && !includeTrashed;
|
|
349
|
+
const publishedProjection = createPublishedProjection();
|
|
350
|
+
const allTables = [...await listTablesLike(db, "ec_%"), ...SYSTEM_TABLES];
|
|
351
|
+
const tables = {};
|
|
352
|
+
const schema = {};
|
|
353
|
+
for (const tableName of allTables) {
|
|
354
|
+
if (isExcluded(tableName)) continue;
|
|
355
|
+
if (!SAFE_TABLE_NAME.test(tableName)) continue;
|
|
356
|
+
const columnInfo = await listTableColumns(db, tableName);
|
|
357
|
+
if (columnInfo.length === 0) continue;
|
|
358
|
+
const columns = columnInfo.map((column) => column.name);
|
|
359
|
+
const types = {};
|
|
360
|
+
for (const column of columnInfo) types[column.name] = normalizeColumnType(column.type);
|
|
361
|
+
schema[tableName] = {
|
|
362
|
+
columns,
|
|
363
|
+
types
|
|
364
|
+
};
|
|
365
|
+
let rows;
|
|
366
|
+
if (tableName.startsWith("ec_")) if (includeTrashed) rows = (await sql`
|
|
367
|
+
SELECT * FROM ${sql.ref(tableName)}
|
|
368
|
+
`.execute(db)).rows;
|
|
369
|
+
else if (includeDrafts) rows = (await sql`
|
|
370
|
+
SELECT * FROM ${sql.ref(tableName)}
|
|
371
|
+
WHERE deleted_at IS NULL
|
|
372
|
+
`.execute(db)).rows;
|
|
373
|
+
else rows = (await sql`
|
|
374
|
+
SELECT * FROM ${sql.ref(tableName)}
|
|
375
|
+
WHERE deleted_at IS NULL
|
|
376
|
+
AND status = 'published'
|
|
377
|
+
`.execute(db)).rows;
|
|
378
|
+
else if (publishedOnly && isSystemTable(tableName) && PUBLISHED_TABLE_POLICIES[tableName] === "omit") rows = [];
|
|
379
|
+
else if (tableName === "options") rows = (await sql`
|
|
380
|
+
SELECT * FROM ${sql.ref(tableName)}
|
|
381
|
+
`.execute(db)).rows.filter((row) => {
|
|
382
|
+
const name = typeof row.name === "string" ? row.name : "";
|
|
383
|
+
return optionKeys.has(name) || optionPrefixes.some((prefix) => name.startsWith(prefix));
|
|
384
|
+
});
|
|
385
|
+
else rows = (await sql`
|
|
386
|
+
SELECT * FROM ${sql.ref(tableName)}
|
|
387
|
+
`.execute(db)).rows;
|
|
388
|
+
if (publishedOnly) {
|
|
389
|
+
if (tableName.startsWith("ec_")) recordPublishedContent(publishedProjection, tableName, rows);
|
|
390
|
+
else if (isSystemTable(tableName) && PUBLISHED_TABLE_POLICIES[tableName] === "content-linked") rows = projectPublishedRows(tableName, rows, publishedProjection);
|
|
391
|
+
for (const row of rows) collectMediaReferences(row, publishedProjection);
|
|
392
|
+
}
|
|
393
|
+
if (rows.length > 0) tables[tableName] = normalizeRows(rows, types);
|
|
394
|
+
}
|
|
395
|
+
if (options?.origin) {
|
|
396
|
+
const origin = options.origin;
|
|
397
|
+
for (const [tableName, rows] of Object.entries(tables)) {
|
|
398
|
+
if (!tableName.startsWith("ec_")) continue;
|
|
399
|
+
for (const row of rows) for (const [col, value] of Object.entries(row)) {
|
|
400
|
+
if (typeof value !== "string" || !value.startsWith("{")) continue;
|
|
401
|
+
row[col] = injectMediaSrc(value, origin);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
tables,
|
|
407
|
+
schema,
|
|
408
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
//#endregion
|
|
413
|
+
export { parsePreviewSignatureHeader as n, verifyPreviewSignature as r, generateSnapshot as t };
|
|
414
|
+
//# sourceMappingURL=snapshot-BuI_2uDe.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-BuI_2uDe.mjs","names":[],"sources":["../src/api/handlers/snapshot.ts"],"sourcesContent":["/**\n * Snapshot handler — generates a portable database snapshot.\n *\n * Returns all content tables, schema definitions, and supporting data\n * needed to render content in an isolated preview database.\n *\n * Used by:\n * - DO preview database (EmDashPreviewDB.populateFromSnapshot)\n * - Future: CLI export, backup, site migration\n */\n\nimport type { Kysely } from \"kysely\";\nimport { sql } from \"kysely\";\n\nimport { listTableColumns, listTablesLike } from \"../../database/dialect-helpers.js\";\nimport type { Database } from \"../../database/types.js\";\n\n// ─�� Preview signature verification ──────────────────────────────\n\n/**\n * Verify HMAC-SHA256 preview signature using crypto.subtle.\n * Returns true if the signature is valid and not expired.\n */\nexport async function verifyPreviewSignature(\n\tsource: string,\n\texp: number,\n\tsig: string,\n\tsecret: string,\n): Promise<boolean> {\n\tif (exp < Date.now() / 1000) return false;\n\n\tconst encoder = new TextEncoder();\n\tconst key = await crypto.subtle.importKey(\n\t\t\"raw\",\n\t\tencoder.encode(secret),\n\t\t{ name: \"HMAC\", hash: \"SHA-256\" },\n\t\tfalse,\n\t\t[\"verify\"],\n\t);\n\n\tconst sigBytes = new Uint8Array(sig.length / 2);\n\tfor (let i = 0; i < sig.length; i += 2) {\n\t\tsigBytes[i / 2] = parseInt(sig.substring(i, i + 2), 16);\n\t}\n\n\treturn crypto.subtle.verify(\"HMAC\", key, sigBytes, encoder.encode(`${source}:${exp}`));\n}\n\n/**\n * Parse an X-Preview-Signature header value into its components.\n *\n * Format: \"source:exp:sig\" where source is a URL (contains colons),\n * exp is a unix timestamp, and sig is 64 hex chars.\n *\n * Parses from the right since source URLs contain colons.\n *\n * @returns Parsed components, or null if the format is invalid\n */\nexport function parsePreviewSignatureHeader(\n\theader: string,\n): { source: string; exp: number; sig: string } | null {\n\tconst lastColon = header.lastIndexOf(\":\");\n\tif (lastColon <= 0) return null;\n\n\tconst sig = header.substring(lastColon + 1);\n\tif (sig.length !== 64) return null;\n\n\tconst rest = header.substring(0, lastColon);\n\tconst secondLastColon = rest.lastIndexOf(\":\");\n\tif (secondLastColon <= 0) return null;\n\n\tconst source = rest.substring(0, secondLastColon);\n\tconst exp = parseInt(rest.substring(secondLastColon + 1), 10);\n\n\tif (isNaN(exp) || source.length === 0) return null;\n\n\treturn { source, exp, sig };\n}\n\n// ── Media URL rewriting ─────────────────────────────────────────\n\nconst MEDIA_FILE_PREFIX = \"/_emdash/api/media/file/\";\nconst MEDIA_FILE_SUFFIX = /[?#]/;\nconst EXTERNAL_OR_ROOT_URL = /^(?:[a-z][a-z0-9+.-]*:|\\/)/i;\n\n/**\n * Parse a JSON string value and inject `src` for local media objects.\n * Returns the original string if it's not a local media value.\n */\nfunction injectMediaSrc(jsonStr: string, origin: string): string {\n\ttry {\n\t\tconst obj = JSON.parse(jsonStr);\n\t\tif (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) return jsonStr;\n\t\tif (injectMediaSrcInto(obj, origin)) {\n\t\t\treturn JSON.stringify(obj);\n\t\t}\n\t\treturn jsonStr;\n\t} catch {\n\t\treturn jsonStr;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Recursively walk an object and inject `src` into local media values.\n * Returns true if any modifications were made.\n */\nfunction injectMediaSrcInto(obj: Record<string, unknown>, origin: string): boolean {\n\tlet modified = false;\n\n\t// Check if this object itself is a local media value\n\tif ((obj.provider === \"local\" || (!obj.provider && obj.id && obj.meta)) && !obj.src) {\n\t\tconst meta = isRecord(obj.meta) ? obj.meta : undefined;\n\t\tconst storageKey = meta?.storageKey ?? obj.id;\n\t\tif (typeof storageKey === \"string\" && storageKey) {\n\t\t\tobj.src = `${origin}${MEDIA_FILE_PREFIX}${storageKey}`;\n\t\t\tmodified = true;\n\t\t}\n\t}\n\n\t// Recurse into nested objects/arrays (e.g. Portable Text with image blocks)\n\tfor (const value of Object.values(obj)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tif (isRecord(item)) {\n\t\t\t\t\tif (injectMediaSrcInto(item, origin)) {\n\t\t\t\t\t\tmodified = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isRecord(value)) {\n\t\t\tif (injectMediaSrcInto(value, origin)) {\n\t\t\t\tmodified = true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn modified;\n}\n\n// ── Snapshot generation ─────────────────────────────────────────\n\n/**\n * Safe identifier pattern for snapshot table names.\n * More permissive than validateIdentifier() — allows leading underscores\n * (needed for system tables like _emdash_collections).\n */\nconst SAFE_TABLE_NAME = /^[a-z_][a-z0-9_]*$/;\n\n/** Snapshot shape consumed by the DO preview database */\nexport interface Snapshot {\n\ttables: Record<string, Record<string, unknown>[]>;\n\tschema: Record<\n\t\tstring,\n\t\t{\n\t\t\tcolumns: string[];\n\t\t\ttypes?: Record<string, string>;\n\t\t}\n\t>;\n\tgeneratedAt: string;\n}\n\n/**\n * System tables included in snapshots.\n * Content tables (ec_*) are discovered dynamically.\n */\nconst SYSTEM_TABLES = [\n\t\"_emdash_block_types\",\n\t\"_emdash_block_type_versions\",\n\t\"_emdash_collections\",\n\t\"_emdash_fields\",\n\t\"_emdash_taxonomy_defs\",\n\t\"_emdash_taxonomy_def_groups\",\n\t\"_emdash_menus\",\n\t\"_emdash_menu_items\",\n\t\"_emdash_sections\",\n\t\"_emdash_widget_areas\",\n\t\"_emdash_widgets\",\n\t\"_emdash_seo\",\n\t\"_emdash_migrations\",\n\t\"content_taxonomies\",\n\t\"taxonomies\",\n\t\"options\",\n\t\"media\",\n\t\"revisions\",\n] as const;\n\ntype SystemTable = (typeof SYSTEM_TABLES)[number];\ntype PublishedTablePolicy = \"full\" | \"content-linked\" | \"omit\";\n\n/**\n * Published snapshots are available to preview-signature callers, so every\n * system table must be classified explicitly. Adding a snapshot table without\n * choosing a policy is a type error rather than an accidental data export.\n */\nconst PUBLISHED_TABLE_POLICIES: Record<SystemTable, PublishedTablePolicy> = {\n\t_emdash_block_types: \"full\",\n\t_emdash_block_type_versions: \"full\",\n\t_emdash_collections: \"full\",\n\t_emdash_fields: \"full\",\n\t_emdash_taxonomy_defs: \"full\",\n\t_emdash_taxonomy_def_groups: \"full\",\n\t_emdash_menus: \"full\",\n\t_emdash_menu_items: \"content-linked\",\n\t_emdash_sections: \"full\",\n\t_emdash_widget_areas: \"full\",\n\t_emdash_widgets: \"full\",\n\t_emdash_seo: \"content-linked\",\n\t_emdash_migrations: \"full\",\n\tcontent_taxonomies: \"content-linked\",\n\ttaxonomies: \"content-linked\",\n\toptions: \"content-linked\",\n\tmedia: \"content-linked\",\n\trevisions: \"omit\",\n};\n\nconst SYSTEM_TABLE_SET: ReadonlySet<string> = new Set(SYSTEM_TABLES);\n\nfunction isSystemTable(tableName: string): tableName is SystemTable {\n\treturn SYSTEM_TABLE_SET.has(tableName);\n}\n\ninterface PublishedContentReferences {\n\tids: Set<string>;\n\ttranslationGroups: Set<string>;\n}\n\ninterface PublishedProjection {\n\tcontent: Map<string, PublishedContentReferences>;\n\ttaxonomyGroups: Set<string>;\n\tmediaIds: Set<string>;\n\tmediaStorageKeys: Set<string>;\n}\n\n/**\n * Table name prefixes excluded from snapshots (auth/security data).\n */\nconst EXCLUDED_PREFIXES = [\n\t\"_emdash_api_tokens\",\n\t\"_emdash_oauth_tokens\",\n\t\"_emdash_authorization_codes\",\n\t\"_emdash_device_codes\",\n\t\"_emdash_migrations_lock\",\n\t\"_emdash_transfer_\",\n\t\"_plugin_\",\n\t\"users\",\n\t\"sessions\",\n\t\"credentials\",\n\t\"challenges\",\n];\n\n/**\n * Options key prefixes safe for inclusion in snapshots.\n *\n * The options table contains plugin secrets (plugin:*), passkey challenges\n * (emdash:passkey_pending:*), and setup state that must not leak to\n * preview databases. Only site-level rendering settings are needed.\n */\nconst SAFE_OPTIONS_PREFIXES = [\"site:\"];\n\nfunction isExcluded(tableName: string): boolean {\n\treturn EXCLUDED_PREFIXES.some((prefix) => tableName.startsWith(prefix));\n}\n\ntype SnapshotColumnType = \"TEXT\" | \"INTEGER\" | \"REAL\" | \"BLOB\" | \"JSON\";\n\nfunction normalizeColumnType(type: string): SnapshotColumnType {\n\tswitch (type.toLowerCase()) {\n\t\tcase \"smallint\":\n\t\tcase \"integer\":\n\t\tcase \"bigint\":\n\t\tcase \"boolean\":\n\t\t\treturn \"INTEGER\";\n\t\tcase \"real\":\n\t\tcase \"double precision\":\n\t\tcase \"numeric\":\n\t\tcase \"decimal\":\n\t\t\treturn \"REAL\";\n\t\tcase \"blob\":\n\t\tcase \"bytea\":\n\t\t\treturn \"BLOB\";\n\t\tcase \"json\":\n\t\tcase \"jsonb\":\n\t\t\treturn \"JSON\";\n\t\tdefault:\n\t\t\treturn \"TEXT\";\n\t}\n}\n\nfunction normalizeRows(\n\trows: Record<string, unknown>[],\n\ttypes: Record<string, SnapshotColumnType>,\n): Record<string, unknown>[] {\n\tfor (const row of rows) {\n\t\tfor (const [column, type] of Object.entries(types)) {\n\t\t\tconst value = row[column];\n\t\t\tif (type === \"JSON\" && value !== null && value !== undefined && typeof value !== \"string\") {\n\t\t\t\trow[column] = JSON.stringify(value);\n\t\t\t}\n\t\t}\n\t}\n\treturn rows;\n}\n\nfunction createPublishedProjection(): PublishedProjection {\n\treturn {\n\t\tcontent: new Map(),\n\t\ttaxonomyGroups: new Set(),\n\t\tmediaIds: new Set(),\n\t\tmediaStorageKeys: new Set(),\n\t};\n}\n\nfunction readString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction recordPublishedContent(\n\tprojection: PublishedProjection,\n\ttableName: string,\n\trows: Record<string, unknown>[],\n): void {\n\tconst references: PublishedContentReferences = {\n\t\tids: new Set(),\n\t\ttranslationGroups: new Set(),\n\t};\n\tfor (const row of rows) {\n\t\tconst id = readString(row.id);\n\t\tconst translationGroup = readString(row.translation_group);\n\t\tif (id) references.ids.add(id);\n\t\tif (translationGroup) references.translationGroups.add(translationGroup);\n\t}\n\tprojection.content.set(tableName.slice(\"ec_\".length), references);\n}\n\nfunction isPublishedContentReference(\n\tprojection: PublishedProjection,\n\tcollection: unknown,\n\treference: unknown,\n): boolean {\n\tconst collectionName = readString(collection);\n\tconst id = readString(reference);\n\tif (!collectionName || !id) return false;\n\tconst references = projection.content.get(collectionName);\n\treturn references?.ids.has(id) === true || references?.translationGroups.has(id) === true;\n}\n\nfunction collectMediaReferences(value: unknown, projection: PublishedProjection): void {\n\tif (typeof value === \"string\") {\n\t\tif (value.startsWith(MEDIA_FILE_PREFIX)) {\n\t\t\tconst storageKey = value.slice(MEDIA_FILE_PREFIX.length).split(MEDIA_FILE_SUFFIX, 1)[0];\n\t\t\tif (storageKey) projection.mediaStorageKeys.add(storageKey);\n\t\t\treturn;\n\t\t}\n\t\tconst trimmed = value.trimStart();\n\t\tif (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n\t\t\ttry {\n\t\t\t\tcollectMediaReferences(JSON.parse(value), projection);\n\t\t\t} catch {\n\t\t\t\t// Not structured data.\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) collectMediaReferences(item, projection);\n\t\treturn;\n\t}\n\tif (!isRecord(value)) return;\n\n\tconst mediaId = readString(value.mediaId);\n\tif (mediaId) projection.mediaIds.add(mediaId);\n\n\tconst provider = readString(value.provider);\n\tconst meta = isRecord(value.meta) ? value.meta : null;\n\tconst localMediaId = readString(value.id);\n\tif ((provider === \"local\" || (!provider && meta)) && localMediaId) {\n\t\tprojection.mediaIds.add(localMediaId);\n\t}\n\tconst storageKey = readString(value.storageKey) ?? readString(meta?.storageKey);\n\tif (storageKey) projection.mediaStorageKeys.add(storageKey);\n\n\tconst asset = isRecord(value.asset) ? value.asset : null;\n\tconst assetRef = readString(asset?._ref);\n\tif (assetRef) {\n\t\tprojection.mediaIds.add(assetRef);\n\t\tprojection.mediaStorageKeys.add(assetRef);\n\t}\n\n\tfor (const child of Object.values(value)) collectMediaReferences(child, projection);\n}\n\nfunction projectTaxonomyRows(\n\trows: Record<string, unknown>[],\n\tprojection: PublishedProjection,\n): Record<string, unknown>[] {\n\tconst includedGroups = new Set(projection.taxonomyGroups);\n\tconst includedIds = new Set(projection.taxonomyGroups);\n\tlet changed = true;\n\twhile (changed) {\n\t\tchanged = false;\n\t\tfor (const row of rows) {\n\t\t\tconst id = readString(row.id);\n\t\t\tconst group = readString(row.translation_group);\n\t\t\tif (!id) continue;\n\t\t\tif (includedIds.has(id) || (group && includedGroups.has(group))) {\n\t\t\t\tif (!includedIds.has(id)) {\n\t\t\t\t\tincludedIds.add(id);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tif (group && !includedGroups.has(group)) {\n\t\t\t\t\tincludedGroups.add(group);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tconst parentId = readString(row.parent_id);\n\t\t\t\tif (parentId && !includedIds.has(parentId)) {\n\t\t\t\t\tincludedIds.add(parentId);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn rows.filter((row) => {\n\t\tconst id = readString(row.id);\n\t\tconst group = readString(row.translation_group);\n\t\treturn (id && includedIds.has(id)) || (group && includedGroups.has(group));\n\t});\n}\n\nfunction projectPublishedRows(\n\ttableName: SystemTable,\n\trows: Record<string, unknown>[],\n\tprojection: PublishedProjection,\n): Record<string, unknown>[] {\n\tswitch (tableName) {\n\t\tcase \"_emdash_seo\":\n\t\t\treturn rows.filter((row) => {\n\t\t\t\tconst published = isPublishedContentReference(projection, row.collection, row.content_id);\n\t\t\t\tif (!published) return false;\n\t\t\t\tconst image = readString(row.seo_image);\n\t\t\t\tif (image) {\n\t\t\t\t\tcollectMediaReferences(image, projection);\n\t\t\t\t\tif (!EXTERNAL_OR_ROOT_URL.test(image)) {\n\t\t\t\t\t\tprojection.mediaIds.add(image);\n\t\t\t\t\t\tprojection.mediaStorageKeys.add(image);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\tcase \"content_taxonomies\":\n\t\t\treturn rows.filter((row) => {\n\t\t\t\tconst published = isPublishedContentReference(projection, row.collection, row.entry_id);\n\t\t\t\tconst taxonomyGroup = readString(row.taxonomy_id);\n\t\t\t\tif (published && taxonomyGroup) projection.taxonomyGroups.add(taxonomyGroup);\n\t\t\t\treturn published;\n\t\t\t});\n\t\tcase \"taxonomies\":\n\t\t\treturn projectTaxonomyRows(rows, projection);\n\t\tcase \"_emdash_menu_items\":\n\t\t\treturn rows.filter((row) => {\n\t\t\t\tconst type = readString(row.type);\n\t\t\t\tconst referenceId = readString(row.reference_id);\n\t\t\t\tif (!referenceId || type === \"custom\") return true;\n\t\t\t\tif (type === \"taxonomy\") {\n\t\t\t\t\tprojection.taxonomyGroups.add(referenceId);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (type === \"collection\" && !row.reference_id) return true;\n\t\t\t\tconst collection =\n\t\t\t\t\treadString(row.reference_collection) ??\n\t\t\t\t\t(type === \"post\" || type === \"page\" ? `${type}s` : null);\n\t\t\t\treturn isPublishedContentReference(projection, collection, referenceId);\n\t\t\t});\n\t\tcase \"media\":\n\t\t\treturn rows.filter((row) => {\n\t\t\t\tconst id = readString(row.id);\n\t\t\t\tconst storageKey = readString(row.storage_key);\n\t\t\t\treturn (\n\t\t\t\t\t(id !== null && projection.mediaIds.has(id)) ||\n\t\t\t\t\t(storageKey !== null && projection.mediaStorageKeys.has(storageKey))\n\t\t\t\t);\n\t\t\t});\n\t\tcase \"options\":\n\t\t\treturn rows;\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n\nexport interface GenerateSnapshotOptions {\n\t/** Include draft and scheduled content (default: false) */\n\tincludeDrafts?: boolean;\n\t/** Include trashed content (deleted_at set). Used by backups (default: false) */\n\tincludeTrashed?: boolean;\n\t/** Origin URL for absolutizing local media URLs (e.g. \"https://mysite.com\") */\n\torigin?: string;\n\t/**\n\t * Allowlist of options-table key prefixes to include (default:\n\t * `SAFE_OPTIONS_PREFIXES`). Callers widening this must never include a\n\t * prefix that matches secrets (`emdash:preview_secret`, `plugin:`,\n\t * `emdash:passkey_pending:`) — the output may be user-downloadable.\n\t */\n\toptionPrefixes?: string[];\n\t/** Exact options-table keys to include in addition to `optionPrefixes`. */\n\toptionKeys?: string[];\n}\n\n/**\n * Generate a portable database snapshot.\n *\n * Discovers ec_* content tables dynamically, exports system tables\n * needed for rendering, and includes schema info for table recreation.\n */\nexport async function generateSnapshot(\n\tdb: Kysely<Database>,\n\toptions?: GenerateSnapshotOptions,\n): Promise<Snapshot> {\n\tconst includeDrafts = options?.includeDrafts ?? false;\n\tconst includeTrashed = options?.includeTrashed ?? false;\n\tconst optionPrefixes = options?.optionPrefixes ?? SAFE_OPTIONS_PREFIXES;\n\tconst optionKeys = new Set(options?.optionKeys);\n\tconst publishedOnly = !includeDrafts && !includeTrashed;\n\tconst publishedProjection = createPublishedProjection();\n\n\tconst contentTables = await listTablesLike(db, \"ec_%\");\n\n\t// Build list of all tables to export\n\tconst allTables = [...contentTables, ...SYSTEM_TABLES];\n\n\tconst tables: Record<string, Record<string, unknown>[]> = {};\n\tconst schema: Record<string, { columns: string[]; types?: Record<string, string> }> = {};\n\n\tfor (const tableName of allTables) {\n\t\tif (isExcluded(tableName)) continue;\n\n\t\t// Content table names come from the database catalog. Validate them\n\t\t// before passing them to sql.ref().\n\t\tif (!SAFE_TABLE_NAME.test(tableName)) continue;\n\n\t\tconst columnInfo = await listTableColumns(db, tableName);\n\t\tif (columnInfo.length === 0) continue;\n\n\t\tconst columns = columnInfo.map((column) => column.name);\n\t\tconst types: Record<string, SnapshotColumnType> = {};\n\t\tfor (const column of columnInfo) {\n\t\t\ttypes[column.name] = normalizeColumnType(column.type);\n\t\t}\n\n\t\tschema[tableName] = { columns, types };\n\n\t\tlet rows: Record<string, unknown>[];\n\n\t\tif (tableName.startsWith(\"ec_\")) {\n\t\t\tif (includeTrashed) {\n\t\t\t\trows = (\n\t\t\t\t\tawait sql<Record<string, unknown>>`\n\t\t\t\t\t\tSELECT * FROM ${sql.ref(tableName)}\n\t\t\t\t\t`.execute(db)\n\t\t\t\t).rows;\n\t\t\t} else if (includeDrafts) {\n\t\t\t\trows = (\n\t\t\t\t\tawait sql<Record<string, unknown>>`\n\t\t\t\t\t\tSELECT * FROM ${sql.ref(tableName)}\n\t\t\t\t\t\tWHERE deleted_at IS NULL\n\t\t\t\t\t`.execute(db)\n\t\t\t\t).rows;\n\t\t\t} else {\n\t\t\t\trows = (\n\t\t\t\t\tawait sql<Record<string, unknown>>`\n\t\t\t\t\t\tSELECT * FROM ${sql.ref(tableName)}\n\t\t\t\t\t\tWHERE deleted_at IS NULL\n\t\t\t\t\t\tAND status = 'published'\n\t\t\t\t\t`.execute(db)\n\t\t\t\t).rows;\n\t\t\t}\n\t\t} else if (\n\t\t\tpublishedOnly &&\n\t\t\tisSystemTable(tableName) &&\n\t\t\tPUBLISHED_TABLE_POLICIES[tableName] === \"omit\"\n\t\t) {\n\t\t\trows = [];\n\t\t} else if (tableName === \"options\") {\n\t\t\trows = (\n\t\t\t\tawait sql<Record<string, unknown>>`\n\t\t\t\t\tSELECT * FROM ${sql.ref(tableName)}\n\t\t\t\t`.execute(db)\n\t\t\t).rows.filter((row) => {\n\t\t\t\tconst name = typeof row.name === \"string\" ? row.name : \"\";\n\t\t\t\treturn optionKeys.has(name) || optionPrefixes.some((prefix) => name.startsWith(prefix));\n\t\t\t});\n\t\t} else {\n\t\t\trows = (\n\t\t\t\tawait sql<Record<string, unknown>>`\n\t\t\t\t\tSELECT * FROM ${sql.ref(tableName)}\n\t\t\t\t`.execute(db)\n\t\t\t).rows;\n\t\t}\n\n\t\tif (publishedOnly) {\n\t\t\tif (tableName.startsWith(\"ec_\")) {\n\t\t\t\trecordPublishedContent(publishedProjection, tableName, rows);\n\t\t\t} else if (\n\t\t\t\tisSystemTable(tableName) &&\n\t\t\t\tPUBLISHED_TABLE_POLICIES[tableName] === \"content-linked\"\n\t\t\t) {\n\t\t\t\trows = projectPublishedRows(tableName, rows, publishedProjection);\n\t\t\t}\n\t\t\tfor (const row of rows) collectMediaReferences(row, publishedProjection);\n\t\t}\n\n\t\tif (rows.length > 0) {\n\t\t\ttables[tableName] = normalizeRows(rows, types);\n\t\t}\n\t}\n\n\t// Absolutize local media URLs in content tables so snapshots are portable.\n\t// Local image fields are stored as JSON with provider:\"local\" and\n\t// meta.storageKey but no src — the URL is derived at render time.\n\t// For snapshots consumed by external preview services, inject src now.\n\tif (options?.origin) {\n\t\tconst origin = options.origin;\n\t\tfor (const [tableName, rows] of Object.entries(tables)) {\n\t\t\tif (!tableName.startsWith(\"ec_\")) continue;\n\t\t\tfor (const row of rows) {\n\t\t\t\tfor (const [col, value] of Object.entries(row)) {\n\t\t\t\t\tif (typeof value !== \"string\" || !value.startsWith(\"{\")) continue;\n\t\t\t\t\trow[col] = injectMediaSrc(value, origin);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ttables,\n\t\tschema,\n\t\tgeneratedAt: new Date().toISOString(),\n\t};\n}\n"],"mappings":"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"}
|