emdash 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{activation-Dim4YMM7.mjs → activation-CGlyigmg.mjs} +3 -3
- package/dist/{activation-Dim4YMM7.mjs.map → activation-CGlyigmg.mjs.map} +1 -1
- package/dist/{adapters-F_xorvWv.d.mts → adapters-D9a1PfqH.d.mts} +1 -1
- package/dist/{adapters-F_xorvWv.d.mts.map → adapters-D9a1PfqH.d.mts.map} +1 -1
- package/dist/{after-PcEvMY_6.mjs → after-32yNRvd2.mjs} +5 -2
- package/dist/{after-PcEvMY_6.mjs.map → after-32yNRvd2.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +4 -4
- package/dist/api/route-utils.mjs +50 -49
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +7 -7
- package/dist/{api-D-7BNHoz.mjs → api--PYoyeTo.mjs} +121 -48
- package/dist/api--PYoyeTo.mjs.map +1 -0
- package/dist/api-tokens-DqSlkDVI.mjs +9 -0
- package/dist/api-tokens-DqSlkDVI.mjs.map +1 -0
- package/dist/{api-tokens-Bx38ZCQp.mjs → api-tokens-GNCsIegW.mjs} +3 -3
- package/dist/{api-tokens-Bx38ZCQp.mjs.map → api-tokens-GNCsIegW.mjs.map} +1 -1
- package/dist/{apply-T7ATgzCh.mjs → apply-DVnupNeS.mjs} +149 -91
- package/dist/apply-DVnupNeS.mjs.map +1 -0
- package/dist/{approvals-D-m6wvGl.mjs → approvals-DTtYSB27.mjs} +2 -2
- package/dist/{approvals-D-m6wvGl.mjs.map → approvals-DTtYSB27.mjs.map} +1 -1
- package/dist/{artifacts-htGyfCSt.mjs → artifacts-Dvdp2KK-.mjs} +29 -13
- package/dist/artifacts-Dvdp2KK-.mjs.map +1 -0
- package/dist/astro/image-endpoint.mjs +12 -2
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +15 -14
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +59 -8
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +13 -12
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +10 -8
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +129 -49
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +18 -9
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware.d.mts +13 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +111 -101
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +11 -11
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +11 -11
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +14 -14
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +14 -14
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +14 -14
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -25
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -25
- package/dist/astro/routes/api/admin/bylines/index.mjs +25 -25
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/bulk.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/index.mjs +16 -16
- package/dist/astro/routes/api/admin/core-update.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +18 -18
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +22 -21
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +26 -25
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -19
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -19
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -65
- 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 +66 -65
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +66 -65
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +73 -72
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +66 -65
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +66 -65
- 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 +73 -72
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +66 -65
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +66 -65
- 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 +74 -73
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +68 -67
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -66
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -65
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +66 -65
- 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 +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +66 -65
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +3 -3
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +33 -32
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +33 -32
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +36 -35
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +36 -35
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +36 -35
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +37 -36
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +37 -36
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +37 -36
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +37 -36
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +35 -34
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +37 -36
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +12 -12
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +11 -11
- package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
- package/dist/astro/routes/api/auth/handover.mjs +5 -5
- package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +15 -15
- package/dist/astro/routes/api/auth/invite/index.mjs +12 -12
- package/dist/astro/routes/api/auth/invite/register-options.mjs +13 -13
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -14
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +13 -13
- package/dist/astro/routes/api/auth/me.mjs +12 -12
- package/dist/astro/routes/api/auth/mode.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.mjs +15 -15
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +13 -13
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +13 -13
- package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -15
- package/dist/astro/routes/api/auth/signup/complete.mjs +15 -15
- package/dist/astro/routes/api/auth/signup/request.mjs +13 -13
- package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
- package/dist/astro/routes/api/calendar.mjs +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +29 -28
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +34 -33
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -33
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +35 -27
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +8 -4
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/index.mjs +12 -12
- package/dist/astro/routes/api/content/_collection_/trash.mjs +12 -12
- package/dist/astro/routes/api/dashboard.mjs +22 -16
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +3 -3
- package/dist/astro/routes/api/dev/scheduled-tasks.mjs +97 -95
- package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -1
- package/dist/astro/routes/api/health.mjs +4 -4
- package/dist/astro/routes/api/import/probe.d.mts +4 -3
- package/dist/astro/routes/api/import/probe.d.mts.map +1 -1
- package/dist/astro/routes/api/import/probe.mjs +27 -25
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts +4 -3
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -29
- package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -13
- package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +29 -29
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -12
- package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +14 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +14 -13
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +25 -24
- 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 +27 -25
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +14 -13
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +39 -38
- 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 +99 -83
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +16 -16
- package/dist/astro/routes/api/media/_id_/replace.mjs +12 -12
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +28 -27
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +26 -25
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -5
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +62 -8
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.mjs +13 -13
- package/dist/astro/routes/api/media/folders/index.mjs +13 -13
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
- package/dist/astro/routes/api/media/providers/index.mjs +4 -4
- package/dist/astro/routes/api/media/upload-url.mjs +15 -15
- package/dist/astro/routes/api/media.mjs +30 -29
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -15
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +17 -15
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -15
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -15
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +17 -15
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +17 -15
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +2 -2
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +5 -5
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
- package/dist/astro/routes/api/openapi.json.mjs +12 -12
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +9 -9
- package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +21 -20
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +21 -20
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +34 -33
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +34 -33
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +15 -15
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +66 -65
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +66 -65
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/index.mjs +66 -65
- package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +66 -65
- 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 +66 -65
- 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 +66 -65
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +66 -65
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +66 -65
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +66 -65
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +17 -16
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +66 -65
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +66 -65
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +20 -18
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +19 -17
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +20 -18
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +13 -11
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +19 -17
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +19 -17
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +19 -17
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/domain-notify.mjs +7 -7
- package/dist/astro/routes/api/settings/domain.mjs +19 -17
- package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +25 -23
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +18 -18
- package/dist/astro/routes/api/setup/admin.mjs +14 -14
- package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -44
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +48 -47
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +4 -4
- package/dist/astro/routes/api/site/domain-proof.mjs +17 -15
- package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
- package/dist/astro/routes/api/snapshot.mjs +9 -9
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -34
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +25 -24
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/visual-editing/action-token.mjs +5 -5
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +17 -17
- package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +24 -13
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +22 -17
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +21 -17
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +14 -10
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +21 -17
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +3 -3
- package/dist/astro/routes/robots.txt.mjs +16 -14
- package/dist/astro/routes/robots.txt.mjs.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +18 -16
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +16 -14
- package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
- package/dist/astro/types.d.mts +22 -20
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/{audit-_gieLVGU.mjs → audit-B8XE-0UV.mjs} +2 -2
- package/dist/{audit-_gieLVGU.mjs.map → audit-B8XE-0UV.mjs.map} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/auth/providers/microsoft.d.mts +1 -1
- package/dist/{authorize-DPFBGbE6.mjs → authorize-NJgp8kLI.mjs} +2 -2
- package/dist/{authorize-DPFBGbE6.mjs.map → authorize-NJgp8kLI.mjs.map} +1 -1
- package/dist/{backup-3FgVxiDJ.mjs → backup-8rPSJ28a.mjs} +4 -4
- package/dist/{backup-3FgVxiDJ.mjs.map → backup-8rPSJ28a.mjs.map} +1 -1
- package/dist/{block-types-CYcG56JB.mjs → block-types-BbOrfnWs.mjs} +5 -5
- package/dist/{block-types-CYcG56JB.mjs.map → block-types-BbOrfnWs.mjs.map} +1 -1
- package/dist/{block-values-gCX4HBSl.mjs → block-values-Dg0-8PPS.mjs} +4 -4
- package/dist/{block-values-gCX4HBSl.mjs.map → block-values-Dg0-8PPS.mjs.map} +1 -1
- package/dist/{byline-BR1qhyiw.mjs → byline-DHJS-GGb.mjs} +123 -38
- package/dist/byline-DHJS-GGb.mjs.map +1 -0
- package/dist/{byline-fields-BLXZnX7N.mjs → byline-fields-CiR8FvvF.mjs} +3 -3
- package/dist/{byline-fields-BLXZnX7N.mjs.map → byline-fields-CiR8FvvF.mjs.map} +1 -1
- package/dist/{byline-fields-4ClDC88c.mjs → byline-fields-D6KYsEa7.mjs} +2 -2
- package/dist/{byline-fields-4ClDC88c.mjs.map → byline-fields-D6KYsEa7.mjs.map} +1 -1
- package/dist/{byline-registry-dvt4N3xV.mjs → byline-registry-BhzpO41z.mjs} +3 -3
- package/dist/{byline-registry-dvt4N3xV.mjs.map → byline-registry-BhzpO41z.mjs.map} +1 -1
- package/dist/{bylines-CVOvRUL7.mjs → bylines-Bsg5cH4S.mjs} +7 -7
- package/dist/bylines-Bsg5cH4S.mjs.map +1 -0
- package/dist/{bylines-DxOs9B7z.mjs → bylines-f_ZEc6Sn.mjs} +8 -8
- package/dist/{bylines-DxOs9B7z.mjs.map → bylines-f_ZEc6Sn.mjs.map} +1 -1
- package/dist/{cache-CEU9wo_h.mjs → cache-5DHbpEWu.mjs} +4 -4
- package/dist/{cache-CEU9wo_h.mjs.map → cache-5DHbpEWu.mjs.map} +1 -1
- package/dist/{capture-triggers-CT6dK9zd.mjs → capture-triggers-BezAvWcB.mjs} +2 -2
- package/dist/{capture-triggers-CT6dK9zd.mjs.map → capture-triggers-BezAvWcB.mjs.map} +1 -1
- package/dist/{challenge-store-C17BYx2-.mjs → challenge-store-B1C0V4b3.mjs} +1 -1
- package/dist/{challenge-store-C17BYx2-.mjs.map → challenge-store-B1C0V4b3.mjs.map} +1 -1
- package/dist/{chunks-xC4UD5-S.mjs → chunks-DiW8VMwz.mjs} +2 -2
- package/dist/{chunks-xC4UD5-S.mjs.map → chunks-DiW8VMwz.mjs.map} +1 -1
- package/dist/cli/index.mjs +53 -52
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +61 -61
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +3 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-slugs-cache-e09QeJQt.mjs → collection-slugs-cache-DIrLjqH-.mjs} +20 -14
- package/dist/collection-slugs-cache-DIrLjqH-.mjs.map +1 -0
- package/dist/{comment-UvIWDKcW.mjs → comment-DB74Zpa4.mjs} +18 -8
- package/dist/comment-DB74Zpa4.mjs.map +1 -0
- package/dist/{comment-reaction-dGp6_FRo.mjs → comment-reaction-BScxIWUn.mjs} +2 -2
- package/dist/{comment-reaction-dGp6_FRo.mjs.map → comment-reaction-BScxIWUn.mjs.map} +1 -1
- package/dist/{comments-pej-_BUO.mjs → comments-Cor_zKml.mjs} +3 -3
- package/dist/{comments-pej-_BUO.mjs.map → comments-Cor_zKml.mjs.map} +1 -1
- package/dist/config-Cs_AwWXI.mjs +106 -0
- package/dist/config-Cs_AwWXI.mjs.map +1 -0
- package/dist/{config-CFMojMFK.d.mts → config-D44_8G9J.d.mts} +3 -1
- package/dist/config-D44_8G9J.d.mts.map +1 -0
- package/dist/{config-Bsm_u_oE.d.mts → config-sDhZvkLR.d.mts} +56 -20
- package/dist/config-sDhZvkLR.d.mts.map +1 -0
- package/dist/{content-DQSRZTVw.mjs → content-BKHUVsE5.mjs} +67 -30
- package/dist/content-BKHUVsE5.mjs.map +1 -0
- package/dist/{content-list-query-CYKcY6Vi.d.mts → content-list-query-ByP4jRpZ.d.mts} +1 -1
- package/dist/{content-list-query-CYKcY6Vi.d.mts.map → content-list-query-ByP4jRpZ.d.mts.map} +1 -1
- package/dist/{content-policy-Dm32n9C6.mjs → content-policy-BmE0MPZY.mjs} +1 -1
- package/dist/{content-policy-Dm32n9C6.mjs.map → content-policy-BmE0MPZY.mjs.map} +1 -1
- package/dist/{content-repair-DNh5--x5.mjs → content-repair-Ukdxoq-R.mjs} +4 -4
- package/dist/{content-repair-DNh5--x5.mjs.map → content-repair-Ukdxoq-R.mjs.map} +1 -1
- package/dist/{context-BYptmCN0.mjs → context-CzjejcsE.mjs} +32 -33
- package/dist/context-CzjejcsE.mjs.map +1 -0
- package/dist/{credits-B9iORdWB.mjs → credits-BKREepht.mjs} +3 -3
- package/dist/{credits-B9iORdWB.mjs.map → credits-BKREepht.mjs.map} +1 -1
- package/dist/{dashboard-D0jcgBD7.mjs → dashboard-ynr1qJWM.mjs} +10 -9
- package/dist/dashboard-ynr1qJWM.mjs.map +1 -0
- package/dist/database/migration-lock.mjs +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +3 -3
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +5 -5
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +5 -5
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +5 -5
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{db-errors-CBD5yMro.mjs → db-errors-unnO6yiZ.mjs} +12 -2
- package/dist/db-errors-unnO6yiZ.mjs.map +1 -0
- package/dist/deferred-tasks-wlMFJL95.d.mts +10 -0
- package/dist/deferred-tasks-wlMFJL95.d.mts.map +1 -0
- package/dist/{destination-r2zIAZ2S.mjs → destination-DR3IHjmy.mjs} +1 -1
- package/dist/{destination-r2zIAZ2S.mjs.map → destination-DR3IHjmy.mjs.map} +1 -1
- package/dist/{device-flow-BkFKBoAn.mjs → device-flow-D1U392GC.mjs} +3 -5
- package/dist/device-flow-D1U392GC.mjs.map +1 -0
- package/dist/{dialect-helpers-7_IqPdh9.mjs → dialect-helpers-B1XN2HGB.mjs} +10 -3
- package/dist/dialect-helpers-B1XN2HGB.mjs.map +1 -0
- package/dist/{direct-executor-Cbxzg4qe.mjs → direct-executor-Bs2g0ake.mjs} +4 -4
- package/dist/{direct-executor-Cbxzg4qe.mjs.map → direct-executor-Bs2g0ake.mjs.map} +1 -1
- package/dist/{dist-Cfu8mMBs.mjs → dist-BUmWMTbN.mjs} +1 -1
- package/dist/{dist-Cfu8mMBs.mjs.map → dist-BUmWMTbN.mjs.map} +1 -1
- package/dist/{email-locale-BJ8DjTzZ.mjs → email-locale-Bs3HFdnq.mjs} +1 -1
- package/dist/{email-locale-BJ8DjTzZ.mjs.map → email-locale-Bs3HFdnq.mjs.map} +1 -1
- package/dist/{emdash-runtime-DVi7vtXC.mjs → emdash-runtime-C8T-pZpS.mjs} +108 -62
- package/dist/emdash-runtime-C8T-pZpS.mjs.map +1 -0
- package/dist/{enrich-Duu4sV3a.mjs → enrich-DFlfnd3u.mjs} +3 -3
- package/dist/{enrich-Duu4sV3a.mjs.map → enrich-DFlfnd3u.mjs.map} +1 -1
- package/dist/{entry-lock-C7VX0NGK.d.mts → entry-lock-BulbgPBX.d.mts} +23 -23
- package/dist/{entry-lock-C7VX0NGK.d.mts.map → entry-lock-BulbgPBX.d.mts.map} +1 -1
- package/dist/{entry-lock-Df6-XhIu.mjs → entry-lock-CRVmruM0.mjs} +4 -4
- package/dist/{entry-lock-Df6-XhIu.mjs.map → entry-lock-CRVmruM0.mjs.map} +1 -1
- package/dist/{entry-lock-DLxCffFW.mjs → entry-lock-D-zJQ4q6.mjs} +3 -3
- package/dist/{entry-lock-DLxCffFW.mjs.map → entry-lock-D-zJQ4q6.mjs.map} +1 -1
- package/dist/{entry-locks-DJAqVweV.mjs → entry-locks-CJ9uhqg1.mjs} +2 -2
- package/dist/{entry-locks-DJAqVweV.mjs.map → entry-locks-CJ9uhqg1.mjs.map} +1 -1
- package/dist/{env-types-C3FCVBWe.mjs → env-types-BE3bCvfP.mjs} +5 -5
- package/dist/{env-types-C3FCVBWe.mjs.map → env-types-BE3bCvfP.mjs.map} +1 -1
- package/dist/{error-CVWeIOku.mjs → error-BCMgPxdn.mjs} +3 -3
- package/dist/{error-CVWeIOku.mjs.map → error-BCMgPxdn.mjs.map} +1 -1
- package/dist/{errors-BOYNdIo3.mjs → errors-8gJqv-XV.mjs} +15 -2
- package/dist/{errors-BOYNdIo3.mjs.map → errors-8gJqv-XV.mjs.map} +1 -1
- package/dist/{fence-C3MUitUN.mjs → fence-Dagicj14.mjs} +4 -4
- package/dist/{fence-C3MUitUN.mjs.map → fence-Dagicj14.mjs.map} +1 -1
- package/dist/{field-map-Bft9LKak.mjs → field-map-BSXdNGt5.mjs} +11 -10
- package/dist/field-map-BSXdNGt5.mjs.map +1 -0
- package/dist/{focal-point-JX8kcOTQ.mjs → focal-point-CgCcr1Ca.mjs} +1 -1
- package/dist/{focal-point-JX8kcOTQ.mjs.map → focal-point-CgCcr1Ca.mjs.map} +1 -1
- package/dist/{fts-manager-Beg3e4bI.mjs → fts-manager-6861qcwk.mjs} +68 -22
- package/dist/fts-manager-6861qcwk.mjs.map +1 -0
- package/dist/{gc-ByyAYiYE.mjs → gc-CNkXB3mE.mjs} +8 -8
- package/dist/{gc-ByyAYiYE.mjs.map → gc-CNkXB3mE.mjs.map} +1 -1
- package/dist/{hook-result-BrdLyOdI.d.mts → hook-result-f8t7hIuu.d.mts} +1 -1
- package/dist/{hook-result-BrdLyOdI.d.mts.map → hook-result-f8t7hIuu.d.mts.map} +1 -1
- package/dist/{hreflang-CY_F5OjF.d.mts → hreflang-8dUOJAPJ.d.mts} +2 -2
- package/dist/{hreflang-CY_F5OjF.d.mts.map → hreflang-8dUOJAPJ.d.mts.map} +1 -1
- package/dist/{hreflang-C8Jb-hrf.mjs → hreflang-BW5A4FLK.mjs} +8 -8
- package/dist/{hreflang-C8Jb-hrf.mjs.map → hreflang-BW5A4FLK.mjs.map} +1 -1
- package/dist/{http-route-dispatch-CyeW6iPv.mjs → http-route-dispatch-rXKvTNm9.mjs} +5 -5
- package/dist/{http-route-dispatch-CyeW6iPv.mjs.map → http-route-dispatch-rXKvTNm9.mjs.map} +1 -1
- package/dist/{identity-Cael5uTT.mjs → identity-CPRRSovU.mjs} +3 -3
- package/dist/{identity-Cael5uTT.mjs.map → identity-CPRRSovU.mjs.map} +1 -1
- package/dist/{import-BUXjdZUn.mjs → import-yVbfPyfd.mjs} +5 -5
- package/dist/{import-BUXjdZUn.mjs.map → import-yVbfPyfd.mjs.map} +1 -1
- package/dist/index-VM7Fzxwe.d.mts +260 -0
- package/dist/index-VM7Fzxwe.d.mts.map +1 -0
- package/dist/index.d.mts +25 -24
- package/dist/index.mjs +89 -88
- package/dist/{install-finalization-3JX5qQEA.mjs → install-finalization-RU6VrHOX.mjs} +1 -1
- package/dist/{install-finalization-3JX5qQEA.mjs.map → install-finalization-RU6VrHOX.mjs.map} +1 -1
- package/dist/{json-recordset-BUjxhr77.mjs → json-recordset-D0WhN2UA.mjs} +2 -2
- package/dist/{json-recordset-BUjxhr77.mjs.map → json-recordset-D0WhN2UA.mjs.map} +1 -1
- package/dist/{lifecycle-7vUJeFRe.mjs → lifecycle-B8d7Rdqx.mjs} +1 -1
- package/dist/{lifecycle-7vUJeFRe.mjs.map → lifecycle-B8d7Rdqx.mjs.map} +1 -1
- package/dist/{load-CdAG9wz-.mjs → load-D4xtzm6h.mjs} +2 -2
- package/dist/{load-CdAG9wz-.mjs.map → load-D4xtzm6h.mjs.map} +1 -1
- package/dist/{loader-CswroUbe.mjs → loader-DhnedqY4.mjs} +199 -101
- package/dist/loader-DhnedqY4.mjs.map +1 -0
- package/dist/{loops-uA4iTOzd.mjs → loops-B2YS-Zzr.mjs} +2 -2
- package/dist/{loops-uA4iTOzd.mjs.map → loops-B2YS-Zzr.mjs.map} +1 -1
- package/dist/{manifest-builder-B8zjuH3f.mjs → manifest-builder-g1FLviel.mjs} +10 -3
- package/dist/manifest-builder-g1FLviel.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +3 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +17 -8
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +7 -6
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +15 -14
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +20 -15
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-1WC65OCB.mjs → media-BR4_t-Wd.mjs} +3 -3
- package/dist/{media-1WC65OCB.mjs.map → media-BR4_t-Wd.mjs.map} +1 -1
- package/dist/{media--dJRU6i2.mjs → media-CikS-q6E.mjs} +4 -4
- package/dist/{media--dJRU6i2.mjs.map → media-CikS-q6E.mjs.map} +1 -1
- package/dist/{media-Bws9f18T.mjs → media-DepNLhPq.mjs} +14 -4
- package/dist/media-DepNLhPq.mjs.map +1 -0
- package/dist/{media-allowlist-BJB7MFx6.mjs → media-allowlist-BMBLqyWh.mjs} +2 -2
- package/dist/{media-allowlist-BJB7MFx6.mjs.map → media-allowlist-BMBLqyWh.mjs.map} +1 -1
- package/dist/{media-folders-Dn3C16B8.mjs → media-folders-CI0Wydfo.mjs} +2 -2
- package/dist/{media-folders-Dn3C16B8.mjs.map → media-folders-CI0Wydfo.mjs.map} +1 -1
- package/dist/{media-usage-CF0WVcLO.mjs → media-usage-X1_20MY-.mjs} +8 -8
- package/dist/{media-usage-CF0WVcLO.mjs.map → media-usage-X1_20MY-.mjs.map} +1 -1
- package/dist/{media-usage-activation-C9HwVw5w.mjs → media-usage-activation-bWusy3M2.mjs} +3 -3
- package/dist/{media-usage-activation-C9HwVw5w.mjs.map → media-usage-activation-bWusy3M2.mjs.map} +1 -1
- package/dist/{media-usage-work-m3AWTmmC.mjs → media-usage-work-B2RaoJIa.mjs} +4 -4
- package/dist/{media-usage-work-m3AWTmmC.mjs.map → media-usage-work-B2RaoJIa.mjs.map} +1 -1
- package/dist/{media-usage-work-CkLa5-nc.mjs → media-usage-work-BCK2J-v_.mjs} +7 -7
- package/dist/{media-usage-work-CkLa5-nc.mjs.map → media-usage-work-BCK2J-v_.mjs.map} +1 -1
- package/dist/{menus-BCVSSp1z.mjs → menus-B0Qqv_cS.mjs} +176 -92
- package/dist/menus-B0Qqv_cS.mjs.map +1 -0
- package/dist/{menus-Cl4kwdt7.mjs → menus-oypxT1pI.mjs} +134 -53
- package/dist/menus-oypxT1pI.mjs.map +1 -0
- package/dist/{menus-BSzwObhV.mjs → menus-uEAxWAm1.mjs} +3 -3
- package/dist/{menus-BSzwObhV.mjs.map → menus-uEAxWAm1.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +5 -5
- package/dist/{mime-B5M9R53H.mjs → mime-D1We9jUx.mjs} +1 -1
- package/dist/{mime-B5M9R53H.mjs.map → mime-D1We9jUx.mjs.map} +1 -1
- package/dist/{normalize-BuWa0lvd.mjs → normalize-Cx-bNwhP.mjs} +41 -12
- package/dist/normalize-Cx-bNwhP.mjs.map +1 -0
- package/dist/{oauth-authorization-TpEJrYB7.mjs → oauth-authorization-CPLgBrdo.mjs} +19 -6
- package/dist/oauth-authorization-CPLgBrdo.mjs.map +1 -0
- package/dist/{oauth-state-store-CHMn_mwc.mjs → oauth-state-store-BndCfRum.mjs} +1 -1
- package/dist/{oauth-state-store-CHMn_mwc.mjs.map → oauth-state-store-BndCfRum.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-Bo6DGaC9.mjs → object-cache-DmKr09La.mjs} +21 -4
- package/dist/{object-cache-Bo6DGaC9.mjs.map → object-cache-DmKr09La.mjs.map} +1 -1
- package/dist/{options-DJWaq3Ie.d.mts → options-BUUgroHg.d.mts} +3 -3
- package/dist/{options-DJWaq3Ie.d.mts.map → options-BUUgroHg.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +16 -14
- package/dist/page/index.mjs.map +1 -1
- package/dist/{parse-DgQ2NABT.mjs → parse-B_b6gZxG.mjs} +2 -2
- package/dist/{parse-DgQ2NABT.mjs.map → parse-B_b6gZxG.mjs.map} +1 -1
- package/dist/{parse-CWHOFc6z.d.mts → parse-Dndx1QmN.d.mts} +3 -3
- package/dist/{parse-CWHOFc6z.d.mts.map → parse-Dndx1QmN.d.mts.map} +1 -1
- package/dist/{passkey-config-D0kdzEao.mjs → passkey-config-D2Lua5__.mjs} +1 -1
- package/dist/{passkey-config-D0kdzEao.mjs.map → passkey-config-D2Lua5__.mjs.map} +1 -1
- package/dist/{patterns-CMNnYCgf.mjs → patterns-CryGz_EV.mjs} +1 -1
- package/dist/{patterns-CMNnYCgf.mjs.map → patterns-CryGz_EV.mjs.map} +1 -1
- package/dist/{placeholder-D41vk11_.d.mts → placeholder-CSKu5OkD.d.mts} +9 -1
- package/dist/placeholder-CSKu5OkD.d.mts.map +1 -0
- package/dist/plugin-test-runtime.d.mts +17 -15
- package/dist/plugin-test-runtime.d.mts.map +1 -1
- package/dist/plugin-test-runtime.mjs +99 -98
- package/dist/plugin-types.d.mts +2 -2
- package/dist/plugin-utils.d.mts +13 -12
- package/dist/plugin-utils.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +13 -12
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/host.d.mts +5 -5
- package/dist/plugins/host.mjs +48 -47
- package/dist/{policy-DLQ--Hnm.mjs → policy-BPugqmeV.mjs} +13 -5
- package/dist/policy-BPugqmeV.mjs.map +1 -0
- package/dist/{protocol-79kUO7jP.d.mts → protocol-PoAfD_9W.d.mts} +2 -2
- package/dist/{protocol-79kUO7jP.d.mts.map → protocol-PoAfD_9W.d.mts.map} +1 -1
- package/dist/{public-plugin-api-routes-BuAMJ8nN.mjs → public-plugin-api-routes-CMljrTby.mjs} +9 -9
- package/dist/{public-plugin-api-routes-BuAMJ8nN.mjs.map → public-plugin-api-routes-CMljrTby.mjs.map} +1 -1
- package/dist/{public-submission-Di3TsgzX.mjs → public-submission-ayqoyee4.mjs} +10 -10
- package/dist/{public-submission-Di3TsgzX.mjs.map → public-submission-ayqoyee4.mjs.map} +1 -1
- package/dist/query-BFHjCzSh.mjs +37 -0
- package/dist/query-BFHjCzSh.mjs.map +1 -0
- package/dist/{query-CpnRlBh8.mjs → query-D62NntCZ.mjs} +55 -65
- package/dist/query-D62NntCZ.mjs.map +1 -0
- package/dist/{query-haKvLAWl.mjs → query-LmPY2y0C.mjs} +5 -5
- package/dist/{query-haKvLAWl.mjs.map → query-LmPY2y0C.mjs.map} +1 -1
- package/dist/{rate-limit-Xp4d0NBY.mjs → rate-limit-C04Llsoc.mjs} +3 -3
- package/dist/{rate-limit-Xp4d0NBY.mjs.map → rate-limit-C04Llsoc.mjs.map} +1 -1
- package/dist/{redirect-DiS_3mA4.mjs → redirect-DjLdw427.mjs} +6 -6
- package/dist/{redirect-DiS_3mA4.mjs.map → redirect-DjLdw427.mjs.map} +1 -1
- package/dist/{redirect-paths-CNYq7w80.mjs → redirect-paths-DOaVBp6E.mjs} +1 -1
- package/dist/{redirect-paths-CNYq7w80.mjs.map → redirect-paths-DOaVBp6E.mjs.map} +1 -1
- package/dist/{redirects-BHpy-VsZ.mjs → redirects-Cpq1catN.mjs} +6 -6
- package/dist/{redirects-BHpy-VsZ.mjs.map → redirects-Cpq1catN.mjs.map} +1 -1
- package/dist/{redirects-BEVSRMa2.mjs → redirects-CyvvZrCJ.mjs} +2 -2
- package/dist/{redirects-BEVSRMa2.mjs.map → redirects-CyvvZrCJ.mjs.map} +1 -1
- package/dist/{registry-TUVaid9Z.mjs → registry-B0-O575m.mjs} +25 -20
- package/dist/registry-B0-O575m.mjs.map +1 -0
- package/dist/{relations-CA_QuMTU.mjs → relations-WIOojTL4.mjs} +24 -11
- package/dist/relations-WIOojTL4.mjs.map +1 -0
- package/dist/{request-cache-C4CIo5ad.mjs → request-cache-5z2WzWmh.mjs} +1 -1
- package/dist/{request-cache-C4CIo5ad.mjs.map → request-cache-5z2WzWmh.mjs.map} +1 -1
- package/dist/request-context.d.mts +12 -1
- package/dist/request-context.d.mts.map +1 -1
- package/dist/request-context.mjs.map +1 -1
- package/dist/{resolve-DwNM-CXl.mjs → resolve-BNnm8EkB.mjs} +14 -13
- package/dist/{resolve-DwNM-CXl.mjs.map → resolve-BNnm8EkB.mjs.map} +1 -1
- package/dist/{resolve-D-kqyKns.mjs → resolve-DdNXBJSr.mjs} +4 -4
- package/dist/resolve-DdNXBJSr.mjs.map +1 -0
- package/dist/{revision-BVp8S0e_.mjs → revision-Dx7Uth1X.mjs} +5 -5
- package/dist/{revision-BVp8S0e_.mjs.map → revision-Dx7Uth1X.mjs.map} +1 -1
- package/dist/{routes-BerZFrvV.mjs → routes-avqgc-8r.mjs} +3 -3
- package/dist/{routes-BerZFrvV.mjs.map → routes-avqgc-8r.mjs.map} +1 -1
- package/dist/{runner-C5NeAkBQ.mjs → runner-Bkkfk4O8.mjs} +78 -4
- package/dist/runner-Bkkfk4O8.mjs.map +1 -0
- package/dist/{runner-BObHz5FC.d.mts → runner-Dfgp6-S_.d.mts} +7 -2
- package/dist/runner-Dfgp6-S_.d.mts.map +1 -0
- package/dist/runtime.d.mts +14 -13
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +8 -6
- package/dist/runtime.mjs.map +1 -1
- package/dist/schema/project-env-types.mjs +43 -42
- package/dist/schema/project-env-types.mjs.map +1 -1
- package/dist/{schema-DJRfvM_o.mjs → schema-B-3rntlX.mjs} +11 -11
- package/dist/{schema-DJRfvM_o.mjs.map → schema-B-3rntlX.mjs.map} +1 -1
- package/dist/{schema-C4OBuv6Z.mjs → schema-BqBlUZtb.mjs} +4 -4
- package/dist/{schema-C4OBuv6Z.mjs.map → schema-BqBlUZtb.mjs.map} +1 -1
- package/dist/{scopes-BU03K7Uo.mjs → scopes-DNaY7Ey0.mjs} +3 -3
- package/dist/{scopes-BU03K7Uo.mjs.map → scopes-DNaY7Ey0.mjs.map} +1 -1
- package/dist/{search-DfVzks89.mjs → search-BPWTnpnD.mjs} +32 -32
- package/dist/search-BPWTnpnD.mjs.map +1 -0
- package/dist/{secrets-Cc_O3Kp-.mjs → secrets-Dswzrz3k.mjs} +2 -2
- package/dist/{secrets-Cc_O3Kp-.mjs.map → secrets-Dswzrz3k.mjs.map} +1 -1
- package/dist/{sections-BMy4JVUz.mjs → sections-rSao6rBG.mjs} +3 -3
- package/dist/{sections-BMy4JVUz.mjs.map → sections-rSao6rBG.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +42 -41
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +30 -28
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-VZYOEy8f.mjs → seo-B_H_pqOd.mjs} +3 -3
- package/dist/{seo-VZYOEy8f.mjs.map → seo-B_H_pqOd.mjs.map} +1 -1
- package/dist/{service-Bo_usgSk.mjs → service-DpiUQVpp.mjs} +2 -2
- package/dist/{service-Bo_usgSk.mjs.map → service-DpiUQVpp.mjs.map} +1 -1
- package/dist/{session-user-DlpPdf8L.mjs → session-user-DiE4JKPP.mjs} +4 -4
- package/dist/{session-user-DlpPdf8L.mjs.map → session-user-DiE4JKPP.mjs.map} +1 -1
- package/dist/{settings-DS914jjE.mjs → settings--XlUdUaI.mjs} +3 -3
- package/dist/{settings-DS914jjE.mjs.map → settings--XlUdUaI.mjs.map} +1 -1
- package/dist/{settings-CWb84sDm.mjs → settings-D932YP2-.mjs} +111 -44
- package/dist/settings-D932YP2-.mjs.map +1 -0
- package/dist/{setup-complete-BuNxAUiN.mjs → setup-complete-qsJYWutC.mjs} +2 -2
- package/dist/{setup-complete-BuNxAUiN.mjs.map → setup-complete-qsJYWutC.mjs.map} +1 -1
- package/dist/{setup-nonce-BnEAX0iy.mjs → setup-nonce-CBFgUFXw.mjs} +1 -1
- package/dist/{setup-nonce-BnEAX0iy.mjs.map → setup-nonce-CBFgUFXw.mjs.map} +1 -1
- package/dist/{site-domain-Bq5j5bVg.mjs → site-domain-oRGS_JfA.mjs} +2 -2
- package/dist/{site-domain-Bq5j5bVg.mjs.map → site-domain-oRGS_JfA.mjs.map} +1 -1
- package/dist/{sitemap-name-BTg2NJJv.mjs → sitemap-name-B8QP8wud.mjs} +1 -1
- package/dist/{sitemap-name-BTg2NJJv.mjs.map → sitemap-name-B8QP8wud.mjs.map} +1 -1
- package/dist/{slugify-bu2-jKia.mjs → slugify-BDEG9pLk.mjs} +1 -1
- package/dist/{slugify-bu2-jKia.mjs.map → slugify-BDEG9pLk.mjs.map} +1 -1
- package/dist/{snapshot-DYsG4uOq.mjs → snapshot-BjaXDZQ5.mjs} +2 -2
- package/dist/{snapshot-DYsG4uOq.mjs.map → snapshot-BjaXDZQ5.mjs.map} +1 -1
- package/dist/{stage-D8DWgPcO.mjs → stage-CZQnXM_G.mjs} +3 -3
- package/dist/{stage-D8DWgPcO.mjs.map → stage-CZQnXM_G.mjs.map} +1 -1
- package/dist/{staged-CD_imitH.mjs → staged-ByBmPFtX.mjs} +3 -3
- package/dist/{staged-CD_imitH.mjs.map → staged-ByBmPFtX.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/{storage-query-DRyu3bSU.d.mts → storage-query-BFp06Y0s.d.mts} +22 -10
- package/dist/storage-query-BFp06Y0s.d.mts.map +1 -0
- package/dist/{taxonomies-Dd9JJv_a.mjs → taxonomies-5SR76j11.mjs} +15 -17
- package/dist/taxonomies-5SR76j11.mjs.map +1 -0
- package/dist/{taxonomies-ChnU7Mc8.mjs → taxonomies-B__VmCKQ.mjs} +64 -58
- package/dist/taxonomies-B__VmCKQ.mjs.map +1 -0
- package/dist/{taxonomy-C_C_LBAU.mjs → taxonomy-CMI5fczd.mjs} +30 -17
- package/dist/taxonomy-CMI5fczd.mjs.map +1 -0
- package/dist/{transaction-BVYIo_yu.mjs → transaction-CkoQ5wqQ.mjs} +1 -1
- package/dist/{transaction-BVYIo_yu.mjs.map → transaction-CkoQ5wqQ.mjs.map} +1 -1
- package/dist/{transfer-WmWiR3xf.mjs → transfer-BbKfufJ4.mjs} +2 -2
- package/dist/{transfer-WmWiR3xf.mjs.map → transfer-BbKfufJ4.mjs.map} +1 -1
- package/dist/{transfer-ClH6w6BV.mjs → transfer-DTGblAj2.mjs} +71 -34
- package/dist/{transfer-ClH6w6BV.mjs.map → transfer-DTGblAj2.mjs.map} +1 -1
- package/dist/{transfer-download--ofRj9Cw.mjs → transfer-download-D9LQEDX0.mjs} +1 -1
- package/dist/{transfer-download--ofRj9Cw.mjs.map → transfer-download-D9LQEDX0.mjs.map} +1 -1
- package/dist/{transport-DxiXnbXk.d.mts → transport-Dm5QzpT_.d.mts} +1 -1
- package/dist/{transport-DxiXnbXk.d.mts.map → transport-Dm5QzpT_.d.mts.map} +1 -1
- package/dist/{transport-BjbqNiPI.mjs → transport-Dzpn5b3i.mjs} +4 -3
- package/dist/transport-Dzpn5b3i.mjs.map +1 -0
- package/dist/{turnstile-CJwvsOqw.mjs → turnstile-Cs2wfkJG.mjs} +1 -1
- package/dist/{turnstile-CJwvsOqw.mjs.map → turnstile-Cs2wfkJG.mjs.map} +1 -1
- package/dist/{types-BA3ey2QH.d.mts → types-BAsCk5KU.d.mts} +1 -1
- package/dist/{types-BA3ey2QH.d.mts.map → types-BAsCk5KU.d.mts.map} +1 -1
- package/dist/{types-RLgeIpnF.d.mts → types-BuvSwT9Y.d.mts} +8 -7
- package/dist/{types-RLgeIpnF.d.mts.map → types-BuvSwT9Y.d.mts.map} +1 -1
- package/dist/{types-CNB-dj6F.d.mts → types-C4KT3Md2.d.mts} +10 -6
- package/dist/types-C4KT3Md2.d.mts.map +1 -0
- package/dist/{types-DvqVxZXa.d.mts → types-CVXHwIBB.d.mts} +1 -1
- package/dist/{types-DvqVxZXa.d.mts.map → types-CVXHwIBB.d.mts.map} +1 -1
- package/dist/{types-BGmQ0uXs.mjs → types-C_asjp1J.mjs} +1 -1
- package/dist/types-C_asjp1J.mjs.map +1 -0
- package/dist/{types-DHO7Pd25.d.mts → types-CadaL_k8.d.mts} +1 -1
- package/dist/{types-DHO7Pd25.d.mts.map → types-CadaL_k8.d.mts.map} +1 -1
- package/dist/{types-QoPHm-2w.d.mts → types-CjftrmZR.d.mts} +3 -3
- package/dist/{types-QoPHm-2w.d.mts.map → types-CjftrmZR.d.mts.map} +1 -1
- package/dist/{types-DCFavOii.d.mts → types-DKwRUA-x.d.mts} +1 -1
- package/dist/{types-DCFavOii.d.mts.map → types-DKwRUA-x.d.mts.map} +1 -1
- package/dist/{types-D2NEXtgB.mjs → types-DwhEvIVb.mjs} +8 -2
- package/dist/types-DwhEvIVb.mjs.map +1 -0
- package/dist/{types-Bwpzb5o6.d.mts → types-GwAyS5SH.d.mts} +1 -1
- package/dist/{types-Bwpzb5o6.d.mts.map → types-GwAyS5SH.d.mts.map} +1 -1
- package/dist/{types-slSqujQL.d.mts → types-uU2YNYSt.d.mts} +6 -1
- package/dist/types-uU2YNYSt.d.mts.map +1 -0
- package/dist/{update-check-BxNg9T6N.mjs → update-check-ABBJgg6M.mjs} +4 -4
- package/dist/{update-check-BxNg9T6N.mjs.map → update-check-ABBJgg6M.mjs.map} +1 -1
- package/dist/{url-Dn3IStq8.mjs → url-DTfGDJhI.mjs} +1 -1
- package/dist/{url-Dn3IStq8.mjs.map → url-DTfGDJhI.mjs.map} +1 -1
- package/dist/{user-BlCTKVAm.mjs → user-By8SzQxS.mjs} +3 -3
- package/dist/{user-BlCTKVAm.mjs.map → user-By8SzQxS.mjs.map} +1 -1
- package/dist/{utils-TPt7w2cS.mjs → utils-D5uOi6WS.mjs} +13 -5
- package/dist/utils-D5uOi6WS.mjs.map +1 -0
- package/dist/{index-BB9sVisO.d.mts → utils-Szp4iBQB.d.mts} +9 -256
- package/dist/utils-Szp4iBQB.d.mts.map +1 -0
- package/dist/{validate-emKxGC5F.d.mts → validate-DDvxy6qG.d.mts} +8 -8
- package/dist/{validate-emKxGC5F.d.mts.map → validate-DDvxy6qG.d.mts.map} +1 -1
- package/dist/{validate-DxYhJQA-.mjs → validate-Dz-TIOFB.mjs} +7 -7
- package/dist/{validate-DxYhJQA-.mjs.map → validate-Dz-TIOFB.mjs.map} +1 -1
- package/dist/{validation-Ckq4vsVg.mjs → validation-Fc9ZSUS_.mjs} +17 -16
- package/dist/{validation-Ckq4vsVg.mjs.map → validation-Fc9ZSUS_.mjs.map} +1 -1
- package/dist/version-Bu6Nlbb5.mjs +7 -0
- package/dist/{version-DHmGpcch.mjs.map → version-Bu6Nlbb5.mjs.map} +1 -1
- package/dist/version-DqB7LIO7.mjs +49 -0
- package/dist/version-DqB7LIO7.mjs.map +1 -0
- package/dist/{widgets-DA5XmvVC.mjs → widgets-BUx_Mf2q.mjs} +18 -5
- package/dist/widgets-BUx_Mf2q.mjs.map +1 -0
- package/dist/{wxr-taxonomies-RgRG0d5e.mjs → wxr-taxonomies-DbJtWrWM.mjs} +7 -6
- package/dist/wxr-taxonomies-DbJtWrWM.mjs.map +1 -0
- package/dist/{wxr-taxonomies-CrMonejI.d.mts → wxr-taxonomies-Dy2i2ON3.d.mts} +1 -1
- package/dist/wxr-taxonomies-Dy2i2ON3.d.mts.map +1 -0
- package/dist/{zod-generator-D0JKy94C.mjs → zod-generator--nlM0930.mjs} +5 -4
- package/dist/zod-generator--nlM0930.mjs.map +1 -0
- package/package.json +5 -5
- package/src/api/handlers/bulk-tag.ts +11 -3
- package/src/api/handlers/bylines.ts +6 -2
- package/src/api/handlers/content.ts +154 -23
- package/src/api/handlers/dashboard.ts +13 -6
- package/src/api/handlers/device-flow.ts +1 -3
- package/src/api/handlers/menus.ts +27 -13
- package/src/api/handlers/oauth-authorization.ts +1 -3
- package/src/api/handlers/relations.ts +15 -1
- package/src/api/handlers/taxonomies.ts +27 -17
- package/src/astro/image-endpoint.ts +23 -2
- package/src/astro/integration/admin-nav.ts +52 -0
- package/src/astro/integration/index.ts +7 -0
- package/src/astro/integration/runtime.ts +14 -0
- package/src/astro/integration/shims/use-sync-external-store-with-selector.js +2 -0
- package/src/astro/integration/shims/use-sync-external-store.js +4 -1
- package/src/astro/integration/vite-config.ts +16 -8
- package/src/astro/middleware/auth.ts +9 -2
- package/src/astro/middleware/redirect.ts +158 -63
- package/src/astro/middleware/request-context.ts +1 -0
- package/src/astro/middleware.ts +17 -4
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +4 -1
- package/src/astro/routes/api/content/[collection]/[id]/translations.ts +14 -1
- package/src/astro/routes/api/dashboard.ts +2 -0
- package/src/astro/routes/api/import/wordpress/analyze.ts +5 -29
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +3 -3
- package/src/astro/routes/api/media/file/[...key].ts +31 -7
- package/src/astro/routes/api/oauth/token.ts +5 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +7 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
- package/src/astro/routes/api/widget-areas/[name].ts +2 -1
- package/src/astro/routes/api/widget-areas/index.ts +2 -1
- package/src/astro/types.ts +4 -3
- package/src/auth/api-tokens.ts +3 -0
- package/src/auth/types.ts +6 -0
- package/src/cleanup.ts +44 -0
- package/src/cli/commands/export-seed.ts +6 -4
- package/src/cli/commands/login.ts +2 -4
- package/src/client/index.ts +1 -0
- package/src/client/transport.ts +11 -7
- package/src/components/EmDashImage.astro +14 -2
- package/src/components/InlinePortableTextEditor.tsx +4 -1
- package/src/components/inline-bubble-menu.tsx +109 -95
- package/src/components/inline-image.tsx +54 -48
- package/src/database/dialect-helpers.ts +10 -3
- package/src/database/migrations/content-sized.ts +82 -0
- package/src/database/migrations/policy.ts +28 -2
- package/src/database/migrations/runner.ts +48 -0
- package/src/database/repositories/byline.ts +95 -31
- package/src/database/repositories/comment.ts +17 -7
- package/src/database/repositories/content.ts +96 -23
- package/src/database/repositories/media.ts +17 -0
- package/src/database/repositories/menu.ts +236 -139
- package/src/database/repositories/taxonomy-def.ts +9 -2
- package/src/database/repositories/taxonomy.ts +47 -14
- package/src/database/repositories/types.ts +14 -3
- package/src/database/types.ts +1 -1
- package/src/emdash-runtime.ts +60 -17
- package/src/fields/image.ts +1 -0
- package/src/i18n/config.ts +58 -10
- package/src/i18n/normalize.ts +16 -2
- package/src/i18n/query.ts +47 -0
- package/src/i18n/resolve.ts +8 -3
- package/src/import/utils.ts +15 -2
- package/src/import/wxr-taxonomies.ts +3 -2
- package/src/index.ts +1 -0
- package/src/loader.ts +183 -114
- package/src/mcp/server.ts +28 -1
- package/src/media/caption.ts +30 -0
- package/src/media/content-disposition.ts +56 -0
- package/src/media/image-endpoint.ts +13 -6
- package/src/media/local-runtime.ts +3 -0
- package/src/media/normalize.ts +17 -8
- package/src/media/responsive.ts +12 -2
- package/src/media/types.ts +16 -3
- package/src/media/usage/content-fields.ts +2 -1
- package/src/menus/index.ts +158 -36
- package/src/migrations/manifest.ts +1 -0
- package/src/object-cache/index.ts +22 -0
- package/src/plugin-test-runtime.ts +1 -0
- package/src/plugins/byline-access.ts +3 -1
- package/src/plugins/context.ts +1 -2
- package/src/plugins/storage-indexes.ts +7 -3
- package/src/query.ts +67 -53
- package/src/redirects/artifacts.ts +39 -5
- package/src/references/field-map.ts +6 -4
- package/src/request-context.ts +8 -0
- package/src/schema/collection-slugs-cache.ts +31 -17
- package/src/schema/registry.ts +9 -0
- package/src/schema/types.ts +7 -6
- package/src/schema/zod-generator.ts +2 -1
- package/src/search/fts-manager.ts +103 -31
- package/src/search/query.ts +31 -64
- package/src/seed/apply.ts +221 -109
- package/src/seed/types.ts +6 -4
- package/src/settings/index.ts +135 -35
- package/src/settings/version.ts +54 -0
- package/src/taxonomies/index.ts +99 -85
- package/src/taxonomies/term-counts.ts +2 -1
- package/src/transfer/import/advance.ts +12 -1
- package/src/transfer/import/scaffold.ts +7 -1
- package/src/transfer/import/stages.ts +53 -2
- package/src/utils/db-errors.ts +15 -0
- package/src/utils/revalidating-cache.ts +85 -0
- package/src/virtual-modules.d.ts +1 -0
- package/src/visual-editing/toolbar.ts +7 -2
- package/src/widgets/index.ts +27 -13
- package/dist/api-D-7BNHoz.mjs.map +0 -1
- package/dist/api-tokens-CdP49zVF.mjs +0 -3
- package/dist/apply-T7ATgzCh.mjs.map +0 -1
- package/dist/artifacts-htGyfCSt.mjs.map +0 -1
- package/dist/byline-BR1qhyiw.mjs.map +0 -1
- package/dist/bylines-CVOvRUL7.mjs.map +0 -1
- package/dist/collection-slugs-cache-e09QeJQt.mjs.map +0 -1
- package/dist/comment-UvIWDKcW.mjs.map +0 -1
- package/dist/config-Bsm_u_oE.d.mts.map +0 -1
- package/dist/config-CFMojMFK.d.mts.map +0 -1
- package/dist/config-CvmjJcVw.mjs +0 -73
- package/dist/config-CvmjJcVw.mjs.map +0 -1
- package/dist/content-DQSRZTVw.mjs.map +0 -1
- package/dist/context-BYptmCN0.mjs.map +0 -1
- package/dist/dashboard-D0jcgBD7.mjs.map +0 -1
- package/dist/db-errors-CBD5yMro.mjs.map +0 -1
- package/dist/deferred-tasks-ZvUECSzI.d.mts +0 -9
- package/dist/deferred-tasks-ZvUECSzI.d.mts.map +0 -1
- package/dist/device-flow-BkFKBoAn.mjs.map +0 -1
- package/dist/dialect-helpers-7_IqPdh9.mjs.map +0 -1
- package/dist/emdash-runtime-DVi7vtXC.mjs.map +0 -1
- package/dist/field-defs-cache-Dez5iWJJ.mjs +0 -77
- package/dist/field-defs-cache-Dez5iWJJ.mjs.map +0 -1
- package/dist/field-map-Bft9LKak.mjs.map +0 -1
- package/dist/fts-manager-Beg3e4bI.mjs.map +0 -1
- package/dist/index-BB9sVisO.d.mts.map +0 -1
- package/dist/loader-CswroUbe.mjs.map +0 -1
- package/dist/manifest-builder-B8zjuH3f.mjs.map +0 -1
- package/dist/media-Bws9f18T.mjs.map +0 -1
- package/dist/menus-BCVSSp1z.mjs.map +0 -1
- package/dist/menus-Cl4kwdt7.mjs.map +0 -1
- package/dist/normalize-BuWa0lvd.mjs.map +0 -1
- package/dist/oauth-authorization-TpEJrYB7.mjs.map +0 -1
- package/dist/placeholder-D41vk11_.d.mts.map +0 -1
- package/dist/policy-DLQ--Hnm.mjs.map +0 -1
- package/dist/query-CpnRlBh8.mjs.map +0 -1
- package/dist/registry-TUVaid9Z.mjs.map +0 -1
- package/dist/relations-CA_QuMTU.mjs.map +0 -1
- package/dist/resolve-D-kqyKns.mjs.map +0 -1
- package/dist/runner-BObHz5FC.d.mts.map +0 -1
- package/dist/runner-C5NeAkBQ.mjs.map +0 -1
- package/dist/search-DfVzks89.mjs.map +0 -1
- package/dist/settings-CWb84sDm.mjs.map +0 -1
- package/dist/storage-query-DRyu3bSU.d.mts.map +0 -1
- package/dist/taxonomies-ChnU7Mc8.mjs.map +0 -1
- package/dist/taxonomies-Dd9JJv_a.mjs.map +0 -1
- package/dist/taxonomy-C_C_LBAU.mjs.map +0 -1
- package/dist/transport-BjbqNiPI.mjs.map +0 -1
- package/dist/types-BGmQ0uXs.mjs.map +0 -1
- package/dist/types-CNB-dj6F.d.mts.map +0 -1
- package/dist/types-D2NEXtgB.mjs.map +0 -1
- package/dist/types-slSqujQL.d.mts.map +0 -1
- package/dist/utils-TPt7w2cS.mjs.map +0 -1
- package/dist/version-DHmGpcch.mjs +0 -7
- package/dist/widgets-DA5XmvVC.mjs.map +0 -1
- package/dist/wxr-taxonomies-CrMonejI.d.mts.map +0 -1
- package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +0 -1
- package/dist/zod-generator-D0JKy94C.mjs.map +0 -1
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import "../../../../../config-
|
|
2
|
-
import { t as after } from "../../../../../after-
|
|
1
|
+
import "../../../../../config-Cs_AwWXI.mjs";
|
|
2
|
+
import { t as after } from "../../../../../after-32yNRvd2.mjs";
|
|
3
3
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
4
|
-
import "../../../../../url-
|
|
5
|
-
import "../../../../../types-
|
|
6
|
-
import { t as MediaRepository } from "../../../../../media-
|
|
7
|
-
import "../../../../../dist-
|
|
8
|
-
import { t as enrichImageMetadata } from "../../../../../enrich-
|
|
4
|
+
import "../../../../../url-DTfGDJhI.mjs";
|
|
5
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
6
|
+
import { t as MediaRepository } from "../../../../../media-DepNLhPq.mjs";
|
|
7
|
+
import "../../../../../dist-BUmWMTbN.mjs";
|
|
8
|
+
import { t as enrichImageMetadata } from "../../../../../enrich-DFlfnd3u.mjs";
|
|
9
9
|
import { n as computeContentHash, t as MAX_CONTENT_HASH_BYTES } from "../../../../../hash-BJaeek87.mjs";
|
|
10
10
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
11
|
-
import "../../../../../errors-
|
|
11
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
12
12
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
13
13
|
import "../../../../../site-settings-DRHfX7bq.mjs";
|
|
14
|
-
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-
|
|
15
|
-
import { r as parseOptionalBody, t as isParseError } from "../../../../../parse-
|
|
16
|
-
import "../../../../../redirects-
|
|
17
|
-
import "../../../../../entry-lock-
|
|
18
|
-
import { i as mediaConfirmBody } from "../../../../../media-
|
|
14
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
15
|
+
import { r as parseOptionalBody, t as isParseError } from "../../../../../parse-B_b6gZxG.mjs";
|
|
16
|
+
import "../../../../../redirects-CyvvZrCJ.mjs";
|
|
17
|
+
import "../../../../../entry-lock-CRVmruM0.mjs";
|
|
18
|
+
import { i as mediaConfirmBody } from "../../../../../media-BR4_t-Wd.mjs";
|
|
19
19
|
import "../../../../../comments-yiRFx3w5.mjs";
|
|
20
|
-
import "../../../../../byline-fields-
|
|
21
|
-
import "../../../../../menus-
|
|
20
|
+
import "../../../../../byline-fields-CiR8FvvF.mjs";
|
|
21
|
+
import "../../../../../menus-uEAxWAm1.mjs";
|
|
22
22
|
import "../../../../../status-BFNdxzKc.mjs";
|
|
23
23
|
import "../../../../../api/schemas/index.mjs";
|
|
24
|
-
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-
|
|
24
|
+
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
25
25
|
|
|
26
26
|
//#region src/astro/routes/api/media/[id]/confirm.ts
|
|
27
27
|
const prerender = false;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import "../../../../../config-
|
|
1
|
+
import "../../../../../config-Cs_AwWXI.mjs";
|
|
2
2
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
3
|
-
import "../../../../../url-
|
|
4
|
-
import "../../../../../types-
|
|
5
|
-
import { n as normalizeMime } from "../../../../../mime-
|
|
3
|
+
import "../../../../../url-DTfGDJhI.mjs";
|
|
4
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
5
|
+
import { n as normalizeMime } from "../../../../../mime-D1We9jUx.mjs";
|
|
6
6
|
import { n as computeContentHash } from "../../../../../hash-BJaeek87.mjs";
|
|
7
7
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
8
|
-
import "../../../../../errors-
|
|
8
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
9
9
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
10
10
|
import "../../../../../site-settings-DRHfX7bq.mjs";
|
|
11
|
-
import { a as unwrapResult, n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-
|
|
12
|
-
import "../../../../../redirects-
|
|
13
|
-
import "../../../../../entry-lock-
|
|
14
|
-
import { n as DEFAULT_MAX_UPLOAD_SIZE, w as mediaReplaceMetadataForm } from "../../../../../media-
|
|
11
|
+
import { a as unwrapResult, n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
12
|
+
import "../../../../../redirects-CyvvZrCJ.mjs";
|
|
13
|
+
import "../../../../../entry-lock-CRVmruM0.mjs";
|
|
14
|
+
import { n as DEFAULT_MAX_UPLOAD_SIZE, w as mediaReplaceMetadataForm } from "../../../../../media-BR4_t-Wd.mjs";
|
|
15
15
|
import "../../../../../comments-yiRFx3w5.mjs";
|
|
16
|
-
import "../../../../../byline-fields-
|
|
17
|
-
import "../../../../../menus-
|
|
16
|
+
import "../../../../../byline-fields-CiR8FvvF.mjs";
|
|
17
|
+
import "../../../../../menus-uEAxWAm1.mjs";
|
|
18
18
|
import "../../../../../status-BFNdxzKc.mjs";
|
|
19
19
|
import "../../../../../api/schemas/index.mjs";
|
|
20
20
|
import { MUTABLE_MEDIA_CACHE_CONTROL } from "../../../../../media/image-endpoint.mjs";
|
|
21
|
-
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-
|
|
21
|
+
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
22
22
|
|
|
23
23
|
//#region src/astro/routes/api/media/[id]/replace.ts
|
|
24
24
|
const prerender = false;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
2
|
-
import "../../../../../types-
|
|
3
|
-
import { t as MediaRepository } from "../../../../../media-
|
|
4
|
-
import { n as normalizeMime } from "../../../../../mime-
|
|
2
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
3
|
+
import { t as MediaRepository } from "../../../../../media-DepNLhPq.mjs";
|
|
4
|
+
import { n as normalizeMime } from "../../../../../mime-D1We9jUx.mjs";
|
|
5
5
|
import { n as computeContentHash, t as MAX_CONTENT_HASH_BYTES } from "../../../../../hash-BJaeek87.mjs";
|
|
6
6
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
7
|
-
import "../../../../../errors-
|
|
7
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
8
8
|
import { t as removeUploadAttempt } from "../../../../../upload-attempts-DPFC4COv.mjs";
|
|
9
|
-
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-
|
|
10
|
-
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-
|
|
9
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
10
|
+
import { a as requireOwnerPerm, o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
11
11
|
import { ulid } from "ulidx";
|
|
12
12
|
|
|
13
13
|
//#region src/astro/routes/api/media/[id]/upload.ts
|
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
import "../../../../../dialect-helpers-
|
|
2
|
-
import "../../../../../config-
|
|
1
|
+
import "../../../../../dialect-helpers-B1XN2HGB.mjs";
|
|
2
|
+
import "../../../../../config-Cs_AwWXI.mjs";
|
|
3
|
+
import "../../../../../after-32yNRvd2.mjs";
|
|
3
4
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
4
|
-
import "../../../../../request-cache-
|
|
5
|
-
import "../../../../../url-
|
|
6
|
-
import "../../../../../types-
|
|
7
|
-
import "../../../../../media-
|
|
8
|
-
import "../../../../../fts-manager-
|
|
9
|
-
import "../../../../../json-recordset-
|
|
10
|
-
import "../../../../../collection-slugs-cache-
|
|
11
|
-
import "../../../../../media-usage-work-
|
|
12
|
-
import "../../../../../capture-triggers-
|
|
13
|
-
import "../../../../../activation-
|
|
14
|
-
import "../../../../../registry-
|
|
5
|
+
import "../../../../../request-cache-5z2WzWmh.mjs";
|
|
6
|
+
import "../../../../../url-DTfGDJhI.mjs";
|
|
7
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
8
|
+
import "../../../../../media-DepNLhPq.mjs";
|
|
9
|
+
import "../../../../../fts-manager-6861qcwk.mjs";
|
|
10
|
+
import "../../../../../json-recordset-D0WhN2UA.mjs";
|
|
11
|
+
import "../../../../../collection-slugs-cache-DIrLjqH-.mjs";
|
|
12
|
+
import "../../../../../media-usage-work-BCK2J-v_.mjs";
|
|
13
|
+
import "../../../../../capture-triggers-BezAvWcB.mjs";
|
|
14
|
+
import "../../../../../activation-CGlyigmg.mjs";
|
|
15
|
+
import "../../../../../registry-B0-O575m.mjs";
|
|
15
16
|
import "../../../../../hash-BJaeek87.mjs";
|
|
16
|
-
import "../../../../../zod-generator
|
|
17
|
+
import "../../../../../zod-generator--nlM0930.mjs";
|
|
17
18
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
18
19
|
import "../../../../../canonical-BudtH-Fx.mjs";
|
|
19
20
|
import "../../../../../digest-DJ1tHCgy.mjs";
|
|
20
|
-
import "../../../../../errors-
|
|
21
|
-
import "../../../../../content-repair-
|
|
21
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
22
|
+
import "../../../../../content-repair-Ukdxoq-R.mjs";
|
|
22
23
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
23
24
|
import "../../../../../site-settings-DRHfX7bq.mjs";
|
|
24
|
-
import { t as handleMediaUsageDetails } from "../../../../../media-usage-
|
|
25
|
-
import { a as unwrapResult, t as apiError } from "../../../../../error-
|
|
26
|
-
import { i as parseQuery, t as isParseError } from "../../../../../parse-
|
|
27
|
-
import "../../../../../redirects-
|
|
28
|
-
import "../../../../../entry-lock-
|
|
29
|
-
import { Y as mediaUsageDetailsQuery } from "../../../../../media-
|
|
25
|
+
import { t as handleMediaUsageDetails } from "../../../../../media-usage-X1_20MY-.mjs";
|
|
26
|
+
import { a as unwrapResult, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
27
|
+
import { i as parseQuery, t as isParseError } from "../../../../../parse-B_b6gZxG.mjs";
|
|
28
|
+
import "../../../../../redirects-CyvvZrCJ.mjs";
|
|
29
|
+
import "../../../../../entry-lock-CRVmruM0.mjs";
|
|
30
|
+
import { Y as mediaUsageDetailsQuery } from "../../../../../media-BR4_t-Wd.mjs";
|
|
30
31
|
import "../../../../../comments-yiRFx3w5.mjs";
|
|
31
|
-
import "../../../../../byline-fields-
|
|
32
|
-
import "../../../../../menus-
|
|
32
|
+
import "../../../../../byline-fields-CiR8FvvF.mjs";
|
|
33
|
+
import "../../../../../menus-uEAxWAm1.mjs";
|
|
33
34
|
import "../../../../../status-BFNdxzKc.mjs";
|
|
34
35
|
import "../../../../../api/schemas/index.mjs";
|
|
35
|
-
import "../../../../../api-tokens-
|
|
36
|
-
import { o as requirePerm } from "../../../../../authorize-
|
|
37
|
-
import { n as requireScope } from "../../../../../scopes-
|
|
36
|
+
import "../../../../../api-tokens-DqSlkDVI.mjs";
|
|
37
|
+
import { o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
38
|
+
import { n as requireScope } from "../../../../../scopes-DNaY7Ey0.mjs";
|
|
38
39
|
|
|
39
40
|
//#region src/astro/routes/api/media/[id]/usage.ts
|
|
40
41
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/media/[id]/usage.ts"],"sourcesContent":["import type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaUsageDetails } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseQuery } from \"#api/parse.js\";\nimport { mediaUsageDetailsQuery } from \"#api/schemas.js\";\nimport { requireScope } from \"#auth/scopes.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst mediaDenied = requirePerm(user, \"media:read\");\n\tif (mediaDenied) return mediaDenied;\n\tconst contentDenied = requirePerm(user, \"content:read_drafts\");\n\tif (contentDenied) return contentDenied;\n\tconst scopeDenied = requireScope(locals, \"admin\");\n\tif (scopeDenied) return scopeDenied;\n\n\tconst { id } = params;\n\tif (!id) return apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\tif (!emdash?.db) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst query = parseQuery(new URL(request.url), mediaUsageDetailsQuery);\n\tif (isParseError(query)) return query;\n\n\treturn unwrapResult(await handleMediaUsageDetails(emdash.db, id, query));\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/media/[id]/usage.ts"],"sourcesContent":["import type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaUsageDetails } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseQuery } from \"#api/parse.js\";\nimport { mediaUsageDetailsQuery } from \"#api/schemas.js\";\nimport { requireScope } from \"#auth/scopes.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst mediaDenied = requirePerm(user, \"media:read\");\n\tif (mediaDenied) return mediaDenied;\n\tconst contentDenied = requirePerm(user, \"content:read_drafts\");\n\tif (contentDenied) return contentDenied;\n\tconst scopeDenied = requireScope(locals, \"admin\");\n\tif (scopeDenied) return scopeDenied;\n\n\tconst { id } = params;\n\tif (!id) return apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\tif (!emdash?.db) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst query = parseQuery(new URL(request.url), mediaUsageDetailsQuery);\n\tif (isParseError(query)) return query;\n\n\treturn unwrapResult(await handleMediaUsageDetails(emdash.db, id, query));\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CAEzB,MAAM,cAAc,YAAY,MAAM,aAAa;AACnD,KAAI,YAAa,QAAO;CACxB,MAAM,gBAAgB,YAAY,MAAM,sBAAsB;AAC9D,KAAI,cAAe,QAAO;CAC1B,MAAM,cAAc,aAAa,QAAQ,QAAQ;AACjD,KAAI,YAAa,QAAO;CAExB,MAAM,EAAE,OAAO;AACf,KAAI,CAAC,GAAI,QAAO,SAAS,mBAAmB,qBAAqB,IAAI;AACrE,KAAI,CAAC,QAAQ,GAAI,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEpF,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,uBAAuB;AACtE,KAAI,aAAa,MAAM,CAAE,QAAO;AAEhC,QAAO,aAAa,MAAM,wBAAwB,OAAO,IAAI,IAAI,MAAM,CAAC"}
|
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
import "../../../../dialect-helpers-
|
|
2
|
-
import "../../../../config-
|
|
1
|
+
import "../../../../dialect-helpers-B1XN2HGB.mjs";
|
|
2
|
+
import "../../../../config-Cs_AwWXI.mjs";
|
|
3
|
+
import "../../../../after-32yNRvd2.mjs";
|
|
3
4
|
import "../../../../base64-BQBZwXCx.mjs";
|
|
4
|
-
import "../../../../request-cache-
|
|
5
|
-
import "../../../../url-
|
|
6
|
-
import "../../../../types-
|
|
7
|
-
import "../../../../media-
|
|
8
|
-
import "../../../../fts-manager-
|
|
9
|
-
import "../../../../json-recordset-
|
|
10
|
-
import "../../../../collection-slugs-cache-
|
|
11
|
-
import "../../../../media-usage-work-
|
|
12
|
-
import "../../../../capture-triggers-
|
|
13
|
-
import "../../../../activation-
|
|
14
|
-
import "../../../../registry-
|
|
5
|
+
import "../../../../request-cache-5z2WzWmh.mjs";
|
|
6
|
+
import "../../../../url-DTfGDJhI.mjs";
|
|
7
|
+
import "../../../../types-DwhEvIVb.mjs";
|
|
8
|
+
import "../../../../media-DepNLhPq.mjs";
|
|
9
|
+
import "../../../../fts-manager-6861qcwk.mjs";
|
|
10
|
+
import "../../../../json-recordset-D0WhN2UA.mjs";
|
|
11
|
+
import "../../../../collection-slugs-cache-DIrLjqH-.mjs";
|
|
12
|
+
import "../../../../media-usage-work-BCK2J-v_.mjs";
|
|
13
|
+
import "../../../../capture-triggers-BezAvWcB.mjs";
|
|
14
|
+
import "../../../../activation-CGlyigmg.mjs";
|
|
15
|
+
import "../../../../registry-B0-O575m.mjs";
|
|
15
16
|
import "../../../../hash-BJaeek87.mjs";
|
|
16
|
-
import "../../../../zod-generator
|
|
17
|
+
import "../../../../zod-generator--nlM0930.mjs";
|
|
17
18
|
import "../../../../errors-B4f4It-2.mjs";
|
|
18
19
|
import "../../../../canonical-BudtH-Fx.mjs";
|
|
19
20
|
import "../../../../digest-DJ1tHCgy.mjs";
|
|
20
|
-
import "../../../../errors-
|
|
21
|
-
import "../../../../content-repair-
|
|
21
|
+
import "../../../../errors-8gJqv-XV.mjs";
|
|
22
|
+
import "../../../../content-repair-Ukdxoq-R.mjs";
|
|
22
23
|
import "../../../../settings-Dd1uivmQ.mjs";
|
|
23
24
|
import "../../../../site-settings-DRHfX7bq.mjs";
|
|
24
|
-
import { a as handleMediaUsageSummaries } from "../../../../media-usage-
|
|
25
|
-
import { a as unwrapResult, n as apiSuccess, r as handleError, t as apiError } from "../../../../error-
|
|
26
|
-
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../parse-
|
|
27
|
-
import "../../../../redirects-
|
|
28
|
-
import "../../../../entry-lock-
|
|
29
|
-
import { O as mediaUpdateBody, m as mediaGetQuery } from "../../../../media-
|
|
25
|
+
import { a as handleMediaUsageSummaries } from "../../../../media-usage-X1_20MY-.mjs";
|
|
26
|
+
import { a as unwrapResult, n as apiSuccess, r as handleError, t as apiError } from "../../../../error-BCMgPxdn.mjs";
|
|
27
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../parse-B_b6gZxG.mjs";
|
|
28
|
+
import "../../../../redirects-CyvvZrCJ.mjs";
|
|
29
|
+
import "../../../../entry-lock-CRVmruM0.mjs";
|
|
30
|
+
import { O as mediaUpdateBody, m as mediaGetQuery } from "../../../../media-BR4_t-Wd.mjs";
|
|
30
31
|
import "../../../../comments-yiRFx3w5.mjs";
|
|
31
|
-
import "../../../../byline-fields-
|
|
32
|
-
import "../../../../menus-
|
|
32
|
+
import "../../../../byline-fields-CiR8FvvF.mjs";
|
|
33
|
+
import "../../../../menus-uEAxWAm1.mjs";
|
|
33
34
|
import "../../../../status-BFNdxzKc.mjs";
|
|
34
35
|
import "../../../../api/schemas/index.mjs";
|
|
35
|
-
import { a as requireOwnerPerm, o as requirePerm, t as canReadMediaUsageCount } from "../../../../authorize-
|
|
36
|
+
import { a as requireOwnerPerm, o as requirePerm, t as canReadMediaUsageCount } from "../../../../authorize-NJgp8kLI.mjs";
|
|
36
37
|
|
|
37
38
|
//#region src/astro/routes/api/media/[id].ts
|
|
38
39
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_id_.mjs","names":[],"sources":["../../../../../src/astro/routes/api/media/[id].ts"],"sourcesContent":["/**\n * Single media item endpoint\n *\n * GET /_emdash/api/media/:id - Get media item\n * PUT /_emdash/api/media/:id - Update media metadata\n * DELETE /_emdash/api/media/:id - Delete media item\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { canReadMediaUsageCount, requireOwnerPerm, requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaUsageSummaries } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { mediaGetQuery, mediaUpdateBody } from \"#api/schemas.js\";\nexport const prerender = false;\n\n/**\n * Get media item\n */\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tconst readDenied = requirePerm(user, \"media:read\");\n\tif (readDenied) return readDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tconst query = parseQuery(new URL(request.url), mediaGetQuery);\n\tif (isParseError(query)) return query;\n\n\tconst result = await emdash.handleMediaGet(id);\n\tif (!result.success || query.includeUsage !== \"1\") return unwrapResult(result);\n\n\tconst includeCount = canReadMediaUsageCount(user, locals.tokenScopes);\n\tconst usageResult = await handleMediaUsageSummaries(emdash.db, [id], { includeCount });\n\tif (!usageResult.success) return unwrapResult(usageResult);\n\tconst usage = usageResult.data[id];\n\tif (!usage) return apiError(\"MEDIA_USAGE_READ_ERROR\", \"Failed to read media usage\", 500);\n\n\treturn apiSuccess({ item: { ...result.data.item, usage } });\n};\n\n/**\n * Update media metadata\n *\n * Authors can edit their own media; editors+ can edit any.\n */\nexport const PUT: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\t// Minimum permission gate — ownership checked below\n\tconst editDenied = requirePerm(user, \"media:edit_own\");\n\tif (editDenied) return editDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet || !emdash?.handleMediaUpdate) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\t// Fetch media item for ownership check\n\t\tconst getResult = await emdash.handleMediaGet(id);\n\t\tif (!getResult.success || !getResult.data?.item) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"Media item not found\", 404);\n\t\t}\n\n\t\tconst media = getResult.data.item;\n\n\t\t// Ownership check: authors can edit own, editors+ can edit any\n\t\tconst ownerDenied = requireOwnerPerm(user, media.authorId, \"media:edit_own\", \"media:edit_any\");\n\t\tif (ownerDenied) return ownerDenied;\n\n\t\tconst body = await parseBody(request, mediaUpdateBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await emdash.handleMediaUpdate(id, {\n\t\t\talt: body.alt,\n\t\t\tcaption: body.caption,\n\t\t\twidth: body.width,\n\t\t\theight: body.height,\n\t\t\tfolderId: body.folderId,\n\t\t\tfocalX: body.focalX,\n\t\t\tfocalY: body.focalY,\n\t\t});\n\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update media\", \"MEDIA_UPDATE_ERROR\");\n\t}\n};\n\n/**\n * Delete media item\n *\n * Authors can delete their own media; editors+ can delete any.\n */\nexport const DELETE: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\t// Minimum permission gate — ownership checked below\n\tconst deleteDenied = requirePerm(user, \"media:delete_own\");\n\tif (deleteDenied) return deleteDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet || !emdash?.handleMediaDelete) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\t// Fetch media item for ownership check and storage key\n\t\tconst getResult = await emdash.handleMediaGet(id);\n\t\tif (!getResult.success || !getResult.data?.item) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"Media item not found\", 404);\n\t\t}\n\n\t\tconst media = getResult.data.item;\n\n\t\t// Ownership check: authors can delete own, editors+ can delete any\n\t\tconst ownerDenied = requireOwnerPerm(\n\t\t\tuser,\n\t\t\tmedia.authorId,\n\t\t\t\"media:delete_own\",\n\t\t\t\"media:delete_any\",\n\t\t);\n\t\tif (ownerDenied) return ownerDenied;\n\n\t\t// Storage deletion and site-settings cache invalidation happen in\n\t\t// `EmDashRuntime.handleMediaDelete` so the MCP tool inherits them.\n\t\tconst result = await emdash.handleMediaDelete(id);\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (\n\t\t\ttypeof result.data !== \"object\" ||\n\t\t\tresult.data === null ||\n\t\t\t!(\"storageDeleted\" in result.data) ||\n\t\t\ttypeof result.data.storageDeleted !== \"boolean\"\n\t\t) {\n\t\t\treturn apiError(\"MEDIA_DELETE_ERROR\", \"Failed to delete media\", 500);\n\t\t}\n\n\t\treturn apiSuccess({ deleted: true, storageDeleted: result.data.storageDeleted });\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete media\", \"MEDIA_DELETE_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"_id_.mjs","names":[],"sources":["../../../../../src/astro/routes/api/media/[id].ts"],"sourcesContent":["/**\n * Single media item endpoint\n *\n * GET /_emdash/api/media/:id - Get media item\n * PUT /_emdash/api/media/:id - Update media metadata\n * DELETE /_emdash/api/media/:id - Delete media item\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { canReadMediaUsageCount, requireOwnerPerm, requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaUsageSummaries } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { mediaGetQuery, mediaUpdateBody } from \"#api/schemas.js\";\nexport const prerender = false;\n\n/**\n * Get media item\n */\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tconst readDenied = requirePerm(user, \"media:read\");\n\tif (readDenied) return readDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tconst query = parseQuery(new URL(request.url), mediaGetQuery);\n\tif (isParseError(query)) return query;\n\n\tconst result = await emdash.handleMediaGet(id);\n\tif (!result.success || query.includeUsage !== \"1\") return unwrapResult(result);\n\n\tconst includeCount = canReadMediaUsageCount(user, locals.tokenScopes);\n\tconst usageResult = await handleMediaUsageSummaries(emdash.db, [id], { includeCount });\n\tif (!usageResult.success) return unwrapResult(usageResult);\n\tconst usage = usageResult.data[id];\n\tif (!usage) return apiError(\"MEDIA_USAGE_READ_ERROR\", \"Failed to read media usage\", 500);\n\n\treturn apiSuccess({ item: { ...result.data.item, usage } });\n};\n\n/**\n * Update media metadata\n *\n * Authors can edit their own media; editors+ can edit any.\n */\nexport const PUT: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\t// Minimum permission gate — ownership checked below\n\tconst editDenied = requirePerm(user, \"media:edit_own\");\n\tif (editDenied) return editDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet || !emdash?.handleMediaUpdate) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\t// Fetch media item for ownership check\n\t\tconst getResult = await emdash.handleMediaGet(id);\n\t\tif (!getResult.success || !getResult.data?.item) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"Media item not found\", 404);\n\t\t}\n\n\t\tconst media = getResult.data.item;\n\n\t\t// Ownership check: authors can edit own, editors+ can edit any\n\t\tconst ownerDenied = requireOwnerPerm(user, media.authorId, \"media:edit_own\", \"media:edit_any\");\n\t\tif (ownerDenied) return ownerDenied;\n\n\t\tconst body = await parseBody(request, mediaUpdateBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await emdash.handleMediaUpdate(id, {\n\t\t\talt: body.alt,\n\t\t\tcaption: body.caption,\n\t\t\twidth: body.width,\n\t\t\theight: body.height,\n\t\t\tfolderId: body.folderId,\n\t\t\tfocalX: body.focalX,\n\t\t\tfocalY: body.focalY,\n\t\t});\n\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update media\", \"MEDIA_UPDATE_ERROR\");\n\t}\n};\n\n/**\n * Delete media item\n *\n * Authors can delete their own media; editors+ can delete any.\n */\nexport const DELETE: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\t// Minimum permission gate — ownership checked below\n\tconst deleteDenied = requirePerm(user, \"media:delete_own\");\n\tif (deleteDenied) return deleteDenied;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Media ID required\", 400);\n\t}\n\n\tif (!emdash?.handleMediaGet || !emdash?.handleMediaDelete) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\t// Fetch media item for ownership check and storage key\n\t\tconst getResult = await emdash.handleMediaGet(id);\n\t\tif (!getResult.success || !getResult.data?.item) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"Media item not found\", 404);\n\t\t}\n\n\t\tconst media = getResult.data.item;\n\n\t\t// Ownership check: authors can delete own, editors+ can delete any\n\t\tconst ownerDenied = requireOwnerPerm(\n\t\t\tuser,\n\t\t\tmedia.authorId,\n\t\t\t\"media:delete_own\",\n\t\t\t\"media:delete_any\",\n\t\t);\n\t\tif (ownerDenied) return ownerDenied;\n\n\t\t// Storage deletion and site-settings cache invalidation happen in\n\t\t// `EmDashRuntime.handleMediaDelete` so the MCP tool inherits them.\n\t\tconst result = await emdash.handleMediaDelete(id);\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (\n\t\t\ttypeof result.data !== \"object\" ||\n\t\t\tresult.data === null ||\n\t\t\t!(\"storageDeleted\" in result.data) ||\n\t\t\ttypeof result.data.storageDeleted !== \"boolean\"\n\t\t) {\n\t\t\treturn apiError(\"MEDIA_DELETE_ERROR\", \"Failed to delete media\", 500);\n\t\t}\n\n\t\treturn apiSuccess({ deleted: true, storageDeleted: result.data.storageDeleted });\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete media\", \"MEDIA_DELETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,YAAY;;;;AAKzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAEf,MAAM,aAAa,YAAY,MAAM,aAAa;AAClD,KAAI,WAAY,QAAO;AAEvB,KAAI,CAAC,GACJ,QAAO,SAAS,mBAAmB,qBAAqB,IAAI;AAG7D,KAAI,CAAC,QAAQ,eACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEpE,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,cAAc;AAC7D,KAAI,aAAa,MAAM,CAAE,QAAO;CAEhC,MAAM,SAAS,MAAM,OAAO,eAAe,GAAG;AAC9C,KAAI,CAAC,OAAO,WAAW,MAAM,iBAAiB,IAAK,QAAO,aAAa,OAAO;CAE9E,MAAM,eAAe,uBAAuB,MAAM,OAAO,YAAY;CACrE,MAAM,cAAc,MAAM,0BAA0B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;AACtF,KAAI,CAAC,YAAY,QAAS,QAAO,aAAa,YAAY;CAC1D,MAAM,QAAQ,YAAY,KAAK;AAC/B,KAAI,CAAC,MAAO,QAAO,SAAS,0BAA0B,8BAA8B,IAAI;AAExF,QAAO,WAAW,EAAE,MAAM;EAAE,GAAG,OAAO,KAAK;EAAM;EAAO,EAAE,CAAC;;;;;;;AAQ5D,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAGf,MAAM,aAAa,YAAY,MAAM,iBAAiB;AACtD,KAAI,WAAY,QAAO;AAEvB,KAAI,CAAC,GACJ,QAAO,SAAS,mBAAmB,qBAAqB,IAAI;AAG7D,KAAI,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,kBACvC,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAGpE,KAAI;EAEH,MAAM,YAAY,MAAM,OAAO,eAAe,GAAG;AACjD,MAAI,CAAC,UAAU,WAAW,CAAC,UAAU,MAAM,KAC1C,QAAO,SAAS,aAAa,wBAAwB,IAAI;EAG1D,MAAM,QAAQ,UAAU,KAAK;EAG7B,MAAM,cAAc,iBAAiB,MAAM,MAAM,UAAU,kBAAkB,iBAAiB;AAC9F,MAAI,YAAa,QAAO;EAExB,MAAM,OAAO,MAAM,UAAU,SAAS,gBAAgB;AACtD,MAAI,aAAa,KAAK,CAAE,QAAO;AAY/B,SAAO,aAVQ,MAAM,OAAO,kBAAkB,IAAI;GACjD,KAAK,KAAK;GACV,SAAS,KAAK;GACd,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,CAAC,CAEyB;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,0BAA0B,qBAAqB;;;;;;;;AAS3E,MAAa,SAAmB,OAAO,EAAE,QAAQ,aAAa;CAC7D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;CAGf,MAAM,eAAe,YAAY,MAAM,mBAAmB;AAC1D,KAAI,aAAc,QAAO;AAEzB,KAAI,CAAC,GACJ,QAAO,SAAS,mBAAmB,qBAAqB,IAAI;AAG7D,KAAI,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,kBACvC,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAGpE,KAAI;EAEH,MAAM,YAAY,MAAM,OAAO,eAAe,GAAG;AACjD,MAAI,CAAC,UAAU,WAAW,CAAC,UAAU,MAAM,KAC1C,QAAO,SAAS,aAAa,wBAAwB,IAAI;EAG1D,MAAM,QAAQ,UAAU,KAAK;EAG7B,MAAM,cAAc,iBACnB,MACA,MAAM,UACN,oBACA,mBACA;AACD,MAAI,YAAa,QAAO;EAIxB,MAAM,SAAS,MAAM,OAAO,kBAAkB,GAAG;AACjD,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAChD,MACC,OAAO,OAAO,SAAS,YACvB,OAAO,SAAS,QAChB,EAAE,oBAAoB,OAAO,SAC7B,OAAO,OAAO,KAAK,mBAAmB,UAEtC,QAAO,SAAS,sBAAsB,0BAA0B,IAAI;AAGrE,SAAO,WAAW;GAAE,SAAS;GAAM,gBAAgB,OAAO,KAAK;GAAgB,CAAC;UACxE,OAAO;AACf,SAAO,YAAY,OAAO,0BAA0B,qBAAqB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "../../../../../../base64-BQBZwXCx.mjs";
|
|
2
|
-
import "../../../../../../types-
|
|
3
|
-
import { t as MediaRepository } from "../../../../../../media-
|
|
2
|
+
import "../../../../../../types-DwhEvIVb.mjs";
|
|
3
|
+
import { t as MediaRepository } from "../../../../../../media-DepNLhPq.mjs";
|
|
4
4
|
import "../../../../../../errors-B4f4It-2.mjs";
|
|
5
|
-
import "../../../../../../errors-
|
|
6
|
-
import { r as handleError, t as apiError } from "../../../../../../error-
|
|
7
|
-
import { o as requirePerm } from "../../../../../../authorize-
|
|
5
|
+
import "../../../../../../errors-8gJqv-XV.mjs";
|
|
6
|
+
import { r as handleError, t as apiError } from "../../../../../../error-BCMgPxdn.mjs";
|
|
7
|
+
import { o as requirePerm } from "../../../../../../authorize-NJgp8kLI.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/astro/routes/api/media/asset/[id]/[filename].ts
|
|
10
10
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_...key_.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/media/file/[...key].ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"_...key_.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/media/file/[...key].ts"],"mappings":";;;cAqBa,SAAA;AAAA,cA4CA,GAAA,EAAK,QAAA"}
|
|
@@ -1,16 +1,56 @@
|
|
|
1
1
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
2
|
-
import "../../../../../types-
|
|
2
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
3
|
+
import { t as MediaRepository } from "../../../../../media-DepNLhPq.mjs";
|
|
3
4
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
4
5
|
import "../../../../../canonical-BudtH-Fx.mjs";
|
|
5
|
-
import "../../../../../errors-
|
|
6
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
6
7
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
7
|
-
import { r as handleError, t as apiError } from "../../../../../error-
|
|
8
|
+
import { r as handleError, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
8
9
|
import { n as resolveByteRange, t as parseRangeHeader } from "../../../../../range-CYfeXgGK.mjs";
|
|
9
10
|
import { IMMUTABLE_IMAGE_CACHE, MUTABLE_MEDIA_CACHE_CONTROL, isNotModified, validatorHeaders } from "../../../../../media/image-endpoint.mjs";
|
|
10
11
|
import "../../../../../kinds-B_Qcl5pz.mjs";
|
|
11
12
|
import "../../../../../paths-biDzFTY2.mjs";
|
|
12
13
|
import { t as isRefusedStorageKey } from "../../../../../keys-CifIkT0N.mjs";
|
|
13
14
|
|
|
15
|
+
//#region src/media/content-disposition.ts
|
|
16
|
+
/**
|
|
17
|
+
* Content-Disposition header construction for media downloads.
|
|
18
|
+
*
|
|
19
|
+
* The public media file route serves every non-inline type as an attachment.
|
|
20
|
+
* Without a `filename` parameter the browser falls back to the last path
|
|
21
|
+
* segment of the URL -- the storage key -- so a downloaded PDF lands in the
|
|
22
|
+
* user's filesystem named after its ULID. These helpers build a header that
|
|
23
|
+
* names the file the way the editor uploaded it.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Characters unsafe in a filename on one or more platforms, plus the quote and
|
|
27
|
+
* backslash that would otherwise break out of the quoted `filename=` value.
|
|
28
|
+
*/
|
|
29
|
+
const UNSAFE_FILENAME_CHARS = /[\x00-\x1F\x7F"\\/<>:|?*]/g;
|
|
30
|
+
/** Anything outside printable ASCII, carried by `filename*` instead. */
|
|
31
|
+
const NON_ASCII = /[^\x20-\x7E]/g;
|
|
32
|
+
/**
|
|
33
|
+
* An ASCII-only, filesystem-safe rendering of `filename`, for the quoted
|
|
34
|
+
* `filename=` parameter that older clients read.
|
|
35
|
+
*/
|
|
36
|
+
function toAsciiFilename(filename) {
|
|
37
|
+
const cleaned = filename.normalize("NFKD").replaceAll(UNSAFE_FILENAME_CHARS, "-").replaceAll(NON_ASCII, "").trim();
|
|
38
|
+
return cleaned.length > 0 ? cleaned : "download";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build a `Content-Disposition` value.
|
|
42
|
+
*
|
|
43
|
+
* Emits both `filename` (ASCII, quoted) and RFC 5987 `filename*` (UTF-8
|
|
44
|
+
* percent-encoded) so a name with non-ASCII characters survives. Returns the
|
|
45
|
+
* bare disposition when no filename is known, which is the pre-existing
|
|
46
|
+
* behaviour for media with no database row.
|
|
47
|
+
*/
|
|
48
|
+
function contentDisposition(disposition, filename) {
|
|
49
|
+
if (!filename) return disposition;
|
|
50
|
+
return `${disposition}; filename="${toAsciiFilename(filename)}"; filename*=UTF-8''${encodeURIComponent(filename).replace(/['()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)}`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
14
54
|
//#region src/astro/routes/api/media/file/[...key].ts
|
|
15
55
|
const prerender = false;
|
|
16
56
|
const MAX_KEY_DECODES = 3;
|
|
@@ -58,13 +98,14 @@ const GET = async ({ params, locals, request, cache }) => {
|
|
|
58
98
|
if (!key) return apiError("NOT_FOUND", "File not found", 404);
|
|
59
99
|
if (isPrivateMediaKey(key)) return apiError("NOT_FOUND", "File not found", 404);
|
|
60
100
|
if (!emdash?.storage) return apiError("NOT_CONFIGURED", "Storage not configured", 500);
|
|
101
|
+
let unusedBody;
|
|
61
102
|
try {
|
|
62
103
|
const range = request.headers.has("If-Range") ? null : parseRangeHeader(request.headers.get("Range"));
|
|
63
104
|
if (range && cache?.enabled) cache.set(false);
|
|
64
105
|
const result = range ? await emdash.storage.download(key, { range }) : await emdash.storage.download(key);
|
|
106
|
+
unusedBody = result.body;
|
|
65
107
|
const served = range ? result.range : void 0;
|
|
66
108
|
if (range && !served && result.size > 0 && !resolveByteRange(range, result.size)) {
|
|
67
|
-
await result.body.cancel().catch(() => void 0);
|
|
68
109
|
const response = apiError("RANGE_NOT_SATISFIABLE", "Range not satisfiable", 416);
|
|
69
110
|
response.headers.set("Content-Range", `bytes */${result.size}`);
|
|
70
111
|
return response;
|
|
@@ -86,25 +127,38 @@ const GET = async ({ params, locals, request, cache }) => {
|
|
|
86
127
|
"Content-Security-Policy": "sandbox; default-src 'none'; img-src 'self'; style-src 'unsafe-inline'",
|
|
87
128
|
...validatorHeaders(result.size, result.lastModified)
|
|
88
129
|
};
|
|
89
|
-
|
|
90
|
-
|
|
130
|
+
const disposition = SAFE_INLINE_TYPES.has(result.contentType) ? "inline" : "attachment";
|
|
131
|
+
let filename = null;
|
|
132
|
+
if (disposition === "attachment") try {
|
|
133
|
+
filename = await new MediaRepository(emdash.db).findFilenameByStorageKey(key);
|
|
134
|
+
} catch {
|
|
135
|
+
filename = null;
|
|
136
|
+
}
|
|
137
|
+
headers["Content-Disposition"] = contentDisposition(disposition, filename);
|
|
138
|
+
const body = request.method === "HEAD" ? null : result.body;
|
|
91
139
|
if (served) {
|
|
92
140
|
const end = served.offset + served.length - 1;
|
|
93
141
|
headers["Content-Range"] = `bytes ${served.offset}-${end}/${result.size}`;
|
|
94
142
|
headers["Content-Length"] = String(served.length);
|
|
95
|
-
|
|
143
|
+
const response = new Response(body, {
|
|
96
144
|
status: 206,
|
|
97
145
|
headers
|
|
98
146
|
});
|
|
147
|
+
if (body) unusedBody = void 0;
|
|
148
|
+
return response;
|
|
99
149
|
}
|
|
100
150
|
if (result.size) headers["Content-Length"] = String(result.size);
|
|
101
|
-
|
|
151
|
+
const response = new Response(body, {
|
|
102
152
|
status: 200,
|
|
103
153
|
headers
|
|
104
154
|
});
|
|
155
|
+
if (body) unusedBody = void 0;
|
|
156
|
+
return response;
|
|
105
157
|
} catch (error) {
|
|
106
158
|
if (error instanceof Error && (error.message.includes("not found") || error.message.includes("NOT_FOUND"))) return apiError("NOT_FOUND", "File not found", 404);
|
|
107
159
|
return handleError(error, "Failed to serve file", "FILE_SERVE_ERROR");
|
|
160
|
+
} finally {
|
|
161
|
+
if (unusedBody && !unusedBody.locked) await unusedBody.cancel().catch(() => void 0);
|
|
108
162
|
}
|
|
109
163
|
};
|
|
110
164
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_...key_.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/media/file/[...key].ts"],"sourcesContent":["/**\n * Serve uploaded media files\n *\n * GET /_emdash/api/media/file/:key - Serve file from storage, or a byte range of it\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { apiError, handleError } from \"#api/error.js\";\nimport {\n\tIMMUTABLE_IMAGE_CACHE,\n\tMUTABLE_MEDIA_CACHE_CONTROL,\n\tisNotModified,\n\tvalidatorHeaders,\n} from \"#media/image-endpoint.js\";\n\nimport { parseRangeHeader, resolveByteRange } from \"../../../../../storage/range.js\";\nimport { isRefusedStorageKey } from \"../../../../../transfer/staging/keys.js\";\n\nexport const prerender = false;\n\nconst MAX_KEY_DECODES = 3;\n\n/**\n * Whether a key is, or percent-decodes to, a key this route must refuse.\n * Every decoding layer is checked because storage backends differ in whether\n * they decode keys; a key that is still encoded after the last layer, or\n * does not decode, is refused.\n */\nfunction isPrivateMediaKey(key: string): boolean {\n\tlet candidate = key;\n\tfor (let layer = 0; layer <= MAX_KEY_DECODES; layer++) {\n\t\tif (isRefusedStorageKey(candidate)) return true;\n\t\tlet decoded: string;\n\t\ttry {\n\t\t\tdecoded = decodeURIComponent(candidate);\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t\tif (decoded === candidate) return false;\n\t\tcandidate = decoded;\n\t}\n\treturn true;\n}\n\n/**\n * Content types that are safe to display inline (simple raster/vector images, video, audio).\n * Everything else gets Content-Disposition: attachment to prevent script execution.\n */\nconst SAFE_INLINE_TYPES = new Set([\n\t\"image/jpeg\",\n\t\"image/png\",\n\t\"image/gif\",\n\t\"image/webp\",\n\t\"image/avif\",\n\t\"image/x-icon\",\n\t\"video/mp4\",\n\t\"video/webm\",\n\t\"audio/mpeg\",\n\t\"audio/wav\",\n\t\"audio/ogg\",\n]);\n\nexport const GET: APIRoute = async ({ params, locals, request, cache }) => {\n\tconst { key } = params;\n\tconst { emdash } = locals;\n\n\tif (!key) {\n\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t}\n\n\t// Backup archives and transfer staging share the storage bucket but hold\n\t// whole-site content; they must never be reachable through this public,\n\t// unauthenticated route.\n\tif (isPrivateMediaKey(key)) {\n\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t}\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"Storage not configured\", 500);\n\t}\n\n\ttry {\n\t\t// Range requests that include If-Range are served as whole-file responses\n\t\t// because this route does not compare If-Range validators.\n\t\tconst range = request.headers.has(\"If-Range\")\n\t\t\t? null\n\t\t\t: parseRangeHeader(request.headers.get(\"Range\"));\n\t\t// The route cache keys entries by URL alone, so a cached partial\n\t\t// response would be served to requests for the whole file.\n\t\tif (range && cache?.enabled) cache.set(false);\n\t\tconst result = range\n\t\t\t? await emdash.storage.download(key, { range })\n\t\t\t: await emdash.storage.download(key);\n\t\tconst served = range ? result.range : undefined;\n\n\t\t// Adapters return the whole file for a range they don't serve, including\n\t\t// one past the end. A size of 0 may be unknown, so it rules nothing out.\n\t\tif (range && !served && result.size > 0 && !resolveByteRange(range, result.size)) {\n\t\t\tawait result.body.cancel().catch(() => undefined);\n\t\t\tconst response = apiError(\"RANGE_NOT_SATISFIABLE\", \"Range not satisfiable\", 416);\n\t\t\tresponse.headers.set(\"Content-Range\", `bytes */${result.size}`);\n\t\t\treturn response;\n\t\t}\n\n\t\tconst cacheControl = result.contentType.startsWith(\"image/\")\n\t\t\t? MUTABLE_MEDIA_CACHE_CONTROL\n\t\t\t: IMMUTABLE_IMAGE_CACHE;\n\n\t\tif (isNotModified(request, result.size, result.lastModified)) {\n\t\t\treturn new Response(null, {\n\t\t\t\tstatus: 304,\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": result.contentType,\n\t\t\t\t\t\"Cache-Control\": cacheControl,\n\t\t\t\t\t...validatorHeaders(result.size, result.lastModified),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": result.contentType,\n\t\t\t\"Cache-Control\": cacheControl,\n\t\t\t\"Accept-Ranges\": \"bytes\",\n\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t// Sandbox CSP on all user-uploaded content — prevents script execution\n\t\t\t// even for SVGs navigated to directly or content types that support scripting.\n\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\"sandbox; default-src 'none'; img-src 'self'; style-src 'unsafe-inline'\",\n\t\t\t...validatorHeaders(result.size, result.lastModified),\n\t\t};\n\n\t\t// Safe image/media types can render inline; everything else (SVG, PDF,\n\t\t// HTML, JS, etc.) must be downloaded to prevent stored XSS.\n\t\tif (SAFE_INLINE_TYPES.has(result.contentType)) {\n\t\t\theaders[\"Content-Disposition\"] = \"inline\";\n\t\t} else {\n\t\t\theaders[\"Content-Disposition\"] = \"attachment\";\n\t\t}\n\n\t\tif (served) {\n\t\t\tconst end = served.offset + served.length - 1;\n\t\t\theaders[\"Content-Range\"] = `bytes ${served.offset}-${end}/${result.size}`;\n\t\t\theaders[\"Content-Length\"] = String(served.length);\n\t\t\treturn new Response(result.body, { status: 206, headers });\n\t\t}\n\n\t\tif (result.size) {\n\t\t\theaders[\"Content-Length\"] = String(result.size);\n\t\t}\n\n\t\treturn new Response(result.body, { status: 200, headers });\n\t} catch (error) {\n\t\t// Check if it's a \"not found\" error\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\t(error.message.includes(\"not found\") || error.message.includes(\"NOT_FOUND\"))\n\t\t) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t\t}\n\t\treturn handleError(error, \"Failed to serve file\", \"FILE_SERVE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;AAmBA,MAAa,YAAY;AAEzB,MAAM,kBAAkB;;;;;;;AAQxB,SAAS,kBAAkB,KAAsB;CAChD,IAAI,YAAY;AAChB,MAAK,IAAI,QAAQ,GAAG,SAAS,iBAAiB,SAAS;AACtD,MAAI,oBAAoB,UAAU,CAAE,QAAO;EAC3C,IAAI;AACJ,MAAI;AACH,aAAU,mBAAmB,UAAU;UAChC;AACP,UAAO;;AAER,MAAI,YAAY,UAAW,QAAO;AAClC,cAAY;;AAEb,QAAO;;;;;;AAOR,MAAM,oBAAoB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,MAAgB,OAAO,EAAE,QAAQ,QAAQ,SAAS,YAAY;CAC1E,MAAM,EAAE,QAAQ;CAChB,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,IACJ,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAMpD,KAAI,kBAAkB,IAAI,CACzB,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAGpD,KAAI,CAAC,QAAQ,QACZ,QAAO,SAAS,kBAAkB,0BAA0B,IAAI;AAGjE,KAAI;EAGH,MAAM,QAAQ,QAAQ,QAAQ,IAAI,WAAW,GAC1C,OACA,iBAAiB,QAAQ,QAAQ,IAAI,QAAQ,CAAC;AAGjD,MAAI,SAAS,OAAO,QAAS,OAAM,IAAI,MAAM;EAC7C,MAAM,SAAS,QACZ,MAAM,OAAO,QAAQ,SAAS,KAAK,EAAE,OAAO,CAAC,GAC7C,MAAM,OAAO,QAAQ,SAAS,IAAI;EACrC,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAItC,MAAI,SAAS,CAAC,UAAU,OAAO,OAAO,KAAK,CAAC,iBAAiB,OAAO,OAAO,KAAK,EAAE;AACjF,SAAM,OAAO,KAAK,QAAQ,CAAC,YAAY,OAAU;GACjD,MAAM,WAAW,SAAS,yBAAyB,yBAAyB,IAAI;AAChF,YAAS,QAAQ,IAAI,iBAAiB,WAAW,OAAO,OAAO;AAC/D,UAAO;;EAGR,MAAM,eAAe,OAAO,YAAY,WAAW,SAAS,GACzD,8BACA;AAEH,MAAI,cAAc,SAAS,OAAO,MAAM,OAAO,aAAa,CAC3D,QAAO,IAAI,SAAS,MAAM;GACzB,QAAQ;GACR,SAAS;IACR,gBAAgB,OAAO;IACvB,iBAAiB;IACjB,GAAG,iBAAiB,OAAO,MAAM,OAAO,aAAa;IACrD;GACD,CAAC;EAGH,MAAM,UAAkC;GACvC,gBAAgB,OAAO;GACvB,iBAAiB;GACjB,iBAAiB;GACjB,0BAA0B;GAG1B,2BACC;GACD,GAAG,iBAAiB,OAAO,MAAM,OAAO,aAAa;GACrD;AAID,MAAI,kBAAkB,IAAI,OAAO,YAAY,CAC5C,SAAQ,yBAAyB;MAEjC,SAAQ,yBAAyB;AAGlC,MAAI,QAAQ;GACX,MAAM,MAAM,OAAO,SAAS,OAAO,SAAS;AAC5C,WAAQ,mBAAmB,SAAS,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO;AACnE,WAAQ,oBAAoB,OAAO,OAAO,OAAO;AACjD,UAAO,IAAI,SAAS,OAAO,MAAM;IAAE,QAAQ;IAAK;IAAS,CAAC;;AAG3D,MAAI,OAAO,KACV,SAAQ,oBAAoB,OAAO,OAAO,KAAK;AAGhD,SAAO,IAAI,SAAS,OAAO,MAAM;GAAE,QAAQ;GAAK;GAAS,CAAC;UAClD,OAAO;AAEf,MACC,iBAAiB,UAChB,MAAM,QAAQ,SAAS,YAAY,IAAI,MAAM,QAAQ,SAAS,YAAY,EAE3E,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAEpD,SAAO,YAAY,OAAO,wBAAwB,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"_...key_.mjs","names":[],"sources":["../../../../../../src/media/content-disposition.ts","../../../../../../src/astro/routes/api/media/file/[...key].ts"],"sourcesContent":["/**\n * Content-Disposition header construction for media downloads.\n *\n * The public media file route serves every non-inline type as an attachment.\n * Without a `filename` parameter the browser falls back to the last path\n * segment of the URL -- the storage key -- so a downloaded PDF lands in the\n * user's filesystem named after its ULID. These helpers build a header that\n * names the file the way the editor uploaded it.\n */\n\n/**\n * Characters unsafe in a filename on one or more platforms, plus the quote and\n * backslash that would otherwise break out of the quoted `filename=` value.\n */\n// eslint-disable-next-line no-control-regex -- stripping control characters is the point\nconst UNSAFE_FILENAME_CHARS = /[\\x00-\\x1F\\x7F\"\\\\/<>:|?*]/g;\n\n/** Anything outside printable ASCII, carried by `filename*` instead. */\nconst NON_ASCII = /[^\\x20-\\x7E]/g;\n\n/**\n * An ASCII-only, filesystem-safe rendering of `filename`, for the quoted\n * `filename=` parameter that older clients read.\n */\nexport function toAsciiFilename(filename: string): string {\n\tconst cleaned = filename\n\t\t.normalize(\"NFKD\")\n\t\t.replaceAll(UNSAFE_FILENAME_CHARS, \"-\")\n\t\t.replaceAll(NON_ASCII, \"\")\n\t\t.trim();\n\treturn cleaned.length > 0 ? cleaned : \"download\";\n}\n\n/**\n * Build a `Content-Disposition` value.\n *\n * Emits both `filename` (ASCII, quoted) and RFC 5987 `filename*` (UTF-8\n * percent-encoded) so a name with non-ASCII characters survives. Returns the\n * bare disposition when no filename is known, which is the pre-existing\n * behaviour for media with no database row.\n */\nexport function contentDisposition(\n\tdisposition: \"inline\" | \"attachment\",\n\tfilename?: string | null,\n): string {\n\tif (!filename) return disposition;\n\tconst ascii = toAsciiFilename(filename);\n\t// encodeURIComponent leaves ' ( ) * unescaped, but RFC 5987 attr-char does\n\t// not allow them; a strict client would discard filename* and fall back to\n\t// the ASCII name. Percent-encode them too.\n\tconst encoded = encodeURIComponent(filename).replace(\n\t\t/['()*]/g,\n\t\t(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,\n\t);\n\treturn `${disposition}; filename=\"${ascii}\"; filename*=UTF-8''${encoded}`;\n}\n","/**\n * Serve uploaded media files\n *\n * GET /_emdash/api/media/file/:key - Serve file from storage, or a byte range of it\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { apiError, handleError } from \"#api/error.js\";\nimport { MediaRepository } from \"#db/repositories/media.js\";\nimport { contentDisposition } from \"#media/content-disposition.js\";\nimport {\n\tIMMUTABLE_IMAGE_CACHE,\n\tMUTABLE_MEDIA_CACHE_CONTROL,\n\tisNotModified,\n\tvalidatorHeaders,\n} from \"#media/image-endpoint.js\";\n\nimport { parseRangeHeader, resolveByteRange } from \"../../../../../storage/range.js\";\nimport { isRefusedStorageKey } from \"../../../../../transfer/staging/keys.js\";\n\nexport const prerender = false;\n\nconst MAX_KEY_DECODES = 3;\n\n/**\n * Whether a key is, or percent-decodes to, a key this route must refuse.\n * Every decoding layer is checked because storage backends differ in whether\n * they decode keys; a key that is still encoded after the last layer, or\n * does not decode, is refused.\n */\nfunction isPrivateMediaKey(key: string): boolean {\n\tlet candidate = key;\n\tfor (let layer = 0; layer <= MAX_KEY_DECODES; layer++) {\n\t\tif (isRefusedStorageKey(candidate)) return true;\n\t\tlet decoded: string;\n\t\ttry {\n\t\t\tdecoded = decodeURIComponent(candidate);\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t\tif (decoded === candidate) return false;\n\t\tcandidate = decoded;\n\t}\n\treturn true;\n}\n\n/**\n * Content types that are safe to display inline (simple raster/vector images, video, audio).\n * Everything else gets Content-Disposition: attachment to prevent script execution.\n */\nconst SAFE_INLINE_TYPES = new Set([\n\t\"image/jpeg\",\n\t\"image/png\",\n\t\"image/gif\",\n\t\"image/webp\",\n\t\"image/avif\",\n\t\"image/x-icon\",\n\t\"video/mp4\",\n\t\"video/webm\",\n\t\"audio/mpeg\",\n\t\"audio/wav\",\n\t\"audio/ogg\",\n]);\n\nexport const GET: APIRoute = async ({ params, locals, request, cache }) => {\n\tconst { key } = params;\n\tconst { emdash } = locals;\n\n\tif (!key) {\n\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t}\n\n\t// Backup archives and transfer staging share the storage bucket but hold\n\t// whole-site content; they must never be reachable through this public,\n\t// unauthenticated route.\n\tif (isPrivateMediaKey(key)) {\n\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t}\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"Storage not configured\", 500);\n\t}\n\n\t// An unread download retains its storage connection even for a bodyless response.\n\tlet unusedBody: ReadableStream<Uint8Array> | undefined;\n\ttry {\n\t\t// Range requests that include If-Range are served as whole-file responses\n\t\t// because this route does not compare If-Range validators.\n\t\tconst range = request.headers.has(\"If-Range\")\n\t\t\t? null\n\t\t\t: parseRangeHeader(request.headers.get(\"Range\"));\n\t\t// The route cache keys entries by URL alone, so a cached partial\n\t\t// response would be served to requests for the whole file.\n\t\tif (range && cache?.enabled) cache.set(false);\n\t\tconst result = range\n\t\t\t? await emdash.storage.download(key, { range })\n\t\t\t: await emdash.storage.download(key);\n\t\tunusedBody = result.body;\n\t\tconst served = range ? result.range : undefined;\n\n\t\t// Adapters return the whole file for a range they don't serve, including\n\t\t// one past the end. A size of 0 may be unknown, so it rules nothing out.\n\t\tif (range && !served && result.size > 0 && !resolveByteRange(range, result.size)) {\n\t\t\tconst response = apiError(\"RANGE_NOT_SATISFIABLE\", \"Range not satisfiable\", 416);\n\t\t\tresponse.headers.set(\"Content-Range\", `bytes */${result.size}`);\n\t\t\treturn response;\n\t\t}\n\n\t\tconst cacheControl = result.contentType.startsWith(\"image/\")\n\t\t\t? MUTABLE_MEDIA_CACHE_CONTROL\n\t\t\t: IMMUTABLE_IMAGE_CACHE;\n\n\t\tif (isNotModified(request, result.size, result.lastModified)) {\n\t\t\treturn new Response(null, {\n\t\t\t\tstatus: 304,\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": result.contentType,\n\t\t\t\t\t\"Cache-Control\": cacheControl,\n\t\t\t\t\t...validatorHeaders(result.size, result.lastModified),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": result.contentType,\n\t\t\t\"Cache-Control\": cacheControl,\n\t\t\t\"Accept-Ranges\": \"bytes\",\n\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t// Sandbox CSP on all user-uploaded content — prevents script execution\n\t\t\t// even for SVGs navigated to directly or content types that support scripting.\n\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\"sandbox; default-src 'none'; img-src 'self'; style-src 'unsafe-inline'\",\n\t\t\t...validatorHeaders(result.size, result.lastModified),\n\t\t};\n\n\t\t// Safe image/media types can render inline; everything else (SVG, PDF,\n\t\t// HTML, JS, etc.) must be downloaded to prevent stored XSS.\n\t\tconst disposition = SAFE_INLINE_TYPES.has(result.contentType) ? \"inline\" : \"attachment\";\n\n\t\t// Name the download after the uploaded filename. Without this the\n\t\t// browser falls back to the last path segment of the URL -- the storage\n\t\t// key -- and every downloaded document is named after its ULID.\n\t\t// Skipped for inline types, where no filename is shown to anyone.\n\t\tlet filename: string | null = null;\n\t\tif (disposition === \"attachment\") {\n\t\t\t// A failed lookup must not fail the download: naming the file is a\n\t\t\t// nicety, and media with no row is served under the bare disposition.\n\t\t\ttry {\n\t\t\t\tfilename = await new MediaRepository(emdash.db).findFilenameByStorageKey(key);\n\t\t\t} catch {\n\t\t\t\tfilename = null;\n\t\t\t}\n\t\t}\n\t\theaders[\"Content-Disposition\"] = contentDisposition(disposition, filename);\n\n\t\tconst body = request.method === \"HEAD\" ? null : result.body;\n\n\t\tif (served) {\n\t\t\tconst end = served.offset + served.length - 1;\n\t\t\theaders[\"Content-Range\"] = `bytes ${served.offset}-${end}/${result.size}`;\n\t\t\theaders[\"Content-Length\"] = String(served.length);\n\t\t\tconst response = new Response(body, { status: 206, headers });\n\t\t\tif (body) unusedBody = undefined;\n\t\t\treturn response;\n\t\t}\n\n\t\tif (result.size) {\n\t\t\theaders[\"Content-Length\"] = String(result.size);\n\t\t}\n\n\t\tconst response = new Response(body, { status: 200, headers });\n\t\tif (body) unusedBody = undefined;\n\t\treturn response;\n\t} catch (error) {\n\t\t// Check if it's a \"not found\" error\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\t(error.message.includes(\"not found\") || error.message.includes(\"NOT_FOUND\"))\n\t\t) {\n\t\t\treturn apiError(\"NOT_FOUND\", \"File not found\", 404);\n\t\t}\n\t\treturn handleError(error, \"Failed to serve file\", \"FILE_SERVE_ERROR\");\n\t} finally {\n\t\tif (unusedBody && !unusedBody.locked) await unusedBody.cancel().catch(() => undefined);\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAM,wBAAwB;;AAG9B,MAAM,YAAY;;;;;AAMlB,SAAgB,gBAAgB,UAA0B;CACzD,MAAM,UAAU,SACd,UAAU,OAAO,CACjB,WAAW,uBAAuB,IAAI,CACtC,WAAW,WAAW,GAAG,CACzB,MAAM;AACR,QAAO,QAAQ,SAAS,IAAI,UAAU;;;;;;;;;;AAWvC,SAAgB,mBACf,aACA,UACS;AACT,KAAI,CAAC,SAAU,QAAO;AAStB,QAAO,GAAG,YAAY,cARR,gBAAgB,SAAS,CAQG,sBAJ1B,mBAAmB,SAAS,CAAC,QAC5C,YACC,MAAM,IAAI,EAAE,WAAW,EAAE,CAAC,SAAS,GAAG,CAAC,aAAa,GACrD;;;;;AChCF,MAAa,YAAY;AAEzB,MAAM,kBAAkB;;;;;;;AAQxB,SAAS,kBAAkB,KAAsB;CAChD,IAAI,YAAY;AAChB,MAAK,IAAI,QAAQ,GAAG,SAAS,iBAAiB,SAAS;AACtD,MAAI,oBAAoB,UAAU,CAAE,QAAO;EAC3C,IAAI;AACJ,MAAI;AACH,aAAU,mBAAmB,UAAU;UAChC;AACP,UAAO;;AAER,MAAI,YAAY,UAAW,QAAO;AAClC,cAAY;;AAEb,QAAO;;;;;;AAOR,MAAM,oBAAoB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,MAAgB,OAAO,EAAE,QAAQ,QAAQ,SAAS,YAAY;CAC1E,MAAM,EAAE,QAAQ;CAChB,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,IACJ,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAMpD,KAAI,kBAAkB,IAAI,CACzB,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAGpD,KAAI,CAAC,QAAQ,QACZ,QAAO,SAAS,kBAAkB,0BAA0B,IAAI;CAIjE,IAAI;AACJ,KAAI;EAGH,MAAM,QAAQ,QAAQ,QAAQ,IAAI,WAAW,GAC1C,OACA,iBAAiB,QAAQ,QAAQ,IAAI,QAAQ,CAAC;AAGjD,MAAI,SAAS,OAAO,QAAS,OAAM,IAAI,MAAM;EAC7C,MAAM,SAAS,QACZ,MAAM,OAAO,QAAQ,SAAS,KAAK,EAAE,OAAO,CAAC,GAC7C,MAAM,OAAO,QAAQ,SAAS,IAAI;AACrC,eAAa,OAAO;EACpB,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAItC,MAAI,SAAS,CAAC,UAAU,OAAO,OAAO,KAAK,CAAC,iBAAiB,OAAO,OAAO,KAAK,EAAE;GACjF,MAAM,WAAW,SAAS,yBAAyB,yBAAyB,IAAI;AAChF,YAAS,QAAQ,IAAI,iBAAiB,WAAW,OAAO,OAAO;AAC/D,UAAO;;EAGR,MAAM,eAAe,OAAO,YAAY,WAAW,SAAS,GACzD,8BACA;AAEH,MAAI,cAAc,SAAS,OAAO,MAAM,OAAO,aAAa,CAC3D,QAAO,IAAI,SAAS,MAAM;GACzB,QAAQ;GACR,SAAS;IACR,gBAAgB,OAAO;IACvB,iBAAiB;IACjB,GAAG,iBAAiB,OAAO,MAAM,OAAO,aAAa;IACrD;GACD,CAAC;EAGH,MAAM,UAAkC;GACvC,gBAAgB,OAAO;GACvB,iBAAiB;GACjB,iBAAiB;GACjB,0BAA0B;GAG1B,2BACC;GACD,GAAG,iBAAiB,OAAO,MAAM,OAAO,aAAa;GACrD;EAID,MAAM,cAAc,kBAAkB,IAAI,OAAO,YAAY,GAAG,WAAW;EAM3E,IAAI,WAA0B;AAC9B,MAAI,gBAAgB,aAGnB,KAAI;AACH,cAAW,MAAM,IAAI,gBAAgB,OAAO,GAAG,CAAC,yBAAyB,IAAI;UACtE;AACP,cAAW;;AAGb,UAAQ,yBAAyB,mBAAmB,aAAa,SAAS;EAE1E,MAAM,OAAO,QAAQ,WAAW,SAAS,OAAO,OAAO;AAEvD,MAAI,QAAQ;GACX,MAAM,MAAM,OAAO,SAAS,OAAO,SAAS;AAC5C,WAAQ,mBAAmB,SAAS,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO;AACnE,WAAQ,oBAAoB,OAAO,OAAO,OAAO;GACjD,MAAM,WAAW,IAAI,SAAS,MAAM;IAAE,QAAQ;IAAK;IAAS,CAAC;AAC7D,OAAI,KAAM,cAAa;AACvB,UAAO;;AAGR,MAAI,OAAO,KACV,SAAQ,oBAAoB,OAAO,OAAO,KAAK;EAGhD,MAAM,WAAW,IAAI,SAAS,MAAM;GAAE,QAAQ;GAAK;GAAS,CAAC;AAC7D,MAAI,KAAM,cAAa;AACvB,SAAO;UACC,OAAO;AAEf,MACC,iBAAiB,UAChB,MAAM,QAAQ,SAAS,YAAY,IAAI,MAAM,QAAQ,SAAS,YAAY,EAE3E,QAAO,SAAS,aAAa,kBAAkB,IAAI;AAEpD,SAAO,YAAY,OAAO,wBAAwB,mBAAmB;WAC5D;AACT,MAAI,cAAc,CAAC,WAAW,OAAQ,OAAM,WAAW,QAAQ,CAAC,YAAY,OAAU"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import "../../../../../config-
|
|
1
|
+
import "../../../../../config-Cs_AwWXI.mjs";
|
|
2
2
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
3
|
-
import "../../../../../url-
|
|
4
|
-
import "../../../../../types-
|
|
3
|
+
import "../../../../../url-DTfGDJhI.mjs";
|
|
4
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
5
5
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
6
|
-
import "../../../../../errors-
|
|
7
|
-
import { a as handleMediaFolderUpdate, n as handleMediaFolderDelete, r as handleMediaFolderGet } from "../../../../../media-folders-
|
|
6
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
7
|
+
import { a as handleMediaFolderUpdate, n as handleMediaFolderDelete, r as handleMediaFolderGet } from "../../../../../media-folders-CI0Wydfo.mjs";
|
|
8
8
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
9
9
|
import "../../../../../site-settings-DRHfX7bq.mjs";
|
|
10
|
-
import { a as unwrapResult, t as apiError } from "../../../../../error-
|
|
11
|
-
import { n as parseBody, t as isParseError } from "../../../../../parse-
|
|
12
|
-
import "../../../../../redirects-
|
|
13
|
-
import "../../../../../entry-lock-
|
|
14
|
-
import { c as mediaFolderBody, l as mediaFolderIdSchema } from "../../../../../media-
|
|
10
|
+
import { a as unwrapResult, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
11
|
+
import { n as parseBody, t as isParseError } from "../../../../../parse-B_b6gZxG.mjs";
|
|
12
|
+
import "../../../../../redirects-CyvvZrCJ.mjs";
|
|
13
|
+
import "../../../../../entry-lock-CRVmruM0.mjs";
|
|
14
|
+
import { c as mediaFolderBody, l as mediaFolderIdSchema } from "../../../../../media-BR4_t-Wd.mjs";
|
|
15
15
|
import "../../../../../comments-yiRFx3w5.mjs";
|
|
16
|
-
import "../../../../../byline-fields-
|
|
17
|
-
import "../../../../../menus-
|
|
16
|
+
import "../../../../../byline-fields-CiR8FvvF.mjs";
|
|
17
|
+
import "../../../../../menus-uEAxWAm1.mjs";
|
|
18
18
|
import "../../../../../status-BFNdxzKc.mjs";
|
|
19
19
|
import "../../../../../api/schemas/index.mjs";
|
|
20
|
-
import { o as requirePerm } from "../../../../../authorize-
|
|
20
|
+
import { o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
21
21
|
|
|
22
22
|
//#region src/astro/routes/api/media/folders/[id].ts
|
|
23
23
|
const prerender = false;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import "../../../../../config-
|
|
1
|
+
import "../../../../../config-Cs_AwWXI.mjs";
|
|
2
2
|
import "../../../../../base64-BQBZwXCx.mjs";
|
|
3
|
-
import "../../../../../url-
|
|
4
|
-
import "../../../../../types-
|
|
3
|
+
import "../../../../../url-DTfGDJhI.mjs";
|
|
4
|
+
import "../../../../../types-DwhEvIVb.mjs";
|
|
5
5
|
import "../../../../../errors-B4f4It-2.mjs";
|
|
6
|
-
import "../../../../../errors-
|
|
7
|
-
import { i as handleMediaFolderList, t as handleMediaFolderCreate } from "../../../../../media-folders-
|
|
6
|
+
import "../../../../../errors-8gJqv-XV.mjs";
|
|
7
|
+
import { i as handleMediaFolderList, t as handleMediaFolderCreate } from "../../../../../media-folders-CI0Wydfo.mjs";
|
|
8
8
|
import "../../../../../settings-Dd1uivmQ.mjs";
|
|
9
9
|
import "../../../../../site-settings-DRHfX7bq.mjs";
|
|
10
|
-
import { a as unwrapResult, t as apiError } from "../../../../../error-
|
|
11
|
-
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../parse-
|
|
12
|
-
import "../../../../../redirects-
|
|
13
|
-
import "../../../../../entry-lock-
|
|
14
|
-
import { c as mediaFolderBody, u as mediaFolderListQuery } from "../../../../../media-
|
|
10
|
+
import { a as unwrapResult, t as apiError } from "../../../../../error-BCMgPxdn.mjs";
|
|
11
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../parse-B_b6gZxG.mjs";
|
|
12
|
+
import "../../../../../redirects-CyvvZrCJ.mjs";
|
|
13
|
+
import "../../../../../entry-lock-CRVmruM0.mjs";
|
|
14
|
+
import { c as mediaFolderBody, u as mediaFolderListQuery } from "../../../../../media-BR4_t-Wd.mjs";
|
|
15
15
|
import "../../../../../comments-yiRFx3w5.mjs";
|
|
16
|
-
import "../../../../../byline-fields-
|
|
17
|
-
import "../../../../../menus-
|
|
16
|
+
import "../../../../../byline-fields-CiR8FvvF.mjs";
|
|
17
|
+
import "../../../../../menus-uEAxWAm1.mjs";
|
|
18
18
|
import "../../../../../status-BFNdxzKc.mjs";
|
|
19
19
|
import "../../../../../api/schemas/index.mjs";
|
|
20
|
-
import { o as requirePerm } from "../../../../../authorize-
|
|
20
|
+
import { o as requirePerm } from "../../../../../authorize-NJgp8kLI.mjs";
|
|
21
21
|
|
|
22
22
|
//#region src/astro/routes/api/media/folders/index.ts
|
|
23
23
|
const prerender = false;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "../../../../../../base64-BQBZwXCx.mjs";
|
|
2
|
-
import "../../../../../../types-
|
|
2
|
+
import "../../../../../../types-DwhEvIVb.mjs";
|
|
3
3
|
import "../../../../../../errors-B4f4It-2.mjs";
|
|
4
|
-
import "../../../../../../errors-
|
|
5
|
-
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-
|
|
6
|
-
import { o as requirePerm } from "../../../../../../authorize-
|
|
4
|
+
import "../../../../../../errors-8gJqv-XV.mjs";
|
|
5
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-BCMgPxdn.mjs";
|
|
6
|
+
import { o as requirePerm } from "../../../../../../authorize-NJgp8kLI.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/astro/routes/api/media/providers/[providerId]/[itemId].ts
|
|
9
9
|
const prerender = false;
|