emdash 1.1.0 → 1.3.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-Dim4YMM7.mjs +387 -0
- package/dist/activation-Dim4YMM7.mjs.map +1 -0
- package/dist/adapters-F_xorvWv.d.mts +173 -0
- package/dist/adapters-F_xorvWv.d.mts.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.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +48 -46
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +10 -10
- package/dist/api-D-7BNHoz.mjs +5025 -0
- package/dist/api-D-7BNHoz.mjs.map +1 -0
- package/dist/api-tokens-Bx38ZCQp.mjs +173 -0
- package/dist/api-tokens-Bx38ZCQp.mjs.map +1 -0
- package/dist/apply-T7ATgzCh.mjs +1702 -0
- package/dist/apply-T7ATgzCh.mjs.map +1 -0
- package/dist/approvals-D-m6wvGl.mjs +460 -0
- package/dist/approvals-D-m6wvGl.mjs.map +1 -0
- package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
- package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
- package/dist/artifacts-htGyfCSt.mjs +307 -0
- package/dist/artifacts-htGyfCSt.mjs.map +1 -0
- package/dist/astro/image-endpoint.d.mts.map +1 -1
- package/dist/astro/image-endpoint.mjs +26 -6
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +14 -14
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +324 -23
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +12 -12
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +18 -13
- 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.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +81 -46
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +117 -56
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +12 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +145 -415
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +8 -7
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +16 -16
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +16 -16
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
- package/dist/astro/routes/api/admin/core-update.mjs +7 -7
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
- package/dist/astro/routes/api/admin/media-usage/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 +23 -22
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -28
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- 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 +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- 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 +72 -70
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -69
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +71 -70
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +80 -79
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +72 -70
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -69
- 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 +79 -78
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -69
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +71 -70
- 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 +81 -80
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +73 -72
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -70
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -69
- 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 +71 -69
- 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 +7 -7
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -69
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +38 -37
- 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 +38 -37
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +40 -39
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +40 -39
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +40 -39
- 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 +41 -40
- 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 +41 -40
- 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 +40 -39
- 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 +41 -40
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +42 -41
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +40 -39
- 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 +40 -39
- 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 +42 -41
- 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 +40 -39
- 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 +42 -41
- 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 +40 -39
- 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 +40 -39
- 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 +42 -41
- 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 +40 -39
- 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 +40 -39
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +42 -41
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -14
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
- package/dist/astro/routes/api/admin/users/index.mjs +14 -14
- package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
- package/dist/astro/routes/api/auth/handover.d.mts +8 -0
- package/dist/astro/routes/api/auth/handover.d.mts.map +1 -0
- package/dist/astro/routes/api/auth/handover.mjs +49 -0
- package/dist/astro/routes/api/auth/handover.mjs.map +1 -0
- package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
- package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
- package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
- package/dist/astro/routes/api/auth/logout.mjs +5 -5
- package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +23 -17
- package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +15 -15
- package/dist/astro/routes/api/auth/mode.mjs +5 -5
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
- package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
- package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +27 -20
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
- 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 +18 -17
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
- package/dist/astro/routes/api/calendar.mjs +15 -15
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +20 -17
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +30 -29
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +35 -34
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +35 -34
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -18
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +31 -26
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -20
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/index.mjs +18 -21
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
- package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
- package/dist/astro/routes/api/dashboard.mjs +18 -12
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +5 -5
- package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
- package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
- package/dist/astro/routes/api/dev/scheduled-tasks.mjs +140 -0
- package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
- package/dist/astro/routes/api/health.mjs +6 -6
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +25 -23
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -20
- package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
- package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +36 -30
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -17
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +8 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +67 -31
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -26
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +26 -23
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +63 -35
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +9 -6
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +135 -101
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +34 -18
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- 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 +31 -30
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +29 -28
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +45 -15
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
- package/dist/astro/routes/api/media/folders/index.mjs +16 -16
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
- package/dist/astro/routes/api/media/providers/index.mjs +5 -5
- package/dist/astro/routes/api/media/upload-url.mjs +40 -20
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +40 -29
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +18 -17
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -17
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -17
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +18 -17
- 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 +8 -8
- package/dist/astro/routes/api/oauth/device/code.mjs +12 -11
- package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/token.mjs +11 -10
- package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/register.mjs +8 -7
- package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
- package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
- package/dist/astro/routes/api/oauth/token.mjs +8 -8
- package/dist/astro/routes/api/openapi.json.mjs +22 -22
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
- package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
- package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
- package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +32 -23
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +24 -21
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +35 -34
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +35 -34
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +16 -16
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -69
- 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 +71 -69
- 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 +71 -69
- package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +71 -69
- 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 +71 -69
- 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 +71 -69
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -69
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +71 -69
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -69
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +17 -16
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -69
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +71 -69
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +19 -18
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +18 -17
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +19 -18
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +9 -8
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +18 -17
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +18 -17
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +18 -17
- 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.d.mts +8 -0
- package/dist/astro/routes/api/settings/domain-notify.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/domain-notify.mjs +125 -0
- package/dist/astro/routes/api/settings/domain-notify.mjs.map +1 -0
- package/dist/astro/routes/api/settings/domain.d.mts +9 -0
- package/dist/astro/routes/api/settings/domain.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/domain.mjs +64 -0
- package/dist/astro/routes/api/settings/domain.mjs.map +1 -0
- package/dist/astro/routes/api/settings/email.mjs +6 -6
- package/dist/astro/routes/api/settings.d.mts.map +1 -1
- package/dist/astro/routes/api/settings.mjs +23 -20
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +25 -21
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +18 -18
- package/dist/astro/routes/api/setup/dev-bypass.mjs +43 -41
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
- package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/index.mjs +53 -47
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +6 -6
- package/dist/astro/routes/api/site/domain-proof.d.mts +8 -0
- package/dist/astro/routes/api/site/domain-proof.d.mts.map +1 -0
- package/dist/astro/routes/api/site/domain-proof.mjs +35 -0
- package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -0
- package/dist/astro/routes/api/snapshot.mjs +8 -8
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +24 -22
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +24 -22
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -23
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +24 -22
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -23
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -34
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +24 -22
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +6 -6
- package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +18 -18
- package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
- 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 +17 -16
- 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 +21 -19
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -18
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +20 -18
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +5 -5
- package/dist/astro/routes/robots.txt.d.mts.map +1 -1
- package/dist/astro/routes/robots.txt.mjs +38 -5
- package/dist/astro/routes/robots.txt.mjs.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +33 -11
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.d.mts.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +17 -11
- package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
- package/dist/astro/types.d.mts +32 -18
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/audit-_gieLVGU.mjs +127 -0
- package/dist/audit-_gieLVGU.mjs.map +1 -0
- 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-DPFBGbE6.mjs +74 -0
- package/dist/authorize-DPFBGbE6.mjs.map +1 -0
- package/dist/backup-3FgVxiDJ.mjs +246 -0
- package/dist/backup-3FgVxiDJ.mjs.map +1 -0
- package/dist/block-types-CYcG56JB.mjs +132 -0
- package/dist/block-types-CYcG56JB.mjs.map +1 -0
- package/dist/block-values-gCX4HBSl.mjs +215 -0
- package/dist/block-values-gCX4HBSl.mjs.map +1 -0
- package/dist/byline-BR1qhyiw.mjs +909 -0
- package/dist/byline-BR1qhyiw.mjs.map +1 -0
- package/dist/byline-fields-4ClDC88c.mjs +123 -0
- package/dist/byline-fields-4ClDC88c.mjs.map +1 -0
- package/dist/byline-fields-BLXZnX7N.mjs +280 -0
- package/dist/byline-fields-BLXZnX7N.mjs.map +1 -0
- package/dist/bylines-CVOvRUL7.mjs +234 -0
- package/dist/bylines-CVOvRUL7.mjs.map +1 -0
- package/dist/bylines-DxOs9B7z.mjs +150 -0
- package/dist/bylines-DxOs9B7z.mjs.map +1 -0
- package/dist/cache-CEU9wo_h.mjs +151 -0
- package/dist/cache-CEU9wo_h.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-CT6dK9zd.mjs +362 -0
- package/dist/capture-triggers-CT6dK9zd.mjs.map +1 -0
- package/dist/challenge-store-C17BYx2-.mjs +51 -0
- package/dist/challenge-store-C17BYx2-.mjs.map +1 -0
- package/dist/checksum-CEqvfxGX.mjs +162 -0
- package/dist/checksum-CEqvfxGX.mjs.map +1 -0
- package/dist/chunks-xC4UD5-S.mjs +25 -0
- package/dist/chunks-xC4UD5-S.mjs.map +1 -0
- package/dist/cli/index.mjs +134 -118
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +122 -122
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +12 -10
- package/dist/client/index.mjs.map +1 -1
- package/dist/collection-slugs-cache-e09QeJQt.mjs +85 -0
- package/dist/collection-slugs-cache-e09QeJQt.mjs.map +1 -0
- package/dist/comment-UvIWDKcW.mjs +325 -0
- package/dist/comment-UvIWDKcW.mjs.map +1 -0
- package/dist/comment-reaction-dGp6_FRo.mjs +85 -0
- package/dist/comment-reaction-dGp6_FRo.mjs.map +1 -0
- package/dist/comments-pej-_BUO.mjs +195 -0
- package/dist/comments-pej-_BUO.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-Bsm_u_oE.d.mts +6799 -0
- package/dist/config-Bsm_u_oE.d.mts.map +1 -0
- package/dist/config-CFMojMFK.d.mts +39 -0
- package/dist/config-CFMojMFK.d.mts.map +1 -0
- package/dist/config-DBU6iUQB.mjs +228 -0
- package/dist/config-DBU6iUQB.mjs.map +1 -0
- package/dist/connection-BtEN_lP9.mjs +36 -0
- package/dist/connection-BtEN_lP9.mjs.map +1 -0
- package/dist/content-DQSRZTVw.mjs +2075 -0
- package/dist/content-DQSRZTVw.mjs.map +1 -0
- package/dist/content-list-query-CYKcY6Vi.d.mts +26 -0
- package/dist/content-list-query-CYKcY6Vi.d.mts.map +1 -0
- package/dist/content-repair-DNh5--x5.mjs +442 -0
- package/dist/content-repair-DNh5--x5.mjs.map +1 -0
- package/dist/context-BYptmCN0.mjs +2090 -0
- package/dist/context-BYptmCN0.mjs.map +1 -0
- package/dist/credits-B9iORdWB.mjs +110 -0
- package/dist/credits-B9iORdWB.mjs.map +1 -0
- package/dist/cron-D7obTIfk.mjs +306 -0
- package/dist/cron-D7obTIfk.mjs.map +1 -0
- package/dist/dashboard-D0jcgBD7.mjs +167 -0
- package/dist/dashboard-D0jcgBD7.mjs.map +1 -0
- package/dist/database/migration-lock.d.mts +17 -4
- package/dist/database/migration-lock.d.mts.map +1 -1
- package/dist/database/migration-lock.mjs +32 -5
- package/dist/database/migration-lock.mjs.map +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +4 -4
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +4 -4
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +4 -4
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/default-C0W-PhAp.mjs +81 -0
- package/dist/default-C0W-PhAp.mjs.map +1 -0
- package/dist/deferred-tasks-ZvUECSzI.d.mts +9 -0
- package/dist/deferred-tasks-ZvUECSzI.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-BkFKBoAn.mjs +521 -0
- package/dist/device-flow-BkFKBoAn.mjs.map +1 -0
- package/dist/digest-DJ1tHCgy.mjs +194 -0
- package/dist/digest-DJ1tHCgy.mjs.map +1 -0
- package/dist/direct-executor-Cbxzg4qe.mjs +117 -0
- package/dist/direct-executor-Cbxzg4qe.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-BJ8DjTzZ.mjs +25 -0
- package/dist/email-locale-BJ8DjTzZ.mjs.map +1 -0
- package/dist/emdash-runtime-DVi7vtXC.mjs +4379 -0
- package/dist/emdash-runtime-DVi7vtXC.mjs.map +1 -0
- package/dist/entry-lock-C7VX0NGK.d.mts +4568 -0
- package/dist/entry-lock-C7VX0NGK.d.mts.map +1 -0
- package/dist/entry-lock-DLxCffFW.mjs +163 -0
- package/dist/entry-lock-DLxCffFW.mjs.map +1 -0
- package/dist/entry-lock-Df6-XhIu.mjs +1211 -0
- package/dist/entry-lock-Df6-XhIu.mjs.map +1 -0
- package/dist/env-types-C3FCVBWe.mjs +38 -0
- package/dist/env-types-C3FCVBWe.mjs.map +1 -0
- package/dist/error-CVWeIOku.mjs +90 -0
- package/dist/error-CVWeIOku.mjs.map +1 -0
- package/dist/errors-B4f4It-2.mjs +120 -0
- package/dist/errors-B4f4It-2.mjs.map +1 -0
- package/dist/errors-BOYNdIo3.mjs +479 -0
- package/dist/errors-BOYNdIo3.mjs.map +1 -0
- package/dist/escape-lsNq38PP.mjs +9 -0
- package/dist/escape-lsNq38PP.mjs.map +1 -0
- package/dist/fence-C3MUitUN.mjs +162 -0
- package/dist/fence-C3MUitUN.mjs.map +1 -0
- package/dist/field-defs-cache-Dez5iWJJ.mjs +77 -0
- package/dist/field-defs-cache-Dez5iWJJ.mjs.map +1 -0
- package/dist/field-map-Bft9LKak.mjs +83 -0
- package/dist/field-map-Bft9LKak.mjs.map +1 -0
- package/dist/fts-manager-Beg3e4bI.mjs +443 -0
- package/dist/fts-manager-Beg3e4bI.mjs.map +1 -0
- package/dist/gc-ByyAYiYE.mjs +75 -0
- package/dist/gc-ByyAYiYE.mjs.map +1 -0
- package/dist/hash-BJaeek87.mjs +37 -0
- package/dist/hash-BJaeek87.mjs.map +1 -0
- package/dist/hook-result-BrdLyOdI.d.mts +31 -0
- package/dist/hook-result-BrdLyOdI.d.mts.map +1 -0
- package/dist/hreflang-C8Jb-hrf.mjs +105 -0
- package/dist/hreflang-C8Jb-hrf.mjs.map +1 -0
- package/dist/hreflang-CY_F5OjF.d.mts +50 -0
- package/dist/hreflang-CY_F5OjF.d.mts.map +1 -0
- package/dist/http-route-dispatch-CyeW6iPv.mjs +342 -0
- package/dist/http-route-dispatch-CyeW6iPv.mjs.map +1 -0
- package/dist/identity-Cael5uTT.mjs +35 -0
- package/dist/identity-Cael5uTT.mjs.map +1 -0
- package/dist/import-BUXjdZUn.mjs +2126 -0
- package/dist/import-BUXjdZUn.mjs.map +1 -0
- package/dist/index-BB9sVisO.d.mts +623 -0
- package/dist/index-BB9sVisO.d.mts.map +1 -0
- package/dist/index.d.mts +24 -24
- package/dist/index.mjs +97 -95
- package/dist/install-finalization-3JX5qQEA.mjs +58 -0
- package/dist/install-finalization-3JX5qQEA.mjs.map +1 -0
- package/dist/json-recordset-BUjxhr77.mjs +12 -0
- package/dist/json-recordset-BUjxhr77.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-7vUJeFRe.mjs +25 -0
- package/dist/lifecycle-7vUJeFRe.mjs.map +1 -0
- package/dist/load-CdAG9wz-.mjs +28 -0
- package/dist/load-CdAG9wz-.mjs.map +1 -0
- package/dist/loader-CswroUbe.mjs +1380 -0
- package/dist/loader-CswroUbe.mjs.map +1 -0
- package/dist/loops-uA4iTOzd.mjs +205 -0
- package/dist/loops-uA4iTOzd.mjs.map +1 -0
- package/dist/manifest-builder-B8zjuH3f.mjs +189 -0
- package/dist/manifest-builder-B8zjuH3f.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.d.mts +26 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +73 -3
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +14 -14
- package/dist/media/local-runtime.mjs +10 -5
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/media--dJRU6i2.mjs +294 -0
- package/dist/media--dJRU6i2.mjs.map +1 -0
- package/dist/media-1WC65OCB.mjs +416 -0
- package/dist/media-1WC65OCB.mjs.map +1 -0
- package/dist/media-Bws9f18T.mjs +373 -0
- package/dist/media-Bws9f18T.mjs.map +1 -0
- package/dist/media-allowlist-BJB7MFx6.mjs +45 -0
- package/dist/media-allowlist-BJB7MFx6.mjs.map +1 -0
- package/dist/media-folders-Dn3C16B8.mjs +210 -0
- package/dist/media-folders-Dn3C16B8.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-CF0WVcLO.mjs +282 -0
- package/dist/media-usage-CF0WVcLO.mjs.map +1 -0
- package/dist/media-usage-activation-C9HwVw5w.mjs +78 -0
- package/dist/media-usage-activation-C9HwVw5w.mjs.map +1 -0
- package/dist/media-usage-work-CkLa5-nc.mjs +1036 -0
- package/dist/media-usage-work-CkLa5-nc.mjs.map +1 -0
- package/dist/media-usage-work-m3AWTmmC.mjs +151 -0
- package/dist/media-usage-work-m3AWTmmC.mjs.map +1 -0
- package/dist/menus-BCVSSp1z.mjs +753 -0
- package/dist/menus-BCVSSp1z.mjs.map +1 -0
- package/dist/menus-BSzwObhV.mjs +92 -0
- package/dist/menus-BSzwObhV.mjs.map +1 -0
- package/dist/menus-Cl4kwdt7.mjs +3721 -0
- package/dist/menus-Cl4kwdt7.mjs.map +1 -0
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.d.mts.map +1 -1
- package/dist/migrations/index.mjs +3 -3
- 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/oauth-authorization-TpEJrYB7.mjs +274 -0
- package/dist/oauth-authorization-TpEJrYB7.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-CHMn_mwc.mjs +50 -0
- package/dist/oauth-state-store-CHMn_mwc.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/options-DJWaq3Ie.d.mts +81 -0
- package/dist/options-DJWaq3Ie.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 +9 -4
- package/dist/page/index.mjs.map +1 -1
- package/dist/parse-CWHOFc6z.d.mts +176 -0
- package/dist/parse-CWHOFc6z.d.mts.map +1 -0
- package/dist/parse-DgQ2NABT.mjs +81 -0
- package/dist/parse-DgQ2NABT.mjs.map +1 -0
- package/dist/passkey-config-D0kdzEao.mjs +46 -0
- package/dist/passkey-config-D0kdzEao.mjs.map +1 -0
- package/dist/paths-biDzFTY2.mjs +77 -0
- package/dist/paths-biDzFTY2.mjs.map +1 -0
- package/dist/patterns-CMNnYCgf.mjs +159 -0
- package/dist/patterns-CMNnYCgf.mjs.map +1 -0
- package/dist/placeholder-D41vk11_.d.mts +306 -0
- package/dist/placeholder-D41vk11_.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 +14 -14
- package/dist/plugin-test-runtime.d.mts.map +1 -1
- package/dist/plugin-test-runtime.mjs +110 -108
- 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 +2 -2
- package/dist/plugin-utils.d.mts +12 -12
- package/dist/plugin-utils.mjs +1 -1
- package/dist/plugin-utils.mjs.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/plugins/host.d.mts +5 -5
- package/dist/plugins/host.mjs +46 -42
- package/dist/plugins-COJ2L49n.mjs +261 -0
- package/dist/plugins-COJ2L49n.mjs.map +1 -0
- package/dist/policy-DLQ--Hnm.mjs +45 -0
- package/dist/policy-DLQ--Hnm.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-79kUO7jP.d.mts +65 -0
- package/dist/protocol-79kUO7jP.d.mts.map +1 -0
- package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +316 -0
- package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +1 -0
- package/dist/public-submission-Di3TsgzX.mjs +251 -0
- package/dist/public-submission-Di3TsgzX.mjs.map +1 -0
- package/dist/public-url-Bt98vysr.mjs +101 -0
- package/dist/public-url-Bt98vysr.mjs.map +1 -0
- package/dist/query-CpnRlBh8.mjs +1156 -0
- package/dist/query-CpnRlBh8.mjs.map +1 -0
- package/dist/query-haKvLAWl.mjs +41 -0
- package/dist/query-haKvLAWl.mjs.map +1 -0
- package/dist/range-CYfeXgGK.mjs +51 -0
- package/dist/range-CYfeXgGK.mjs.map +1 -0
- package/dist/rate-limit-Xp4d0NBY.mjs +127 -0
- package/dist/rate-limit-Xp4d0NBY.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-DiS_3mA4.mjs +423 -0
- package/dist/redirect-DiS_3mA4.mjs.map +1 -0
- package/dist/redirect-paths-CNYq7w80.mjs +36 -0
- package/dist/redirect-paths-CNYq7w80.mjs.map +1 -0
- package/dist/redirects-BEVSRMa2.mjs +148 -0
- package/dist/redirects-BEVSRMa2.mjs.map +1 -0
- package/dist/redirects-BHpy-VsZ.mjs +446 -0
- package/dist/redirects-BHpy-VsZ.mjs.map +1 -0
- package/dist/registry/testing.mjs +3 -3
- package/dist/registry-TUVaid9Z.mjs +8369 -0
- package/dist/registry-TUVaid9Z.mjs.map +1 -0
- package/dist/relations-CA_QuMTU.mjs +776 -0
- package/dist/relations-CA_QuMTU.mjs.map +1 -0
- package/dist/request-context.d.mts +1 -1
- package/dist/request-meta-bwZ_NsvU.mjs +141 -0
- package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
- package/dist/resolve-DwNM-CXl.mjs +101 -0
- package/dist/resolve-DwNM-CXl.mjs.map +1 -0
- package/dist/revision-BVp8S0e_.mjs +374 -0
- package/dist/revision-BVp8S0e_.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-BerZFrvV.mjs +272 -0
- package/dist/routes-BerZFrvV.mjs.map +1 -0
- package/dist/runner-BObHz5FC.d.mts +68 -0
- package/dist/runner-BObHz5FC.d.mts.map +1 -0
- package/dist/runner-C5NeAkBQ.mjs +6595 -0
- package/dist/runner-C5NeAkBQ.mjs.map +1 -0
- package/dist/runtime.d.mts +13 -13
- package/dist/runtime.mjs +3 -2
- package/dist/runtime.mjs.map +1 -1
- package/dist/schema/project-env-types.mjs +40 -36
- package/dist/schema/project-env-types.mjs.map +1 -1
- package/dist/schema-C4OBuv6Z.mjs +13 -0
- package/dist/schema-C4OBuv6Z.mjs.map +1 -0
- package/dist/schema-DJRfvM_o.mjs +815 -0
- package/dist/schema-DJRfvM_o.mjs.map +1 -0
- package/dist/scopes-BU03K7Uo.mjs +34 -0
- package/dist/scopes-BU03K7Uo.mjs.map +1 -0
- package/dist/search-DfVzks89.mjs +450 -0
- package/dist/search-DfVzks89.mjs.map +1 -0
- package/dist/sections-BMy4JVUz.mjs +346 -0
- package/dist/sections-BMy4JVUz.mjs.map +1 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +38 -34
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +25 -21
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo-ClB-dw9w.mjs +188 -0
- package/dist/seo-ClB-dw9w.mjs.map +1 -0
- package/dist/seo-VZYOEy8f.mjs +133 -0
- package/dist/seo-VZYOEy8f.mjs.map +1 -0
- package/dist/service-Bo_usgSk.mjs +150 -0
- package/dist/service-Bo_usgSk.mjs.map +1 -0
- package/dist/session-user-DlpPdf8L.mjs +61 -0
- package/dist/session-user-DlpPdf8L.mjs.map +1 -0
- package/dist/settings-CWb84sDm.mjs +452 -0
- package/dist/settings-CWb84sDm.mjs.map +1 -0
- package/dist/settings-DS914jjE.mjs +66 -0
- package/dist/settings-DS914jjE.mjs.map +1 -0
- package/dist/settings-Dd1uivmQ.mjs +73 -0
- package/dist/settings-Dd1uivmQ.mjs.map +1 -0
- package/dist/setup-complete-BuNxAUiN.mjs +65 -0
- package/dist/setup-complete-BuNxAUiN.mjs.map +1 -0
- package/dist/setup-nonce-BnEAX0iy.mjs +25 -0
- package/dist/setup-nonce-BnEAX0iy.mjs.map +1 -0
- package/dist/site-domain-Bq5j5bVg.mjs +131 -0
- package/dist/site-domain-Bq5j5bVg.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-BTg2NJJv.mjs +26 -0
- package/dist/sitemap-name-BTg2NJJv.mjs.map +1 -0
- package/dist/slug-aVnUV4SL.mjs +16 -0
- package/dist/slug-aVnUV4SL.mjs.map +1 -0
- package/dist/slugify-bu2-jKia.mjs +22 -0
- package/dist/slugify-bu2-jKia.mjs.map +1 -0
- package/dist/snapshot-DYsG4uOq.mjs +414 -0
- package/dist/snapshot-DYsG4uOq.mjs.map +1 -0
- package/dist/ssrf-BcYjyM4M.mjs +406 -0
- package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
- package/dist/stage-D8DWgPcO.mjs +662 -0
- package/dist/stage-D8DWgPcO.mjs.map +1 -0
- package/dist/staged-CD_imitH.mjs +686 -0
- package/dist/staged-CD_imitH.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 +2 -2
- package/dist/storage/local.d.mts.map +1 -1
- package/dist/storage/local.mjs +12 -5
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +4 -2
- package/dist/storage/s3.d.mts.map +1 -1
- package/dist/storage/s3.mjs +56 -9
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/storage-query-DRyu3bSU.d.mts +1615 -0
- package/dist/storage-query-DRyu3bSU.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-ChnU7Mc8.mjs +697 -0
- package/dist/taxonomies-ChnU7Mc8.mjs.map +1 -0
- package/dist/taxonomies-Dd9JJv_a.mjs +939 -0
- package/dist/taxonomies-Dd9JJv_a.mjs.map +1 -0
- package/dist/taxonomy-C_C_LBAU.mjs +550 -0
- package/dist/taxonomy-C_C_LBAU.mjs.map +1 -0
- package/dist/tokens-BnhSnGwJ.mjs +171 -0
- package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
- package/dist/transfer-ClH6w6BV.mjs +8873 -0
- package/dist/transfer-ClH6w6BV.mjs.map +1 -0
- package/dist/transfer-WmWiR3xf.mjs +166 -0
- package/dist/transfer-WmWiR3xf.mjs.map +1 -0
- package/dist/transfer-download--ofRj9Cw.mjs +33 -0
- package/dist/transfer-download--ofRj9Cw.mjs.map +1 -0
- package/dist/transformations-Bx4lYY0Y.mjs +196 -0
- package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
- package/dist/transport-BjbqNiPI.mjs +136 -0
- package/dist/transport-BjbqNiPI.mjs.map +1 -0
- package/dist/transport-DxiXnbXk.d.mts +42 -0
- package/dist/transport-DxiXnbXk.d.mts.map +1 -0
- package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
- package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
- package/dist/turnstile-CJwvsOqw.mjs +58 -0
- package/dist/turnstile-CJwvsOqw.mjs.map +1 -0
- package/dist/types-BA3ey2QH.d.mts +87 -0
- package/dist/types-BA3ey2QH.d.mts.map +1 -0
- package/dist/types-Bwpzb5o6.d.mts +227 -0
- package/dist/types-Bwpzb5o6.d.mts.map +1 -0
- package/dist/types-CNB-dj6F.d.mts +289 -0
- package/dist/types-CNB-dj6F.d.mts.map +1 -0
- package/dist/types-CgfFGfO5.mjs +16 -0
- package/dist/types-CgfFGfO5.mjs.map +1 -0
- package/dist/types-D2NEXtgB.mjs +127 -0
- package/dist/types-D2NEXtgB.mjs.map +1 -0
- package/dist/types-DCFavOii.d.mts +916 -0
- package/dist/types-DCFavOii.d.mts.map +1 -0
- package/dist/types-DHO7Pd25.d.mts +366 -0
- package/dist/types-DHO7Pd25.d.mts.map +1 -0
- package/dist/types-DvqVxZXa.d.mts +125 -0
- package/dist/types-DvqVxZXa.d.mts.map +1 -0
- package/dist/types-QoPHm-2w.d.mts +1741 -0
- package/dist/types-QoPHm-2w.d.mts.map +1 -0
- package/dist/types-RLgeIpnF.d.mts +374 -0
- package/dist/types-RLgeIpnF.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-slSqujQL.d.mts +204 -0
- package/dist/types-slSqujQL.d.mts.map +1 -0
- package/dist/update-check-BxNg9T6N.mjs +161 -0
- package/dist/update-check-BxNg9T6N.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-BlCTKVAm.mjs +171 -0
- package/dist/user-BlCTKVAm.mjs.map +1 -0
- package/dist/utils-TPt7w2cS.mjs +442 -0
- package/dist/utils-TPt7w2cS.mjs.map +1 -0
- package/dist/validate-DxYhJQA-.mjs +524 -0
- package/dist/validate-DxYhJQA-.mjs.map +1 -0
- package/dist/validate-emKxGC5F.d.mts +468 -0
- package/dist/validate-emKxGC5F.d.mts.map +1 -0
- package/dist/validation-Ckq4vsVg.mjs +220 -0
- package/dist/validation-Ckq4vsVg.mjs.map +1 -0
- package/dist/version-BZj18Q7G.mjs +9 -0
- package/dist/version-BZj18Q7G.mjs.map +1 -0
- package/dist/version-DHmGpcch.mjs +7 -0
- package/dist/version-DHmGpcch.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-DA5XmvVC.mjs +121 -0
- package/dist/widgets-DA5XmvVC.mjs.map +1 -0
- package/dist/wxr-taxonomies-CrMonejI.d.mts +34 -0
- package/dist/wxr-taxonomies-CrMonejI.d.mts.map +1 -0
- package/dist/wxr-taxonomies-RgRG0d5e.mjs +453 -0
- package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +1 -0
- package/dist/zod-generator-D0JKy94C.mjs +424 -0
- package/dist/zod-generator-D0JKy94C.mjs.map +1 -0
- package/package.json +15 -11
- package/src/api/authorize.ts +42 -0
- package/src/api/errors.ts +9 -0
- package/src/api/handlers/api-tokens.ts +12 -6
- package/src/api/handlers/content.ts +57 -8
- package/src/api/handlers/dashboard.ts +33 -10
- package/src/api/handlers/domain-move-notice.ts +94 -0
- package/src/api/handlers/index.ts +2 -0
- package/src/api/handlers/manifest.ts +6 -0
- package/src/api/handlers/media-usage.ts +2 -1
- package/src/api/handlers/media.ts +1 -0
- package/src/api/handlers/plugins.ts +1 -0
- package/src/api/handlers/revision.ts +6 -2
- package/src/api/handlers/seo.ts +155 -59
- package/src/api/handlers/settings.ts +31 -1
- package/src/api/handlers/site-domain.ts +159 -0
- package/src/api/openapi/document.ts +2 -2
- package/src/api/public-url.ts +1 -1
- package/src/api/schemas/content.ts +20 -0
- package/src/api/schemas/media-usage.ts +7 -1
- package/src/api/schemas/media.ts +12 -0
- package/src/api/schemas/settings.ts +2 -0
- package/src/api/site-url.ts +53 -5
- package/src/api/types.ts +4 -0
- package/src/astro/image-endpoint.ts +46 -4
- package/src/astro/integration/admin-locales.ts +168 -0
- package/src/astro/integration/dev-env.ts +84 -0
- package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
- package/src/astro/integration/index.ts +97 -10
- package/src/astro/integration/routes.ts +28 -0
- package/src/astro/integration/runtime.ts +17 -1
- package/src/astro/integration/virtual-modules.ts +9 -16
- package/src/astro/integration/vite-config.ts +22 -16
- package/src/astro/middleware/auth.ts +19 -4
- package/src/astro/middleware/csp.ts +1 -0
- package/src/astro/middleware/redirect.ts +94 -50
- package/src/astro/middleware/request-context.ts +12 -6
- package/src/astro/middleware.ts +71 -17
- package/src/astro/prefetch.ts +7 -5
- package/src/astro/public-plugin-api-routes.ts +10 -2
- package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
- package/src/astro/routes/api/auth/handover.ts +58 -0
- package/src/astro/routes/api/auth/magic-link/verify.ts +11 -3
- package/src/astro/routes/api/auth/passkey/options.ts +10 -2
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
- package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +5 -4
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
- package/src/astro/routes/api/content/[collection]/index.ts +1 -5
- package/src/astro/routes/api/dashboard.ts +4 -1
- package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
- package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
- package/src/astro/routes/api/import/wordpress/execute.ts +27 -3
- package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +80 -42
- package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +49 -5
- package/src/astro/routes/api/manifest.ts +10 -0
- package/src/astro/routes/api/media/[id]/confirm.ts +19 -0
- package/src/astro/routes/api/media/file/[...key].ts +60 -12
- package/src/astro/routes/api/media/upload-url.ts +28 -4
- package/src/astro/routes/api/media.ts +15 -0
- package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
- package/src/astro/routes/api/menus/[name]/items.ts +2 -1
- package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
- package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
- package/src/astro/routes/api/menus/[name].ts +3 -2
- package/src/astro/routes/api/menus/index.ts +2 -1
- package/src/astro/routes/api/redirects/[id].ts +15 -2
- package/src/astro/routes/api/redirects/index.ts +5 -1
- package/src/astro/routes/api/schema/index.ts +1 -1
- package/src/astro/routes/api/settings/domain-notify.ts +76 -0
- package/src/astro/routes/api/settings/domain.ts +64 -0
- package/src/astro/routes/api/settings.ts +2 -1
- package/src/astro/routes/api/setup/admin-verify.ts +7 -1
- package/src/astro/routes/api/setup/index.ts +7 -0
- package/src/astro/routes/api/site/domain-proof.ts +28 -0
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
- package/src/astro/routes/api/taxonomies/[name].ts +3 -2
- package/src/astro/routes/api/taxonomies/index.ts +2 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
- 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/routes/robots.txt.ts +33 -2
- package/src/astro/routes/sitemap-[collection].xml.ts +31 -8
- package/src/astro/routes/sitemap.xml.ts +12 -10
- package/src/astro/types.ts +23 -2
- package/src/auth/rate-limit.ts +18 -13
- package/src/auth/types.ts +11 -4
- package/src/aws-sdk.d.ts +2 -1
- package/src/cache/redirect-paths.ts +56 -0
- package/src/cache/route-cache.ts +22 -0
- package/src/cleanup.ts +26 -0
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/cli/commands/import/wordpress.ts +3 -27
- package/src/cli/commands/login.ts +35 -43
- package/src/cli/commands/migrate.ts +36 -4
- package/src/cli/commands/seed.ts +23 -12
- package/src/cli/wxr/parser.ts +2 -2
- package/src/client/index.ts +18 -3
- package/src/client/portable-text.ts +21 -7
- package/src/comments/public-submission.ts +15 -8
- package/src/comments/query.ts +8 -2
- package/src/components/CommentForm.astro +50 -10
- package/src/components/Comments.astro +51 -29
- package/src/components/EmDashImage.astro +6 -4
- package/src/components/Gallery.astro +4 -3
- package/src/components/Image.astro +4 -3
- package/src/components/InlinePortableTextEditor.tsx +269 -1320
- package/src/components/Video.astro +100 -0
- package/src/components/index.ts +4 -1
- package/src/components/inline-block-types.ts +278 -0
- package/src/components/inline-bubble-menu.tsx +696 -0
- package/src/components/inline-code-block.tsx +8 -0
- package/src/components/inline-editor-ui.tsx +1192 -0
- package/src/components/inline-image.tsx +722 -0
- package/src/components/inline-media-picker.tsx +1221 -0
- package/src/components/inline-slash-menu.tsx +556 -0
- package/src/components/webmcp-search.ts +15 -19
- package/src/components/widgets/RecentPosts.astro +57 -17
- package/src/content/converters/mark-safety.ts +3 -3
- package/src/content/converters/portable-text-identity.ts +1 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +7 -0
- package/src/content/converters/prosemirror-to-portable-text.ts +16 -0
- package/src/content/converters/types.ts +22 -0
- package/src/content/converters/video.ts +77 -0
- package/src/database/collection-cleanup.ts +30 -0
- package/src/database/datetime-storage.ts +337 -60
- package/src/database/migration-lock.ts +43 -7
- package/src/database/migrations/runner.ts +13 -1
- package/src/database/repositories/comment.ts +17 -3
- package/src/database/repositories/content.ts +25 -4
- package/src/database/repositories/plugin-storage.ts +137 -27
- package/src/database/repositories/redirect.ts +24 -2
- package/src/database/repositories/revision.ts +24 -6
- package/src/database/repositories/taxonomy.ts +61 -46
- package/src/database/repositories/types.ts +67 -7
- package/src/emdash-runtime.ts +393 -228
- package/src/import/index.ts +1 -0
- package/src/import/registry.ts +17 -0
- package/src/import/sources/wordpress-plugin.ts +154 -11
- package/src/import/types.ts +3 -0
- package/src/import/utils.ts +7 -3
- package/src/index.ts +3 -0
- package/src/loader.ts +170 -45
- package/src/mcp/json-schema.ts +14 -0
- package/src/mcp/plugin-tool-name.ts +36 -0
- package/src/mcp/server.ts +74 -15
- package/src/media/image-endpoint.ts +101 -1
- package/src/media/responsive.ts +14 -7
- package/src/media/usage/collection-deletion.ts +4 -0
- package/src/media/usage/extractor.ts +19 -2
- package/src/media/usage/types.ts +5 -1
- package/src/migrations/direct-executor.ts +42 -12
- package/src/migrations/protocol.ts +6 -2
- package/src/plugin-utils.ts +1 -1
- package/src/plugins/adapt-sandbox-entry.ts +16 -6
- package/src/plugins/context.ts +3 -7
- package/src/plugins/hooks.ts +1 -1
- package/src/plugins/http-route-dispatch.ts +5 -1
- package/src/plugins/manifest-schema.ts +1 -0
- package/src/plugins/route-error.ts +14 -0
- package/src/plugins/routes.ts +2 -2
- package/src/plugins/state.ts +41 -8
- package/src/plugins/types.ts +6 -0
- package/src/query.ts +59 -10
- package/src/redirects/cache.ts +34 -2
- package/src/redirects/patterns.ts +26 -2
- package/src/schema/block-values.ts +80 -17
- package/src/schema/registry.ts +16 -5
- package/src/schema/slug.ts +19 -0
- package/src/search/query.ts +3 -1
- package/src/search/text-extraction.ts +6 -1
- package/src/seed/apply.ts +32 -8
- package/src/seed/validate.ts +31 -0
- package/src/seo/sitemap-name.ts +22 -0
- package/src/settings/index.ts +20 -0
- package/src/settings/types.ts +2 -0
- package/src/storage/index.ts +2 -0
- package/src/storage/local.ts +10 -2
- package/src/storage/range.ts +54 -0
- package/src/storage/s3.ts +52 -8
- package/src/storage/types.ts +30 -3
- package/src/ui.ts +1 -0
- package/src/utils/slugify.ts +6 -1
- package/src/visual-editing/toolbar.ts +126 -47
- package/src/widgets/components.ts +4 -0
- package/src/widgets/index.ts +74 -82
- package/src/widgets/recent-posts.ts +62 -0
- package/dist/action-token-AgOs1UWD.mjs +0 -26
- package/dist/action-token-AgOs1UWD.mjs.map +0 -1
- package/dist/activation-xomsCMJg.mjs +0 -387
- package/dist/activation-xomsCMJg.mjs.map +0 -1
- package/dist/adapters-DM1oyHIN.d.mts +0 -173
- package/dist/adapters-DM1oyHIN.d.mts.map +0 -1
- package/dist/allowed-origins-CFtudhyw.mjs +0 -116
- package/dist/allowed-origins-CFtudhyw.mjs.map +0 -1
- package/dist/api-CltsXhiX.mjs +0 -4980
- package/dist/api-CltsXhiX.mjs.map +0 -1
- package/dist/api-tokens-P3mAaQgr.mjs +0 -166
- package/dist/api-tokens-P3mAaQgr.mjs.map +0 -1
- package/dist/apply-Q7uvzBWW.mjs +0 -1680
- package/dist/apply-Q7uvzBWW.mjs.map +0 -1
- package/dist/approvals-DycwI6lZ.mjs +0 -460
- package/dist/approvals-DycwI6lZ.mjs.map +0 -1
- package/dist/artifact-fetch-CWxyELVI.mjs +0 -659
- package/dist/artifact-fetch-CWxyELVI.mjs.map +0 -1
- package/dist/artifacts-UzWbysb8.mjs +0 -307
- package/dist/artifacts-UzWbysb8.mjs.map +0 -1
- package/dist/audit-CCH3MA4Y.mjs +0 -127
- package/dist/audit-CCH3MA4Y.mjs.map +0 -1
- package/dist/authoritative-records-dSvXCfzb.mjs +0 -5172
- package/dist/authoritative-records-dSvXCfzb.mjs.map +0 -1
- package/dist/authorize-DeWfk--K.mjs +0 -49
- package/dist/authorize-DeWfk--K.mjs.map +0 -1
- package/dist/backup-CFnbdTSJ.mjs +0 -246
- package/dist/backup-CFnbdTSJ.mjs.map +0 -1
- package/dist/block-types-C0YFSfR7.mjs +0 -132
- package/dist/block-types-C0YFSfR7.mjs.map +0 -1
- package/dist/block-values-H4E0XwE8.mjs +0 -175
- package/dist/block-values-H4E0XwE8.mjs.map +0 -1
- package/dist/byline-BhVslYLz.mjs +0 -909
- package/dist/byline-BhVslYLz.mjs.map +0 -1
- package/dist/byline-fields-DHJs0Mja.mjs +0 -280
- package/dist/byline-fields-DHJs0Mja.mjs.map +0 -1
- package/dist/byline-fields-xdxE9kxZ.mjs +0 -123
- package/dist/byline-fields-xdxE9kxZ.mjs.map +0 -1
- package/dist/bylines-B_nN9liM.mjs +0 -234
- package/dist/bylines-B_nN9liM.mjs.map +0 -1
- package/dist/bylines-C71YACkL.mjs +0 -150
- package/dist/bylines-C71YACkL.mjs.map +0 -1
- package/dist/cache-aTYCL9nK.mjs +0 -133
- package/dist/cache-aTYCL9nK.mjs.map +0 -1
- package/dist/canonical-Y1dpjCnp.mjs +0 -174
- package/dist/canonical-Y1dpjCnp.mjs.map +0 -1
- package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
- package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
- package/dist/challenge-store-CxZxPqaw.mjs +0 -51
- package/dist/challenge-store-CxZxPqaw.mjs.map +0 -1
- package/dist/checksum-DtH6m5uk.mjs +0 -162
- package/dist/checksum-DtH6m5uk.mjs.map +0 -1
- package/dist/chunks-zlGB5IQP.mjs +0 -25
- package/dist/chunks-zlGB5IQP.mjs.map +0 -1
- package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
- package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
- package/dist/comment-Bu08Wvr3.mjs +0 -313
- package/dist/comment-Bu08Wvr3.mjs.map +0 -1
- package/dist/comment-reaction-B8SfT-yM.mjs +0 -85
- package/dist/comment-reaction-B8SfT-yM.mjs.map +0 -1
- package/dist/comments-BRtp992B.mjs +0 -99
- package/dist/comments-BRtp992B.mjs.map +0 -1
- package/dist/comments-DVUYqdyC.mjs +0 -195
- package/dist/comments-DVUYqdyC.mjs.map +0 -1
- package/dist/components-CQY-Sgm-.mjs +0 -108
- package/dist/components-CQY-Sgm-.mjs.map +0 -1
- package/dist/config-B-uePMLj.d.mts +0 -39
- package/dist/config-B-uePMLj.d.mts.map +0 -1
- package/dist/config-B6BDSsz2.d.mts +0 -6712
- package/dist/config-B6BDSsz2.d.mts.map +0 -1
- package/dist/config-BsJHiQxC.mjs +0 -228
- package/dist/config-BsJHiQxC.mjs.map +0 -1
- package/dist/connection-B9pIasFd.mjs +0 -36
- package/dist/connection-B9pIasFd.mjs.map +0 -1
- package/dist/content-Dji9vEiW.mjs +0 -2063
- package/dist/content-Dji9vEiW.mjs.map +0 -1
- package/dist/content-list-query-DiNwyKtd.d.mts +0 -26
- package/dist/content-list-query-DiNwyKtd.d.mts.map +0 -1
- package/dist/content-repair-B7wnbzhN.mjs +0 -442
- package/dist/content-repair-B7wnbzhN.mjs.map +0 -1
- package/dist/context-Ctcxc8Ia.mjs +0 -2026
- package/dist/context-Ctcxc8Ia.mjs.map +0 -1
- package/dist/credits-Bu7dlobo.mjs +0 -110
- package/dist/credits-Bu7dlobo.mjs.map +0 -1
- package/dist/cron-xe5XKqA-.mjs +0 -306
- package/dist/cron-xe5XKqA-.mjs.map +0 -1
- package/dist/dashboard-B5hVHOtf.mjs +0 -151
- package/dist/dashboard-B5hVHOtf.mjs.map +0 -1
- package/dist/default-DaoYyFRS.mjs +0 -81
- package/dist/default-DaoYyFRS.mjs.map +0 -1
- package/dist/deferred-tasks-BYcDx2o_.d.mts +0 -9
- package/dist/deferred-tasks-BYcDx2o_.d.mts.map +0 -1
- package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
- package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
- package/dist/device-flow-Ma5P5d2e.mjs +0 -521
- package/dist/device-flow-Ma5P5d2e.mjs.map +0 -1
- package/dist/digest-xIpR3o64.mjs +0 -194
- package/dist/digest-xIpR3o64.mjs.map +0 -1
- package/dist/direct-executor-DMWwCey3.mjs +0 -104
- package/dist/direct-executor-DMWwCey3.mjs.map +0 -1
- package/dist/email-console-DmqVF5J_.mjs +0 -50
- package/dist/email-console-DmqVF5J_.mjs.map +0 -1
- package/dist/email-locale-Cc5YSXfJ.mjs +0 -25
- package/dist/email-locale-Cc5YSXfJ.mjs.map +0 -1
- package/dist/emdash-runtime-BlybX9Ui.mjs +0 -4249
- package/dist/emdash-runtime-BlybX9Ui.mjs.map +0 -1
- package/dist/entry-lock-De1L8qUQ.mjs +0 -163
- package/dist/entry-lock-De1L8qUQ.mjs.map +0 -1
- package/dist/entry-lock-esmMbgI9.d.mts +0 -4551
- package/dist/entry-lock-esmMbgI9.d.mts.map +0 -1
- package/dist/entry-lock-sxz2PGAT.mjs +0 -1197
- package/dist/entry-lock-sxz2PGAT.mjs.map +0 -1
- package/dist/env-types-BkjCtN13.mjs +0 -38
- package/dist/env-types-BkjCtN13.mjs.map +0 -1
- package/dist/error-B0rgPgsQ.mjs +0 -90
- package/dist/error-B0rgPgsQ.mjs.map +0 -1
- package/dist/errors-CuHQRiBW.mjs +0 -120
- package/dist/errors-CuHQRiBW.mjs.map +0 -1
- package/dist/errors-DTE6C3K_.mjs +0 -470
- package/dist/errors-DTE6C3K_.mjs.map +0 -1
- package/dist/escape-nJW7dR0s.mjs +0 -9
- package/dist/escape-nJW7dR0s.mjs.map +0 -1
- package/dist/fence-CGw57S4v.mjs +0 -162
- package/dist/fence-CGw57S4v.mjs.map +0 -1
- package/dist/field-defs-cache-Bw8w499w.mjs +0 -77
- package/dist/field-defs-cache-Bw8w499w.mjs.map +0 -1
- package/dist/field-map-hn-D-SyH.mjs +0 -83
- package/dist/field-map-hn-D-SyH.mjs.map +0 -1
- package/dist/fts-manager-DacCYIe4.mjs +0 -443
- package/dist/fts-manager-DacCYIe4.mjs.map +0 -1
- package/dist/gc-BBplHrv6.mjs +0 -75
- package/dist/gc-BBplHrv6.mjs.map +0 -1
- package/dist/hash-C4DFoJ7Z.mjs +0 -37
- package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
- package/dist/hook-result-DSRRxu_-.d.mts +0 -31
- package/dist/hook-result-DSRRxu_-.d.mts.map +0 -1
- package/dist/hreflang-CKPunvU0.mjs +0 -105
- package/dist/hreflang-CKPunvU0.mjs.map +0 -1
- package/dist/hreflang-egumj6WF.d.mts +0 -50
- package/dist/hreflang-egumj6WF.d.mts.map +0 -1
- package/dist/http-route-dispatch-DjNFZcJ2.mjs +0 -339
- package/dist/http-route-dispatch-DjNFZcJ2.mjs.map +0 -1
- package/dist/identity-Dfrx2_Bc.mjs +0 -35
- package/dist/identity-Dfrx2_Bc.mjs.map +0 -1
- package/dist/import-ROBvhbNc.mjs +0 -2021
- package/dist/import-ROBvhbNc.mjs.map +0 -1
- package/dist/index-B4sIdCAT.d.mts +0 -623
- package/dist/index-B4sIdCAT.d.mts.map +0 -1
- package/dist/install-finalization-CPM7Gged.mjs +0 -58
- package/dist/install-finalization-CPM7Gged.mjs.map +0 -1
- package/dist/keys-DxqxcAD4.mjs +0 -61
- package/dist/keys-DxqxcAD4.mjs.map +0 -1
- package/dist/kinds-BQl5gN6e.mjs +0 -974
- package/dist/kinds-BQl5gN6e.mjs.map +0 -1
- package/dist/lifecycle-DGQI7itS.mjs +0 -25
- package/dist/lifecycle-DGQI7itS.mjs.map +0 -1
- package/dist/load-DMxRl4VK.mjs +0 -28
- package/dist/load-DMxRl4VK.mjs.map +0 -1
- package/dist/loader-1DMiOq5s.mjs +0 -1303
- package/dist/loader-1DMiOq5s.mjs.map +0 -1
- package/dist/loops-Dn1i16FP.mjs +0 -205
- package/dist/loops-Dn1i16FP.mjs.map +0 -1
- package/dist/manifest-builder-CTw4FmZk.mjs +0 -189
- package/dist/manifest-builder-CTw4FmZk.mjs.map +0 -1
- package/dist/manifest-schema-gy37bD_D.mjs +0 -496
- package/dist/manifest-schema-gy37bD_D.mjs.map +0 -1
- package/dist/marketplace-tHWSsCUo.mjs +0 -257
- package/dist/marketplace-tHWSsCUo.mjs.map +0 -1
- package/dist/media-Bw-Q65ve.mjs +0 -294
- package/dist/media-Bw-Q65ve.mjs.map +0 -1
- package/dist/media-BzUDu7nl.mjs +0 -373
- package/dist/media-BzUDu7nl.mjs.map +0 -1
- package/dist/media-aahnKHze.mjs +0 -408
- package/dist/media-aahnKHze.mjs.map +0 -1
- package/dist/media-allowlist-RMrjo8TU.mjs +0 -45
- package/dist/media-allowlist-RMrjo8TU.mjs.map +0 -1
- package/dist/media-folders-kabR1oJf.mjs +0 -210
- package/dist/media-folders-kabR1oJf.mjs.map +0 -1
- package/dist/media-url-DloW2xrP.mjs +0 -43
- package/dist/media-url-DloW2xrP.mjs.map +0 -1
- package/dist/media-usage-CHHpV7ee.mjs +0 -282
- package/dist/media-usage-CHHpV7ee.mjs.map +0 -1
- package/dist/media-usage-activation-BinYqC_r.mjs +0 -78
- package/dist/media-usage-activation-BinYqC_r.mjs.map +0 -1
- package/dist/media-usage-work-C734aq6s.mjs +0 -1015
- package/dist/media-usage-work-C734aq6s.mjs.map +0 -1
- package/dist/media-usage-work-lxvV0-UO.mjs +0 -151
- package/dist/media-usage-work-lxvV0-UO.mjs.map +0 -1
- package/dist/menus-6RHNq4ZK.mjs +0 -753
- package/dist/menus-6RHNq4ZK.mjs.map +0 -1
- package/dist/menus-AuCTaO9W.mjs +0 -3704
- package/dist/menus-AuCTaO9W.mjs.map +0 -1
- package/dist/menus-BQKqf0Up.mjs +0 -92
- package/dist/menus-BQKqf0Up.mjs.map +0 -1
- package/dist/mode-nh0ppSX5.mjs +0 -23
- package/dist/mode-nh0ppSX5.mjs.map +0 -1
- package/dist/node-sqlite-compat-CDOEcc97.mjs +0 -63
- package/dist/node-sqlite-compat-CDOEcc97.mjs.map +0 -1
- package/dist/oauth-authorization-BtYQ80uU.mjs +0 -274
- package/dist/oauth-authorization-BtYQ80uU.mjs.map +0 -1
- package/dist/oauth-clients-C1S4NQHh.mjs +0 -266
- package/dist/oauth-clients-C1S4NQHh.mjs.map +0 -1
- package/dist/oauth-state-store-CpGi2FZH.mjs +0 -50
- package/dist/oauth-state-store-CpGi2FZH.mjs.map +0 -1
- package/dist/oauth-user-lookup-BNp1aFAr.mjs +0 -26
- package/dist/oauth-user-lookup-BNp1aFAr.mjs.map +0 -1
- package/dist/options-B41aLm1I.d.mts +0 -81
- package/dist/options-B41aLm1I.d.mts.map +0 -1
- package/dist/ownership-DoeAIuTg.mjs +0 -12
- package/dist/ownership-DoeAIuTg.mjs.map +0 -1
- package/dist/parse-CmFDTGzp.mjs +0 -81
- package/dist/parse-CmFDTGzp.mjs.map +0 -1
- package/dist/parse-QVS0t5oR.d.mts +0 -172
- package/dist/parse-QVS0t5oR.d.mts.map +0 -1
- package/dist/passkey-config-C-MxsV22.mjs +0 -46
- package/dist/passkey-config-C-MxsV22.mjs.map +0 -1
- package/dist/paths-kr8hAMMI.mjs +0 -77
- package/dist/paths-kr8hAMMI.mjs.map +0 -1
- package/dist/patterns-DyZJ67I7.mjs +0 -140
- package/dist/patterns-DyZJ67I7.mjs.map +0 -1
- package/dist/placeholder-Dn7MMdWr.d.mts +0 -306
- package/dist/placeholder-Dn7MMdWr.d.mts.map +0 -1
- package/dist/plan-CuQOeU9g.mjs +0 -135
- package/dist/plan-CuQOeU9g.mjs.map +0 -1
- package/dist/plugins-CGb-G98c.mjs +0 -261
- package/dist/plugins-CGb-G98c.mjs.map +0 -1
- package/dist/policy-C5wrDXYV.mjs +0 -45
- package/dist/policy-C5wrDXYV.mjs.map +0 -1
- package/dist/portable-text-BnRuiR1-.mjs +0 -307
- package/dist/portable-text-BnRuiR1-.mjs.map +0 -1
- package/dist/preview-xWNSR1Li.mjs +0 -107
- package/dist/preview-xWNSR1Li.mjs.map +0 -1
- package/dist/protocol-ClxN-m1e.d.mts +0 -61
- package/dist/protocol-ClxN-m1e.d.mts.map +0 -1
- package/dist/public-submission-CkmT2SKv.mjs +0 -250
- package/dist/public-submission-CkmT2SKv.mjs.map +0 -1
- package/dist/public-url-B5a0QAh6.mjs +0 -101
- package/dist/public-url-B5a0QAh6.mjs.map +0 -1
- package/dist/query-DHqFiqqH.mjs +0 -41
- package/dist/query-DHqFiqqH.mjs.map +0 -1
- package/dist/query-DT85BehD.mjs +0 -1125
- package/dist/query-DT85BehD.mjs.map +0 -1
- package/dist/rate-limit-iMvcu3eu.mjs +0 -120
- package/dist/rate-limit-iMvcu3eu.mjs.map +0 -1
- package/dist/receipt-Dpp1uaX9.mjs +0 -43
- package/dist/receipt-Dpp1uaX9.mjs.map +0 -1
- package/dist/redirect-BRoLiWQE.mjs +0 -19
- package/dist/redirect-BRoLiWQE.mjs.map +0 -1
- package/dist/redirect-xZNpBoGp.mjs +0 -417
- package/dist/redirect-xZNpBoGp.mjs.map +0 -1
- package/dist/redirects-D4EWeXAo.mjs +0 -148
- package/dist/redirects-D4EWeXAo.mjs.map +0 -1
- package/dist/redirects-DCKqwiWp.mjs +0 -446
- package/dist/redirects-DCKqwiWp.mjs.map +0 -1
- package/dist/registry-DaXmUsD4.mjs +0 -8369
- package/dist/registry-DaXmUsD4.mjs.map +0 -1
- package/dist/relations-JvBP8nGP.mjs +0 -776
- package/dist/relations-JvBP8nGP.mjs.map +0 -1
- package/dist/request-meta-B6blULFY.mjs +0 -141
- package/dist/request-meta-B6blULFY.mjs.map +0 -1
- package/dist/resolve-DAhHi5tn.mjs +0 -100
- package/dist/resolve-DAhHi5tn.mjs.map +0 -1
- package/dist/revision-BWEH2qQB.mjs +0 -368
- package/dist/revision-BWEH2qQB.mjs.map +0 -1
- package/dist/route-wire-DK600v4u.mjs +0 -197
- package/dist/route-wire-DK600v4u.mjs.map +0 -1
- package/dist/routes-BeZyaCzv.mjs +0 -272
- package/dist/routes-BeZyaCzv.mjs.map +0 -1
- package/dist/runner-CskI4Hmq.mjs +0 -6372
- package/dist/runner-CskI4Hmq.mjs.map +0 -1
- package/dist/runner-J3Cj6DGk.d.mts +0 -68
- package/dist/runner-J3Cj6DGk.d.mts.map +0 -1
- package/dist/schema-CK0ihqMR.mjs +0 -815
- package/dist/schema-CK0ihqMR.mjs.map +0 -1
- package/dist/schema-VtaZSrC-.mjs +0 -13
- package/dist/schema-VtaZSrC-.mjs.map +0 -1
- package/dist/scopes-BRnGlL9t.mjs +0 -34
- package/dist/scopes-BRnGlL9t.mjs.map +0 -1
- package/dist/search-D6-XK1Sn.mjs +0 -448
- package/dist/search-D6-XK1Sn.mjs.map +0 -1
- package/dist/sections-CBDCf7qR.mjs +0 -346
- package/dist/sections-CBDCf7qR.mjs.map +0 -1
- package/dist/seo-BdeEPDNW.mjs +0 -133
- package/dist/seo-BdeEPDNW.mjs.map +0 -1
- package/dist/seo-C61bnPuV.mjs +0 -114
- package/dist/seo-C61bnPuV.mjs.map +0 -1
- package/dist/service-BuRKLMxa.mjs +0 -150
- package/dist/service-BuRKLMxa.mjs.map +0 -1
- package/dist/session-user-CqkPtrPL.mjs +0 -61
- package/dist/session-user-CqkPtrPL.mjs.map +0 -1
- package/dist/settings-0u0lTthS.mjs +0 -51
- package/dist/settings-0u0lTthS.mjs.map +0 -1
- package/dist/settings-WHr45II1.mjs +0 -61
- package/dist/settings-WHr45II1.mjs.map +0 -1
- package/dist/settings-m5tIYnF0.mjs +0 -443
- package/dist/settings-m5tIYnF0.mjs.map +0 -1
- package/dist/setup-complete-B2_dhZZz.mjs +0 -65
- package/dist/setup-complete-B2_dhZZz.mjs.map +0 -1
- package/dist/setup-nonce-CJV9ftSK.mjs +0 -25
- package/dist/setup-nonce-CJV9ftSK.mjs.map +0 -1
- package/dist/site-settings-KJOqJW6W.mjs +0 -50
- package/dist/site-settings-KJOqJW6W.mjs.map +0 -1
- package/dist/site-url-Ceq_AUK0.mjs +0 -16
- package/dist/site-url-Ceq_AUK0.mjs.map +0 -1
- package/dist/slugify-T5GHH42D.mjs +0 -17
- package/dist/slugify-T5GHH42D.mjs.map +0 -1
- package/dist/snapshot-Dzsn3NZa.mjs +0 -414
- package/dist/snapshot-Dzsn3NZa.mjs.map +0 -1
- package/dist/ssrf-DsmvZB80.mjs +0 -406
- package/dist/ssrf-DsmvZB80.mjs.map +0 -1
- package/dist/stage-Csnh_yEd.mjs +0 -662
- package/dist/stage-Csnh_yEd.mjs.map +0 -1
- package/dist/staged-Q7pnEVvI.mjs +0 -686
- package/dist/staged-Q7pnEVvI.mjs.map +0 -1
- package/dist/state-kGdOMQRY.mjs +0 -153
- package/dist/state-kGdOMQRY.mjs.map +0 -1
- package/dist/status-D39Fpy8R.mjs +0 -30
- package/dist/status-D39Fpy8R.mjs.map +0 -1
- package/dist/storage-query-C7iy6eUb.d.mts +0 -1615
- package/dist/storage-query-C7iy6eUb.d.mts.map +0 -1
- package/dist/tar-BWiraSUY.mjs +0 -449
- package/dist/tar-BWiraSUY.mjs.map +0 -1
- package/dist/target-DOFs5oUC.mjs +0 -27
- package/dist/target-DOFs5oUC.mjs.map +0 -1
- package/dist/taxonomies-BS40Wxvi.mjs +0 -939
- package/dist/taxonomies-BS40Wxvi.mjs.map +0 -1
- package/dist/taxonomies-DAZU9VDd.mjs +0 -697
- package/dist/taxonomies-DAZU9VDd.mjs.map +0 -1
- package/dist/taxonomy-XzLE95Vx.mjs +0 -525
- package/dist/taxonomy-XzLE95Vx.mjs.map +0 -1
- package/dist/tokens-DSQan4p7.mjs +0 -171
- package/dist/tokens-DSQan4p7.mjs.map +0 -1
- package/dist/transfer-BcCVxDgf.mjs +0 -166
- package/dist/transfer-BcCVxDgf.mjs.map +0 -1
- package/dist/transfer-OMrancOt.mjs +0 -8873
- package/dist/transfer-OMrancOt.mjs.map +0 -1
- package/dist/transfer-download-Dc-ltjZY.mjs +0 -33
- package/dist/transfer-download-Dc-ltjZY.mjs.map +0 -1
- package/dist/transformations-Ddx7UtrY.mjs +0 -196
- package/dist/transformations-Ddx7UtrY.mjs.map +0 -1
- package/dist/transport-flR-Zmds.d.mts +0 -42
- package/dist/transport-flR-Zmds.d.mts.map +0 -1
- package/dist/transport-umzEbgYO.mjs +0 -136
- package/dist/transport-umzEbgYO.mjs.map +0 -1
- package/dist/trusted-proxy-BqfQFs6a.mjs +0 -51
- package/dist/trusted-proxy-BqfQFs6a.mjs.map +0 -1
- package/dist/turnstile-Do60baId.mjs +0 -58
- package/dist/turnstile-Do60baId.mjs.map +0 -1
- package/dist/types-BT1p3uyb.d.mts +0 -1735
- package/dist/types-BT1p3uyb.d.mts.map +0 -1
- package/dist/types-BYaPWs_F.d.mts +0 -198
- package/dist/types-BYaPWs_F.d.mts.map +0 -1
- package/dist/types-C-Xp0CcN.mjs +0 -103
- package/dist/types-C-Xp0CcN.mjs.map +0 -1
- package/dist/types-CLTQ9b_r.d.mts +0 -374
- package/dist/types-CLTQ9b_r.d.mts.map +0 -1
- package/dist/types-CPkQw2T2.d.mts +0 -85
- package/dist/types-CPkQw2T2.d.mts.map +0 -1
- package/dist/types-CQLvuXoZ.d.mts +0 -198
- package/dist/types-CQLvuXoZ.d.mts.map +0 -1
- package/dist/types-CV5xszpF.d.mts +0 -363
- package/dist/types-CV5xszpF.d.mts.map +0 -1
- package/dist/types-CdEMurNh.mjs +0 -77
- package/dist/types-CdEMurNh.mjs.map +0 -1
- package/dist/types-CxwtnuSS.mjs +0 -37
- package/dist/types-CxwtnuSS.mjs.map +0 -1
- package/dist/types-DGw8KMX_.mjs +0 -16
- package/dist/types-DGw8KMX_.mjs.map +0 -1
- package/dist/types-DOfVMPoo.d.mts +0 -125
- package/dist/types-DOfVMPoo.d.mts.map +0 -1
- package/dist/types-LtS0SM4F.d.mts +0 -287
- package/dist/types-LtS0SM4F.d.mts.map +0 -1
- package/dist/types-ifgOkcBa.d.mts +0 -916
- package/dist/types-ifgOkcBa.d.mts.map +0 -1
- package/dist/update-check-DOc2aBIU.mjs +0 -161
- package/dist/update-check-DOc2aBIU.mjs.map +0 -1
- package/dist/upload-attempts-nzdc3cay.mjs +0 -32
- package/dist/upload-attempts-nzdc3cay.mjs.map +0 -1
- package/dist/url-pattern-hVbqpXs6.mjs +0 -41
- package/dist/url-pattern-hVbqpXs6.mjs.map +0 -1
- package/dist/user-Dnp53zTq.mjs +0 -171
- package/dist/user-Dnp53zTq.mjs.map +0 -1
- package/dist/utils-CoV-PYhg.mjs +0 -439
- package/dist/utils-CoV-PYhg.mjs.map +0 -1
- package/dist/validate-CfQ9_YlD.d.mts +0 -468
- package/dist/validate-CfQ9_YlD.d.mts.map +0 -1
- package/dist/validate-DBX3DKtL.mjs +0 -516
- package/dist/validate-DBX3DKtL.mjs.map +0 -1
- package/dist/validation-BJMiDhB1.mjs +0 -219
- package/dist/validation-BJMiDhB1.mjs.map +0 -1
- package/dist/version-BaT8yKIT.mjs +0 -7
- package/dist/version-BaT8yKIT.mjs.map +0 -1
- package/dist/version-BwEGkqkx.mjs +0 -9
- package/dist/version-BwEGkqkx.mjs.map +0 -1
- package/dist/virtual-modules-B6vJW15k.mjs +0 -516
- package/dist/virtual-modules-B6vJW15k.mjs.map +0 -1
- package/dist/widgets-BkxBAgZ_.mjs +0 -126
- package/dist/widgets-BkxBAgZ_.mjs.map +0 -1
- package/dist/wxr-taxonomies-D7gAJyOF.mjs +0 -453
- package/dist/wxr-taxonomies-D7gAJyOF.mjs.map +0 -1
- package/dist/wxr-taxonomies-DM5J9AsT.d.mts +0 -34
- package/dist/wxr-taxonomies-DM5J9AsT.d.mts.map +0 -1
- package/dist/zod-generator-BQilAboC.mjs +0 -424
- package/dist/zod-generator-BQilAboC.mjs.map +0 -1
- /package/dist/{api-tokens-BLz2MtQs.mjs → api-tokens-CdP49zVF.mjs} +0 -0
- /package/dist/{ssrf-tA45vIPX.mjs → ssrf-DM0E-D_8.mjs} +0 -0
package/src/emdash-runtime.ts
CHANGED
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
type StagedReferences,
|
|
40
40
|
} from "./api/handlers/staged-references.js";
|
|
41
41
|
import { validateRev } from "./api/rev.js";
|
|
42
|
-
import { getSiteBaseUrl } from "./api/site-url.js";
|
|
42
|
+
import { getSiteBaseUrl, resolveSiteOrigin } from "./api/site-url.js";
|
|
43
43
|
import type {
|
|
44
44
|
EmDashConfig,
|
|
45
45
|
PluginAdminPage,
|
|
@@ -55,12 +55,12 @@ import { isSqlite } from "./database/dialect-helpers.js";
|
|
|
55
55
|
import { kyselyLogOption } from "./database/instrumentation.js";
|
|
56
56
|
import {
|
|
57
57
|
enforceRuntimeMigrationPolicy,
|
|
58
|
-
PendingMigrationsError,
|
|
59
58
|
type RuntimeMigrationMode,
|
|
60
59
|
} from "./database/migrations/policy.js";
|
|
61
60
|
import {
|
|
62
|
-
ConcurrentMigrationTimeoutError,
|
|
63
61
|
MIGRATION_RACE_WAIT_MS,
|
|
62
|
+
MigrationFailedError,
|
|
63
|
+
MigrationLockHeldError,
|
|
64
64
|
} from "./database/migrations/runner.js";
|
|
65
65
|
import { AuditRepository } from "./database/repositories/audit.js";
|
|
66
66
|
import { CommentRepository } from "./database/repositories/comment.js";
|
|
@@ -77,6 +77,8 @@ import type { ImageValue } from "./fields/types.js";
|
|
|
77
77
|
import { getI18nConfig, resolveContentCreateLocale } from "./i18n/config.js";
|
|
78
78
|
import { repairLocaleCasing } from "./i18n/repair-locale-casing.js";
|
|
79
79
|
import { warnAboutUnconfiguredTaxonomyLocales } from "./i18n/taxonomy-locale-diagnostic.js";
|
|
80
|
+
import { safeJsonSchemaToZod } from "./mcp/json-schema.js";
|
|
81
|
+
import { pluginToolName } from "./mcp/plugin-tool-name.js";
|
|
80
82
|
import { normalizeMediaValue } from "./media/normalize.js";
|
|
81
83
|
import type { MediaProvider, MediaProviderCapabilities } from "./media/types.js";
|
|
82
84
|
import { activateMediaUsageCapture } from "./media/usage/activation.js";
|
|
@@ -136,6 +138,7 @@ import type {
|
|
|
136
138
|
} from "./plugins/types.js";
|
|
137
139
|
import { normalizePluginCapabilities, warnDeprecatedPluginCapabilities } from "./plugins/types.js";
|
|
138
140
|
import { recordSchedulerHeartbeatSafely } from "./scheduler-health.js";
|
|
141
|
+
import { inferBlockTypes } from "./schema/block-values.js";
|
|
139
142
|
import { primeRegisteredCollections } from "./schema/collection-slugs-cache.js";
|
|
140
143
|
import { isStoragelessField, isStoragelessFieldRow } from "./schema/types.js";
|
|
141
144
|
import type { CollectionWithFields } from "./schema/types.js";
|
|
@@ -200,7 +203,10 @@ import { after } from "./after.js";
|
|
|
200
203
|
import { maybeRunScheduledBackup } from "./api/handlers/backup.js";
|
|
201
204
|
import { changedStoragelessDataKeys, storagelessDataKeyError } from "./api/handlers/content.js";
|
|
202
205
|
import { loadBundleFromR2 } from "./api/handlers/marketplace.js";
|
|
203
|
-
import {
|
|
206
|
+
import {
|
|
207
|
+
runSystemCleanup,
|
|
208
|
+
shouldRunSystemCleanup as shouldRunSystemCleanupNow,
|
|
209
|
+
} from "./cleanup.js";
|
|
204
210
|
import {
|
|
205
211
|
DEFAULT_COMMENT_MODERATOR_PLUGIN_ID,
|
|
206
212
|
defaultCommentModerate,
|
|
@@ -257,12 +263,13 @@ import {
|
|
|
257
263
|
} from "./index.js";
|
|
258
264
|
import { getDb } from "./loader.js";
|
|
259
265
|
import { isRecord } from "./plugin-utils.js";
|
|
260
|
-
import { CronExecutor, type InvokeCronHookFn } from "./plugins/cron.js";
|
|
266
|
+
import { CronExecutor, setCronTasksEnabled, type InvokeCronHookFn } from "./plugins/cron.js";
|
|
261
267
|
import { definePlugin } from "./plugins/define-plugin.js";
|
|
262
268
|
import { DEV_CONSOLE_EMAIL_PLUGIN_ID, devConsoleEmailDeliver } from "./plugins/email-console.js";
|
|
263
269
|
import { EmailPipeline } from "./plugins/email.js";
|
|
264
270
|
import {
|
|
265
271
|
createHookPipeline,
|
|
272
|
+
EXCLUSIVE_HOOK_KEY_PREFIX,
|
|
266
273
|
getActiveContentSaveHookName,
|
|
267
274
|
resolveExclusiveHooks as resolveExclusiveHooksShared,
|
|
268
275
|
type HookPipeline,
|
|
@@ -282,7 +289,8 @@ import {
|
|
|
282
289
|
} from "./plugins/routes.js";
|
|
283
290
|
import { isContentSaveRejection } from "./plugins/save-rejection.js";
|
|
284
291
|
import type { CronScheduler } from "./plugins/scheduler/types.js";
|
|
285
|
-
import { PluginStateRepository } from "./plugins/state.js";
|
|
292
|
+
import { PluginStateRepository, rowToPluginState } from "./plugins/state.js";
|
|
293
|
+
import type { PluginState } from "./plugins/state.js";
|
|
286
294
|
import { syncDeclaredStorageIndexes } from "./plugins/storage-indexes.js";
|
|
287
295
|
import { getRegistryConfigInput, resolveManifestRegistryConfig } from "./registry/config.js";
|
|
288
296
|
import { requestCached } from "./request-cache.js";
|
|
@@ -350,7 +358,7 @@ export interface SandboxedPluginEntry {
|
|
|
350
358
|
/** Hook declarations this plugin implements */
|
|
351
359
|
hooks?: PluginManifest["hooks"];
|
|
352
360
|
/** Admin pages */
|
|
353
|
-
adminPages?: Array<{ path: string; label?: string; icon?: string }>;
|
|
361
|
+
adminPages?: Array<{ path: string; label?: string; icon?: string; group?: string }>;
|
|
354
362
|
/** Dashboard widgets */
|
|
355
363
|
adminWidgets?: Array<{ id: string; title?: string; size?: string }>;
|
|
356
364
|
/** Saved-entry Block Kit panels. */
|
|
@@ -910,10 +918,14 @@ export class EmDashRuntime {
|
|
|
910
918
|
}
|
|
911
919
|
|
|
912
920
|
/**
|
|
913
|
-
* Run the
|
|
914
|
-
*
|
|
915
|
-
*
|
|
916
|
-
*
|
|
921
|
+
* Run the scheduled-maintenance batch: cron tasks, scheduled publishing,
|
|
922
|
+
* and hourly system cleanup. For request-less drivers — the Cloudflare
|
|
923
|
+
* `scheduled()` handler invokes this from a Cron Trigger. (On Node the
|
|
924
|
+
* timer-based scheduler drives the same work itself.)
|
|
925
|
+
*
|
|
926
|
+
* Full cleanup runs only on the top of the hour so per-minute work stays
|
|
927
|
+
* proportional to what is due; the heartbeat and scheduled publish sweep
|
|
928
|
+
* still run every tick.
|
|
917
929
|
*
|
|
918
930
|
* Each step is independent and non-fatal. Returns the content promoted
|
|
919
931
|
* by the publishing sweep so the caller can purge edge-cache tags.
|
|
@@ -956,6 +968,26 @@ export class EmDashRuntime {
|
|
|
956
968
|
}
|
|
957
969
|
}
|
|
958
970
|
|
|
971
|
+
const currentTime = this.runtimeDeps.now?.() ?? new Date();
|
|
972
|
+
const { published } = await this.runScheduledMaintenanceTick(options, currentTime);
|
|
973
|
+
|
|
974
|
+
return { processed, published };
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
/**
|
|
978
|
+
* Time-gated maintenance pass shared by Cloudflare `scheduled()` and the
|
|
979
|
+
* Node timer scheduler. Scheduled publishing and the heartbeat run every
|
|
980
|
+
* tick; the heavier bookkeeping cleanups run only on the top of the hour so
|
|
981
|
+
* per-minute work stays proportional to what is actually due. This keeps the
|
|
982
|
+
* cold-start CPU budget on Workers Free from being consumed by cleanup
|
|
983
|
+
* queries on every quiet-hours tick.
|
|
984
|
+
*/
|
|
985
|
+
private async runScheduledMaintenanceTick(
|
|
986
|
+
options: {
|
|
987
|
+
onPublished?: (refs: PublishedRef[]) => Promise<void>;
|
|
988
|
+
},
|
|
989
|
+
currentTime: Date,
|
|
990
|
+
): Promise<{ published: PublishedRef[] }> {
|
|
959
991
|
let published: PublishedRef[] = [];
|
|
960
992
|
try {
|
|
961
993
|
published = await this.publishScheduledWithFence(options.onPublished);
|
|
@@ -963,11 +995,7 @@ export class EmDashRuntime {
|
|
|
963
995
|
console.error("[scheduled-publish] Sweep failed:", error);
|
|
964
996
|
}
|
|
965
997
|
|
|
966
|
-
|
|
967
|
-
await runSystemCleanup(this.db, this.storage ?? undefined);
|
|
968
|
-
} catch (error) {
|
|
969
|
-
console.error("[cleanup] System cleanup failed:", error);
|
|
970
|
-
}
|
|
998
|
+
await this.runSystemCleanupIfDue(currentTime);
|
|
971
999
|
|
|
972
1000
|
try {
|
|
973
1001
|
await this.syncPluginStorageIndexesOnce();
|
|
@@ -977,9 +1005,25 @@ export class EmDashRuntime {
|
|
|
977
1005
|
|
|
978
1006
|
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
979
1007
|
await maybeRunScheduledBackup(this.db, this.storage ?? undefined);
|
|
980
|
-
await recordSchedulerHeartbeatSafely(this.db);
|
|
1008
|
+
await recordSchedulerHeartbeatSafely(this.db, currentTime);
|
|
981
1009
|
|
|
982
|
-
return {
|
|
1010
|
+
return { published };
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
private lastSystemCleanupAt: Date | null = null;
|
|
1014
|
+
|
|
1015
|
+
private shouldRunSystemCleanup(currentTime: Date): boolean {
|
|
1016
|
+
return shouldRunSystemCleanupNow(currentTime, this.lastSystemCleanupAt);
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
private async runSystemCleanupIfDue(currentTime: Date): Promise<void> {
|
|
1020
|
+
if (!this.shouldRunSystemCleanup(currentTime)) return;
|
|
1021
|
+
this.lastSystemCleanupAt = currentTime;
|
|
1022
|
+
try {
|
|
1023
|
+
await runSystemCleanup(this.db, this.storage ?? undefined);
|
|
1024
|
+
} catch (error) {
|
|
1025
|
+
console.error("[cleanup] System cleanup failed:", error);
|
|
1026
|
+
}
|
|
983
1027
|
}
|
|
984
1028
|
|
|
985
1029
|
/**
|
|
@@ -1095,6 +1139,66 @@ export class EmDashRuntime {
|
|
|
1095
1139
|
await this._hooks.runPluginActivate(pluginId);
|
|
1096
1140
|
}
|
|
1097
1141
|
|
|
1142
|
+
/**
|
|
1143
|
+
* Run install → activate once for each native plugin registered in the
|
|
1144
|
+
* integration config that has no `_plugin_state` row.
|
|
1145
|
+
*
|
|
1146
|
+
* Only the isolate whose insert creates the row runs the hooks. A plugin
|
|
1147
|
+
* whose hooks fail is recorded as inactive rather than retried on later
|
|
1148
|
+
* boots; re-enabling it from the admin runs `plugin:activate`.
|
|
1149
|
+
*/
|
|
1150
|
+
private async installUnrecordedConfigPlugins(
|
|
1151
|
+
configPlugins: ResolvedPlugin[],
|
|
1152
|
+
recordedStates: ReadonlyMap<string, string>,
|
|
1153
|
+
): Promise<void> {
|
|
1154
|
+
const stateRepo = new PluginStateRepository(this.db);
|
|
1155
|
+
const failed: ResolvedPlugin[] = [];
|
|
1156
|
+
const recordFailure = (plugin: ResolvedPlugin, hook: string, error: Error | undefined) => {
|
|
1157
|
+
console.error(
|
|
1158
|
+
`EmDash: ${hook} failed for config plugin "${plugin.id}"; disabling it:`,
|
|
1159
|
+
error,
|
|
1160
|
+
);
|
|
1161
|
+
failed.push(plugin);
|
|
1162
|
+
};
|
|
1163
|
+
|
|
1164
|
+
for (const plugin of configPlugins) {
|
|
1165
|
+
if (recordedStates.has(plugin.id)) continue;
|
|
1166
|
+
|
|
1167
|
+
try {
|
|
1168
|
+
if (!(await stateRepo.createActiveIfAbsent(plugin.id, plugin.version, "config"))) continue;
|
|
1169
|
+
this.pluginStates.set(plugin.id, "active");
|
|
1170
|
+
|
|
1171
|
+
const install = await this._hooks.runPluginInstall(plugin.id);
|
|
1172
|
+
const installFailure = install.find((result) => !result.success);
|
|
1173
|
+
if (installFailure) {
|
|
1174
|
+
recordFailure(plugin, "plugin:install", installFailure.error);
|
|
1175
|
+
continue;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
const activate = await this._hooks.runPluginActivate(plugin.id);
|
|
1179
|
+
const activateFailure = activate.find((result) => !result.success);
|
|
1180
|
+
if (activateFailure) {
|
|
1181
|
+
recordFailure(plugin, "plugin:activate", activateFailure.error);
|
|
1182
|
+
}
|
|
1183
|
+
} catch (error) {
|
|
1184
|
+
console.error(`EmDash: Config plugin "${plugin.id}" install/activate failed:`, error);
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
if (failed.length === 0) return;
|
|
1189
|
+
for (const plugin of failed) {
|
|
1190
|
+
try {
|
|
1191
|
+
await stateRepo.disable(plugin.id, plugin.version);
|
|
1192
|
+
await setCronTasksEnabled(this.db, plugin.id, false);
|
|
1193
|
+
} catch (error) {
|
|
1194
|
+
console.error(`EmDash: Failed to record config plugin "${plugin.id}" as disabled:`, error);
|
|
1195
|
+
}
|
|
1196
|
+
this.pluginStates.set(plugin.id, "inactive");
|
|
1197
|
+
this.enabledPlugins.delete(plugin.id);
|
|
1198
|
+
}
|
|
1199
|
+
await this.rebuildHookPipeline();
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1098
1202
|
/**
|
|
1099
1203
|
* Rebuild the hook pipeline from the current set of enabled plugins.
|
|
1100
1204
|
*
|
|
@@ -1534,6 +1638,9 @@ export class EmDashRuntime {
|
|
|
1534
1638
|
const storage = EmDashRuntime.getStorage(deps);
|
|
1535
1639
|
|
|
1536
1640
|
let pluginStates: Map<string, string> = new Map();
|
|
1641
|
+
let pluginStatesRead = false;
|
|
1642
|
+
let installedPluginStates: PluginState[] = [];
|
|
1643
|
+
let exclusiveHookSelections: Map<string, string | undefined> | undefined;
|
|
1537
1644
|
const configuredLocales: string[] =
|
|
1538
1645
|
virtualConfig?.i18n?.locales ?? getI18nConfig()?.locales ?? [];
|
|
1539
1646
|
const localeCasingRepairVersion = getLocaleCasingRepairVersion(configuredLocales);
|
|
@@ -1599,6 +1706,7 @@ export class EmDashRuntime {
|
|
|
1599
1706
|
const readSiteInfo = async () => {
|
|
1600
1707
|
const siteOpts = await optionsRepo.getMany([
|
|
1601
1708
|
"emdash:site_title",
|
|
1709
|
+
"site:url",
|
|
1602
1710
|
"emdash:site_url",
|
|
1603
1711
|
"emdash:locale",
|
|
1604
1712
|
LOCALE_CASING_REPAIR_OPTION,
|
|
@@ -1606,7 +1714,11 @@ export class EmDashRuntime {
|
|
|
1606
1714
|
SETUP_COMPLETE_OPTION,
|
|
1607
1715
|
]);
|
|
1608
1716
|
const siteTitle = siteOpts.get("emdash:site_title");
|
|
1609
|
-
const siteUrl =
|
|
1717
|
+
const siteUrl = resolveSiteOrigin(
|
|
1718
|
+
deps.config,
|
|
1719
|
+
siteOpts.get("site:url"),
|
|
1720
|
+
siteOpts.get("emdash:site_url"),
|
|
1721
|
+
);
|
|
1610
1722
|
const locale = siteOpts.get("emdash:locale");
|
|
1611
1723
|
const repairVersion = siteOpts.get(LOCALE_CASING_REPAIR_OPTION);
|
|
1612
1724
|
storedLocaleCasingRepairVersion =
|
|
@@ -1615,7 +1727,7 @@ export class EmDashRuntime {
|
|
|
1615
1727
|
setupDone = siteOpts.get(SETUP_COMPLETE_OPTION) === true;
|
|
1616
1728
|
return {
|
|
1617
1729
|
siteName: deps.siteInfo?.name ?? (typeof siteTitle === "string" ? siteTitle : undefined),
|
|
1618
|
-
siteUrl: deps.siteInfo?.url ??
|
|
1730
|
+
siteUrl: deps.siteInfo?.url ?? siteUrl,
|
|
1619
1731
|
locale: deps.siteInfo?.locale ?? (typeof locale === "string" ? locale : undefined),
|
|
1620
1732
|
// trailingSlash is a build-time Astro routing decision, not a
|
|
1621
1733
|
// user-editable setting, so it comes from the Astro config
|
|
@@ -1627,11 +1739,12 @@ export class EmDashRuntime {
|
|
|
1627
1739
|
const coldStartReads: Array<Promise<void>> = [
|
|
1628
1740
|
phase("rt.plugins", "Plugin states", async () => {
|
|
1629
1741
|
try {
|
|
1630
|
-
const states = await readDb
|
|
1631
|
-
.selectFrom("_plugin_state")
|
|
1632
|
-
.select(["plugin_id", "status"])
|
|
1633
|
-
.execute();
|
|
1742
|
+
const states = await readDb.selectFrom("_plugin_state").selectAll().execute();
|
|
1634
1743
|
pluginStates = new Map(states.map((s) => [s.plugin_id, s.status]));
|
|
1744
|
+
pluginStatesRead = true;
|
|
1745
|
+
installedPluginStates = states
|
|
1746
|
+
.filter((s) => s.source === "marketplace" || s.source === "registry")
|
|
1747
|
+
.map(rowToPluginState);
|
|
1635
1748
|
} catch (error) {
|
|
1636
1749
|
captureMissingManualSchema(error);
|
|
1637
1750
|
// _plugin_state may not exist yet on a pre-migration db.
|
|
@@ -1645,6 +1758,29 @@ export class EmDashRuntime {
|
|
|
1645
1758
|
// options may not exist yet on a pre-migration db.
|
|
1646
1759
|
}
|
|
1647
1760
|
}),
|
|
1761
|
+
phase("rt.hookselections", "Exclusive hook selections", async () => {
|
|
1762
|
+
// Built-in and sandboxed providers register after these reads, so
|
|
1763
|
+
// only configured plugins' hooks and the always-present
|
|
1764
|
+
// comment:moderate are known here. Hook resolution reads the rest.
|
|
1765
|
+
const keys = Array.from(
|
|
1766
|
+
new Set([
|
|
1767
|
+
"comment:moderate",
|
|
1768
|
+
...deps.plugins.flatMap((plugin) =>
|
|
1769
|
+
Object.entries(plugin.hooks)
|
|
1770
|
+
.filter(([, hook]) => hook?.exclusive)
|
|
1771
|
+
.map(([name]) => name),
|
|
1772
|
+
),
|
|
1773
|
+
]),
|
|
1774
|
+
(name) => `${EXCLUSIVE_HOOK_KEY_PREFIX}${name}`,
|
|
1775
|
+
);
|
|
1776
|
+
try {
|
|
1777
|
+
const stored = await optionsRepo.getMany<string>(keys);
|
|
1778
|
+
exclusiveHookSelections = new Map(keys.map((key) => [key, stored.get(key)]));
|
|
1779
|
+
} catch (error) {
|
|
1780
|
+
captureMissingManualSchema(error);
|
|
1781
|
+
// Hook resolution reads the selections itself when this fails.
|
|
1782
|
+
}
|
|
1783
|
+
}),
|
|
1648
1784
|
];
|
|
1649
1785
|
|
|
1650
1786
|
if (ownsConfiguredDb) {
|
|
@@ -1849,7 +1985,10 @@ export class EmDashRuntime {
|
|
|
1849
1985
|
// in-process plugins BEFORE pipeline creation. They need to be in the
|
|
1850
1986
|
// pipeline to participate in hook dispatch.
|
|
1851
1987
|
if (deps.sandboxBypassed && deps.config.marketplace && storage) {
|
|
1852
|
-
const marketplaceBypassed = await EmDashRuntime.loadMarketplacePluginsBypassed(
|
|
1988
|
+
const marketplaceBypassed = await EmDashRuntime.loadMarketplacePluginsBypassed(
|
|
1989
|
+
storage,
|
|
1990
|
+
installedPluginStates,
|
|
1991
|
+
);
|
|
1853
1992
|
for (const plugin of marketplaceBypassed) {
|
|
1854
1993
|
allPipelinePlugins.push(plugin);
|
|
1855
1994
|
bypassedPluginsList.push(plugin);
|
|
@@ -1885,6 +2024,7 @@ export class EmDashRuntime {
|
|
|
1885
2024
|
storage,
|
|
1886
2025
|
deps,
|
|
1887
2026
|
sandboxedPluginPool,
|
|
2027
|
+
installedPluginStates,
|
|
1888
2028
|
siteInfo,
|
|
1889
2029
|
),
|
|
1890
2030
|
),
|
|
@@ -1901,6 +2041,7 @@ export class EmDashRuntime {
|
|
|
1901
2041
|
storage,
|
|
1902
2042
|
deps,
|
|
1903
2043
|
sandboxedPluginPool,
|
|
2044
|
+
installedPluginStates,
|
|
1904
2045
|
siteInfo,
|
|
1905
2046
|
),
|
|
1906
2047
|
),
|
|
@@ -2033,7 +2174,7 @@ export class EmDashRuntime {
|
|
|
2033
2174
|
|
|
2034
2175
|
// Resolve exclusive hooks — auto-select providers and sync with DB
|
|
2035
2176
|
await phase("rt.hooks", "Exclusive hook resolution", () =>
|
|
2036
|
-
EmDashRuntime.resolveExclusiveHooks(pipeline, db, deps),
|
|
2177
|
+
EmDashRuntime.resolveExclusiveHooks(pipeline, db, deps, exclusiveHookSelections),
|
|
2037
2178
|
);
|
|
2038
2179
|
|
|
2039
2180
|
// ── Email pipeline ───────────────────────────────────────────────
|
|
@@ -2112,37 +2253,19 @@ export class EmDashRuntime {
|
|
|
2112
2253
|
cronScheduler = scheduler;
|
|
2113
2254
|
|
|
2114
2255
|
// Run scheduled publishing and system cleanup alongside each tick.
|
|
2115
|
-
//
|
|
2256
|
+
// The heavier bookkeeping cleanup is time-gated to once per hour;
|
|
2257
|
+
// per-minute work stays limited to publishing, cron tasks, and the
|
|
2258
|
+
// heartbeat so cold isolates on tight CPU budgets don't pay for
|
|
2259
|
+
// full cleanup on every quiet-hours tick.
|
|
2116
2260
|
scheduler.setSystemCleanup(async () => {
|
|
2261
|
+
const runtime = runtimeRef.current;
|
|
2262
|
+
if (!runtime) return;
|
|
2263
|
+
const currentTime = deps.now?.() ?? new Date();
|
|
2117
2264
|
try {
|
|
2118
|
-
|
|
2119
|
-
// Falls back to the raw handler if (improbably) the tick beats
|
|
2120
|
-
// the post-construction ref assignment.
|
|
2121
|
-
const runtime = runtimeRef.current;
|
|
2122
|
-
if (runtime) {
|
|
2123
|
-
await runtime.publishScheduled();
|
|
2124
|
-
} else {
|
|
2125
|
-
const recordWrite = await assertSiteWriteAllowed(db);
|
|
2126
|
-
if ((await publishDueContent(db)).length > 0) await recordWrite();
|
|
2127
|
-
}
|
|
2128
|
-
} catch (error) {
|
|
2129
|
-
console.error("[scheduled-publish] Sweep failed:", error);
|
|
2130
|
-
}
|
|
2131
|
-
try {
|
|
2132
|
-
await runSystemCleanup(db, storage ?? undefined);
|
|
2133
|
-
} catch (error) {
|
|
2134
|
-
// Non-fatal -- individual cleanup failures are already logged
|
|
2135
|
-
// by runSystemCleanup. This catches unexpected errors.
|
|
2136
|
-
console.error("[cleanup] System cleanup failed:", error);
|
|
2137
|
-
}
|
|
2138
|
-
try {
|
|
2139
|
-
await runtimeRef.current?.syncPluginStorageIndexesOnce();
|
|
2265
|
+
await runtime.runScheduledMaintenanceTick({}, currentTime);
|
|
2140
2266
|
} catch (error) {
|
|
2141
|
-
console.error("[
|
|
2267
|
+
console.error("[scheduled] Maintenance tick failed:", error);
|
|
2142
2268
|
}
|
|
2143
|
-
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
2144
|
-
await maybeRunScheduledBackup(db, storage ?? undefined);
|
|
2145
|
-
await recordSchedulerHeartbeatSafely(db);
|
|
2146
2269
|
});
|
|
2147
2270
|
// start() is void on the timer scheduler but the interface
|
|
2148
2271
|
// allows a promise (alarm-backed schedulers); we don't block on it.
|
|
@@ -2218,6 +2341,13 @@ export class EmDashRuntime {
|
|
|
2218
2341
|
runtime.handlePluginCommentModerate(pluginId, id, status, expectedStatus),
|
|
2219
2342
|
);
|
|
2220
2343
|
sandboxRunner?.setContentActions?.(contentActions);
|
|
2344
|
+
|
|
2345
|
+
if (ownsConfiguredDb && pluginStatesRead) {
|
|
2346
|
+
await phase("rt.lifecycle", "Config plugin install/activate", () =>
|
|
2347
|
+
runtime.installUnrecordedConfigPlugins(deps.plugins, new Map(pluginStates)),
|
|
2348
|
+
);
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2221
2351
|
return runtime;
|
|
2222
2352
|
}
|
|
2223
2353
|
|
|
@@ -2314,14 +2444,13 @@ export class EmDashRuntime {
|
|
|
2314
2444
|
try {
|
|
2315
2445
|
await enforceRuntimeMigrationPolicy(db, deps.migrationMode ?? "auto");
|
|
2316
2446
|
} catch (error) {
|
|
2317
|
-
//
|
|
2318
|
-
//
|
|
2319
|
-
//
|
|
2320
|
-
//
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
) {
|
|
2447
|
+
// Only a failed migration run, or a lock its holder left behind,
|
|
2448
|
+
// backs off. Waiting behind a slow concurrent migrator, pending
|
|
2449
|
+
// migrations in check mode, and errors from the applied-migration
|
|
2450
|
+
// check on an up-to-date database (a lost connection, an
|
|
2451
|
+
// unavailable replica) stay retryable, so the next request tries
|
|
2452
|
+
// again.
|
|
2453
|
+
if (error instanceof MigrationFailedError || error instanceof MigrationLockHeldError) {
|
|
2325
2454
|
holder.failures.set(cacheKey, {
|
|
2326
2455
|
at: Date.now(),
|
|
2327
2456
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -2420,6 +2549,7 @@ export class EmDashRuntime {
|
|
|
2420
2549
|
path: p.path,
|
|
2421
2550
|
label: p.label ?? p.path,
|
|
2422
2551
|
icon: p.icon,
|
|
2552
|
+
group: p.group,
|
|
2423
2553
|
}));
|
|
2424
2554
|
const adminWidgets:
|
|
2425
2555
|
| Array<{
|
|
@@ -2549,6 +2679,7 @@ export class EmDashRuntime {
|
|
|
2549
2679
|
path: page.path,
|
|
2550
2680
|
label: page.label ?? page.path,
|
|
2551
2681
|
icon: page.icon,
|
|
2682
|
+
group: page.group,
|
|
2552
2683
|
}));
|
|
2553
2684
|
const adminWidgets: PluginDashboardWidget[] | undefined = entry.adminWidgets?.map(
|
|
2554
2685
|
(widget) => ({
|
|
@@ -2611,19 +2742,14 @@ export class EmDashRuntime {
|
|
|
2611
2742
|
return sandboxedPluginCache;
|
|
2612
2743
|
}
|
|
2613
2744
|
|
|
2614
|
-
/**
|
|
2615
|
-
* Cold-start: load marketplace-installed plugins from site-local R2 storage
|
|
2616
|
-
*
|
|
2617
|
-
* Queries _plugin_state for source='marketplace' rows, fetches each bundle
|
|
2618
|
-
* from R2, and loads via SandboxRunner.
|
|
2619
|
-
*/
|
|
2620
2745
|
/**
|
|
2621
2746
|
* Cold-start load of all active sandboxed plugins for one install
|
|
2622
2747
|
* tier (marketplace or registry) from site-local R2.
|
|
2623
2748
|
*
|
|
2624
2749
|
* Mirrors {@link syncSandboxedSourcePlugins} but runs once at runtime
|
|
2625
2750
|
* creation, before request traffic arrives; the sync method runs on
|
|
2626
|
-
* demand after install / update / uninstall handlers.
|
|
2751
|
+
* demand after install / update / uninstall handlers. `states` are the
|
|
2752
|
+
* `_plugin_state` rows read in the cold-start batch.
|
|
2627
2753
|
*/
|
|
2628
2754
|
private static async loadInstalledSandboxedPlugins(
|
|
2629
2755
|
source: "marketplace" | "registry",
|
|
@@ -2631,6 +2757,7 @@ export class EmDashRuntime {
|
|
|
2631
2757
|
storage: Storage,
|
|
2632
2758
|
deps: RuntimeDependencies,
|
|
2633
2759
|
cache: Map<string, SandboxedPluginInstance>,
|
|
2760
|
+
states: readonly PluginState[],
|
|
2634
2761
|
siteInfo?: {
|
|
2635
2762
|
siteName?: string;
|
|
2636
2763
|
siteUrl?: string;
|
|
@@ -2673,67 +2800,57 @@ export class EmDashRuntime {
|
|
|
2673
2800
|
|
|
2674
2801
|
const keySet = source === "marketplace" ? marketplacePluginKeys : registryPluginKeys;
|
|
2675
2802
|
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
const plugins =
|
|
2679
|
-
source === "marketplace"
|
|
2680
|
-
? await stateRepo.getMarketplacePlugins()
|
|
2681
|
-
: await stateRepo.getRegistryPlugins();
|
|
2803
|
+
for (const plugin of states.filter((state) => state.source === source)) {
|
|
2804
|
+
if (plugin.status !== "active") continue;
|
|
2682
2805
|
|
|
2683
|
-
|
|
2684
|
-
|
|
2806
|
+
// Marketplace plugins record the live version in
|
|
2807
|
+
// `marketplaceVersion`; registry plugins use `version` directly.
|
|
2808
|
+
const version =
|
|
2809
|
+
source === "marketplace" ? (plugin.marketplaceVersion ?? plugin.version) : plugin.version;
|
|
2810
|
+
const pluginKey = `${plugin.pluginId}:${version}`;
|
|
2685
2811
|
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
const version =
|
|
2689
|
-
source === "marketplace" ? (plugin.marketplaceVersion ?? plugin.version) : plugin.version;
|
|
2690
|
-
const pluginKey = `${plugin.pluginId}:${version}`;
|
|
2812
|
+
// Skip if already loaded (shouldn't happen, but guard)
|
|
2813
|
+
if (cache.has(pluginKey)) continue;
|
|
2691
2814
|
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
console.warn(`EmDash: ${source} plugin ${plugin.pluginId}@${version} not found in R2`);
|
|
2699
|
-
continue;
|
|
2700
|
-
}
|
|
2815
|
+
try {
|
|
2816
|
+
const bundle = await loadBundleFromR2(storage, plugin.pluginId, version, source);
|
|
2817
|
+
if (!bundle) {
|
|
2818
|
+
console.warn(`EmDash: ${source} plugin ${plugin.pluginId}@${version} not found in R2`);
|
|
2819
|
+
continue;
|
|
2820
|
+
}
|
|
2701
2821
|
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2822
|
+
const loaded = await sandboxRunner.load(bundle.manifest, bundle.backendCode);
|
|
2823
|
+
cache.set(pluginKey, loaded);
|
|
2824
|
+
sandboxedManifestCache.set(pluginKey, bundle.manifest);
|
|
2825
|
+
keySet.add(pluginKey);
|
|
2706
2826
|
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2827
|
+
// Cache manifest admin config for getManifest()
|
|
2828
|
+
marketplaceManifestCache.set(plugin.pluginId, {
|
|
2829
|
+
id: bundle.manifest.id,
|
|
2830
|
+
version: bundle.manifest.version,
|
|
2831
|
+
admin: bundle.manifest.admin,
|
|
2832
|
+
mcp: bundle.manifest.mcp,
|
|
2833
|
+
storage: bundle.manifest.storage,
|
|
2834
|
+
allowedHosts: bundle.manifest.allowedHosts,
|
|
2835
|
+
capabilities: bundle.manifest.capabilities,
|
|
2836
|
+
});
|
|
2717
2837
|
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
}
|
|
2725
|
-
sandboxedRouteMetaCache.set(plugin.pluginId, routeMeta);
|
|
2838
|
+
// Cache route metadata from manifest for auth decisions
|
|
2839
|
+
if (bundle.manifest.routes.length > 0) {
|
|
2840
|
+
const routeMeta = new Map<string, RouteMeta>();
|
|
2841
|
+
for (const entry of bundle.manifest.routes) {
|
|
2842
|
+
const normalized = normalizeManifestRoute(entry);
|
|
2843
|
+
routeMeta.set(normalized.name, buildRouteMeta(normalized));
|
|
2726
2844
|
}
|
|
2727
|
-
|
|
2728
|
-
console.log(
|
|
2729
|
-
`EmDash: Loaded ${source} plugin ${pluginKey} with capabilities: [${bundle.manifest.capabilities.join(", ")}]`,
|
|
2730
|
-
);
|
|
2731
|
-
} catch (error) {
|
|
2732
|
-
console.error(`EmDash: Failed to load ${source} plugin ${plugin.pluginId}:`, error);
|
|
2845
|
+
sandboxedRouteMetaCache.set(plugin.pluginId, routeMeta);
|
|
2733
2846
|
}
|
|
2847
|
+
|
|
2848
|
+
console.log(
|
|
2849
|
+
`EmDash: Loaded ${source} plugin ${pluginKey} with capabilities: [${bundle.manifest.capabilities.join(", ")}]`,
|
|
2850
|
+
);
|
|
2851
|
+
} catch (error) {
|
|
2852
|
+
console.error(`EmDash: Failed to load ${source} plugin ${plugin.pluginId}:`, error);
|
|
2734
2853
|
}
|
|
2735
|
-
} catch {
|
|
2736
|
-
// _plugin_state table may not exist yet (pre-migration)
|
|
2737
2854
|
}
|
|
2738
2855
|
}
|
|
2739
2856
|
|
|
@@ -2751,96 +2868,85 @@ export class EmDashRuntime {
|
|
|
2751
2868
|
* Returns ResolvedPlugins to be merged into the pipeline.
|
|
2752
2869
|
*/
|
|
2753
2870
|
private static async loadMarketplacePluginsBypassed(
|
|
2754
|
-
db: Kysely<Database>,
|
|
2755
2871
|
storage: Storage,
|
|
2872
|
+
states: readonly PluginState[],
|
|
2756
2873
|
): Promise<ResolvedPlugin[]> {
|
|
2757
2874
|
const resolved: ResolvedPlugin[] = [];
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
const marketplacePlugins = await stateRepo.getMarketplacePlugins();
|
|
2761
|
-
if (marketplacePlugins.length === 0) return resolved;
|
|
2875
|
+
const marketplacePlugins = states.filter((state) => state.source === "marketplace");
|
|
2876
|
+
if (marketplacePlugins.length === 0) return resolved;
|
|
2762
2877
|
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2878
|
+
console.info(
|
|
2879
|
+
"EmDash: Sandbox disabled (sandbox: false). " +
|
|
2880
|
+
"Marketplace plugins will run in-process without isolation.",
|
|
2881
|
+
);
|
|
2767
2882
|
|
|
2768
|
-
|
|
2883
|
+
const { adaptSandboxEntry } = await import("./plugins/adapt-sandbox-entry.js");
|
|
2769
2884
|
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
continue;
|
|
2780
|
-
}
|
|
2885
|
+
for (const plugin of marketplacePlugins) {
|
|
2886
|
+
if (plugin.status !== "active") continue;
|
|
2887
|
+
const version = plugin.marketplaceVersion ?? plugin.version;
|
|
2888
|
+
try {
|
|
2889
|
+
const bundle = await loadBundleFromR2(storage, plugin.pluginId, version);
|
|
2890
|
+
if (!bundle) {
|
|
2891
|
+
console.warn(`EmDash: Marketplace plugin ${plugin.pluginId}@${version} not found in R2`);
|
|
2892
|
+
continue;
|
|
2893
|
+
}
|
|
2781
2894
|
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
}
|
|
2798
|
-
sandboxedRouteMetaCache.set(plugin.pluginId, routeMeta);
|
|
2895
|
+
// Cache manifest and route metadata for admin UI and route auth
|
|
2896
|
+
marketplaceManifestCache.set(plugin.pluginId, {
|
|
2897
|
+
id: bundle.manifest.id,
|
|
2898
|
+
version: bundle.manifest.version,
|
|
2899
|
+
admin: bundle.manifest.admin,
|
|
2900
|
+
mcp: bundle.manifest.mcp,
|
|
2901
|
+
storage: bundle.manifest.storage,
|
|
2902
|
+
allowedHosts: bundle.manifest.allowedHosts,
|
|
2903
|
+
capabilities: bundle.manifest.capabilities,
|
|
2904
|
+
});
|
|
2905
|
+
if (bundle.manifest.routes.length > 0) {
|
|
2906
|
+
const routeMeta = new Map<string, RouteMeta>();
|
|
2907
|
+
for (const entry of bundle.manifest.routes) {
|
|
2908
|
+
const normalized = normalizeManifestRoute(entry);
|
|
2909
|
+
routeMeta.set(normalized.name, buildRouteMeta(normalized));
|
|
2799
2910
|
}
|
|
2800
|
-
|
|
2801
|
-
// Evaluate the bundled ESM and adapt it as a trusted plugin
|
|
2802
|
-
const dataUrl = `data:text/javascript;base64,${Buffer.from(bundle.backendCode).toString("base64")}`;
|
|
2803
|
-
// eslint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- dynamic module from trusted bundle (built by plugin-cli); adaptSandboxEntry validates required fields.
|
|
2804
|
-
const pluginModule = (await import(/* @vite-ignore */ dataUrl)) as Record<
|
|
2805
|
-
string,
|
|
2806
|
-
unknown
|
|
2807
|
-
>;
|
|
2808
|
-
const pluginDef = (pluginModule.default ?? pluginModule) as Parameters<
|
|
2809
|
-
typeof adaptSandboxEntry
|
|
2810
|
-
>[0];
|
|
2811
|
-
const adapted = adaptSandboxEntry(pluginDef, {
|
|
2812
|
-
id: bundle.manifest.id,
|
|
2813
|
-
version: bundle.manifest.version,
|
|
2814
|
-
entrypoint: "",
|
|
2815
|
-
capabilities: bundle.manifest.capabilities ?? [],
|
|
2816
|
-
allowedHosts: bundle.manifest.allowedHosts ?? [],
|
|
2817
|
-
// eslint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- adaptSandboxEntry copies storage through
|
|
2818
|
-
storage: (bundle.manifest.storage ?? {}) as never,
|
|
2819
|
-
adminPages: bundle.manifest.admin?.pages,
|
|
2820
|
-
adminWidgets: bundle.manifest.admin?.widgets?.map((w) => ({
|
|
2821
|
-
id: w.id,
|
|
2822
|
-
title: w.title,
|
|
2823
|
-
size:
|
|
2824
|
-
w.size === "full" || w.size === "half" || w.size === "third" ? w.size : undefined,
|
|
2825
|
-
})),
|
|
2826
|
-
settingsSchema: bundle.manifest.admin?.settingsSchema,
|
|
2827
|
-
editorPanels: bundle.manifest.admin?.editorPanels,
|
|
2828
|
-
editorActions: bundle.manifest.admin?.editorActions,
|
|
2829
|
-
mcp: bundle.manifest.mcp,
|
|
2830
|
-
});
|
|
2831
|
-
resolved.push(adapted);
|
|
2832
|
-
console.log(
|
|
2833
|
-
`EmDash: Loaded marketplace plugin ${plugin.pluginId}@${version} in-process (sandbox bypassed)`,
|
|
2834
|
-
);
|
|
2835
|
-
} catch (error) {
|
|
2836
|
-
console.error(
|
|
2837
|
-
`EmDash: Failed to load marketplace plugin ${plugin.pluginId} in-process:`,
|
|
2838
|
-
error,
|
|
2839
|
-
);
|
|
2911
|
+
sandboxedRouteMetaCache.set(plugin.pluginId, routeMeta);
|
|
2840
2912
|
}
|
|
2913
|
+
|
|
2914
|
+
// Evaluate the bundled ESM and adapt it as a trusted plugin
|
|
2915
|
+
const dataUrl = `data:text/javascript;base64,${Buffer.from(bundle.backendCode).toString("base64")}`;
|
|
2916
|
+
// eslint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- dynamic module from trusted bundle (built by plugin-cli); adaptSandboxEntry validates required fields.
|
|
2917
|
+
const pluginModule = (await import(/* @vite-ignore */ dataUrl)) as Record<string, unknown>;
|
|
2918
|
+
const pluginDef = (pluginModule.default ?? pluginModule) as Parameters<
|
|
2919
|
+
typeof adaptSandboxEntry
|
|
2920
|
+
>[0];
|
|
2921
|
+
const adapted = adaptSandboxEntry(pluginDef, {
|
|
2922
|
+
id: bundle.manifest.id,
|
|
2923
|
+
version: bundle.manifest.version,
|
|
2924
|
+
entrypoint: "",
|
|
2925
|
+
capabilities: bundle.manifest.capabilities ?? [],
|
|
2926
|
+
allowedHosts: bundle.manifest.allowedHosts ?? [],
|
|
2927
|
+
// eslint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- adaptSandboxEntry copies storage through
|
|
2928
|
+
storage: (bundle.manifest.storage ?? {}) as never,
|
|
2929
|
+
adminPages: bundle.manifest.admin?.pages,
|
|
2930
|
+
adminWidgets: bundle.manifest.admin?.widgets?.map((w) => ({
|
|
2931
|
+
id: w.id,
|
|
2932
|
+
title: w.title,
|
|
2933
|
+
size: w.size === "full" || w.size === "half" || w.size === "third" ? w.size : undefined,
|
|
2934
|
+
})),
|
|
2935
|
+
settingsSchema: bundle.manifest.admin?.settingsSchema,
|
|
2936
|
+
editorPanels: bundle.manifest.admin?.editorPanels,
|
|
2937
|
+
editorActions: bundle.manifest.admin?.editorActions,
|
|
2938
|
+
mcp: bundle.manifest.mcp,
|
|
2939
|
+
});
|
|
2940
|
+
resolved.push(adapted);
|
|
2941
|
+
console.log(
|
|
2942
|
+
`EmDash: Loaded marketplace plugin ${plugin.pluginId}@${version} in-process (sandbox bypassed)`,
|
|
2943
|
+
);
|
|
2944
|
+
} catch (error) {
|
|
2945
|
+
console.error(
|
|
2946
|
+
`EmDash: Failed to load marketplace plugin ${plugin.pluginId} in-process:`,
|
|
2947
|
+
error,
|
|
2948
|
+
);
|
|
2841
2949
|
}
|
|
2842
|
-
} catch {
|
|
2843
|
-
// _plugin_state table may not exist yet
|
|
2844
2950
|
}
|
|
2845
2951
|
return resolved;
|
|
2846
2952
|
}
|
|
@@ -2856,6 +2962,7 @@ export class EmDashRuntime {
|
|
|
2856
2962
|
pipeline: HookPipeline,
|
|
2857
2963
|
db: Kysely<Database>,
|
|
2858
2964
|
deps: RuntimeDependencies,
|
|
2965
|
+
storedSelections?: ReadonlyMap<string, string | undefined>,
|
|
2859
2966
|
): Promise<void> {
|
|
2860
2967
|
const exclusiveHookNames = pipeline.getRegisteredExclusiveHooks();
|
|
2861
2968
|
if (exclusiveHookNames.length === 0) return;
|
|
@@ -2881,7 +2988,16 @@ export class EmDashRuntime {
|
|
|
2881
2988
|
pipeline,
|
|
2882
2989
|
isActive: () => true,
|
|
2883
2990
|
getOption: (key) => optionsRepo.get<string>(key),
|
|
2884
|
-
getOptions: (keys) =>
|
|
2991
|
+
getOptions: async (keys) => {
|
|
2992
|
+
const unread = keys.filter((key) => !storedSelections?.has(key));
|
|
2993
|
+
const selections =
|
|
2994
|
+
unread.length > 0 ? await optionsRepo.getMany<string>(unread) : new Map<string, string>();
|
|
2995
|
+
for (const key of keys) {
|
|
2996
|
+
const value = storedSelections?.get(key);
|
|
2997
|
+
if (value !== undefined) selections.set(key, value);
|
|
2998
|
+
}
|
|
2999
|
+
return selections;
|
|
3000
|
+
},
|
|
2885
3001
|
setOption: (key, value) => optionsRepo.set(key, value),
|
|
2886
3002
|
deleteOption: async (key) => {
|
|
2887
3003
|
await optionsRepo.delete(key);
|
|
@@ -2940,7 +3056,7 @@ export class EmDashRuntime {
|
|
|
2940
3056
|
enabled?: boolean;
|
|
2941
3057
|
sandboxed?: boolean;
|
|
2942
3058
|
adminMode?: "react" | "blocks" | "none";
|
|
2943
|
-
adminPages?: Array<{ path: string; label?: string; icon?: string }>;
|
|
3059
|
+
adminPages?: Array<{ path: string; label?: string; icon?: string; group?: string }>;
|
|
2944
3060
|
dashboardWidgets?: Array<{
|
|
2945
3061
|
id: string;
|
|
2946
3062
|
title?: string;
|
|
@@ -3206,6 +3322,7 @@ export class EmDashRuntime {
|
|
|
3206
3322
|
collection: string,
|
|
3207
3323
|
params: {
|
|
3208
3324
|
cursor?: string;
|
|
3325
|
+
page?: number;
|
|
3209
3326
|
limit?: number;
|
|
3210
3327
|
status?: string;
|
|
3211
3328
|
orderBy?: string;
|
|
@@ -3401,12 +3518,21 @@ export class EmDashRuntime {
|
|
|
3401
3518
|
...(body.translationOf ? { translationOf: body.translationOf } : {}),
|
|
3402
3519
|
};
|
|
3403
3520
|
|
|
3521
|
+
const collectionInfo = await this.schemaRegistry
|
|
3522
|
+
.getCollectionWithFields(collection)
|
|
3523
|
+
.catch(() => null);
|
|
3524
|
+
|
|
3404
3525
|
// Run beforeSave hooks (trusted plugins)
|
|
3405
3526
|
let processedData = body.data;
|
|
3406
3527
|
if (!options.skipSaveHooks && this.hooks.hasHooks("content:beforeSave")) {
|
|
3528
|
+
const hookData = collectionInfo
|
|
3529
|
+
? await inferBlockTypes(collectionInfo, body.data, () =>
|
|
3530
|
+
Promise.resolve(translationSource?.data),
|
|
3531
|
+
)
|
|
3532
|
+
: body.data;
|
|
3407
3533
|
try {
|
|
3408
3534
|
const hookResult = await this.hooks.runContentBeforeSave(
|
|
3409
|
-
|
|
3535
|
+
hookData,
|
|
3410
3536
|
collection,
|
|
3411
3537
|
true,
|
|
3412
3538
|
undefined,
|
|
@@ -3429,9 +3555,6 @@ export class EmDashRuntime {
|
|
|
3429
3555
|
}
|
|
3430
3556
|
}
|
|
3431
3557
|
}
|
|
3432
|
-
const collectionInfo = await this.schemaRegistry
|
|
3433
|
-
.getCollectionWithFields(collection)
|
|
3434
|
-
.catch(() => null);
|
|
3435
3558
|
const resolvedBlockTypes = collectionInfo?.fields.some((field) => field.type === "blocks")
|
|
3436
3559
|
? await resolveBlockTypes(this.db)
|
|
3437
3560
|
: undefined;
|
|
@@ -3553,9 +3676,10 @@ export class EmDashRuntime {
|
|
|
3553
3676
|
const resolvedItem = await repo.findByIdOrSlug(collection, id, body.locale);
|
|
3554
3677
|
const resolvedId = resolvedItem?.id ?? id;
|
|
3555
3678
|
|
|
3556
|
-
// Validate _rev early — before draft revision writes which modify
|
|
3557
|
-
//
|
|
3558
|
-
// the
|
|
3679
|
+
// Validate _rev early — before draft revision writes which modify the version.
|
|
3680
|
+
// The token is checked again against the row the draft UPDATE is conditioned
|
|
3681
|
+
// on, and reaches the column handler only when no draft revision was staged,
|
|
3682
|
+
// since staging advances the version the token encodes.
|
|
3559
3683
|
if (body._rev) {
|
|
3560
3684
|
if (!resolvedItem) {
|
|
3561
3685
|
return {
|
|
@@ -3611,9 +3735,20 @@ export class EmDashRuntime {
|
|
|
3611
3735
|
let resolvedBlockTypes: Awaited<ReturnType<typeof resolveBlockTypes>> | undefined;
|
|
3612
3736
|
if (bodyWithoutRev.data) {
|
|
3613
3737
|
if (this.hooks.hasHooks("content:beforeSave")) {
|
|
3738
|
+
const hookData = collectionInfo
|
|
3739
|
+
? await inferBlockTypes(collectionInfo, bodyWithoutRev.data, async () => {
|
|
3740
|
+
if (resolvedItem?.draftRevisionId && collectionInfo.supports?.includes("revisions")) {
|
|
3741
|
+
const draft = await new RevisionRepository(this.db).findById(
|
|
3742
|
+
resolvedItem.draftRevisionId,
|
|
3743
|
+
);
|
|
3744
|
+
return draft?.data ?? resolvedItem.data;
|
|
3745
|
+
}
|
|
3746
|
+
return resolvedItem?.data;
|
|
3747
|
+
})
|
|
3748
|
+
: bodyWithoutRev.data;
|
|
3614
3749
|
try {
|
|
3615
3750
|
const hookResult = await this.hooks.runContentBeforeSave(
|
|
3616
|
-
|
|
3751
|
+
hookData,
|
|
3617
3752
|
collection,
|
|
3618
3753
|
false,
|
|
3619
3754
|
resolvedItem?.id,
|
|
@@ -3736,6 +3871,15 @@ export class EmDashRuntime {
|
|
|
3736
3871
|
|
|
3737
3872
|
const revisionRepo = new RevisionRepository(this.db);
|
|
3738
3873
|
let existing = await repo.findById(collection, resolvedId);
|
|
3874
|
+
if (body._rev && existing) {
|
|
3875
|
+
const revCheck = validateRev(body._rev, existing);
|
|
3876
|
+
if (!revCheck.valid) {
|
|
3877
|
+
return {
|
|
3878
|
+
success: false as const,
|
|
3879
|
+
error: { code: "CONFLICT", message: revCheck.message },
|
|
3880
|
+
};
|
|
3881
|
+
}
|
|
3882
|
+
}
|
|
3739
3883
|
|
|
3740
3884
|
for (let attempt = 0; existing && attempt < MAX_DRAFT_STAGE_ATTEMPTS; attempt++) {
|
|
3741
3885
|
let baseData: Record<string, unknown>;
|
|
@@ -3886,6 +4030,7 @@ export class EmDashRuntime {
|
|
|
3886
4030
|
? await handleContentGet(this.db, collection, resolvedId)
|
|
3887
4031
|
: await handleContentUpdate(this.db, collection, resolvedId, {
|
|
3888
4032
|
...bodyWithoutRev,
|
|
4033
|
+
_rev: draftStorageChanged ? undefined : body._rev,
|
|
3889
4034
|
data: usesDraftRevisions ? undefined : processedData,
|
|
3890
4035
|
slug: usesDraftRevisions ? undefined : bodyWithoutRev.slug,
|
|
3891
4036
|
references: usesDraftRevisions ? undefined : bodyWithoutRev.references,
|
|
@@ -3985,7 +4130,7 @@ export class EmDashRuntime {
|
|
|
3985
4130
|
|
|
3986
4131
|
async handleContentListTrashed(
|
|
3987
4132
|
collection: string,
|
|
3988
|
-
params: { cursor?: string; limit?: number; locale?: string } = {},
|
|
4133
|
+
params: { cursor?: string; page?: number; limit?: number; locale?: string } = {},
|
|
3989
4134
|
) {
|
|
3990
4135
|
return handleContentListTrashed(this.db, collection, params);
|
|
3991
4136
|
}
|
|
@@ -4699,9 +4844,7 @@ export class EmDashRuntime {
|
|
|
4699
4844
|
url: `/media/${item.id}/${item.filename}`,
|
|
4700
4845
|
createdAt: item.createdAt,
|
|
4701
4846
|
};
|
|
4702
|
-
this.
|
|
4703
|
-
.runMediaAfterUpload(mediaItem)
|
|
4704
|
-
.catch((err) => console.error("EmDash afterUpload hook error:", err));
|
|
4847
|
+
this.runMediaAfterUploadHook(mediaItem);
|
|
4705
4848
|
}
|
|
4706
4849
|
|
|
4707
4850
|
return result;
|
|
@@ -4713,6 +4856,8 @@ export class EmDashRuntime {
|
|
|
4713
4856
|
size?: number;
|
|
4714
4857
|
width?: number;
|
|
4715
4858
|
height?: number;
|
|
4859
|
+
alt?: string;
|
|
4860
|
+
caption?: string;
|
|
4716
4861
|
storageKey: string;
|
|
4717
4862
|
contentHash?: string;
|
|
4718
4863
|
blurhash?: string;
|
|
@@ -4739,7 +4884,6 @@ export class EmDashRuntime {
|
|
|
4739
4884
|
// Create the media record
|
|
4740
4885
|
const result = await handleMediaCreate(this.db, processedInput);
|
|
4741
4886
|
|
|
4742
|
-
// Run afterUpload hooks (fire-and-forget)
|
|
4743
4887
|
if (result.success && this.hooks.hasHooks("media:afterUpload")) {
|
|
4744
4888
|
const item = result.data.item;
|
|
4745
4889
|
const mediaItem: MediaItem = {
|
|
@@ -4750,9 +4894,7 @@ export class EmDashRuntime {
|
|
|
4750
4894
|
url: `/media/${item.id}/${item.filename}`,
|
|
4751
4895
|
createdAt: item.createdAt,
|
|
4752
4896
|
};
|
|
4753
|
-
this.
|
|
4754
|
-
.runMediaAfterUpload(mediaItem)
|
|
4755
|
-
.catch((err) => console.error("EmDash afterUpload hook error:", err));
|
|
4897
|
+
this.runMediaAfterUploadHook(mediaItem);
|
|
4756
4898
|
}
|
|
4757
4899
|
|
|
4758
4900
|
return result;
|
|
@@ -4827,14 +4969,18 @@ export class EmDashRuntime {
|
|
|
4827
4969
|
return result.result;
|
|
4828
4970
|
},
|
|
4829
4971
|
fireAfterCreate: (event) => {
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4972
|
+
// Deferred through after() so the host's waitUntil keeps the hooks
|
|
4973
|
+
// alive past the response (see comments/public-submission.ts).
|
|
4974
|
+
after(() =>
|
|
4975
|
+
this.hooks
|
|
4976
|
+
.runCommentAfterCreate(event)
|
|
4977
|
+
.catch((error) =>
|
|
4978
|
+
console.error(
|
|
4979
|
+
"[comments] afterCreate error:",
|
|
4980
|
+
error instanceof Error ? error.message : error,
|
|
4981
|
+
),
|
|
4836
4982
|
),
|
|
4837
|
-
|
|
4983
|
+
);
|
|
4838
4984
|
},
|
|
4839
4985
|
fireAfterModerate: (event) => {
|
|
4840
4986
|
return this.hooks
|
|
@@ -5576,6 +5722,7 @@ export class EmDashRuntime {
|
|
|
5576
5722
|
const tools: Array<{
|
|
5577
5723
|
pluginId: string;
|
|
5578
5724
|
name: string;
|
|
5725
|
+
mcpName: string;
|
|
5579
5726
|
description: string;
|
|
5580
5727
|
route: string;
|
|
5581
5728
|
permission: string;
|
|
@@ -5604,6 +5751,7 @@ export class EmDashRuntime {
|
|
|
5604
5751
|
tools.push({
|
|
5605
5752
|
pluginId: plugin.id,
|
|
5606
5753
|
name,
|
|
5754
|
+
mcpName: pluginToolName(plugin.id, name),
|
|
5607
5755
|
description: tool.description,
|
|
5608
5756
|
route: tool.route,
|
|
5609
5757
|
permission: route.permission,
|
|
@@ -5634,12 +5782,17 @@ export class EmDashRuntime {
|
|
|
5634
5782
|
tools.push({
|
|
5635
5783
|
pluginId: id,
|
|
5636
5784
|
name: tool.name,
|
|
5785
|
+
mcpName: pluginToolName(id, tool.name),
|
|
5637
5786
|
description: tool.description,
|
|
5638
5787
|
route: tool.route,
|
|
5639
5788
|
permission: tool.permission,
|
|
5640
5789
|
destructive: tool.destructive,
|
|
5641
|
-
inputSchema:
|
|
5642
|
-
|
|
5790
|
+
inputSchema:
|
|
5791
|
+
safeJsonSchemaToZod({ ...tool.inputSchema }, `${id}/${tool.name}`, "input") ??
|
|
5792
|
+
z.record(z.string(), z.unknown()),
|
|
5793
|
+
outputSchema: tool.outputSchema
|
|
5794
|
+
? safeJsonSchemaToZod({ ...tool.outputSchema }, `${id}/${tool.name}`, "output")
|
|
5795
|
+
: undefined,
|
|
5643
5796
|
});
|
|
5644
5797
|
}
|
|
5645
5798
|
};
|
|
@@ -5785,7 +5938,9 @@ export class EmDashRuntime {
|
|
|
5785
5938
|
const draft = await new RevisionRepository(this.db)
|
|
5786
5939
|
.findById(existing.draftRevisionId)
|
|
5787
5940
|
.catch(() => null);
|
|
5788
|
-
|
|
5941
|
+
// A retired key may survive in the published row while the draft
|
|
5942
|
+
// revision has already shed it, so the baseline has to cover both.
|
|
5943
|
+
if (draft?.data) stored = { ...stored, ...draft.data };
|
|
5789
5944
|
}
|
|
5790
5945
|
|
|
5791
5946
|
const stale = staleStoredKeys(data, stored, knownFieldSlugs);
|
|
@@ -5993,6 +6148,16 @@ export class EmDashRuntime {
|
|
|
5993
6148
|
});
|
|
5994
6149
|
}
|
|
5995
6150
|
|
|
6151
|
+
private runMediaAfterUploadHook(mediaItem: MediaItem): void {
|
|
6152
|
+
after(async () => {
|
|
6153
|
+
try {
|
|
6154
|
+
await this.hooks.runMediaAfterUpload(mediaItem);
|
|
6155
|
+
} catch (err) {
|
|
6156
|
+
console.error("EmDash afterUpload hook error:", err);
|
|
6157
|
+
}
|
|
6158
|
+
});
|
|
6159
|
+
}
|
|
6160
|
+
|
|
5996
6161
|
private runDeferredContentHook(
|
|
5997
6162
|
name:
|
|
5998
6163
|
| "content:afterPublish"
|