emdash 0.40.1 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-token-DBki7IT4.mjs +26 -0
- package/dist/action-token-DBki7IT4.mjs.map +1 -0
- package/dist/activation-DDuqAat2.mjs +387 -0
- package/dist/activation-DDuqAat2.mjs.map +1 -0
- package/dist/adapters-BrZxU6vM.d.mts +171 -0
- package/dist/adapters-BrZxU6vM.d.mts.map +1 -0
- package/dist/allowed-origins-CFtudhyw.mjs +116 -0
- package/dist/allowed-origins-CFtudhyw.mjs.map +1 -0
- package/dist/api/route-utils.d.mts +5 -4
- package/dist/api/route-utils.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +52 -46
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +11 -10
- package/dist/api-CFQn8VLR.mjs +4973 -0
- package/dist/api-CFQn8VLR.mjs.map +1 -0
- package/dist/api-tokens-P3mAaQgr.mjs +166 -0
- package/dist/api-tokens-P3mAaQgr.mjs.map +1 -0
- package/dist/apply-C1kq5l7p.mjs +1672 -0
- package/dist/apply-C1kq5l7p.mjs.map +1 -0
- package/dist/approvals-l9sGqPmL.mjs +460 -0
- package/dist/approvals-l9sGqPmL.mjs.map +1 -0
- package/dist/artifact-fetch-CWxyELVI.mjs +659 -0
- package/dist/artifact-fetch-CWxyELVI.mjs.map +1 -0
- package/dist/astro/index.d.mts +14 -14
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +106 -560
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +12 -12
- package/dist/astro/middleware/auth.mjs +10 -10
- 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 +19 -9
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.d.mts +2 -1
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +15 -6
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +12 -12
- package/dist/astro/middleware.mjs +114 -107
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +15 -14
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +15 -14
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
- 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 +7 -7
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +18 -17
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +18 -17
- package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +18 -17
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +36 -27
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +32 -26
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +32 -26
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +20 -19
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/bulk.mjs +19 -18
- package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/index.mjs +19 -18
- package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/core-update.d.mts +8 -0
- package/dist/astro/routes/api/admin/core-update.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/core-update.mjs +28 -0
- package/dist/astro/routes/api/admin/core-update.mjs.map +1 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -20
- package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -22
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -22
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +26 -25
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +32 -31
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -22
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -22
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +75 -69
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +74 -68
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +75 -69
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +86 -79
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +75 -69
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +10 -7
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +74 -68
- 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 +85 -78
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +74 -68
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +75 -69
- 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 +87 -80
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -71
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +75 -69
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +74 -68
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +74 -68
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +10 -7
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +74 -68
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +42 -41
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +42 -41
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +45 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +45 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +45 -44
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +46 -45
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +46 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +46 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +46 -45
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +44 -43
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +46 -45
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +16 -15
- package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
- package/dist/astro/routes/api/admin/users/index.mjs +15 -14
- package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +23 -19
- package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/index.mjs +17 -16
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -17
- package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/logout.mjs +5 -5
- package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +19 -15
- package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +16 -15
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +5 -5
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +13 -4
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +15 -14
- package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
- package/dist/astro/routes/api/auth/passkey/options.mjs +20 -19
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -17
- package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -18
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/verify.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/passkey/verify.mjs +23 -19
- package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/complete.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/signup/complete.mjs +23 -19
- package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/request.mjs +18 -17
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -19
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -11
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +33 -32
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +44 -54
- 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 +36 -30
- 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 +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +27 -25
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +19 -18
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/index.mjs +16 -15
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +16 -15
- package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
- package/dist/astro/routes/api/dashboard.mjs +13 -10
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +5 -5
- package/dist/astro/routes/api/health.mjs +6 -6
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +25 -24
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -14
- package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +167 -21
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs +20 -19
- package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -18
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -28
- 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 +25 -24
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -35
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +6 -6
- package/dist/astro/routes/api/mcp.mjs +167 -110
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +20 -19
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/replace.mjs +17 -16
- package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
- package/dist/astro/routes/api/media/_id_/usage.mjs +34 -33
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +32 -31
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
- package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
- package/dist/astro/routes/api/media/folders/_id_.mjs +17 -16
- package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/index.mjs +17 -16
- package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
- package/dist/astro/routes/api/media/providers/index.mjs +5 -5
- package/dist/astro/routes/api/media/upload-url.mjs +19 -18
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +36 -35
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +19 -18
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +19 -18
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
- package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
- package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
- package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
- package/dist/astro/routes/api/oauth/register.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/register.mjs +15 -7
- package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
- package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
- package/dist/astro/routes/api/oauth/token.mjs +8 -8
- package/dist/astro/routes/api/openapi.json.mjs +21 -20
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -11
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
- 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 +20 -19
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +20 -19
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +36 -30
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +38 -32
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
- package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +26 -6
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +74 -68
- 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 +74 -68
- 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 +74 -68
- package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +76 -70
- 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 +74 -68
- 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 +74 -68
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +74 -68
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +74 -68
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +74 -68
- 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 +74 -68
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +74 -68
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +20 -19
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +19 -18
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +20 -19
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +9 -9
- package/dist/astro/routes/api/search/suggest.mjs +19 -18
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +19 -18
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/email.mjs +6 -6
- package/dist/astro/routes/api/settings.mjs +23 -22
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +26 -24
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +19 -18
- package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +47 -40
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
- package/dist/astro/routes/api/setup/index.mjs +52 -45
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +6 -6
- package/dist/astro/routes/api/snapshot.mjs +8 -8
- 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 +24 -23
- 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 +42 -40
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/typegen.mjs +8 -39
- package/dist/astro/routes/api/typegen.mjs.map +1 -1
- package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +20 -19
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -19
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -19
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
- package/dist/astro/routes/api/widget-areas/index.mjs +20 -19
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +5 -5
- package/dist/astro/routes/robots.txt.mjs +7 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +8 -8
- package/dist/astro/types.d.mts +30 -18
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/audit-BszbE_BP.mjs +127 -0
- package/dist/audit-BszbE_BP.mjs.map +1 -0
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/authoritative-records-dSvXCfzb.mjs +5172 -0
- package/dist/authoritative-records-dSvXCfzb.mjs.map +1 -0
- package/dist/authorize-soZXK7U0.mjs +49 -0
- package/dist/authorize-soZXK7U0.mjs.map +1 -0
- package/dist/backup-DQ3CABsO.mjs +246 -0
- package/dist/backup-DQ3CABsO.mjs.map +1 -0
- package/dist/block-types-DIG_KZwi.mjs +132 -0
- package/dist/block-types-DIG_KZwi.mjs.map +1 -0
- package/dist/block-values-BrTrtA-v.mjs +175 -0
- package/dist/block-values-BrTrtA-v.mjs.map +1 -0
- package/dist/byline-02tu_Uc-.mjs +909 -0
- package/dist/byline-02tu_Uc-.mjs.map +1 -0
- package/dist/byline-fields-B01Txzyx.mjs +123 -0
- package/dist/byline-fields-B01Txzyx.mjs.map +1 -0
- package/dist/byline-fields-DHJs0Mja.mjs +280 -0
- package/dist/byline-fields-DHJs0Mja.mjs.map +1 -0
- package/dist/byline-registry-dvt4N3xV.mjs +406 -0
- package/dist/byline-registry-dvt4N3xV.mjs.map +1 -0
- package/dist/bylines-COTwmMBF.mjs +150 -0
- package/dist/bylines-COTwmMBF.mjs.map +1 -0
- package/dist/bylines-D_S8UKRX.mjs +214 -0
- package/dist/bylines-D_S8UKRX.mjs.map +1 -0
- package/dist/cache-CPanL9IO.mjs +114 -0
- package/dist/cache-CPanL9IO.mjs.map +1 -0
- package/dist/canonical-CAecl1UQ.mjs +174 -0
- package/dist/canonical-CAecl1UQ.mjs.map +1 -0
- package/dist/capture-triggers-CdZfvHtF.mjs +362 -0
- package/dist/capture-triggers-CdZfvHtF.mjs.map +1 -0
- package/dist/challenge-store-CxZxPqaw.mjs +51 -0
- package/dist/challenge-store-CxZxPqaw.mjs.map +1 -0
- package/dist/checksum-DtH6m5uk.mjs +162 -0
- package/dist/checksum-DtH6m5uk.mjs.map +1 -0
- package/dist/chrome-tags-CKELm-bo.mjs +24 -0
- package/dist/chrome-tags-CKELm-bo.mjs.map +1 -0
- package/dist/chunks-DBmkKmBH.mjs +25 -0
- package/dist/chunks-DBmkKmBH.mjs.map +1 -0
- package/dist/cli/index.mjs +380 -1620
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +39 -34
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +8 -3
- package/dist/client/index.mjs.map +1 -1
- package/dist/collection-deletion-JecE26cS.mjs +436 -0
- package/dist/collection-deletion-JecE26cS.mjs.map +1 -0
- package/dist/collection-deletion-processor-DgCfF3a1.mjs +217 -0
- package/dist/collection-deletion-processor-DgCfF3a1.mjs.map +1 -0
- package/dist/collection-slugs-cache-BNRAPNiu.mjs +85 -0
- package/dist/collection-slugs-cache-BNRAPNiu.mjs.map +1 -0
- package/dist/comment-Cq1UYN8_.mjs +313 -0
- package/dist/comment-Cq1UYN8_.mjs.map +1 -0
- package/dist/comment-reaction-DPeGAfjd.mjs +85 -0
- package/dist/comment-reaction-DPeGAfjd.mjs.map +1 -0
- package/dist/comments-BRtp992B.mjs +99 -0
- package/dist/comments-BRtp992B.mjs.map +1 -0
- package/dist/comments-Bi2j9IoX.mjs +195 -0
- package/dist/comments-Bi2j9IoX.mjs.map +1 -0
- package/dist/components-CQY-Sgm-.mjs +108 -0
- package/dist/components-CQY-Sgm-.mjs.map +1 -0
- package/dist/config-BnuORwSP.mjs +242 -0
- package/dist/config-BnuORwSP.mjs.map +1 -0
- package/dist/config-CDmPF4p7.d.mts +39 -0
- package/dist/config-CDmPF4p7.d.mts.map +1 -0
- package/dist/config-DHsDMpXc.d.mts +6707 -0
- package/dist/config-DHsDMpXc.d.mts.map +1 -0
- package/dist/connection-B9pIasFd.mjs +36 -0
- package/dist/connection-B9pIasFd.mjs.map +1 -0
- package/dist/content-RzEXY3QX.mjs +2020 -0
- package/dist/content-RzEXY3QX.mjs.map +1 -0
- package/dist/content-list-query-CnXfe1Nu.d.mts +26 -0
- package/dist/content-list-query-CnXfe1Nu.d.mts.map +1 -0
- package/dist/content-policy-Dm32n9C6.mjs +46 -0
- package/dist/content-policy-Dm32n9C6.mjs.map +1 -0
- package/dist/content-repair-B-k5JrVN.mjs +442 -0
- package/dist/content-repair-B-k5JrVN.mjs.map +1 -0
- package/dist/context-CtRvoSAj.mjs +2026 -0
- package/dist/context-CtRvoSAj.mjs.map +1 -0
- package/dist/credits-CAFPFhuk.mjs +110 -0
- package/dist/credits-CAFPFhuk.mjs.map +1 -0
- package/dist/cron-xe5XKqA-.mjs +306 -0
- package/dist/cron-xe5XKqA-.mjs.map +1 -0
- package/dist/dashboard-BoV4pwPP.mjs +151 -0
- package/dist/dashboard-BoV4pwPP.mjs.map +1 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +4 -4
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +4 -4
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +4 -4
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/default-DaoYyFRS.mjs +81 -0
- package/dist/default-DaoYyFRS.mjs.map +1 -0
- package/dist/deferred-tasks-OBADxoFf.d.mts +9 -0
- package/dist/deferred-tasks-OBADxoFf.d.mts.map +1 -0
- package/dist/destination-r2zIAZ2S.mjs +18 -0
- package/dist/destination-r2zIAZ2S.mjs.map +1 -0
- package/dist/dev-typegen-8JlYYFno.mjs +29 -0
- package/dist/dev-typegen-8JlYYFno.mjs.map +1 -0
- package/dist/device-flow-CzKi6tID.mjs +521 -0
- package/dist/device-flow-CzKi6tID.mjs.map +1 -0
- package/dist/digest-DiYAoZpf.mjs +194 -0
- package/dist/digest-DiYAoZpf.mjs.map +1 -0
- package/dist/direct-executor-CsEmH_2m.mjs +104 -0
- package/dist/direct-executor-CsEmH_2m.mjs.map +1 -0
- package/dist/dist-Cfu8mMBs.mjs +810 -0
- package/dist/dist-Cfu8mMBs.mjs.map +1 -0
- package/dist/email-console-DmqVF5J_.mjs +50 -0
- package/dist/email-console-DmqVF5J_.mjs.map +1 -0
- package/dist/email-locale-B5OjmAj_.mjs +25 -0
- package/dist/email-locale-B5OjmAj_.mjs.map +1 -0
- package/dist/emdash-runtime-CMdYH2Of.mjs +4229 -0
- package/dist/emdash-runtime-CMdYH2Of.mjs.map +1 -0
- package/dist/enrich-BDdVNeDK.mjs +194 -0
- package/dist/enrich-BDdVNeDK.mjs.map +1 -0
- package/dist/entry-lock-B-1bUDxX.d.mts +4544 -0
- package/dist/entry-lock-B-1bUDxX.d.mts.map +1 -0
- package/dist/entry-lock-B5eaZEZP.mjs +163 -0
- package/dist/entry-lock-B5eaZEZP.mjs.map +1 -0
- package/dist/entry-lock-PP1JCXBB.mjs +1180 -0
- package/dist/entry-lock-PP1JCXBB.mjs.map +1 -0
- package/dist/entry-locks-DJAqVweV.mjs +167 -0
- package/dist/entry-locks-DJAqVweV.mjs.map +1 -0
- package/dist/env-types-BaTCgn-y.mjs +38 -0
- package/dist/env-types-BaTCgn-y.mjs.map +1 -0
- package/dist/error-CEdm_AWU.mjs +90 -0
- package/dist/error-CEdm_AWU.mjs.map +1 -0
- package/dist/errors-CNvATh_7.mjs +469 -0
- package/dist/errors-CNvATh_7.mjs.map +1 -0
- package/dist/errors-CjXd1LgH.mjs +120 -0
- package/dist/errors-CjXd1LgH.mjs.map +1 -0
- package/dist/escape-nJW7dR0s.mjs +9 -0
- package/dist/escape-nJW7dR0s.mjs.map +1 -0
- package/dist/fence-BrnQffdY.mjs +162 -0
- package/dist/fence-BrnQffdY.mjs.map +1 -0
- package/dist/field-defs-cache-DEkFYCDE.mjs +77 -0
- package/dist/field-defs-cache-DEkFYCDE.mjs.map +1 -0
- package/dist/field-map-Cp5hDSRU.mjs +83 -0
- package/dist/field-map-Cp5hDSRU.mjs.map +1 -0
- package/dist/focal-point-JX8kcOTQ.mjs +23 -0
- package/dist/focal-point-JX8kcOTQ.mjs.map +1 -0
- package/dist/fts-manager-DU03MxWu.mjs +443 -0
- package/dist/fts-manager-DU03MxWu.mjs.map +1 -0
- package/dist/gc-Gf9LOF42.mjs +75 -0
- package/dist/gc-Gf9LOF42.mjs.map +1 -0
- package/dist/hash-CY4QdeMJ.mjs +37 -0
- package/dist/hash-CY4QdeMJ.mjs.map +1 -0
- package/dist/hook-result-DjdVwWpw.d.mts +31 -0
- package/dist/hook-result-DjdVwWpw.d.mts.map +1 -0
- package/dist/hreflang-Bq0ahAd4.mjs +105 -0
- package/dist/hreflang-Bq0ahAd4.mjs.map +1 -0
- package/dist/hreflang-C7ETs0Tv.d.mts +50 -0
- package/dist/hreflang-C7ETs0Tv.d.mts.map +1 -0
- package/dist/http-route-dispatch-B2G7_OOm.mjs +339 -0
- package/dist/http-route-dispatch-B2G7_OOm.mjs.map +1 -0
- package/dist/identity-u3KgtUC9.mjs +35 -0
- package/dist/identity-u3KgtUC9.mjs.map +1 -0
- package/dist/import-CzP9ffo0.mjs +2020 -0
- package/dist/import-CzP9ffo0.mjs.map +1 -0
- package/dist/index-D1_ykO2u.d.mts +623 -0
- package/dist/index-D1_ykO2u.d.mts.map +1 -0
- package/dist/index.d.mts +24 -24
- package/dist/index.mjs +108 -102
- package/dist/install-finalization-TbcQozrV.mjs +58 -0
- package/dist/install-finalization-TbcQozrV.mjs.map +1 -0
- package/dist/keys-r08WvAng.mjs +61 -0
- package/dist/keys-r08WvAng.mjs.map +1 -0
- package/dist/kinds-CXY-fwQ6.mjs +974 -0
- package/dist/kinds-CXY-fwQ6.mjs.map +1 -0
- package/dist/lifecycle-CpebZNAA.mjs +25 -0
- package/dist/lifecycle-CpebZNAA.mjs.map +1 -0
- package/dist/load-dHcR5yh9.mjs +28 -0
- package/dist/load-dHcR5yh9.mjs.map +1 -0
- package/dist/loader-B_bcoE1h.mjs +1197 -0
- package/dist/loader-B_bcoE1h.mjs.map +1 -0
- package/dist/loops-Dn1i16FP.mjs +205 -0
- package/dist/loops-Dn1i16FP.mjs.map +1 -0
- package/dist/manifest-builder-D7Y8iirE.mjs +189 -0
- package/dist/manifest-builder-D7Y8iirE.mjs.map +1 -0
- package/dist/manifest-schema-gy37bD_D.mjs +496 -0
- package/dist/manifest-schema-gy37bD_D.mjs.map +1 -0
- package/dist/marketplace-tHWSsCUo.mjs +257 -0
- package/dist/marketplace-tHWSsCUo.mjs.map +1 -0
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +4 -4
- package/dist/media/local-runtime.d.mts +14 -14
- package/dist/media/local-runtime.mjs +7 -7
- package/dist/media-3v7mqAVX.mjs +294 -0
- package/dist/media-3v7mqAVX.mjs.map +1 -0
- package/dist/media-CputjGE1.mjs +373 -0
- package/dist/media-CputjGE1.mjs.map +1 -0
- package/dist/media-D1z_jisb.mjs +408 -0
- package/dist/media-D1z_jisb.mjs.map +1 -0
- package/dist/media-allowlist-D5a4d-RA.mjs +44 -0
- package/dist/media-allowlist-D5a4d-RA.mjs.map +1 -0
- package/dist/media-folders-D2VdVBf6.mjs +210 -0
- package/dist/media-folders-D2VdVBf6.mjs.map +1 -0
- package/dist/media-url-DloW2xrP.mjs +43 -0
- package/dist/media-url-DloW2xrP.mjs.map +1 -0
- package/dist/media-usage-B8q0owWQ.mjs +1629 -0
- package/dist/media-usage-B8q0owWQ.mjs.map +1 -0
- package/dist/media-usage-activation-CQWOOTJi.mjs +78 -0
- package/dist/media-usage-activation-CQWOOTJi.mjs.map +1 -0
- package/dist/media-usage-work-BC0qpkMD.mjs +152 -0
- package/dist/media-usage-work-BC0qpkMD.mjs.map +1 -0
- package/dist/media-usage-work-BlMjwPg8.mjs +586 -0
- package/dist/media-usage-work-BlMjwPg8.mjs.map +1 -0
- package/dist/menus-BQKqf0Up.mjs +92 -0
- package/dist/menus-BQKqf0Up.mjs.map +1 -0
- package/dist/menus-DiuhXKWf.mjs +3646 -0
- package/dist/menus-DiuhXKWf.mjs.map +1 -0
- package/dist/menus-trvc6_fW.mjs +753 -0
- package/dist/menus-trvc6_fW.mjs.map +1 -0
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +3 -3
- package/dist/mime-IZf-LHIS.mjs +36 -0
- package/dist/mime-IZf-LHIS.mjs.map +1 -0
- package/dist/mode-nh0ppSX5.mjs +23 -0
- package/dist/mode-nh0ppSX5.mjs.map +1 -0
- package/dist/node-sqlite-compat-CDOEcc97.mjs +63 -0
- package/dist/node-sqlite-compat-CDOEcc97.mjs.map +1 -0
- package/dist/normalize-BuWa0lvd.mjs +191 -0
- package/dist/normalize-BuWa0lvd.mjs.map +1 -0
- package/dist/oauth-authorization-BcRdGojQ.mjs +274 -0
- package/dist/oauth-authorization-BcRdGojQ.mjs.map +1 -0
- package/dist/oauth-clients-C-8WDTqj.mjs +266 -0
- package/dist/oauth-clients-C-8WDTqj.mjs.map +1 -0
- package/dist/oauth-state-store-CM5ZEYQS.mjs +50 -0
- package/dist/oauth-state-store-CM5ZEYQS.mjs.map +1 -0
- package/dist/oauth-user-lookup-DrrqvTZC.mjs +26 -0
- package/dist/oauth-user-lookup-DrrqvTZC.mjs.map +1 -0
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/object-cache-Bo6DGaC9.mjs +586 -0
- package/dist/object-cache-Bo6DGaC9.mjs.map +1 -0
- package/dist/options-C2IDQnD2.d.mts +81 -0
- package/dist/options-C2IDQnD2.d.mts.map +1 -0
- package/dist/ownership-DoeAIuTg.mjs +12 -0
- package/dist/ownership-DoeAIuTg.mjs.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +6 -6
- package/dist/parse-D5Sw9wAI.d.mts +172 -0
- package/dist/parse-D5Sw9wAI.d.mts.map +1 -0
- package/dist/parse-Gt2l4Sld.mjs +81 -0
- package/dist/parse-Gt2l4Sld.mjs.map +1 -0
- package/dist/passkey-config-CkQsrcU-.mjs +46 -0
- package/dist/passkey-config-CkQsrcU-.mjs.map +1 -0
- package/dist/paths-DiENGBx5.mjs +77 -0
- package/dist/paths-DiENGBx5.mjs.map +1 -0
- package/dist/patterns-DyZJ67I7.mjs +140 -0
- package/dist/patterns-DyZJ67I7.mjs.map +1 -0
- package/dist/placeholder-Cq5wLDCX.d.mts +306 -0
- package/dist/placeholder-Cq5wLDCX.d.mts.map +1 -0
- package/dist/plan-BxCS1tl5.mjs +135 -0
- package/dist/plan-BxCS1tl5.mjs.map +1 -0
- package/dist/plugin-test-runtime.d.mts +14 -14
- package/dist/plugin-test-runtime.mjs +115 -108
- package/dist/plugin-types.d.mts +5 -3
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-types.mjs.map +1 -1
- package/dist/plugin-utils.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +48 -10
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/plugins/host.d.mts +6 -6
- package/dist/plugins/host.mjs +49 -43
- package/dist/plugins-BpLkXA1S.mjs +277 -0
- package/dist/plugins-BpLkXA1S.mjs.map +1 -0
- package/dist/policy-C1qpNxrr.mjs +45 -0
- package/dist/policy-C1qpNxrr.mjs.map +1 -0
- package/dist/portable-text-BnRuiR1-.mjs +307 -0
- package/dist/portable-text-BnRuiR1-.mjs.map +1 -0
- package/dist/preview-DU5rwz_m.mjs +107 -0
- package/dist/preview-DU5rwz_m.mjs.map +1 -0
- package/dist/protocol-B9GEhEyi.d.mts +61 -0
- package/dist/protocol-B9GEhEyi.d.mts.map +1 -0
- package/dist/public-submission-yZaTTfsC.mjs +250 -0
- package/dist/public-submission-yZaTTfsC.mjs.map +1 -0
- package/dist/public-url-B5a0QAh6.mjs +101 -0
- package/dist/public-url-B5a0QAh6.mjs.map +1 -0
- package/dist/query-6e2CQxUv.mjs +1161 -0
- package/dist/query-6e2CQxUv.mjs.map +1 -0
- package/dist/query-DC3bv__4.mjs +41 -0
- package/dist/query-DC3bv__4.mjs.map +1 -0
- package/dist/rate-limit-BXx3Ecp9.mjs +120 -0
- package/dist/rate-limit-BXx3Ecp9.mjs.map +1 -0
- package/dist/receipt-q1VK9jhj.mjs +43 -0
- package/dist/receipt-q1VK9jhj.mjs.map +1 -0
- package/dist/redirect-BvFKh8Sz.mjs +416 -0
- package/dist/redirect-BvFKh8Sz.mjs.map +1 -0
- package/dist/redirect-D1AmADlk.mjs +19 -0
- package/dist/redirect-D1AmADlk.mjs.map +1 -0
- package/dist/redirects-CWQMKYOS.mjs +446 -0
- package/dist/redirects-CWQMKYOS.mjs.map +1 -0
- package/dist/redirects-D4EWeXAo.mjs +148 -0
- package/dist/redirects-D4EWeXAo.mjs.map +1 -0
- package/dist/registry/testing.d.mts +16 -4
- package/dist/registry/testing.d.mts.map +1 -1
- package/dist/registry/testing.mjs +20 -10
- package/dist/registry/testing.mjs.map +1 -1
- package/dist/registry-CtHRqVe-.mjs +6771 -0
- package/dist/registry-CtHRqVe-.mjs.map +1 -0
- package/dist/relations-CVI2nbrn.mjs +776 -0
- package/dist/relations-CVI2nbrn.mjs.map +1 -0
- package/dist/request-cache-C4CIo5ad.mjs +104 -0
- package/dist/request-cache-C4CIo5ad.mjs.map +1 -0
- package/dist/request-context.d.mts +9 -1
- package/dist/request-context.d.mts.map +1 -1
- package/dist/request-context.mjs.map +1 -1
- package/dist/request-meta-B6blULFY.mjs +141 -0
- package/dist/request-meta-B6blULFY.mjs.map +1 -0
- package/dist/resolve-Cx0Pwz0-.mjs +100 -0
- package/dist/resolve-Cx0Pwz0-.mjs.map +1 -0
- package/dist/resolve-D-kqyKns.mjs +199 -0
- package/dist/resolve-D-kqyKns.mjs.map +1 -0
- package/dist/revision-CGkQA0e5.mjs +366 -0
- package/dist/revision-CGkQA0e5.mjs.map +1 -0
- package/dist/route-wire-DK600v4u.mjs +197 -0
- package/dist/route-wire-DK600v4u.mjs.map +1 -0
- package/dist/routes-DTduBPzX.mjs +272 -0
- package/dist/routes-DTduBPzX.mjs.map +1 -0
- package/dist/runner-CLpxmhl8.mjs +6197 -0
- package/dist/runner-CLpxmhl8.mjs.map +1 -0
- package/dist/runner-Ji7qyH2A.d.mts +68 -0
- package/dist/runner-Ji7qyH2A.d.mts.map +1 -0
- package/dist/runtime.d.mts +13 -13
- package/dist/runtime.mjs +3 -3
- package/dist/schema/project-env-types.d.mts +12 -0
- package/dist/schema/project-env-types.d.mts.map +1 -0
- package/dist/schema/project-env-types.mjs +86 -0
- package/dist/schema/project-env-types.mjs.map +1 -0
- package/dist/schema-BZPj3kwZ.mjs +13 -0
- package/dist/schema-BZPj3kwZ.mjs.map +1 -0
- package/dist/schema-Berj5VQx.mjs +815 -0
- package/dist/schema-Berj5VQx.mjs.map +1 -0
- package/dist/scopes-C1HJaIyf.mjs +34 -0
- package/dist/scopes-C1HJaIyf.mjs.map +1 -0
- package/dist/search-thYf8j9F.mjs +448 -0
- package/dist/search-thYf8j9F.mjs.map +1 -0
- package/dist/sections-2k1uIgJ0.mjs +346 -0
- package/dist/sections-2k1uIgJ0.mjs.map +1 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +39 -32
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +24 -22
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo-C61bnPuV.mjs +114 -0
- package/dist/seo-C61bnPuV.mjs.map +1 -0
- package/dist/seo-DpYxmGaL.mjs +133 -0
- package/dist/seo-DpYxmGaL.mjs.map +1 -0
- package/dist/service-BFUImckH.mjs +150 -0
- package/dist/service-BFUImckH.mjs.map +1 -0
- package/dist/session-user-DVcHsFD5.mjs +61 -0
- package/dist/session-user-DVcHsFD5.mjs.map +1 -0
- package/dist/settings-B0zQj_Tj.mjs +61 -0
- package/dist/settings-B0zQj_Tj.mjs.map +1 -0
- package/dist/settings-BJjK_X7x.mjs +51 -0
- package/dist/settings-BJjK_X7x.mjs.map +1 -0
- package/dist/settings-BbVRRGDp.mjs +439 -0
- package/dist/settings-BbVRRGDp.mjs.map +1 -0
- package/dist/setup-complete-CuLcTDTU.mjs +65 -0
- package/dist/setup-complete-CuLcTDTU.mjs.map +1 -0
- package/dist/setup-nonce-CAQoY5PC.mjs +25 -0
- package/dist/setup-nonce-CAQoY5PC.mjs.map +1 -0
- package/dist/site-settings-AYFvhwQn.mjs +50 -0
- package/dist/site-settings-AYFvhwQn.mjs.map +1 -0
- package/dist/site-url-Ceq_AUK0.mjs +16 -0
- package/dist/site-url-Ceq_AUK0.mjs.map +1 -0
- package/dist/snapshot-Dzsn3NZa.mjs +414 -0
- package/dist/snapshot-Dzsn3NZa.mjs.map +1 -0
- package/dist/ssrf-DsmvZB80.mjs +406 -0
- package/dist/ssrf-DsmvZB80.mjs.map +1 -0
- package/dist/stage-Cf9PqdUB.mjs +662 -0
- package/dist/stage-Cf9PqdUB.mjs.map +1 -0
- package/dist/staged-Bw5eHbKS.mjs +686 -0
- package/dist/staged-Bw5eHbKS.mjs.map +1 -0
- package/dist/state-kGdOMQRY.mjs +153 -0
- package/dist/state-kGdOMQRY.mjs.map +1 -0
- package/dist/status-D39Fpy8R.mjs +30 -0
- package/dist/status-D39Fpy8R.mjs.map +1 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/storage-query-C9bK0Dg6.d.mts +1614 -0
- package/dist/storage-query-C9bK0Dg6.d.mts.map +1 -0
- package/dist/tar-lDI_fzLD.mjs +449 -0
- package/dist/tar-lDI_fzLD.mjs.map +1 -0
- package/dist/target-DOFs5oUC.mjs +27 -0
- package/dist/target-DOFs5oUC.mjs.map +1 -0
- package/dist/taxonomies-DQGomz9p.mjs +939 -0
- package/dist/taxonomies-DQGomz9p.mjs.map +1 -0
- package/dist/taxonomies-DWv-OYT0.mjs +697 -0
- package/dist/taxonomies-DWv-OYT0.mjs.map +1 -0
- package/dist/taxonomy-BesdHIwi.mjs +525 -0
- package/dist/taxonomy-BesdHIwi.mjs.map +1 -0
- package/dist/tokens-BIGxi8sP.mjs +171 -0
- package/dist/tokens-BIGxi8sP.mjs.map +1 -0
- package/dist/transaction-BVYIo_yu.mjs +29 -0
- package/dist/transaction-BVYIo_yu.mjs.map +1 -0
- package/dist/transfer-BtzoaXLk.mjs +166 -0
- package/dist/transfer-BtzoaXLk.mjs.map +1 -0
- package/dist/transfer-DLu_6AXL.mjs +8856 -0
- package/dist/transfer-DLu_6AXL.mjs.map +1 -0
- package/dist/transfer-download-b_PCrqJJ.mjs +33 -0
- package/dist/transfer-download-b_PCrqJJ.mjs.map +1 -0
- package/dist/transformations-DdnpSdeC.mjs +196 -0
- package/dist/transformations-DdnpSdeC.mjs.map +1 -0
- package/dist/transport-flR-Zmds.d.mts +42 -0
- package/dist/transport-flR-Zmds.d.mts.map +1 -0
- package/dist/transport-umzEbgYO.mjs +136 -0
- package/dist/transport-umzEbgYO.mjs.map +1 -0
- package/dist/trusted-proxy-BqfQFs6a.mjs +51 -0
- package/dist/trusted-proxy-BqfQFs6a.mjs.map +1 -0
- package/dist/turnstile-IvQp2uyD.mjs +53 -0
- package/dist/turnstile-IvQp2uyD.mjs.map +1 -0
- package/dist/types-2V_MVPYy.d.mts +125 -0
- package/dist/types-2V_MVPYy.d.mts.map +1 -0
- package/dist/types-B-WCvzdi.d.mts +198 -0
- package/dist/types-B-WCvzdi.d.mts.map +1 -0
- package/dist/types-BGmQ0uXs.mjs +201 -0
- package/dist/types-BGmQ0uXs.mjs.map +1 -0
- package/dist/types-CVsmpTcU.mjs +18 -0
- package/dist/types-CVsmpTcU.mjs.map +1 -0
- package/dist/types-C_V-_vMS.d.mts +198 -0
- package/dist/types-C_V-_vMS.d.mts.map +1 -0
- package/dist/types-CdEMurNh.mjs +77 -0
- package/dist/types-CdEMurNh.mjs.map +1 -0
- package/dist/types-CsmwbOwa.mjs +22 -0
- package/dist/types-CsmwbOwa.mjs.map +1 -0
- package/dist/types-Cw-1it3n.d.mts +287 -0
- package/dist/types-Cw-1it3n.d.mts.map +1 -0
- package/dist/types-D7B20WFC.d.mts +374 -0
- package/dist/types-D7B20WFC.d.mts.map +1 -0
- package/dist/types-DGw8KMX_.mjs +16 -0
- package/dist/types-DGw8KMX_.mjs.map +1 -0
- package/dist/types-DZeDpzMc.d.mts +896 -0
- package/dist/types-DZeDpzMc.d.mts.map +1 -0
- package/dist/types-DuQAIPA-.d.mts +363 -0
- package/dist/types-DuQAIPA-.d.mts.map +1 -0
- package/dist/types-edRPQchz.d.mts +85 -0
- package/dist/types-edRPQchz.d.mts.map +1 -0
- package/dist/types-j6MBDjlZ.mjs +103 -0
- package/dist/types-j6MBDjlZ.mjs.map +1 -0
- package/dist/types-pOLeFKGq.d.mts +1720 -0
- package/dist/types-pOLeFKGq.d.mts.map +1 -0
- package/dist/update-check-CaZyFHZC.mjs +161 -0
- package/dist/update-check-CaZyFHZC.mjs.map +1 -0
- package/dist/upload-attempts-BodUoFBu.mjs +32 -0
- package/dist/upload-attempts-BodUoFBu.mjs.map +1 -0
- package/dist/url-Dn3IStq8.mjs +104 -0
- package/dist/url-Dn3IStq8.mjs.map +1 -0
- package/dist/url-pattern-DGAG6ZP2.mjs +41 -0
- package/dist/url-pattern-DGAG6ZP2.mjs.map +1 -0
- package/dist/user-BOvuF1sQ.mjs +171 -0
- package/dist/user-BOvuF1sQ.mjs.map +1 -0
- package/dist/utils-CoV-PYhg.mjs +439 -0
- package/dist/utils-CoV-PYhg.mjs.map +1 -0
- package/dist/validate-WkjGwBSO.mjs +516 -0
- package/dist/validate-WkjGwBSO.mjs.map +1 -0
- package/dist/validate-dK97qe7F.d.mts +468 -0
- package/dist/validate-dK97qe7F.d.mts.map +1 -0
- package/dist/validation-D-ICq_tY.mjs +219 -0
- package/dist/validation-D-ICq_tY.mjs.map +1 -0
- package/dist/version-DbT04wbH.mjs +9 -0
- package/dist/version-DbT04wbH.mjs.map +1 -0
- package/dist/version-IneBU54o.mjs +7 -0
- package/dist/version-IneBU54o.mjs.map +1 -0
- package/dist/virtual-modules-Brh6mRVe.mjs +516 -0
- package/dist/virtual-modules-Brh6mRVe.mjs.map +1 -0
- package/dist/widgets-D8T0xBYs.mjs +126 -0
- package/dist/widgets-D8T0xBYs.mjs.map +1 -0
- package/dist/wxr-taxonomies-B6iE8m9I.d.mts +34 -0
- package/dist/wxr-taxonomies-B6iE8m9I.d.mts.map +1 -0
- package/dist/wxr-taxonomies-DEzR9N7e.mjs +453 -0
- package/dist/wxr-taxonomies-DEzR9N7e.mjs.map +1 -0
- package/dist/zod-generator-DnfG5sGQ.mjs +424 -0
- package/dist/zod-generator-DnfG5sGQ.mjs.map +1 -0
- package/package.json +15 -15
- package/src/api/errors.ts +11 -0
- package/src/api/handlers/bulk-tag.ts +4 -4
- package/src/api/handlers/content.ts +631 -32
- package/src/api/handlers/device-flow.ts +74 -21
- package/src/api/handlers/index.ts +3 -0
- package/src/api/handlers/manifest.ts +81 -5
- package/src/api/handlers/media-upload.ts +3 -0
- package/src/api/handlers/media.ts +2 -2
- package/src/api/handlers/registry.ts +123 -70
- package/src/api/handlers/relations.ts +638 -157
- package/src/api/handlers/revision.ts +40 -2
- package/src/api/handlers/schema.ts +403 -1
- package/src/api/handlers/staged-references.ts +208 -0
- package/src/api/handlers/update-check.ts +236 -0
- package/src/api/handlers/validate-references.ts +146 -0
- package/src/api/redirect.ts +9 -1
- package/src/api/schemas/content.ts +17 -0
- package/src/api/schemas/import.ts +50 -14
- package/src/api/schemas/relations.ts +54 -44
- package/src/api/schemas/schema.ts +26 -6
- package/src/api/setup-complete.ts +49 -1
- package/src/api/types.ts +4 -0
- package/src/astro/dev-typegen.ts +15 -22
- package/src/astro/integration/dev-typegen.ts +32 -3
- package/src/astro/integration/index.ts +88 -22
- package/src/astro/integration/routes.ts +21 -19
- package/src/astro/integration/runtime.ts +33 -7
- package/src/astro/integration/virtual-modules.ts +1 -0
- package/src/astro/integration/vite-config.ts +16 -8
- package/src/astro/middleware/redirect.ts +15 -2
- package/src/astro/middleware/request-context.ts +13 -6
- package/src/astro/routes/api/admin/bylines/[id]/index.ts +11 -1
- package/src/astro/routes/api/admin/bylines/[id]/translations.ts +7 -1
- package/src/astro/routes/api/admin/bylines/index.ts +6 -1
- package/src/astro/routes/api/admin/core-update.ts +34 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +6 -2
- package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +6 -2
- package/src/astro/routes/api/auth/invite/complete.ts +4 -4
- package/src/astro/routes/api/auth/magic-link/verify.ts +4 -1
- package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +9 -4
- package/src/astro/routes/api/auth/passkey/verify.ts +4 -4
- package/src/astro/routes/api/auth/signup/complete.ts +4 -4
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
- package/src/astro/routes/api/import/wordpress/execute.ts +252 -6
- package/src/astro/routes/api/import/wordpress/prepare.ts +1 -2
- package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
- package/src/astro/routes/api/oauth/register.ts +22 -2
- package/src/astro/routes/api/relations/index.ts +4 -4
- package/src/astro/routes/api/revisions/[revisionId]/restore.ts +17 -1
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
- package/src/astro/routes/api/setup/admin-verify.ts +6 -5
- package/src/astro/routes/api/typegen.ts +4 -46
- package/src/astro/session-user.ts +14 -0
- package/src/astro/types.ts +11 -0
- package/src/bylines/credits.ts +149 -0
- package/src/bylines/index.ts +4 -142
- package/src/cli/commands/export-seed.ts +510 -89
- package/src/cli/commands/seed.ts +2 -0
- package/src/cli/credentials.ts +1 -60
- package/src/cli/index.ts +0 -2
- package/src/client/index.ts +8 -2
- package/src/components/Image.astro +24 -13
- package/src/components/InlinePortableTextEditor.tsx +25 -8
- package/src/components/WidgetArea.astro +3 -2
- package/src/content/converters/portable-text-to-prosemirror.ts +23 -17
- package/src/content/converters/prosemirror-to-portable-text.ts +16 -5
- package/src/content/converters/types.ts +1 -0
- package/src/database/content-datetime.ts +111 -23
- package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +132 -92
- package/src/database/migrations/086_relations_structural.ts +197 -0
- package/src/database/migrations/087_reference_field_relations.ts +407 -0
- package/src/database/migrations/088_cron_oneshot_utc.ts +39 -0
- package/src/database/migrations/089_auto_seed_completion.ts +13 -0
- package/src/database/migrations/runner.ts +8 -0
- package/src/database/reference-backfill.ts +141 -0
- package/src/database/repositories/comment.ts +2 -2
- package/src/database/repositories/content.ts +58 -16
- package/src/database/repositories/plugin-storage.ts +1 -1
- package/src/database/repositories/redirect.ts +7 -2
- package/src/database/repositories/relation.ts +622 -210
- package/src/database/repositories/revision.ts +16 -0
- package/src/database/repositories/types.ts +38 -0
- package/src/database/transaction.ts +12 -1
- package/src/database/types.ts +15 -6
- package/src/db/node-sqlite-compat.ts +63 -37
- package/src/emdash-runtime.ts +149 -46
- package/src/import/wxr-taxonomies.ts +163 -88
- package/src/index.ts +20 -0
- package/src/loader.ts +177 -23
- package/src/mcp/server.ts +90 -8
- package/src/media/usage/activation.ts +18 -9
- package/src/migrations/config-loader.ts +5 -0
- package/src/object-cache/index.ts +19 -7
- package/src/object-cache/types.ts +3 -2
- package/src/plugin-types.ts +7 -0
- package/src/plugins/adapt-sandbox-entry.ts +47 -12
- package/src/plugins/byline-access.ts +158 -0
- package/src/plugins/context.ts +7 -1
- package/src/plugins/cron.ts +27 -4
- package/src/plugins/hooks.ts +47 -0
- package/src/plugins/host.ts +1 -0
- package/src/plugins/index.ts +10 -1
- package/src/plugins/manifest-schema.ts +5 -1
- package/src/plugins/marketplace.ts +48 -36
- package/src/plugins/sandbox/proxy.ts +1 -0
- package/src/plugins/types.ts +95 -0
- package/src/query.ts +464 -27
- package/src/redirects/cache.ts +11 -1
- package/src/redirects/destination.ts +20 -0
- package/src/redirects/loops.ts +10 -6
- package/src/redirects/patterns.ts +12 -30
- package/src/references/field-map.ts +115 -0
- package/src/references/resolve.ts +160 -0
- package/src/references/staged.ts +157 -0
- package/src/references/types.ts +16 -0
- package/src/registry/artifact-fetch.ts +45 -271
- package/src/registry/testing.ts +59 -14
- package/src/request-context.ts +8 -0
- package/src/schema/block-type-registry.ts +1 -1
- package/src/schema/env-types.ts +37 -0
- package/src/schema/project-env-types.ts +41 -0
- package/src/schema/registry.ts +132 -26
- package/src/schema/types.ts +63 -0
- package/src/schema/url-pattern.ts +10 -0
- package/src/schema/zod-generator.ts +78 -2
- package/src/seed/apply.ts +553 -63
- package/src/seed/ownership.ts +15 -0
- package/src/seed/types.ts +36 -2
- package/src/seed/validate.ts +123 -4
- package/src/transfer/analyze/unique-keys.ts +3 -12
- package/src/transfer/analyze/validate.ts +178 -40
- package/src/transfer/analyze/values.ts +116 -2
- package/src/transfer/analyze/write-rules.ts +8 -0
- package/src/transfer/export/readers.ts +12 -8
- package/src/transfer/format/columns.ts +26 -6
- package/src/transfer/format/kinds.ts +21 -5
- package/src/transfer/import/context.ts +8 -1
- package/src/transfer/ops/package-index.ts +1 -1
- package/src/utils/url.ts +58 -3
- package/src/virtual-modules.d.ts +3 -0
- package/dist/action-token-DYwe4Pk0.mjs +0 -26
- package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
- package/dist/activation-LOkDM5WT.mjs +0 -382
- package/dist/activation-LOkDM5WT.mjs.map +0 -1
- package/dist/adapters-B64LbYcB.d.mts +0 -171
- package/dist/adapters-B64LbYcB.d.mts.map +0 -1
- package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
- package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
- package/dist/api-CuyNEHZG.mjs +0 -4718
- package/dist/api-CuyNEHZG.mjs.map +0 -1
- package/dist/api-tokens-s4i4aUp_.mjs +0 -166
- package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
- package/dist/apply-npY1TAhG.mjs +0 -1366
- package/dist/apply-npY1TAhG.mjs.map +0 -1
- package/dist/approvals-CqMfNxak.mjs +0 -460
- package/dist/approvals-CqMfNxak.mjs.map +0 -1
- package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
- package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
- package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
- package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
- package/dist/audit-RfCugiSB.mjs +0 -127
- package/dist/audit-RfCugiSB.mjs.map +0 -1
- package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
- package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
- package/dist/authorize-seCifOMJ.mjs +0 -49
- package/dist/authorize-seCifOMJ.mjs.map +0 -1
- package/dist/backup-BQRj3afm.mjs +0 -246
- package/dist/backup-BQRj3afm.mjs.map +0 -1
- package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
- package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
- package/dist/block-types-BmZmLmAD.mjs +0 -132
- package/dist/block-types-BmZmLmAD.mjs.map +0 -1
- package/dist/block-values-C_VIPr5t.mjs +0 -175
- package/dist/block-values-C_VIPr5t.mjs.map +0 -1
- package/dist/byline-DYmkXqvo.mjs +0 -909
- package/dist/byline-DYmkXqvo.mjs.map +0 -1
- package/dist/byline-fields-D28AT-Fh.mjs +0 -123
- package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
- package/dist/byline-registry-gnKscbQX.mjs +0 -406
- package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
- package/dist/bylines-BPwJqoYH.mjs +0 -232
- package/dist/bylines-BPwJqoYH.mjs.map +0 -1
- package/dist/bylines-ukLaYpVZ.mjs +0 -214
- package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
- package/dist/cache-m7UEkRFV.mjs +0 -108
- package/dist/cache-m7UEkRFV.mjs.map +0 -1
- package/dist/canonical-YhEQezjg.mjs +0 -174
- package/dist/canonical-YhEQezjg.mjs.map +0 -1
- package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
- package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
- package/dist/challenge-store-ppU6Uv13.mjs +0 -51
- package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
- package/dist/checksum-B2IINIlN.mjs +0 -162
- package/dist/checksum-B2IINIlN.mjs.map +0 -1
- package/dist/chrome-tags-DApCQSIk.mjs +0 -24
- package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
- package/dist/chunks-Dms7Uxbt.mjs +0 -25
- package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
- package/dist/collection-deletion-BIm28mo3.mjs +0 -436
- package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
- package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
- package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
- package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
- package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
- package/dist/comment-CrBl22OF.mjs +0 -313
- package/dist/comment-CrBl22OF.mjs.map +0 -1
- package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
- package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
- package/dist/comments-2ah9du9y.mjs +0 -195
- package/dist/comments-2ah9du9y.mjs.map +0 -1
- package/dist/comments-fHZ8ON9O.mjs +0 -99
- package/dist/comments-fHZ8ON9O.mjs.map +0 -1
- package/dist/components-CXbq7CSM.mjs +0 -108
- package/dist/components-CXbq7CSM.mjs.map +0 -1
- package/dist/config-BjEm_3xL.d.mts +0 -6537
- package/dist/config-BjEm_3xL.d.mts.map +0 -1
- package/dist/config-IhybvkIQ.mjs +0 -242
- package/dist/config-IhybvkIQ.mjs.map +0 -1
- package/dist/config-Py43JK9r.d.mts +0 -39
- package/dist/config-Py43JK9r.d.mts.map +0 -1
- package/dist/content-DFaIEDj9.mjs +0 -2281
- package/dist/content-DFaIEDj9.mjs.map +0 -1
- package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
- package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
- package/dist/content-policy-DFNw91-d.mjs +0 -46
- package/dist/content-policy-DFNw91-d.mjs.map +0 -1
- package/dist/content-repair-Q8IUrpLL.mjs +0 -442
- package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
- package/dist/context-BV_7t-Ua.mjs +0 -1921
- package/dist/context-BV_7t-Ua.mjs.map +0 -1
- package/dist/cron-7DCJwPXq.mjs +0 -284
- package/dist/cron-7DCJwPXq.mjs.map +0 -1
- package/dist/dashboard-BP-iJqpd.mjs +0 -151
- package/dist/dashboard-BP-iJqpd.mjs.map +0 -1
- package/dist/default-DQ6vsviu.mjs +0 -81
- package/dist/default-DQ6vsviu.mjs.map +0 -1
- package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
- package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
- package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
- package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
- package/dist/device-flow-CRd6DXmW.mjs +0 -466
- package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
- package/dist/digest-BarSh-pN.mjs +0 -194
- package/dist/digest-BarSh-pN.mjs.map +0 -1
- package/dist/direct-executor-D2lNadwo.mjs +0 -104
- package/dist/direct-executor-D2lNadwo.mjs.map +0 -1
- package/dist/dist-BNwANFJR.mjs +0 -810
- package/dist/dist-BNwANFJR.mjs.map +0 -1
- package/dist/email-console-bJn3ctqA.mjs +0 -50
- package/dist/email-console-bJn3ctqA.mjs.map +0 -1
- package/dist/email-locale-CN6WAMx0.mjs +0 -25
- package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
- package/dist/emdash-runtime-CtfnZmPi.mjs +0 -4186
- package/dist/emdash-runtime-CtfnZmPi.mjs.map +0 -1
- package/dist/enrich-Dl3kZ-lP.mjs +0 -194
- package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
- package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
- package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
- package/dist/entry-lock-Cf5OoIgN.d.mts +0 -4368
- package/dist/entry-lock-Cf5OoIgN.d.mts.map +0 -1
- package/dist/entry-lock-DHQOxN7R.mjs +0 -163
- package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
- package/dist/entry-locks-D0foLdjQ.mjs +0 -167
- package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
- package/dist/error-CfvOHP0M.mjs +0 -90
- package/dist/error-CfvOHP0M.mjs.map +0 -1
- package/dist/errors-BF0_LFhW.mjs +0 -460
- package/dist/errors-BF0_LFhW.mjs.map +0 -1
- package/dist/errors-DgE1zJGG.mjs +0 -120
- package/dist/errors-DgE1zJGG.mjs.map +0 -1
- package/dist/escape-CuaZhZvL.mjs +0 -9
- package/dist/escape-CuaZhZvL.mjs.map +0 -1
- package/dist/fence-CMDXJYc_.mjs +0 -162
- package/dist/fence-CMDXJYc_.mjs.map +0 -1
- package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
- package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
- package/dist/focal-point-Gr34o-4o.mjs +0 -23
- package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
- package/dist/fts-manager-S-K0laoS.mjs +0 -443
- package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
- package/dist/gc-DjKY0Ay1.mjs +0 -75
- package/dist/gc-DjKY0Ay1.mjs.map +0 -1
- package/dist/hash-SDAW6zC-.mjs +0 -37
- package/dist/hash-SDAW6zC-.mjs.map +0 -1
- package/dist/hook-result-B5bXDgS2.d.mts +0 -31
- package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
- package/dist/hreflang-CbVI4paR.mjs +0 -105
- package/dist/hreflang-CbVI4paR.mjs.map +0 -1
- package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
- package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
- package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
- package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
- package/dist/identity-Be5kzutJ.mjs +0 -35
- package/dist/identity-Be5kzutJ.mjs.map +0 -1
- package/dist/import-YzfKCaco.mjs +0 -2020
- package/dist/import-YzfKCaco.mjs.map +0 -1
- package/dist/index-D-hdtLe8.d.mts +0 -623
- package/dist/index-D-hdtLe8.d.mts.map +0 -1
- package/dist/install-finalization-DfM1fj5x.mjs +0 -58
- package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
- package/dist/keys-yxLm5l35.mjs +0 -61
- package/dist/keys-yxLm5l35.mjs.map +0 -1
- package/dist/kinds-CRu_T5T5.mjs +0 -961
- package/dist/kinds-CRu_T5T5.mjs.map +0 -1
- package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
- package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
- package/dist/load-XgJiE6_3.mjs +0 -28
- package/dist/load-XgJiE6_3.mjs.map +0 -1
- package/dist/loader-BzqeR1ZN.mjs +0 -1086
- package/dist/loader-BzqeR1ZN.mjs.map +0 -1
- package/dist/loops-BQSzv5Zn.mjs +0 -203
- package/dist/loops-BQSzv5Zn.mjs.map +0 -1
- package/dist/manifest-builder-BmSAOOEF.mjs +0 -189
- package/dist/manifest-builder-BmSAOOEF.mjs.map +0 -1
- package/dist/manifest-schema-CY3zng_M.mjs +0 -492
- package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
- package/dist/media-CPXTbb1R.mjs +0 -373
- package/dist/media-CPXTbb1R.mjs.map +0 -1
- package/dist/media-JXRWDhw3.mjs +0 -294
- package/dist/media-JXRWDhw3.mjs.map +0 -1
- package/dist/media-Pu1L6xir.mjs +0 -408
- package/dist/media-Pu1L6xir.mjs.map +0 -1
- package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
- package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
- package/dist/media-folders-BE0oo2eX.mjs +0 -210
- package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
- package/dist/media-url-jArBpzIG.mjs +0 -43
- package/dist/media-url-jArBpzIG.mjs.map +0 -1
- package/dist/media-usage-De-zeR9E.mjs +0 -1629
- package/dist/media-usage-De-zeR9E.mjs.map +0 -1
- package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
- package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
- package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
- package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
- package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
- package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
- package/dist/menus-BM7BPLOb.mjs +0 -139
- package/dist/menus-BM7BPLOb.mjs.map +0 -1
- package/dist/menus-Cm68rsAq.mjs +0 -3608
- package/dist/menus-Cm68rsAq.mjs.map +0 -1
- package/dist/menus-ITeAbcIF.mjs +0 -753
- package/dist/menus-ITeAbcIF.mjs.map +0 -1
- package/dist/mime-ChLqYwDk.mjs +0 -36
- package/dist/mime-ChLqYwDk.mjs.map +0 -1
- package/dist/mode-CCuKXUci.mjs +0 -23
- package/dist/mode-CCuKXUci.mjs.map +0 -1
- package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
- package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
- package/dist/normalize-CO2P8-iE.mjs +0 -191
- package/dist/normalize-CO2P8-iE.mjs.map +0 -1
- package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
- package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
- package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
- package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
- package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
- package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
- package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
- package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
- package/dist/object-cache-CqWNY5uP.mjs +0 -582
- package/dist/object-cache-CqWNY5uP.mjs.map +0 -1
- package/dist/options-SQCHQCPH.d.mts +0 -81
- package/dist/options-SQCHQCPH.d.mts.map +0 -1
- package/dist/parse-CVgO-Qai.d.mts +0 -168
- package/dist/parse-CVgO-Qai.d.mts.map +0 -1
- package/dist/parse-DY6OD1j_.mjs +0 -81
- package/dist/parse-DY6OD1j_.mjs.map +0 -1
- package/dist/passkey-config-X_H8128a.mjs +0 -46
- package/dist/passkey-config-X_H8128a.mjs.map +0 -1
- package/dist/paths-JxokKIbr.mjs +0 -77
- package/dist/paths-JxokKIbr.mjs.map +0 -1
- package/dist/patterns-BhAvqO0S.mjs +0 -145
- package/dist/patterns-BhAvqO0S.mjs.map +0 -1
- package/dist/placeholder-MSEd8gty.d.mts +0 -306
- package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
- package/dist/plan-xjcWrAah.mjs +0 -135
- package/dist/plan-xjcWrAah.mjs.map +0 -1
- package/dist/plugins-DUXUt8B9.mjs +0 -277
- package/dist/plugins-DUXUt8B9.mjs.map +0 -1
- package/dist/policy-CUvwAARc.mjs +0 -45
- package/dist/policy-CUvwAARc.mjs.map +0 -1
- package/dist/portable-text-5O_ZGUjB.mjs +0 -307
- package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
- package/dist/preview-CIUcPYr6.mjs +0 -107
- package/dist/preview-CIUcPYr6.mjs.map +0 -1
- package/dist/protocol-B97DZaFr.d.mts +0 -61
- package/dist/protocol-B97DZaFr.d.mts.map +0 -1
- package/dist/public-submission-BFBUrqst.mjs +0 -250
- package/dist/public-submission-BFBUrqst.mjs.map +0 -1
- package/dist/public-url-Bn7U0D7-.mjs +0 -101
- package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
- package/dist/query-B48peoRT.mjs +0 -890
- package/dist/query-B48peoRT.mjs.map +0 -1
- package/dist/query-C4IH0uhR.mjs +0 -41
- package/dist/query-C4IH0uhR.mjs.map +0 -1
- package/dist/rate-limit-BZ6nybgc.mjs +0 -120
- package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
- package/dist/receipt-B4wJj5Jq.mjs +0 -43
- package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
- package/dist/redirect-B29UjdUn.mjs +0 -411
- package/dist/redirect-B29UjdUn.mjs.map +0 -1
- package/dist/redirect-Cd1E7VUt.mjs +0 -17
- package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
- package/dist/redirects-Ca2MPfEG.mjs +0 -446
- package/dist/redirects-Ca2MPfEG.mjs.map +0 -1
- package/dist/redirects-Cv9apQKj.mjs +0 -148
- package/dist/redirects-Cv9apQKj.mjs.map +0 -1
- package/dist/relation-M4NUCb0b.mjs +0 -334
- package/dist/relation-M4NUCb0b.mjs.map +0 -1
- package/dist/relations-CCif47Oq.mjs +0 -403
- package/dist/relations-CCif47Oq.mjs.map +0 -1
- package/dist/relations-CK9CYUyr.mjs +0 -310
- package/dist/relations-CK9CYUyr.mjs.map +0 -1
- package/dist/request-cache-DzLYKm_x.mjs +0 -104
- package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
- package/dist/request-meta-sZXt3sRo.mjs +0 -141
- package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
- package/dist/resolve-2WbQsCvT.mjs +0 -199
- package/dist/resolve-2WbQsCvT.mjs.map +0 -1
- package/dist/route-wire--1hLuACz.mjs +0 -197
- package/dist/route-wire--1hLuACz.mjs.map +0 -1
- package/dist/routes-vrR95WR6.mjs +0 -272
- package/dist/routes-vrR95WR6.mjs.map +0 -1
- package/dist/runner-1y4J9fJB.mjs +0 -5742
- package/dist/runner-1y4J9fJB.mjs.map +0 -1
- package/dist/runner-D5_LzKXI.d.mts +0 -68
- package/dist/runner-D5_LzKXI.d.mts.map +0 -1
- package/dist/schema-BABiRdsH.mjs +0 -13
- package/dist/schema-BABiRdsH.mjs.map +0 -1
- package/dist/schema-Du3MzCG0.mjs +0 -446
- package/dist/schema-Du3MzCG0.mjs.map +0 -1
- package/dist/scopes-Dbk-ElhT.mjs +0 -34
- package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
- package/dist/search-Bt1PL1jf.mjs +0 -448
- package/dist/search-Bt1PL1jf.mjs.map +0 -1
- package/dist/sections-Ddptx_o9.mjs +0 -346
- package/dist/sections-Ddptx_o9.mjs.map +0 -1
- package/dist/seo-CZT2oLtT.mjs +0 -114
- package/dist/seo-CZT2oLtT.mjs.map +0 -1
- package/dist/seo-D5w3-Azy.mjs +0 -133
- package/dist/seo-D5w3-Azy.mjs.map +0 -1
- package/dist/service-DuykXPyW.mjs +0 -150
- package/dist/service-DuykXPyW.mjs.map +0 -1
- package/dist/session-user-BhaVp8w0.mjs +0 -51
- package/dist/session-user-BhaVp8w0.mjs.map +0 -1
- package/dist/settings-B4vDl1fK.mjs +0 -439
- package/dist/settings-B4vDl1fK.mjs.map +0 -1
- package/dist/settings-DYidIB26.mjs +0 -61
- package/dist/settings-DYidIB26.mjs.map +0 -1
- package/dist/settings-Dyj6v8C4.mjs +0 -51
- package/dist/settings-Dyj6v8C4.mjs.map +0 -1
- package/dist/setup-complete-bOogcHWG.mjs +0 -26
- package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
- package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
- package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
- package/dist/site-settings-DOgRUoFX.mjs +0 -50
- package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
- package/dist/site-url-BU_bbxwj.mjs +0 -16
- package/dist/site-url-BU_bbxwj.mjs.map +0 -1
- package/dist/snapshot-PawoX-WG.mjs +0 -414
- package/dist/snapshot-PawoX-WG.mjs.map +0 -1
- package/dist/ssrf-CJUnJymJ.mjs +0 -406
- package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
- package/dist/stage-DgrBz_du.mjs +0 -662
- package/dist/stage-DgrBz_du.mjs.map +0 -1
- package/dist/state-DDiPySSG.mjs +0 -153
- package/dist/state-DDiPySSG.mjs.map +0 -1
- package/dist/status-DZKIG4a9.mjs +0 -30
- package/dist/status-DZKIG4a9.mjs.map +0 -1
- package/dist/storage-query-FXJH5pI8.d.mts +0 -1581
- package/dist/storage-query-FXJH5pI8.d.mts.map +0 -1
- package/dist/tar-_1AgTYFu.mjs +0 -449
- package/dist/tar-_1AgTYFu.mjs.map +0 -1
- package/dist/target-_7pn2Gbg.mjs +0 -27
- package/dist/target-_7pn2Gbg.mjs.map +0 -1
- package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
- package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
- package/dist/taxonomies-C_XMoRcX.mjs +0 -939
- package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
- package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
- package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
- package/dist/tokens-u78jETkX.mjs +0 -171
- package/dist/tokens-u78jETkX.mjs.map +0 -1
- package/dist/transaction-BcJO4Tmc.mjs +0 -29
- package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
- package/dist/transfer-DIGvR9Af.mjs +0 -166
- package/dist/transfer-DIGvR9Af.mjs.map +0 -1
- package/dist/transfer-DgeCvHnj.mjs +0 -8675
- package/dist/transfer-DgeCvHnj.mjs.map +0 -1
- package/dist/transfer-download-Pml7RMio.mjs +0 -33
- package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
- package/dist/transformations-9gfpwY65.mjs +0 -196
- package/dist/transformations-9gfpwY65.mjs.map +0 -1
- package/dist/transport-BIfH7_hx.d.mts +0 -42
- package/dist/transport-BIfH7_hx.d.mts.map +0 -1
- package/dist/transport-DKWIq53q.mjs +0 -136
- package/dist/transport-DKWIq53q.mjs.map +0 -1
- package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
- package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
- package/dist/turnstile-DpsoyOfg.mjs +0 -53
- package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
- package/dist/types-B4sUC2p1.d.mts +0 -198
- package/dist/types-B4sUC2p1.d.mts.map +0 -1
- package/dist/types-B7Lmsh1E.d.mts +0 -887
- package/dist/types-B7Lmsh1E.d.mts.map +0 -1
- package/dist/types-BZakh7Ym.mjs +0 -22
- package/dist/types-BZakh7Ym.mjs.map +0 -1
- package/dist/types-B_CppEmv.d.mts +0 -264
- package/dist/types-B_CppEmv.d.mts.map +0 -1
- package/dist/types-BcrBrE6-.mjs +0 -159
- package/dist/types-BcrBrE6-.mjs.map +0 -1
- package/dist/types-BkUg2yHx.mjs +0 -92
- package/dist/types-BkUg2yHx.mjs.map +0 -1
- package/dist/types-CAZgq9fO.d.mts +0 -124
- package/dist/types-CAZgq9fO.d.mts.map +0 -1
- package/dist/types-Cd-O03VG.d.mts +0 -363
- package/dist/types-Cd-O03VG.d.mts.map +0 -1
- package/dist/types-Cr-Kg-3D.d.mts +0 -1641
- package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
- package/dist/types-D2fvWd1i.d.mts +0 -359
- package/dist/types-D2fvWd1i.d.mts.map +0 -1
- package/dist/types-D7HUsguf.mjs +0 -77
- package/dist/types-D7HUsguf.mjs.map +0 -1
- package/dist/types-DA1Te3Oy.d.mts +0 -198
- package/dist/types-DA1Te3Oy.d.mts.map +0 -1
- package/dist/types-DhV6Q5bP.mjs +0 -18
- package/dist/types-DhV6Q5bP.mjs.map +0 -1
- package/dist/types-DnnVSl6Y.d.mts +0 -85
- package/dist/types-DnnVSl6Y.d.mts.map +0 -1
- package/dist/types-VT4-BugW.mjs +0 -16
- package/dist/types-VT4-BugW.mjs.map +0 -1
- package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
- package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
- package/dist/url-pattern-CCeZMGOh.mjs +0 -33
- package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
- package/dist/user-DDSL-sGw.mjs +0 -171
- package/dist/user-DDSL-sGw.mjs.map +0 -1
- package/dist/utils-DdhmO9w9.mjs +0 -439
- package/dist/utils-DdhmO9w9.mjs.map +0 -1
- package/dist/validate-CHosPEhs.mjs +0 -453
- package/dist/validate-CHosPEhs.mjs.map +0 -1
- package/dist/validate-CM79QXYE.d.mts +0 -432
- package/dist/validate-CM79QXYE.d.mts.map +0 -1
- package/dist/validation-BFecQczG.mjs +0 -218
- package/dist/validation-BFecQczG.mjs.map +0 -1
- package/dist/version-BRZXVifl.mjs +0 -9
- package/dist/version-BRZXVifl.mjs.map +0 -1
- package/dist/version-DXsxRrob.mjs +0 -7
- package/dist/version-DXsxRrob.mjs.map +0 -1
- package/dist/widgets-WdV72brA.mjs +0 -126
- package/dist/widgets-WdV72brA.mjs.map +0 -1
- package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
- package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
- package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
- package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
- package/dist/zod-generator-D6uE4WiS.mjs +0 -389
- package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
- package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
- package/src/cli/commands/bundle-utils.ts +0 -408
- package/src/cli/commands/bundle.ts +0 -659
- package/src/cli/commands/plugin-init.ts +0 -417
- package/src/cli/commands/plugin-validate.ts +0 -31
- package/src/cli/commands/plugin.ts +0 -33
- package/src/cli/commands/publish.ts +0 -721
- /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-BLz2MtQs.mjs} +0 -0
- /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-tA45vIPX.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/media/folders/index.ts"],"sourcesContent":["import type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaFolderCreate, handleMediaFolderList } from \"#api/handlers/media-folders.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { mediaFolderBody, mediaFolderListQuery } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst denied = requirePerm(user, \"media:read\");\n\tif (denied) return denied;\n\tif (!emdash) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst query = parseQuery(new URL(request.url), mediaFolderListQuery);\n\tif (isParseError(query)) return query;\n\treturn unwrapResult(\n\t\tawait handleMediaFolderList(emdash.db, {\n\t\t\tlimit: query.limit,\n\t\t\tcursor: query.cursor,\n\t\t\tq: query.q,\n\t\t}),\n\t);\n};\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst denied = requirePerm(user, \"media:edit_any\");\n\tif (denied) return denied;\n\tif (!emdash) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst body = await parseBody(request, mediaFolderBody);\n\tif (isParseError(body)) return body;\n\treturn unwrapResult(await handleMediaFolderCreate(emdash.db, body), 201);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/media/folders/index.ts"],"sourcesContent":["import type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, unwrapResult } from \"#api/error.js\";\nimport { handleMediaFolderCreate, handleMediaFolderList } from \"#api/handlers/media-folders.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { mediaFolderBody, mediaFolderListQuery } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst denied = requirePerm(user, \"media:read\");\n\tif (denied) return denied;\n\tif (!emdash) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst query = parseQuery(new URL(request.url), mediaFolderListQuery);\n\tif (isParseError(query)) return query;\n\treturn unwrapResult(\n\t\tawait handleMediaFolderList(emdash.db, {\n\t\t\tlimit: query.limit,\n\t\t\tcursor: query.cursor,\n\t\t\tq: query.q,\n\t\t}),\n\t);\n};\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst denied = requirePerm(user, \"media:edit_any\");\n\tif (denied) return denied;\n\tif (!emdash) return apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\n\tconst body = await parseBody(request, mediaFolderBody);\n\tif (isParseError(body)) return body;\n\treturn unwrapResult(await handleMediaFolderCreate(emdash.db, body), 201);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAQA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,SAAS,aAAa;CAC3D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,SAAS,YAAY,MAAM,aAAa;AAC9C,KAAI,OAAQ,QAAO;AACnB,KAAI,CAAC,OAAQ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEhF,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,qBAAqB;AACpE,KAAI,aAAa,MAAM,CAAE,QAAO;AAChC,QAAO,aACN,MAAM,sBAAsB,OAAO,IAAI;EACtC,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,GAAG,MAAM;EACT,CAAC,CACF;;AAGF,MAAa,OAAiB,OAAO,EAAE,SAAS,aAAa;CAC5D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,SAAS,YAAY,MAAM,iBAAiB;AAClD,KAAI,OAAQ,QAAO;AACnB,KAAI,CAAC,OAAQ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEhF,MAAM,OAAO,MAAM,UAAU,SAAS,gBAAgB;AACtD,KAAI,aAAa,KAAK,CAAE,QAAO;AAC/B,QAAO,aAAa,MAAM,wBAAwB,OAAO,IAAI,KAAK,EAAE,IAAI"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "../../../../../../base64-DvnNgP7e.mjs";
|
|
2
|
-
import "../../../../../../types-
|
|
3
|
-
import "../../../../../../errors-
|
|
4
|
-
import "../../../../../../errors-
|
|
5
|
-
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-
|
|
6
|
-
import { i as requirePerm } from "../../../../../../authorize-
|
|
2
|
+
import "../../../../../../types-j6MBDjlZ.mjs";
|
|
3
|
+
import "../../../../../../errors-CjXd1LgH.mjs";
|
|
4
|
+
import "../../../../../../errors-CNvATh_7.mjs";
|
|
5
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
|
|
6
|
+
import { i as requirePerm } from "../../../../../../authorize-soZXK7U0.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/astro/routes/api/media/providers/[providerId]/[itemId].ts
|
|
9
9
|
const prerender = false;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "../../../../../../base64-DvnNgP7e.mjs";
|
|
2
|
-
import "../../../../../../types-
|
|
3
|
-
import "../../../../../../errors-
|
|
4
|
-
import "../../../../../../errors-
|
|
5
|
-
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-
|
|
6
|
-
import { i as requirePerm } from "../../../../../../authorize-
|
|
2
|
+
import "../../../../../../types-j6MBDjlZ.mjs";
|
|
3
|
+
import "../../../../../../errors-CjXd1LgH.mjs";
|
|
4
|
+
import "../../../../../../errors-CNvATh_7.mjs";
|
|
5
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
|
|
6
|
+
import { i as requirePerm } from "../../../../../../authorize-soZXK7U0.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/astro/routes/api/media/providers/[providerId]/index.ts
|
|
9
9
|
const prerender = false;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "../../../../../base64-DvnNgP7e.mjs";
|
|
2
|
-
import "../../../../../types-
|
|
3
|
-
import "../../../../../errors-
|
|
4
|
-
import "../../../../../errors-
|
|
5
|
-
import { n as apiSuccess, t as apiError } from "../../../../../error-
|
|
6
|
-
import { i as requirePerm } from "../../../../../authorize-
|
|
2
|
+
import "../../../../../types-j6MBDjlZ.mjs";
|
|
3
|
+
import "../../../../../errors-CjXd1LgH.mjs";
|
|
4
|
+
import "../../../../../errors-CNvATh_7.mjs";
|
|
5
|
+
import { n as apiSuccess, t as apiError } from "../../../../../error-CEdm_AWU.mjs";
|
|
6
|
+
import { i as requirePerm } from "../../../../../authorize-soZXK7U0.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/astro/routes/api/media/providers/index.ts
|
|
9
9
|
const prerender = false;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import "../../../../config-CvmjJcVw.mjs";
|
|
2
2
|
import "../../../../base64-DvnNgP7e.mjs";
|
|
3
|
-
import "../../../../
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import "../../../../
|
|
7
|
-
import "../../../../
|
|
8
|
-
import "../../../../
|
|
9
|
-
import "../../../../
|
|
10
|
-
import
|
|
11
|
-
import { n as
|
|
12
|
-
import "../../../../
|
|
13
|
-
import "../../../../
|
|
14
|
-
import
|
|
15
|
-
import "../../../../
|
|
16
|
-
import "../../../../
|
|
17
|
-
import "../../../../
|
|
18
|
-
import "../../../../
|
|
3
|
+
import "../../../../url-Dn3IStq8.mjs";
|
|
4
|
+
import "../../../../types-j6MBDjlZ.mjs";
|
|
5
|
+
import { t as MediaRepository } from "../../../../media-CputjGE1.mjs";
|
|
6
|
+
import { n as normalizeMime, t as matchesMimeAllowlist } from "../../../../mime-IZf-LHIS.mjs";
|
|
7
|
+
import "../../../../errors-CjXd1LgH.mjs";
|
|
8
|
+
import "../../../../errors-CNvATh_7.mjs";
|
|
9
|
+
import "../../../../settings-B0zQj_Tj.mjs";
|
|
10
|
+
import "../../../../site-settings-AYFvhwQn.mjs";
|
|
11
|
+
import { n as apiSuccess, r as handleError, t as apiError } from "../../../../error-CEdm_AWU.mjs";
|
|
12
|
+
import { n as parseBody, t as isParseError } from "../../../../parse-Gt2l4Sld.mjs";
|
|
13
|
+
import "../../../../redirects-D4EWeXAo.mjs";
|
|
14
|
+
import "../../../../entry-lock-PP1JCXBB.mjs";
|
|
15
|
+
import { M as mediaUploadUrlBody, n as DEFAULT_MAX_UPLOAD_SIZE } from "../../../../media-D1z_jisb.mjs";
|
|
16
|
+
import "../../../../comments-BRtp992B.mjs";
|
|
17
|
+
import "../../../../byline-fields-DHJs0Mja.mjs";
|
|
18
|
+
import "../../../../menus-BQKqf0Up.mjs";
|
|
19
|
+
import "../../../../status-D39Fpy8R.mjs";
|
|
19
20
|
import "../../../../api/schemas/index.mjs";
|
|
20
|
-
import { n as resolveFieldAllowlist, t as GLOBAL_UPLOAD_ALLOWLIST } from "../../../../media-allowlist-
|
|
21
|
-
import { i as requirePerm } from "../../../../authorize-
|
|
21
|
+
import { n as resolveFieldAllowlist, t as GLOBAL_UPLOAD_ALLOWLIST } from "../../../../media-allowlist-D5a4d-RA.mjs";
|
|
22
|
+
import { i as requirePerm } from "../../../../authorize-soZXK7U0.mjs";
|
|
22
23
|
import { ulid } from "ulidx";
|
|
23
24
|
import * as path from "node:path";
|
|
24
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-url.mjs","names":[],"sources":["../../../../../src/astro/routes/api/media/upload-url.ts"],"sourcesContent":["/**\n * Media upload URL endpoint\n *\n * POST /_emdash/api/media/upload-url\n *\n * Returns a signed URL for direct upload to storage.\n * Creates a pending media record that must be confirmed after upload.\n */\n\nimport * as path from \"node:path\";\n\nimport type { APIRoute } from \"astro\";\nimport { ulid } from \"ulidx\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { GLOBAL_UPLOAD_ALLOWLIST, resolveFieldAllowlist } from \"#api/handlers/media-allowlist.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { DEFAULT_MAX_UPLOAD_SIZE, mediaUploadUrlBody } from \"#api/schemas.js\";\nimport { MediaRepository } from \"#db/repositories/media.js\";\nimport { matchesMimeAllowlist, normalizeMime } from \"#media/mime.js\";\n\nexport const prerender = false;\n\ninterface UploadUrlResponse {\n\tuploadUrl: string;\n\tmethod: \"PUT\";\n\theaders: Record<string, string>;\n\tmediaId: string;\n\tstorageKey: string;\n\texpiresAt: string;\n}\n\n/** Response when content already exists (deduplication) */\ninterface ExistingMediaResponse {\n\texisting: true;\n\tmediaId: string;\n\tstorageKey: string;\n\turl: string;\n}\n\nfunction isUnsupportedSignedUpload(error: unknown): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === \"NOT_SUPPORTED\";\n}\n\n/**\n * Get a signed upload URL for direct-to-storage upload\n */\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:upload\");\n\tif (denied) return denied;\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\n\t\t\t\"NO_STORAGE\",\n\t\t\t\"Storage not configured. Signed URL uploads require S3-compatible storage.\",\n\t\t\t501,\n\t\t);\n\t}\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\tconst maxSize = emdash.config.maxUploadSize ?? DEFAULT_MAX_UPLOAD_SIZE;\n\t\tif (!Number.isFinite(maxSize) || maxSize <= 0) {\n\t\t\treturn apiError(\n\t\t\t\t\"CONFIGURATION_ERROR\",\n\t\t\t\t\"Invalid maxUploadSize configuration. Expected a positive finite number.\",\n\t\t\t\t500,\n\t\t\t);\n\t\t}\n\t\tconst body = await parseBody(request, mediaUploadUrlBody(maxSize));\n\t\tif (isParseError(body)) return body;\n\t\tconst normalizedContentType = normalizeMime(body.contentType);\n\n\t\t// Validate content type (field-aware widening)\n\t\tconst fieldAllowlist = body.fieldId\n\t\t\t? await resolveFieldAllowlist(emdash.db, body.fieldId)\n\t\t\t: null;\n\t\tconst allowlist = fieldAllowlist ?? [...GLOBAL_UPLOAD_ALLOWLIST];\n\n\t\tif (!matchesMimeAllowlist(body.contentType, allowlist)) {\n\t\t\treturn apiError(\"INVALID_TYPE\", \"File type not allowed\", 400);\n\t\t}\n\n\t\tconst repo = new MediaRepository(emdash.db);\n\n\t\t// Check for existing content with same hash (deduplication)\n\t\tif (body.deduplicate !== false && body.contentHash && body.size > 0) {\n\t\t\tconst existing = await repo.findByContentHash(body.contentHash);\n\t\t\tif (existing && existing.mimeType === normalizedContentType && existing.size === body.size) {\n\t\t\t\tconst response: ExistingMediaResponse = {\n\t\t\t\t\texisting: true,\n\t\t\t\t\tmediaId: existing.id,\n\t\t\t\t\tstorageKey: existing.storageKey,\n\t\t\t\t\turl: `/_emdash/api/media/file/${existing.storageKey}`,\n\t\t\t\t};\n\t\t\t\treturn apiSuccess(response);\n\t\t\t}\n\t\t}\n\t\tconst filename = body.ensureUniqueFilename\n\t\t\t? await repo.findAvailableFilename(body.filename)\n\t\t\t: body.filename;\n\n\t\t// Generate unique storage key\n\t\tconst id = ulid();\n\t\tconst ext = path.extname(filename) || \"\";\n\t\tconst storageKey = `${id}${ext}`;\n\n\t\tlet signedUrl: Awaited<ReturnType<typeof emdash.storage.getSignedUploadUrl>> | null;\n\t\ttry {\n\t\t\tsignedUrl = await emdash.storage.getSignedUploadUrl({\n\t\t\t\tkey: storageKey,\n\t\t\t\tcontentType: body.contentType,\n\t\t\t\tsize: body.size,\n\t\t\t\texpiresIn: 3600,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (!isUnsupportedSignedUpload(error)) throw error;\n\t\t\tsignedUrl = null;\n\t\t}\n\n\t\tconst mediaItem = await repo.createPending({\n\t\t\tfilename,\n\t\t\tmimeType: normalizedContentType,\n\t\t\tsize: body.size,\n\t\t\tstorageKey,\n\t\t\tauthorId: user?.id,\n\t\t\tfolderId: body.folderId,\n\t\t});\n\n\t\tconst response: UploadUrlResponse = {\n\t\t\tuploadUrl: signedUrl?.url ?? `/_emdash/api/media/${mediaItem.id}/upload`,\n\t\t\tmethod: signedUrl?.method ?? \"PUT\",\n\t\t\theaders: signedUrl?.headers ?? {\n\t\t\t\t\"Content-Type\": normalizedContentType,\n\t\t\t\t\"X-EmDash-Request\": \"1\",\n\t\t\t},\n\t\t\tmediaId: mediaItem.id,\n\t\t\tstorageKey,\n\t\t\texpiresAt: signedUrl?.expiresAt ?? new Date(Date.now() + 3600 * 1000).toISOString(),\n\t\t};\n\n\t\treturn apiSuccess(response);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to generate upload URL\", \"UPLOAD_URL_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload-url.mjs","names":[],"sources":["../../../../../src/astro/routes/api/media/upload-url.ts"],"sourcesContent":["/**\n * Media upload URL endpoint\n *\n * POST /_emdash/api/media/upload-url\n *\n * Returns a signed URL for direct upload to storage.\n * Creates a pending media record that must be confirmed after upload.\n */\n\nimport * as path from \"node:path\";\n\nimport type { APIRoute } from \"astro\";\nimport { ulid } from \"ulidx\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { GLOBAL_UPLOAD_ALLOWLIST, resolveFieldAllowlist } from \"#api/handlers/media-allowlist.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { DEFAULT_MAX_UPLOAD_SIZE, mediaUploadUrlBody } from \"#api/schemas.js\";\nimport { MediaRepository } from \"#db/repositories/media.js\";\nimport { matchesMimeAllowlist, normalizeMime } from \"#media/mime.js\";\n\nexport const prerender = false;\n\ninterface UploadUrlResponse {\n\tuploadUrl: string;\n\tmethod: \"PUT\";\n\theaders: Record<string, string>;\n\tmediaId: string;\n\tstorageKey: string;\n\texpiresAt: string;\n}\n\n/** Response when content already exists (deduplication) */\ninterface ExistingMediaResponse {\n\texisting: true;\n\tmediaId: string;\n\tstorageKey: string;\n\turl: string;\n}\n\nfunction isUnsupportedSignedUpload(error: unknown): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === \"NOT_SUPPORTED\";\n}\n\n/**\n * Get a signed upload URL for direct-to-storage upload\n */\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:upload\");\n\tif (denied) return denied;\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\n\t\t\t\"NO_STORAGE\",\n\t\t\t\"Storage not configured. Signed URL uploads require S3-compatible storage.\",\n\t\t\t501,\n\t\t);\n\t}\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\tconst maxSize = emdash.config.maxUploadSize ?? DEFAULT_MAX_UPLOAD_SIZE;\n\t\tif (!Number.isFinite(maxSize) || maxSize <= 0) {\n\t\t\treturn apiError(\n\t\t\t\t\"CONFIGURATION_ERROR\",\n\t\t\t\t\"Invalid maxUploadSize configuration. Expected a positive finite number.\",\n\t\t\t\t500,\n\t\t\t);\n\t\t}\n\t\tconst body = await parseBody(request, mediaUploadUrlBody(maxSize));\n\t\tif (isParseError(body)) return body;\n\t\tconst normalizedContentType = normalizeMime(body.contentType);\n\n\t\t// Validate content type (field-aware widening)\n\t\tconst fieldAllowlist = body.fieldId\n\t\t\t? await resolveFieldAllowlist(emdash.db, body.fieldId)\n\t\t\t: null;\n\t\tconst allowlist = fieldAllowlist ?? [...GLOBAL_UPLOAD_ALLOWLIST];\n\n\t\tif (!matchesMimeAllowlist(body.contentType, allowlist)) {\n\t\t\treturn apiError(\"INVALID_TYPE\", \"File type not allowed\", 400);\n\t\t}\n\n\t\tconst repo = new MediaRepository(emdash.db);\n\n\t\t// Check for existing content with same hash (deduplication)\n\t\tif (body.deduplicate !== false && body.contentHash && body.size > 0) {\n\t\t\tconst existing = await repo.findByContentHash(body.contentHash);\n\t\t\tif (existing && existing.mimeType === normalizedContentType && existing.size === body.size) {\n\t\t\t\tconst response: ExistingMediaResponse = {\n\t\t\t\t\texisting: true,\n\t\t\t\t\tmediaId: existing.id,\n\t\t\t\t\tstorageKey: existing.storageKey,\n\t\t\t\t\turl: `/_emdash/api/media/file/${existing.storageKey}`,\n\t\t\t\t};\n\t\t\t\treturn apiSuccess(response);\n\t\t\t}\n\t\t}\n\t\tconst filename = body.ensureUniqueFilename\n\t\t\t? await repo.findAvailableFilename(body.filename)\n\t\t\t: body.filename;\n\n\t\t// Generate unique storage key\n\t\tconst id = ulid();\n\t\tconst ext = path.extname(filename) || \"\";\n\t\tconst storageKey = `${id}${ext}`;\n\n\t\tlet signedUrl: Awaited<ReturnType<typeof emdash.storage.getSignedUploadUrl>> | null;\n\t\ttry {\n\t\t\tsignedUrl = await emdash.storage.getSignedUploadUrl({\n\t\t\t\tkey: storageKey,\n\t\t\t\tcontentType: body.contentType,\n\t\t\t\tsize: body.size,\n\t\t\t\texpiresIn: 3600,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (!isUnsupportedSignedUpload(error)) throw error;\n\t\t\tsignedUrl = null;\n\t\t}\n\n\t\tconst mediaItem = await repo.createPending({\n\t\t\tfilename,\n\t\t\tmimeType: normalizedContentType,\n\t\t\tsize: body.size,\n\t\t\tstorageKey,\n\t\t\tauthorId: user?.id,\n\t\t\tfolderId: body.folderId,\n\t\t});\n\n\t\tconst response: UploadUrlResponse = {\n\t\t\tuploadUrl: signedUrl?.url ?? `/_emdash/api/media/${mediaItem.id}/upload`,\n\t\t\tmethod: signedUrl?.method ?? \"PUT\",\n\t\t\theaders: signedUrl?.headers ?? {\n\t\t\t\t\"Content-Type\": normalizedContentType,\n\t\t\t\t\"X-EmDash-Request\": \"1\",\n\t\t\t},\n\t\t\tmediaId: mediaItem.id,\n\t\t\tstorageKey,\n\t\t\texpiresAt: signedUrl?.expiresAt ?? new Date(Date.now() + 3600 * 1000).toISOString(),\n\t\t};\n\n\t\treturn apiSuccess(response);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to generate upload URL\", \"UPLOAD_URL_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAa,YAAY;AAmBzB,SAAS,0BAA0B,OAAyB;AAC3D,QAAO,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;;;;;AAMpE,MAAa,OAAiB,OAAO,EAAE,SAAS,aAAa;CAC5D,MAAM,EAAE,QAAQ,SAAS;CAEzB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,QAAQ,QACZ,QAAO,SACN,cACA,6EACA,IACA;AAGF,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAGpE,KAAI;EACH,MAAM,UAAU,OAAO,OAAO,iBAAiB;AAC/C,MAAI,CAAC,OAAO,SAAS,QAAQ,IAAI,WAAW,EAC3C,QAAO,SACN,uBACA,2EACA,IACA;EAEF,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB,QAAQ,CAAC;AAClE,MAAI,aAAa,KAAK,CAAE,QAAO;EAC/B,MAAM,wBAAwB,cAAc,KAAK,YAAY;EAM7D,MAAM,aAHiB,KAAK,UACzB,MAAM,sBAAsB,OAAO,IAAI,KAAK,QAAQ,GACpD,SACiC,CAAC,GAAG,wBAAwB;AAEhE,MAAI,CAAC,qBAAqB,KAAK,aAAa,UAAU,CACrD,QAAO,SAAS,gBAAgB,yBAAyB,IAAI;EAG9D,MAAM,OAAO,IAAI,gBAAgB,OAAO,GAAG;AAG3C,MAAI,KAAK,gBAAgB,SAAS,KAAK,eAAe,KAAK,OAAO,GAAG;GACpE,MAAM,WAAW,MAAM,KAAK,kBAAkB,KAAK,YAAY;AAC/D,OAAI,YAAY,SAAS,aAAa,yBAAyB,SAAS,SAAS,KAAK,KAOrF,QAAO,WANiC;IACvC,UAAU;IACV,SAAS,SAAS;IAClB,YAAY,SAAS;IACrB,KAAK,2BAA2B,SAAS;IACzC,CAC0B;;EAG7B,MAAM,WAAW,KAAK,uBACnB,MAAM,KAAK,sBAAsB,KAAK,SAAS,GAC/C,KAAK;EAKR,MAAM,aAAa,GAFR,MAAM,GACL,KAAK,QAAQ,SAAS,IAAI;EAGtC,IAAI;AACJ,MAAI;AACH,eAAY,MAAM,OAAO,QAAQ,mBAAmB;IACnD,KAAK;IACL,aAAa,KAAK;IAClB,MAAM,KAAK;IACX,WAAW;IACX,CAAC;WACM,OAAO;AACf,OAAI,CAAC,0BAA0B,MAAM,CAAE,OAAM;AAC7C,eAAY;;EAGb,MAAM,YAAY,MAAM,KAAK,cAAc;GAC1C;GACA,UAAU;GACV,MAAM,KAAK;GACX;GACA,UAAU,MAAM;GAChB,UAAU,KAAK;GACf,CAAC;AAcF,SAAO,WAZ6B;GACnC,WAAW,WAAW,OAAO,sBAAsB,UAAU,GAAG;GAChE,QAAQ,WAAW,UAAU;GAC7B,SAAS,WAAW,WAAW;IAC9B,gBAAgB;IAChB,oBAAoB;IACpB;GACD,SAAS,UAAU;GACnB;GACA,WAAW,WAAW,aAAa,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO,IAAK,CAAC,aAAa;GACnF,CAE0B;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,iCAAiC,mBAAmB"}
|
|
@@ -1,42 +1,43 @@
|
|
|
1
1
|
import "../../../dialect-helpers-7_IqPdh9.mjs";
|
|
2
2
|
import "../../../config-CvmjJcVw.mjs";
|
|
3
3
|
import "../../../base64-DvnNgP7e.mjs";
|
|
4
|
-
import "../../../
|
|
5
|
-
import
|
|
6
|
-
import "../../../
|
|
7
|
-
import "../../../
|
|
8
|
-
import
|
|
9
|
-
import { t as
|
|
10
|
-
import "../../../
|
|
11
|
-
import "../../../
|
|
12
|
-
import "../../../
|
|
13
|
-
import "../../../
|
|
14
|
-
import "../../../
|
|
15
|
-
import "../../../collection-deletion-
|
|
16
|
-
import "../../../
|
|
17
|
-
import "../../../
|
|
18
|
-
import "../../../
|
|
19
|
-
import
|
|
20
|
-
import "../../../
|
|
21
|
-
import "../../../
|
|
22
|
-
import "../../../
|
|
23
|
-
import "../../../
|
|
24
|
-
import
|
|
25
|
-
import "../../../
|
|
26
|
-
import "../../../
|
|
27
|
-
import "../../../
|
|
28
|
-
import
|
|
29
|
-
import {
|
|
30
|
-
import "../../../
|
|
31
|
-
import "../../../
|
|
32
|
-
import
|
|
33
|
-
import "../../../
|
|
34
|
-
import "../../../
|
|
35
|
-
import "../../../
|
|
36
|
-
import "../../../
|
|
4
|
+
import "../../../request-cache-C4CIo5ad.mjs";
|
|
5
|
+
import "../../../url-Dn3IStq8.mjs";
|
|
6
|
+
import "../../../types-j6MBDjlZ.mjs";
|
|
7
|
+
import { t as MediaRepository } from "../../../media-CputjGE1.mjs";
|
|
8
|
+
import "../../../dist-Cfu8mMBs.mjs";
|
|
9
|
+
import { n as normalizeMime, t as matchesMimeAllowlist } from "../../../mime-IZf-LHIS.mjs";
|
|
10
|
+
import { t as enrichImageMetadata } from "../../../enrich-BDdVNeDK.mjs";
|
|
11
|
+
import "../../../fts-manager-DU03MxWu.mjs";
|
|
12
|
+
import "../../../collection-slugs-cache-BNRAPNiu.mjs";
|
|
13
|
+
import "../../../capture-triggers-CdZfvHtF.mjs";
|
|
14
|
+
import "../../../activation-DDuqAat2.mjs";
|
|
15
|
+
import "../../../collection-deletion-JecE26cS.mjs";
|
|
16
|
+
import "../../../registry-CtHRqVe-.mjs";
|
|
17
|
+
import { n as computeContentHash } from "../../../hash-CY4QdeMJ.mjs";
|
|
18
|
+
import "../../../zod-generator-DnfG5sGQ.mjs";
|
|
19
|
+
import "../../../errors-CjXd1LgH.mjs";
|
|
20
|
+
import "../../../canonical-CAecl1UQ.mjs";
|
|
21
|
+
import "../../../digest-DiYAoZpf.mjs";
|
|
22
|
+
import "../../../errors-CNvATh_7.mjs";
|
|
23
|
+
import "../../../media-usage-work-BlMjwPg8.mjs";
|
|
24
|
+
import "../../../content-repair-B-k5JrVN.mjs";
|
|
25
|
+
import "../../../collection-deletion-processor-DgCfF3a1.mjs";
|
|
26
|
+
import { a as handleMediaUsageSummaries } from "../../../media-usage-B8q0owWQ.mjs";
|
|
27
|
+
import "../../../settings-B0zQj_Tj.mjs";
|
|
28
|
+
import "../../../site-settings-AYFvhwQn.mjs";
|
|
29
|
+
import { a as unwrapResult, n as apiSuccess, r as handleError, t as apiError } from "../../../error-CEdm_AWU.mjs";
|
|
30
|
+
import { i as parseQuery, t as isParseError } from "../../../parse-Gt2l4Sld.mjs";
|
|
31
|
+
import "../../../redirects-D4EWeXAo.mjs";
|
|
32
|
+
import "../../../entry-lock-PP1JCXBB.mjs";
|
|
33
|
+
import { A as mediaUploadEnsureUniqueFilenameForm, g as mediaListQuery, k as mediaUploadDeduplicateForm, l as mediaFolderIdSchema, n as DEFAULT_MAX_UPLOAD_SIZE, r as formatFileSize } from "../../../media-D1z_jisb.mjs";
|
|
34
|
+
import "../../../comments-BRtp992B.mjs";
|
|
35
|
+
import "../../../byline-fields-DHJs0Mja.mjs";
|
|
36
|
+
import "../../../menus-BQKqf0Up.mjs";
|
|
37
|
+
import "../../../status-D39Fpy8R.mjs";
|
|
37
38
|
import "../../../api/schemas/index.mjs";
|
|
38
|
-
import { n as resolveFieldAllowlist, t as GLOBAL_UPLOAD_ALLOWLIST } from "../../../media-allowlist-
|
|
39
|
-
import { i as requirePerm, t as canReadMediaUsageCount } from "../../../authorize-
|
|
39
|
+
import { n as resolveFieldAllowlist, t as GLOBAL_UPLOAD_ALLOWLIST } from "../../../media-allowlist-D5a4d-RA.mjs";
|
|
40
|
+
import { i as requirePerm, t as canReadMediaUsageCount } from "../../../authorize-soZXK7U0.mjs";
|
|
40
41
|
import { ulid } from "ulidx";
|
|
41
42
|
import * as path from "node:path";
|
|
42
43
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.mjs","names":[],"sources":["../../../../src/astro/routes/api/media.ts"],"sourcesContent":["/**\n * Media list and upload endpoint\n *\n * GET /_emdash/api/media - List all media\n * POST /_emdash/api/media - Upload new media (via configured storage adapter)\n */\n\nimport * as path from \"node:path\";\n\nimport type { APIRoute } from \"astro\";\nimport { ulid } from \"ulidx\";\n\nimport { canReadMediaUsageCount, requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError, unwrapResult } from \"#api/error.js\";\nimport { GLOBAL_UPLOAD_ALLOWLIST, resolveFieldAllowlist } from \"#api/handlers/media-allowlist.js\";\nimport { handleMediaUsageSummaries } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseQuery } from \"#api/parse.js\";\nimport {\n\tDEFAULT_MAX_UPLOAD_SIZE,\n\tformatFileSize,\n\tmediaFolderIdSchema,\n\tmediaListQuery,\n\tmediaUploadDeduplicateForm,\n\tmediaUploadEnsureUniqueFilenameForm,\n} from \"#api/schemas.js\";\nimport { MediaRepository } from \"#db/repositories/media.js\";\nimport { enrichImageMetadata } from \"#media/enrich.js\";\nimport { matchesMimeAllowlist, normalizeMime } from \"#media/mime.js\";\nimport { computeContentHash } from \"#utils/hash.js\";\n\nimport type { MediaItem } from \"../../types.js\";\n\nexport const prerender = false;\n\n/**\n * Add URL to media items\n * Uses relative URLs to ensure portability across deployments\n */\nfunction addUrlToMedia(item: MediaItem): MediaItem & { url: string } {\n\treturn {\n\t\t...item,\n\t\turl: `/_emdash/api/media/file/${item.storageKey}`,\n\t};\n}\n\n/**\n * List media items\n */\nexport const GET: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:read\");\n\tif (denied) return denied;\n\n\tif (!emdash?.handleMediaList) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst url = new URL(request.url);\n\tconst query = parseQuery(url, mediaListQuery);\n\tif (isParseError(query)) return query;\n\n\tconst result = await emdash.handleMediaList({\n\t\tcursor: query.cursor,\n\t\tpage: query.page,\n\t\tlimit: query.limit,\n\t\tmimeType: query.mimeType,\n\t\tq: query.q,\n\t\tfolderId: query.folderId === \"unfiled\" ? null : query.folderId,\n\t});\n\n\tif (!result.success) {\n\t\treturn unwrapResult(result);\n\t}\n\n\t// Add URL to each media item (relative URLs for portability)\n\tconst itemsWithUrl = result.data.items.map((item) => addUrlToMedia(item));\n\tif (query.includeUsage !== \"1\") {\n\t\treturn apiSuccess({\n\t\t\titems: itemsWithUrl,\n\t\t\tnextCursor: result.data.nextCursor,\n\t\t\ttotalCount: result.data.totalCount,\n\t\t});\n\t}\n\n\tconst includeCount = canReadMediaUsageCount(user, locals.tokenScopes);\n\tconst usageResult = await handleMediaUsageSummaries(\n\t\temdash.db,\n\t\titemsWithUrl.map((item) => item.id),\n\t\t{ includeCount },\n\t);\n\tif (!usageResult.success) return unwrapResult(usageResult);\n\n\tconst itemsWithUsage = [];\n\tfor (const item of itemsWithUrl) {\n\t\tconst usage = usageResult.data[item.id];\n\t\tif (!usage) return apiError(\"MEDIA_USAGE_READ_ERROR\", \"Failed to read media usage\", 500);\n\t\titemsWithUsage.push({ ...item, usage });\n\t}\n\n\treturn apiSuccess({\n\t\titems: itemsWithUsage,\n\t\tnextCursor: result.data.nextCursor,\n\t\ttotalCount: result.data.totalCount,\n\t});\n};\n\n/**\n * Upload media file\n *\n * Uses the configured storage adapter to store the file.\n */\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:upload\");\n\tif (denied) return denied;\n\n\tif (!emdash?.handleMediaCreate) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\"NO_STORAGE\", \"Storage not configured\", 500);\n\t}\n\n\ttry {\n\t\tconst rawMax = emdash.config.maxUploadSize ?? DEFAULT_MAX_UPLOAD_SIZE;\n\t\tif (!Number.isFinite(rawMax) || rawMax <= 0) {\n\t\t\treturn apiError(\"CONFIGURATION_ERROR\", \"Invalid maxUploadSize configuration\", 500);\n\t\t}\n\t\tconst maxUploadSize = rawMax;\n\n\t\t// Best-effort size check before buffering the full multipart body\n\t\tconst contentLength = request.headers.get(\"Content-Length\");\n\t\tif (contentLength && parseInt(contentLength, 10) > maxUploadSize) {\n\t\t\treturn apiError(\"PAYLOAD_TOO_LARGE\", \"Upload too large\", 413);\n\t\t}\n\n\t\tconst formData = await request.formData();\n\t\tconst fileEntry = formData.get(\"file\");\n\t\tconst file = fileEntry instanceof File ? fileEntry : null;\n\n\t\tif (!file) {\n\t\t\treturn apiError(\"NO_FILE\", \"No file provided\", 400);\n\t\t}\n\n\t\tconst deduplicateResult = mediaUploadDeduplicateForm.safeParse(\n\t\t\tformData.get(\"deduplicate\") ?? undefined,\n\t\t);\n\t\tif (!deduplicateResult.success) {\n\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400, {\n\t\t\t\tissues: deduplicateResult.error.issues.map((issue) => ({\n\t\t\t\t\tpath: \"deduplicate\",\n\t\t\t\t\tmessage: issue.message,\n\t\t\t\t})),\n\t\t\t});\n\t\t}\n\t\tconst ensureUniqueFilenameResult = mediaUploadEnsureUniqueFilenameForm.safeParse(\n\t\t\tformData.get(\"ensureUniqueFilename\") ?? undefined,\n\t\t);\n\t\tif (!ensureUniqueFilenameResult.success) {\n\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t}\n\t\tconst folderEntry = formData.get(\"folderId\");\n\t\tlet folderId: string | null | undefined;\n\t\tif (folderEntry !== null) {\n\t\t\tif (typeof folderEntry !== \"string\") {\n\t\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t\t}\n\t\t\tif (folderEntry === \"unfiled\") {\n\t\t\t\tfolderId = null;\n\t\t\t} else {\n\t\t\t\tconst folderResult = mediaFolderIdSchema.safeParse(folderEntry);\n\t\t\t\tif (!folderResult.success) {\n\t\t\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t\t\t}\n\t\t\t\tfolderId = folderResult.data;\n\t\t\t}\n\t\t}\n\n\t\t// Validate file type — widen the allowlist when a field-specific list is configured\n\t\tconst fieldIdEntry = formData.get(\"fieldId\");\n\t\tconst fieldId =\n\t\t\ttypeof fieldIdEntry === \"string\" && fieldIdEntry.length > 0 ? fieldIdEntry : null;\n\n\t\tconst fieldAllowlist = fieldId ? await resolveFieldAllowlist(emdash.db, fieldId) : null;\n\t\tconst allowlist = fieldAllowlist ?? [...GLOBAL_UPLOAD_ALLOWLIST];\n\n\t\tif (!matchesMimeAllowlist(file.type, allowlist)) {\n\t\t\treturn apiError(\"INVALID_TYPE\", \"File type not allowed\", 400);\n\t\t}\n\n\t\t// Check file size before buffering\n\t\tif (file.size > maxUploadSize) {\n\t\t\treturn apiError(\n\t\t\t\t\"PAYLOAD_TOO_LARGE\",\n\t\t\t\t`File exceeds maximum size of ${formatFileSize(maxUploadSize)}`,\n\t\t\t\t413,\n\t\t\t);\n\t\t}\n\n\t\t// Get file content and compute hash\n\t\tconst buffer = new Uint8Array(await file.arrayBuffer());\n\t\tconst contentHash = await computeContentHash(buffer);\n\n\t\t// Check for existing media with same content hash (deduplication)\n\t\tconst repo = new MediaRepository(emdash.db);\n\t\tif (deduplicateResult.data) {\n\t\t\tconst existing = await repo.findByContentHash(contentHash);\n\t\t\tif (existing) {\n\t\t\t\tconst itemWithUrl = addUrlToMedia(existing);\n\t\t\t\treturn apiSuccess({ item: itemWithUrl, deduplicated: true });\n\t\t\t}\n\t\t}\n\t\tconst filename = ensureUniqueFilenameResult.data\n\t\t\t? await repo.findAvailableFilename(file.name)\n\t\t\t: file.name;\n\n\t\t// Generate unique storage key\n\t\tconst id = ulid();\n\t\tconst ext = path.extname(filename) || \"\";\n\t\tconst storageKey = `${id}${ext}`;\n\n\t\t// Upload to storage using the configured adapter\n\t\tawait emdash.storage.upload({\n\t\t\tkey: storageKey,\n\t\t\tbody: buffer,\n\t\t\tcontentType: file.type,\n\t\t});\n\n\t\t// Get image dimensions from form data (sent by client)\n\t\tconst widthEntry = formData.get(\"width\");\n\t\tconst widthStr = typeof widthEntry === \"string\" ? widthEntry : null;\n\t\tconst heightEntry = formData.get(\"height\");\n\t\tconst heightStr = typeof heightEntry === \"string\" ? heightEntry : null;\n\t\tconst width = widthStr ? parseInt(widthStr, 10) : undefined;\n\t\tconst height = heightStr ? parseInt(heightStr, 10) : undefined;\n\n\t\t// Derive dimensions + LQIP placeholders via the shared helper.\n\t\t// If the client sent a downscaled thumbnail, decode that for the blurhash\n\t\t// (avoids OOM on large originals on memory-constrained runtimes).\n\t\tconst thumbnailEntry = formData.get(\"thumbnail\");\n\t\tconst thumbnail = thumbnailEntry instanceof File ? thumbnailEntry : null;\n\t\tconst enriched = await enrichImageMetadata(buffer, file.type, {\n\t\t\tknownDimensions: width != null && height != null ? { width, height } : undefined,\n\t\t\tplaceholder: thumbnail\n\t\t\t\t? { bytes: new Uint8Array(await thumbnail.arrayBuffer()), contentType: thumbnail.type }\n\t\t\t\t: undefined,\n\t\t});\n\n\t\t// Create media record\n\t\tconst result = await emdash.handleMediaCreate({\n\t\t\tfilename,\n\t\t\tmimeType: normalizeMime(file.type),\n\t\t\tsize: file.size,\n\t\t\t// Client dimensions win over server header dimensions: the browser's\n\t\t\t// naturalWidth/Height apply EXIF orientation, while image-size reports\n\t\t\t// raw (pre-orientation) header dims — swapped for 90°/270° JPEGs.\n\t\t\twidth: width ?? enriched.width,\n\t\t\theight: height ?? enriched.height,\n\t\t\tstorageKey,\n\t\t\tcontentHash,\n\t\t\tblurhash: enriched.blurhash,\n\t\t\tdominantColor: enriched.dominantColor,\n\t\t\tauthorId: user?.id,\n\t\t\tfolderId,\n\t\t});\n\n\t\tif (!result.success) {\n\t\t\t// Clean up the uploaded file on failure\n\t\t\ttry {\n\t\t\t\tawait emdash.storage.delete(storageKey);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t\treturn unwrapResult(result);\n\t\t}\n\n\t\t// Add URL to the response (relative URL for portability)\n\t\tconst itemWithUrl = addUrlToMedia(result.data.item);\n\n\t\treturn apiSuccess({ item: itemWithUrl }, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Upload failed\", \"UPLOAD_ERROR\");\n\t}\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media.mjs","names":[],"sources":["../../../../src/astro/routes/api/media.ts"],"sourcesContent":["/**\n * Media list and upload endpoint\n *\n * GET /_emdash/api/media - List all media\n * POST /_emdash/api/media - Upload new media (via configured storage adapter)\n */\n\nimport * as path from \"node:path\";\n\nimport type { APIRoute } from \"astro\";\nimport { ulid } from \"ulidx\";\n\nimport { canReadMediaUsageCount, requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError, unwrapResult } from \"#api/error.js\";\nimport { GLOBAL_UPLOAD_ALLOWLIST, resolveFieldAllowlist } from \"#api/handlers/media-allowlist.js\";\nimport { handleMediaUsageSummaries } from \"#api/handlers/media-usage.js\";\nimport { isParseError, parseQuery } from \"#api/parse.js\";\nimport {\n\tDEFAULT_MAX_UPLOAD_SIZE,\n\tformatFileSize,\n\tmediaFolderIdSchema,\n\tmediaListQuery,\n\tmediaUploadDeduplicateForm,\n\tmediaUploadEnsureUniqueFilenameForm,\n} from \"#api/schemas.js\";\nimport { MediaRepository } from \"#db/repositories/media.js\";\nimport { enrichImageMetadata } from \"#media/enrich.js\";\nimport { matchesMimeAllowlist, normalizeMime } from \"#media/mime.js\";\nimport { computeContentHash } from \"#utils/hash.js\";\n\nimport type { MediaItem } from \"../../types.js\";\n\nexport const prerender = false;\n\n/**\n * Add URL to media items\n * Uses relative URLs to ensure portability across deployments\n */\nfunction addUrlToMedia(item: MediaItem): MediaItem & { url: string } {\n\treturn {\n\t\t...item,\n\t\turl: `/_emdash/api/media/file/${item.storageKey}`,\n\t};\n}\n\n/**\n * List media items\n */\nexport const GET: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:read\");\n\tif (denied) return denied;\n\n\tif (!emdash?.handleMediaList) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst url = new URL(request.url);\n\tconst query = parseQuery(url, mediaListQuery);\n\tif (isParseError(query)) return query;\n\n\tconst result = await emdash.handleMediaList({\n\t\tcursor: query.cursor,\n\t\tpage: query.page,\n\t\tlimit: query.limit,\n\t\tmimeType: query.mimeType,\n\t\tq: query.q,\n\t\tfolderId: query.folderId === \"unfiled\" ? null : query.folderId,\n\t});\n\n\tif (!result.success) {\n\t\treturn unwrapResult(result);\n\t}\n\n\t// Add URL to each media item (relative URLs for portability)\n\tconst itemsWithUrl = result.data.items.map((item) => addUrlToMedia(item));\n\tif (query.includeUsage !== \"1\") {\n\t\treturn apiSuccess({\n\t\t\titems: itemsWithUrl,\n\t\t\tnextCursor: result.data.nextCursor,\n\t\t\ttotalCount: result.data.totalCount,\n\t\t});\n\t}\n\n\tconst includeCount = canReadMediaUsageCount(user, locals.tokenScopes);\n\tconst usageResult = await handleMediaUsageSummaries(\n\t\temdash.db,\n\t\titemsWithUrl.map((item) => item.id),\n\t\t{ includeCount },\n\t);\n\tif (!usageResult.success) return unwrapResult(usageResult);\n\n\tconst itemsWithUsage = [];\n\tfor (const item of itemsWithUrl) {\n\t\tconst usage = usageResult.data[item.id];\n\t\tif (!usage) return apiError(\"MEDIA_USAGE_READ_ERROR\", \"Failed to read media usage\", 500);\n\t\titemsWithUsage.push({ ...item, usage });\n\t}\n\n\treturn apiSuccess({\n\t\titems: itemsWithUsage,\n\t\tnextCursor: result.data.nextCursor,\n\t\ttotalCount: result.data.totalCount,\n\t});\n};\n\n/**\n * Upload media file\n *\n * Uses the configured storage adapter to store the file.\n */\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tconst denied = requirePerm(user, \"media:upload\");\n\tif (denied) return denied;\n\n\tif (!emdash?.handleMediaCreate) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tif (!emdash?.storage) {\n\t\treturn apiError(\"NO_STORAGE\", \"Storage not configured\", 500);\n\t}\n\n\ttry {\n\t\tconst rawMax = emdash.config.maxUploadSize ?? DEFAULT_MAX_UPLOAD_SIZE;\n\t\tif (!Number.isFinite(rawMax) || rawMax <= 0) {\n\t\t\treturn apiError(\"CONFIGURATION_ERROR\", \"Invalid maxUploadSize configuration\", 500);\n\t\t}\n\t\tconst maxUploadSize = rawMax;\n\n\t\t// Best-effort size check before buffering the full multipart body\n\t\tconst contentLength = request.headers.get(\"Content-Length\");\n\t\tif (contentLength && parseInt(contentLength, 10) > maxUploadSize) {\n\t\t\treturn apiError(\"PAYLOAD_TOO_LARGE\", \"Upload too large\", 413);\n\t\t}\n\n\t\tconst formData = await request.formData();\n\t\tconst fileEntry = formData.get(\"file\");\n\t\tconst file = fileEntry instanceof File ? fileEntry : null;\n\n\t\tif (!file) {\n\t\t\treturn apiError(\"NO_FILE\", \"No file provided\", 400);\n\t\t}\n\n\t\tconst deduplicateResult = mediaUploadDeduplicateForm.safeParse(\n\t\t\tformData.get(\"deduplicate\") ?? undefined,\n\t\t);\n\t\tif (!deduplicateResult.success) {\n\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400, {\n\t\t\t\tissues: deduplicateResult.error.issues.map((issue) => ({\n\t\t\t\t\tpath: \"deduplicate\",\n\t\t\t\t\tmessage: issue.message,\n\t\t\t\t})),\n\t\t\t});\n\t\t}\n\t\tconst ensureUniqueFilenameResult = mediaUploadEnsureUniqueFilenameForm.safeParse(\n\t\t\tformData.get(\"ensureUniqueFilename\") ?? undefined,\n\t\t);\n\t\tif (!ensureUniqueFilenameResult.success) {\n\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t}\n\t\tconst folderEntry = formData.get(\"folderId\");\n\t\tlet folderId: string | null | undefined;\n\t\tif (folderEntry !== null) {\n\t\t\tif (typeof folderEntry !== \"string\") {\n\t\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t\t}\n\t\t\tif (folderEntry === \"unfiled\") {\n\t\t\t\tfolderId = null;\n\t\t\t} else {\n\t\t\t\tconst folderResult = mediaFolderIdSchema.safeParse(folderEntry);\n\t\t\t\tif (!folderResult.success) {\n\t\t\t\t\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400);\n\t\t\t\t}\n\t\t\t\tfolderId = folderResult.data;\n\t\t\t}\n\t\t}\n\n\t\t// Validate file type — widen the allowlist when a field-specific list is configured\n\t\tconst fieldIdEntry = formData.get(\"fieldId\");\n\t\tconst fieldId =\n\t\t\ttypeof fieldIdEntry === \"string\" && fieldIdEntry.length > 0 ? fieldIdEntry : null;\n\n\t\tconst fieldAllowlist = fieldId ? await resolveFieldAllowlist(emdash.db, fieldId) : null;\n\t\tconst allowlist = fieldAllowlist ?? [...GLOBAL_UPLOAD_ALLOWLIST];\n\n\t\tif (!matchesMimeAllowlist(file.type, allowlist)) {\n\t\t\treturn apiError(\"INVALID_TYPE\", \"File type not allowed\", 400);\n\t\t}\n\n\t\t// Check file size before buffering\n\t\tif (file.size > maxUploadSize) {\n\t\t\treturn apiError(\n\t\t\t\t\"PAYLOAD_TOO_LARGE\",\n\t\t\t\t`File exceeds maximum size of ${formatFileSize(maxUploadSize)}`,\n\t\t\t\t413,\n\t\t\t);\n\t\t}\n\n\t\t// Get file content and compute hash\n\t\tconst buffer = new Uint8Array(await file.arrayBuffer());\n\t\tconst contentHash = await computeContentHash(buffer);\n\n\t\t// Check for existing media with same content hash (deduplication)\n\t\tconst repo = new MediaRepository(emdash.db);\n\t\tif (deduplicateResult.data) {\n\t\t\tconst existing = await repo.findByContentHash(contentHash);\n\t\t\tif (existing) {\n\t\t\t\tconst itemWithUrl = addUrlToMedia(existing);\n\t\t\t\treturn apiSuccess({ item: itemWithUrl, deduplicated: true });\n\t\t\t}\n\t\t}\n\t\tconst filename = ensureUniqueFilenameResult.data\n\t\t\t? await repo.findAvailableFilename(file.name)\n\t\t\t: file.name;\n\n\t\t// Generate unique storage key\n\t\tconst id = ulid();\n\t\tconst ext = path.extname(filename) || \"\";\n\t\tconst storageKey = `${id}${ext}`;\n\n\t\t// Upload to storage using the configured adapter\n\t\tawait emdash.storage.upload({\n\t\t\tkey: storageKey,\n\t\t\tbody: buffer,\n\t\t\tcontentType: file.type,\n\t\t});\n\n\t\t// Get image dimensions from form data (sent by client)\n\t\tconst widthEntry = formData.get(\"width\");\n\t\tconst widthStr = typeof widthEntry === \"string\" ? widthEntry : null;\n\t\tconst heightEntry = formData.get(\"height\");\n\t\tconst heightStr = typeof heightEntry === \"string\" ? heightEntry : null;\n\t\tconst width = widthStr ? parseInt(widthStr, 10) : undefined;\n\t\tconst height = heightStr ? parseInt(heightStr, 10) : undefined;\n\n\t\t// Derive dimensions + LQIP placeholders via the shared helper.\n\t\t// If the client sent a downscaled thumbnail, decode that for the blurhash\n\t\t// (avoids OOM on large originals on memory-constrained runtimes).\n\t\tconst thumbnailEntry = formData.get(\"thumbnail\");\n\t\tconst thumbnail = thumbnailEntry instanceof File ? thumbnailEntry : null;\n\t\tconst enriched = await enrichImageMetadata(buffer, file.type, {\n\t\t\tknownDimensions: width != null && height != null ? { width, height } : undefined,\n\t\t\tplaceholder: thumbnail\n\t\t\t\t? { bytes: new Uint8Array(await thumbnail.arrayBuffer()), contentType: thumbnail.type }\n\t\t\t\t: undefined,\n\t\t});\n\n\t\t// Create media record\n\t\tconst result = await emdash.handleMediaCreate({\n\t\t\tfilename,\n\t\t\tmimeType: normalizeMime(file.type),\n\t\t\tsize: file.size,\n\t\t\t// Client dimensions win over server header dimensions: the browser's\n\t\t\t// naturalWidth/Height apply EXIF orientation, while image-size reports\n\t\t\t// raw (pre-orientation) header dims — swapped for 90°/270° JPEGs.\n\t\t\twidth: width ?? enriched.width,\n\t\t\theight: height ?? enriched.height,\n\t\t\tstorageKey,\n\t\t\tcontentHash,\n\t\t\tblurhash: enriched.blurhash,\n\t\t\tdominantColor: enriched.dominantColor,\n\t\t\tauthorId: user?.id,\n\t\t\tfolderId,\n\t\t});\n\n\t\tif (!result.success) {\n\t\t\t// Clean up the uploaded file on failure\n\t\t\ttry {\n\t\t\t\tawait emdash.storage.delete(storageKey);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t\treturn unwrapResult(result);\n\t\t}\n\n\t\t// Add URL to the response (relative URL for portability)\n\t\tconst itemWithUrl = addUrlToMedia(result.data.item);\n\n\t\treturn apiSuccess({ item: itemWithUrl }, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Upload failed\", \"UPLOAD_ERROR\");\n\t}\n};\n"],"mappings":"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"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import "../../../../../../config-CvmjJcVw.mjs";
|
|
2
2
|
import "../../../../../../after-PcEvMY_6.mjs";
|
|
3
3
|
import "../../../../../../base64-DvnNgP7e.mjs";
|
|
4
|
-
import "../../../../../../object-cache-
|
|
5
|
-
import "../../../../../../
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import "../../../../../../
|
|
9
|
-
import "../../../../../../
|
|
10
|
-
import "../../../../../../
|
|
11
|
-
import "../../../../../../
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import "../../../../../../
|
|
16
|
-
import "../../../../../../
|
|
17
|
-
import "../../../../../../
|
|
18
|
-
import "../../../../../../
|
|
19
|
-
import
|
|
20
|
-
import "../../../../../../
|
|
4
|
+
import "../../../../../../object-cache-Bo6DGaC9.mjs";
|
|
5
|
+
import "../../../../../../url-Dn3IStq8.mjs";
|
|
6
|
+
import "../../../../../../types-j6MBDjlZ.mjs";
|
|
7
|
+
import { a as handleMenuItemDelete, s as handleMenuItemUpdate } from "../../../../../../menus-trvc6_fW.mjs";
|
|
8
|
+
import { t as menuTag } from "../../../../../../chrome-tags-CKELm-bo.mjs";
|
|
9
|
+
import "../../../../../../errors-CjXd1LgH.mjs";
|
|
10
|
+
import "../../../../../../errors-CNvATh_7.mjs";
|
|
11
|
+
import "../../../../../../settings-B0zQj_Tj.mjs";
|
|
12
|
+
import "../../../../../../site-settings-AYFvhwQn.mjs";
|
|
13
|
+
import { a as unwrapResult, r as handleError, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
|
|
14
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../../parse-Gt2l4Sld.mjs";
|
|
15
|
+
import { b as localeFilterQuery } from "../../../../../../redirects-D4EWeXAo.mjs";
|
|
16
|
+
import "../../../../../../entry-lock-PP1JCXBB.mjs";
|
|
17
|
+
import "../../../../../../media-D1z_jisb.mjs";
|
|
18
|
+
import "../../../../../../comments-BRtp992B.mjs";
|
|
19
|
+
import "../../../../../../byline-fields-DHJs0Mja.mjs";
|
|
20
|
+
import { f as updateMenuItemBody } from "../../../../../../menus-BQKqf0Up.mjs";
|
|
21
|
+
import "../../../../../../status-D39Fpy8R.mjs";
|
|
21
22
|
import "../../../../../../api/schemas/index.mjs";
|
|
22
|
-
import { i as requirePerm } from "../../../../../../authorize-
|
|
23
|
+
import { i as requirePerm } from "../../../../../../authorize-soZXK7U0.mjs";
|
|
23
24
|
|
|
24
25
|
//#region src/astro/routes/api/menus/[name]/items/[id].ts
|
|
25
26
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_id_.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/menus/[name]/items/[id].ts"],"sourcesContent":["/**\n * Single menu item endpoint\n *\n * PUT /_emdash/api/menus/:name/items/:id[?locale=xx]\n * DELETE /_emdash/api/menus/:name/items/:id[?locale=xx]\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemDelete, handleMenuItemUpdate } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery, updateMenuItemBody } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const PUT: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\tconst itemId = params.id;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tif (!itemId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"id is required\", 400);\n\t}\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, updateMenuItemBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemUpdate(emdash.db, name, itemId, body, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update menu item\", \"MENU_ITEM_UPDATE_ERROR\");\n\t}\n};\n\nexport const DELETE: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\tconst itemId = params.id;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tif (!itemId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"id is required\", 400);\n\t}\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst result = await handleMenuItemDelete(emdash.db, name, itemId, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete menu item\", \"MENU_ITEM_DELETE_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"_id_.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/menus/[name]/items/[id].ts"],"sourcesContent":["/**\n * Single menu item endpoint\n *\n * PUT /_emdash/api/menus/:name/items/:id[?locale=xx]\n * DELETE /_emdash/api/menus/:name/items/:id[?locale=xx]\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemDelete, handleMenuItemUpdate } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery, updateMenuItemBody } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const PUT: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\tconst itemId = params.id;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tif (!itemId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"id is required\", 400);\n\t}\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, updateMenuItemBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemUpdate(emdash.db, name, itemId, body, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to update menu item\", \"MENU_ITEM_UPDATE_ERROR\");\n\t}\n};\n\nexport const DELETE: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\tconst itemId = params.id;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tif (!itemId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"id is required\", 400);\n\t}\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst result = await handleMenuItemDelete(emdash.db, name, itemId, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to delete menu item\", \"MENU_ITEM_DELETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,QAAQ,YAAY;CAC1E,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CACpB,MAAM,SAAS,OAAO;CAEtB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,OACJ,QAAO,SAAS,oBAAoB,kBAAkB,IAAI;CAG3D,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;EAE/B,MAAM,SAAS,MAAM,qBAAqB,OAAO,IAAI,MAAM,QAAQ,MAAM,EACxE,QAAQ,QAAQ,QAChB,CAAC;AACF,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAChD,MAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;AACrE,SAAO,aAAa,OAAO;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,8BAA8B,yBAAyB;;;AAInF,MAAa,SAAmB,OAAO,EAAE,QAAQ,SAAS,QAAQ,YAAY;CAC7E,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CACpB,MAAM,SAAS,OAAO;CAEtB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;AAEnB,KAAI,CAAC,OACJ,QAAO,SAAS,oBAAoB,kBAAkB,IAAI;CAG3D,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EACH,MAAM,SAAS,MAAM,qBAAqB,OAAO,IAAI,MAAM,QAAQ,EAClE,QAAQ,QAAQ,QAChB,CAAC;AACF,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAChD,MAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;AACrE,SAAO,aAAa,OAAO;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,8BAA8B,yBAAyB"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import "../../../../../config-CvmjJcVw.mjs";
|
|
2
2
|
import "../../../../../after-PcEvMY_6.mjs";
|
|
3
3
|
import "../../../../../base64-DvnNgP7e.mjs";
|
|
4
|
-
import "../../../../../object-cache-
|
|
5
|
-
import "../../../../../
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import "../../../../../
|
|
9
|
-
import "../../../../../
|
|
10
|
-
import "../../../../../
|
|
11
|
-
import "../../../../../
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import "../../../../../
|
|
16
|
-
import "../../../../../
|
|
17
|
-
import "../../../../../
|
|
18
|
-
import "../../../../../
|
|
19
|
-
import
|
|
20
|
-
import "../../../../../
|
|
4
|
+
import "../../../../../object-cache-Bo6DGaC9.mjs";
|
|
5
|
+
import "../../../../../url-Dn3IStq8.mjs";
|
|
6
|
+
import "../../../../../types-j6MBDjlZ.mjs";
|
|
7
|
+
import { i as handleMenuItemCreate } from "../../../../../menus-trvc6_fW.mjs";
|
|
8
|
+
import { t as menuTag } from "../../../../../chrome-tags-CKELm-bo.mjs";
|
|
9
|
+
import "../../../../../errors-CjXd1LgH.mjs";
|
|
10
|
+
import "../../../../../errors-CNvATh_7.mjs";
|
|
11
|
+
import "../../../../../settings-B0zQj_Tj.mjs";
|
|
12
|
+
import "../../../../../site-settings-AYFvhwQn.mjs";
|
|
13
|
+
import { a as unwrapResult, r as handleError } from "../../../../../error-CEdm_AWU.mjs";
|
|
14
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../parse-Gt2l4Sld.mjs";
|
|
15
|
+
import { b as localeFilterQuery } from "../../../../../redirects-D4EWeXAo.mjs";
|
|
16
|
+
import "../../../../../entry-lock-PP1JCXBB.mjs";
|
|
17
|
+
import "../../../../../media-D1z_jisb.mjs";
|
|
18
|
+
import "../../../../../comments-BRtp992B.mjs";
|
|
19
|
+
import "../../../../../byline-fields-DHJs0Mja.mjs";
|
|
20
|
+
import { n as createMenuItemBody } from "../../../../../menus-BQKqf0Up.mjs";
|
|
21
|
+
import "../../../../../status-D39Fpy8R.mjs";
|
|
21
22
|
import "../../../../../api/schemas/index.mjs";
|
|
22
|
-
import { i as requirePerm } from "../../../../../authorize-
|
|
23
|
+
import { i as requirePerm } from "../../../../../authorize-soZXK7U0.mjs";
|
|
23
24
|
|
|
24
25
|
//#region src/astro/routes/api/menus/[name]/items.ts
|
|
25
26
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/items.ts"],"sourcesContent":["/**\n * Menu items create endpoint\n *\n * POST /_emdash/api/menus/:name/items[?locale=xx] - Create a new menu item\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemCreate } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { createMenuItemBody, localeFilterQuery } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, createMenuItemBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemCreate(emdash.db, name, body, { locale: localeQ.locale });\n\t\tif (!result.success) return unwrapResult(result, 201);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to create menu item\", \"MENU_ITEM_CREATE_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"items.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/items.ts"],"sourcesContent":["/**\n * Menu items create endpoint\n *\n * POST /_emdash/api/menus/:name/items[?locale=xx] - Create a new menu item\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemCreate } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { createMenuItemBody, localeFilterQuery } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, createMenuItemBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemCreate(emdash.db, name, body, { locale: localeQ.locale });\n\t\tif (!result.success) return unwrapResult(result, 201);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to create menu item\", \"MENU_ITEM_CREATE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,YAAY;AAEzB,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,YAAY;CAC3E,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CAEpB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;CAEnB,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;EAE/B,MAAM,SAAS,MAAM,qBAAqB,OAAO,IAAI,MAAM,MAAM,EAAE,QAAQ,QAAQ,QAAQ,CAAC;AAC5F,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;AACrE,SAAO,aAAa,QAAQ,IAAI;UACxB,OAAO;AACf,SAAO,YAAY,OAAO,8BAA8B,yBAAyB"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import "../../../../../config-CvmjJcVw.mjs";
|
|
2
2
|
import "../../../../../after-PcEvMY_6.mjs";
|
|
3
3
|
import "../../../../../base64-DvnNgP7e.mjs";
|
|
4
|
-
import "../../../../../object-cache-
|
|
5
|
-
import "../../../../../
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import "../../../../../
|
|
9
|
-
import "../../../../../
|
|
10
|
-
import "../../../../../
|
|
11
|
-
import "../../../../../
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import "../../../../../
|
|
16
|
-
import "../../../../../
|
|
17
|
-
import "../../../../../
|
|
18
|
-
import "../../../../../
|
|
19
|
-
import
|
|
20
|
-
import "../../../../../
|
|
4
|
+
import "../../../../../object-cache-Bo6DGaC9.mjs";
|
|
5
|
+
import "../../../../../url-Dn3IStq8.mjs";
|
|
6
|
+
import "../../../../../types-j6MBDjlZ.mjs";
|
|
7
|
+
import { o as handleMenuItemReorder } from "../../../../../menus-trvc6_fW.mjs";
|
|
8
|
+
import { t as menuTag } from "../../../../../chrome-tags-CKELm-bo.mjs";
|
|
9
|
+
import "../../../../../errors-CjXd1LgH.mjs";
|
|
10
|
+
import "../../../../../errors-CNvATh_7.mjs";
|
|
11
|
+
import "../../../../../settings-B0zQj_Tj.mjs";
|
|
12
|
+
import "../../../../../site-settings-AYFvhwQn.mjs";
|
|
13
|
+
import { a as unwrapResult, r as handleError } from "../../../../../error-CEdm_AWU.mjs";
|
|
14
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../parse-Gt2l4Sld.mjs";
|
|
15
|
+
import { b as localeFilterQuery } from "../../../../../redirects-D4EWeXAo.mjs";
|
|
16
|
+
import "../../../../../entry-lock-PP1JCXBB.mjs";
|
|
17
|
+
import "../../../../../media-D1z_jisb.mjs";
|
|
18
|
+
import "../../../../../comments-BRtp992B.mjs";
|
|
19
|
+
import "../../../../../byline-fields-DHJs0Mja.mjs";
|
|
20
|
+
import { l as reorderMenuItemsBody } from "../../../../../menus-BQKqf0Up.mjs";
|
|
21
|
+
import "../../../../../status-D39Fpy8R.mjs";
|
|
21
22
|
import "../../../../../api/schemas/index.mjs";
|
|
22
|
-
import { i as requirePerm } from "../../../../../authorize-
|
|
23
|
+
import { i as requirePerm } from "../../../../../authorize-soZXK7U0.mjs";
|
|
23
24
|
|
|
24
25
|
//#region src/astro/routes/api/menus/[name]/reorder.ts
|
|
25
26
|
const prerender = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorder.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/reorder.ts"],"sourcesContent":["/**\n * Menu items reorder endpoint\n *\n * POST /_emdash/api/menus/:name/reorder - Batch update positions\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemReorder } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery, reorderMenuItemsBody } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, reorderMenuItemsBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemReorder(emdash.db, name, body.items, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to reorder menu items\", \"MENU_REORDER_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"reorder.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/reorder.ts"],"sourcesContent":["/**\n * Menu items reorder endpoint\n *\n * POST /_emdash/api/menus/:name/reorder - Batch update positions\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, unwrapResult } from \"#api/error.js\";\nimport { handleMenuItemReorder } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery, reorderMenuItemsBody } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, reorderMenuItemsBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst result = await handleMenuItemReorder(emdash.db, name, body.items, {\n\t\t\tlocale: localeQ.locale,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to reorder menu items\", \"MENU_REORDER_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,YAAY;AAEzB,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,YAAY;CAC3E,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CAEpB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;CAEnB,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,qBAAqB;AAC3D,MAAI,aAAa,KAAK,CAAE,QAAO;EAE/B,MAAM,SAAS,MAAM,sBAAsB,OAAO,IAAI,MAAM,KAAK,OAAO,EACvE,QAAQ,QAAQ,QAChB,CAAC;AACF,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAChD,MAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;AACrE,SAAO,aAAa,OAAO;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,gCAAgC,qBAAqB"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import "../../../../../config-CvmjJcVw.mjs";
|
|
2
2
|
import "../../../../../after-PcEvMY_6.mjs";
|
|
3
3
|
import "../../../../../base64-DvnNgP7e.mjs";
|
|
4
|
-
import "../../../../../object-cache-
|
|
5
|
-
import "../../../../../
|
|
6
|
-
import
|
|
7
|
-
import { t as
|
|
8
|
-
import "../../../../../
|
|
9
|
-
import "../../../../../
|
|
10
|
-
import "../../../../../
|
|
11
|
-
import "../../../../../
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import "../../../../../
|
|
16
|
-
import "../../../../../
|
|
17
|
-
import "../../../../../
|
|
18
|
-
import "../../../../../
|
|
19
|
-
import "../../../../../
|
|
20
|
-
import "../../../../../
|
|
4
|
+
import "../../../../../object-cache-Bo6DGaC9.mjs";
|
|
5
|
+
import "../../../../../url-Dn3IStq8.mjs";
|
|
6
|
+
import "../../../../../types-j6MBDjlZ.mjs";
|
|
7
|
+
import { l as handleMenuTranslations, r as handleMenuGet, t as handleMenuCreate } from "../../../../../menus-trvc6_fW.mjs";
|
|
8
|
+
import { t as menuTag } from "../../../../../chrome-tags-CKELm-bo.mjs";
|
|
9
|
+
import "../../../../../errors-CjXd1LgH.mjs";
|
|
10
|
+
import "../../../../../errors-CNvATh_7.mjs";
|
|
11
|
+
import "../../../../../settings-B0zQj_Tj.mjs";
|
|
12
|
+
import "../../../../../site-settings-AYFvhwQn.mjs";
|
|
13
|
+
import { a as unwrapResult, i as requireDb, r as handleError } from "../../../../../error-CEdm_AWU.mjs";
|
|
14
|
+
import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../parse-Gt2l4Sld.mjs";
|
|
15
|
+
import { b as localeFilterQuery } from "../../../../../redirects-D4EWeXAo.mjs";
|
|
16
|
+
import "../../../../../entry-lock-PP1JCXBB.mjs";
|
|
17
|
+
import "../../../../../media-D1z_jisb.mjs";
|
|
18
|
+
import "../../../../../comments-BRtp992B.mjs";
|
|
19
|
+
import "../../../../../byline-fields-DHJs0Mja.mjs";
|
|
20
|
+
import "../../../../../menus-BQKqf0Up.mjs";
|
|
21
|
+
import "../../../../../status-D39Fpy8R.mjs";
|
|
21
22
|
import "../../../../../api/schemas/index.mjs";
|
|
22
|
-
import { i as requirePerm } from "../../../../../authorize-
|
|
23
|
+
import { i as requirePerm } from "../../../../../authorize-soZXK7U0.mjs";
|
|
23
24
|
import { z } from "zod";
|
|
24
25
|
|
|
25
26
|
//#region src/astro/routes/api/menus/[name]/translations.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/translations.ts"],"sourcesContent":["/**\n * Menu translation endpoints\n *\n * GET /_emdash/api/menus/:name/translations — list translations for a menu (uses any locale row)\n * POST /_emdash/api/menus/:name/translations — create a new locale translation (body: { locale, label })\n */\n\nimport type { APIRoute } from \"astro\";\nimport { z } from \"zod\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, requireDb, unwrapResult } from \"#api/error.js\";\nimport { handleMenuCreate, handleMenuGet, handleMenuTranslations } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nconst createTranslationBody = z\n\t.object({\n\t\tlocale: z.string().min(1),\n\t\tlabel: z.string().min(1).optional(),\n\t})\n\t.meta({ id: \"CreateMenuTranslationBody\" });\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"menus:read\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\t// Look up any menu row matching the name so we can get its translation_group.\n\t\tconst anchor = await handleMenuGet(emdash.db, name, { locale: localeQ.locale });\n\t\tif (!anchor.success) return unwrapResult(anchor);\n\t\tconst result = await handleMenuTranslations(emdash.db, anchor.data.id);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to fetch menu translations\", \"MENU_TRANSLATIONS_ERROR\");\n\t}\n};\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, createTranslationBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Resolve the source menu (either by explicit locale in query, or the\n\t\t// first matching row). Its id becomes the `translationOf` for the new row.\n\t\tconst source = await handleMenuGet(emdash.db, name, { locale: localeQ.locale });\n\t\tif (!source.success) return unwrapResult(source);\n\n\t\tconst result = await handleMenuCreate(emdash.db, {\n\t\t\tname,\n\t\t\tlabel: body.label ?? source.data.label,\n\t\t\tlocale: body.locale,\n\t\t\ttranslationOf: source.data.id,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result, 201);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to create menu translation\", \"MENU_TRANSLATION_CREATE_ERROR\");\n\t}\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"translations.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/menus/[name]/translations.ts"],"sourcesContent":["/**\n * Menu translation endpoints\n *\n * GET /_emdash/api/menus/:name/translations — list translations for a menu (uses any locale row)\n * POST /_emdash/api/menus/:name/translations — create a new locale translation (body: { locale, label })\n */\n\nimport type { APIRoute } from \"astro\";\nimport { z } from \"zod\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { handleError, requireDb, unwrapResult } from \"#api/error.js\";\nimport { handleMenuCreate, handleMenuGet, handleMenuTranslations } from \"#api/handlers/menus.js\";\nimport { isParseError, parseBody, parseQuery } from \"#api/parse.js\";\nimport { localeFilterQuery } from \"#api/schemas.js\";\nimport { menuTag } from \"#cache/chrome-tags.js\";\n\nexport const prerender = false;\n\nconst createTranslationBody = z\n\t.object({\n\t\tlocale: z.string().min(1),\n\t\tlabel: z.string().min(1).optional(),\n\t})\n\t.meta({ id: \"CreateMenuTranslationBody\" });\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"menus:read\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\t// Look up any menu row matching the name so we can get its translation_group.\n\t\tconst anchor = await handleMenuGet(emdash.db, name, { locale: localeQ.locale });\n\t\tif (!anchor.success) return unwrapResult(anchor);\n\t\tconst result = await handleMenuTranslations(emdash.db, anchor.data.id);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to fetch menu translations\", \"MENU_TRANSLATIONS_ERROR\");\n\t}\n};\n\nexport const POST: APIRoute = async ({ params, request, locals, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst name = params.name!;\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\tconst denied = requirePerm(user, \"menus:manage\");\n\tif (denied) return denied;\n\n\tconst localeQ = parseQuery(new URL(request.url), localeFilterQuery);\n\tif (isParseError(localeQ)) return localeQ;\n\n\ttry {\n\t\tconst body = await parseBody(request, createTranslationBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Resolve the source menu (either by explicit locale in query, or the\n\t\t// first matching row). Its id becomes the `translationOf` for the new row.\n\t\tconst source = await handleMenuGet(emdash.db, name, { locale: localeQ.locale });\n\t\tif (!source.success) return unwrapResult(source);\n\n\t\tconst result = await handleMenuCreate(emdash.db, {\n\t\t\tname,\n\t\t\tlabel: body.label ?? source.data.label,\n\t\t\tlocale: body.locale,\n\t\t\ttranslationOf: source.data.id,\n\t\t});\n\t\tif (!result.success) return unwrapResult(result, 201);\n\t\tif (cache?.enabled) await cache.invalidate({ tags: [menuTag(name)] });\n\t\treturn unwrapResult(result, 201);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to create menu translation\", \"MENU_TRANSLATION_CREATE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAa,YAAY;AAEzB,MAAM,wBAAwB,EAC5B,OAAO;CACP,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACnC,CAAC,CACD,KAAK,EAAE,IAAI,6BAA6B,CAAC;AAE3C,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CAEpB,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,aAAa;AAC9C,KAAI,OAAQ,QAAO;CAEnB,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EAEH,MAAM,SAAS,MAAM,cAAc,OAAO,IAAI,MAAM,EAAE,QAAQ,QAAQ,QAAQ,CAAC;AAC/E,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAEhD,SAAO,aADQ,MAAM,uBAAuB,OAAO,IAAI,OAAO,KAAK,GAAG,CAC3C;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,qCAAqC,0BAA0B;;;AAI3F,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,YAAY;CAC3E,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,OAAO;CAEpB,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;CAElB,MAAM,SAAS,YAAY,MAAM,eAAe;AAChD,KAAI,OAAQ,QAAO;CAEnB,MAAM,UAAU,WAAW,IAAI,IAAI,QAAQ,IAAI,EAAE,kBAAkB;AACnE,KAAI,aAAa,QAAQ,CAAE,QAAO;AAElC,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,sBAAsB;AAC5D,MAAI,aAAa,KAAK,CAAE,QAAO;EAI/B,MAAM,SAAS,MAAM,cAAc,OAAO,IAAI,MAAM,EAAE,QAAQ,QAAQ,QAAQ,CAAC;AAC/E,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;EAEhD,MAAM,SAAS,MAAM,iBAAiB,OAAO,IAAI;GAChD;GACA,OAAO,KAAK,SAAS,OAAO,KAAK;GACjC,QAAQ,KAAK;GACb,eAAe,OAAO,KAAK;GAC3B,CAAC;AACF,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;AACrE,SAAO,aAAa,QAAQ,IAAI;UACxB,OAAO;AACf,SAAO,YAAY,OAAO,qCAAqC,gCAAgC"}
|