emdash 1.3.1 → 1.4.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-SK8zyN7w.mjs +26 -0
- package/dist/action-token-SK8zyN7w.mjs.map +1 -0
- package/dist/activation-CGlyigmg.mjs +387 -0
- package/dist/activation-CGlyigmg.mjs.map +1 -0
- package/dist/adapters-D9a1PfqH.d.mts +173 -0
- package/dist/adapters-D9a1PfqH.d.mts.map +1 -0
- package/dist/after-32yNRvd2.mjs +99 -0
- package/dist/after-32yNRvd2.mjs.map +1 -0
- package/dist/allowed-origins-CEug-p0t.mjs +116 -0
- package/dist/allowed-origins-CEug-p0t.mjs.map +1 -0
- package/dist/api/route-utils.d.mts +4 -4
- package/dist/api/route-utils.mjs +52 -53
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +9 -9
- package/dist/api--PYoyeTo.mjs +5098 -0
- package/dist/api--PYoyeTo.mjs.map +1 -0
- package/dist/api-tokens-DqSlkDVI.mjs +9 -0
- package/dist/api-tokens-DqSlkDVI.mjs.map +1 -0
- package/dist/api-tokens-GNCsIegW.mjs +173 -0
- package/dist/api-tokens-GNCsIegW.mjs.map +1 -0
- package/dist/apply-DVnupNeS.mjs +1760 -0
- package/dist/apply-DVnupNeS.mjs.map +1 -0
- package/dist/approvals-DTtYSB27.mjs +460 -0
- package/dist/approvals-DTtYSB27.mjs.map +1 -0
- package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
- package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
- package/dist/artifacts-Dvdp2KK-.mjs +323 -0
- package/dist/artifacts-Dvdp2KK-.mjs.map +1 -0
- package/dist/astro/index.d.mts +14 -13
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +52 -12
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +12 -11
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +13 -11
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
- package/dist/astro/middleware/redirect.mjs +17 -17
- package/dist/astro/middleware/request-context.mjs +12 -7
- 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 -11
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +116 -116
- 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 -6
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
- 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 +23 -24
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -24
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +23 -24
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +19 -19
- package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -18
- package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/index.mjs +18 -18
- package/dist/astro/routes/api/admin/core-update.mjs +7 -7
- 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 +20 -20
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +24 -24
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +30 -30
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
- 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 +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +74 -75
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +84 -85
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +74 -75
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +83 -84
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +85 -86
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +75 -76
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +74 -75
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +73 -74
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +73 -74
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +6 -6
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +73 -74
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +3 -3
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -41
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -41
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -45
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -45
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +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.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
- 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 -18
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +15 -15
- 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 +9 -9
- 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.mjs +19 -19
- 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 +19 -19
- package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
- package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
- 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 +14 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -20
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +33 -33
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +35 -35
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +35 -35
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +26 -26
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
- 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 +11 -11
- package/dist/astro/routes/api/dev/emails.mjs +4 -4
- package/dist/astro/routes/api/dev/scheduled-tasks.mjs +112 -112
- package/dist/astro/routes/api/health.mjs +5 -5
- package/dist/astro/routes/api/import/probe.d.mts +3 -2
- package/dist/astro/routes/api/import/probe.d.mts.map +1 -1
- package/dist/astro/routes/api/import/probe.mjs +28 -28
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts +4 -3
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -28
- package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +12 -11
- package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +26 -27
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -11
- package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +18 -18
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -12
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -29
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +28 -28
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +12 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +38 -39
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.mjs +96 -97
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
- package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
- package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
- package/dist/astro/routes/api/media/_id_/usage.mjs +32 -32
- package/dist/astro/routes/api/media/_id_.mjs +30 -30
- 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 +57 -11
- 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 +17 -17
- package/dist/astro/routes/api/media.mjs +34 -34
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -19
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +20 -19
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +20 -19
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +20 -19
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +20 -19
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +20 -19
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
- package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
- package/dist/astro/routes/api/oauth/register.mjs +7 -7
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
- package/dist/astro/routes/api/openapi.json.mjs +20 -20
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +10 -10
- package/dist/astro/routes/api/redirects/404s/index.mjs +21 -21
- package/dist/astro/routes/api/redirects/404s/summary.mjs +21 -21
- package/dist/astro/routes/api/redirects/_id_.mjs +22 -22
- package/dist/astro/routes/api/redirects/index.mjs +22 -22
- package/dist/astro/routes/api/relations/_id_/index.mjs +35 -35
- package/dist/astro/routes/api/relations/index.mjs +35 -35
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +17 -17
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +73 -74
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +73 -74
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/index.mjs +73 -74
- package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +73 -74
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +17 -17
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +73 -74
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +73 -74
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +20 -19
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +19 -18
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +20 -19
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +10 -9
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +19 -18
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +19 -18
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
- package/dist/astro/routes/api/settings/domain.mjs +21 -21
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +27 -27
- package/dist/astro/routes/api/setup/admin-verify.mjs +22 -22
- package/dist/astro/routes/api/setup/admin.mjs +17 -17
- package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -46
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +51 -52
- 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.mjs +15 -15
- package/dist/astro/routes/api/snapshot.mjs +10 -10
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -25
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -25
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -25
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -25
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -25
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -36
- package/dist/astro/routes/api/taxonomies/index.mjs +25 -25
- package/dist/astro/routes/api/themes/preview.mjs +7 -7
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/visual-editing/action-token.mjs +7 -7
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +21 -21
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +28 -17
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +24 -20
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +23 -20
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +13 -10
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +23 -20
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +4 -4
- package/dist/astro/routes/robots.txt.mjs +14 -14
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +17 -17
- package/dist/astro/routes/sitemap.xml.mjs +15 -15
- package/dist/astro/types.d.mts +21 -19
- 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-CQlB3JzE.mjs +5183 -0
- package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
- package/dist/authorize-NJgp8kLI.mjs +74 -0
- package/dist/authorize-NJgp8kLI.mjs.map +1 -0
- package/dist/backup-8rPSJ28a.mjs +246 -0
- package/dist/backup-8rPSJ28a.mjs.map +1 -0
- package/dist/block-types-BbOrfnWs.mjs +132 -0
- package/dist/block-types-BbOrfnWs.mjs.map +1 -0
- package/dist/block-values-Dg0-8PPS.mjs +215 -0
- package/dist/block-values-Dg0-8PPS.mjs.map +1 -0
- package/dist/byline-DHJS-GGb.mjs +994 -0
- package/dist/byline-DHJS-GGb.mjs.map +1 -0
- package/dist/byline-fields-CiR8FvvF.mjs +280 -0
- package/dist/byline-fields-CiR8FvvF.mjs.map +1 -0
- package/dist/byline-fields-D6KYsEa7.mjs +123 -0
- package/dist/byline-fields-D6KYsEa7.mjs.map +1 -0
- package/dist/bylines-Bsg5cH4S.mjs +234 -0
- package/dist/bylines-Bsg5cH4S.mjs.map +1 -0
- package/dist/bylines-f_ZEc6Sn.mjs +150 -0
- package/dist/bylines-f_ZEc6Sn.mjs.map +1 -0
- package/dist/cache-5DHbpEWu.mjs +151 -0
- package/dist/cache-5DHbpEWu.mjs.map +1 -0
- package/dist/canonical-BudtH-Fx.mjs +174 -0
- package/dist/canonical-BudtH-Fx.mjs.map +1 -0
- package/dist/capture-triggers-BezAvWcB.mjs +362 -0
- package/dist/capture-triggers-BezAvWcB.mjs.map +1 -0
- package/dist/challenge-store-B1C0V4b3.mjs +51 -0
- package/dist/challenge-store-B1C0V4b3.mjs.map +1 -0
- package/dist/checksum-CEqvfxGX.mjs +162 -0
- package/dist/checksum-CEqvfxGX.mjs.map +1 -0
- package/dist/chrome-tags-BIKBMZYO.mjs +24 -0
- package/dist/chrome-tags-BIKBMZYO.mjs.map +1 -0
- package/dist/chunks-DiW8VMwz.mjs +25 -0
- package/dist/chunks-DiW8VMwz.mjs.map +1 -0
- package/dist/cli/index.mjs +52 -53
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.d.mts +46 -46
- package/dist/client/index.mjs +2 -2
- package/dist/collection-slugs-cache-DIrLjqH-.mjs +91 -0
- package/dist/collection-slugs-cache-DIrLjqH-.mjs.map +1 -0
- package/dist/comment-DB74Zpa4.mjs +335 -0
- package/dist/comment-DB74Zpa4.mjs.map +1 -0
- package/dist/comment-reaction-BScxIWUn.mjs +85 -0
- package/dist/comment-reaction-BScxIWUn.mjs.map +1 -0
- package/dist/comments-Cor_zKml.mjs +195 -0
- package/dist/comments-Cor_zKml.mjs.map +1 -0
- package/dist/comments-yiRFx3w5.mjs +99 -0
- package/dist/comments-yiRFx3w5.mjs.map +1 -0
- package/dist/components-Brp__9xo.mjs +112 -0
- package/dist/components-Brp__9xo.mjs.map +1 -0
- package/dist/config-D44_8G9J.d.mts +41 -0
- package/dist/config-D44_8G9J.d.mts.map +1 -0
- package/dist/config-DBU6iUQB.mjs +228 -0
- package/dist/config-DBU6iUQB.mjs.map +1 -0
- package/dist/config-sDhZvkLR.d.mts +6835 -0
- package/dist/config-sDhZvkLR.d.mts.map +1 -0
- package/dist/connection-BtEN_lP9.mjs +36 -0
- package/dist/connection-BtEN_lP9.mjs.map +1 -0
- package/dist/content-BKHUVsE5.mjs +2112 -0
- package/dist/content-BKHUVsE5.mjs.map +1 -0
- package/dist/content-list-query-ByP4jRpZ.d.mts +26 -0
- package/dist/content-list-query-ByP4jRpZ.d.mts.map +1 -0
- package/dist/content-policy-BmE0MPZY.mjs +46 -0
- package/dist/content-policy-BmE0MPZY.mjs.map +1 -0
- package/dist/content-repair-Ukdxoq-R.mjs +442 -0
- package/dist/content-repair-Ukdxoq-R.mjs.map +1 -0
- package/dist/context-CzjejcsE.mjs +2089 -0
- package/dist/context-CzjejcsE.mjs.map +1 -0
- package/dist/credits-BKREepht.mjs +110 -0
- package/dist/credits-BKREepht.mjs.map +1 -0
- package/dist/cron-D7obTIfk.mjs +306 -0
- package/dist/cron-D7obTIfk.mjs.map +1 -0
- package/dist/dashboard-ynr1qJWM.mjs +168 -0
- package/dist/dashboard-ynr1qJWM.mjs.map +1 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +5 -5
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +5 -5
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +5 -5
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/default-C0W-PhAp.mjs +81 -0
- package/dist/default-C0W-PhAp.mjs.map +1 -0
- package/dist/deferred-tasks-wlMFJL95.d.mts +10 -0
- package/dist/deferred-tasks-wlMFJL95.d.mts.map +1 -0
- package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
- package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
- package/dist/device-flow-D1U392GC.mjs +519 -0
- package/dist/device-flow-D1U392GC.mjs.map +1 -0
- package/dist/dialect-helpers-B1XN2HGB.mjs +314 -0
- package/dist/dialect-helpers-B1XN2HGB.mjs.map +1 -0
- package/dist/digest-DJ1tHCgy.mjs +194 -0
- package/dist/digest-DJ1tHCgy.mjs.map +1 -0
- package/dist/direct-executor-Bs2g0ake.mjs +117 -0
- package/dist/direct-executor-Bs2g0ake.mjs.map +1 -0
- package/dist/dist-BUmWMTbN.mjs +810 -0
- package/dist/dist-BUmWMTbN.mjs.map +1 -0
- package/dist/email-console-FFVJWb9N.mjs +50 -0
- package/dist/email-console-FFVJWb9N.mjs.map +1 -0
- package/dist/email-locale-Bs3HFdnq.mjs +25 -0
- package/dist/email-locale-Bs3HFdnq.mjs.map +1 -0
- package/dist/emdash-runtime-C8T-pZpS.mjs +4425 -0
- package/dist/emdash-runtime-C8T-pZpS.mjs.map +1 -0
- package/dist/enrich-DFlfnd3u.mjs +194 -0
- package/dist/enrich-DFlfnd3u.mjs.map +1 -0
- package/dist/entry-lock-BulbgPBX.d.mts +4568 -0
- package/dist/entry-lock-BulbgPBX.d.mts.map +1 -0
- package/dist/entry-lock-CRVmruM0.mjs +1211 -0
- package/dist/entry-lock-CRVmruM0.mjs.map +1 -0
- package/dist/entry-lock-D-zJQ4q6.mjs +163 -0
- package/dist/entry-lock-D-zJQ4q6.mjs.map +1 -0
- package/dist/entry-locks-CJ9uhqg1.mjs +167 -0
- package/dist/entry-locks-CJ9uhqg1.mjs.map +1 -0
- package/dist/env-types-BE3bCvfP.mjs +38 -0
- package/dist/env-types-BE3bCvfP.mjs.map +1 -0
- package/dist/error-BCMgPxdn.mjs +90 -0
- package/dist/error-BCMgPxdn.mjs.map +1 -0
- package/dist/errors-8gJqv-XV.mjs +492 -0
- package/dist/errors-8gJqv-XV.mjs.map +1 -0
- package/dist/errors-B4f4It-2.mjs +120 -0
- package/dist/errors-B4f4It-2.mjs.map +1 -0
- package/dist/escape-lsNq38PP.mjs +9 -0
- package/dist/escape-lsNq38PP.mjs.map +1 -0
- package/dist/fence-Dagicj14.mjs +162 -0
- package/dist/fence-Dagicj14.mjs.map +1 -0
- package/dist/field-map-BSXdNGt5.mjs +84 -0
- package/dist/field-map-BSXdNGt5.mjs.map +1 -0
- package/dist/fts-manager-6861qcwk.mjs +489 -0
- package/dist/fts-manager-6861qcwk.mjs.map +1 -0
- package/dist/gc-CNkXB3mE.mjs +75 -0
- package/dist/gc-CNkXB3mE.mjs.map +1 -0
- package/dist/hash-BJaeek87.mjs +37 -0
- package/dist/hash-BJaeek87.mjs.map +1 -0
- package/dist/hreflang-8dUOJAPJ.d.mts +50 -0
- package/dist/hreflang-8dUOJAPJ.d.mts.map +1 -0
- package/dist/hreflang-BW5A4FLK.mjs +105 -0
- package/dist/hreflang-BW5A4FLK.mjs.map +1 -0
- package/dist/http-route-dispatch-rXKvTNm9.mjs +342 -0
- package/dist/http-route-dispatch-rXKvTNm9.mjs.map +1 -0
- package/dist/identity-CPRRSovU.mjs +35 -0
- package/dist/identity-CPRRSovU.mjs.map +1 -0
- package/dist/import-yVbfPyfd.mjs +2126 -0
- package/dist/import-yVbfPyfd.mjs.map +1 -0
- package/dist/index-VM7Fzxwe.d.mts +260 -0
- package/dist/index-VM7Fzxwe.d.mts.map +1 -0
- package/dist/index.d.mts +23 -22
- package/dist/index.mjs +104 -105
- package/dist/install-finalization-RU6VrHOX.mjs +58 -0
- package/dist/install-finalization-RU6VrHOX.mjs.map +1 -0
- package/dist/json-recordset-D0WhN2UA.mjs +12 -0
- package/dist/json-recordset-D0WhN2UA.mjs.map +1 -0
- package/dist/json-schema-v_D_pPNG.mjs +15 -0
- package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
- package/dist/keys-CifIkT0N.mjs +61 -0
- package/dist/keys-CifIkT0N.mjs.map +1 -0
- package/dist/kinds-B_Qcl5pz.mjs +974 -0
- package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
- package/dist/lifecycle-B8d7Rdqx.mjs +25 -0
- package/dist/lifecycle-B8d7Rdqx.mjs.map +1 -0
- package/dist/load-D4xtzm6h.mjs +28 -0
- package/dist/load-D4xtzm6h.mjs.map +1 -0
- package/dist/loader-DhnedqY4.mjs +1478 -0
- package/dist/loader-DhnedqY4.mjs.map +1 -0
- package/dist/loops-B2YS-Zzr.mjs +205 -0
- package/dist/loops-B2YS-Zzr.mjs.map +1 -0
- package/dist/manifest-builder-g1FLviel.mjs +196 -0
- package/dist/manifest-builder-g1FLviel.mjs.map +1 -0
- package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
- package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
- package/dist/marketplace-CqbgeIa7.mjs +257 -0
- package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +3 -3
- package/dist/media/local-runtime.d.mts +14 -13
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +14 -14
- package/dist/media-BR4_t-Wd.mjs +416 -0
- package/dist/media-BR4_t-Wd.mjs.map +1 -0
- package/dist/media-CikS-q6E.mjs +294 -0
- package/dist/media-CikS-q6E.mjs.map +1 -0
- package/dist/media-DepNLhPq.mjs +383 -0
- package/dist/media-DepNLhPq.mjs.map +1 -0
- package/dist/media-allowlist-BMBLqyWh.mjs +45 -0
- package/dist/media-allowlist-BMBLqyWh.mjs.map +1 -0
- package/dist/media-folders-CI0Wydfo.mjs +210 -0
- package/dist/media-folders-CI0Wydfo.mjs.map +1 -0
- package/dist/media-url-BQgKvpQ5.mjs +43 -0
- package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
- package/dist/media-usage-X1_20MY-.mjs +282 -0
- package/dist/media-usage-X1_20MY-.mjs.map +1 -0
- package/dist/media-usage-activation-bWusy3M2.mjs +78 -0
- package/dist/media-usage-activation-bWusy3M2.mjs.map +1 -0
- package/dist/media-usage-work-B2RaoJIa.mjs +151 -0
- package/dist/media-usage-work-B2RaoJIa.mjs.map +1 -0
- package/dist/media-usage-work-BCK2J-v_.mjs +1036 -0
- package/dist/media-usage-work-BCK2J-v_.mjs.map +1 -0
- package/dist/menus-B0Qqv_cS.mjs +837 -0
- package/dist/menus-B0Qqv_cS.mjs.map +1 -0
- package/dist/menus-oypxT1pI.mjs +3802 -0
- package/dist/menus-oypxT1pI.mjs.map +1 -0
- package/dist/menus-uEAxWAm1.mjs +92 -0
- package/dist/menus-uEAxWAm1.mjs.map +1 -0
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +4 -4
- package/dist/mime-D1We9jUx.mjs +81 -0
- package/dist/mime-D1We9jUx.mjs.map +1 -0
- package/dist/mode-C-D3qICy.mjs +23 -0
- package/dist/mode-C-D3qICy.mjs.map +1 -0
- package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
- package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
- package/dist/normalize-Cx-bNwhP.mjs +220 -0
- package/dist/normalize-Cx-bNwhP.mjs.map +1 -0
- package/dist/oauth-authorization-CPLgBrdo.mjs +287 -0
- package/dist/oauth-authorization-CPLgBrdo.mjs.map +1 -0
- package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
- package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
- package/dist/oauth-state-store-BndCfRum.mjs +50 -0
- package/dist/oauth-state-store-BndCfRum.mjs.map +1 -0
- package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
- package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/object-cache-DmKr09La.mjs +603 -0
- package/dist/object-cache-DmKr09La.mjs.map +1 -0
- package/dist/options-BUUgroHg.d.mts +81 -0
- package/dist/options-BUUgroHg.d.mts.map +1 -0
- package/dist/ownership-MiyA7qKO.mjs +12 -0
- package/dist/ownership-MiyA7qKO.mjs.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +13 -13
- package/dist/parse-B_b6gZxG.mjs +81 -0
- package/dist/parse-B_b6gZxG.mjs.map +1 -0
- package/dist/parse-Dndx1QmN.d.mts +176 -0
- package/dist/parse-Dndx1QmN.d.mts.map +1 -0
- package/dist/passkey-config-D2Lua5__.mjs +46 -0
- package/dist/passkey-config-D2Lua5__.mjs.map +1 -0
- package/dist/paths-biDzFTY2.mjs +77 -0
- package/dist/paths-biDzFTY2.mjs.map +1 -0
- package/dist/placeholder-CSKu5OkD.d.mts +314 -0
- package/dist/placeholder-CSKu5OkD.d.mts.map +1 -0
- package/dist/plan-CCoqxNoU.mjs +135 -0
- package/dist/plan-CCoqxNoU.mjs.map +1 -0
- package/dist/plugin-test-runtime.d.mts +16 -14
- package/dist/plugin-test-runtime.d.mts.map +1 -1
- package/dist/plugin-test-runtime.mjs +114 -115
- package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
- package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugin-utils.d.mts +12 -11
- package/dist/plugin-utils.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +12 -11
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
- package/dist/plugins/host.d.mts +5 -5
- package/dist/plugins/host.mjs +50 -51
- package/dist/plugins-COJ2L49n.mjs +261 -0
- package/dist/plugins-COJ2L49n.mjs.map +1 -0
- package/dist/policy-BPugqmeV.mjs +53 -0
- package/dist/policy-BPugqmeV.mjs.map +1 -0
- package/dist/portable-text-BH4zgkSm.mjs +311 -0
- package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
- package/dist/preview-DLexxwp3.mjs +107 -0
- package/dist/preview-DLexxwp3.mjs.map +1 -0
- package/dist/protocol-PoAfD_9W.d.mts +65 -0
- package/dist/protocol-PoAfD_9W.d.mts.map +1 -0
- package/dist/public-plugin-api-routes-CMljrTby.mjs +316 -0
- package/dist/public-plugin-api-routes-CMljrTby.mjs.map +1 -0
- package/dist/public-submission-ayqoyee4.mjs +251 -0
- package/dist/public-submission-ayqoyee4.mjs.map +1 -0
- package/dist/public-url-Bt98vysr.mjs +101 -0
- package/dist/public-url-Bt98vysr.mjs.map +1 -0
- package/dist/query-D62NntCZ.mjs +1146 -0
- package/dist/query-D62NntCZ.mjs.map +1 -0
- package/dist/query-LmPY2y0C.mjs +41 -0
- package/dist/query-LmPY2y0C.mjs.map +1 -0
- package/dist/range-CYfeXgGK.mjs +51 -0
- package/dist/range-CYfeXgGK.mjs.map +1 -0
- package/dist/rate-limit-C04Llsoc.mjs +127 -0
- package/dist/rate-limit-C04Llsoc.mjs.map +1 -0
- package/dist/receipt-BUsQCOeM.mjs +43 -0
- package/dist/receipt-BUsQCOeM.mjs.map +1 -0
- package/dist/redirect-CQAV7mCo.mjs +19 -0
- package/dist/redirect-CQAV7mCo.mjs.map +1 -0
- package/dist/redirect-DjLdw427.mjs +423 -0
- package/dist/redirect-DjLdw427.mjs.map +1 -0
- package/dist/redirect-paths-DOaVBp6E.mjs +36 -0
- package/dist/redirect-paths-DOaVBp6E.mjs.map +1 -0
- package/dist/redirects-Cpq1catN.mjs +446 -0
- package/dist/redirects-Cpq1catN.mjs.map +1 -0
- package/dist/redirects-CyvvZrCJ.mjs +148 -0
- package/dist/redirects-CyvvZrCJ.mjs.map +1 -0
- package/dist/registry/testing.mjs +3 -3
- package/dist/registry-B0-O575m.mjs +8374 -0
- package/dist/registry-B0-O575m.mjs.map +1 -0
- package/dist/relations-WIOojTL4.mjs +789 -0
- package/dist/relations-WIOojTL4.mjs.map +1 -0
- package/dist/request-context.d.mts +2 -2
- package/dist/request-meta-bwZ_NsvU.mjs +141 -0
- package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
- package/dist/resolve-BNnm8EkB.mjs +102 -0
- package/dist/resolve-BNnm8EkB.mjs.map +1 -0
- package/dist/route-cache-QSOyDEw0.mjs +20 -0
- package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
- package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
- package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
- package/dist/routes-avqgc-8r.mjs +272 -0
- package/dist/routes-avqgc-8r.mjs.map +1 -0
- package/dist/runner-Bkkfk4O8.mjs +6669 -0
- package/dist/runner-Bkkfk4O8.mjs.map +1 -0
- package/dist/runner-Dfgp6-S_.d.mts +73 -0
- package/dist/runner-Dfgp6-S_.d.mts.map +1 -0
- package/dist/runtime.d.mts +13 -12
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +4 -3
- package/dist/runtime.mjs.map +1 -1
- package/dist/schema/project-env-types.mjs +42 -43
- package/dist/schema/project-env-types.mjs.map +1 -1
- package/dist/schema-B-3rntlX.mjs +815 -0
- package/dist/schema-B-3rntlX.mjs.map +1 -0
- package/dist/schema-BqBlUZtb.mjs +13 -0
- package/dist/schema-BqBlUZtb.mjs.map +1 -0
- package/dist/scopes-DNaY7Ey0.mjs +34 -0
- package/dist/scopes-DNaY7Ey0.mjs.map +1 -0
- package/dist/search-BPWTnpnD.mjs +450 -0
- package/dist/search-BPWTnpnD.mjs.map +1 -0
- package/dist/secrets-Dswzrz3k.mjs +369 -0
- package/dist/secrets-Dswzrz3k.mjs.map +1 -0
- package/dist/sections-rSao6rBG.mjs +346 -0
- package/dist/sections-rSao6rBG.mjs.map +1 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +40 -41
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +27 -27
- package/dist/seo-B_H_pqOd.mjs +133 -0
- package/dist/seo-B_H_pqOd.mjs.map +1 -0
- package/dist/seo-ClB-dw9w.mjs +188 -0
- package/dist/seo-ClB-dw9w.mjs.map +1 -0
- package/dist/service-DpiUQVpp.mjs +150 -0
- package/dist/service-DpiUQVpp.mjs.map +1 -0
- package/dist/session-user-DiE4JKPP.mjs +61 -0
- package/dist/session-user-DiE4JKPP.mjs.map +1 -0
- package/dist/settings--XlUdUaI.mjs +66 -0
- package/dist/settings--XlUdUaI.mjs.map +1 -0
- package/dist/settings-D932YP2-.mjs +519 -0
- package/dist/settings-D932YP2-.mjs.map +1 -0
- package/dist/settings-Dd1uivmQ.mjs +73 -0
- package/dist/settings-Dd1uivmQ.mjs.map +1 -0
- package/dist/setup-complete-qsJYWutC.mjs +65 -0
- package/dist/setup-complete-qsJYWutC.mjs.map +1 -0
- package/dist/setup-nonce-CBFgUFXw.mjs +25 -0
- package/dist/setup-nonce-CBFgUFXw.mjs.map +1 -0
- package/dist/site-domain-oRGS_JfA.mjs +131 -0
- package/dist/site-domain-oRGS_JfA.mjs.map +1 -0
- package/dist/site-settings-DRHfX7bq.mjs +50 -0
- package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
- package/dist/site-url-MB685I5X.mjs +45 -0
- package/dist/site-url-MB685I5X.mjs.map +1 -0
- package/dist/sitemap-name-B8QP8wud.mjs +26 -0
- package/dist/sitemap-name-B8QP8wud.mjs.map +1 -0
- package/dist/slug-aVnUV4SL.mjs +16 -0
- package/dist/slug-aVnUV4SL.mjs.map +1 -0
- package/dist/snapshot-BjaXDZQ5.mjs +414 -0
- package/dist/snapshot-BjaXDZQ5.mjs.map +1 -0
- package/dist/ssrf-BcYjyM4M.mjs +406 -0
- package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
- package/dist/stage-CZQnXM_G.mjs +662 -0
- package/dist/stage-CZQnXM_G.mjs.map +1 -0
- package/dist/staged-ByBmPFtX.mjs +686 -0
- package/dist/staged-ByBmPFtX.mjs.map +1 -0
- package/dist/state-CFbGZziM.mjs +178 -0
- package/dist/state-CFbGZziM.mjs.map +1 -0
- package/dist/status-BFNdxzKc.mjs +30 -0
- package/dist/status-BFNdxzKc.mjs.map +1 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +2 -2
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/storage-query-BFp06Y0s.d.mts +1627 -0
- package/dist/storage-query-BFp06Y0s.d.mts.map +1 -0
- package/dist/tar-DFjExb9X.mjs +449 -0
- package/dist/tar-DFjExb9X.mjs.map +1 -0
- package/dist/target-CWZs2-o6.mjs +27 -0
- package/dist/target-CWZs2-o6.mjs.map +1 -0
- package/dist/taxonomies-5SR76j11.mjs +937 -0
- package/dist/taxonomies-5SR76j11.mjs.map +1 -0
- package/dist/taxonomies-B__VmCKQ.mjs +703 -0
- package/dist/taxonomies-B__VmCKQ.mjs.map +1 -0
- package/dist/taxonomy-CMI5fczd.mjs +563 -0
- package/dist/taxonomy-CMI5fczd.mjs.map +1 -0
- package/dist/tokens-BnhSnGwJ.mjs +171 -0
- package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
- package/dist/transfer-BbKfufJ4.mjs +166 -0
- package/dist/transfer-BbKfufJ4.mjs.map +1 -0
- package/dist/transfer-DTGblAj2.mjs +8910 -0
- package/dist/transfer-DTGblAj2.mjs.map +1 -0
- package/dist/transfer-download-D9LQEDX0.mjs +33 -0
- package/dist/transfer-download-D9LQEDX0.mjs.map +1 -0
- package/dist/transformations-Bx4lYY0Y.mjs +196 -0
- package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
- package/dist/transport-Dzpn5b3i.mjs +137 -0
- package/dist/transport-Dzpn5b3i.mjs.map +1 -0
- package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
- package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
- package/dist/turnstile-Cs2wfkJG.mjs +58 -0
- package/dist/turnstile-Cs2wfkJG.mjs.map +1 -0
- package/dist/types-BAsCk5KU.d.mts +87 -0
- package/dist/types-BAsCk5KU.d.mts.map +1 -0
- package/dist/types-BuvSwT9Y.d.mts +375 -0
- package/dist/types-BuvSwT9Y.d.mts.map +1 -0
- package/dist/types-C4KT3Md2.d.mts +293 -0
- package/dist/types-C4KT3Md2.d.mts.map +1 -0
- package/dist/types-CVXHwIBB.d.mts +125 -0
- package/dist/types-CVXHwIBB.d.mts.map +1 -0
- package/dist/types-C_asjp1J.mjs.map +1 -1
- package/dist/types-CgfFGfO5.mjs +16 -0
- package/dist/types-CgfFGfO5.mjs.map +1 -0
- package/dist/types-Cj0_yZkn.mjs +18 -0
- package/dist/types-Cj0_yZkn.mjs.map +1 -0
- package/dist/types-CjftrmZR.d.mts +1741 -0
- package/dist/types-CjftrmZR.d.mts.map +1 -0
- package/dist/types-DKwRUA-x.d.mts +916 -0
- package/dist/types-DKwRUA-x.d.mts.map +1 -0
- package/dist/types-DwhEvIVb.mjs.map +1 -1
- package/dist/types-GwAyS5SH.d.mts +227 -0
- package/dist/types-GwAyS5SH.d.mts.map +1 -0
- package/dist/types-qHVygneX.mjs +77 -0
- package/dist/types-qHVygneX.mjs.map +1 -0
- package/dist/types-sUHaH7lC.mjs +37 -0
- package/dist/types-sUHaH7lC.mjs.map +1 -0
- package/dist/types-uU2YNYSt.d.mts +209 -0
- package/dist/types-uU2YNYSt.d.mts.map +1 -0
- package/dist/update-check-ABBJgg6M.mjs +161 -0
- package/dist/update-check-ABBJgg6M.mjs.map +1 -0
- package/dist/upload-attempts-DPFC4COv.mjs +32 -0
- package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
- package/dist/url-pattern-QATUE_rv.mjs +41 -0
- package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
- package/dist/user-By8SzQxS.mjs +171 -0
- package/dist/user-By8SzQxS.mjs.map +1 -0
- package/dist/utils-D5uOi6WS.mjs +450 -0
- package/dist/utils-D5uOi6WS.mjs.map +1 -0
- package/dist/utils-Szp4iBQB.d.mts +376 -0
- package/dist/utils-Szp4iBQB.d.mts.map +1 -0
- package/dist/validate-DDvxy6qG.d.mts +468 -0
- package/dist/validate-DDvxy6qG.d.mts.map +1 -0
- package/dist/validate-Dz-TIOFB.mjs +524 -0
- package/dist/validate-Dz-TIOFB.mjs.map +1 -0
- package/dist/validation-Fc9ZSUS_.mjs +221 -0
- package/dist/validation-Fc9ZSUS_.mjs.map +1 -0
- package/dist/version-BZj18Q7G.mjs +9 -0
- package/dist/version-BZj18Q7G.mjs.map +1 -0
- package/dist/version-Bu6Nlbb5.mjs +7 -0
- package/dist/version-Bu6Nlbb5.mjs.map +1 -0
- package/dist/version-DqB7LIO7.mjs +49 -0
- package/dist/version-DqB7LIO7.mjs.map +1 -0
- package/dist/video-DytCnw3L.mjs +54 -0
- package/dist/video-DytCnw3L.mjs.map +1 -0
- package/dist/virtual-modules-DO954n7P.mjs +515 -0
- package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
- package/dist/widgets-BUx_Mf2q.mjs +134 -0
- package/dist/widgets-BUx_Mf2q.mjs.map +1 -0
- package/dist/wxr-taxonomies-DbJtWrWM.mjs +454 -0
- package/dist/wxr-taxonomies-DbJtWrWM.mjs.map +1 -0
- package/dist/zod-generator--nlM0930.mjs +425 -0
- package/dist/zod-generator--nlM0930.mjs.map +1 -0
- package/package.json +5 -5
- package/src/api/handlers/content.ts +49 -18
- package/src/api/handlers/device-flow.ts +1 -3
- package/src/api/handlers/menus.ts +3 -3
- package/src/api/handlers/oauth-authorization.ts +1 -3
- package/src/astro/integration/admin-nav.ts +52 -0
- package/src/astro/integration/index.ts +7 -0
- package/src/astro/integration/runtime.ts +14 -0
- package/src/astro/integration/shims/use-sync-external-store-with-selector.js +2 -0
- package/src/astro/integration/shims/use-sync-external-store.js +4 -1
- package/src/astro/middleware/auth.ts +9 -2
- package/src/astro/routes/api/import/wordpress/analyze.ts +5 -29
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +3 -3
- package/src/astro/routes/api/media/file/[...key].ts +18 -4
- package/src/astro/routes/api/oauth/token.ts +5 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +7 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
- package/src/astro/routes/api/widget-areas/[name].ts +2 -1
- package/src/astro/routes/api/widget-areas/index.ts +2 -1
- package/src/astro/types.ts +4 -3
- package/src/auth/api-tokens.ts +3 -0
- package/src/cleanup.ts +44 -0
- package/src/components/inline-bubble-menu.tsx +109 -95
- package/src/components/inline-image.tsx +54 -48
- package/src/database/dialect-helpers.ts +10 -3
- package/src/database/repositories/byline.ts +22 -14
- package/src/database/repositories/content.ts +17 -4
- package/src/database/repositories/media.ts +17 -0
- package/src/database/repositories/menu.ts +163 -132
- package/src/database/repositories/types.ts +3 -3
- package/src/database/types.ts +1 -1
- package/src/emdash-runtime.ts +23 -7
- package/src/import/utils.ts +15 -2
- package/src/index.ts +1 -0
- package/src/loader.ts +106 -95
- package/src/media/content-disposition.ts +56 -0
- package/src/media/normalize.ts +2 -0
- package/src/media/usage/content-fields.ts +2 -1
- package/src/menus/index.ts +137 -25
- package/src/object-cache/index.ts +22 -0
- package/src/plugin-test-runtime.ts +1 -0
- package/src/query.ts +44 -40
- package/src/schema/types.ts +7 -6
- package/src/search/fts-manager.ts +5 -3
- package/src/seed/apply.ts +52 -44
- package/src/seed/types.ts +3 -3
- package/src/taxonomies/index.ts +22 -51
- package/src/transfer/import/advance.ts +12 -1
- package/src/transfer/import/scaffold.ts +7 -1
- package/src/transfer/import/stages.ts +53 -2
- package/src/utils/revalidating-cache.ts +85 -0
- package/src/visual-editing/toolbar.ts +7 -2
- package/src/widgets/index.ts +27 -13
- package/dist/action-token-B1ds4laA.mjs +0 -26
- package/dist/action-token-B1ds4laA.mjs.map +0 -1
- package/dist/activation-sGF9br3X.mjs +0 -387
- package/dist/activation-sGF9br3X.mjs.map +0 -1
- package/dist/adapters-BOMSX9PU.d.mts +0 -173
- package/dist/adapters-BOMSX9PU.d.mts.map +0 -1
- package/dist/after-PcEvMY_6.mjs +0 -96
- package/dist/after-PcEvMY_6.mjs.map +0 -1
- package/dist/allowed-origins-CovsTkm3.mjs +0 -116
- package/dist/allowed-origins-CovsTkm3.mjs.map +0 -1
- package/dist/api-C_LxFnOm.mjs +0 -5077
- package/dist/api-C_LxFnOm.mjs.map +0 -1
- package/dist/api-tokens-C7l0GUAF.mjs +0 -3
- package/dist/api-tokens-DQ9Ee-vP.mjs +0 -173
- package/dist/api-tokens-DQ9Ee-vP.mjs.map +0 -1
- package/dist/apply-CLjfxvyH.mjs +0 -1758
- package/dist/apply-CLjfxvyH.mjs.map +0 -1
- package/dist/approvals-ocK89i4H.mjs +0 -460
- package/dist/approvals-ocK89i4H.mjs.map +0 -1
- package/dist/artifact-fetch-CgvvpoWQ.mjs +0 -659
- package/dist/artifact-fetch-CgvvpoWQ.mjs.map +0 -1
- package/dist/artifacts-DwOYYBQm.mjs +0 -323
- package/dist/artifacts-DwOYYBQm.mjs.map +0 -1
- package/dist/authoritative-records-LPtrIGOY.mjs +0 -5183
- package/dist/authoritative-records-LPtrIGOY.mjs.map +0 -1
- package/dist/authorize-CoDsRRp5.mjs +0 -74
- package/dist/authorize-CoDsRRp5.mjs.map +0 -1
- package/dist/backup-2Wj-hTCN.mjs +0 -246
- package/dist/backup-2Wj-hTCN.mjs.map +0 -1
- package/dist/block-types-C3gJEe7l.mjs +0 -132
- package/dist/block-types-C3gJEe7l.mjs.map +0 -1
- package/dist/block-values-CgbMtSGU.mjs +0 -215
- package/dist/block-values-CgbMtSGU.mjs.map +0 -1
- package/dist/byline-CzGZC2Zs.mjs +0 -922
- package/dist/byline-CzGZC2Zs.mjs.map +0 -1
- package/dist/byline-fields-B1qHvRps.mjs +0 -280
- package/dist/byline-fields-B1qHvRps.mjs.map +0 -1
- package/dist/byline-fields-vYd_4Q1e.mjs +0 -123
- package/dist/byline-fields-vYd_4Q1e.mjs.map +0 -1
- package/dist/bylines-BF555iIz.mjs +0 -150
- package/dist/bylines-BF555iIz.mjs.map +0 -1
- package/dist/bylines-DJx6IWWi.mjs +0 -234
- package/dist/bylines-DJx6IWWi.mjs.map +0 -1
- package/dist/cache-BWzswWB-.mjs +0 -151
- package/dist/cache-BWzswWB-.mjs.map +0 -1
- package/dist/canonical-DjF_z6GI.mjs +0 -174
- package/dist/canonical-DjF_z6GI.mjs.map +0 -1
- package/dist/capture-triggers-D7g3fOZj.mjs +0 -362
- package/dist/capture-triggers-D7g3fOZj.mjs.map +0 -1
- package/dist/challenge-store-Cfjdvw86.mjs +0 -51
- package/dist/challenge-store-Cfjdvw86.mjs.map +0 -1
- package/dist/checksum-BF4acJwn.mjs +0 -162
- package/dist/checksum-BF4acJwn.mjs.map +0 -1
- package/dist/chrome-tags-BDs29G3g.mjs +0 -24
- package/dist/chrome-tags-BDs29G3g.mjs.map +0 -1
- package/dist/chunks-CYBOL-zn.mjs +0 -25
- package/dist/chunks-CYBOL-zn.mjs.map +0 -1
- package/dist/collection-slugs-cache-B2J5aESO.mjs +0 -91
- package/dist/collection-slugs-cache-B2J5aESO.mjs.map +0 -1
- package/dist/comment-DV7dybcs.mjs +0 -335
- package/dist/comment-DV7dybcs.mjs.map +0 -1
- package/dist/comment-reaction-CWwqiT6x.mjs +0 -85
- package/dist/comment-reaction-CWwqiT6x.mjs.map +0 -1
- package/dist/comments-DVjWJm8X.mjs +0 -99
- package/dist/comments-DVjWJm8X.mjs.map +0 -1
- package/dist/comments-Q-ILHCEI.mjs +0 -195
- package/dist/comments-Q-ILHCEI.mjs.map +0 -1
- package/dist/components-DnOmvvgg.mjs +0 -112
- package/dist/components-DnOmvvgg.mjs.map +0 -1
- package/dist/config-9IzA83_U.d.mts +0 -6811
- package/dist/config-9IzA83_U.d.mts.map +0 -1
- package/dist/config-BdQzFtmR.mjs +0 -228
- package/dist/config-BdQzFtmR.mjs.map +0 -1
- package/dist/config-Cs2RBkJ6.d.mts +0 -41
- package/dist/config-Cs2RBkJ6.d.mts.map +0 -1
- package/dist/connection-CiXgZyCY.mjs +0 -36
- package/dist/connection-CiXgZyCY.mjs.map +0 -1
- package/dist/content-Dt0Os_WQ.mjs +0 -2109
- package/dist/content-Dt0Os_WQ.mjs.map +0 -1
- package/dist/content-list-query-BK26u9Ly.d.mts +0 -26
- package/dist/content-list-query-BK26u9Ly.d.mts.map +0 -1
- package/dist/content-policy-BLDbNJOb.mjs +0 -46
- package/dist/content-policy-BLDbNJOb.mjs.map +0 -1
- package/dist/content-repair-CjwbLy4m.mjs +0 -442
- package/dist/content-repair-CjwbLy4m.mjs.map +0 -1
- package/dist/context-ErV7UdQY.mjs +0 -2089
- package/dist/context-ErV7UdQY.mjs.map +0 -1
- package/dist/credits-BRyjafiF.mjs +0 -110
- package/dist/credits-BRyjafiF.mjs.map +0 -1
- package/dist/cron-Bm5xa7tv.mjs +0 -306
- package/dist/cron-Bm5xa7tv.mjs.map +0 -1
- package/dist/dashboard-DVxQ5XiI.mjs +0 -168
- package/dist/dashboard-DVxQ5XiI.mjs.map +0 -1
- package/dist/default-B9Tf2n94.mjs +0 -81
- package/dist/default-B9Tf2n94.mjs.map +0 -1
- package/dist/deferred-tasks-CpPEqsga.d.mts +0 -9
- package/dist/deferred-tasks-CpPEqsga.d.mts.map +0 -1
- package/dist/dev-typegen-ZeWYV8Jp.mjs +0 -29
- package/dist/dev-typegen-ZeWYV8Jp.mjs.map +0 -1
- package/dist/device-flow-BbYNZ9Xi.mjs +0 -521
- package/dist/device-flow-BbYNZ9Xi.mjs.map +0 -1
- package/dist/dialect-helpers-7_IqPdh9.mjs +0 -307
- package/dist/dialect-helpers-7_IqPdh9.mjs.map +0 -1
- package/dist/digest-DlBa7kJl.mjs +0 -194
- package/dist/digest-DlBa7kJl.mjs.map +0 -1
- package/dist/direct-executor-5T8gkhvA.mjs +0 -117
- package/dist/direct-executor-5T8gkhvA.mjs.map +0 -1
- package/dist/dist-DY0aOmAP.mjs +0 -810
- package/dist/dist-DY0aOmAP.mjs.map +0 -1
- package/dist/email-console-v3OM8It-.mjs +0 -50
- package/dist/email-console-v3OM8It-.mjs.map +0 -1
- package/dist/email-locale-CoZo-oZx.mjs +0 -25
- package/dist/email-locale-CoZo-oZx.mjs.map +0 -1
- package/dist/emdash-runtime-DwezbIqQ.mjs +0 -4392
- package/dist/emdash-runtime-DwezbIqQ.mjs.map +0 -1
- package/dist/enrich-C3XIJi0O.mjs +0 -194
- package/dist/enrich-C3XIJi0O.mjs.map +0 -1
- package/dist/entry-lock-CY7XpdSw.d.mts +0 -4568
- package/dist/entry-lock-CY7XpdSw.d.mts.map +0 -1
- package/dist/entry-lock-DDuWaAiP.mjs +0 -1211
- package/dist/entry-lock-DDuWaAiP.mjs.map +0 -1
- package/dist/entry-lock-D_Og9Gy3.mjs +0 -163
- package/dist/entry-lock-D_Og9Gy3.mjs.map +0 -1
- package/dist/entry-locks-Cp8_BcQQ.mjs +0 -167
- package/dist/entry-locks-Cp8_BcQQ.mjs.map +0 -1
- package/dist/env-types-Br8uywYA.mjs +0 -38
- package/dist/env-types-Br8uywYA.mjs.map +0 -1
- package/dist/error-CT2SsX5S.mjs +0 -90
- package/dist/error-CT2SsX5S.mjs.map +0 -1
- package/dist/errors-BMaCpLeS.mjs +0 -479
- package/dist/errors-BMaCpLeS.mjs.map +0 -1
- package/dist/errors-DlJwot7q.mjs +0 -120
- package/dist/errors-DlJwot7q.mjs.map +0 -1
- package/dist/escape-BfbDyuQ-.mjs +0 -9
- package/dist/escape-BfbDyuQ-.mjs.map +0 -1
- package/dist/fence-BOD3SxZG.mjs +0 -162
- package/dist/fence-BOD3SxZG.mjs.map +0 -1
- package/dist/field-defs-cache-C7sR7ZeU.mjs +0 -77
- package/dist/field-defs-cache-C7sR7ZeU.mjs.map +0 -1
- package/dist/field-map-C_rDXfdJ.mjs +0 -84
- package/dist/field-map-C_rDXfdJ.mjs.map +0 -1
- package/dist/fts-manager-BzFo0xx6.mjs +0 -483
- package/dist/fts-manager-BzFo0xx6.mjs.map +0 -1
- package/dist/gc-B_c3DPpi.mjs +0 -75
- package/dist/gc-B_c3DPpi.mjs.map +0 -1
- package/dist/hash-A-o2ZX8O.mjs +0 -37
- package/dist/hash-A-o2ZX8O.mjs.map +0 -1
- package/dist/hreflang-BpUK9Lcu.mjs +0 -105
- package/dist/hreflang-BpUK9Lcu.mjs.map +0 -1
- package/dist/hreflang-D07R-RbI.d.mts +0 -50
- package/dist/hreflang-D07R-RbI.d.mts.map +0 -1
- package/dist/http-route-dispatch-C2Ep2Uf6.mjs +0 -342
- package/dist/http-route-dispatch-C2Ep2Uf6.mjs.map +0 -1
- package/dist/identity-BivQ8wkV.mjs +0 -35
- package/dist/identity-BivQ8wkV.mjs.map +0 -1
- package/dist/import-B4UvHNJz.mjs +0 -2126
- package/dist/import-B4UvHNJz.mjs.map +0 -1
- package/dist/index-C37Ty40w.d.mts +0 -623
- package/dist/index-C37Ty40w.d.mts.map +0 -1
- package/dist/install-finalization-BbYaB4wj.mjs +0 -58
- package/dist/install-finalization-BbYaB4wj.mjs.map +0 -1
- package/dist/json-recordset-BjYIWFkV.mjs +0 -12
- package/dist/json-recordset-BjYIWFkV.mjs.map +0 -1
- package/dist/json-schema-Cde7le0s.mjs +0 -15
- package/dist/json-schema-Cde7le0s.mjs.map +0 -1
- package/dist/keys-CusTXpw-.mjs +0 -61
- package/dist/keys-CusTXpw-.mjs.map +0 -1
- package/dist/kinds-DogmNB6n.mjs +0 -974
- package/dist/kinds-DogmNB6n.mjs.map +0 -1
- package/dist/lifecycle-BLCoCz4T.mjs +0 -25
- package/dist/lifecycle-BLCoCz4T.mjs.map +0 -1
- package/dist/load-Dds3KhXr.mjs +0 -28
- package/dist/load-Dds3KhXr.mjs.map +0 -1
- package/dist/loader-D4w4XE7q.mjs +0 -1420
- package/dist/loader-D4w4XE7q.mjs.map +0 -1
- package/dist/loops-IYgzQdQu.mjs +0 -205
- package/dist/loops-IYgzQdQu.mjs.map +0 -1
- package/dist/manifest-builder-CGF5kujD.mjs +0 -196
- package/dist/manifest-builder-CGF5kujD.mjs.map +0 -1
- package/dist/manifest-schema-B0BxPSjB.mjs +0 -497
- package/dist/manifest-schema-B0BxPSjB.mjs.map +0 -1
- package/dist/marketplace-DNvEGLqU.mjs +0 -257
- package/dist/marketplace-DNvEGLqU.mjs.map +0 -1
- package/dist/media-BL9MRrSG.mjs +0 -294
- package/dist/media-BL9MRrSG.mjs.map +0 -1
- package/dist/media-B_x5B9EA.mjs +0 -373
- package/dist/media-B_x5B9EA.mjs.map +0 -1
- package/dist/media-allowlist-CpmqBbIQ.mjs +0 -45
- package/dist/media-allowlist-CpmqBbIQ.mjs.map +0 -1
- package/dist/media-folders-CNs_A_B-.mjs +0 -210
- package/dist/media-folders-CNs_A_B-.mjs.map +0 -1
- package/dist/media-qTTHVkls.mjs +0 -416
- package/dist/media-qTTHVkls.mjs.map +0 -1
- package/dist/media-url-GJboA1fl.mjs +0 -43
- package/dist/media-url-GJboA1fl.mjs.map +0 -1
- package/dist/media-usage-ClWgrX0d.mjs +0 -282
- package/dist/media-usage-ClWgrX0d.mjs.map +0 -1
- package/dist/media-usage-activation-B8Fjtq0h.mjs +0 -78
- package/dist/media-usage-activation-B8Fjtq0h.mjs.map +0 -1
- package/dist/media-usage-work-L8-Au4j-.mjs +0 -1036
- package/dist/media-usage-work-L8-Au4j-.mjs.map +0 -1
- package/dist/media-usage-work-LXgze5j9.mjs +0 -151
- package/dist/media-usage-work-LXgze5j9.mjs.map +0 -1
- package/dist/menus-BAxcbsbv.mjs +0 -818
- package/dist/menus-BAxcbsbv.mjs.map +0 -1
- package/dist/menus-BI6oBXco.mjs +0 -92
- package/dist/menus-BI6oBXco.mjs.map +0 -1
- package/dist/menus-fvGFd4m6.mjs +0 -3725
- package/dist/menus-fvGFd4m6.mjs.map +0 -1
- package/dist/mime-DwhtRyUt.mjs +0 -81
- package/dist/mime-DwhtRyUt.mjs.map +0 -1
- package/dist/mode-DIDSUwuN.mjs +0 -23
- package/dist/mode-DIDSUwuN.mjs.map +0 -1
- package/dist/node-sqlite-compat-Ddr_mlR9.mjs +0 -63
- package/dist/node-sqlite-compat-Ddr_mlR9.mjs.map +0 -1
- package/dist/normalize-Ip_hFAm8.mjs +0 -216
- package/dist/normalize-Ip_hFAm8.mjs.map +0 -1
- package/dist/oauth-authorization-CcMgeT8R.mjs +0 -274
- package/dist/oauth-authorization-CcMgeT8R.mjs.map +0 -1
- package/dist/oauth-clients-C_osi0PU.mjs +0 -266
- package/dist/oauth-clients-C_osi0PU.mjs.map +0 -1
- package/dist/oauth-state-store-DGLP-6CK.mjs +0 -50
- package/dist/oauth-state-store-DGLP-6CK.mjs.map +0 -1
- package/dist/oauth-user-lookup-z77Ee0Hm.mjs +0 -26
- package/dist/oauth-user-lookup-z77Ee0Hm.mjs.map +0 -1
- package/dist/object-cache-EjasjtoQ.mjs +0 -586
- package/dist/object-cache-EjasjtoQ.mjs.map +0 -1
- package/dist/options-CmUpkyKW.d.mts +0 -81
- package/dist/options-CmUpkyKW.d.mts.map +0 -1
- package/dist/ownership-DCk5NutQ.mjs +0 -12
- package/dist/ownership-DCk5NutQ.mjs.map +0 -1
- package/dist/parse-2W-E2f7w.mjs +0 -81
- package/dist/parse-2W-E2f7w.mjs.map +0 -1
- package/dist/parse-6pN8Xqg5.d.mts +0 -176
- package/dist/parse-6pN8Xqg5.d.mts.map +0 -1
- package/dist/passkey-config-DTTZB6EI.mjs +0 -46
- package/dist/passkey-config-DTTZB6EI.mjs.map +0 -1
- package/dist/paths-CQA62503.mjs +0 -77
- package/dist/paths-CQA62503.mjs.map +0 -1
- package/dist/placeholder-BlfXkucE.d.mts +0 -313
- package/dist/placeholder-BlfXkucE.d.mts.map +0 -1
- package/dist/plan-B95eiwnF.mjs +0 -135
- package/dist/plan-B95eiwnF.mjs.map +0 -1
- package/dist/plugin-tool-name-BDA7m4Xa.mjs +0 -27
- package/dist/plugin-tool-name-BDA7m4Xa.mjs.map +0 -1
- package/dist/plugins-BhxLJ008.mjs +0 -261
- package/dist/plugins-BhxLJ008.mjs.map +0 -1
- package/dist/policy-DOJ2sPqB.mjs +0 -53
- package/dist/policy-DOJ2sPqB.mjs.map +0 -1
- package/dist/portable-text-RCMpCj47.mjs +0 -311
- package/dist/portable-text-RCMpCj47.mjs.map +0 -1
- package/dist/preview-DFwL5APO.mjs +0 -107
- package/dist/preview-DFwL5APO.mjs.map +0 -1
- package/dist/protocol-B-ztxp_y.d.mts +0 -65
- package/dist/protocol-B-ztxp_y.d.mts.map +0 -1
- package/dist/public-plugin-api-routes-ik4fPZMv.mjs +0 -316
- package/dist/public-plugin-api-routes-ik4fPZMv.mjs.map +0 -1
- package/dist/public-submission-C5JZIykp.mjs +0 -251
- package/dist/public-submission-C5JZIykp.mjs.map +0 -1
- package/dist/public-url-CQwzRljH.mjs +0 -101
- package/dist/public-url-CQwzRljH.mjs.map +0 -1
- package/dist/query-DuwyFr5Z.mjs +0 -41
- package/dist/query-DuwyFr5Z.mjs.map +0 -1
- package/dist/query-eR_Nz70M.mjs +0 -1157
- package/dist/query-eR_Nz70M.mjs.map +0 -1
- package/dist/range-BQWPjWgQ.mjs +0 -51
- package/dist/range-BQWPjWgQ.mjs.map +0 -1
- package/dist/rate-limit-mPKeQ3sm.mjs +0 -127
- package/dist/rate-limit-mPKeQ3sm.mjs.map +0 -1
- package/dist/receipt-CmUpyuW5.mjs +0 -43
- package/dist/receipt-CmUpyuW5.mjs.map +0 -1
- package/dist/redirect-BtiMkehU.mjs +0 -19
- package/dist/redirect-BtiMkehU.mjs.map +0 -1
- package/dist/redirect-DcmNMvOs.mjs +0 -423
- package/dist/redirect-DcmNMvOs.mjs.map +0 -1
- package/dist/redirect-paths-K5i3xYfR.mjs +0 -36
- package/dist/redirect-paths-K5i3xYfR.mjs.map +0 -1
- package/dist/redirects-BA_TvtuH.mjs +0 -148
- package/dist/redirects-BA_TvtuH.mjs.map +0 -1
- package/dist/redirects-BIrRvgn4.mjs +0 -446
- package/dist/redirects-BIrRvgn4.mjs.map +0 -1
- package/dist/registry-DymfZkAN.mjs +0 -8374
- package/dist/registry-DymfZkAN.mjs.map +0 -1
- package/dist/relations-DrEs3Sc1.mjs +0 -789
- package/dist/relations-DrEs3Sc1.mjs.map +0 -1
- package/dist/request-meta-o8RIf9pa.mjs +0 -141
- package/dist/request-meta-o8RIf9pa.mjs.map +0 -1
- package/dist/resolve-CVy9xgy_.mjs +0 -102
- package/dist/resolve-CVy9xgy_.mjs.map +0 -1
- package/dist/route-cache-DAG5dPhh.mjs +0 -20
- package/dist/route-cache-DAG5dPhh.mjs.map +0 -1
- package/dist/route-wire-Xbsu8Vih.mjs +0 -197
- package/dist/route-wire-Xbsu8Vih.mjs.map +0 -1
- package/dist/routes-YQkSOsws.mjs +0 -272
- package/dist/routes-YQkSOsws.mjs.map +0 -1
- package/dist/runner-CLorw5vo.mjs +0 -6669
- package/dist/runner-CLorw5vo.mjs.map +0 -1
- package/dist/runner-g1A9P-wD.d.mts +0 -73
- package/dist/runner-g1A9P-wD.d.mts.map +0 -1
- package/dist/schema-Bss8qImF.mjs +0 -13
- package/dist/schema-Bss8qImF.mjs.map +0 -1
- package/dist/schema-C036pqEw.mjs +0 -815
- package/dist/schema-C036pqEw.mjs.map +0 -1
- package/dist/scopes-C_SoYl9x.mjs +0 -34
- package/dist/scopes-C_SoYl9x.mjs.map +0 -1
- package/dist/search-uNqCgePJ.mjs +0 -450
- package/dist/search-uNqCgePJ.mjs.map +0 -1
- package/dist/secrets-Cc_O3Kp-.mjs +0 -369
- package/dist/secrets-Cc_O3Kp-.mjs.map +0 -1
- package/dist/sections-BLusMa96.mjs +0 -346
- package/dist/sections-BLusMa96.mjs.map +0 -1
- package/dist/seo-BodxIpws.mjs +0 -188
- package/dist/seo-BodxIpws.mjs.map +0 -1
- package/dist/seo-DaMYIQY8.mjs +0 -133
- package/dist/seo-DaMYIQY8.mjs.map +0 -1
- package/dist/service-BuM1BRsA.mjs +0 -150
- package/dist/service-BuM1BRsA.mjs.map +0 -1
- package/dist/session-user-2DpQDMKw.mjs +0 -61
- package/dist/session-user-2DpQDMKw.mjs.map +0 -1
- package/dist/settings-B3ZmPF_8.mjs +0 -73
- package/dist/settings-B3ZmPF_8.mjs.map +0 -1
- package/dist/settings-P5hwPX6_.mjs +0 -66
- package/dist/settings-P5hwPX6_.mjs.map +0 -1
- package/dist/settings-yIqoN-Ok.mjs +0 -519
- package/dist/settings-yIqoN-Ok.mjs.map +0 -1
- package/dist/setup-complete-eu6MUQnt.mjs +0 -65
- package/dist/setup-complete-eu6MUQnt.mjs.map +0 -1
- package/dist/setup-nonce-CyPOapqY.mjs +0 -25
- package/dist/setup-nonce-CyPOapqY.mjs.map +0 -1
- package/dist/site-domain-8lEJl_0U.mjs +0 -131
- package/dist/site-domain-8lEJl_0U.mjs.map +0 -1
- package/dist/site-settings-uPkW0e6o.mjs +0 -50
- package/dist/site-settings-uPkW0e6o.mjs.map +0 -1
- package/dist/site-url-25SGVXwL.mjs +0 -45
- package/dist/site-url-25SGVXwL.mjs.map +0 -1
- package/dist/sitemap-name-DTK7CYnY.mjs +0 -26
- package/dist/sitemap-name-DTK7CYnY.mjs.map +0 -1
- package/dist/slug-BEDl2IJY.mjs +0 -16
- package/dist/slug-BEDl2IJY.mjs.map +0 -1
- package/dist/snapshot-CvkIBRLY.mjs +0 -414
- package/dist/snapshot-CvkIBRLY.mjs.map +0 -1
- package/dist/ssrf-mcCKMH6B.mjs +0 -406
- package/dist/ssrf-mcCKMH6B.mjs.map +0 -1
- package/dist/stage-BQfGzGOy.mjs +0 -662
- package/dist/stage-BQfGzGOy.mjs.map +0 -1
- package/dist/staged-B5vQGeSf.mjs +0 -686
- package/dist/staged-B5vQGeSf.mjs.map +0 -1
- package/dist/state-dO6t6OxV.mjs +0 -178
- package/dist/state-dO6t6OxV.mjs.map +0 -1
- package/dist/status-DSURZwKS.mjs +0 -30
- package/dist/status-DSURZwKS.mjs.map +0 -1
- package/dist/storage-query-Cy0SZ8iG.d.mts +0 -1619
- package/dist/storage-query-Cy0SZ8iG.d.mts.map +0 -1
- package/dist/tar-DWzcUZ_Q.mjs +0 -449
- package/dist/tar-DWzcUZ_Q.mjs.map +0 -1
- package/dist/target-C9htUbrT.mjs +0 -27
- package/dist/target-C9htUbrT.mjs.map +0 -1
- package/dist/taxonomies-By2aGvq2.mjs +0 -729
- package/dist/taxonomies-By2aGvq2.mjs.map +0 -1
- package/dist/taxonomies-CVRd_jz0.mjs +0 -937
- package/dist/taxonomies-CVRd_jz0.mjs.map +0 -1
- package/dist/taxonomy-BG_xu2Qf.mjs +0 -563
- package/dist/taxonomy-BG_xu2Qf.mjs.map +0 -1
- package/dist/tokens-U5vzgSrM.mjs +0 -171
- package/dist/tokens-U5vzgSrM.mjs.map +0 -1
- package/dist/transfer-DA0OSfaT.mjs +0 -8873
- package/dist/transfer-DA0OSfaT.mjs.map +0 -1
- package/dist/transfer-Pyf3d7ka.mjs +0 -166
- package/dist/transfer-Pyf3d7ka.mjs.map +0 -1
- package/dist/transfer-download-cX7SuWEy.mjs +0 -33
- package/dist/transfer-download-cX7SuWEy.mjs.map +0 -1
- package/dist/transformations-DczubD4j.mjs +0 -196
- package/dist/transformations-DczubD4j.mjs.map +0 -1
- package/dist/transport-DtIrjEFO.mjs +0 -137
- package/dist/transport-DtIrjEFO.mjs.map +0 -1
- package/dist/trusted-proxy-CDRd5Kmw.mjs +0 -51
- package/dist/trusted-proxy-CDRd5Kmw.mjs.map +0 -1
- package/dist/turnstile-Ct5YuFNY.mjs +0 -58
- package/dist/turnstile-Ct5YuFNY.mjs.map +0 -1
- package/dist/types-Bgujop4S.d.mts +0 -374
- package/dist/types-Bgujop4S.d.mts.map +0 -1
- package/dist/types-BirHUEXt.mjs +0 -18
- package/dist/types-BirHUEXt.mjs.map +0 -1
- package/dist/types-BqJgTL_y.d.mts +0 -293
- package/dist/types-BqJgTL_y.d.mts.map +0 -1
- package/dist/types-C-lrOt9T.d.mts +0 -87
- package/dist/types-C-lrOt9T.d.mts.map +0 -1
- package/dist/types-CCEHAhOv.d.mts +0 -916
- package/dist/types-CCEHAhOv.d.mts.map +0 -1
- package/dist/types-CLVwYRBr.d.mts +0 -227
- package/dist/types-CLVwYRBr.d.mts.map +0 -1
- package/dist/types-DVbTb4Hk.mjs +0 -77
- package/dist/types-DVbTb4Hk.mjs.map +0 -1
- package/dist/types-Ddku19Zw.d.mts +0 -209
- package/dist/types-Ddku19Zw.d.mts.map +0 -1
- package/dist/types-FIiGQ3PE.mjs +0 -16
- package/dist/types-FIiGQ3PE.mjs.map +0 -1
- package/dist/types-OauzCOY0.mjs +0 -37
- package/dist/types-OauzCOY0.mjs.map +0 -1
- package/dist/types-mQGTpP-4.d.mts +0 -1741
- package/dist/types-mQGTpP-4.d.mts.map +0 -1
- package/dist/types-nbjz3Mgm.d.mts +0 -125
- package/dist/types-nbjz3Mgm.d.mts.map +0 -1
- package/dist/update-check-hW32-0pf.mjs +0 -161
- package/dist/update-check-hW32-0pf.mjs.map +0 -1
- package/dist/upload-attempts-Bpik1TLF.mjs +0 -32
- package/dist/upload-attempts-Bpik1TLF.mjs.map +0 -1
- package/dist/url-pattern-CJeCyNij.mjs +0 -41
- package/dist/url-pattern-CJeCyNij.mjs.map +0 -1
- package/dist/user-nQInBZbE.mjs +0 -171
- package/dist/user-nQInBZbE.mjs.map +0 -1
- package/dist/utils-govudc_U.mjs +0 -442
- package/dist/utils-govudc_U.mjs.map +0 -1
- package/dist/validate-BxLvcDYh.mjs +0 -524
- package/dist/validate-BxLvcDYh.mjs.map +0 -1
- package/dist/validate-mnoVfASU.d.mts +0 -468
- package/dist/validate-mnoVfASU.d.mts.map +0 -1
- package/dist/validation-DQDEvh87.mjs +0 -221
- package/dist/validation-DQDEvh87.mjs.map +0 -1
- package/dist/version-BOFfLiVT.mjs +0 -49
- package/dist/version-BOFfLiVT.mjs.map +0 -1
- package/dist/version-Dcvx_C9g.mjs +0 -7
- package/dist/version-Dcvx_C9g.mjs.map +0 -1
- package/dist/version-DzTJ3gD7.mjs +0 -9
- package/dist/version-DzTJ3gD7.mjs.map +0 -1
- package/dist/video-BX7AI5nJ.mjs +0 -54
- package/dist/video-BX7AI5nJ.mjs.map +0 -1
- package/dist/virtual-modules-CU29aip9.mjs +0 -515
- package/dist/virtual-modules-CU29aip9.mjs.map +0 -1
- package/dist/widgets-HIeFmZxt.mjs +0 -121
- package/dist/widgets-HIeFmZxt.mjs.map +0 -1
- package/dist/wxr-taxonomies-DyOGhl8W.mjs +0 -454
- package/dist/wxr-taxonomies-DyOGhl8W.mjs.map +0 -1
- package/dist/zod-generator-VxCPVDpo.mjs +0 -425
- package/dist/zod-generator-VxCPVDpo.mjs.map +0 -1
- /package/dist/{ssrf-BBXcxG-f.mjs → ssrf-DM0E-D_8.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DKwRUA-x.d.mts","names":[],"sources":["../src/database/types.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-DwhEvIVb.mjs","names":[],"sources":["../src/database/repositories/types.ts"],"sourcesContent":["import type { ContentFieldFilters } from \"../../content-list-query.js\";\nimport type { CustomFieldValue } from \"../../schema/types.js\";\nimport { encodeBase64, decodeBase64 } from \"../../utils/base64.js\";\n\n/**\n * Hard cap on cursor length. Cursors we issue are short JSON-in-base64\n * blobs; a real cursor is well under 200 chars. This guards against\n * malicious callers passing megabyte-sized strings to force the base64\n * decoder to allocate (decodeBase64 is O(N) in input size). The MCP and\n * REST schemas also clamp at 2048 — this 4096 cap is a defense-in-depth\n * floor inside the repository helpers.\n */\nexport const MAX_CURSOR_LENGTH = 4096;\n\nexport interface CreateContentInput {\n\t/** Explicit content ID for stable seed imports. Omit to generate a ULID. */\n\tid?: string;\n\ttype: string;\n\tslug?: string | null;\n\tdata: Record<string, unknown>;\n\tstatus?: string;\n\tauthorId?: string;\n\tprimaryBylineId?: string | null;\n\tlocale?: string;\n\ttranslationOf?: string;\n\t/** Field columns selected atomically from `translationOf` during the insert. */\n\tinheritFields?: string[];\n\tpublishedAt?: string | null;\n\t/** Override created_at (ISO 8601). Used by importers to preserve original dates. */\n\tcreatedAt?: string | null;\n}\n\nexport interface UpdateContentInput {\n\t/** Stored locale, supplied by the content handler for alias-aware slug checks. */\n\tlocale?: string;\n\tdata?: Record<string, unknown>;\n\tstatus?: string;\n\tslug?: string | null;\n\tpublishedAt?: string | null;\n\tscheduledAt?: string | null;\n\t/** Entry owner (`ec_{collection}.author_id`). */\n\tauthorId?: string | null;\n\t/** Revision author, separate from entry ownership. */\n\trevisionAuthorId?: string | null;\n\tprimaryBylineId?: string | null;\n\t/** `null` drops the entry's draft revision pointer. */\n\tdraftRevisionId?: null;\n}\n\n/** SEO fields for content items */\nexport interface ContentSeo {\n\ttitle: string | null;\n\tdescription: string | null;\n\timage: string | null;\n\tcanonical: string | null;\n\tnoIndex: boolean;\n}\n\n/** Input for updating SEO fields on content */\nexport interface ContentSeoInput {\n\ttitle?: string | null;\n\tdescription?: string | null;\n\timage?: string | null;\n\tcanonical?: string | null;\n\tnoIndex?: boolean;\n}\n\nexport interface BylineSummary {\n\tid: string;\n\tslug: string;\n\tdisplayName: string;\n\tbio: string | null;\n\tavatarMediaId: string | null;\n\t/**\n\t * The avatar media's storage key, folded in by a LEFT JOIN on the\n\t * `media` table. Populated by the content-credit hydration path\n\t * (`getContentBylines` / `getContentBylinesMany`, i.e. the\n\t * `entry.data.bylines` populated by `getEmDashCollection` /\n\t * `getEmDashEntry`) and by the single-row finders (`findById`,\n\t * `findBySlug`, `findByUserId`, `findByUserIds`). `findMany` doesn't\n\t * join media, so it leaves this null.\n\t *\n\t * Lets a page build a direct storage URL for an author avatar without a\n\t * per-byline `MediaRepository.findById`, avoiding an N+1 when many distinct\n\t * authors appear on one page.\n\t *\n\t * Optional so adding it is a non-breaking change for existing code that\n\t * constructs a `BylineSummary` literal; the repositories always populate it\n\t * (to `null` when there's no avatar or no media join).\n\t */\n\tavatarStorageKey?: string | null;\n\t/** Avatar media alt text, from the same media join. Null when not joined. */\n\tavatarAlt?: string | null;\n\t/**\n\t * Avatar media blurhash (LQIP placeholder, migration 024), folded in by the\n\t * same media join as `avatarStorageKey`. Lets a renderer paint a blurred\n\t * placeholder while the full avatar loads, with no extra media lookup.\n\t * Null when the byline has no avatar, the media row has no blurhash, or the\n\t * byline came from `findMany`, which doesn't join media.\n\t */\n\tavatarBlurhash?: string | null;\n\t/**\n\t * Avatar media dominant colour (LQIP placeholder, migration 024), from the\n\t * same media join. Null under the same conditions as `avatarBlurhash`.\n\t */\n\tavatarDominantColor?: string | null;\n\twebsiteUrl: string | null;\n\tuserId: string | null;\n\tisGuest: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\t/**\n\t * Locale this byline row is presented in. Added by migration 040.\n\t * `(slug, locale)` is unique; a single slug can repeat across locales.\n\t */\n\tlocale: string;\n\t/**\n\t * Shared across translations of the same byline. Added by migration 040.\n\t * `_emdash_content_bylines.byline_id` and `ec_*.primary_byline_id` store\n\t * this value, so a credit spans every locale variant of a byline.\n\t * Nullable in storage for backwards compatibility; new rows always\n\t * populate it.\n\t */\n\ttranslationGroup: string | null;\n\t/**\n\t * Custom field values registered via the byline-fields schema (migration\n\t * 041, Discussion #1174). Optional in the TypeScript shape so existing\n\t * object-literal consumers (test fixtures, plugin renderers) stay\n\t * source-compatible; the runtime always returns `{}` when no fields are\n\t * registered. Translatable values reflect this row's locale; non-\n\t * translatable values are shared across every locale variant of the\n\t * byline's `translation_group`.\n\t */\n\tcustomFields?: Record<string, CustomFieldValue>;\n}\n\nexport interface ContentBylineCredit {\n\tbyline: BylineSummary;\n\tsortOrder: number;\n\troleLabel: string | null;\n\t/** Whether this credit was explicitly assigned or inferred from authorId */\n\tsource?: \"explicit\" | \"inferred\";\n}\n\n/** A whitelisted timestamp column a content-list date range can filter on. */\nexport type ContentDateField = \"createdAt\" | \"updatedAt\" | \"publishedAt\";\n\n/**\n * Inclusive date-range filter for a single whitelisted timestamp column.\n * Bounds are compared lexicographically against the stored ISO 8601 strings,\n * which is correct because every timestamp is written via `toISOString()`.\n * Callers wanting an inclusive upper bound should pass an end-of-day value\n * (e.g. `2024-12-31T23:59:59.999Z`); the repository does not widen `to`.\n */\nexport interface ContentDateFilter {\n\tfield: ContentDateField;\n\tfrom?: string;\n\tto?: string;\n}\n\n/**\n * Byline filter for a content list.\n *\n * `mode: \"any\"` matches entries credited to at least one of `bylineIds`;\n * `mode: \"none\"` matches entries with no credit at all.\n *\n * `bylineIds` are `translation_group` values — what\n * `_emdash_content_bylines.byline_id` stores since migration 040 — so a filter\n * matches a byline across every locale variant.\n *\n * By default only explicit credits count. `includeInferred` widens the filter\n * to the byline the list actually renders, which for an entry with no credits\n * is the one linked to its `author_id` (see `hydrateBylinesMany`).\n */\nexport interface ContentBylineFilter {\n\tmode: \"any\" | \"none\";\n\t/** Ignored when `mode` is `\"none\"`. An empty list matches nothing. */\n\tbylineIds?: string[];\n\tincludeInferred?: boolean;\n\t/**\n\t * Locale a credit has to resolve at — the locale the list is scoped to.\n\t * Applies to explicit credits as well as inferred ones, since a byline\n\t * group credited to an entry renders only where it has a row at that\n\t * locale. Defaults to each entry's own locale when the list spans locales.\n\t */\n\tlocale?: string;\n}\n\nexport interface FindManyOptions {\n\twhere?: {\n\t\tstatus?: string;\n\t\tauthorId?: string;\n\t\tlocale?: string;\n\t\t/** Case-insensitive substring to match against `searchColumns`. */\n\t\tq?: string;\n\t\t/**\n\t\t * Columns the `q` substring filter is applied to (OR'd together).\n\t\t * Resolved by the handler from the collection's display fields, slug,\n\t\t * and any field marked searchable. Each name is validated as a SQL\n\t\t * identifier.\n\t\t */\n\t\tsearchColumns?: string[];\n\t\t/**\n\t\t * Serve `q` from the collection's FTS5 index (`_emdash_fts_<slug>`)\n\t\t * instead of an unindexable substring LIKE. Set by the handler only\n\t\t * when the collection has search enabled and the index exists\n\t\t * (SQLite only). The repository combines a token-prefix MATCH with\n\t\t * an index-served slug prefix so slug lookups keep working.\n\t\t */\n\t\tuseFts?: boolean;\n\t\t/** Inclusive date range over a whitelisted timestamp column. */\n\t\tdateFilter?: ContentDateFilter;\n\t\t/** Restrict to entries by their byline credits. */\n\t\tbylineFilter?: ContentBylineFilter;\n\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\tfieldFilters?: ContentFieldFilters;\n\t};\n\torderBy?: {\n\t\tfield: string;\n\t\tdirection: \"asc\" | \"desc\";\n\t};\n\t/**\n\t * Extra field slugs allowed as `orderBy` beyond the system columns — the\n\t * collection's configured titleField/dateField. Resolved by the\n\t * handler server-side so `orderBy` stays a closed set per request.\n\t */\n\tsortableExtras?: string[];\n\tlimit?: number;\n\tcursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n\t/** Rows to skip before the page, for numbered pages. Cannot be combined with `cursor`. */\n\toffset?: number;\n}\n\nexport interface FindManyResult<T> {\n\titems: T[];\n\tnextCursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n\t/**\n\t * Total number of rows matching the where clause (ignoring pagination).\n\t * Optional because not every caller needs it; repositories that compute\n\t * it should set it so the UI can render a stable pagination denominator.\n\t */\n\ttotal?: number;\n}\n\n/**\n * Order value stamped into a cursor over a *staged* reference selection, whose\n * anchor is a translation group rather than a row in the link table.\n *\n * A preview and a public render page the same field from different places, so a\n * cursor can cross that boundary in either direction — the draft publishes, or\n * the preview session ends, mid-pagination. Both sides recognise this marker so\n * they can tell a foreign cursor from a malformed one and restart the field's\n * page rather than failing or silently emptying it.\n */\nexport const STAGED_CURSOR_MARKER = \"staged\";\n\n/**\n * Boundary for a single ordered field inside a cursor.\n *\n * `missing` distinguishes \"the document has no value for this field\" from\n * \"the document stores JSON `null`\". SQLite can only tell these apart at the\n * SQL layer, but PostgreSQL orders `data::jsonb->'field'` differently for the\n * two cases, so the seek boundary must carry both possibilities.\n */\nexport interface SortFieldBoundary {\n\tvalue?: unknown;\n\tmissing?: boolean;\n}\n\n/** Encode a cursor from order value + id, optionally carrying the ordered field values. */\nexport function encodeCursor(\n\torderValue: string,\n\tid: string,\n\tsortValues?: SortFieldBoundary[],\n): string {\n\tconst payload: { orderValue: string; id: string; sortValues?: SortFieldBoundary[] } = {\n\t\torderValue,\n\t\tid,\n\t};\n\tif (sortValues !== undefined && sortValues.length > 0) {\n\t\tpayload.sortValues = sortValues;\n\t}\n\treturn encodeBase64(JSON.stringify(payload));\n}\n\n/**\n * Thrown when a pagination cursor cannot be decoded.\n *\n * Repository callers should let this propagate; handler catch blocks\n * map it to a structured `INVALID_CURSOR` error so client pagination\n * bugs surface immediately rather than silently re-fetching the first\n * page.\n */\nexport class InvalidCursorError extends Error {\n\tconstructor(cursor: string) {\n\t\tconst display = cursor.length > 50 ? `${cursor.slice(0, 47)}...` : cursor;\n\t\tsuper(`Invalid pagination cursor: ${display}`);\n\t\tthis.name = \"InvalidCursorError\";\n\t}\n}\n\nfunction isSortFieldBoundary(item: unknown): item is SortFieldBoundary {\n\tif (item === null || typeof item !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = item as { value?: unknown; missing?: unknown };\n\tif (candidate.missing !== undefined && typeof candidate.missing !== \"boolean\") {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction normalizeSortBoundary(item: unknown): SortFieldBoundary {\n\tif (isSortFieldBoundary(item)) {\n\t\treturn { value: item.value, missing: item.missing };\n\t}\n\t// Fall back for plain values that predate the structured boundary format.\n\treturn { value: item, missing: false };\n}\n\n/**\n * Decode a cursor to order value + id.\n *\n * Throws `InvalidCursorError` if the cursor is empty, not valid base64,\n * not valid JSON, or doesn't contain string `orderValue` and `id` fields.\n */\nexport function decodeCursor(cursor: string): {\n\torderValue: string;\n\tid: string;\n\tsortValues?: SortFieldBoundary[];\n} {\n\tif (!cursor) throw new InvalidCursorError(cursor);\n\tif (cursor.length > MAX_CURSOR_LENGTH) throw new InvalidCursorError(cursor);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64(cursor));\n\t} catch {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tif (parsed === null || typeof parsed !== \"object\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tconst candidate = parsed as { orderValue?: unknown; id?: unknown; sortValues?: unknown };\n\tif (typeof candidate.orderValue !== \"string\" || typeof candidate.id !== \"string\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tlet sortValues: SortFieldBoundary[] | undefined;\n\tif (candidate.sortValues !== undefined) {\n\t\tif (!Array.isArray(candidate.sortValues)) {\n\t\t\tthrow new InvalidCursorError(cursor);\n\t\t}\n\t\tsortValues = candidate.sortValues.map(normalizeSortBoundary);\n\t}\n\treturn {\n\t\torderValue: candidate.orderValue,\n\t\tid: candidate.id,\n\t\tsortValues,\n\t};\n}\n\nexport interface ContentItem {\n\tid: string;\n\ttype: string;\n\tslug: string | null;\n\tstatus: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tprimaryBylineId: string | null;\n\tbyline?: BylineSummary | null;\n\tbylines?: ContentBylineCredit[];\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tpublishedAt: string | null;\n\tscheduledAt: string | null;\n\tliveRevisionId: string | null;\n\tdraftRevisionId: string | null;\n\tversion: number;\n\tlocale: string | null;\n\ttranslationGroup: string | null;\n\t/** SEO metadata — only populated for collections with `has_seo` enabled */\n\tseo?: ContentSeo;\n\t/**\n\t * For collections that support `revisions`: when a draft revision exists,\n\t * `data` reflects the unsaved draft and `liveData` carries the currently-\n\t * published values. When no draft exists, `liveData` is undefined.\n\t *\n\t * Hydrated by `EmDashRuntime.hydrateDraftData()` — repositories themselves\n\t * never set this field; it's purely a runtime-overlay concept that gives\n\t * agents a clear picture of \"draft vs. live\" without re-fetching the\n\t * revision history.\n\t */\n\tliveData?: Record<string, unknown>;\n\t/**\n\t * First page of each reference field's resolved selection, keyed by field\n\t * slug. Only populated when the caller opts in via `handleContentGet`'s\n\t * `referenceOptions` param (see content.ts) — hydration is never\n\t * unconditional because it can leak draft ids/slugs to callers without\n\t * `content:read_drafts`.\n\t *\n\t * Shape mirrors `EntryRef` from `api/handlers/relations.ts`, duplicated\n\t * here (rather than imported) so the database layer doesn't depend on\n\t * the api/handlers layer.\n\t */\n\treferences?: Record<\n\t\tstring,\n\t\t{\n\t\t\tchildren: Array<{\n\t\t\t\tid: string;\n\t\t\t\tslug: string | null;\n\t\t\t\tcollection: string;\n\t\t\t\ttitle: string | null;\n\t\t\t\tlocale: string | null;\n\t\t\t\ttranslationGroup: string | null;\n\t\t\t\tsortOrder?: number;\n\t\t\t}>;\n\t\t\tnextCursor?: string;\n\t\t}\n\t>;\n}\n\nexport class EmDashValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic details?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashValidationError\";\n\t}\n}\n\nexport class ContentCollectionNotFoundError extends Error {\n\tconstructor(collection: string) {\n\t\tsuper(`Collection '${collection}' not found`);\n\t\tthis.name = \"ContentCollectionNotFoundError\";\n\t}\n}\n\n/**\n * Thrown by `publish()` when called with `requireDue` for a row that is no\n * longer due (its `scheduled_at` was cleared or pushed into the future between\n * selection and publish — e.g. an editor unscheduled it). Lets the scheduled\n * sweep skip the row silently rather than treating it as a publish failure.\n */\nexport class ScheduledNotDueError extends Error {\n\tconstructor(message = \"Content is no longer scheduled to publish\") {\n\t\tsuper(message);\n\t\tthis.name = \"ScheduledNotDueError\";\n\t}\n}\n\nexport class ContentMutationConflictError extends Error {\n\tconstructor(message = \"Content changed while the operation was in progress\") {\n\t\tsuper(message);\n\t\tthis.name = \"ContentMutationConflictError\";\n\t}\n}\n\nexport class ContentSlugConflictError extends Error {\n\tconstructor() {\n\t\tsuper(\"The slug is already used by another content entry\");\n\t\tthis.name = \"ContentSlugConflictError\";\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,oBAAoB;;;;;;;;;;;AAkPjC,MAAa,uBAAuB;;AAgBpC,SAAgB,aACf,YACA,IACA,YACS;CACT,MAAM,UAAgF;EACrF;EACA;EACA;AACD,KAAI,eAAe,UAAa,WAAW,SAAS,EACnD,SAAQ,aAAa;AAEtB,QAAO,aAAa,KAAK,UAAU,QAAQ,CAAC;;;;;;;;;;AAW7C,IAAa,qBAAb,cAAwC,MAAM;CAC7C,YAAY,QAAgB;EAC3B,MAAM,UAAU,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,OAAO;AACnE,QAAM,8BAA8B,UAAU;AAC9C,OAAK,OAAO;;;AAId,SAAS,oBAAoB,MAA0C;AACtE,KAAI,SAAS,QAAQ,OAAO,SAAS,SACpC,QAAO;CAER,MAAM,YAAY;AAClB,KAAI,UAAU,YAAY,UAAa,OAAO,UAAU,YAAY,UACnE,QAAO;AAER,QAAO;;AAGR,SAAS,sBAAsB,MAAkC;AAChE,KAAI,oBAAoB,KAAK,CAC5B,QAAO;EAAE,OAAO,KAAK;EAAO,SAAS,KAAK;EAAS;AAGpD,QAAO;EAAE,OAAO;EAAM,SAAS;EAAO;;;;;;;;AASvC,SAAgB,aAAa,QAI3B;AACD,KAAI,CAAC,OAAQ,OAAM,IAAI,mBAAmB,OAAO;AACjD,KAAI,OAAO,SAAS,kBAAmB,OAAM,IAAI,mBAAmB,OAAO;CAC3E,IAAI;AACJ,KAAI;AACH,WAAS,KAAK,MAAM,aAAa,OAAO,CAAC;SAClC;AACP,QAAM,IAAI,mBAAmB,OAAO;;AAErC,KAAI,WAAW,QAAQ,OAAO,WAAW,SACxC,OAAM,IAAI,mBAAmB,OAAO;CAErC,MAAM,YAAY;AAClB,KAAI,OAAO,UAAU,eAAe,YAAY,OAAO,UAAU,OAAO,SACvE,OAAM,IAAI,mBAAmB,OAAO;CAErC,IAAI;AACJ,KAAI,UAAU,eAAe,QAAW;AACvC,MAAI,CAAC,MAAM,QAAQ,UAAU,WAAW,CACvC,OAAM,IAAI,mBAAmB,OAAO;AAErC,eAAa,UAAU,WAAW,IAAI,sBAAsB;;AAE7D,QAAO;EACN,YAAY,UAAU;EACtB,IAAI,UAAU;EACd;EACA;;AA+DF,IAAa,wBAAb,cAA2C,MAAM;CAChD,YACC,SACA,AAAO,SACN;AACD,QAAM,QAAQ;EAFP;AAGP,OAAK,OAAO;;;AAId,IAAa,iCAAb,cAAoD,MAAM;CACzD,YAAY,YAAoB;AAC/B,QAAM,eAAe,WAAW,aAAa;AAC7C,OAAK,OAAO;;;;;;;;;AAUd,IAAa,uBAAb,cAA0C,MAAM;CAC/C,YAAY,UAAU,6CAA6C;AAClE,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAId,IAAa,+BAAb,cAAkD,MAAM;CACvD,YAAY,UAAU,uDAAuD;AAC5E,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAId,IAAa,2BAAb,cAA8C,MAAM;CACnD,cAAc;AACb,QAAM,oDAAoD;AAC1D,OAAK,OAAO"}
|
|
1
|
+
{"version":3,"file":"types-DwhEvIVb.mjs","names":[],"sources":["../src/database/repositories/types.ts"],"sourcesContent":["import type { ContentFieldFilters } from \"../../content-list-query.js\";\nimport type { CustomFieldValue } from \"../../schema/types.js\";\nimport { encodeBase64, decodeBase64 } from \"../../utils/base64.js\";\n\n/**\n * Hard cap on cursor length. Cursors we issue are short JSON-in-base64\n * blobs; a real cursor is well under 200 chars. This guards against\n * malicious callers passing megabyte-sized strings to force the base64\n * decoder to allocate (decodeBase64 is O(N) in input size). The MCP and\n * REST schemas also clamp at 2048 — this 4096 cap is a defense-in-depth\n * floor inside the repository helpers.\n */\nexport const MAX_CURSOR_LENGTH = 4096;\n\nexport interface CreateContentInput {\n\t/** Explicit content ID for stable seed imports. Omit to generate a ULID. */\n\tid?: string;\n\ttype: string;\n\tslug?: string | null;\n\tdata: Record<string, unknown>;\n\tstatus?: string;\n\tauthorId?: string;\n\tprimaryBylineId?: string | null;\n\tlocale?: string;\n\ttranslationOf?: string;\n\t/** Field columns selected atomically from `translationOf` during the insert. */\n\tinheritFields?: string[];\n\tpublishedAt?: string | null;\n\t/** Override created_at (ISO 8601). Used by importers to preserve original dates. */\n\tcreatedAt?: string | null;\n}\n\nexport interface UpdateContentInput {\n\t/** Stored locale, supplied by the content handler for alias-aware slug checks. */\n\tlocale?: string;\n\tdata?: Record<string, unknown>;\n\tstatus?: string;\n\tslug?: string | null;\n\tpublishedAt?: string | null;\n\tscheduledAt?: string | null;\n\t/** Entry owner (`ec_{collection}.author_id`). */\n\tauthorId?: string | null;\n\t/** Revision author, separate from entry ownership. */\n\trevisionAuthorId?: string | null;\n\tprimaryBylineId?: string | null;\n\t/** `null` drops the entry's draft revision pointer. */\n\tdraftRevisionId?: null;\n}\n\n/** SEO fields for content items */\nexport interface ContentSeo {\n\ttitle: string | null;\n\tdescription: string | null;\n\timage: string | null;\n\tcanonical: string | null;\n\tnoIndex: boolean;\n}\n\n/** Input for updating SEO fields on content */\nexport interface ContentSeoInput {\n\ttitle?: string | null;\n\tdescription?: string | null;\n\timage?: string | null;\n\tcanonical?: string | null;\n\tnoIndex?: boolean;\n}\n\nexport interface BylineSummary {\n\tid: string;\n\tslug: string;\n\tdisplayName: string;\n\tbio: string | null;\n\tavatarMediaId: string | null;\n\t/**\n\t * The avatar media's storage key, folded in by a LEFT JOIN on the\n\t * `media` table. Populated by the content-credit hydration path\n\t * (`getContentBylines` / `getContentBylinesMany`, i.e. the\n\t * `entry.data.bylines` populated by `getEmDashCollection` /\n\t * `getEmDashEntry`) and by the single-row finders (`findById`,\n\t * `findBySlug`, `findByUserId`, `findByUserIds`). `findMany` doesn't\n\t * join media, so it leaves this null.\n\t *\n\t * Lets a page build a direct storage URL for an author avatar without a\n\t * per-byline `MediaRepository.findById`, avoiding an N+1 when many distinct\n\t * authors appear on one page.\n\t *\n\t * Optional so adding it is a non-breaking change for existing code that\n\t * constructs a `BylineSummary` literal; the repositories always populate it\n\t * (to `null` when there's no avatar or no media join).\n\t */\n\tavatarStorageKey?: string | null;\n\t/** Avatar media alt text, from the same media join. Null when not joined. */\n\tavatarAlt?: string | null;\n\t/**\n\t * Avatar media blurhash (LQIP placeholder, migration 024), folded in by the\n\t * same media join as `avatarStorageKey`. Lets a renderer paint a blurred\n\t * placeholder while the full avatar loads, with no extra media lookup.\n\t * Null when the byline has no avatar, the media row has no blurhash, or the\n\t * byline came from `findMany`, which doesn't join media.\n\t */\n\tavatarBlurhash?: string | null;\n\t/**\n\t * Avatar media dominant colour (LQIP placeholder, migration 024), from the\n\t * same media join. Null under the same conditions as `avatarBlurhash`.\n\t */\n\tavatarDominantColor?: string | null;\n\twebsiteUrl: string | null;\n\tuserId: string | null;\n\tisGuest: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\t/**\n\t * Locale this byline row is presented in. Added by migration 040.\n\t * `(slug, locale)` is unique; a single slug can repeat across locales.\n\t */\n\tlocale: string;\n\t/**\n\t * Shared across translations of the same byline. Added by migration 040.\n\t * `_emdash_content_bylines.byline_id` and `ec_*.primary_byline_id` store\n\t * this value, so a credit spans every locale variant of a byline.\n\t * Nullable in storage for backwards compatibility; new rows always\n\t * populate it.\n\t */\n\ttranslationGroup: string | null;\n\t/**\n\t * Custom field values registered via the byline-fields schema (migration\n\t * 041, Discussion #1174). Optional in the TypeScript shape so existing\n\t * object-literal consumers (test fixtures, plugin renderers) stay\n\t * source-compatible; the runtime always returns `{}` when no fields are\n\t * registered. Translatable values reflect this row's locale; non-\n\t * translatable values are shared across every locale variant of the\n\t * byline's `translation_group`.\n\t */\n\tcustomFields?: Record<string, CustomFieldValue>;\n}\n\nexport interface ContentBylineCredit {\n\tbyline: BylineSummary;\n\tsortOrder: number;\n\troleLabel: string | null;\n\t/** Whether this credit was explicitly assigned or inferred from authorId */\n\tsource?: \"explicit\" | \"inferred\";\n}\n\n/** A whitelisted timestamp column a content-list date range can filter on. */\nexport type ContentDateField = \"createdAt\" | \"updatedAt\" | \"publishedAt\";\n\n/**\n * Inclusive date-range filter for a single whitelisted timestamp column.\n * Bounds are compared lexicographically against the stored ISO 8601 strings,\n * which is correct because every timestamp is written via `toISOString()`.\n * Callers wanting an inclusive upper bound should pass an end-of-day value\n * (e.g. `2024-12-31T23:59:59.999Z`); the repository does not widen `to`.\n */\nexport interface ContentDateFilter {\n\tfield: ContentDateField;\n\tfrom?: string;\n\tto?: string;\n}\n\n/**\n * Byline filter for a content list.\n *\n * `mode: \"any\"` matches entries credited to at least one of `bylineIds`;\n * `mode: \"none\"` matches entries with no credit at all.\n *\n * `bylineIds` are `translation_group` values — what\n * `_emdash_content_bylines.byline_id` stores since migration 040 — so a filter\n * matches a byline across every locale variant.\n *\n * By default only explicit credits count. `includeInferred` widens the filter\n * to the byline the list actually renders, which for an entry with no credits\n * is the one linked to its `author_id` (see `hydrateBylinesMany`).\n */\nexport interface ContentBylineFilter {\n\tmode: \"any\" | \"none\";\n\t/** Ignored when `mode` is `\"none\"`. An empty list matches nothing. */\n\tbylineIds?: string[];\n\tincludeInferred?: boolean;\n\t/**\n\t * Locale a credit has to resolve at — the locale the list is scoped to.\n\t * Applies to explicit credits as well as inferred ones, since a byline\n\t * group credited to an entry renders only where it has a row at that\n\t * locale. Defaults to each entry's own locale when the list spans locales.\n\t */\n\tlocale?: string;\n}\n\nexport interface FindManyOptions {\n\twhere?: {\n\t\tstatus?: string;\n\t\tauthorId?: string;\n\t\tlocale?: string;\n\t\t/** Case-insensitive substring to match against `searchColumns`. */\n\t\tq?: string;\n\t\t/**\n\t\t * Columns the `q` substring filter is applied to (OR'd together).\n\t\t * Resolved by the handler from the slug and the collection's display\n\t\t * fields and fields marked searchable, keeping only fields that have a\n\t\t * column. Each name is validated as a SQL identifier.\n\t\t */\n\t\tsearchColumns?: string[];\n\t\t/**\n\t\t * Serve `q` from the collection's FTS5 index (`_emdash_fts_<slug>`)\n\t\t * instead of an unindexable substring LIKE. Set by the handler only\n\t\t * when the collection has search enabled and the index exists\n\t\t * (SQLite only). The repository combines a token-prefix MATCH with\n\t\t * an index-served slug prefix so slug lookups keep working.\n\t\t */\n\t\tuseFts?: boolean;\n\t\t/** Inclusive date range over a whitelisted timestamp column. */\n\t\tdateFilter?: ContentDateFilter;\n\t\t/** Restrict to entries by their byline credits. */\n\t\tbylineFilter?: ContentBylineFilter;\n\t\t/** AND-combined filters over custom fields explicitly marked as indexed. */\n\t\tfieldFilters?: ContentFieldFilters;\n\t};\n\torderBy?: {\n\t\tfield: string;\n\t\tdirection: \"asc\" | \"desc\";\n\t};\n\t/**\n\t * Extra field slugs allowed as `orderBy` beyond the system columns — the\n\t * collection's configured titleField/dateField. Resolved by the\n\t * handler server-side so `orderBy` stays a closed set per request.\n\t */\n\tsortableExtras?: string[];\n\tlimit?: number;\n\tcursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n\t/** Rows to skip before the page, for numbered pages. Cannot be combined with `cursor`. */\n\toffset?: number;\n}\n\nexport interface FindManyResult<T> {\n\titems: T[];\n\tnextCursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n\t/**\n\t * Total number of rows matching the where clause (ignoring pagination).\n\t * Optional because not every caller needs it; repositories that compute\n\t * it should set it so the UI can render a stable pagination denominator.\n\t */\n\ttotal?: number;\n}\n\n/**\n * Order value stamped into a cursor over a *staged* reference selection, whose\n * anchor is a translation group rather than a row in the link table.\n *\n * A preview and a public render page the same field from different places, so a\n * cursor can cross that boundary in either direction — the draft publishes, or\n * the preview session ends, mid-pagination. Both sides recognise this marker so\n * they can tell a foreign cursor from a malformed one and restart the field's\n * page rather than failing or silently emptying it.\n */\nexport const STAGED_CURSOR_MARKER = \"staged\";\n\n/**\n * Boundary for a single ordered field inside a cursor.\n *\n * `missing` distinguishes \"the document has no value for this field\" from\n * \"the document stores JSON `null`\". SQLite can only tell these apart at the\n * SQL layer, but PostgreSQL orders `data::jsonb->'field'` differently for the\n * two cases, so the seek boundary must carry both possibilities.\n */\nexport interface SortFieldBoundary {\n\tvalue?: unknown;\n\tmissing?: boolean;\n}\n\n/** Encode a cursor from order value + id, optionally carrying the ordered field values. */\nexport function encodeCursor(\n\torderValue: string,\n\tid: string,\n\tsortValues?: SortFieldBoundary[],\n): string {\n\tconst payload: { orderValue: string; id: string; sortValues?: SortFieldBoundary[] } = {\n\t\torderValue,\n\t\tid,\n\t};\n\tif (sortValues !== undefined && sortValues.length > 0) {\n\t\tpayload.sortValues = sortValues;\n\t}\n\treturn encodeBase64(JSON.stringify(payload));\n}\n\n/**\n * Thrown when a pagination cursor cannot be decoded.\n *\n * Repository callers should let this propagate; handler catch blocks\n * map it to a structured `INVALID_CURSOR` error so client pagination\n * bugs surface immediately rather than silently re-fetching the first\n * page.\n */\nexport class InvalidCursorError extends Error {\n\tconstructor(cursor: string) {\n\t\tconst display = cursor.length > 50 ? `${cursor.slice(0, 47)}...` : cursor;\n\t\tsuper(`Invalid pagination cursor: ${display}`);\n\t\tthis.name = \"InvalidCursorError\";\n\t}\n}\n\nfunction isSortFieldBoundary(item: unknown): item is SortFieldBoundary {\n\tif (item === null || typeof item !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = item as { value?: unknown; missing?: unknown };\n\tif (candidate.missing !== undefined && typeof candidate.missing !== \"boolean\") {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction normalizeSortBoundary(item: unknown): SortFieldBoundary {\n\tif (isSortFieldBoundary(item)) {\n\t\treturn { value: item.value, missing: item.missing };\n\t}\n\t// Fall back for plain values that predate the structured boundary format.\n\treturn { value: item, missing: false };\n}\n\n/**\n * Decode a cursor to order value + id.\n *\n * Throws `InvalidCursorError` if the cursor is empty, not valid base64,\n * not valid JSON, or doesn't contain string `orderValue` and `id` fields.\n */\nexport function decodeCursor(cursor: string): {\n\torderValue: string;\n\tid: string;\n\tsortValues?: SortFieldBoundary[];\n} {\n\tif (!cursor) throw new InvalidCursorError(cursor);\n\tif (cursor.length > MAX_CURSOR_LENGTH) throw new InvalidCursorError(cursor);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64(cursor));\n\t} catch {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tif (parsed === null || typeof parsed !== \"object\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tconst candidate = parsed as { orderValue?: unknown; id?: unknown; sortValues?: unknown };\n\tif (typeof candidate.orderValue !== \"string\" || typeof candidate.id !== \"string\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tlet sortValues: SortFieldBoundary[] | undefined;\n\tif (candidate.sortValues !== undefined) {\n\t\tif (!Array.isArray(candidate.sortValues)) {\n\t\t\tthrow new InvalidCursorError(cursor);\n\t\t}\n\t\tsortValues = candidate.sortValues.map(normalizeSortBoundary);\n\t}\n\treturn {\n\t\torderValue: candidate.orderValue,\n\t\tid: candidate.id,\n\t\tsortValues,\n\t};\n}\n\nexport interface ContentItem {\n\tid: string;\n\ttype: string;\n\tslug: string | null;\n\tstatus: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tprimaryBylineId: string | null;\n\tbyline?: BylineSummary | null;\n\tbylines?: ContentBylineCredit[];\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tpublishedAt: string | null;\n\tscheduledAt: string | null;\n\tliveRevisionId: string | null;\n\tdraftRevisionId: string | null;\n\tversion: number;\n\tlocale: string | null;\n\ttranslationGroup: string | null;\n\t/** SEO metadata — only populated for collections with `has_seo` enabled */\n\tseo?: ContentSeo;\n\t/**\n\t * For collections that support `revisions`: when a draft revision exists,\n\t * `data` reflects the unsaved draft and `liveData` carries the currently-\n\t * published values. When no draft exists, `liveData` is undefined.\n\t *\n\t * Hydrated by `EmDashRuntime.hydrateDraftData()` — repositories themselves\n\t * never set this field; it's purely a runtime-overlay concept that gives\n\t * agents a clear picture of \"draft vs. live\" without re-fetching the\n\t * revision history.\n\t */\n\tliveData?: Record<string, unknown>;\n\t/**\n\t * First page of each reference field's resolved selection, keyed by field\n\t * slug. Only populated when the caller opts in via `handleContentGet`'s\n\t * `referenceOptions` param (see content.ts) — hydration is never\n\t * unconditional because it can leak draft ids/slugs to callers without\n\t * `content:read_drafts`.\n\t *\n\t * Shape mirrors `EntryRef` from `api/handlers/relations.ts`, duplicated\n\t * here (rather than imported) so the database layer doesn't depend on\n\t * the api/handlers layer.\n\t */\n\treferences?: Record<\n\t\tstring,\n\t\t{\n\t\t\tchildren: Array<{\n\t\t\t\tid: string;\n\t\t\t\tslug: string | null;\n\t\t\t\tcollection: string;\n\t\t\t\ttitle: string | null;\n\t\t\t\tlocale: string | null;\n\t\t\t\ttranslationGroup: string | null;\n\t\t\t\tsortOrder?: number;\n\t\t\t}>;\n\t\t\tnextCursor?: string;\n\t\t}\n\t>;\n}\n\nexport class EmDashValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic details?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashValidationError\";\n\t}\n}\n\nexport class ContentCollectionNotFoundError extends Error {\n\tconstructor(collection: string) {\n\t\tsuper(`Collection '${collection}' not found`);\n\t\tthis.name = \"ContentCollectionNotFoundError\";\n\t}\n}\n\n/**\n * Thrown by `publish()` when called with `requireDue` for a row that is no\n * longer due (its `scheduled_at` was cleared or pushed into the future between\n * selection and publish — e.g. an editor unscheduled it). Lets the scheduled\n * sweep skip the row silently rather than treating it as a publish failure.\n */\nexport class ScheduledNotDueError extends Error {\n\tconstructor(message = \"Content is no longer scheduled to publish\") {\n\t\tsuper(message);\n\t\tthis.name = \"ScheduledNotDueError\";\n\t}\n}\n\nexport class ContentMutationConflictError extends Error {\n\tconstructor(message = \"Content changed while the operation was in progress\") {\n\t\tsuper(message);\n\t\tthis.name = \"ContentMutationConflictError\";\n\t}\n}\n\nexport class ContentSlugConflictError extends Error {\n\tconstructor() {\n\t\tsuper(\"The slug is already used by another content entry\");\n\t\tthis.name = \"ContentSlugConflictError\";\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,oBAAoB;;;;;;;;;;;AAkPjC,MAAa,uBAAuB;;AAgBpC,SAAgB,aACf,YACA,IACA,YACS;CACT,MAAM,UAAgF;EACrF;EACA;EACA;AACD,KAAI,eAAe,UAAa,WAAW,SAAS,EACnD,SAAQ,aAAa;AAEtB,QAAO,aAAa,KAAK,UAAU,QAAQ,CAAC;;;;;;;;;;AAW7C,IAAa,qBAAb,cAAwC,MAAM;CAC7C,YAAY,QAAgB;EAC3B,MAAM,UAAU,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,OAAO;AACnE,QAAM,8BAA8B,UAAU;AAC9C,OAAK,OAAO;;;AAId,SAAS,oBAAoB,MAA0C;AACtE,KAAI,SAAS,QAAQ,OAAO,SAAS,SACpC,QAAO;CAER,MAAM,YAAY;AAClB,KAAI,UAAU,YAAY,UAAa,OAAO,UAAU,YAAY,UACnE,QAAO;AAER,QAAO;;AAGR,SAAS,sBAAsB,MAAkC;AAChE,KAAI,oBAAoB,KAAK,CAC5B,QAAO;EAAE,OAAO,KAAK;EAAO,SAAS,KAAK;EAAS;AAGpD,QAAO;EAAE,OAAO;EAAM,SAAS;EAAO;;;;;;;;AASvC,SAAgB,aAAa,QAI3B;AACD,KAAI,CAAC,OAAQ,OAAM,IAAI,mBAAmB,OAAO;AACjD,KAAI,OAAO,SAAS,kBAAmB,OAAM,IAAI,mBAAmB,OAAO;CAC3E,IAAI;AACJ,KAAI;AACH,WAAS,KAAK,MAAM,aAAa,OAAO,CAAC;SAClC;AACP,QAAM,IAAI,mBAAmB,OAAO;;AAErC,KAAI,WAAW,QAAQ,OAAO,WAAW,SACxC,OAAM,IAAI,mBAAmB,OAAO;CAErC,MAAM,YAAY;AAClB,KAAI,OAAO,UAAU,eAAe,YAAY,OAAO,UAAU,OAAO,SACvE,OAAM,IAAI,mBAAmB,OAAO;CAErC,IAAI;AACJ,KAAI,UAAU,eAAe,QAAW;AACvC,MAAI,CAAC,MAAM,QAAQ,UAAU,WAAW,CACvC,OAAM,IAAI,mBAAmB,OAAO;AAErC,eAAa,UAAU,WAAW,IAAI,sBAAsB;;AAE7D,QAAO;EACN,YAAY,UAAU;EACtB,IAAI,UAAU;EACd;EACA;;AA+DF,IAAa,wBAAb,cAA2C,MAAM;CAChD,YACC,SACA,AAAO,SACN;AACD,QAAM,QAAQ;EAFP;AAGP,OAAK,OAAO;;;AAId,IAAa,iCAAb,cAAoD,MAAM;CACzD,YAAY,YAAoB;AAC/B,QAAM,eAAe,WAAW,aAAa;AAC7C,OAAK,OAAO;;;;;;;;;AAUd,IAAa,uBAAb,cAA0C,MAAM;CAC/C,YAAY,UAAU,6CAA6C;AAClE,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAId,IAAa,+BAAb,cAAkD,MAAM;CACvD,YAAY,UAAU,uDAAuD;AAC5E,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAId,IAAa,2BAAb,cAA8C,MAAM;CACnD,cAAc;AACb,QAAM,oDAAoD;AAC1D,OAAK,OAAO"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
//#region src/storage/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Storage Layer Types
|
|
4
|
+
*
|
|
5
|
+
* Defines the interface for S3-compatible storage backends.
|
|
6
|
+
* Works with R2, AWS S3, Minio, and other S3-compatible services.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Storage configuration for S3-compatible backends
|
|
10
|
+
*/
|
|
11
|
+
interface S3StorageConfig {
|
|
12
|
+
/** S3 endpoint URL (e.g., "https://xxx.r2.cloudflarestorage.com") */
|
|
13
|
+
endpoint: string;
|
|
14
|
+
/** Bucket name */
|
|
15
|
+
bucket: string;
|
|
16
|
+
/**
|
|
17
|
+
* AWS access key ID.
|
|
18
|
+
* May be resolved from the `S3_ACCESS_KEY_ID` env var at runtime on Node.
|
|
19
|
+
* Must be provided together with `secretAccessKey`, or both omitted.
|
|
20
|
+
*/
|
|
21
|
+
accessKeyId?: string;
|
|
22
|
+
/**
|
|
23
|
+
* AWS secret access key.
|
|
24
|
+
* May be resolved from the `S3_SECRET_ACCESS_KEY` env var at runtime on Node.
|
|
25
|
+
* Must be provided together with `accessKeyId`, or both omitted.
|
|
26
|
+
*/
|
|
27
|
+
secretAccessKey?: string;
|
|
28
|
+
/** Optional region (defaults to "auto") */
|
|
29
|
+
region?: string;
|
|
30
|
+
/** Optional public URL prefix for generated URLs (e.g., CDN URL) */
|
|
31
|
+
publicUrl?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Local filesystem storage for development
|
|
35
|
+
*/
|
|
36
|
+
interface LocalStorageConfig {
|
|
37
|
+
/** Directory path for storing files */
|
|
38
|
+
directory: string;
|
|
39
|
+
/** Base URL for serving files */
|
|
40
|
+
baseUrl: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Storage adapter descriptor (serializable config)
|
|
44
|
+
*/
|
|
45
|
+
interface StorageDescriptor {
|
|
46
|
+
/** Module path exporting createStorage function */
|
|
47
|
+
entrypoint: string;
|
|
48
|
+
/** Serializable config passed to createStorage at runtime */
|
|
49
|
+
config: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Factory function signature for storage adapters
|
|
53
|
+
*
|
|
54
|
+
* Each adapter accesses its own bindings directly:
|
|
55
|
+
* - R2: imports from cloudflare:workers
|
|
56
|
+
* - S3: uses credentials from config
|
|
57
|
+
* - Local: uses filesystem path from config
|
|
58
|
+
*/
|
|
59
|
+
type CreateStorageFn = (config: Record<string, unknown>) => Storage;
|
|
60
|
+
/**
|
|
61
|
+
* Upload result
|
|
62
|
+
*/
|
|
63
|
+
interface UploadResult {
|
|
64
|
+
/** Storage key (path within bucket) */
|
|
65
|
+
key: string;
|
|
66
|
+
/** Public URL to access the file */
|
|
67
|
+
url: string;
|
|
68
|
+
/** File size in bytes */
|
|
69
|
+
size: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A single byte range of a file, as requested by an HTTP `Range` header
|
|
73
|
+
*/
|
|
74
|
+
type ByteRange = /** `length` bytes from `offset`, or every byte from `offset` when `length` is omitted */{
|
|
75
|
+
offset: number;
|
|
76
|
+
length?: number;
|
|
77
|
+
} /** The last `suffix` bytes */ | {
|
|
78
|
+
suffix: number;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Options for downloading a file
|
|
82
|
+
*/
|
|
83
|
+
interface DownloadOptions {
|
|
84
|
+
/**
|
|
85
|
+
* Download only this part of the file. Adapters that can't serve it,
|
|
86
|
+
* including when it starts past the end of the file, return the whole file.
|
|
87
|
+
*/
|
|
88
|
+
range?: ByteRange;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Download result
|
|
92
|
+
*/
|
|
93
|
+
interface DownloadResult {
|
|
94
|
+
/** File content as readable stream */
|
|
95
|
+
body: ReadableStream<Uint8Array>;
|
|
96
|
+
/** MIME type */
|
|
97
|
+
contentType: string;
|
|
98
|
+
/** Size of the whole file in bytes, even when `body` holds only part of it */
|
|
99
|
+
size: number;
|
|
100
|
+
/**
|
|
101
|
+
* The part of the file `body` holds, when the adapter served
|
|
102
|
+
* `DownloadOptions.range`. Absent when `body` is the whole file.
|
|
103
|
+
*/
|
|
104
|
+
range?: {
|
|
105
|
+
offset: number;
|
|
106
|
+
length: number;
|
|
107
|
+
};
|
|
108
|
+
/** Last modification time of the stored object, when the backend can provide it. */
|
|
109
|
+
lastModified?: Date;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Signed URL for direct upload
|
|
113
|
+
*/
|
|
114
|
+
interface SignedUploadUrl {
|
|
115
|
+
/** Signed URL for PUT request */
|
|
116
|
+
url: string;
|
|
117
|
+
/** HTTP method (always PUT) */
|
|
118
|
+
method: "PUT";
|
|
119
|
+
/** Headers to include in the upload request */
|
|
120
|
+
headers: Record<string, string>;
|
|
121
|
+
/** URL expiration time (ISO string) */
|
|
122
|
+
expiresAt: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Options for generating signed upload URL
|
|
126
|
+
*/
|
|
127
|
+
interface SignedUploadOptions {
|
|
128
|
+
/** Storage key (path within bucket) */
|
|
129
|
+
key: string;
|
|
130
|
+
/** MIME type of the file */
|
|
131
|
+
contentType: string;
|
|
132
|
+
/** File size in bytes (for content-length validation) */
|
|
133
|
+
size?: number;
|
|
134
|
+
/** URL expiration in seconds (default: 3600) */
|
|
135
|
+
expiresIn?: number;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* File listing result
|
|
139
|
+
*/
|
|
140
|
+
interface ListResult {
|
|
141
|
+
/** List of files */
|
|
142
|
+
files: FileInfo[];
|
|
143
|
+
/** Cursor for next page (if more results) */
|
|
144
|
+
nextCursor?: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* File info from listing
|
|
148
|
+
*/
|
|
149
|
+
interface FileInfo {
|
|
150
|
+
/** Storage key */
|
|
151
|
+
key: string;
|
|
152
|
+
/** File size in bytes */
|
|
153
|
+
size: number;
|
|
154
|
+
/** Last modified date */
|
|
155
|
+
lastModified: Date;
|
|
156
|
+
/** ETag (content hash) */
|
|
157
|
+
etag?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Options for listing files
|
|
161
|
+
*/
|
|
162
|
+
interface ListOptions {
|
|
163
|
+
/** Filter by key prefix */
|
|
164
|
+
prefix?: string;
|
|
165
|
+
/** Maximum results per page */
|
|
166
|
+
limit?: number;
|
|
167
|
+
/** Cursor from previous list call */
|
|
168
|
+
cursor?: string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Storage interface
|
|
172
|
+
*
|
|
173
|
+
* All storage backends must implement this interface.
|
|
174
|
+
*/
|
|
175
|
+
interface Storage {
|
|
176
|
+
/**
|
|
177
|
+
* Upload a file to storage
|
|
178
|
+
*/
|
|
179
|
+
upload(options: {
|
|
180
|
+
key: string;
|
|
181
|
+
body: Buffer | Uint8Array | ReadableStream<Uint8Array>;
|
|
182
|
+
contentType: string; /** Optional HTTP cache policy stored with publicly served objects. */
|
|
183
|
+
cacheControl?: string;
|
|
184
|
+
}): Promise<UploadResult>;
|
|
185
|
+
/**
|
|
186
|
+
* Download a file from storage, or part of it with `options.range`
|
|
187
|
+
*/
|
|
188
|
+
download(key: string, options?: DownloadOptions): Promise<DownloadResult>;
|
|
189
|
+
/**
|
|
190
|
+
* Delete a file from storage
|
|
191
|
+
* Idempotent - does not throw if file doesn't exist
|
|
192
|
+
*/
|
|
193
|
+
delete(key: string): Promise<void>;
|
|
194
|
+
/**
|
|
195
|
+
* Check if a file exists
|
|
196
|
+
*/
|
|
197
|
+
exists(key: string): Promise<boolean>;
|
|
198
|
+
/**
|
|
199
|
+
* List files in storage
|
|
200
|
+
*/
|
|
201
|
+
list(options?: ListOptions): Promise<ListResult>;
|
|
202
|
+
/**
|
|
203
|
+
* Generate a signed URL for direct upload
|
|
204
|
+
* Client uploads directly to storage, bypassing the server
|
|
205
|
+
*/
|
|
206
|
+
getSignedUploadUrl(options: SignedUploadOptions): Promise<SignedUploadUrl>;
|
|
207
|
+
/**
|
|
208
|
+
* Get public URL for a file
|
|
209
|
+
*/
|
|
210
|
+
getPublicUrl(key: string): string;
|
|
211
|
+
/**
|
|
212
|
+
* Get the origin the browser connects to for direct client uploads.
|
|
213
|
+
* Used by the admin CSP when the storage descriptor has no static endpoint.
|
|
214
|
+
*/
|
|
215
|
+
getClientUploadOrigin?(): string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Storage error with additional context
|
|
219
|
+
*/
|
|
220
|
+
declare class EmDashStorageError extends Error {
|
|
221
|
+
code: string;
|
|
222
|
+
cause?: unknown | undefined;
|
|
223
|
+
constructor(message: string, code: string, cause?: unknown | undefined);
|
|
224
|
+
}
|
|
225
|
+
//#endregion
|
|
226
|
+
export { EmDashStorageError as a, ListResult as c, SignedUploadOptions as d, SignedUploadUrl as f, UploadResult as h, DownloadResult as i, LocalStorageConfig as l, StorageDescriptor as m, CreateStorageFn as n, FileInfo as o, Storage as p, DownloadOptions as r, ListOptions as s, ByteRange as t, S3StorageConfig as u };
|
|
227
|
+
//# sourceMappingURL=types-GwAyS5SH.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-GwAyS5SH.d.mts","names":[],"sources":["../src/storage/types.ts"],"mappings":";;AAUA;;;;;;;;UAAiB,eAAA;EAoBhB;EAlBA,QAAA;EAkBS;EAhBT,MAAA;EAsBkC;;;;AAUnC;EA1BC,WAAA;;;;;;EAMA,eAAA;EAwBc;EAtBd,MAAA;EAiC0B;EA/B1B,SAAA;AAAA;;;;UAMgB,kBAAA;EAyByD;EAvBzE,SAAA;EA4B4B;EA1B5B,OAAA;AAAA;;;;UAMgB,iBAAA;EA0BZ;EAxBJ,UAAA;EA8BoB;EA5BpB,MAAA,EAAQ,MAAA;AAAA;;;;;;AAqCT;;;KA1BY,eAAA,IAAmB,MAAA,EAAQ,MAAA,sBAA4B,OAAA;;AAqCnE;;UAhCiB,YAAA;EAkCK;EAhCrB,GAAA;EA2Ce;EAzCf,GAAA;EAyCmB;EAvCnB,IAAA;AAAA;;;;KAMW,SAAA;EAEP,MAAA;EAAgB,MAAA;AAAA;EAEhB,MAAA;AAAA;;;;UAKY,eAAA;EAoCP;;;;EA/BT,KAAA,GAAQ,SAAA;AAAA;;;;UAMQ,cAAA;EAuChB;EArCA,IAAA,EAAM,cAAA,CAAe,UAAA;EAuCZ;EArCT,WAAA;EA2CgB;EAzChB,IAAA;;;;;EAKA,KAAA;IAAU,MAAA;IAAgB,MAAA;EAAA;EA8CF;EA5CxB,YAAA,GAAe,IAAA;AAAA;;;;UAMC,eAAA;EA8ChB;EA5CA,GAAA;EA4CI;EA1CJ,MAAA;EAgD2B;EA9C3B,OAAA,EAAS,MAAA;EA8CkB;EA5C3B,SAAA;AAAA;;;;UAMgB,mBAAA;EAoDO;EAlDvB,GAAA;EAwDO;EAtDP,WAAA;EAsD4C;EApD5C,IAAA;EAwDY;EAtDZ,SAAA;AAAA;;;;UAMgB,UAAA;EAqED;EAnEf,KAAA,EAAO,QAAA;EAmEsB;EAjE7B,UAAA;AAAA;;;;UAMgB,QAAA;EAiCf;EA/BD,GAAA;EAgCO;EA9BP,IAAA;EA8B6B;EA5B7B,YAAA,EAAc,IAAA;EA6Bb;EA3BD,IAAA;AAAA;;;;UAMgB,WAAA;EA6BgB;EA3BhC,MAAA;EA2BkD;EAzBlD,KAAA;EA+BA;EA7BA,MAAA;AAAA;;;;;;UAQgB,OAAA;EA+Ba;;;EA3B7B,MAAA,CAAO,OAAA;IACN,GAAA;IACA,IAAA,EAAM,MAAA,GAAS,UAAA,GAAa,cAAA,CAAe,UAAA;IAC3C,WAAA,UAmCD;IAjCC,YAAA;EAAA,IACG,OAAA,CAAQ,YAAA;EAsCS;;AAMtB;EAvCC,QAAA,CAAS,GAAA,UAAa,OAAA,GAAU,eAAA,GAAkB,OAAA,CAAQ,cAAA;;;;;EAM1D,MAAA,CAAO,GAAA,WAAc,OAAA;;;;EAKrB,MAAA,CAAO,GAAA,WAAc,OAAA;EAgCW;;;EA3BhC,IAAA,CAAK,OAAA,GAAU,WAAA,GAAc,OAAA,CAAQ,UAAA;;;;;EAMrC,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,OAAA,CAAQ,eAAA;;;;EAK1D,YAAA,CAAa,GAAA;;;;;EAMb,qBAAA;AAAA;;;;cAMY,kBAAA,SAA2B,KAAA;EAG/B,IAAA;EACS,KAAA;cAFhB,OAAA,UACO,IAAA,UACS,KAAA;AAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
//#region src/plugins/sandbox/types.ts
|
|
2
|
+
const SANDBOX_ROUTE_ERROR_DEFINITIONS = {
|
|
3
|
+
MEDIA_USAGE_ACTIVATION_IN_PROGRESS: {
|
|
4
|
+
message: "Media usage activation is in progress",
|
|
5
|
+
status: 503
|
|
6
|
+
},
|
|
7
|
+
MEDIA_USAGE_ACTIVATION_CHECK_FAILED: {
|
|
8
|
+
message: "Unable to verify media usage activation state",
|
|
9
|
+
status: 503
|
|
10
|
+
},
|
|
11
|
+
TRANSFER_IMPORT_IN_PROGRESS: {
|
|
12
|
+
message: "A site import is in progress or incomplete; writes are disabled",
|
|
13
|
+
status: 503
|
|
14
|
+
},
|
|
15
|
+
TRANSFER_FENCE_CHECK_FAILED: {
|
|
16
|
+
message: "Unable to verify whether site writes are allowed",
|
|
17
|
+
status: 503
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function isRecord(value) {
|
|
21
|
+
return typeof value === "object" && value !== null;
|
|
22
|
+
}
|
|
23
|
+
function isSandboxRouteErrorCode(value) {
|
|
24
|
+
return typeof value === "string" && value in SANDBOX_ROUTE_ERROR_DEFINITIONS;
|
|
25
|
+
}
|
|
26
|
+
function getSandboxRouteErrorDetails(error) {
|
|
27
|
+
if (!isRecord(error)) return null;
|
|
28
|
+
const propertyCode = isSandboxRouteErrorCode(error.code) ? error.code : null;
|
|
29
|
+
const nameCode = error instanceof Error && isSandboxRouteErrorCode(error.name) ? error.name : null;
|
|
30
|
+
if (propertyCode && nameCode && propertyCode !== nameCode) return null;
|
|
31
|
+
const code = propertyCode ?? nameCode;
|
|
32
|
+
if (!code || error.status !== void 0 && error.status !== 503) return null;
|
|
33
|
+
return {
|
|
34
|
+
code,
|
|
35
|
+
...SANDBOX_ROUTE_ERROR_DEFINITIONS[code]
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function createSandboxRouteError(code) {
|
|
39
|
+
const details = {
|
|
40
|
+
code,
|
|
41
|
+
...SANDBOX_ROUTE_ERROR_DEFINITIONS[code]
|
|
42
|
+
};
|
|
43
|
+
return Object.assign(new Error(details.message), details, { name: code });
|
|
44
|
+
}
|
|
45
|
+
function createSandboxRouteErrorEnvelope(error) {
|
|
46
|
+
const details = getSandboxRouteErrorDetails(error);
|
|
47
|
+
return details ? {
|
|
48
|
+
__emdashSandboxRouteError: true,
|
|
49
|
+
error: details
|
|
50
|
+
} : null;
|
|
51
|
+
}
|
|
52
|
+
function getSandboxRouteErrorEnvelope(value) {
|
|
53
|
+
if (!isRecord(value) || value.__emdashSandboxRouteError !== true) return null;
|
|
54
|
+
const details = getSandboxRouteErrorDetails(value.error);
|
|
55
|
+
return details ? {
|
|
56
|
+
__emdashSandboxRouteError: true,
|
|
57
|
+
error: details
|
|
58
|
+
} : null;
|
|
59
|
+
}
|
|
60
|
+
function withUnavailableReason(message, runner) {
|
|
61
|
+
const reason = runner?.unavailableReason?.();
|
|
62
|
+
return reason ? `${message}: ${reason}` : message;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Error thrown when the sandbox runtime is unavailable.
|
|
66
|
+
* This happens when the sidecar process has crashed or hasn't started.
|
|
67
|
+
*/
|
|
68
|
+
var SandboxUnavailableError = class extends Error {
|
|
69
|
+
constructor(pluginId, reason) {
|
|
70
|
+
super(`Plugin sandbox unavailable for ${pluginId}: ${reason}`);
|
|
71
|
+
this.name = "SandboxUnavailableError";
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { getSandboxRouteErrorEnvelope as a, getSandboxRouteErrorDetails as i, createSandboxRouteError as n, withUnavailableReason as o, createSandboxRouteErrorEnvelope as r, SandboxUnavailableError as t };
|
|
77
|
+
//# sourceMappingURL=types-qHVygneX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-qHVygneX.mjs","names":[],"sources":["../src/plugins/sandbox/types.ts"],"sourcesContent":["/**\n * Plugin Sandbox Types\n *\n * Defines interfaces for running plugins in sandboxed V8 isolates.\n * The SandboxRunner interface is implemented by platform adapters\n * (e.g., Cloudflare Worker Loader) to provide isolation.\n *\n */\n\nimport type { PluginUiContext } from \"@emdash-cms/blocks/server\";\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport type { ContentActionCallbacks } from \"../context.js\";\nimport type {\n\tContentCreateOptions,\n\tContentItem,\n\tContentWriteInput,\n\tPluginComment,\n\tPluginCommentStatus,\n\tPluginManifest,\n\tRequestMeta,\n\tTaxonomyAccessWithWrite,\n\tUserInfo,\n} from \"../types.js\";\n\n/**\n * Resource limits for sandboxed plugins.\n * Enforced by the sandbox runtime (e.g., Worker Loader).\n */\nexport interface ResourceLimits {\n\t/** CPU time per invocation in milliseconds (default: 50ms) */\n\tcpuMs?: number;\n\t/** Memory limit in MB (default: 128MB) */\n\tmemoryMb?: number;\n\t/** Maximum subrequests per invocation (default: 10) */\n\tsubrequests?: number;\n\t/** Wall-clock time limit in milliseconds (default: 30000ms) */\n\twallTimeMs?: number;\n}\n\n/**\n * Storage interface for loading plugin code.\n * Could be R2, local filesystem, or any other storage backend.\n */\nexport interface PluginCodeStorage {\n\t/** Get plugin bundle code by path */\n\tget(path: string): Promise<string | null>;\n\t/** Check if a bundle exists */\n\texists(path: string): Promise<boolean>;\n}\n\n/**\n * Serialized email message for sandbox RPC transport.\n * Matches the core EmailMessage type but uses only serializable fields.\n */\nexport interface SandboxEmailMessage {\n\tto: string;\n\tcc?: string[];\n\treplyTo?: string;\n\tsubject: string;\n\ttext: string;\n\thtml?: string;\n}\n\n/**\n * Callback for sending email from a sandboxed plugin.\n * The sandbox runner wires this up from the EmailPipeline.\n *\n * @param message - The email message to send\n * @param pluginId - The sending plugin's ID (used as source)\n */\nexport type SandboxEmailSendCallback = (\n\tmessage: SandboxEmailMessage,\n\tpluginId: string,\n) => Promise<void>;\n\nexport type SandboxCommentModerateCallback = (\n\tpluginId: string,\n\tid: string,\n\tstatus: PluginCommentStatus,\n\texpectedStatus: PluginCommentStatus,\n) => Promise<PluginComment>;\n\nexport type SandboxContentCreateCallback = (\n\tpluginId: string,\n\tcollection: string,\n\tdata: ContentWriteInput,\n\toptions?: ContentCreateOptions & {\n\t\toriginHook?: \"content:beforeSave\" | \"content:afterSave\";\n\t\tsandboxOrigin?: true;\n\t},\n) => Promise<ContentItem>;\n\nexport type SandboxHttpFetchCallback = typeof fetch;\n\n/**\n * Options for creating a sandbox runner\n */\nexport interface SandboxOptions {\n\t/** Storage interface for loading plugin code */\n\tstorage?: PluginCodeStorage;\n\t/** Database for bridge operations */\n\tdb: Kysely<Database>;\n\t/**\n\t * Called immediately before a sandboxed plugin content mutation; it throws\n\t * to refuse the write. When it returns a function, the bridge calls that\n\t * function once the write has succeeded.\n\t */\n\tbeforeContentWrite?: () => Promise<void | (() => Promise<void>)>;\n\t/** Runtime-owned taxonomy mutation surface used by sandbox bridges. */\n\ttaxonomyWrite?: TaxonomyAccessWithWrite;\n\tcontentActions?: ContentActionCallbacks;\n\t/** Clock used to calculate recurring plugin task schedules. */\n\tnow?: () => Date;\n\t/** Default resource limits */\n\tlimits?: ResourceLimits;\n\t/** Site info for plugin context (injected into wrapper at generation time) */\n\tsiteInfo?: {\n\t\tname: string;\n\t\turl: string;\n\t\tlocale: string;\n\t\ttrailingSlash?: \"always\" | \"never\" | \"ignore\";\n\t};\n\t/** Email send callback, wired from the EmailPipeline by the runtime */\n\temailSend?: SandboxEmailSendCallback;\n\tcommentModerate?: SandboxCommentModerateCallback;\n\t/** Optional host HTTP transport used by test hosts and custom runtimes. */\n\thttpFetch?: SandboxHttpFetchCallback;\n\t/**\n\t * Media storage adapter for sandboxed plugin byte reads, uploads, and deletes.\n\t * Each operation remains gated by its own media capability.\n\t */\n\tmediaStorage?: {\n\t\tupload(options: { key: string; body: Uint8Array; contentType: string }): Promise<unknown>;\n\t\tdownload(key: string): Promise<{\n\t\t\tbody: ReadableStream<Uint8Array>;\n\t\t\tcontentType: string;\n\t\t\tsize: number;\n\t\t}>;\n\t\tdelete(key: string): Promise<unknown>;\n\t};\n\t/** Worker Loader name suffix. The plugin's logical ID remains unchanged. */\n\tisolateKey?: string;\n}\n\n/**\n * Handle to a sandboxed plugin running inside an isolate. Returned\n * by `SandboxRunner.load` and held by the runtime's cache so hooks /\n * routes can be invoked across the isolate boundary. Distinct from\n * the author-facing `SandboxedPlugin` type in `emdash/plugin`, which\n * describes the source-level shape of a plugin's default export.\n */\nexport interface SandboxedPluginInstance {\n\t/** Unique identifier: `${manifest.id}:${manifest.version}` */\n\treadonly id: string;\n\n\t/**\n\t * Invoke a hook in the sandboxed plugin.\n\t *\n\t * @param hookName - Name of the hook (e.g., \"content:beforeSave\")\n\t * @param event - Event data to pass to the hook\n\t * @returns Hook result (transformed content, void, etc.)\n\t */\n\tinvokeHook(hookName: string, event: unknown): Promise<unknown>;\n\n\t/**\n\t * Invoke an API route in the sandboxed plugin.\n\t *\n\t * @param routeName - Name of the route\n\t * @param input - Validated input data\n\t * @param request - Serialized request info for context\n\t * @returns Route response data\n\t */\n\tinvokeRoute(\n\t\trouteName: string,\n\t\tinput: unknown,\n\t\trequest: SerializedRequest,\n\t\toptions?: SandboxInvocationOptions,\n\t): Promise<unknown>;\n\n\t/**\n\t * Change whether the plugin may access host services.\n\t * Deactivation revokes credentials synchronously; reactivation issues fresh credentials.\n\t */\n\tsetActive?(active: boolean): void;\n\n\t/**\n\t * Terminate the sandboxed plugin.\n\t * Releases resources and prevents further invocations.\n\t */\n\tterminate(): Promise<void>;\n}\n\nexport interface SandboxInvocationOptions {\n\tinvalidateContentCache?: (tags: string[]) => Promise<void>;\n}\n\n/**\n * Serialized request for RPC transport.\n * Worker Loader can't pass Request objects directly.\n */\nexport interface SerializedRequest {\n\turl: string;\n\tmethod: string;\n\theaders: Record<string, string>;\n\t/** Normalized request metadata extracted before RPC serialization */\n\tmeta: RequestMeta;\n\t/** Host-attested context for a validated Block Kit request. */\n\tui?: PluginUiContext;\n\t/**\n\t * Authenticated caller for private routes, resolved by the host before\n\t * dispatch. Undefined for public routes and unbound machine tokens.\n\t */\n\tuser?: UserInfo;\n}\n\nconst SANDBOX_ROUTE_ERROR_DEFINITIONS = {\n\tMEDIA_USAGE_ACTIVATION_IN_PROGRESS: {\n\t\tmessage: \"Media usage activation is in progress\",\n\t\tstatus: 503,\n\t},\n\tMEDIA_USAGE_ACTIVATION_CHECK_FAILED: {\n\t\tmessage: \"Unable to verify media usage activation state\",\n\t\tstatus: 503,\n\t},\n\tTRANSFER_IMPORT_IN_PROGRESS: {\n\t\tmessage: \"A site import is in progress or incomplete; writes are disabled\",\n\t\tstatus: 503,\n\t},\n\tTRANSFER_FENCE_CHECK_FAILED: {\n\t\tmessage: \"Unable to verify whether site writes are allowed\",\n\t\tstatus: 503,\n\t},\n} as const;\n\nexport type SandboxRouteErrorCode = keyof typeof SANDBOX_ROUTE_ERROR_DEFINITIONS;\n\nexport interface SandboxRouteErrorDetails {\n\tcode: SandboxRouteErrorCode;\n\tmessage: string;\n\tstatus: 503;\n}\n\nexport interface SandboxRouteErrorEnvelope {\n\t__emdashSandboxRouteError: true;\n\terror: SandboxRouteErrorDetails;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isSandboxRouteErrorCode(value: unknown): value is SandboxRouteErrorCode {\n\treturn typeof value === \"string\" && value in SANDBOX_ROUTE_ERROR_DEFINITIONS;\n}\n\nexport function getSandboxRouteErrorDetails(error: unknown): SandboxRouteErrorDetails | null {\n\tif (!isRecord(error)) return null;\n\n\tconst propertyCode = isSandboxRouteErrorCode(error.code) ? error.code : null;\n\tconst nameCode =\n\t\terror instanceof Error && isSandboxRouteErrorCode(error.name) ? error.name : null;\n\tif (propertyCode && nameCode && propertyCode !== nameCode) return null;\n\n\tconst code = propertyCode ?? nameCode;\n\tif (!code || (error.status !== undefined && error.status !== 503)) return null;\n\n\treturn {\n\t\tcode,\n\t\t...SANDBOX_ROUTE_ERROR_DEFINITIONS[code],\n\t};\n}\n\nexport function createSandboxRouteError(\n\tcode: SandboxRouteErrorCode,\n): Error & SandboxRouteErrorDetails {\n\tconst details: SandboxRouteErrorDetails = {\n\t\tcode,\n\t\t...SANDBOX_ROUTE_ERROR_DEFINITIONS[code],\n\t};\n\treturn Object.assign(new Error(details.message), details, { name: code });\n}\n\nexport function createSandboxRouteErrorEnvelope(error: unknown): SandboxRouteErrorEnvelope | null {\n\tconst details = getSandboxRouteErrorDetails(error);\n\treturn details ? { __emdashSandboxRouteError: true, error: details } : null;\n}\n\nexport function getSandboxRouteErrorEnvelope(value: unknown): SandboxRouteErrorEnvelope | null {\n\tif (!isRecord(value) || value.__emdashSandboxRouteError !== true) return null;\n\tconst details = getSandboxRouteErrorDetails(value.error);\n\treturn details ? { __emdashSandboxRouteError: true, error: details } : null;\n}\n\n/**\n * Sandbox runner interface.\n * Platform adapters implement this to provide plugin isolation.\n */\nexport interface SandboxRunner {\n\t/**\n\t * Check if sandboxing is available on this platform.\n\t * Returns false for platforms that don't support isolation.\n\t */\n\tisAvailable(): boolean;\n\n\t/**\n\t * Check if the sandbox runtime is currently healthy.\n\t * For in-process runners this always returns true.\n\t * For sidecar-based runners (workerd), returns false if the\n\t * child process has crashed and hasn't been restarted yet.\n\t */\n\tisHealthy(): boolean;\n\n\t/**\n\t * Why the runner cannot run plugins, once isAvailable() or isHealthy()\n\t * has returned false. A lowercase clause without a final period: callers\n\t * append it to their own message after a colon.\n\t *\n\t * Making this required breaks runners implemented outside this repository.\n\t */\n\tunavailableReason?(): string;\n\n\t/**\n\t * Load a sandboxed plugin from code.\n\t *\n\t * @param manifest - Plugin manifest with metadata and capabilities\n\t * @param code - The bundled plugin JavaScript code\n\t * @returns A sandboxed plugin instance\n\t * @throws If sandboxing is not available or plugin can't be loaded\n\t */\n\tload(manifest: PluginManifest, code: string): Promise<SandboxedPluginInstance>;\n\n\t/**\n\t * Set the email send callback for sandboxed plugins.\n\t * Called after the EmailPipeline is created, since the pipeline\n\t * doesn't exist when the sandbox runner is constructed.\n\t */\n\tsetEmailSend(callback: SandboxEmailSendCallback | null): void;\n\tsetCommentModerate?(callback: SandboxCommentModerateCallback | null): void;\n\tsetContentCreate?(callback: SandboxContentCreateCallback | null): void;\n\tsetContentActions?(callback: ContentActionCallbacks | null): void;\n\n\t/** Wake a long-lived scheduler after a sandboxed plugin changes its tasks. */\n\tsetCronReschedule?(callback: (() => void) | null): void;\n\n\t/**\n\t * Terminate all loaded sandboxed plugins.\n\t * Called during shutdown or when reconfiguring.\n\t */\n\tterminateAll(): Promise<void>;\n}\n\nexport function withUnavailableReason(message: string, runner: SandboxRunner | null): string {\n\tconst reason = runner?.unavailableReason?.();\n\treturn reason ? `${message}: ${reason}` : message;\n}\n\n/**\n * Error thrown when the sandbox runtime is unavailable.\n * This happens when the sidecar process has crashed or hasn't started.\n */\nexport class SandboxUnavailableError extends Error {\n\tconstructor(pluginId: string, reason: string) {\n\t\tsuper(`Plugin sandbox unavailable for ${pluginId}: ${reason}`);\n\t\tthis.name = \"SandboxUnavailableError\";\n\t}\n}\n\n/**\n * Factory function type for creating sandbox runners.\n * Exported by platform adapters (e.g., @emdash-cms/cloudflare/sandbox).\n *\n * @example\n * ```typescript\n * // In @emdash-cms/cloudflare/sandbox\n * export const createSandboxRunner: SandboxRunnerFactory = (options) => {\n * return new CloudflareSandboxRunner(options);\n * };\n * ```\n */\nexport type SandboxRunnerFactory = (options: SandboxOptions) => SandboxRunner;\n"],"mappings":";AAyNA,MAAM,kCAAkC;CACvC,oCAAoC;EACnC,SAAS;EACT,QAAQ;EACR;CACD,qCAAqC;EACpC,SAAS;EACT,QAAQ;EACR;CACD,6BAA6B;EAC5B,SAAS;EACT,QAAQ;EACR;CACD,6BAA6B;EAC5B,SAAS;EACT,QAAQ;EACR;CACD;AAeD,SAAS,SAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU;;AAG/C,SAAS,wBAAwB,OAAgD;AAChF,QAAO,OAAO,UAAU,YAAY,SAAS;;AAG9C,SAAgB,4BAA4B,OAAiD;AAC5F,KAAI,CAAC,SAAS,MAAM,CAAE,QAAO;CAE7B,MAAM,eAAe,wBAAwB,MAAM,KAAK,GAAG,MAAM,OAAO;CACxE,MAAM,WACL,iBAAiB,SAAS,wBAAwB,MAAM,KAAK,GAAG,MAAM,OAAO;AAC9E,KAAI,gBAAgB,YAAY,iBAAiB,SAAU,QAAO;CAElE,MAAM,OAAO,gBAAgB;AAC7B,KAAI,CAAC,QAAS,MAAM,WAAW,UAAa,MAAM,WAAW,IAAM,QAAO;AAE1E,QAAO;EACN;EACA,GAAG,gCAAgC;EACnC;;AAGF,SAAgB,wBACf,MACmC;CACnC,MAAM,UAAoC;EACzC;EACA,GAAG,gCAAgC;EACnC;AACD,QAAO,OAAO,OAAO,IAAI,MAAM,QAAQ,QAAQ,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;;AAG1E,SAAgB,gCAAgC,OAAkD;CACjG,MAAM,UAAU,4BAA4B,MAAM;AAClD,QAAO,UAAU;EAAE,2BAA2B;EAAM,OAAO;EAAS,GAAG;;AAGxE,SAAgB,6BAA6B,OAAkD;AAC9F,KAAI,CAAC,SAAS,MAAM,IAAI,MAAM,8BAA8B,KAAM,QAAO;CACzE,MAAM,UAAU,4BAA4B,MAAM,MAAM;AACxD,QAAO,UAAU;EAAE,2BAA2B;EAAM,OAAO;EAAS,GAAG;;AA6DxE,SAAgB,sBAAsB,SAAiB,QAAsC;CAC5F,MAAM,SAAS,QAAQ,qBAAqB;AAC5C,QAAO,SAAS,GAAG,QAAQ,IAAI,WAAW;;;;;;AAO3C,IAAa,0BAAb,cAA6C,MAAM;CAClD,YAAY,UAAkB,QAAgB;AAC7C,QAAM,kCAAkC,SAAS,IAAI,SAAS;AAC9D,OAAK,OAAO"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CAPABILITY_RENAMES, isDeprecatedCapability, normalizeCapabilities, normalizeCapability } from "@emdash-cms/plugin-types";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/types.ts
|
|
4
|
+
const PLUGIN_CAPABILITY_IMPLICATIONS = [
|
|
5
|
+
["content:write", "content:read"],
|
|
6
|
+
["content:revisions:read", "content:read"],
|
|
7
|
+
["taxonomies:write", "taxonomies:read"],
|
|
8
|
+
["content:publish", "content:read"],
|
|
9
|
+
["media:write", "media:read"],
|
|
10
|
+
["comments:moderate", "comments:read"],
|
|
11
|
+
["redirects:write", "redirects:read"],
|
|
12
|
+
["network:request:unrestricted", "network:request"]
|
|
13
|
+
];
|
|
14
|
+
function normalizePluginCapabilities(capabilities) {
|
|
15
|
+
const normalized = new Set(normalizeCapabilities(capabilities));
|
|
16
|
+
for (const [granted, implied] of PLUGIN_CAPABILITY_IMPLICATIONS) if (normalized.has(granted)) normalized.add(implied);
|
|
17
|
+
return [...normalized];
|
|
18
|
+
}
|
|
19
|
+
const WARNED_DEPRECATED_CAPABILITY_PLUGINS = Symbol.for("emdash:warned-deprecated-capability-plugins");
|
|
20
|
+
/**
|
|
21
|
+
* Warn, once per plugin per process, that a plugin declares deprecated
|
|
22
|
+
* capability names. Call with the plugin's raw, un-normalized capabilities.
|
|
23
|
+
*/
|
|
24
|
+
function warnDeprecatedPluginCapabilities(pluginId, capabilities) {
|
|
25
|
+
const deprecated = capabilities.filter(isDeprecatedCapability);
|
|
26
|
+
if (deprecated.length === 0) return;
|
|
27
|
+
const g = globalThis;
|
|
28
|
+
const warned = g[WARNED_DEPRECATED_CAPABILITY_PLUGINS] ??= /* @__PURE__ */ new Set();
|
|
29
|
+
if (warned.has(pluginId)) return;
|
|
30
|
+
warned.add(pluginId);
|
|
31
|
+
const renames = deprecated.map((cap) => `${cap} → ${CAPABILITY_RENAMES[cap]}`).join(", ");
|
|
32
|
+
console.warn(`[emdash] Plugin "${pluginId}" declares deprecated capability names (${renames}). They still work, but support will be removed in a future major release. Update the plugin, or ask its author to publish a version that uses the current names.`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { normalizePluginCapabilities as a, normalizeCapability as i, isDeprecatedCapability as n, warnDeprecatedPluginCapabilities as o, normalizeCapabilities as r, CAPABILITY_RENAMES as t };
|
|
37
|
+
//# sourceMappingURL=types-sUHaH7lC.mjs.map
|