emdash 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapters-C0ONzkUP.d.mts → adapters-BMyNSSZi.d.mts} +9 -1
- package/dist/adapters-BMyNSSZi.d.mts.map +1 -0
- package/dist/after-CBU2vkoO.mjs +96 -0
- package/dist/after-CBU2vkoO.mjs.map +1 -0
- package/dist/{allowed-origins-CCEi9bPI.mjs → allowed-origins-CG1pACtS.mjs} +2 -2
- package/dist/{allowed-origins-CCEi9bPI.mjs.map → allowed-origins-CG1pACtS.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -4
- package/dist/api/route-utils.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +22 -22
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/{api-DgPbMlng.mjs → api-D2hunekQ.mjs} +247 -45
- package/dist/api-D2hunekQ.mjs.map +1 -0
- package/dist/{api-tokens-p-iMzvXR.mjs → api-tokens-CSND0i1z.mjs} +2 -2
- package/dist/{api-tokens-p-iMzvXR.mjs.map → api-tokens-CSND0i1z.mjs.map} +1 -1
- package/dist/{apply-1_6ra7NP.mjs → apply-kwNEJW2l.mjs} +35 -22
- package/dist/apply-kwNEJW2l.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.mjs +13 -3
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +8 -8
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +8 -8
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.mjs +4 -4
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +10 -10
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +344 -173
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -7
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -7
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +10 -10
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +10 -10
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +10 -10
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -18
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -18
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -18
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -12
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +12 -12
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +46 -45
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +46 -45
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +45 -44
- 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 +45 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +45 -44
- 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 +46 -45
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +46 -45
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +45 -44
- 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 +3 -3
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +45 -44
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -8
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/index.mjs +7 -7
- package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -12
- package/dist/astro/routes/api/auth/invite/index.mjs +10 -10
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -11
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +12 -12
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +8 -8
- package/dist/astro/routes/api/auth/mode.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +7 -7
- package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +13 -13
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/request.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +18 -18
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -16
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/index.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs +8 -8
- package/dist/astro/routes/api/dashboard.mjs +9 -9
- package/dist/astro/routes/api/dev/emails.mjs +3 -3
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +4 -4
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -15
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +10 -10
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -27
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.mjs +42 -42
- package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -10
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +14 -14
- package/dist/astro/routes/api/media/_id_.mjs +13 -13
- package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
- package/dist/astro/routes/api/media/providers/index.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.mjs +9 -9
- package/dist/astro/routes/api/media.mjs +13 -13
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/translations.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_.mjs +11 -11
- package/dist/astro/routes/api/menus/index.mjs +11 -11
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +3 -3
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +36 -5
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +5 -5
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -12
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -12
- package/dist/astro/routes/api/redirects/_id_.mjs +14 -13
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +14 -13
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +18 -18
- package/dist/astro/routes/api/relations/_id_/translations.mjs +13 -13
- package/dist/astro/routes/api/relations/index.mjs +18 -18
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +4 -4
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +45 -44
- 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 +45 -44
- 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 +45 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +45 -44
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +45 -44
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.d.mts +8 -0
- package/dist/astro/routes/api/schema/collections/reorder.d.mts.map +1 -0
- package/dist/astro/routes/api/schema/collections/reorder.mjs +66 -0
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -0
- package/dist/astro/routes/api/schema/index.mjs +11 -9
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +45 -44
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +45 -44
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.d.mts +1 -0
- package/dist/astro/routes/api/search/enable.d.mts.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +17 -13
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +11 -11
- package/dist/astro/routes/api/search/rebuild.mjs +13 -13
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +11 -11
- package/dist/astro/routes/api/sections/_slug_.mjs +11 -11
- package/dist/astro/routes/api/sections/index.mjs +11 -11
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
- 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/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +16 -16
- package/dist/astro/routes/api/setup/admin-verify.mjs +13 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -12
- package/dist/astro/routes/api/setup/dev-bypass.mjs +30 -30
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +32 -32
- package/dist/astro/routes/api/setup/status.mjs +4 -4
- package/dist/astro/routes/api/snapshot.mjs +9 -9
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts +8 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +43 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -16
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -16
- package/dist/astro/routes/api/themes/preview.mjs +7 -7
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +11 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +11 -11
- package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/index.mjs +11 -11
- package/dist/astro/routes/api/widget-components.mjs +3 -3
- package/dist/astro/routes/robots.txt.mjs +9 -9
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +12 -12
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/types.d.mts +19 -13
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{authorize-R5iYYrpa.mjs → authorize-qRhWQnel.mjs} +2 -2
- package/dist/{authorize-R5iYYrpa.mjs.map → authorize-qRhWQnel.mjs.map} +1 -1
- package/dist/{backup-LpQ1V_sR.mjs → backup-CtA6LDNw.mjs} +5 -5
- package/dist/{backup-LpQ1V_sR.mjs.map → backup-CtA6LDNw.mjs.map} +1 -1
- package/dist/{byline-C5TAqs8N.mjs → byline-Cp6csL84.mjs} +9 -9
- package/dist/{byline-C5TAqs8N.mjs.map → byline-Cp6csL84.mjs.map} +1 -1
- package/dist/{byline-fields-T9ZLZMxJ.mjs → byline-fields-CNc0Yq5i.mjs} +2 -2
- package/dist/{byline-fields-T9ZLZMxJ.mjs.map → byline-fields-CNc0Yq5i.mjs.map} +1 -1
- package/dist/{byline-registry-BCuOp4UF.mjs → byline-registry-ZkPKqEwC.mjs} +4 -4
- package/dist/{byline-registry-BCuOp4UF.mjs.map → byline-registry-ZkPKqEwC.mjs.map} +1 -1
- package/dist/{bylines-B8-WGdja.mjs → bylines-CEj5CdT4.mjs} +7 -7
- package/dist/{bylines-B8-WGdja.mjs.map → bylines-CEj5CdT4.mjs.map} +1 -1
- package/dist/{bylines-DGuqBLjV.mjs → bylines-cf-C9lmF.mjs} +4 -4
- package/dist/{bylines-DGuqBLjV.mjs.map → bylines-cf-C9lmF.mjs.map} +1 -1
- package/dist/cache-C9FptTFR.mjs +108 -0
- package/dist/cache-C9FptTFR.mjs.map +1 -0
- package/dist/{challenge-store-BFzgFRog.mjs → challenge-store-D9VNKELo.mjs} +1 -1
- package/dist/{challenge-store-BFzgFRog.mjs.map → challenge-store-D9VNKELo.mjs.map} +1 -1
- package/dist/{chunks-D5dlPeRb.mjs → chunks-DbYzib_k.mjs} +2 -2
- package/dist/{chunks-D5dlPeRb.mjs.map → chunks-DbYzib_k.mjs.map} +1 -1
- package/dist/cli/index.mjs +40 -32
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -2
- package/dist/{comment-DnTxxVHv.mjs → comment-BIkJ6Fil.mjs} +3 -3
- package/dist/{comment-DnTxxVHv.mjs.map → comment-BIkJ6Fil.mjs.map} +1 -1
- package/dist/{comment-reaction-BUlUz2bh.mjs → comment-reaction-D-laEceb.mjs} +2 -2
- package/dist/{comment-reaction-BUlUz2bh.mjs.map → comment-reaction-D-laEceb.mjs.map} +1 -1
- package/dist/{comments-QPKgK3nk.mjs → comments-0_w6KChA.mjs} +3 -3
- package/dist/{comments-QPKgK3nk.mjs.map → comments-0_w6KChA.mjs.map} +1 -1
- package/dist/{components-DZkL4Fx0.mjs → components-BPxrRjpE.mjs} +1 -1
- package/dist/{components-DZkL4Fx0.mjs.map → components-BPxrRjpE.mjs.map} +1 -1
- package/dist/{content-CpfKV9QE.mjs → content-CJ94NEx5.mjs} +165 -112
- package/dist/content-CJ94NEx5.mjs.map +1 -0
- package/dist/{content-refresh-DgqUBeTv.mjs → content-refresh-Xw7aKmou.mjs} +6 -6
- package/dist/{content-refresh-DgqUBeTv.mjs.map → content-refresh-Xw7aKmou.mjs.map} +1 -1
- package/dist/{context-kO4YZB03.mjs → context-C_1nrqnW.mjs} +14 -14
- package/dist/{context-kO4YZB03.mjs.map → context-C_1nrqnW.mjs.map} +1 -1
- package/dist/{cron-BlKIMD_e.mjs → cron-DRV-UC4K.mjs} +1 -1
- package/dist/{cron-BlKIMD_e.mjs.map → cron-DRV-UC4K.mjs.map} +1 -1
- package/dist/{dashboard-DoBwPnON.mjs → dashboard-DINnNVVU.mjs} +5 -5
- package/dist/{dashboard-DoBwPnON.mjs.map → dashboard-DINnNVVU.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{default-C4v9KP56.mjs → default-BD2FG0xV.mjs} +1 -1
- package/dist/{default-C4v9KP56.mjs.map → default-BD2FG0xV.mjs.map} +1 -1
- package/dist/deferred-tasks-C-WRCcKo.d.mts +9 -0
- package/dist/deferred-tasks-C-WRCcKo.d.mts.map +1 -0
- package/dist/{device-flow-DhUsyJU6.mjs → device-flow-CTqd8mud.mjs} +5 -5
- package/dist/{device-flow-DhUsyJU6.mjs.map → device-flow-CTqd8mud.mjs.map} +1 -1
- package/dist/{dialect-helpers-DFwyWjTM.mjs → dialect-helpers-BSbfaO3F.mjs} +24 -16
- package/dist/dialect-helpers-BSbfaO3F.mjs.map +1 -0
- package/dist/{email-console-C-9Ng8DM.mjs → email-console-C6WdcWbL.mjs} +1 -1
- package/dist/{email-console-C-9Ng8DM.mjs.map → email-console-C6WdcWbL.mjs.map} +1 -1
- package/dist/{error-DmmN74gW.mjs → error-oh_9i6bR.mjs} +3 -3
- package/dist/{error-DmmN74gW.mjs.map → error-oh_9i6bR.mjs.map} +1 -1
- package/dist/{errors-DtEXIQQV.mjs → errors-BucQ8VYz.mjs} +2 -1
- package/dist/errors-BucQ8VYz.mjs.map +1 -0
- package/dist/{escape-CdW31WsG.mjs → escape-CXps5F_v.mjs} +1 -1
- package/dist/{escape-CdW31WsG.mjs.map → escape-CXps5F_v.mjs.map} +1 -1
- package/dist/{field-defs-cache-QMVnzTH6.mjs → field-defs-cache-WD82dMQq.mjs} +4 -4
- package/dist/{field-defs-cache-QMVnzTH6.mjs.map → field-defs-cache-WD82dMQq.mjs.map} +1 -1
- package/dist/{fts-manager-vncsZIJm.mjs → fts-manager-BITakW_R.mjs} +37 -13
- package/dist/fts-manager-BITakW_R.mjs.map +1 -0
- package/dist/{hash-Cb7U1b5M.mjs → hash-Cg0TXJPV.mjs} +1 -1
- package/dist/{hash-Cb7U1b5M.mjs.map → hash-Cg0TXJPV.mjs.map} +1 -1
- package/dist/{hreflang-CZbSx6Bg.d.mts → hreflang-BaLCNcDx.d.mts} +2 -2
- package/dist/{hreflang-CZbSx6Bg.d.mts.map → hreflang-BaLCNcDx.d.mts.map} +1 -1
- package/dist/{hreflang-Bg-zMpkr.mjs → hreflang-BdZuVBhL.mjs} +6 -6
- package/dist/{hreflang-Bg-zMpkr.mjs.map → hreflang-BdZuVBhL.mjs.map} +1 -1
- package/dist/{import-PKhLeXvn.mjs → import-C-9uqyT3.mjs} +6 -6
- package/dist/{import-PKhLeXvn.mjs.map → import-C-9uqyT3.mjs.map} +1 -1
- package/dist/{index-j9rTh3cp.d.mts → index-M37iz29I.d.mts} +75 -35
- package/dist/index-M37iz29I.d.mts.map +1 -0
- package/dist/{index-BeNto_Vs.d.mts → index-MGw47uWq.d.mts} +3 -3
- package/dist/{index-BeNto_Vs.d.mts.map → index-MGw47uWq.d.mts.map} +1 -1
- package/dist/index.d.mts +19 -19
- package/dist/index.mjs +68 -66
- package/dist/{load-BwTdWE8B.mjs → load-DV1DZuUJ.mjs} +2 -2
- package/dist/{load-BwTdWE8B.mjs.map → load-DV1DZuUJ.mjs.map} +1 -1
- package/dist/{loader-C1XOLV5b.mjs → loader-CGugY7Zl.mjs} +29 -15
- package/dist/loader-CGugY7Zl.mjs.map +1 -0
- package/dist/{manifest-schema-bCq54i7F.mjs → manifest-schema-Da7kj23y.mjs} +1 -1
- package/dist/{manifest-schema-bCq54i7F.mjs.map → manifest-schema-Da7kj23y.mjs.map} +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +8 -8
- package/dist/{media-tQDZEdu7.mjs → media-BP7S-nHT.mjs} +2 -2
- package/dist/{media-tQDZEdu7.mjs.map → media-BP7S-nHT.mjs.map} +1 -1
- package/dist/{media-DWIzoVFL.mjs → media-OhYL-7Io.mjs} +1 -1
- package/dist/{media-DWIzoVFL.mjs.map → media-OhYL-7Io.mjs.map} +1 -1
- package/dist/{media-allowlist-B7TPD6aq.mjs → media-allowlist-D-peH1H5.mjs} +1 -1
- package/dist/{media-allowlist-B7TPD6aq.mjs.map → media-allowlist-D-peH1H5.mjs.map} +1 -1
- package/dist/{media-upload-Bc9Nc5Zf.mjs → media-upload-DtrwU2B0.mjs} +7 -7
- package/dist/{media-upload-Bc9Nc5Zf.mjs.map → media-upload-DtrwU2B0.mjs.map} +1 -1
- package/dist/{media-url-BCm5vBn6.mjs → media-url-DYs_YLOx.mjs} +1 -1
- package/dist/{media-url-BCm5vBn6.mjs.map → media-url-DYs_YLOx.mjs.map} +1 -1
- package/dist/{media-usage-DPJcNaAq.mjs → media-usage-BlxfTkN0.mjs} +8 -8
- package/dist/{media-usage-DPJcNaAq.mjs.map → media-usage-BlxfTkN0.mjs.map} +1 -1
- package/dist/{menus-BxPLFfIc.mjs → menus-BcQWxeXu.mjs} +4 -4
- package/dist/{menus-BxPLFfIc.mjs.map → menus-BcQWxeXu.mjs.map} +1 -1
- package/dist/{menus-C6qhqP4X.mjs → menus-Y54RDPIN.mjs} +215 -38
- package/dist/menus-Y54RDPIN.mjs.map +1 -0
- package/dist/{mode-fiXRMfeA.mjs → mode-BWyTBe3I.mjs} +1 -1
- package/dist/{mode-fiXRMfeA.mjs.map → mode-BWyTBe3I.mjs.map} +1 -1
- package/dist/{oauth-authorization-C9tFinly.mjs → oauth-authorization-ClvktmrL.mjs} +5 -5
- package/dist/{oauth-authorization-C9tFinly.mjs.map → oauth-authorization-ClvktmrL.mjs.map} +1 -1
- package/dist/{oauth-clients-BwTxE1aE.mjs → oauth-clients-8ao-U66l.mjs} +1 -1
- package/dist/{oauth-clients-BwTxE1aE.mjs.map → oauth-clients-8ao-U66l.mjs.map} +1 -1
- package/dist/{oauth-state-store-DaRUwPWO.mjs → oauth-state-store-B1ofdTiQ.mjs} +1 -1
- package/dist/{oauth-state-store-DaRUwPWO.mjs.map → oauth-state-store-B1ofdTiQ.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CzuzOSlF.mjs → oauth-user-lookup-CscEuIiR.mjs} +1 -1
- package/dist/{oauth-user-lookup-CzuzOSlF.mjs.map → oauth-user-lookup-CscEuIiR.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-Bok5j2ae.mjs → object-cache-71tPfV4A.mjs} +106 -5
- package/dist/object-cache-71tPfV4A.mjs.map +1 -0
- package/dist/{options-aeIs8WFu.d.mts → options-CA4eVX6P.d.mts} +3 -3
- package/dist/{options-aeIs8WFu.d.mts.map → options-CA4eVX6P.d.mts.map} +1 -1
- package/dist/{options-BlmBHTvX.mjs → options-CBXIHUoT.mjs} +1 -1
- package/dist/{options-BlmBHTvX.mjs.map → options-CBXIHUoT.mjs.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-BL49yb9D.mjs → parse-CJKNuewM.mjs} +2 -2
- package/dist/{parse-BL49yb9D.mjs.map → parse-CJKNuewM.mjs.map} +1 -1
- package/dist/{passkey-config-KMhgFjdQ.mjs → passkey-config-D-zrzMJI.mjs} +1 -1
- package/dist/{passkey-config-KMhgFjdQ.mjs.map → passkey-config-D-zrzMJI.mjs.map} +1 -1
- package/dist/{placeholder-Dxo5Zt58.d.mts → placeholder-DaeNS-VG.d.mts} +1 -1
- package/dist/{placeholder-Dxo5Zt58.d.mts.map → placeholder-DaeNS-VG.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/{portable-text-CNahFfj6.mjs → portable-text-B_kqBmXB.mjs} +1 -1
- package/dist/{portable-text-CNahFfj6.mjs.map → portable-text-B_kqBmXB.mjs.map} +1 -1
- package/dist/{preview-D4Jnbfx7.mjs → preview-BU6PaLpM.mjs} +2 -2
- package/dist/{preview-D4Jnbfx7.mjs.map → preview-BU6PaLpM.mjs.map} +1 -1
- package/dist/{public-url-DSGTnJFw.mjs → public-url-Ox9oOlgp.mjs} +14 -3
- package/dist/public-url-Ox9oOlgp.mjs.map +1 -0
- package/dist/{query-DCiXI7OZ.mjs → query-C5w7PsRQ.mjs} +20 -41
- package/dist/query-C5w7PsRQ.mjs.map +1 -0
- package/dist/{query-1xOcEy18.mjs → query-rC9HKv1N.mjs} +4 -4
- package/dist/{query-1xOcEy18.mjs.map → query-rC9HKv1N.mjs.map} +1 -1
- package/dist/{rate-limit-Vkp9gQ1Y.mjs → rate-limit-kug6q99V.mjs} +2 -2
- package/dist/{rate-limit-Vkp9gQ1Y.mjs.map → rate-limit-kug6q99V.mjs.map} +1 -1
- package/dist/{redirect-BJ6d1yHh.mjs → redirect-DIJxXKOG.mjs} +3 -3
- package/dist/{redirect-BJ6d1yHh.mjs.map → redirect-DIJxXKOG.mjs.map} +1 -1
- package/dist/{redirect-CDgfv9vh.mjs → redirect-Egf2R9yP.mjs} +1 -1
- package/dist/{redirect-CDgfv9vh.mjs.map → redirect-Egf2R9yP.mjs.map} +1 -1
- package/dist/{redirects-Cwkq2H-G.mjs → redirects-Bzm812bY.mjs} +5 -5
- package/dist/{redirects-Cwkq2H-G.mjs.map → redirects-Bzm812bY.mjs.map} +1 -1
- package/dist/{redirects-BOn2DIUs.mjs → redirects-G8wAhWAf.mjs} +20 -6
- package/dist/redirects-G8wAhWAf.mjs.map +1 -0
- package/dist/{registry-BP1JK2xh.mjs → registry-Dbodb4Uo.mjs} +59 -14
- package/dist/registry-Dbodb4Uo.mjs.map +1 -0
- package/dist/{relation-DJ5DZh7B.mjs → relation-Cbe3Sd3m.mjs} +3 -3
- package/dist/{relation-DJ5DZh7B.mjs.map → relation-Cbe3Sd3m.mjs.map} +1 -1
- package/dist/{relations-C4duJnwI.mjs → relations-Bw_E1TXo.mjs} +3 -3
- package/dist/{relations-C4duJnwI.mjs.map → relations-Bw_E1TXo.mjs.map} +1 -1
- package/dist/{relations-DHFQGX0h.d.mts → relations-G2ta7GIl.d.mts} +36 -9
- package/dist/relations-G2ta7GIl.d.mts.map +1 -0
- package/dist/{relations-DpTjftCl.mjs → relations-qHwpUe66.mjs} +5 -5
- package/dist/{relations-DpTjftCl.mjs.map → relations-qHwpUe66.mjs.map} +1 -1
- package/dist/request-context.d.mts +3 -0
- package/dist/request-context.d.mts.map +1 -1
- package/dist/request-context.mjs.map +1 -1
- package/dist/{request-meta-DzXYYI-n.mjs → request-meta-Df-jFbAd.mjs} +2 -2
- package/dist/{request-meta-DzXYYI-n.mjs.map → request-meta-Df-jFbAd.mjs.map} +1 -1
- package/dist/{resolve-BUvFE0Lr.mjs → resolve-DZzG4HqM.mjs} +1 -1
- package/dist/{resolve-BUvFE0Lr.mjs.map → resolve-DZzG4HqM.mjs.map} +1 -1
- package/dist/{runner-BsI18UgP.mjs → runner-BFTrkYhu.mjs} +482 -216
- package/dist/runner-BFTrkYhu.mjs.map +1 -0
- package/dist/{runner-CHdkERbt.d.mts → runner-BaADli8l.d.mts} +2 -2
- package/dist/{runner-CHdkERbt.d.mts.map → runner-BaADli8l.d.mts.map} +1 -1
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +3 -3
- package/dist/{schema-eqZhkR0S.mjs → schema-CiQXr6_F.mjs} +3 -3
- package/dist/{schema-eqZhkR0S.mjs.map → schema-CiQXr6_F.mjs.map} +1 -1
- package/dist/{scopes-Be2d8bSb.mjs → scopes-CNJVT5i5.mjs} +3 -3
- package/dist/{scopes-Be2d8bSb.mjs.map → scopes-CNJVT5i5.mjs.map} +1 -1
- package/dist/{search-CeO678cp.mjs → search-FZhx5dDU.mjs} +6 -6
- package/dist/{search-CeO678cp.mjs.map → search-FZhx5dDU.mjs.map} +1 -1
- package/dist/{secrets-870d-7yA.mjs → secrets-DLd8RXee.mjs} +4 -4
- package/dist/{secrets-870d-7yA.mjs.map → secrets-DLd8RXee.mjs.map} +1 -1
- package/dist/{sections-DSuEfirn.mjs → sections-BrIrMUCn.mjs} +3 -3
- package/dist/{sections-DSuEfirn.mjs.map → sections-BrIrMUCn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +24 -24
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +17 -17
- package/dist/{seo-C3GDfT0V.mjs → seo-CobNfOvb.mjs} +2 -2
- package/dist/{seo-C3GDfT0V.mjs.map → seo-CobNfOvb.mjs.map} +1 -1
- package/dist/{seo-BAPKiED8.mjs → seo-DTHRntNC.mjs} +3 -3
- package/dist/{seo-BAPKiED8.mjs.map → seo-DTHRntNC.mjs.map} +1 -1
- package/dist/{service-DyFT-k-R.mjs → service-B-pYGPgR.mjs} +4 -4
- package/dist/{service-DyFT-k-R.mjs.map → service-B-pYGPgR.mjs.map} +1 -1
- package/dist/{session-user-BrK2zz7S.mjs → session-user-BvM9-zNl.mjs} +2 -2
- package/dist/{session-user-BrK2zz7S.mjs.map → session-user-BvM9-zNl.mjs.map} +1 -1
- package/dist/{settings-CREKyj8I.mjs → settings-DPHau-WH.mjs} +3 -3
- package/dist/{settings-CREKyj8I.mjs.map → settings-DPHau-WH.mjs.map} +1 -1
- package/dist/{settings-DgKouY2S.mjs → settings-kJhGiQ4z.mjs} +7 -7
- package/dist/{settings-DgKouY2S.mjs.map → settings-kJhGiQ4z.mjs.map} +1 -1
- package/dist/{setup-complete-L7bMK2VI.mjs → setup-complete-u50Qm8rY.mjs} +2 -2
- package/dist/{setup-complete-L7bMK2VI.mjs.map → setup-complete-u50Qm8rY.mjs.map} +1 -1
- package/dist/{setup-nonce-Ct5tjWcq.mjs → setup-nonce-DCjiiOD2.mjs} +1 -1
- package/dist/{setup-nonce-Ct5tjWcq.mjs.map → setup-nonce-DCjiiOD2.mjs.map} +1 -1
- package/dist/{single-flight-cache-C2exrGAi.mjs → single-flight-cache-DW3w11Pu.mjs} +1 -1
- package/dist/{single-flight-cache-C2exrGAi.mjs.map → single-flight-cache-DW3w11Pu.mjs.map} +1 -1
- package/dist/site-url-I-lJ5kma.mjs +16 -0
- package/dist/site-url-I-lJ5kma.mjs.map +1 -0
- package/dist/{snapshot-BdpUJKD-.mjs → snapshot-I_fjLDaD.mjs} +2 -2
- package/dist/{snapshot-BdpUJKD-.mjs.map → snapshot-I_fjLDaD.mjs.map} +1 -1
- package/dist/{ssrf-CviKqWmq.mjs → ssrf-CTa6v21i.mjs} +1 -1
- package/dist/{ssrf-CviKqWmq.mjs.map → ssrf-CTa6v21i.mjs.map} +1 -1
- package/dist/{state-xxv6ZTMv.mjs → state-CQvoefYP.mjs} +1 -1
- package/dist/{state-xxv6ZTMv.mjs.map → state-CQvoefYP.mjs.map} +1 -1
- package/dist/{status-COfycGIU.mjs → status-CIsmlC1E.mjs} +1 -1
- package/dist/{status-COfycGIU.mjs.map → status-CIsmlC1E.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-Dbdki3Un.mjs → taxonomies-CKuaZER5.mjs} +85 -5
- package/dist/taxonomies-CKuaZER5.mjs.map +1 -0
- package/dist/{taxonomies-B61CRSha.mjs → taxonomies-CLN1N92E.mjs} +16 -17
- package/dist/taxonomies-CLN1N92E.mjs.map +1 -0
- package/dist/{taxonomy-DvwWAPvA.mjs → taxonomy-pOrB2kZe.mjs} +142 -15
- package/dist/taxonomy-pOrB2kZe.mjs.map +1 -0
- package/dist/{tokens-DVltpO2D.mjs → tokens-DagaJGK8.mjs} +1 -1
- package/dist/{tokens-DVltpO2D.mjs.map → tokens-DagaJGK8.mjs.map} +1 -1
- package/dist/{transaction-D0FOsb3X.mjs → transaction-NQj4VJ7Z.mjs} +1 -1
- package/dist/{transaction-D0FOsb3X.mjs.map → transaction-NQj4VJ7Z.mjs.map} +1 -1
- package/dist/{transport-DokJOScS.d.mts → transport-CAwTaTp_.d.mts} +1 -1
- package/dist/{transport-DokJOScS.d.mts.map → transport-CAwTaTp_.d.mts.map} +1 -1
- package/dist/{transport-BWQo0Foy.mjs → transport-DVsa5YYo.mjs} +1 -1
- package/dist/{transport-BWQo0Foy.mjs.map → transport-DVsa5YYo.mjs.map} +1 -1
- package/dist/{trusted-proxy-CwjQj0YG.mjs → trusted-proxy-D20_7fyX.mjs} +1 -1
- package/dist/{trusted-proxy-CwjQj0YG.mjs.map → trusted-proxy-D20_7fyX.mjs.map} +1 -1
- package/dist/{types-DqZVPILm.d.mts → types-BGWPMiBO.d.mts} +2 -2
- package/dist/{types-DqZVPILm.d.mts.map → types-BGWPMiBO.d.mts.map} +1 -1
- package/dist/{types-DsAMyD_o.d.mts → types-BK6U01Ro.d.mts} +1 -1
- package/dist/{types-DsAMyD_o.d.mts.map → types-BK6U01Ro.d.mts.map} +1 -1
- package/dist/{types-BD40g7zz.mjs → types-BjxTKxrZ.mjs} +1 -1
- package/dist/{types-BD40g7zz.mjs.map → types-BjxTKxrZ.mjs.map} +1 -1
- package/dist/{types-jISEalTX.d.mts → types-BnFP1M3J.d.mts} +22 -1
- package/dist/types-BnFP1M3J.d.mts.map +1 -0
- package/dist/{types-Dr2GLlwu.d.mts → types-C8oz_ayJ.d.mts} +1 -1
- package/dist/{types-Dr2GLlwu.d.mts.map → types-C8oz_ayJ.d.mts.map} +1 -1
- package/dist/{types-C9P3ysxq.d.mts → types-CbUcuxxc.d.mts} +1 -1
- package/dist/{types-C9P3ysxq.d.mts.map → types-CbUcuxxc.d.mts.map} +1 -1
- package/dist/{types-XrQQ-Aex.mjs → types-Cd8iuS1J.mjs} +10 -3
- package/dist/{types-XrQQ-Aex.mjs.map → types-Cd8iuS1J.mjs.map} +1 -1
- package/dist/types-CtzytVXn.mjs +18 -0
- package/dist/types-CtzytVXn.mjs.map +1 -0
- package/dist/{types-BQY7VYw6.d.mts → types-Cz8hNch2.d.mts} +5 -5
- package/dist/{types-BQY7VYw6.d.mts.map → types-Cz8hNch2.d.mts.map} +1 -1
- package/dist/{types-CcSZCcF1.d.mts → types-DLG4IFEQ.d.mts} +1 -1
- package/dist/{types-CcSZCcF1.d.mts.map → types-DLG4IFEQ.d.mts.map} +1 -1
- package/dist/{types-84Bque3-.d.mts → types-Dc4ntQjQ.d.mts} +10 -1
- package/dist/types-Dc4ntQjQ.d.mts.map +1 -0
- package/dist/{types-DQLZ58GV.d.mts → types-LoagAGzH.d.mts} +1 -1
- package/dist/{types-DQLZ58GV.d.mts.map → types-LoagAGzH.d.mts.map} +1 -1
- package/dist/{types-o7xo7VgH.mjs → types-NBI3rF-_.mjs} +3 -2
- package/dist/types-NBI3rF-_.mjs.map +1 -0
- package/dist/{upload-attempts-C5yd6Gae.mjs → upload-attempts-D8QAFLUJ.mjs} +1 -1
- package/dist/{upload-attempts-C5yd6Gae.mjs.map → upload-attempts-D8QAFLUJ.mjs.map} +1 -1
- package/dist/{user-BAumEmpA.mjs → user-DBrq4UVq.mjs} +3 -3
- package/dist/{user-BAumEmpA.mjs.map → user-DBrq4UVq.mjs.map} +1 -1
- package/dist/{utils-BbUgmeZG.mjs → utils-hLzi_2Fn.mjs} +2 -2
- package/dist/{utils-BbUgmeZG.mjs.map → utils-hLzi_2Fn.mjs.map} +1 -1
- package/dist/{validate-VPnKoIzW.mjs → validate-BpwoDOgt.mjs} +25 -2
- package/dist/validate-BpwoDOgt.mjs.map +1 -0
- package/dist/{validate-CdYcY-Ln.d.mts → validate-C3oSmA7F.d.mts} +15 -5
- package/dist/validate-C3oSmA7F.d.mts.map +1 -0
- package/dist/{validate-Bs_wT2ul.mjs → validate-mKo3RxBM.mjs} +3 -3
- package/dist/{validate-Bs_wT2ul.mjs.map → validate-mKo3RxBM.mjs.map} +1 -1
- package/dist/{validation-BngR0nit.mjs → validation-BgpucsvF.mjs} +10 -10
- package/dist/{validation-BngR0nit.mjs.map → validation-BgpucsvF.mjs.map} +1 -1
- package/dist/version-C4PnpmoV.mjs +7 -0
- package/dist/{version-Bdfb34kk.mjs.map → version-C4PnpmoV.mjs.map} +1 -1
- package/dist/{widgets-L-VndTKD.mjs → widgets-CJJtkiKh.mjs} +3 -3
- package/dist/{widgets-L-VndTKD.mjs.map → widgets-CJJtkiKh.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-BexjtNid.mjs → wxr-taxonomies-9PPSy8X6.mjs} +4 -4
- package/dist/{wxr-taxonomies-BexjtNid.mjs.map → wxr-taxonomies-9PPSy8X6.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-DueaLFd9.d.mts → wxr-taxonomies-Bkpp_2tK.d.mts} +1 -1
- package/dist/{wxr-taxonomies-DueaLFd9.d.mts.map → wxr-taxonomies-Bkpp_2tK.d.mts.map} +1 -1
- package/dist/{zod-generator-DMzfga3g.mjs → zod-generator-CG64Hnbh.mjs} +3 -3
- package/dist/{zod-generator-DMzfga3g.mjs.map → zod-generator-CG64Hnbh.mjs.map} +1 -1
- package/package.json +11 -8
- package/src/after.ts +6 -1
- package/src/api/errors.ts +1 -0
- package/src/api/handlers/content.ts +45 -4
- package/src/api/handlers/marketplace.ts +14 -0
- package/src/api/handlers/registry.ts +14 -0
- package/src/api/handlers/revision.ts +19 -5
- package/src/api/handlers/schema.ts +37 -0
- package/src/api/handlers/snapshot.ts +1 -1
- package/src/api/handlers/taxonomies.ts +101 -1
- package/src/api/openapi/document.ts +48 -0
- package/src/api/public-url.ts +14 -2
- package/src/api/schemas/schema.ts +13 -0
- package/src/api/schemas/search.ts +2 -0
- package/src/api/schemas/taxonomies.ts +18 -0
- package/src/api/site-url.ts +16 -6
- package/src/astro/integration/routes.ts +14 -0
- package/src/astro/integration/runtime.ts +13 -0
- package/src/astro/integration/virtual-modules.ts +2 -0
- package/src/astro/middleware/redirect.ts +2 -10
- package/src/astro/middleware/scoped-db.ts +35 -4
- package/src/astro/middleware.ts +56 -22
- package/src/astro/routes/api/admin/comments/[id]/status.ts +1 -1
- package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +2 -2
- package/src/astro/routes/api/auth/invite/index.ts +2 -2
- package/src/astro/routes/api/auth/magic-link/send.ts +2 -2
- package/src/astro/routes/api/auth/signup/request.ts +2 -2
- package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +1 -1
- package/src/astro/routes/api/schema/collections/reorder.ts +31 -0
- package/src/astro/routes/api/schema/index.ts +2 -0
- package/src/astro/routes/api/search/enable.ts +5 -1
- package/src/astro/routes/api/search/rebuild.ts +6 -1
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +41 -0
- package/src/astro/types.ts +6 -0
- package/src/cleanup.ts +31 -26
- package/src/cli/commands/dev.ts +13 -3
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/cli/index.ts +1 -1
- package/src/components/CommentForm.astro +1 -1
- package/src/components/Comments.astro +1 -1
- package/src/components/InlinePortableTextEditor.tsx +171 -31
- package/src/components/OrderedList.astro +14 -0
- package/src/components/PortableText.astro +26 -4
- package/src/components/index.ts +12 -1
- package/src/components/ordered-list.ts +549 -0
- package/src/content/converters/numbered-list.ts +148 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +59 -9
- package/src/content/converters/prosemirror-to-portable-text.ts +23 -12
- package/src/content/converters/types.ts +2 -0
- package/src/content/portable-text-lists.ts +205 -0
- package/src/database/dialect-helpers.ts +3 -22
- package/src/database/migrations/055_content_translation_group_locale_index.ts +67 -0
- package/src/database/migrations/056_taxonomy_term_sort_order.ts +189 -0
- package/src/database/migrations/057_collection_hidden.ts +24 -0
- package/src/database/migrations/058_collection_sort_order.ts +20 -0
- package/src/database/migrations/059_revision_prune_queue.ts +36 -0
- package/src/database/migrations/runner.ts +10 -0
- package/src/database/repositories/content.ts +191 -178
- package/src/database/repositories/revision.ts +82 -17
- package/src/database/repositories/taxonomy.ts +202 -7
- package/src/database/repositories/types.ts +7 -0
- package/src/database/types.ts +13 -1
- package/src/database/validate.ts +39 -0
- package/src/db/adapters.ts +8 -0
- package/src/deferred-tasks.ts +71 -0
- package/src/emdash-runtime.ts +268 -92
- package/src/index.ts +2 -0
- package/src/loader.ts +46 -24
- package/src/media/usage/gc.ts +50 -0
- package/src/object-cache/index.ts +160 -3
- package/src/plugins/routes.ts +34 -0
- package/src/plugins/storage-indexes.ts +50 -11
- package/src/query.ts +21 -42
- package/src/redirects/cache.ts +79 -19
- package/src/request-context.ts +3 -0
- package/src/scheduled-publish.ts +6 -1
- package/src/schema/registry.ts +95 -3
- package/src/schema/types.ts +24 -0
- package/src/search/fts-manager.ts +50 -10
- package/src/search/index.ts +2 -0
- package/src/search/types.ts +6 -0
- package/src/seed/apply.ts +22 -2
- package/src/seed/types.ts +10 -0
- package/src/taxonomies/index.ts +11 -7
- package/src/taxonomies/term-counts.ts +2 -4
- package/src/ui-comments.ts +19 -0
- package/src/ui.ts +11 -3
- package/src/virtual-modules.d.ts +8 -0
- package/dist/adapters-C0ONzkUP.d.mts.map +0 -1
- package/dist/after-B1IIdH3Y.mjs +0 -29
- package/dist/after-B1IIdH3Y.mjs.map +0 -1
- package/dist/api-DgPbMlng.mjs.map +0 -1
- package/dist/apply-1_6ra7NP.mjs.map +0 -1
- package/dist/cache-B26cufFd.mjs +0 -65
- package/dist/cache-B26cufFd.mjs.map +0 -1
- package/dist/content-CpfKV9QE.mjs.map +0 -1
- package/dist/dialect-helpers-DFwyWjTM.mjs.map +0 -1
- package/dist/errors-DtEXIQQV.mjs.map +0 -1
- package/dist/fts-manager-vncsZIJm.mjs.map +0 -1
- package/dist/index-j9rTh3cp.d.mts.map +0 -1
- package/dist/loader-C1XOLV5b.mjs.map +0 -1
- package/dist/menus-C6qhqP4X.mjs.map +0 -1
- package/dist/object-cache-Bok5j2ae.mjs.map +0 -1
- package/dist/public-url-DSGTnJFw.mjs.map +0 -1
- package/dist/query-DCiXI7OZ.mjs.map +0 -1
- package/dist/redirects-BOn2DIUs.mjs.map +0 -1
- package/dist/registry-BP1JK2xh.mjs.map +0 -1
- package/dist/relations-DHFQGX0h.d.mts.map +0 -1
- package/dist/runner-BsI18UgP.mjs.map +0 -1
- package/dist/site-url-8N3kSyVZ.mjs +0 -13
- package/dist/site-url-8N3kSyVZ.mjs.map +0 -1
- package/dist/taxonomies-B61CRSha.mjs.map +0 -1
- package/dist/taxonomies-Dbdki3Un.mjs.map +0 -1
- package/dist/taxonomy-DvwWAPvA.mjs.map +0 -1
- package/dist/types-84Bque3-.d.mts.map +0 -1
- package/dist/types-jISEalTX.d.mts.map +0 -1
- package/dist/types-o7xo7VgH.mjs.map +0 -1
- package/dist/validate-CdYcY-Ln.d.mts.map +0 -1
- package/dist/validate-VPnKoIzW.mjs.map +0 -1
- package/dist/version-Bdfb34kk.mjs +0 -7
- /package/dist/{api-tokens-CEsW_jCg.mjs → api-tokens-Dai9dND0.mjs} +0 -0
- /package/dist/{ssrf-BB__xfNM.mjs → ssrf-Cj568Dgs.mjs} +0 -0
- /package/dist/{types-CK0LxPUQ.mjs → types-DKuWPYV5.mjs} +0 -0
|
@@ -88,6 +88,7 @@ import {
|
|
|
88
88
|
createCollectionBody,
|
|
89
89
|
createFieldBody,
|
|
90
90
|
fieldListResponseSchema,
|
|
91
|
+
collectionReorderBody,
|
|
91
92
|
fieldReorderBody,
|
|
92
93
|
fieldResponseSchema,
|
|
93
94
|
orphanedTableListResponseSchema,
|
|
@@ -112,10 +113,12 @@ import {
|
|
|
112
113
|
import { settingsUpdateBody, siteSettingsSchema } from "../schemas/settings.js";
|
|
113
114
|
import {
|
|
114
115
|
createTermBody,
|
|
116
|
+
reorderTermsBody,
|
|
115
117
|
taxonomyListResponseSchema,
|
|
116
118
|
termGetResponseSchema,
|
|
117
119
|
termListQuery,
|
|
118
120
|
termListResponseSchema,
|
|
121
|
+
termReorderResponseSchema,
|
|
119
122
|
termResponseSchema,
|
|
120
123
|
updateTermBody,
|
|
121
124
|
} from "../schemas/taxonomies.js";
|
|
@@ -1062,6 +1065,28 @@ const schemaPaths = {
|
|
|
1062
1065
|
},
|
|
1063
1066
|
},
|
|
1064
1067
|
},
|
|
1068
|
+
"/_emdash/api/schema/collections/reorder": {
|
|
1069
|
+
post: {
|
|
1070
|
+
operationId: "reorderCollections",
|
|
1071
|
+
summary: "Reorder collections in the admin sidebar",
|
|
1072
|
+
description:
|
|
1073
|
+
"Sets the sidebar order. Collections omitted from the list lose their explicit position and fall back to alphabetical order after the ordered ones.",
|
|
1074
|
+
tags: ["Schema"],
|
|
1075
|
+
requestBody: { content: { [JSON_CONTENT]: { schema: collectionReorderBody } } },
|
|
1076
|
+
responses: {
|
|
1077
|
+
"200": {
|
|
1078
|
+
description: "Reordered",
|
|
1079
|
+
content: {
|
|
1080
|
+
[JSON_CONTENT]: {
|
|
1081
|
+
schema: successEnvelope(z.object({ success: z.literal(true) })),
|
|
1082
|
+
},
|
|
1083
|
+
},
|
|
1084
|
+
},
|
|
1085
|
+
...authErrors,
|
|
1086
|
+
...standardErrors(400, 404, 500),
|
|
1087
|
+
},
|
|
1088
|
+
},
|
|
1089
|
+
},
|
|
1065
1090
|
"/_emdash/api/schema/collections/{slug}/fields/reorder": {
|
|
1066
1091
|
post: {
|
|
1067
1092
|
operationId: "reorderFields",
|
|
@@ -1320,6 +1345,29 @@ const taxonomyPaths = {
|
|
|
1320
1345
|
},
|
|
1321
1346
|
},
|
|
1322
1347
|
},
|
|
1348
|
+
"/_emdash/api/taxonomies/{name}/reorder": {
|
|
1349
|
+
post: {
|
|
1350
|
+
operationId: "reorderTerms",
|
|
1351
|
+
summary: "Set the manual order of one sibling group of terms",
|
|
1352
|
+
description:
|
|
1353
|
+
"`ids` names the terms to move, in the desired order, and may be a subset of the group — the listed terms are permuted within the positions they already occupy. A position belongs to a term across every locale, so there is no `locale` parameter. Ordering never reparents — use the term update endpoint to change a parent.",
|
|
1354
|
+
tags: ["Taxonomies"],
|
|
1355
|
+
requestParams: {
|
|
1356
|
+
path: z.object({ name: z.string().meta({ description: "Taxonomy name" }) }),
|
|
1357
|
+
},
|
|
1358
|
+
requestBody: { content: { [JSON_CONTENT]: { schema: reorderTermsBody } } },
|
|
1359
|
+
responses: {
|
|
1360
|
+
"200": {
|
|
1361
|
+
description: "The group in its new order",
|
|
1362
|
+
content: {
|
|
1363
|
+
[JSON_CONTENT]: { schema: successEnvelope(termReorderResponseSchema) },
|
|
1364
|
+
},
|
|
1365
|
+
},
|
|
1366
|
+
...authErrors,
|
|
1367
|
+
...standardErrors(400, 404, 500),
|
|
1368
|
+
},
|
|
1369
|
+
},
|
|
1370
|
+
},
|
|
1323
1371
|
"/_emdash/api/taxonomies/{name}/terms": {
|
|
1324
1372
|
get: {
|
|
1325
1373
|
operationId: "listTerms",
|
package/src/api/public-url.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/** Minimal config shape — avoids importing the full EmDashConfig type tree. */
|
|
13
|
-
interface SiteUrlConfig {
|
|
13
|
+
export interface SiteUrlConfig {
|
|
14
14
|
siteUrl?: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -74,7 +74,19 @@ function getEnvSiteUrl(): string | undefined {
|
|
|
74
74
|
* @returns Origin string, e.g. `"https://mysite.example.com"`
|
|
75
75
|
*/
|
|
76
76
|
export function getPublicOrigin(url: URL, config?: SiteUrlConfig): string {
|
|
77
|
-
return config
|
|
77
|
+
return getConfiguredOrigin(config) || url.origin;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Return the operator-configured public origin, if any.
|
|
82
|
+
*
|
|
83
|
+
* The first two steps of {@link getPublicOrigin}'s resolution —
|
|
84
|
+
* `config.siteUrl`, then the `EMDASH_SITE_URL`/`SITE_URL` env vars — without
|
|
85
|
+
* the request-URL fallback. For callers that have a more trustworthy fallback
|
|
86
|
+
* than the request (e.g. the stored setup origin used for outbound emails).
|
|
87
|
+
*/
|
|
88
|
+
export function getConfiguredOrigin(config?: SiteUrlConfig): string | undefined {
|
|
89
|
+
return config?.siteUrl || getEnvSiteUrl() || undefined;
|
|
78
90
|
}
|
|
79
91
|
|
|
80
92
|
/**
|
|
@@ -86,6 +86,8 @@ export const createCollectionBody = z
|
|
|
86
86
|
source: z.string().regex(collectionSourcePattern).optional(),
|
|
87
87
|
urlPattern: z.string().optional(),
|
|
88
88
|
hasSeo: z.boolean().optional(),
|
|
89
|
+
hidden: z.boolean().optional(),
|
|
90
|
+
sortOrder: z.number().int().nullish(),
|
|
89
91
|
})
|
|
90
92
|
.meta({ id: "CreateCollectionBody" });
|
|
91
93
|
|
|
@@ -98,6 +100,8 @@ export const updateCollectionBody = z
|
|
|
98
100
|
supports: z.array(collectionSupportValues).optional(),
|
|
99
101
|
urlPattern: z.string().nullish(),
|
|
100
102
|
hasSeo: z.boolean().optional(),
|
|
103
|
+
hidden: z.boolean().optional(),
|
|
104
|
+
sortOrder: z.number().int().nullish(),
|
|
101
105
|
commentsEnabled: z.boolean().optional(),
|
|
102
106
|
commentsModeration: z.enum(["all", "first_time", "none"]).optional(),
|
|
103
107
|
commentsClosedAfterDays: z.number().int().min(0).optional(),
|
|
@@ -144,6 +148,13 @@ export const fieldReorderBody = z
|
|
|
144
148
|
})
|
|
145
149
|
.meta({ id: "FieldReorderBody" });
|
|
146
150
|
|
|
151
|
+
export const collectionReorderBody = z
|
|
152
|
+
.object({
|
|
153
|
+
/** Full desired sidebar order. Collections left out fall back to alphabetical. */
|
|
154
|
+
slugs: z.array(z.string().min(1)),
|
|
155
|
+
})
|
|
156
|
+
.meta({ id: "CollectionReorderBody" });
|
|
157
|
+
|
|
147
158
|
export const orphanRegisterBody = z
|
|
148
159
|
.object({
|
|
149
160
|
label: z.string().optional(),
|
|
@@ -179,6 +190,8 @@ export const collectionSchema = z
|
|
|
179
190
|
source: z.string().nullable(),
|
|
180
191
|
urlPattern: z.string().nullable(),
|
|
181
192
|
hasSeo: z.boolean(),
|
|
193
|
+
hidden: z.boolean(),
|
|
194
|
+
sortOrder: z.number().int().nullable(),
|
|
182
195
|
createdAt: z.string(),
|
|
183
196
|
updatedAt: z.string(),
|
|
184
197
|
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
+
import { SEARCH_TOKENIZERS } from "../../search/types.js";
|
|
3
4
|
import { localeCode } from "./common.js";
|
|
4
5
|
|
|
5
6
|
// ---------------------------------------------------------------------------
|
|
@@ -37,6 +38,7 @@ export const searchEnableBody = z
|
|
|
37
38
|
collection: z.string().min(1),
|
|
38
39
|
enabled: z.boolean(),
|
|
39
40
|
weights: z.record(z.string(), z.number()).optional(),
|
|
41
|
+
tokenize: z.enum(SEARCH_TOKENIZERS).optional(),
|
|
40
42
|
})
|
|
41
43
|
.meta({ id: "SearchEnableBody" });
|
|
42
44
|
|
|
@@ -55,6 +55,20 @@ export const updateTermBody = z
|
|
|
55
55
|
})
|
|
56
56
|
.meta({ id: "UpdateTermBody" });
|
|
57
57
|
|
|
58
|
+
export const reorderTermsBody = z
|
|
59
|
+
.object({
|
|
60
|
+
parentId: z.string().min(1).nullish().meta({
|
|
61
|
+
description:
|
|
62
|
+
"Parent term whose children are being ordered (translation_group or row id). Omit or null for the top level, which for a flat taxonomy is every term.",
|
|
63
|
+
}),
|
|
64
|
+
ids: z.array(z.string().min(1)).max(100).meta({
|
|
65
|
+
description:
|
|
66
|
+
"Terms to move, in the desired order — each a row id or translation_group. May be a subset of the group: the listed terms are permuted within the positions they already occupy and every other member keeps its place. An id outside the group is rejected with REORDER_MISMATCH.",
|
|
67
|
+
}),
|
|
68
|
+
})
|
|
69
|
+
.strict()
|
|
70
|
+
.meta({ id: "ReorderTermsBody" });
|
|
71
|
+
|
|
58
72
|
export const termListQuery = z
|
|
59
73
|
.object({
|
|
60
74
|
locale: localeCode.optional(),
|
|
@@ -153,6 +167,10 @@ export const termListResponseSchema = z
|
|
|
153
167
|
|
|
154
168
|
export const termResponseSchema = z.object({ term: termSchema }).meta({ id: "TermResponse" });
|
|
155
169
|
|
|
170
|
+
export const termReorderResponseSchema = z
|
|
171
|
+
.object({ reordered: z.literal(true) })
|
|
172
|
+
.meta({ id: "TermReorderResponse" });
|
|
173
|
+
|
|
156
174
|
export const termGetResponseSchema = z
|
|
157
175
|
.object({
|
|
158
176
|
term: termSchema.extend({
|
package/src/api/site-url.ts
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolve the canonical site base URL for use in outbound links (emails, etc.).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Precedence mirrors `getPublicOrigin`: the operator-configured origin
|
|
5
|
+
* (`config.siteUrl`, then the `EMDASH_SITE_URL`/`SITE_URL` env vars) wins,
|
|
6
|
+
* then the stored `emdash:site_url` option (written once during setup on the
|
|
7
|
+
* real domain), and only before setup completes does the request URL fill in.
|
|
8
|
+
* A configured or stored value always beats the request, so Host header
|
|
9
|
+
* spoofing cannot redirect users to attacker-controlled domains.
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
12
|
import type { Kysely } from "kysely";
|
|
12
13
|
|
|
13
14
|
import { OptionsRepository } from "../database/repositories/options.js";
|
|
14
15
|
import type { Database } from "../database/types.js";
|
|
16
|
+
import { getConfiguredOrigin, type SiteUrlConfig } from "./public-url.js";
|
|
15
17
|
|
|
16
|
-
export async function getSiteBaseUrl(
|
|
18
|
+
export async function getSiteBaseUrl(
|
|
19
|
+
db: Kysely<Database>,
|
|
20
|
+
request: Request,
|
|
21
|
+
config?: SiteUrlConfig,
|
|
22
|
+
): Promise<string> {
|
|
23
|
+
const configured = getConfiguredOrigin(config);
|
|
24
|
+
if (configured) {
|
|
25
|
+
return `${configured}/_emdash`;
|
|
26
|
+
}
|
|
17
27
|
const options = new OptionsRepository(db);
|
|
18
28
|
const storedUrl = await options.get<string>("emdash:site_url");
|
|
19
29
|
if (storedUrl) {
|
|
@@ -313,6 +313,15 @@ export function injectCoreRoutes(
|
|
|
313
313
|
entrypoint: resolveRoute("api/schema/collections/index.ts"),
|
|
314
314
|
});
|
|
315
315
|
|
|
316
|
+
// Order matters: the static `reorder` route must precede the dynamic
|
|
317
|
+
// `[slug]` route so Astro's resolver dispatches POST
|
|
318
|
+
// /schema/collections/reorder to the reorder handler instead of treating
|
|
319
|
+
// "reorder" as a collection slug.
|
|
320
|
+
injectRoute({
|
|
321
|
+
pattern: "/_emdash/api/schema/collections/reorder",
|
|
322
|
+
entrypoint: resolveRoute("api/schema/collections/reorder.ts"),
|
|
323
|
+
});
|
|
324
|
+
|
|
316
325
|
injectRoute({
|
|
317
326
|
pattern: "/_emdash/api/schema/collections/[slug]",
|
|
318
327
|
entrypoint: resolveRoute("api/schema/collections/[slug]/index.ts"),
|
|
@@ -389,6 +398,11 @@ export function injectCoreRoutes(
|
|
|
389
398
|
entrypoint: resolveRoute("api/taxonomies/index.ts"),
|
|
390
399
|
});
|
|
391
400
|
|
|
401
|
+
injectRoute({
|
|
402
|
+
pattern: "/_emdash/api/taxonomies/[name]/reorder",
|
|
403
|
+
entrypoint: resolveRoute("api/taxonomies/[name]/reorder.ts"),
|
|
404
|
+
});
|
|
405
|
+
|
|
392
406
|
injectRoute({
|
|
393
407
|
pattern: "/_emdash/api/taxonomies/[name]/terms",
|
|
394
408
|
entrypoint: resolveRoute("api/taxonomies/[name]/terms/index.ts"),
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* DO NOT import Node.js-only modules here (fs, path, module, etc.)
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import type { ManifestHookEntry, ManifestRouteEntry } from "@emdash-cms/plugin-types";
|
|
11
|
+
|
|
10
12
|
import type { AuthDescriptor, AuthProviderDescriptor } from "../../auth/types.js";
|
|
11
13
|
import type { DatabaseDescriptor } from "../../db/adapters.js";
|
|
12
14
|
import type { MediaProviderDescriptor } from "../../media/types.js";
|
|
@@ -137,6 +139,17 @@ export interface PluginDescriptor<TOptions = Record<string, unknown>> {
|
|
|
137
139
|
storage?: Record<string, StorageCollectionDeclaration>;
|
|
138
140
|
/** Serialized MCP declarations emitted by the plugin build. */
|
|
139
141
|
mcp?: PluginMcpManifestConfig;
|
|
142
|
+
/**
|
|
143
|
+
* Route declarations for sandboxed config-declared plugins. Mirrors
|
|
144
|
+
* definePlugin({ routes }) and drives route auth decisions; omitted routes
|
|
145
|
+
* default to non-public.
|
|
146
|
+
*/
|
|
147
|
+
routes?: Array<ManifestRouteEntry | string>;
|
|
148
|
+
/**
|
|
149
|
+
* Hook declarations for sandboxed config-declared plugins. Mirrors
|
|
150
|
+
* definePlugin({ hooks }).
|
|
151
|
+
*/
|
|
152
|
+
hooks?: Array<ManifestHookEntry | string>;
|
|
140
153
|
}
|
|
141
154
|
|
|
142
155
|
/**
|
|
@@ -673,6 +673,8 @@ export const sandboxedPlugins = [];
|
|
|
673
673
|
allowedHosts: ${JSON.stringify(descriptor.allowedHosts ?? [])},
|
|
674
674
|
storage: ${JSON.stringify(descriptor.storage ?? {})},
|
|
675
675
|
mcp: ${JSON.stringify(descriptor.mcp)},
|
|
676
|
+
routes: ${JSON.stringify(descriptor.routes ?? [])},
|
|
677
|
+
hooks: ${JSON.stringify(descriptor.hooks ?? [])},
|
|
676
678
|
adminPages: ${JSON.stringify(descriptor.adminPages ?? [])},
|
|
677
679
|
adminWidgets: ${JSON.stringify(descriptor.adminWidgets ?? [])},
|
|
678
680
|
settingsSchema: ${JSON.stringify(descriptor.settingsSchema)},
|
|
@@ -18,11 +18,7 @@ import { defineMiddleware } from "astro:middleware";
|
|
|
18
18
|
|
|
19
19
|
import { RedirectRepository } from "../../database/repositories/redirect.js";
|
|
20
20
|
import { getDb } from "../../loader.js";
|
|
21
|
-
import {
|
|
22
|
-
getCachedRedirects,
|
|
23
|
-
matchCachedPatterns,
|
|
24
|
-
setCachedRedirects,
|
|
25
|
-
} from "../../redirects/cache.js";
|
|
21
|
+
import { loadCachedRedirects, matchCachedPatterns } from "../../redirects/cache.js";
|
|
26
22
|
import { isTerminalStatus } from "../../redirects/status.js";
|
|
27
23
|
|
|
28
24
|
/** Paths that should never be intercepted by redirects */
|
|
@@ -68,11 +64,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
68
64
|
// One query loads both exact and pattern rules into the cache; warm
|
|
69
65
|
// requests issue zero queries. Empty-redirect sites cache an empty
|
|
70
66
|
// Map + array, so the next request returns immediately without probing.
|
|
71
|
-
|
|
72
|
-
if (!cached) {
|
|
73
|
-
const all = await repo.findAllEnabled();
|
|
74
|
-
cached = setCachedRedirects(all);
|
|
75
|
-
}
|
|
67
|
+
const cached = await loadCachedRedirects(() => repo.findAllEnabled());
|
|
76
68
|
|
|
77
69
|
// 1. Exact match (O(1) Map lookup)
|
|
78
70
|
let exact = cached.exact.get(pathname);
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* request-scoped db adapter's lifecycle around the response.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { createDeferredTaskTracker } from "../../deferred-tasks.js";
|
|
10
|
+
import type { DeferredTaskTracker } from "../../deferred-tasks.js";
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* Astro attaches AstroCookies to outgoing responses via a well-known global
|
|
11
14
|
* symbol. Cloning a Response (`new Response(body, init)`) drops non-header
|
|
@@ -16,6 +19,34 @@
|
|
|
16
19
|
*/
|
|
17
20
|
export const ASTRO_COOKIES_SYMBOL = Symbol.for("astro.cookies");
|
|
18
21
|
|
|
22
|
+
interface ScopedDbLifecycle {
|
|
23
|
+
commit: () => void;
|
|
24
|
+
close?: () => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Hold the real adapter close behind both response and deferred-task completion. */
|
|
28
|
+
export function coordinateScopedDbLifecycle(scoped: ScopedDbLifecycle): {
|
|
29
|
+
closed?: Promise<void>;
|
|
30
|
+
deferredTasks?: DeferredTaskTracker;
|
|
31
|
+
lifecycle: ScopedDbLifecycle;
|
|
32
|
+
} {
|
|
33
|
+
if (!scoped.close) return { lifecycle: scoped };
|
|
34
|
+
|
|
35
|
+
const close = scoped.close;
|
|
36
|
+
const deferredTasks = createDeferredTaskTracker(() => {
|
|
37
|
+
try {
|
|
38
|
+
close();
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error("[emdash] request-scoped db close failed:", error);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
closed: deferredTasks.settled,
|
|
45
|
+
deferredTasks,
|
|
46
|
+
lifecycle: { commit: scoped.commit, close: deferredTasks.settle },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
19
50
|
/**
|
|
20
51
|
* Run a request-scoped db's `close()` once the response body has finished
|
|
21
52
|
* streaming. Astro streams HTML and components issue DB queries during that
|
|
@@ -62,9 +93,9 @@ export function wrapResponseForScopedClose(response: Response, close: () => void
|
|
|
62
93
|
* Run the request body under a request-scoped db, then settle its lifecycle:
|
|
63
94
|
* `commit()` runs before the response is returned (so per-request state like a
|
|
64
95
|
* D1 bookmark cookie is persisted in the headers, even if render throws), while
|
|
65
|
-
* `close()` (if any) is deferred to
|
|
66
|
-
* isn't torn down mid-render. On error
|
|
67
|
-
* before rethrowing so it never leaks.
|
|
96
|
+
* `close()` (if any) is deferred to lifecycle settlement so a
|
|
97
|
+
* connection-backed adapter isn't torn down mid-render or mid-task. On error
|
|
98
|
+
* the lifecycle is settled before rethrowing so it never leaks.
|
|
68
99
|
*
|
|
69
100
|
* On the error path both `commit()` and `close()` are defended: a throw from
|
|
70
101
|
* either is logged and swallowed so it can't replace the propagating render
|
|
@@ -77,7 +108,7 @@ export function wrapResponseForScopedClose(response: Response, close: () => void
|
|
|
77
108
|
* or mask.
|
|
78
109
|
*/
|
|
79
110
|
export async function finishScoped(
|
|
80
|
-
scoped:
|
|
111
|
+
scoped: ScopedDbLifecycle,
|
|
81
112
|
run: () => Promise<Response>,
|
|
82
113
|
): Promise<Response> {
|
|
83
114
|
let response: Response;
|
package/src/astro/middleware.ts
CHANGED
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
import { setI18nConfig } from "../i18n/config.js";
|
|
48
48
|
import type { Database, Storage } from "../index.js";
|
|
49
49
|
import { createPublicMediaUrlResolver } from "../media/url.js";
|
|
50
|
+
import { getLastContentWriteAt } from "../object-cache/index.js";
|
|
50
51
|
import type { SandboxRunnerFactory } from "../plugins/sandbox/types.js";
|
|
51
52
|
import type { ResolvedPlugin } from "../plugins/types.js";
|
|
52
53
|
import { invalidateUrlPatternCache } from "../query.js";
|
|
@@ -60,7 +61,11 @@ import type { PublishedRef } from "../scheduled-publish.js";
|
|
|
60
61
|
import { isMissingTableError } from "../utils/db-errors.js";
|
|
61
62
|
import { createInitLock, type InitLock, initWithLock } from "../utils/init-lock.js";
|
|
62
63
|
import type { EmDashConfig } from "./integration/runtime.js";
|
|
63
|
-
import {
|
|
64
|
+
import {
|
|
65
|
+
ASTRO_COOKIES_SYMBOL,
|
|
66
|
+
coordinateScopedDbLifecycle,
|
|
67
|
+
finishScoped,
|
|
68
|
+
} from "./middleware/scoped-db.js";
|
|
64
69
|
import { wrapBodyForStreamMetrics } from "./middleware/stream-end-metrics.js";
|
|
65
70
|
import { prefetchLayoutData } from "./prefetch.js";
|
|
66
71
|
import { createPublicPluginApiRouteHandler } from "./public-plugin-api-routes.js";
|
|
@@ -352,6 +357,7 @@ async function runOutsideRequest<T>(
|
|
|
352
357
|
// Event handlers publish, clean up, or run jobs — a write workload —
|
|
353
358
|
// so a connection-backed adapter routes them to the primary.
|
|
354
359
|
isWrite: true,
|
|
360
|
+
canUseCachedBinding: false,
|
|
355
361
|
cookies: NOOP_COOKIE_JAR,
|
|
356
362
|
url: CRON_EVENT_URL,
|
|
357
363
|
});
|
|
@@ -360,26 +366,33 @@ async function runOutsideRequest<T>(
|
|
|
360
366
|
// outside a request. Any close-less scope created above is discarded.
|
|
361
367
|
return fn(runtime);
|
|
362
368
|
}
|
|
369
|
+
const { closed, deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);
|
|
363
370
|
|
|
364
371
|
const parent = getRequestContext();
|
|
365
372
|
const ctx = parent
|
|
366
|
-
? { ...parent, db: scoped.db }
|
|
367
|
-
: {
|
|
373
|
+
? { ...parent, db: scoped.db, deferredTasks }
|
|
374
|
+
: {
|
|
375
|
+
editMode: false,
|
|
376
|
+
db: scoped.db,
|
|
377
|
+
metrics: createRequestMetrics(performance.now()),
|
|
378
|
+
deferredTasks,
|
|
379
|
+
};
|
|
368
380
|
try {
|
|
369
381
|
return await runWithContext(ctx, () => fn(runtime));
|
|
370
382
|
} finally {
|
|
371
383
|
// Guard both so a throw in teardown can't mask the callback result or
|
|
372
|
-
// skip
|
|
384
|
+
// skip lifecycle settlement and leak the connection.
|
|
373
385
|
try {
|
|
374
|
-
|
|
386
|
+
lifecycle.commit();
|
|
375
387
|
} catch (error) {
|
|
376
388
|
console.error("[emdash] event-scoped db commit failed:", error);
|
|
377
389
|
}
|
|
378
390
|
try {
|
|
379
|
-
|
|
391
|
+
lifecycle.close?.();
|
|
380
392
|
} catch (error) {
|
|
381
393
|
console.error("[emdash] event-scoped db close failed:", error);
|
|
382
394
|
}
|
|
395
|
+
await closed;
|
|
383
396
|
}
|
|
384
397
|
}
|
|
385
398
|
|
|
@@ -561,6 +574,15 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
561
574
|
const hasBearerAuth = (request.headers.get("authorization") ?? "")
|
|
562
575
|
.toLowerCase()
|
|
563
576
|
.startsWith("bearer ");
|
|
577
|
+
const isWrite = request.method !== "GET" && request.method !== "HEAD";
|
|
578
|
+
const isAuthenticated = !!sessionUser || hasBearerAuth;
|
|
579
|
+
const canUseCachedBinding =
|
|
580
|
+
!isAuthenticated &&
|
|
581
|
+
!isWrite &&
|
|
582
|
+
!playgroundDb &&
|
|
583
|
+
!isEmDashRoute &&
|
|
584
|
+
!hasEditCookie &&
|
|
585
|
+
!hasPreviewToken;
|
|
564
586
|
|
|
565
587
|
if (!isEmDashRoute && !isPublicRuntimeRoute && !hasEditCookie && !hasPreviewToken) {
|
|
566
588
|
if (!sessionUser && !playgroundDb) {
|
|
@@ -647,12 +669,18 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
647
669
|
// Even on the anonymous fast path we ask the adapter for a per-request
|
|
648
670
|
// scoped db. For D1 with read replication this routes anonymous reads
|
|
649
671
|
// to the nearest replica; for other adapters it's a no-op.
|
|
672
|
+
const lastContentWriteAt =
|
|
673
|
+
canUseCachedBinding && config?.database?.needsLastContentWriteAt
|
|
674
|
+
? await getLastContentWriteAt()
|
|
675
|
+
: undefined;
|
|
650
676
|
const anonScoped = createRequestScopedDb({
|
|
651
677
|
config: config?.database?.config,
|
|
652
|
-
isAuthenticated
|
|
653
|
-
isWrite
|
|
678
|
+
isAuthenticated,
|
|
679
|
+
isWrite,
|
|
680
|
+
canUseCachedBinding,
|
|
654
681
|
cookies,
|
|
655
682
|
url,
|
|
683
|
+
lastContentWriteAt,
|
|
656
684
|
});
|
|
657
685
|
const runAnon = async () => {
|
|
658
686
|
const t0 = performance.now();
|
|
@@ -666,10 +694,11 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
666
694
|
return wrapBodyForStreamMetrics(finalizeResponse(response, timings));
|
|
667
695
|
};
|
|
668
696
|
if (anonScoped) {
|
|
697
|
+
const { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(anonScoped);
|
|
669
698
|
const parent = getRequestContext();
|
|
670
699
|
const ctx = parent
|
|
671
|
-
? { ...parent, db: anonScoped.db }
|
|
672
|
-
: { editMode: false, db: anonScoped.db, metrics };
|
|
700
|
+
? { ...parent, db: anonScoped.db, deferredTasks }
|
|
701
|
+
: { editMode: false, db: anonScoped.db, metrics, deferredTasks };
|
|
673
702
|
// Eagerly warm site-global layout data (menus, widget areas,
|
|
674
703
|
// taxonomy terms, settings) concurrently so the layout's
|
|
675
704
|
// per-component reads overlap into ~one wall-clock round trip and
|
|
@@ -678,10 +707,8 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
678
707
|
// pointless on synchronous local SQLite.
|
|
679
708
|
// - HTML navigations only -- feeds/sitemaps/JSON don't render the
|
|
680
709
|
// layout, so prefetching their chrome is pure waste.
|
|
681
|
-
// -
|
|
682
|
-
//
|
|
683
|
-
// given page doesn't render) is kept alive past the response rather
|
|
684
|
-
// than erroring on workerd as orphaned request I/O.
|
|
710
|
+
// - the work starts immediately, then after() keeps both it and the
|
|
711
|
+
// request-scoped connection alive until the response also finishes.
|
|
685
712
|
// Gate on the CLIENT'S PREFERRED type (leading media range), not a
|
|
686
713
|
// substring -- browser navigations lead with `text/html`, while feed
|
|
687
714
|
// readers lead with `application/rss+xml` etc. and only list
|
|
@@ -694,8 +721,8 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
694
721
|
if (acceptsHtml) after(() => prefetchLayoutData());
|
|
695
722
|
// commit() persists per-request state (e.g. the D1 bookmark cookie)
|
|
696
723
|
// before the response is returned, even if render throws; close()
|
|
697
|
-
//
|
|
698
|
-
return finishScoped(
|
|
724
|
+
// waits for stream-end and request-owned deferred work. See finishScoped.
|
|
725
|
+
return finishScoped(lifecycle, runAnon);
|
|
699
726
|
});
|
|
700
727
|
}
|
|
701
728
|
return runAnon();
|
|
@@ -855,12 +882,18 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
855
882
|
// it in ALS so the runtime's db getter and loader's getDb() pick it up,
|
|
856
883
|
// then call commit() after next() so the adapter can persist any
|
|
857
884
|
// per-request state (e.g. a D1 bookmark cookie for read-your-writes).
|
|
885
|
+
const lastContentWriteAt =
|
|
886
|
+
canUseCachedBinding && config?.database?.needsLastContentWriteAt
|
|
887
|
+
? await getLastContentWriteAt()
|
|
888
|
+
: undefined;
|
|
858
889
|
const scoped = createRequestScopedDb({
|
|
859
890
|
config: config?.database?.config,
|
|
860
|
-
isAuthenticated
|
|
861
|
-
isWrite
|
|
891
|
+
isAuthenticated,
|
|
892
|
+
isWrite,
|
|
893
|
+
canUseCachedBinding,
|
|
862
894
|
cookies: context.cookies,
|
|
863
895
|
url,
|
|
896
|
+
lastContentWriteAt,
|
|
864
897
|
});
|
|
865
898
|
|
|
866
899
|
const renderAndFinalize = async () => {
|
|
@@ -876,15 +909,16 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
876
909
|
};
|
|
877
910
|
|
|
878
911
|
if (scoped) {
|
|
912
|
+
const { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);
|
|
879
913
|
const parent = getRequestContext();
|
|
880
914
|
const ctx = parent
|
|
881
|
-
? { ...parent, db: scoped.db }
|
|
882
|
-
: { editMode: false, db: scoped.db, metrics };
|
|
915
|
+
? { ...parent, db: scoped.db, deferredTasks }
|
|
916
|
+
: { editMode: false, db: scoped.db, metrics, deferredTasks };
|
|
883
917
|
return runWithContext(ctx, () =>
|
|
884
918
|
// commit() persists per-request state (e.g. the D1 bookmark cookie)
|
|
885
919
|
// before the response returns, even if render throws; close()
|
|
886
|
-
//
|
|
887
|
-
finishScoped(
|
|
920
|
+
// waits for stream-end and request-owned deferred work. See finishScoped.
|
|
921
|
+
finishScoped(lifecycle, renderAndFinalize),
|
|
888
922
|
);
|
|
889
923
|
}
|
|
890
924
|
|
|
@@ -93,7 +93,7 @@ export const PUT: APIRoute = async ({ params, request, locals }) => {
|
|
|
93
93
|
// Send notification when a comment is newly approved
|
|
94
94
|
if (newStatus === "approved" && previousStatus !== "approved" && emdash.email) {
|
|
95
95
|
try {
|
|
96
|
-
const adminBaseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
96
|
+
const adminBaseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
97
97
|
const content = await lookupContentAuthor(emdash.db, updated.collection, updated.contentId);
|
|
98
98
|
if (content?.author) {
|
|
99
99
|
await sendCommentNotification({
|
|
@@ -51,9 +51,9 @@ export const POST: APIRoute = async ({ request, params, locals }) => {
|
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
// Build config using
|
|
54
|
+
// Build config using the configured site URL, stored option as fallback (not request Host header)
|
|
55
55
|
const options = new OptionsRepository(emdash.db);
|
|
56
|
-
const baseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
56
|
+
const baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
57
57
|
const siteName = (await options.get<string>("emdash:site_title")) ?? "EmDash";
|
|
58
58
|
|
|
59
59
|
const config: MagicLinkConfig = {
|
|
@@ -46,8 +46,8 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
46
46
|
const options = new OptionsRepository(emdash.db);
|
|
47
47
|
const siteName = (await options.get<string>("emdash:site_title")) || "EmDash";
|
|
48
48
|
|
|
49
|
-
// Use
|
|
50
|
-
const baseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
49
|
+
// Use the configured site URL (stored option as fallback) to prevent Host header spoofing in invite emails
|
|
50
|
+
const baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
51
51
|
|
|
52
52
|
// Build email sender from the plugin pipeline (if available)
|
|
53
53
|
const emailSend = emdash.email?.isAvailable()
|
|
@@ -57,9 +57,9 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
// Build magic link config using
|
|
60
|
+
// Build magic link config using the configured site URL, stored option as fallback (not request Host header)
|
|
61
61
|
const options = new OptionsRepository(emdash.db);
|
|
62
|
-
const baseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
62
|
+
const baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
63
63
|
const siteName = (await options.get<string>("emdash:site_title")) ?? "EmDash";
|
|
64
64
|
|
|
65
65
|
const config: MagicLinkConfig = {
|
|
@@ -68,8 +68,8 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
68
68
|
const options = new OptionsRepository(emdash.db);
|
|
69
69
|
const siteName = (await options.get<string>("emdash:site_title")) || "EmDash";
|
|
70
70
|
|
|
71
|
-
// Use
|
|
72
|
-
const baseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
71
|
+
// Use the configured site URL (stored option as fallback) to prevent Host header spoofing in signup emails
|
|
72
|
+
const baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
73
73
|
|
|
74
74
|
// Request signup - this handles all checks internally and fails silently
|
|
75
75
|
// if domain not allowed or user exists (to prevent enumeration)
|
|
@@ -302,7 +302,7 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
302
302
|
// isolate terminates after the response).
|
|
303
303
|
if (result.comment.status === "approved" && emdash.email && contentAuthor) {
|
|
304
304
|
try {
|
|
305
|
-
const adminBaseUrl = await getSiteBaseUrl(emdash.db, request);
|
|
305
|
+
const adminBaseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);
|
|
306
306
|
await sendCommentNotification({
|
|
307
307
|
email: emdash.email,
|
|
308
308
|
comment: result.comment,
|