emdash 0.14.0 → 0.15.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-9DybjTO6.d.mts → adapters-C4yd_UJR.d.mts} +1 -1
- package/dist/{adapters-9DybjTO6.d.mts.map → adapters-C4yd_UJR.d.mts.map} +1 -1
- package/dist/{allowed-origins-CDdG-4Gd.mjs → allowed-origins-D0fFk9a6.mjs} +2 -2
- package/dist/{allowed-origins-CDdG-4Gd.mjs.map → allowed-origins-D0fFk9a6.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +15 -15
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +3 -3
- package/dist/{api-BMLZuwM4.mjs → api-CLwG_3dh.mjs} +519 -55
- package/dist/api-CLwG_3dh.mjs.map +1 -0
- package/dist/{api-tokens-eYymBhIT.mjs → api-tokens-ucpcNXDt.mjs} +2 -2
- package/dist/{api-tokens-eYymBhIT.mjs.map → api-tokens-ucpcNXDt.mjs.map} +1 -1
- package/dist/{apply-v4DBgjPw.mjs → apply-wJhM_bwU.mjs} +17 -17
- package/dist/{apply-v4DBgjPw.mjs.map → apply-wJhM_bwU.mjs.map} +1 -1
- package/dist/astro/index.d.mts +10 -10
- package/dist/astro/index.mjs +21 -5
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +9 -9
- package/dist/astro/middleware/auth.mjs +6 -6
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/redirect.mjs +4 -4
- package/dist/astro/middleware/request-context.mjs +2 -2
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +353 -71
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +5 -5
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +5 -5
- 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/bylines/_id_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +14 -17
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts +9 -0
- package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +70 -0
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -0
- package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +25 -16
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +8 -8
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/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 +32 -31
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +32 -31
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +31 -30
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +31 -30
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +33 -31
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +31 -30
- 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 +31 -30
- 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 +33 -31
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +31 -30
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +59 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +72 -0
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +31 -30
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +44 -31
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +31 -30
- 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 +31 -30
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +5 -5
- package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +9 -9
- package/dist/astro/routes/api/auth/invite/index.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/register-options.mjs +8 -8
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +8 -8
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +5 -5
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +5 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +8 -8
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +9 -9
- package/dist/astro/routes/api/auth/passkey/verify.mjs +9 -9
- package/dist/astro/routes/api/auth/signup/complete.mjs +9 -9
- package/dist/astro/routes/api/auth/signup/request.mjs +8 -8
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/index.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/trash.mjs +6 -6
- package/dist/astro/routes/api/dashboard.mjs +7 -7
- 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 +10 -10
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +9 -9
- package/dist/astro/routes/api/import/wordpress/execute.mjs +9 -8
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +8 -8
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +8 -8
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +7 -7
- 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 +10 -10
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/mcp.mjs +29 -29
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +6 -6
- package/dist/astro/routes/api/media/_id_.mjs +6 -6
- 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 +7 -7
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +7 -7
- package/dist/astro/routes/api/menus/_name_/items.mjs +7 -7
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +7 -7
- package/dist/astro/routes/api/menus/_name_/translations.mjs +7 -7
- package/dist/astro/routes/api/menus/_name_.mjs +7 -7
- package/dist/astro/routes/api/menus/index.mjs +7 -7
- 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 +3 -3
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +8 -8
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +8 -8
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +9 -9
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +9 -9
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +31 -30
- 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 +31 -30
- 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 +31 -30
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +31 -30
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +31 -30
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +6 -6
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +31 -30
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +31 -30
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +9 -9
- package/dist/astro/routes/api/search/index.mjs +8 -8
- package/dist/astro/routes/api/search/rebuild.mjs +9 -9
- package/dist/astro/routes/api/search/stats.mjs +6 -6
- package/dist/astro/routes/api/search/suggest.mjs +8 -8
- package/dist/astro/routes/api/sections/_slug_.mjs +8 -8
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +8 -8
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +10 -10
- package/dist/astro/routes/api/setup/admin-verify.mjs +10 -10
- package/dist/astro/routes/api/setup/admin.mjs +9 -9
- package/dist/astro/routes/api/setup/dev-bypass.mjs +22 -22
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +22 -22
- package/dist/astro/routes/api/setup/status.mjs +4 -4
- package/dist/astro/routes/api/snapshot.mjs +5 -5
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +11 -10
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +11 -10
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +11 -10
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +11 -10
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_.mjs +5 -5
- package/dist/astro/routes/api/widget-areas/index.mjs +8 -8
- package/dist/astro/routes/api/widget-components.mjs +3 -3
- package/dist/astro/routes/robots.txt.mjs +5 -5
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +4 -4
- package/dist/astro/routes/sitemap.xml.mjs +5 -5
- package/dist/astro/types.d.mts +13 -12
- 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-BlyCH-96.mjs → authorize-Bkwe8kuL.mjs} +2 -2
- package/dist/{authorize-BlyCH-96.mjs.map → authorize-Bkwe8kuL.mjs.map} +1 -1
- package/dist/byline-CTaWkMh5.mjs +404 -0
- package/dist/byline-CTaWkMh5.mjs.map +1 -0
- package/dist/bylines-BYHWU3T7.mjs +174 -0
- package/dist/bylines-BYHWU3T7.mjs.map +1 -0
- package/dist/{bylines-BdUP8NuI.d.mts → bylines-DtDRNF1n.d.mts} +59 -14
- package/dist/bylines-DtDRNF1n.d.mts.map +1 -0
- package/dist/bylines-H0Xh5TMy.mjs +118 -0
- package/dist/bylines-H0Xh5TMy.mjs.map +1 -0
- package/dist/{cache-CXCpjWiL.mjs → cache-CNk1jIxp.mjs} +2 -2
- package/dist/{cache-CXCpjWiL.mjs.map → cache-CNk1jIxp.mjs.map} +1 -1
- package/dist/{challenge-store-CJ0OOHOr.mjs → challenge-store-Dng1SxKT.mjs} +1 -1
- package/dist/{challenge-store-CJ0OOHOr.mjs.map → challenge-store-Dng1SxKT.mjs.map} +1 -1
- package/dist/{chunks-DyGtu1Bv.mjs → chunks-BkfVdD-3.mjs} +2 -2
- package/dist/{chunks-DyGtu1Bv.mjs.map → chunks-BkfVdD-3.mjs.map} +1 -1
- package/dist/cli/index.mjs +21 -29
- 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 +1 -1
- package/dist/client/index.mjs.map +1 -1
- package/dist/{comment-Dd9MI82-.mjs → comment-_yzlBYPx.mjs} +2 -2
- package/dist/{comment-Dd9MI82-.mjs.map → comment-_yzlBYPx.mjs.map} +1 -1
- package/dist/{comments-koGI0FrK.mjs → comments-DxID-rsd.mjs} +3 -3
- package/dist/{comments-koGI0FrK.mjs.map → comments-DxID-rsd.mjs.map} +1 -1
- package/dist/{components-mZem7pbe.mjs → components-Dx3DM0gg.mjs} +1 -1
- package/dist/{components-mZem7pbe.mjs.map → components-Dx3DM0gg.mjs.map} +1 -1
- package/dist/config-CVssduLe.mjs.map +1 -1
- package/dist/{content-D6YG26WG.mjs → content-C0ooIs-f.mjs} +3 -3
- package/dist/{content-D6YG26WG.mjs.map → content-C0ooIs-f.mjs.map} +1 -1
- package/dist/{context-qF8d3IPR.mjs → context-sAnCaUIR.mjs} +10 -10
- package/dist/context-sAnCaUIR.mjs.map +1 -0
- package/dist/{cron-H8eJ46dv.mjs → cron-Bd3b3iuj.mjs} +1 -1
- package/dist/{cron-H8eJ46dv.mjs.map → cron-Bd3b3iuj.mjs.map} +1 -1
- package/dist/{dashboard-BmWSIUwY.mjs → dashboard-Cqw3ay2X.mjs} +4 -4
- package/dist/{dashboard-BmWSIUwY.mjs.map → dashboard-Cqw3ay2X.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +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-Dbs22Gg4.mjs → default-BvTAYCzx.mjs} +1 -1
- package/dist/{default-Dbs22Gg4.mjs.map → default-BvTAYCzx.mjs.map} +1 -1
- package/dist/{device-flow-BqJRxa0Q.mjs → device-flow-B9oG8PwP.mjs} +4 -4
- package/dist/{device-flow-BqJRxa0Q.mjs.map → device-flow-B9oG8PwP.mjs.map} +1 -1
- package/dist/{email-console-Dmp5Q-P2.mjs → email-console-CubRll9q.mjs} +1 -1
- package/dist/email-console-CubRll9q.mjs.map +1 -0
- package/dist/{error-tSQWIl5U.mjs → error-CPh_8eLq.mjs} +16 -8
- package/dist/error-CPh_8eLq.mjs.map +1 -0
- package/dist/{escape-B8bdIryO.mjs → escape-Cg6kMELH.mjs} +1 -1
- package/dist/{escape-B8bdIryO.mjs.map → escape-Cg6kMELH.mjs.map} +1 -1
- package/dist/{fts-manager-B633C-kQ.mjs → fts-manager-Mnrtn-r2.mjs} +2 -2
- package/dist/{fts-manager-B633C-kQ.mjs.map → fts-manager-Mnrtn-r2.mjs.map} +1 -1
- package/dist/{import-CNfLOgDE.mjs → import-DG80rC_I.mjs} +3 -3
- package/dist/{import-CNfLOgDE.mjs.map → import-DG80rC_I.mjs.map} +1 -1
- package/dist/{index-BV8iJ-6s.d.mts → index-Bv1Wf1zB.d.mts} +235 -18
- package/dist/index-Bv1Wf1zB.d.mts.map +1 -0
- package/dist/{index-D2gvztOP.d.mts → index-CC42STEm.d.mts} +3 -3
- package/dist/{index-D2gvztOP.d.mts.map → index-CC42STEm.d.mts.map} +1 -1
- package/dist/index.d.mts +17 -17
- package/dist/index.mjs +50 -49
- package/dist/{load-QzYRpVN3.mjs → load-DmXNVhst.mjs} +2 -2
- package/dist/{load-QzYRpVN3.mjs.map → load-DmXNVhst.mjs.map} +1 -1
- package/dist/{loader-Cs6-Bqe6.mjs → loader-Chm5h7Gr.mjs} +3 -3
- package/dist/loader-Chm5h7Gr.mjs.map +1 -0
- package/dist/{manifest-schema-HCtSh4Jq.mjs → manifest-schema-Czqf0TLu.mjs} +1 -1
- package/dist/{manifest-schema-HCtSh4Jq.mjs.map → manifest-schema-Czqf0TLu.mjs.map} +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +11 -11
- package/dist/media/local-runtime.mjs +4 -4
- package/dist/{media-allowlist-B8EX01DH.mjs → media-allowlist-BNloC69x.mjs} +1 -1
- package/dist/{media-allowlist-B8EX01DH.mjs.map → media-allowlist-BNloC69x.mjs.map} +1 -1
- package/dist/{media-Dg7he9uK.mjs → media-oqRcNiQf.mjs} +2 -2
- package/dist/media-oqRcNiQf.mjs.map +1 -0
- package/dist/{menus-DOzIecHi.mjs → menus-Bjf5R1Qq.mjs} +2 -2
- package/dist/menus-Bjf5R1Qq.mjs.map +1 -0
- package/dist/{menus-X4Z-eBA1.mjs → menus-C75SSmRy.mjs} +30 -11
- package/dist/menus-C75SSmRy.mjs.map +1 -0
- package/dist/mime-KV5TqkMN.mjs.map +1 -1
- package/dist/{mode-DPRPvJYm.mjs → mode-CaaiebZI.mjs} +1 -1
- package/dist/{mode-DPRPvJYm.mjs.map → mode-CaaiebZI.mjs.map} +1 -1
- package/dist/{oauth-authorization-62GmpGIH.mjs → oauth-authorization-CTMeVfvj.mjs} +4 -4
- package/dist/{oauth-authorization-62GmpGIH.mjs.map → oauth-authorization-CTMeVfvj.mjs.map} +1 -1
- package/dist/{oauth-clients-D_B0_-Bz.mjs → oauth-clients-eJCbkVSG.mjs} +1 -1
- package/dist/oauth-clients-eJCbkVSG.mjs.map +1 -0
- package/dist/{oauth-state-store-DpsZViTu.mjs → oauth-state-store-vOSdOeGe.mjs} +1 -1
- package/dist/{oauth-state-store-DpsZViTu.mjs.map → oauth-state-store-vOSdOeGe.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-meyS2oB1.mjs → oauth-user-lookup-3JwsVw6N.mjs} +1 -1
- package/dist/{oauth-user-lookup-meyS2oB1.mjs.map → oauth-user-lookup-3JwsVw6N.mjs.map} +1 -1
- package/dist/options-BL4X94qY.mjs.map +1 -1
- package/dist/{options-Cq64Wx0O.d.mts → options-DhV-gwJb.d.mts} +4 -4
- package/dist/options-DhV-gwJb.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-BFTPon-J.mjs → parse-3-caTKgt.mjs} +2 -2
- package/dist/{parse-BFTPon-J.mjs.map → parse-3-caTKgt.mjs.map} +1 -1
- package/dist/{passkey-config-Cg86_ISa.mjs → passkey-config-BloQOT3y.mjs} +1 -1
- package/dist/{passkey-config-Cg86_ISa.mjs.map → passkey-config-BloQOT3y.mjs.map} +1 -1
- package/dist/{placeholder-D3cFCU9y.d.mts → placeholder-KCkkCtgQ.d.mts} +1 -1
- package/dist/{placeholder-D3cFCU9y.d.mts.map → placeholder-KCkkCtgQ.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +26 -15
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/{preview-C1LOEbWZ.mjs → preview-D4z0WONU.mjs} +2 -2
- package/dist/{preview-C1LOEbWZ.mjs.map → preview-D4z0WONU.mjs.map} +1 -1
- package/dist/{public-url-CseXl9Fv.mjs → public-url-CUWWFME2.mjs} +1 -1
- package/dist/{public-url-CseXl9Fv.mjs.map → public-url-CUWWFME2.mjs.map} +1 -1
- package/dist/{query-axZmO6Tn.mjs → query-BJn8TOPk.mjs} +16 -13
- package/dist/{query-axZmO6Tn.mjs.map → query-BJn8TOPk.mjs.map} +1 -1
- package/dist/{rate-limit-t5CVjCO6.mjs → rate-limit-D_-gAeJ0.mjs} +2 -2
- package/dist/{rate-limit-t5CVjCO6.mjs.map → rate-limit-D_-gAeJ0.mjs.map} +1 -1
- package/dist/{redirect-DGRsLO2I.mjs → redirect-BINiRYq4.mjs} +1 -1
- package/dist/{redirect-DGRsLO2I.mjs.map → redirect-BINiRYq4.mjs.map} +1 -1
- package/dist/{redirect-DkaDxq8e.mjs → redirect-CNv4mHX2.mjs} +2 -2
- package/dist/{redirect-DkaDxq8e.mjs.map → redirect-CNv4mHX2.mjs.map} +1 -1
- package/dist/{redirects-D1fdd68T.mjs → redirects-B-CUZ1Xh.mjs} +3 -3
- package/dist/{redirects-D1fdd68T.mjs.map → redirects-B-CUZ1Xh.mjs.map} +1 -1
- package/dist/{redirects-Dmj6KRU3.mjs → redirects-COMLwsV5.mjs} +19 -5
- package/dist/redirects-COMLwsV5.mjs.map +1 -0
- package/dist/{registry-BnCeHYsf.mjs → registry-DqrAQDXH.mjs} +4 -4
- package/dist/{registry-BnCeHYsf.mjs.map → registry-DqrAQDXH.mjs.map} +1 -1
- package/dist/request-cache-dzCt8TZB.mjs.map +1 -1
- package/dist/request-context.mjs.map +1 -1
- package/dist/{request-meta-CLCwSQOS.mjs → request-meta-C_Cjii-T.mjs} +2 -2
- package/dist/{request-meta-CLCwSQOS.mjs.map → request-meta-C_Cjii-T.mjs.map} +1 -1
- package/dist/resolve-Cj98DuqN.mjs +39 -0
- package/dist/resolve-Cj98DuqN.mjs.map +1 -0
- package/dist/{runner-DdnQIwz_.mjs → runner-CGlojznK.mjs} +472 -165
- package/dist/runner-CGlojznK.mjs.map +1 -0
- package/dist/{runner-DcfZewkO.d.mts → runner-CNHRo1mT.d.mts} +2 -2
- package/dist/{runner-DcfZewkO.d.mts.map → runner-CNHRo1mT.d.mts.map} +1 -1
- package/dist/runtime.d.mts +10 -10
- package/dist/runtime.mjs +2 -2
- package/dist/{schema-BmqagCwG.mjs → schema-Djdlfi5G.mjs} +4 -4
- package/dist/{schema-BmqagCwG.mjs.map → schema-Djdlfi5G.mjs.map} +1 -1
- package/dist/{search-CPrvO5u8.mjs → search-By-NN3da.mjs} +4 -4
- package/dist/{search-CPrvO5u8.mjs.map → search-By-NN3da.mjs.map} +1 -1
- package/dist/{secrets-6pgZyq0K.mjs → secrets-rPdhEBkD.mjs} +1 -1
- package/dist/{secrets-6pgZyq0K.mjs.map → secrets-rPdhEBkD.mjs.map} +1 -1
- package/dist/{sections-Cm-zb-gZ.mjs → sections-DcBIlOq1.mjs} +3 -3
- package/dist/{sections-Cm-zb-gZ.mjs.map → sections-DcBIlOq1.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +16 -16
- package/dist/seo/index.d.mts +1 -1
- package/dist/{seo-DRq9-EPP.mjs → seo-bjDoq9Eg.mjs} +2 -2
- package/dist/{seo-DRq9-EPP.mjs.map → seo-bjDoq9Eg.mjs.map} +1 -1
- package/dist/{service-vByySp-2.mjs → service-BuuTdGAT.mjs} +3 -3
- package/dist/{service-vByySp-2.mjs.map → service-BuuTdGAT.mjs.map} +1 -1
- package/dist/{settings-CBBj7HUd.mjs → settings-CJnKiWuR.mjs} +3 -3
- package/dist/{settings-CBBj7HUd.mjs.map → settings-CJnKiWuR.mjs.map} +1 -1
- package/dist/{settings-xQKsWnzQ.mjs → settings-hcubRfkr.mjs} +3 -3
- package/dist/settings-hcubRfkr.mjs.map +1 -0
- package/dist/{setup-BGAJ2uXs.mjs → setup-Cf_TyOv5.mjs} +2 -2
- package/dist/{setup-BGAJ2uXs.mjs.map → setup-Cf_TyOv5.mjs.map} +1 -1
- package/dist/{setup-complete-C6ZCLhKo.mjs → setup-complete-MzzN9u0b.mjs} +1 -1
- package/dist/{setup-complete-C6ZCLhKo.mjs.map → setup-complete-MzzN9u0b.mjs.map} +1 -1
- package/dist/{setup-nonce-CY1gQiAU.mjs → setup-nonce-DXuriHsg.mjs} +1 -1
- package/dist/{setup-nonce-CY1gQiAU.mjs.map → setup-nonce-DXuriHsg.mjs.map} +1 -1
- package/dist/{site-url-D-M4Fd8O.mjs → site-url-xkhw1tcz.mjs} +1 -1
- package/dist/{site-url-D-M4Fd8O.mjs.map → site-url-xkhw1tcz.mjs.map} +1 -1
- package/dist/{ssrf-DzFN_qV-.mjs → ssrf-MZ-zrG6-.mjs} +1 -1
- package/dist/{ssrf-DzFN_qV-.mjs.map → ssrf-MZ-zrG6-.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{taxonomies-Dc0mzlms.mjs → taxonomies-CLs9HPE2.mjs} +4 -4
- package/dist/{taxonomies-Dc0mzlms.mjs.map → taxonomies-CLs9HPE2.mjs.map} +1 -1
- package/dist/{taxonomies-Cn9UpaR2.mjs → taxonomies-WamPVA2x.mjs} +7 -42
- package/dist/taxonomies-WamPVA2x.mjs.map +1 -0
- package/dist/{taxonomy-wPfusMK9.mjs → taxonomy-D4Uc2LsZ.mjs} +3 -3
- package/dist/{taxonomy-wPfusMK9.mjs.map → taxonomy-D4Uc2LsZ.mjs.map} +1 -1
- package/dist/{tokens-DILYNZMi.mjs → tokens-N8otWMmj.mjs} +1 -1
- package/dist/{tokens-DILYNZMi.mjs.map → tokens-N8otWMmj.mjs.map} +1 -1
- package/dist/{transport-fw-mKJzT.mjs → transport-B6CHddbu.mjs} +1 -1
- package/dist/{transport-fw-mKJzT.mjs.map → transport-B6CHddbu.mjs.map} +1 -1
- package/dist/{transport-GeXlLscf.d.mts → transport-DOxLfUir.d.mts} +1 -1
- package/dist/{transport-GeXlLscf.d.mts.map → transport-DOxLfUir.d.mts.map} +1 -1
- package/dist/{trusted-proxy-CJhQIk65.mjs → trusted-proxy-97pajC2f.mjs} +1 -1
- package/dist/{trusted-proxy-CJhQIk65.mjs.map → trusted-proxy-97pajC2f.mjs.map} +1 -1
- package/dist/{types-CwXMEPRr.mjs → types-ByV5sgsv.mjs} +2 -2
- package/dist/types-ByV5sgsv.mjs.map +1 -0
- package/dist/{types-Dz9CGX_d.mjs → types-Cd9UCu3t.mjs} +1 -1
- package/dist/{types-Dz9CGX_d.mjs.map → types-Cd9UCu3t.mjs.map} +1 -1
- package/dist/{types-DmxPPXGf.d.mts → types-CkDSF81F.d.mts} +1 -1
- package/dist/{types-DmxPPXGf.d.mts.map → types-CkDSF81F.d.mts.map} +1 -1
- package/dist/{types-BWhaSS7U.d.mts → types-CpUuGcd5.d.mts} +1 -1
- package/dist/{types-BWhaSS7U.d.mts.map → types-CpUuGcd5.d.mts.map} +1 -1
- package/dist/{types-DFowNO60.d.mts → types-D599-ruj.d.mts} +1 -1
- package/dist/{types-DFowNO60.d.mts.map → types-D599-ruj.d.mts.map} +1 -1
- package/dist/{types-B05e2naf.d.mts → types-DGHWRQgr.d.mts} +3 -3
- package/dist/{types-B05e2naf.d.mts.map → types-DGHWRQgr.d.mts.map} +1 -1
- package/dist/{types-CzvJd1ND.d.mts → types-DaYDYW6g.d.mts} +14 -1
- package/dist/types-DaYDYW6g.d.mts.map +1 -0
- package/dist/{types-C1KKK4VP.d.mts → types-DaqNzqVt.d.mts} +16 -1
- package/dist/{types-C1KKK4VP.d.mts.map → types-DaqNzqVt.d.mts.map} +1 -1
- package/dist/{types-DW1l0gCv.d.mts → types-Dgo6y-Ut.d.mts} +1 -1
- package/dist/{types-DW1l0gCv.d.mts.map → types-Dgo6y-Ut.d.mts.map} +1 -1
- package/dist/{types-Cb2UCDJg.d.mts → types-bYmRn_Uy.d.mts} +1 -1
- package/dist/{types-Cb2UCDJg.d.mts.map → types-bYmRn_Uy.d.mts.map} +1 -1
- package/dist/{user-Dr1bOCqS.mjs → user-D3BD5zdT.mjs} +2 -2
- package/dist/{user-Dr1bOCqS.mjs.map → user-D3BD5zdT.mjs.map} +1 -1
- package/dist/{utils-_F-rWBTN.mjs → utils-C3wTAP-P.mjs} +1 -1
- package/dist/{utils-_F-rWBTN.mjs.map → utils-C3wTAP-P.mjs.map} +1 -1
- package/dist/{validate-BpQGsmd7.d.mts → validate-DQtHw9NT.d.mts} +5 -5
- package/dist/{validate-BpQGsmd7.d.mts.map → validate-DQtHw9NT.d.mts.map} +1 -1
- package/dist/{validate-DlFxcVVK.mjs → validate-mz87i8_1.mjs} +2 -2
- package/dist/{validate-DlFxcVVK.mjs.map → validate-mz87i8_1.mjs.map} +1 -1
- package/dist/{validation-BiFJqUp5.mjs → validation-DKHhXjPr.mjs} +5 -5
- package/dist/{validation-BiFJqUp5.mjs.map → validation-DKHhXjPr.mjs.map} +1 -1
- package/dist/version-Ct7C6RSo.mjs +7 -0
- package/dist/{version-DNmQakZO.mjs.map → version-Ct7C6RSo.mjs.map} +1 -1
- package/dist/{widgets-B9j_yzlk.mjs → widgets-lShIQXU5.mjs} +3 -3
- package/dist/widgets-lShIQXU5.mjs.map +1 -0
- package/dist/{zod-generator-DSyz01KE.mjs → zod-generator-dvxgmd1M.mjs} +2 -2
- package/dist/{zod-generator-DSyz01KE.mjs.map → zod-generator-dvxgmd1M.mjs.map} +1 -1
- package/package.json +11 -9
- package/src/api/error.ts +18 -3
- package/src/api/errors.ts +6 -0
- package/src/api/handlers/bylines.ts +161 -0
- package/src/api/handlers/content.ts +125 -43
- package/src/api/handlers/index.ts +6 -0
- package/src/api/handlers/marketplace.ts +27 -5
- package/src/api/handlers/oauth-clients.ts +1 -1
- package/src/api/handlers/registry.ts +553 -4
- package/src/api/openapi/document.ts +1 -1
- package/src/api/schemas/bylines.ts +46 -0
- package/src/astro/integration/index.ts +1 -1
- package/src/astro/integration/routes.ts +5 -0
- package/src/astro/integration/runtime.ts +12 -1
- package/src/astro/integration/virtual-modules.ts +19 -2
- package/src/astro/integration/vite-config.ts +2 -2
- package/src/astro/middleware/auth.ts +7 -7
- package/src/astro/middleware/request-context.ts +1 -1
- package/src/astro/middleware.ts +31 -20
- package/src/astro/routes/api/admin/bylines/[id]/index.ts +3 -12
- package/src/astro/routes/api/admin/bylines/[id]/translations.ts +99 -0
- package/src/astro/routes/api/admin/bylines/index.ts +22 -11
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +1 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +6 -1
- package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +51 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +79 -0
- package/src/astro/routes/api/admin/plugins/updates.ts +43 -6
- package/src/astro/routes/api/admin/themes/marketplace/index.ts +1 -1
- package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +2 -2
- package/src/astro/routes/api/auth/oauth/[provider].ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +6 -6
- package/src/astro/routes/api/content/[collection]/[id]/translations.ts +1 -1
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -2
- package/src/astro/routes/api/content/[collection]/[id].ts +6 -6
- package/src/astro/routes/api/import/wordpress/execute.ts +1 -1
- package/src/astro/routes/api/import/wordpress/prepare.ts +2 -2
- package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +3 -3
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +2 -2
- package/src/astro/routes/api/media/upload-url.ts +1 -1
- package/src/astro/routes/api/redirects/404s/index.ts +3 -3
- package/src/astro/routes/api/redirects/404s/summary.ts +1 -1
- package/src/astro/routes/api/redirects/[id].ts +3 -3
- package/src/astro/routes/api/redirects/index.ts +2 -2
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +4 -4
- package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +2 -6
- package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +1 -1
- package/src/astro/routes/api/schema/collections/[slug]/index.ts +6 -6
- package/src/astro/routes/api/schema/collections/index.ts +4 -4
- package/src/astro/routes/api/schema/index.ts +1 -1
- package/src/astro/routes/api/schema/orphans/[slug].ts +1 -1
- package/src/astro/routes/api/schema/orphans/index.ts +1 -1
- package/src/astro/routes/api/sections/[slug].ts +3 -3
- package/src/astro/routes/api/sections/index.ts +2 -2
- package/src/astro/types.ts +4 -0
- package/src/auth/rate-limit.ts +1 -1
- package/src/auth/trusted-proxy.ts +1 -1
- package/src/bylines/index.ts +154 -55
- package/src/cli/commands/init.ts +4 -8
- package/src/client/index.ts +1 -1
- package/src/components/InlinePortableTextEditor.tsx +5 -1
- package/src/components/inline-code-block.tsx +343 -0
- package/src/config/secrets.ts +3 -3
- package/src/database/migrations/006_taxonomy_defs.ts +1 -1
- package/src/database/migrations/014_draft_revisions.ts +6 -6
- package/src/database/migrations/040_byline_i18n.ts +497 -0
- package/src/database/migrations/runner.ts +4 -1
- package/src/database/repositories/audit.ts +2 -2
- package/src/database/repositories/byline.ts +320 -50
- package/src/database/repositories/media.ts +2 -2
- package/src/database/repositories/menu.ts +1 -1
- package/src/database/repositories/options.ts +3 -3
- package/src/database/repositories/plugin-storage.ts +3 -3
- package/src/database/repositories/types.ts +13 -0
- package/src/database/types.ts +15 -0
- package/src/emdash-runtime.ts +492 -20
- package/src/i18n/config.ts +1 -1
- package/src/index.ts +7 -0
- package/src/loader.ts +1 -1
- package/src/mcp/server.ts +3 -3
- package/src/media/mime.ts +1 -1
- package/src/page/absolute-url.ts +1 -1
- package/src/plugins/adapt-sandbox-entry.ts +45 -40
- package/src/plugins/email-console.ts +1 -1
- package/src/plugins/index.ts +1 -0
- package/src/plugins/marketplace.ts +1 -1
- package/src/plugins/sandbox/index.ts +1 -0
- package/src/plugins/sandbox/noop.ts +11 -3
- package/src/plugins/sandbox/types.ts +28 -0
- package/src/query.ts +17 -2
- package/src/registry/config.ts +1 -1
- package/src/request-cache.ts +3 -3
- package/src/request-context.ts +1 -1
- package/src/settings/index.ts +4 -4
- package/src/storage/local.ts +1 -1
- package/src/storage/s3.ts +3 -3
- package/src/widgets/index.ts +1 -1
- package/dist/api-BMLZuwM4.mjs.map +0 -1
- package/dist/byline-D09BaS4j.mjs +0 -220
- package/dist/byline-D09BaS4j.mjs.map +0 -1
- package/dist/bylines-BTM2xtP8.mjs +0 -113
- package/dist/bylines-BTM2xtP8.mjs.map +0 -1
- package/dist/bylines-BdUP8NuI.d.mts.map +0 -1
- package/dist/context-qF8d3IPR.mjs.map +0 -1
- package/dist/email-console-Dmp5Q-P2.mjs.map +0 -1
- package/dist/error-tSQWIl5U.mjs.map +0 -1
- package/dist/index-BV8iJ-6s.d.mts.map +0 -1
- package/dist/loader-Cs6-Bqe6.mjs.map +0 -1
- package/dist/media-Dg7he9uK.mjs.map +0 -1
- package/dist/menus-DOzIecHi.mjs.map +0 -1
- package/dist/menus-X4Z-eBA1.mjs.map +0 -1
- package/dist/oauth-clients-D_B0_-Bz.mjs.map +0 -1
- package/dist/options-Cq64Wx0O.d.mts.map +0 -1
- package/dist/redirects-Dmj6KRU3.mjs.map +0 -1
- package/dist/runner-DdnQIwz_.mjs.map +0 -1
- package/dist/settings-xQKsWnzQ.mjs.map +0 -1
- package/dist/taxonomies-Cn9UpaR2.mjs.map +0 -1
- package/dist/types-CwXMEPRr.mjs.map +0 -1
- package/dist/types-CzvJd1ND.d.mts.map +0 -1
- package/dist/version-DNmQakZO.mjs +0 -7
- package/dist/widgets-B9j_yzlk.mjs.map +0 -1
- /package/dist/{api-tokens-D3C9v02m.mjs → api-tokens-iPIHAY8N.mjs} +0 -0
- /package/dist/{ssrf-CTul4uQi.mjs → ssrf-BIcd-aXW.mjs} +0 -0
- /package/dist/{types-Db67HHlU.mjs → types-1NNkmTIn.mjs} +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry plugin update endpoint (experimental)
|
|
3
|
+
*
|
|
4
|
+
* POST /_emdash/api/admin/plugins/registry/:id/update — Update a
|
|
5
|
+
* registry-source plugin to a newer release. Mirrors the marketplace
|
|
6
|
+
* update route's escalation gates: `CAPABILITY_ESCALATION` if the new
|
|
7
|
+
* version declares new capabilities and `confirmCapabilityChanges` is
|
|
8
|
+
* absent, and `ROUTE_VISIBILITY_ESCALATION` if it newly exposes public
|
|
9
|
+
* routes and `confirmRouteVisibilityChanges` is absent.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { APIRoute } from "astro";
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
|
|
15
|
+
import { requirePerm } from "#api/authorize.js";
|
|
16
|
+
import { apiError, handleError, unwrapResult } from "#api/error.js";
|
|
17
|
+
import { handleRegistryUpdate } from "#api/index.js";
|
|
18
|
+
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
19
|
+
|
|
20
|
+
export const prerender = false;
|
|
21
|
+
|
|
22
|
+
const updateBodySchema = z.object({
|
|
23
|
+
/** Optional explicit target version. Defaults to the aggregator's latest. */
|
|
24
|
+
version: z.string().min(1).max(64).optional(),
|
|
25
|
+
/**
|
|
26
|
+
* Set by the admin's capability re-consent dialog when the new version
|
|
27
|
+
* declares capabilities the installed version did not. Without this,
|
|
28
|
+
* the handler returns `CAPABILITY_ESCALATION` carrying the diff.
|
|
29
|
+
*/
|
|
30
|
+
confirmCapabilityChanges: z.boolean().optional(),
|
|
31
|
+
/**
|
|
32
|
+
* Set by the admin's route-visibility re-consent dialog when the new
|
|
33
|
+
* version newly exposes a public (unauthenticated) route.
|
|
34
|
+
*/
|
|
35
|
+
confirmRouteVisibilityChanges: z.boolean().optional(),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
39
|
+
try {
|
|
40
|
+
const { emdash, user } = locals;
|
|
41
|
+
const { id } = params;
|
|
42
|
+
|
|
43
|
+
if (!emdash?.db) {
|
|
44
|
+
return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const denied = requirePerm(user, "plugins:manage");
|
|
48
|
+
if (denied) return denied;
|
|
49
|
+
|
|
50
|
+
if (!id) {
|
|
51
|
+
return apiError("INVALID_REQUEST", "Plugin ID required", 400);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const body = await parseOptionalBody(request, updateBodySchema, {});
|
|
55
|
+
if (isParseError(body)) return body;
|
|
56
|
+
|
|
57
|
+
const result = await handleRegistryUpdate(
|
|
58
|
+
emdash.db,
|
|
59
|
+
emdash.storage,
|
|
60
|
+
emdash.getSandboxRunner(),
|
|
61
|
+
emdash.config.experimental?.registry,
|
|
62
|
+
id,
|
|
63
|
+
{
|
|
64
|
+
version: body.version,
|
|
65
|
+
confirmCapabilityChanges: body.confirmCapabilityChanges,
|
|
66
|
+
confirmRouteVisibilityChanges: body.confirmRouteVisibilityChanges,
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
if (!result.success) return unwrapResult(result);
|
|
71
|
+
|
|
72
|
+
await emdash.syncRegistryPlugins();
|
|
73
|
+
|
|
74
|
+
return unwrapResult(result);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.error("[registry-update] Unhandled error:", error);
|
|
77
|
+
return handleError(error, "Failed to update plugin from registry", "UPDATE_FAILED");
|
|
78
|
+
}
|
|
79
|
+
};
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Plugin update check endpoint
|
|
3
3
|
*
|
|
4
|
-
* GET /_emdash/api/admin/plugins/updates - Check for
|
|
4
|
+
* GET /_emdash/api/admin/plugins/updates - Check for available updates
|
|
5
|
+
* across every installed plugin source (marketplace + experimental
|
|
6
|
+
* registry). Items are returned in a single flat list; admins correlate
|
|
7
|
+
* items to plugins by `pluginId` and read `source` from the existing
|
|
8
|
+
* `/_emdash/api/admin/plugins` list (the pluginId prefix is not a
|
|
9
|
+
* reliable discriminator on its own).
|
|
10
|
+
*
|
|
11
|
+
* A failure in one source does NOT blank the other — a registry-side
|
|
12
|
+
* aggregator outage still returns marketplace updates and vice versa.
|
|
5
13
|
*/
|
|
6
14
|
|
|
7
15
|
import type { APIRoute } from "astro";
|
|
8
16
|
|
|
9
17
|
import { requirePerm } from "#api/authorize.js";
|
|
10
|
-
import { apiError
|
|
11
|
-
import { handleMarketplaceUpdateCheck } from "#api/index.js";
|
|
18
|
+
import { apiError } from "#api/error.js";
|
|
19
|
+
import { handleMarketplaceUpdateCheck, handleRegistryUpdateCheck } from "#api/index.js";
|
|
12
20
|
|
|
13
21
|
export const prerender = false;
|
|
14
22
|
|
|
@@ -22,7 +30,36 @@ export const GET: APIRoute = async ({ locals }) => {
|
|
|
22
30
|
const denied = requirePerm(user, "plugins:read");
|
|
23
31
|
if (denied) return denied;
|
|
24
32
|
|
|
25
|
-
|
|
33
|
+
// Run both checks in parallel. Catch each independently so one source's
|
|
34
|
+
// failure doesn't blank the other. Both throws and structured `success:
|
|
35
|
+
// false` returns are logged with the source name so a misconfigured
|
|
36
|
+
// registry doesn't disappear silently from telemetry.
|
|
37
|
+
const [marketplace, registry] = await Promise.all([
|
|
38
|
+
handleMarketplaceUpdateCheck(emdash.db, emdash.config.marketplace).catch((err) => {
|
|
39
|
+
console.warn("[plugins/updates] marketplace check threw:", err);
|
|
40
|
+
return null;
|
|
41
|
+
}),
|
|
42
|
+
handleRegistryUpdateCheck(emdash.db, emdash.config.experimental?.registry).catch((err) => {
|
|
43
|
+
console.warn("[plugins/updates] registry check threw:", err);
|
|
44
|
+
return null;
|
|
45
|
+
}),
|
|
46
|
+
]);
|
|
47
|
+
if (marketplace && !marketplace.success) {
|
|
48
|
+
console.warn(
|
|
49
|
+
`[plugins/updates] marketplace check failed: ${marketplace.error.code} ${marketplace.error.message}`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
if (registry && !registry.success) {
|
|
53
|
+
console.warn(
|
|
54
|
+
`[plugins/updates] registry check failed: ${registry.error.code} ${registry.error.message}`,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const items: unknown[] = [];
|
|
59
|
+
if (marketplace?.success) items.push(...marketplace.data.items);
|
|
60
|
+
if (registry?.success) items.push(...registry.data.items);
|
|
26
61
|
|
|
27
|
-
|
|
62
|
+
// Match the rest of the admin API envelope (`{ data: ... }`) so the
|
|
63
|
+
// admin client's `parseApiResponse` unwraps `body.data`.
|
|
64
|
+
return Response.json({ data: { items } });
|
|
28
65
|
};
|
|
@@ -28,7 +28,7 @@ export const GET: APIRoute = async ({ url, locals }) => {
|
|
|
28
28
|
const validSorts = new Set(["name", "created", "updated"]);
|
|
29
29
|
let sort: "name" | "created" | "updated" | undefined;
|
|
30
30
|
if (sortParam && validSorts.has(sortParam)) {
|
|
31
|
-
sort = sortParam as "name" | "created" | "updated"; // eslint-disable-line typescript
|
|
31
|
+
sort = sortParam as "name" | "created" | "updated"; // eslint-disable-line typescript/no-unsafe-type-assertion -- validated by Set.has()
|
|
32
32
|
}
|
|
33
33
|
const cursor = url.searchParams.get("cursor") ?? undefined;
|
|
34
34
|
const limitParam = url.searchParams.get("limit");
|
|
@@ -116,9 +116,9 @@ export const GET: APIRoute = async ({ params, request, locals, session, redirect
|
|
|
116
116
|
|
|
117
117
|
try {
|
|
118
118
|
// Get OAuth providers from environment
|
|
119
|
-
// eslint-disable-next-line typescript
|
|
119
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- locals.runtime is injected by the Cloudflare adapter at runtime; not declared on App.Locals since the adapter is optional
|
|
120
120
|
const runtimeLocals = locals as unknown as { runtime?: { env?: Record<string, unknown> } };
|
|
121
|
-
// eslint-disable-next-line typescript
|
|
121
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- import.meta.env is typed as ImportMetaEnv but we need Record<string, unknown> for getOAuthConfig
|
|
122
122
|
const env = runtimeLocals.runtime?.env ?? (import.meta.env as Record<string, unknown>);
|
|
123
123
|
const providers = getOAuthConfig(env);
|
|
124
124
|
|
|
@@ -95,9 +95,9 @@ export const GET: APIRoute = async ({ params, request, locals, redirect }) => {
|
|
|
95
95
|
|
|
96
96
|
// Get OAuth providers from environment
|
|
97
97
|
// Access via locals.runtime for Cloudflare, or import.meta.env for Node
|
|
98
|
-
// eslint-disable-next-line typescript
|
|
98
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- locals.runtime is injected by the Cloudflare adapter at runtime; not declared on App.Locals since the adapter is optional
|
|
99
99
|
const runtimeLocals = locals as unknown as { runtime?: { env?: Record<string, unknown> } };
|
|
100
|
-
// eslint-disable-next-line typescript
|
|
100
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- import.meta.env is typed as ImportMetaEnv but we need Record<string, unknown> for getOAuthConfig
|
|
101
101
|
const env = runtimeLocals.runtime?.env ?? (import.meta.env as Record<string, unknown>);
|
|
102
102
|
const providers = getOAuthConfig(env);
|
|
103
103
|
|
|
@@ -31,13 +31,13 @@ export const POST: APIRoute = async ({ params, locals, cache }) => {
|
|
|
31
31
|
}
|
|
32
32
|
const existingData =
|
|
33
33
|
existing.data && typeof existing.data === "object"
|
|
34
|
-
? // eslint-disable-next-line typescript
|
|
34
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
35
35
|
(existing.data as Record<string, unknown>)
|
|
36
36
|
: undefined;
|
|
37
37
|
// Handler returns { item, _rev } — extract the item for ownership check
|
|
38
38
|
const existingItem =
|
|
39
39
|
existingData?.item && typeof existingData.item === "object"
|
|
40
|
-
? // eslint-disable-next-line typescript
|
|
40
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
41
41
|
(existingData.item as Record<string, unknown>)
|
|
42
42
|
: existingData;
|
|
43
43
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -35,13 +35,13 @@ export const POST: APIRoute = async ({ params, locals, cache }) => {
|
|
|
35
35
|
|
|
36
36
|
const existingData =
|
|
37
37
|
existing.data && typeof existing.data === "object"
|
|
38
|
-
? // eslint-disable-next-line typescript
|
|
38
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
39
39
|
(existing.data as Record<string, unknown>)
|
|
40
40
|
: undefined;
|
|
41
41
|
// Handler returns { item, _rev } — extract the item for ownership check
|
|
42
42
|
const existingItem =
|
|
43
43
|
existingData?.item && typeof existingData.item === "object"
|
|
44
|
-
? // eslint-disable-next-line typescript
|
|
44
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
45
45
|
(existingData.item as Record<string, unknown>)
|
|
46
46
|
: existingData;
|
|
47
47
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -46,12 +46,12 @@ export const POST: APIRoute = async ({ params, request, locals, cache }) => {
|
|
|
46
46
|
|
|
47
47
|
const existingData =
|
|
48
48
|
existing.data && typeof existing.data === "object"
|
|
49
|
-
? // eslint-disable-next-line typescript
|
|
49
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
50
50
|
(existing.data as Record<string, unknown>)
|
|
51
51
|
: undefined;
|
|
52
52
|
const existingItem =
|
|
53
53
|
existingData?.item && typeof existingData.item === "object"
|
|
54
|
-
? // eslint-disable-next-line typescript
|
|
54
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
55
55
|
(existingData.item as Record<string, unknown>)
|
|
56
56
|
: existingData;
|
|
57
57
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -31,13 +31,13 @@ export const POST: APIRoute = async ({ params, locals, cache }) => {
|
|
|
31
31
|
}
|
|
32
32
|
const existingData =
|
|
33
33
|
existing.data && typeof existing.data === "object"
|
|
34
|
-
? // eslint-disable-next-line typescript
|
|
34
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
35
35
|
(existing.data as Record<string, unknown>)
|
|
36
36
|
: undefined;
|
|
37
37
|
// Handler returns { item, _rev } — extract the item for ownership check
|
|
38
38
|
const existingItem =
|
|
39
39
|
existingData?.item && typeof existingData.item === "object"
|
|
40
|
-
? // eslint-disable-next-line typescript
|
|
40
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
41
41
|
(existingData.item as Record<string, unknown>)
|
|
42
42
|
: existingData;
|
|
43
43
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -20,12 +20,12 @@ export const prerender = false;
|
|
|
20
20
|
function extractOwnership(data: unknown): { authorId: string; resolvedId: string | undefined } {
|
|
21
21
|
const obj =
|
|
22
22
|
data && typeof data === "object"
|
|
23
|
-
? // eslint-disable-next-line typescript
|
|
23
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown; narrowed by typeof
|
|
24
24
|
(data as Record<string, unknown>)
|
|
25
25
|
: undefined;
|
|
26
26
|
const item =
|
|
27
27
|
obj?.item && typeof obj.item === "object"
|
|
28
|
-
? // eslint-disable-next-line typescript
|
|
28
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof
|
|
29
29
|
(obj.item as Record<string, unknown>)
|
|
30
30
|
: obj;
|
|
31
31
|
return {
|
|
@@ -34,7 +34,7 @@ export const GET: APIRoute = async ({ params, locals }) => {
|
|
|
34
34
|
if (dbErr) return dbErr;
|
|
35
35
|
|
|
36
36
|
try {
|
|
37
|
-
const repo = new TaxonomyRepository(emdash
|
|
37
|
+
const repo = new TaxonomyRepository(emdash.db);
|
|
38
38
|
const terms = await repo.getTermsForEntry(collection, id, taxonomy);
|
|
39
39
|
|
|
40
40
|
return apiSuccess({
|
|
@@ -68,12 +68,12 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
68
68
|
const dbErr = requireDb(emdash?.db);
|
|
69
69
|
if (dbErr) return dbErr;
|
|
70
70
|
|
|
71
|
-
if (!emdash
|
|
71
|
+
if (!emdash.handleContentGet) {
|
|
72
72
|
return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// Verify the content exists before modifying its terms
|
|
76
|
-
const existing = await emdash
|
|
76
|
+
const existing = await emdash.handleContentGet(collection, id);
|
|
77
77
|
if (!existing.success) {
|
|
78
78
|
return apiError(
|
|
79
79
|
existing.error?.code ?? "NOT_FOUND",
|
|
@@ -85,13 +85,13 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
85
85
|
// Check ownership for edit permission
|
|
86
86
|
const existingData =
|
|
87
87
|
existing.data && typeof existing.data === "object"
|
|
88
|
-
? // eslint-disable-next-line typescript
|
|
88
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
89
89
|
(existing.data as Record<string, unknown>)
|
|
90
90
|
: undefined;
|
|
91
91
|
// Handler returns { item, _rev } — extract the item for ownership check
|
|
92
92
|
const existingItem =
|
|
93
93
|
existingData?.item && typeof existingData.item === "object"
|
|
94
|
-
? // eslint-disable-next-line typescript
|
|
94
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
95
95
|
(existingData.item as Record<string, unknown>)
|
|
96
96
|
: existingData;
|
|
97
97
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -107,7 +107,7 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
107
107
|
if (isParseError(body)) return body;
|
|
108
108
|
const { termIds } = body;
|
|
109
109
|
|
|
110
|
-
const repo = new TaxonomyRepository(emdash
|
|
110
|
+
const repo = new TaxonomyRepository(emdash.db);
|
|
111
111
|
|
|
112
112
|
// Verify all term IDs exist and belong to the correct taxonomy
|
|
113
113
|
for (const termId of termIds) {
|
|
@@ -41,7 +41,7 @@ export const GET: APIRoute = async ({ params, locals }) => {
|
|
|
41
41
|
if (result.success && !hasPermission(user, "content:read_drafts")) {
|
|
42
42
|
const data =
|
|
43
43
|
result.data && typeof result.data === "object"
|
|
44
|
-
? // eslint-disable-next-line typescript
|
|
44
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check
|
|
45
45
|
(result.data as Record<string, unknown>)
|
|
46
46
|
: undefined;
|
|
47
47
|
const translations = Array.isArray(data?.translations) ? data.translations : [];
|
|
@@ -32,12 +32,12 @@ export const POST: APIRoute = async ({ params, locals, cache }) => {
|
|
|
32
32
|
|
|
33
33
|
const existingData =
|
|
34
34
|
existing.data && typeof existing.data === "object"
|
|
35
|
-
? // eslint-disable-next-line typescript
|
|
35
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
36
36
|
(existing.data as Record<string, unknown>)
|
|
37
37
|
: undefined;
|
|
38
38
|
const existingItem =
|
|
39
39
|
existingData?.item && typeof existingData.item === "object"
|
|
40
|
-
? // eslint-disable-next-line typescript
|
|
40
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
41
41
|
(existingData.item as Record<string, unknown>)
|
|
42
42
|
: existingData;
|
|
43
43
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -35,12 +35,12 @@ export const GET: APIRoute = async ({ params, url, locals }) => {
|
|
|
35
35
|
if (result.success && !hasPermission(user, "content:read_drafts")) {
|
|
36
36
|
const data =
|
|
37
37
|
result.data && typeof result.data === "object"
|
|
38
|
-
? // eslint-disable-next-line typescript
|
|
38
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check
|
|
39
39
|
(result.data as Record<string, unknown>)
|
|
40
40
|
: undefined;
|
|
41
41
|
const item =
|
|
42
42
|
data?.item && typeof data.item === "object"
|
|
43
|
-
? // eslint-disable-next-line typescript
|
|
43
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check
|
|
44
44
|
(data.item as Record<string, unknown>)
|
|
45
45
|
: undefined;
|
|
46
46
|
const status = typeof item?.status === "string" ? item.status : null;
|
|
@@ -87,13 +87,13 @@ export const PUT: APIRoute = async ({ params, request, locals, cache }) => {
|
|
|
87
87
|
|
|
88
88
|
const existingData =
|
|
89
89
|
existing.data && typeof existing.data === "object"
|
|
90
|
-
? // eslint-disable-next-line typescript
|
|
90
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
91
91
|
(existing.data as Record<string, unknown>)
|
|
92
92
|
: undefined;
|
|
93
93
|
// Handler returns { item, _rev } — extract the item for ownership and ID resolution
|
|
94
94
|
const existingItem =
|
|
95
95
|
existingData?.item && typeof existingData.item === "object"
|
|
96
|
-
? // eslint-disable-next-line typescript
|
|
96
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
97
97
|
(existingData.item as Record<string, unknown>)
|
|
98
98
|
: existingData;
|
|
99
99
|
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
@@ -151,13 +151,13 @@ export const DELETE: APIRoute = async ({ params, locals, cache }) => {
|
|
|
151
151
|
|
|
152
152
|
const deleteData =
|
|
153
153
|
existing.data && typeof existing.data === "object"
|
|
154
|
-
? // eslint-disable-next-line typescript
|
|
154
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
155
155
|
(existing.data as Record<string, unknown>)
|
|
156
156
|
: undefined;
|
|
157
157
|
// Handler returns { item, _rev } — extract the item for ownership and ID resolution
|
|
158
158
|
const deleteItem =
|
|
159
159
|
deleteData?.item && typeof deleteData.item === "object"
|
|
160
|
-
? // eslint-disable-next-line typescript
|
|
160
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
161
161
|
(deleteData.item as Record<string, unknown>)
|
|
162
162
|
: deleteData;
|
|
163
163
|
const authorId = typeof deleteItem?.authorId === "string" ? deleteItem.authorId : "";
|
|
@@ -376,7 +376,7 @@ export async function importContent(
|
|
|
376
376
|
// `api/handlers/content.ts`). `HandlerResponse.data` is
|
|
377
377
|
// typed as `unknown` to avoid coupling the route surface to
|
|
378
378
|
// internal handler types, so we narrow here.
|
|
379
|
-
// eslint-disable-next-line typescript
|
|
379
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler contract documented at handleContentCreate
|
|
380
380
|
const createdItem = (createResult.data as { item: { id: string } } | undefined)?.item;
|
|
381
381
|
|
|
382
382
|
// Track translation group: the first imported post in a group
|
|
@@ -20,7 +20,7 @@ import { capitalize, sanitizeSlug, singularize, type ImportFieldDef } from "./an
|
|
|
20
20
|
|
|
21
21
|
/** Validate that a string is a known FieldType, returning undefined if not */
|
|
22
22
|
function asFieldType(value: string): FieldType | undefined {
|
|
23
|
-
// eslint-disable-next-line typescript
|
|
23
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- validated by includes check
|
|
24
24
|
return (FIELD_TYPES as readonly string[]).includes(value) ? (value as FieldType) : undefined;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -55,7 +55,7 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
55
55
|
const body = await parseBody(request, wpPrepareBody);
|
|
56
56
|
if (isParseError(body)) return body;
|
|
57
57
|
|
|
58
|
-
// eslint-disable-next-line typescript
|
|
58
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- Zod schema output narrowed to PrepareRequest
|
|
59
59
|
const result = await prepareImport(emdash.db, body as PrepareRequest);
|
|
60
60
|
|
|
61
61
|
// Invalidate the URL pattern cache when prepare adds new collections so
|
|
@@ -134,7 +134,7 @@ async function rewriteUrls(
|
|
|
134
134
|
if (!value || typeof value !== "string") continue;
|
|
135
135
|
|
|
136
136
|
try {
|
|
137
|
-
// eslint-disable-next-line typescript
|
|
137
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns unknown; validated by Array.isArray below
|
|
138
138
|
const blocks = JSON.parse(value) as PortableTextBlock[];
|
|
139
139
|
if (!Array.isArray(blocks)) continue;
|
|
140
140
|
|
|
@@ -192,11 +192,11 @@ async function rewriteUrls(
|
|
|
192
192
|
if (rowUpdated) {
|
|
193
193
|
try {
|
|
194
194
|
// Build update query dynamically
|
|
195
|
-
// eslint-disable-next-line typescript
|
|
195
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- Kysely dynamic table requires type assertion
|
|
196
196
|
let query = db.updateTable(tableName as any).where("id", "=", row.id);
|
|
197
197
|
|
|
198
198
|
for (const [key, value] of Object.entries(updates)) {
|
|
199
|
-
// eslint-disable-next-line typescript
|
|
199
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- Kysely dynamic column update requires type assertion
|
|
200
200
|
query = query.set({ [key]: value } as any);
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -60,7 +60,7 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
60
60
|
return apiError("SSRF_BLOCKED", msg, 400);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
// eslint-disable-next-line typescript
|
|
63
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- Zod schema output narrowed to WpPluginImportConfig
|
|
64
64
|
const config = body.config as unknown as WpPluginImportConfig;
|
|
65
65
|
|
|
66
66
|
// Get the WordPress plugin source
|
|
@@ -316,7 +316,7 @@ async function importContent(
|
|
|
316
316
|
|
|
317
317
|
// Track translation group: first item in a group establishes the mapping
|
|
318
318
|
if (item.translationGroup && !translationGroupMap.has(item.translationGroup)) {
|
|
319
|
-
// eslint-disable-next-line typescript
|
|
319
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler success data includes id
|
|
320
320
|
const createdData = createResult.data as { id?: string } | undefined;
|
|
321
321
|
if (createdData?.id) {
|
|
322
322
|
translationGroupMap.set(item.translationGroup, createdData.id);
|
|
@@ -136,7 +136,7 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
136
136
|
if (
|
|
137
137
|
error instanceof Error &&
|
|
138
138
|
"code" in error &&
|
|
139
|
-
// eslint-disable-next-line typescript
|
|
139
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowing error to check custom code property after "code" in error guard
|
|
140
140
|
(error as { code: string }).code === "NOT_SUPPORTED"
|
|
141
141
|
) {
|
|
142
142
|
return apiError(
|
|
@@ -24,7 +24,7 @@ export const GET: APIRoute = async ({ url, locals }) => {
|
|
|
24
24
|
const { emdash, user } = locals;
|
|
25
25
|
const dbErr = requireDb(emdash?.db);
|
|
26
26
|
if (dbErr) return dbErr;
|
|
27
|
-
const db = emdash
|
|
27
|
+
const db = emdash.db;
|
|
28
28
|
|
|
29
29
|
const denied = requirePerm(user, "redirects:read");
|
|
30
30
|
if (denied) return denied;
|
|
@@ -44,7 +44,7 @@ export const DELETE: APIRoute = async ({ locals }) => {
|
|
|
44
44
|
const { emdash, user } = locals;
|
|
45
45
|
const dbErr = requireDb(emdash?.db);
|
|
46
46
|
if (dbErr) return dbErr;
|
|
47
|
-
const db = emdash
|
|
47
|
+
const db = emdash.db;
|
|
48
48
|
|
|
49
49
|
const denied = requirePerm(user, "redirects:manage");
|
|
50
50
|
if (denied) return denied;
|
|
@@ -61,7 +61,7 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
61
61
|
const { emdash, user } = locals;
|
|
62
62
|
const dbErr = requireDb(emdash?.db);
|
|
63
63
|
if (dbErr) return dbErr;
|
|
64
|
-
const db = emdash
|
|
64
|
+
const db = emdash.db;
|
|
65
65
|
|
|
66
66
|
const denied = requirePerm(user, "redirects:manage");
|
|
67
67
|
if (denied) return denied;
|
|
@@ -18,7 +18,7 @@ export const GET: APIRoute = async ({ url, locals }) => {
|
|
|
18
18
|
const { emdash, user } = locals;
|
|
19
19
|
const dbErr = requireDb(emdash?.db);
|
|
20
20
|
if (dbErr) return dbErr;
|
|
21
|
-
const db = emdash
|
|
21
|
+
const db = emdash.db;
|
|
22
22
|
|
|
23
23
|
const denied = requirePerm(user, "redirects:read");
|
|
24
24
|
if (denied) return denied;
|
|
@@ -25,7 +25,7 @@ export const GET: APIRoute = async ({ params, locals }) => {
|
|
|
25
25
|
const { emdash, user } = locals;
|
|
26
26
|
const dbErr = requireDb(emdash?.db);
|
|
27
27
|
if (dbErr) return dbErr;
|
|
28
|
-
const db = emdash
|
|
28
|
+
const db = emdash.db;
|
|
29
29
|
const { id } = params;
|
|
30
30
|
|
|
31
31
|
const denied = requirePerm(user, "redirects:read");
|
|
@@ -47,7 +47,7 @@ export const PUT: APIRoute = async ({ params, request, locals }) => {
|
|
|
47
47
|
const { emdash, user } = locals;
|
|
48
48
|
const dbErr = requireDb(emdash?.db);
|
|
49
49
|
if (dbErr) return dbErr;
|
|
50
|
-
const db = emdash
|
|
50
|
+
const db = emdash.db;
|
|
51
51
|
const { id } = params;
|
|
52
52
|
|
|
53
53
|
const denied = requirePerm(user, "redirects:manage");
|
|
@@ -73,7 +73,7 @@ export const DELETE: APIRoute = async ({ params, locals }) => {
|
|
|
73
73
|
const { emdash, user } = locals;
|
|
74
74
|
const dbErr = requireDb(emdash?.db);
|
|
75
75
|
if (dbErr) return dbErr;
|
|
76
|
-
const db = emdash
|
|
76
|
+
const db = emdash.db;
|
|
77
77
|
const { id } = params;
|
|
78
78
|
|
|
79
79
|
const denied = requirePerm(user, "redirects:manage");
|
|
@@ -20,7 +20,7 @@ export const GET: APIRoute = async ({ url, locals }) => {
|
|
|
20
20
|
const { emdash, user } = locals;
|
|
21
21
|
const dbErr = requireDb(emdash?.db);
|
|
22
22
|
if (dbErr) return dbErr;
|
|
23
|
-
const db = emdash
|
|
23
|
+
const db = emdash.db;
|
|
24
24
|
|
|
25
25
|
const denied = requirePerm(user, "redirects:read");
|
|
26
26
|
if (denied) return denied;
|
|
@@ -40,7 +40,7 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
40
40
|
const { emdash, user } = locals;
|
|
41
41
|
const dbErr = requireDb(emdash?.db);
|
|
42
42
|
if (dbErr) return dbErr;
|
|
43
|
-
const db = emdash
|
|
43
|
+
const db = emdash.db;
|
|
44
44
|
|
|
45
45
|
const denied = requirePerm(user, "redirects:manage");
|
|
46
46
|
if (denied) return denied;
|
|
@@ -32,7 +32,7 @@ export const GET: APIRoute = async ({ params, locals }) => {
|
|
|
32
32
|
const denied = requirePerm(user, "schema:read");
|
|
33
33
|
if (denied) return denied;
|
|
34
34
|
|
|
35
|
-
const result = await handleSchemaFieldGet(emdash
|
|
35
|
+
const result = await handleSchemaFieldGet(emdash.db, collectionSlug, fieldSlug);
|
|
36
36
|
return unwrapResult(result);
|
|
37
37
|
};
|
|
38
38
|
|
|
@@ -50,9 +50,9 @@ export const PUT: APIRoute = async ({ params, request, locals }) => {
|
|
|
50
50
|
const body = await parseBody(request, updateFieldBody);
|
|
51
51
|
if (isParseError(body)) return body;
|
|
52
52
|
|
|
53
|
-
// eslint-disable-next-line typescript
|
|
53
|
+
// eslint-disable-next-line typescript/no-unsafe-type-assertion -- body is Zod-validated via parseBody(request, updateFieldBody) above
|
|
54
54
|
const result = await handleSchemaFieldUpdate(
|
|
55
|
-
emdash
|
|
55
|
+
emdash.db,
|
|
56
56
|
collectionSlug,
|
|
57
57
|
fieldSlug,
|
|
58
58
|
body as UpdateFieldInput,
|
|
@@ -71,6 +71,6 @@ export const DELETE: APIRoute = async ({ params, locals }) => {
|
|
|
71
71
|
const denied = requirePerm(user, "schema:manage");
|
|
72
72
|
if (denied) return denied;
|
|
73
73
|
|
|
74
|
-
const result = await handleSchemaFieldDelete(emdash
|
|
74
|
+
const result = await handleSchemaFieldDelete(emdash.db, collectionSlug, fieldSlug);
|
|
75
75
|
return unwrapResult(result);
|
|
76
76
|
};
|
|
@@ -26,7 +26,7 @@ export const GET: APIRoute = async ({ params, locals }) => {
|
|
|
26
26
|
const denied = requirePerm(user, "schema:read");
|
|
27
27
|
if (denied) return denied;
|
|
28
28
|
|
|
29
|
-
const result = await handleSchemaFieldList(emdash
|
|
29
|
+
const result = await handleSchemaFieldList(emdash.db, collectionSlug);
|
|
30
30
|
return unwrapResult(result);
|
|
31
31
|
};
|
|
32
32
|
|
|
@@ -43,10 +43,6 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
43
43
|
const body = await parseBody(request, createFieldBody);
|
|
44
44
|
if (isParseError(body)) return body;
|
|
45
45
|
|
|
46
|
-
const result = await handleSchemaFieldCreate(
|
|
47
|
-
emdash!.db,
|
|
48
|
-
collectionSlug,
|
|
49
|
-
body as CreateFieldInput,
|
|
50
|
-
);
|
|
46
|
+
const result = await handleSchemaFieldCreate(emdash.db, collectionSlug, body as CreateFieldInput);
|
|
51
47
|
return unwrapResult(result, 201);
|
|
52
48
|
};
|
|
@@ -27,6 +27,6 @@ export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
|
27
27
|
const body = await parseBody(request, fieldReorderBody);
|
|
28
28
|
if (isParseError(body)) return body;
|
|
29
29
|
|
|
30
|
-
const result = await handleSchemaFieldReorder(emdash
|
|
30
|
+
const result = await handleSchemaFieldReorder(emdash.db, collectionSlug, body.fieldSlugs);
|
|
31
31
|
return unwrapResult(result);
|
|
32
32
|
};
|