dineway 0.1.9 → 0.1.12
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/README.md +63 -17
- package/dist/activity-events-B4wp7CrU.mjs +540 -0
- package/dist/allowed-origins-C1AKK9AT.mjs +68 -0
- package/dist/api/route-utils.d.mts +42 -0
- package/dist/api/route-utils.mjs +26 -0
- package/dist/api/schemas/index.d.mts +3 -0
- package/dist/api/schemas/index.mjs +6 -0
- package/dist/api/schemas/setup.d.mts +42 -0
- package/dist/api/schemas/setup.mjs +39 -0
- package/dist/api-BR7Y0GBo.mjs +2704 -0
- package/dist/api-tokens-CPjC3zf8.mjs +3 -0
- package/dist/api-tokens-D7UjLbdt.mjs +153 -0
- package/dist/{apply-iVSqz2qs.mjs → apply-Bm5QgdrE.mjs} +15 -689
- package/dist/astro/index.d.mts +11 -6
- package/dist/astro/index.mjs +86 -11
- package/dist/astro/middleware/auth.d.mts +11 -7
- package/dist/astro/middleware/auth.mjs +19 -104
- package/dist/astro/middleware/redirect.mjs +24 -14
- package/dist/astro/middleware/request-context.mjs +9 -6
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +88 -145
- package/dist/astro/routes/PluginRegistry.d.mts +14 -0
- package/dist/astro/routes/PluginRegistry.mjs +24 -0
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.d.mts +14 -0
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +65 -0
- package/dist/astro/routes/api/admin/allowed-domains/index.d.mts +14 -0
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +65 -0
- package/dist/astro/routes/api/admin/api-tokens/_id_.d.mts +10 -0
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +33 -0
- package/dist/astro/routes/api/admin/api-tokens/index.d.mts +16 -0
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +59 -0
- package/dist/astro/routes/api/admin/briefing.d.mts +7 -0
- package/dist/astro/routes/api/admin/briefing.mjs +71 -0
- package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts +9 -0
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +74 -0
- package/dist/astro/routes/api/admin/bylines/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/bylines/index.mjs +61 -0
- package/dist/astro/routes/api/admin/comments/_id_/status.d.mts +7 -0
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +80 -0
- package/dist/astro/routes/api/admin/comments/_id_.d.mts +14 -0
- package/dist/astro/routes/api/admin/comments/_id_.mjs +46 -0
- package/dist/astro/routes/api/admin/comments/bulk.d.mts +7 -0
- package/dist/astro/routes/api/admin/comments/bulk.mjs +36 -0
- package/dist/astro/routes/api/admin/comments/counts.d.mts +7 -0
- package/dist/astro/routes/api/admin/comments/counts.mjs +24 -0
- package/dist/astro/routes/api/admin/comments/index.d.mts +10 -0
- package/dist/astro/routes/api/admin/comments/index.mjs +40 -0
- package/dist/astro/routes/api/admin/context/_id_/history.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +46 -0
- package/dist/astro/routes/api/admin/context/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +46 -0
- package/dist/astro/routes/api/admin/context/_id_/review.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +61 -0
- package/dist/astro/routes/api/admin/context/_id_/supersede.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +64 -0
- package/dist/astro/routes/api/admin/context/diff.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/diff.mjs +50 -0
- package/dist/astro/routes/api/admin/context/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/context/index.mjs +72 -0
- package/dist/astro/routes/api/admin/context/stale.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/stale.mjs +50 -0
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +52 -0
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.d.mts +7 -0
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +68 -0
- package/dist/astro/routes/api/admin/hitl-requests/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +56 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts +7 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +99 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +33 -0
- package/dist/astro/routes/api/admin/oauth-clients/_id_.d.mts +18 -0
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +79 -0
- package/dist/astro/routes/api/admin/oauth-clients/index.d.mts +14 -0
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +58 -0
- package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +90 -0
- package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +90 -0
- package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +55 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +99 -0
- package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +132 -0
- package/dist/astro/routes/api/admin/plugins/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/index.mjs +53 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +36 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +55 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +129 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +62 -0
- package/dist/astro/routes/api/admin/plugins/updates.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/updates.mjs +53 -0
- package/dist/astro/routes/api/admin/review-requests/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +26 -0
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.d.mts +7 -0
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +98 -0
- package/dist/astro/routes/api/admin/review-requests/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/review-requests/index.mjs +31 -0
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +55 -0
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts +7 -0
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +36 -0
- package/dist/astro/routes/api/admin/themes/marketplace/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -0
- package/dist/astro/routes/api/admin/users/_id_/disable.d.mts +7 -0
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +38 -0
- package/dist/astro/routes/api/admin/users/_id_/enable.d.mts +7 -0
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +29 -0
- package/dist/astro/routes/api/admin/users/_id_/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +104 -0
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts +7 -0
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +43 -0
- package/dist/astro/routes/api/admin/users/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/users/index.mjs +54 -0
- package/dist/astro/routes/api/auth/dev-bypass.d.mts +8 -0
- package/dist/astro/routes/api/auth/dev-bypass.mjs +81 -0
- package/dist/astro/routes/api/auth/invite/accept.d.mts +7 -0
- package/dist/astro/routes/api/auth/invite/accept.mjs +31 -0
- package/dist/astro/routes/api/auth/invite/complete.d.mts +7 -0
- package/dist/astro/routes/api/auth/invite/complete.mjs +54 -0
- package/dist/astro/routes/api/auth/invite/index.d.mts +7 -0
- package/dist/astro/routes/api/auth/invite/index.mjs +51 -0
- package/dist/astro/routes/api/auth/invite/register-options.d.mts +7 -0
- package/dist/astro/routes/api/auth/invite/register-options.mjs +44 -0
- package/dist/astro/routes/api/auth/logout.d.mts +7 -0
- package/dist/astro/routes/api/auth/logout.mjs +24 -0
- package/dist/astro/routes/api/auth/magic-link/send.d.mts +7 -0
- package/dist/astro/routes/api/auth/magic-link/send.mjs +48 -0
- package/dist/astro/routes/api/auth/magic-link/verify.d.mts +7 -0
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +32 -0
- package/dist/astro/routes/api/auth/me.d.mts +13 -0
- package/dist/astro/routes/api/auth/me.mjs +41 -0
- package/dist/astro/routes/api/auth/mode.d.mts +7 -0
- package/dist/astro/routes/api/auth/mode.mjs +28 -0
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts +7 -0
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +114 -0
- package/dist/astro/routes/api/auth/oauth/_provider_.d.mts +7 -0
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +58 -0
- package/dist/astro/routes/api/auth/passkey/_id_.d.mts +14 -0
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +62 -0
- package/dist/astro/routes/api/auth/passkey/index.d.mts +7 -0
- package/dist/astro/routes/api/auth/passkey/index.mjs +25 -0
- package/dist/astro/routes/api/auth/passkey/options.d.mts +7 -0
- package/dist/astro/routes/api/auth/passkey/options.mjs +46 -0
- package/dist/astro/routes/api/auth/passkey/register/options.d.mts +7 -0
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +44 -0
- package/dist/astro/routes/api/auth/passkey/register/verify.d.mts +7 -0
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +59 -0
- package/dist/astro/routes/api/auth/passkey/verify.d.mts +7 -0
- package/dist/astro/routes/api/auth/passkey/verify.mjs +47 -0
- package/dist/astro/routes/api/auth/signup/complete.d.mts +7 -0
- package/dist/astro/routes/api/auth/signup/complete.mjs +55 -0
- package/dist/astro/routes/api/auth/signup/request.d.mts +7 -0
- package/dist/astro/routes/api/auth/signup/request.mjs +44 -0
- package/dist/astro/routes/api/auth/signup/verify.d.mts +7 -0
- package/dist/astro/routes/api/auth/signup/verify.mjs +32 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +14 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +193 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +17 -0
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +36 -0
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +39 -0
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +31 -0
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +78 -0
- package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +93 -0
- package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +36 -0
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +19 -0
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts +8 -0
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +75 -0
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts +14 -0
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +85 -0
- package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +40 -0
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +36 -0
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts +9 -0
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +114 -0
- package/dist/astro/routes/api/content/_collection_/index.d.mts +8 -0
- package/dist/astro/routes/api/content/_collection_/index.mjs +74 -0
- package/dist/astro/routes/api/content/_collection_/trash.d.mts +7 -0
- package/dist/astro/routes/api/content/_collection_/trash.mjs +23 -0
- package/dist/astro/routes/api/dashboard.d.mts +7 -0
- package/dist/astro/routes/api/dashboard.mjs +26 -0
- package/dist/astro/routes/api/dev/emails.d.mts +8 -0
- package/dist/astro/routes/api/dev/emails.mjs +17 -0
- package/dist/astro/routes/api/health.d.mts +7 -0
- package/dist/astro/routes/api/health.mjs +34 -0
- package/dist/astro/routes/api/import/probe.d.mts +17 -0
- package/dist/astro/routes/api/import/probe.mjs +33 -0
- package/dist/astro/routes/api/import/wordpress/analyze.d.mts +87 -0
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +305 -0
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +37 -0
- package/dist/astro/routes/api/import/wordpress/execute.mjs +198 -0
- package/dist/astro/routes/api/import/wordpress/media.d.mts +35 -0
- package/dist/astro/routes/api/import/wordpress/media.mjs +222 -0
- package/dist/astro/routes/api/import/wordpress/prepare.d.mts +19 -0
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +156 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +21 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +290 -0
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +15 -0
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +69 -0
- package/dist/astro/routes/api/import/wordpress-plugin/callback.d.mts +7 -0
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +28 -0
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +19 -0
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +269 -0
- package/dist/astro/routes/api/manifest.d.mts +7 -0
- package/dist/astro/routes/api/manifest.mjs +50 -0
- package/dist/astro/routes/api/mcp.d.mts +15 -0
- package/dist/astro/routes/api/mcp.mjs +2701 -0
- package/dist/astro/routes/api/media/_id_/confirm.d.mts +10 -0
- package/dist/astro/routes/api/media/_id_/confirm.mjs +59 -0
- package/dist/astro/routes/api/media/_id_.d.mts +22 -0
- package/dist/astro/routes/api/media/_id_.mjs +81 -0
- package/dist/astro/routes/api/media/file/_...key_.d.mts +7 -0
- package/dist/astro/routes/api/media/file/_...key_.mjs +49 -0
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.d.mts +14 -0
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +49 -0
- package/dist/astro/routes/api/media/providers/_providerId_/index.d.mts +14 -0
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +72 -0
- package/dist/astro/routes/api/media/providers/index.d.mts +10 -0
- package/dist/astro/routes/api/media/providers/index.mjs +18 -0
- package/dist/astro/routes/api/media/upload-url.d.mts +10 -0
- package/dist/astro/routes/api/media/upload-url.mjs +82 -0
- package/dist/astro/routes/api/media.d.mts +16 -0
- package/dist/astro/routes/api/media.mjs +137 -0
- package/dist/astro/routes/api/menus/_name_/items.d.mts +9 -0
- package/dist/astro/routes/api/menus/_name_/items.mjs +165 -0
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts +7 -0
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +78 -0
- package/dist/astro/routes/api/menus/_name_.d.mts +9 -0
- package/dist/astro/routes/api/menus/_name_.mjs +124 -0
- package/dist/astro/routes/api/menus/index.d.mts +8 -0
- package/dist/astro/routes/api/menus/index.mjs +85 -0
- package/dist/astro/routes/api/oauth/authorize.d.mts +8 -0
- package/dist/astro/routes/api/oauth/authorize.mjs +265 -0
- package/dist/astro/routes/api/oauth/device/authorize.d.mts +7 -0
- package/dist/astro/routes/api/oauth/device/authorize.mjs +30 -0
- package/dist/astro/routes/api/oauth/device/code.d.mts +7 -0
- package/dist/astro/routes/api/oauth/device/code.mjs +34 -0
- package/dist/astro/routes/api/oauth/device/token.d.mts +7 -0
- package/dist/astro/routes/api/oauth/device/token.mjs +45 -0
- package/dist/astro/routes/api/oauth/register.d.mts +8 -0
- package/dist/astro/routes/api/oauth/register.mjs +115 -0
- package/dist/astro/routes/api/oauth/token/refresh.d.mts +7 -0
- package/dist/astro/routes/api/oauth/token/refresh.mjs +28 -0
- package/dist/astro/routes/api/oauth/token/revoke.d.mts +7 -0
- package/dist/astro/routes/api/oauth/token/revoke.mjs +25 -0
- package/dist/astro/routes/api/oauth/token.d.mts +8 -0
- package/dist/astro/routes/api/oauth/token.mjs +138 -0
- package/dist/astro/routes/api/openapi.json.d.mts +7 -0
- package/dist/astro/routes/api/openapi.json.mjs +2638 -0
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +11 -0
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +77 -0
- package/dist/astro/routes/api/redirects/404s/index.d.mts +9 -0
- package/dist/astro/routes/api/redirects/404s/index.mjs +62 -0
- package/dist/astro/routes/api/redirects/404s/summary.d.mts +7 -0
- package/dist/astro/routes/api/redirects/404s/summary.mjs +34 -0
- package/dist/astro/routes/api/redirects/_id_.d.mts +9 -0
- package/dist/astro/routes/api/redirects/_id_.mjs +153 -0
- package/dist/astro/routes/api/redirects/index.d.mts +8 -0
- package/dist/astro/routes/api/redirects/index.mjs +98 -0
- package/dist/astro/routes/api/revisions/_revisionId_/index.d.mts +7 -0
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +16 -0
- package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts +7 -0
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +23 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts +9 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +99 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts +8 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +81 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.d.mts +7 -0
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +68 -0
- package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts +9 -0
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +98 -0
- package/dist/astro/routes/api/schema/collections/index.d.mts +8 -0
- package/dist/astro/routes/api/schema/collections/index.mjs +78 -0
- package/dist/astro/routes/api/schema/index.d.mts +7 -0
- package/dist/astro/routes/api/schema/index.mjs +79 -0
- package/dist/astro/routes/api/schema/orphans/_slug_.d.mts +7 -0
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +59 -0
- package/dist/astro/routes/api/schema/orphans/index.d.mts +7 -0
- package/dist/astro/routes/api/schema/orphans/index.mjs +54 -0
- package/dist/astro/routes/api/search/enable.d.mts +15 -0
- package/dist/astro/routes/api/search/enable.mjs +55 -0
- package/dist/astro/routes/api/search/index.d.mts +16 -0
- package/dist/astro/routes/api/search/index.mjs +52 -0
- package/dist/astro/routes/api/search/rebuild.d.mts +13 -0
- package/dist/astro/routes/api/search/rebuild.mjs +48 -0
- package/dist/astro/routes/api/search/stats.d.mts +10 -0
- package/dist/astro/routes/api/search/stats.mjs +28 -0
- package/dist/astro/routes/api/search/suggest.d.mts +15 -0
- package/dist/astro/routes/api/search/suggest.mjs +43 -0
- package/dist/astro/routes/api/sections/_slug_.d.mts +9 -0
- package/dist/astro/routes/api/sections/_slug_.mjs +157 -0
- package/dist/astro/routes/api/sections/index.d.mts +8 -0
- package/dist/astro/routes/api/sections/index.mjs +100 -0
- package/dist/astro/routes/api/settings/email.d.mts +17 -0
- package/dist/astro/routes/api/settings/email.mjs +102 -0
- package/dist/astro/routes/api/settings.d.mts +20 -0
- package/dist/astro/routes/api/settings.mjs +102 -0
- package/dist/astro/routes/api/setup/admin-verify.d.mts +7 -0
- package/dist/astro/routes/api/setup/admin-verify.mjs +67 -0
- package/dist/astro/routes/api/setup/admin.d.mts +7 -0
- package/dist/astro/routes/api/setup/admin.mjs +68 -0
- package/dist/astro/routes/api/setup/dev-bypass.d.mts +8 -0
- package/dist/astro/routes/api/setup/dev-bypass.mjs +137 -0
- package/dist/astro/routes/api/setup/dev-reset.d.mts +7 -0
- package/dist/astro/routes/api/setup/dev-reset.mjs +22 -0
- package/dist/astro/routes/api/setup/index.d.mts +7 -0
- package/dist/astro/routes/api/setup/index.mjs +93 -0
- package/dist/astro/routes/api/setup/status.d.mts +7 -0
- package/dist/astro/routes/api/setup/status.mjs +57 -0
- package/dist/astro/routes/api/snapshot.d.mts +7 -0
- package/dist/astro/routes/api/snapshot.mjs +227 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts +18 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +190 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts +14 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +114 -0
- package/dist/astro/routes/api/taxonomies/index.d.mts +14 -0
- package/dist/astro/routes/api/taxonomies/index.mjs +104 -0
- package/dist/astro/routes/api/themes/preview.d.mts +7 -0
- package/dist/astro/routes/api/themes/preview.mjs +47 -0
- package/dist/astro/routes/api/typegen.d.mts +17 -0
- package/dist/astro/routes/api/typegen.mjs +75 -0
- package/dist/astro/routes/api/well-known/auth.d.mts +7 -0
- package/dist/astro/routes/api/well-known/auth.mjs +42 -0
- package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts +7 -0
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +33 -0
- package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts +7 -0
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +21 -0
- package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts +7 -0
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +89 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts +8 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +159 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts +7 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +105 -0
- package/dist/astro/routes/api/widget-areas/_name_.d.mts +8 -0
- package/dist/astro/routes/api/widget-areas/_name_.mjs +100 -0
- package/dist/astro/routes/api/widget-areas/index.d.mts +8 -0
- package/dist/astro/routes/api/widget-areas/index.mjs +109 -0
- package/dist/astro/routes/api/widget-components.d.mts +7 -0
- package/dist/astro/routes/api/widget-components.mjs +15 -0
- package/dist/astro/routes/robots.txt.d.mts +7 -0
- package/dist/astro/routes/robots.txt.mjs +60 -0
- package/dist/astro/routes/sitemap-_collection_.xml.d.mts +7 -0
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +70 -0
- package/dist/astro/routes/sitemap.xml.d.mts +7 -0
- package/dist/astro/routes/sitemap.xml.mjs +63 -0
- package/dist/astro/types.d.mts +42 -9
- package/dist/auth/providers/github-admin.d.mts +9 -0
- package/dist/auth/providers/github-admin.mjs +27 -0
- package/dist/auth/providers/github.d.mts +12 -0
- package/dist/auth/providers/github.mjs +17 -0
- package/dist/auth/providers/google-admin.d.mts +9 -0
- package/dist/auth/providers/google-admin.mjs +43 -0
- package/dist/auth/providers/google.d.mts +12 -0
- package/dist/auth/providers/google.mjs +17 -0
- package/dist/auth-control-guard-DOZ3UCsP.mjs +13 -0
- package/dist/authorize-BAdbMCwC.mjs +36 -0
- package/dist/briefing-MVYe_Uyf.mjs +1294 -0
- package/dist/briefing-rty4O-wa.mjs +29 -0
- package/dist/{byline-OhH2dlRu.mjs → byline-naZxOPSa.mjs} +3 -3
- package/dist/{bylines-BGpD9_hy.mjs → bylines-C4LIBOOO.mjs} +20 -53
- package/dist/bylines-eVVCuOe4.d.mts +2023 -0
- package/dist/{cache-BdSY-gQN.mjs → cache-DEbQ13c9.mjs} +21 -11
- package/dist/challenge-store-DDTbisbf.mjs +48 -0
- package/dist/cli/index.mjs +142 -22
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +3 -3
- package/dist/comment-DFO-gWDH.mjs +246 -0
- package/dist/comments--BsZ9pqA.mjs +186 -0
- package/dist/components-BPknylYg.mjs +107 -0
- package/dist/{content-DWi4d0rT.mjs → content-CyLkb-qH.mjs} +33 -44
- package/dist/context-CNIkMzot.mjs +849 -0
- package/dist/context-DNfcm853.mjs +184 -0
- package/dist/context-route-helpers-MurhoxWF.mjs +45 -0
- package/dist/context-types-C-LwdAxx.mjs +23 -0
- package/dist/cron-CKxvBrRT.mjs +263 -0
- package/dist/dashboard-DqnYU8EU.mjs +120 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/libsql.mjs +3 -3
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -2
- package/dist/device-flow-BGEH5jfn.mjs +487 -0
- package/dist/email-console-CuefUXfX.mjs +36 -0
- package/dist/entity-aliases-C0v-yNET.mjs +51 -0
- package/dist/error-BMUPwxgx.mjs +435 -0
- package/dist/escape-BRVaw1Ai.mjs +8 -0
- package/dist/experimental-workflows-C9X7yblQ.mjs +38 -0
- package/dist/fts-manager-B1pTNEG_.mjs +297 -0
- package/dist/hash-CDX7M0ze.mjs +32 -0
- package/dist/hitl-requests-ChT32Ilo.mjs +118 -0
- package/dist/hitl-route-helpers-CSit54Ru.mjs +96 -0
- package/dist/import-BHRLhXAn.mjs +1323 -0
- package/dist/import-CNcKWTbp.mjs +243 -0
- package/dist/index-CYfhYgXd.d.mts +227 -0
- package/dist/index-EUAWaIxW.d.mts +835 -0
- package/dist/index.d.mts +17 -11
- package/dist/index.mjs +63 -22
- package/dist/jsonld-D2gUY4kA.d.mts +141 -0
- package/dist/{loader-sMG4TZ-u.mjs → loader-PZnPxFLc.mjs} +42 -5
- package/dist/{manifest-schema-D1MSVnoI.mjs → manifest-schema-CgFJAp0H.mjs} +22 -10
- package/dist/media/index.d.mts +2 -1
- package/dist/media/index.mjs +2 -1
- package/dist/media/local-runtime.d.mts +12 -7
- package/dist/media/local-runtime.mjs +3 -3
- package/dist/{media-DMTr80Gv.mjs → media-_7Fxdu45.mjs} +1 -1
- package/dist/menus-DS3_5nWY.mjs +312 -0
- package/dist/menus-DYW_UHjv.mjs +256 -0
- package/dist/normalize-C49G_o1k.mjs +126 -0
- package/dist/oauth-authorization-DxGjiWKL.mjs +283 -0
- package/dist/oauth-clients-DxO_NO7k.mjs +298 -0
- package/dist/oauth-state-store-C5UFhzwD.mjs +48 -0
- package/dist/oauth-user-lookup-Bi0ek9eM.mjs +25 -0
- package/dist/options-z8VVg1Ll.mjs +114 -0
- package/dist/page/index.d.mts +2 -139
- package/dist/page/index.mjs +1 -427
- package/dist/parse-C9106ehs.mjs +88 -0
- package/dist/passkey-config-BRSZx4pW.mjs +42 -0
- package/dist/{patterns-CrCYkMBb.mjs → patterns-K0DLqWir.mjs} +53 -1
- package/dist/placeholder-Bh1dfUOd.d.mts +40 -0
- package/dist/{placeholder-Cp8g5Emj.mjs → placeholder-C2P5fKa4.mjs} +1 -126
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -5
- package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
- package/dist/plugins-D7-ILNib.mjs +3249 -0
- package/dist/preview-DvYRU-Oy.mjs +788 -0
- package/dist/provider-loader-BiQ6lNmf.d.mts +20 -0
- package/dist/provider-loader-C21b9OpH.mjs +36 -0
- package/dist/public-url-Cun8N3NU.mjs +71 -0
- package/dist/{query-kDmwCsHh.mjs → query-B9BO5goQ.mjs} +93 -19
- package/dist/query-CsbOywSY.mjs +35 -0
- package/dist/rate-limit-DmVTHI5v.mjs +112 -0
- package/dist/{redirect-DnEWAkVg.mjs → redirect-CGl64yOX.mjs} +9 -5
- package/dist/redirect-COZy-3iY.mjs +16 -0
- package/dist/redirects-Cgi_cZfN.mjs +499 -0
- package/dist/redirects-lrlmYXVE.mjs +1023 -0
- package/dist/{registry-C0zjeB9P.mjs → registry-C-_hxLqa.mjs} +26 -294
- package/dist/request-meta-DixlNKKa.mjs +130 -0
- package/dist/review-requests-C2DIHwlJ.mjs +148 -0
- package/dist/review-requests-DIyjw-K_.mjs +79 -0
- package/dist/{runner-CFI6B6J2.d.mts → runner-BU6Lo1ZS.d.mts} +1 -1
- package/dist/{index-yvc6E_17.d.mts → runtime-Db4LbNVZ.d.mts} +1188 -2484
- package/dist/runtime.d.mts +11 -24
- package/dist/runtime.mjs +4 -38
- package/dist/schema-BECjUhP8.mjs +8 -0
- package/dist/search-DqTHQqtV.mjs +337 -0
- package/dist/secrets-CkoJ9zN0.mjs +160 -0
- package/dist/sections-B61OxnfB.mjs +338 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +18 -13
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo-C007Luwn.mjs +85 -0
- package/dist/seo-CUQctrog.mjs +129 -0
- package/dist/seo-contributions-B1fWCnqY.mjs +429 -0
- package/dist/service-CyOsm0R6.mjs +194 -0
- package/dist/settings-DGtLLSaz.mjs +237 -0
- package/dist/settings-Dzgswvg4.mjs +50 -0
- package/dist/setup-complete-ChilE-da.mjs +21 -0
- package/dist/setup-nonce-BpmLXAuu.mjs +17 -0
- package/dist/sidecar-client-B1C6Cf80.mjs +66 -0
- package/dist/site-activity-B8FjLIVh.mjs +104 -0
- package/dist/site-context-WBxoD99D.mjs +4122 -0
- package/dist/site-url-BP7k7OCe.mjs +12 -0
- package/dist/slugify-PDTDtMXp.mjs +30 -0
- package/dist/ssrf-DDwRxF6B.mjs +248 -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 +2 -2
- package/dist/{taxonomies-1s5PaS_8.mjs → taxonomies-D2aZGuns.mjs} +11 -7
- package/dist/taxonomies-z6Lz91BC.mjs +355 -0
- package/dist/taxonomy-D5cbhc8u.mjs +165 -0
- package/dist/{tokens-CJz9ubV6.mjs → tokens-BOJw-D9F.mjs} +1 -1
- package/dist/{transport-DB5eDN4x.mjs → transport-D3i4yWRE.mjs} +5 -4
- package/dist/trusted-proxy-BbaZfkT9.mjs +30 -0
- package/dist/types-0Vr68fc2.d.mts +344 -0
- package/dist/types-BFmjniC2.d.mts +165 -0
- package/dist/{types-BawVha09.mjs → types-Bs6lTBBW.mjs} +1 -1
- package/dist/{types-BuMDPy5C.d.mts → types-C0mmVRJN.d.mts} +6 -0
- package/dist/{placeholder--wOi4TbO.d.mts → types-OPs5Q_sX.d.mts} +1 -38
- package/dist/{types-Cj0KMIZV.d.mts → types-Q616b2Hn.d.mts} +54 -16
- package/dist/ui/client-runtime.d.mts +12 -0
- package/dist/ui/client-runtime.mjs +32 -0
- package/dist/ui/server-runtime.d.mts +33 -0
- package/dist/ui/server-runtime.mjs +80 -0
- package/dist/url-DNjT2abR.mjs +49 -0
- package/dist/user-CcXq-zoL.mjs +154 -0
- package/dist/utils-C0ONdBul.mjs +285 -0
- package/dist/{validate-IPf8n4Fj.d.mts → validate-BwmQEbu8.d.mts} +3 -3
- package/dist/{validate-BZ5wnLLp.mjs → validate-C7TzfamJ.mjs} +1 -1
- package/dist/version-D3vDb22n.mjs +6 -0
- package/dist/widgets-B7DRpZvy.mjs +104 -0
- package/dist/wordpress-slugs-CnporCYH.mjs +14 -0
- package/dist/zod-generator-DBVP8D0P.mjs +132 -0
- package/locals.d.ts +1 -6
- package/package.json +81 -11
- package/src/components/Button.astro +1 -1
- package/src/components/CommentForm.astro +1 -1
- package/src/components/Comments.astro +1 -3
- package/src/components/DinewayBodyEnd.astro +5 -3
- package/src/components/DinewayBodyStart.astro +5 -3
- package/src/components/DinewayHead.astro +15 -9
- package/src/components/DinewayImage.astro +12 -8
- package/src/components/DinewayMedia.astro +15 -6
- package/src/components/Embed.astro +1 -2
- package/src/components/File.astro +1 -1
- package/src/components/Gallery.astro +5 -3
- package/src/components/HtmlBlock.astro +1 -1
- package/src/components/Image.astro +9 -3
- package/src/components/InlinePortableTextEditor.tsx +69 -20
- package/src/components/PortableText.astro +1 -1
- package/src/components/WidgetArea.astro +1 -1
- package/src/components/WidgetRenderer.astro +1 -3
- package/src/components/marks/Link.astro +1 -1
- package/src/components/widgets/Archives.astro +1 -1
- package/src/components/widgets/Categories.astro +1 -1
- package/src/components/widgets/RecentPosts.astro +1 -1
- package/src/components/widgets/Tags.astro +1 -1
- package/dist/error-BmL6QipT.mjs +0 -30
- package/dist/search-DxopAWxs.mjs +0 -11200
- package/dist/version-BPz1imu2.mjs +0 -6
- package/src/astro/routes/PluginRegistry.tsx +0 -21
- package/src/astro/routes/api/admin/allowed-domains/[domain].ts +0 -112
- package/src/astro/routes/api/admin/allowed-domains/index.ts +0 -108
- package/src/astro/routes/api/admin/api-tokens/[id].ts +0 -44
- package/src/astro/routes/api/admin/api-tokens/index.ts +0 -90
- package/src/astro/routes/api/admin/briefing.ts +0 -76
- package/src/astro/routes/api/admin/bylines/[id]/index.ts +0 -90
- package/src/astro/routes/api/admin/bylines/index.ts +0 -74
- package/src/astro/routes/api/admin/comments/[id]/status.ts +0 -120
- package/src/astro/routes/api/admin/comments/[id].ts +0 -64
- package/src/astro/routes/api/admin/comments/bulk.ts +0 -42
- package/src/astro/routes/api/admin/comments/counts.ts +0 -30
- package/src/astro/routes/api/admin/comments/index.ts +0 -46
- package/src/astro/routes/api/admin/context/[id]/history.ts +0 -35
- package/src/astro/routes/api/admin/context/[id]/index.ts +0 -35
- package/src/astro/routes/api/admin/context/[id]/review.ts +0 -57
- package/src/astro/routes/api/admin/context/[id]/supersede.ts +0 -58
- package/src/astro/routes/api/admin/context/diff.ts +0 -35
- package/src/astro/routes/api/admin/context/index.ts +0 -69
- package/src/astro/routes/api/admin/context/stale.ts +0 -35
- package/src/astro/routes/api/admin/hitl-requests/[id]/index.ts +0 -38
- package/src/astro/routes/api/admin/hitl-requests/[id]/resolve.ts +0 -54
- package/src/astro/routes/api/admin/hitl-requests/index.ts +0 -38
- package/src/astro/routes/api/admin/hooks/exclusive/[hookName].ts +0 -132
- package/src/astro/routes/api/admin/hooks/exclusive/index.ts +0 -51
- package/src/astro/routes/api/admin/oauth-clients/[id].ts +0 -137
- package/src/astro/routes/api/admin/oauth-clients/index.ts +0 -95
- package/src/astro/routes/api/admin/plugins/[id]/disable.ts +0 -91
- package/src/astro/routes/api/admin/plugins/[id]/enable.ts +0 -91
- package/src/astro/routes/api/admin/plugins/[id]/index.ts +0 -38
- package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +0 -98
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +0 -154
- package/src/astro/routes/api/admin/plugins/index.ts +0 -32
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +0 -62
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/index.ts +0 -33
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +0 -135
- package/src/astro/routes/api/admin/plugins/marketplace/index.ts +0 -38
- package/src/astro/routes/api/admin/plugins/updates.ts +0 -28
- package/src/astro/routes/api/admin/review-requests/[id]/index.ts +0 -35
- package/src/astro/routes/api/admin/review-requests/[id]/resolve.ts +0 -52
- package/src/astro/routes/api/admin/review-requests/index.ts +0 -35
- package/src/astro/routes/api/admin/themes/marketplace/[id]/index.ts +0 -33
- package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +0 -62
- package/src/astro/routes/api/admin/themes/marketplace/index.ts +0 -45
- package/src/astro/routes/api/admin/users/[id]/disable.ts +0 -72
- package/src/astro/routes/api/admin/users/[id]/enable.ts +0 -48
- package/src/astro/routes/api/admin/users/[id]/index.ts +0 -166
- package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +0 -72
- package/src/astro/routes/api/admin/users/index.ts +0 -66
- package/src/astro/routes/api/auth/dev-bypass.ts +0 -139
- package/src/astro/routes/api/auth/invite/accept.ts +0 -52
- package/src/astro/routes/api/auth/invite/complete.ts +0 -86
- package/src/astro/routes/api/auth/invite/index.ts +0 -99
- package/src/astro/routes/api/auth/invite/register-options.ts +0 -73
- package/src/astro/routes/api/auth/logout.ts +0 -40
- package/src/astro/routes/api/auth/magic-link/send.ts +0 -90
- package/src/astro/routes/api/auth/magic-link/verify.ts +0 -71
- package/src/astro/routes/api/auth/me.ts +0 -60
- package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +0 -221
- package/src/astro/routes/api/auth/oauth/[provider].ts +0 -120
- package/src/astro/routes/api/auth/passkey/[id].ts +0 -124
- package/src/astro/routes/api/auth/passkey/index.ts +0 -54
- package/src/astro/routes/api/auth/passkey/options.ts +0 -85
- package/src/astro/routes/api/auth/passkey/register/options.ts +0 -88
- package/src/astro/routes/api/auth/passkey/register/verify.ts +0 -119
- package/src/astro/routes/api/auth/passkey/verify.ts +0 -72
- package/src/astro/routes/api/auth/signup/complete.ts +0 -87
- package/src/astro/routes/api/auth/signup/request.ts +0 -89
- package/src/astro/routes/api/auth/signup/verify.ts +0 -53
- package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +0 -310
- package/src/astro/routes/api/content/[collection]/[id]/compare.ts +0 -28
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +0 -68
- package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +0 -77
- package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +0 -42
- package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +0 -107
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +0 -100
- package/src/astro/routes/api/content/[collection]/[id]/restore.ts +0 -64
- package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +0 -31
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +0 -129
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +0 -143
- package/src/astro/routes/api/content/[collection]/[id]/translations.ts +0 -50
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +0 -69
- package/src/astro/routes/api/content/[collection]/[id].ts +0 -173
- package/src/astro/routes/api/content/[collection]/index.ts +0 -103
- package/src/astro/routes/api/content/[collection]/trash.ts +0 -33
- package/src/astro/routes/api/dashboard.ts +0 -32
- package/src/astro/routes/api/dev/emails.ts +0 -36
- package/src/astro/routes/api/health.ts +0 -54
- package/src/astro/routes/api/import/probe.ts +0 -47
- package/src/astro/routes/api/import/wordpress/analyze.ts +0 -523
- package/src/astro/routes/api/import/wordpress/execute.ts +0 -330
- package/src/astro/routes/api/import/wordpress/media.ts +0 -338
- package/src/astro/routes/api/import/wordpress/prepare.ts +0 -212
- package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +0 -425
- package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +0 -111
- package/src/astro/routes/api/import/wordpress-plugin/callback.ts +0 -58
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +0 -399
- package/src/astro/routes/api/manifest.ts +0 -75
- package/src/astro/routes/api/mcp.ts +0 -125
- package/src/astro/routes/api/media/[id]/confirm.ts +0 -93
- package/src/astro/routes/api/media/[id].ts +0 -145
- package/src/astro/routes/api/media/file/[...key].ts +0 -79
- package/src/astro/routes/api/media/providers/[providerId]/[itemId].ts +0 -91
- package/src/astro/routes/api/media/providers/[providerId]/index.ts +0 -111
- package/src/astro/routes/api/media/providers/index.ts +0 -30
- package/src/astro/routes/api/media/upload-url.ts +0 -146
- package/src/astro/routes/api/media.ts +0 -204
- package/src/astro/routes/api/menus/[name]/items.ts +0 -206
- package/src/astro/routes/api/menus/[name]/reorder.ts +0 -79
- package/src/astro/routes/api/menus/[name].ts +0 -145
- package/src/astro/routes/api/menus/index.ts +0 -91
- package/src/astro/routes/api/oauth/authorize.ts +0 -430
- package/src/astro/routes/api/oauth/device/authorize.ts +0 -45
- package/src/astro/routes/api/oauth/device/code.ts +0 -56
- package/src/astro/routes/api/oauth/device/token.ts +0 -70
- package/src/astro/routes/api/oauth/register.ts +0 -182
- package/src/astro/routes/api/oauth/token/refresh.ts +0 -38
- package/src/astro/routes/api/oauth/token/revoke.ts +0 -38
- package/src/astro/routes/api/oauth/token.ts +0 -195
- package/src/astro/routes/api/openapi.json.ts +0 -33
- package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +0 -109
- package/src/astro/routes/api/redirects/404s/index.ts +0 -72
- package/src/astro/routes/api/redirects/404s/summary.ts +0 -33
- package/src/astro/routes/api/redirects/[id].ts +0 -183
- package/src/astro/routes/api/redirects/index.ts +0 -100
- package/src/astro/routes/api/revisions/[revisionId]/index.ts +0 -29
- package/src/astro/routes/api/revisions/[revisionId]/restore.ts +0 -62
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +0 -104
- package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +0 -67
- package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +0 -45
- package/src/astro/routes/api/schema/collections/[slug]/index.ts +0 -107
- package/src/astro/routes/api/schema/collections/index.ts +0 -61
- package/src/astro/routes/api/schema/index.ts +0 -109
- package/src/astro/routes/api/schema/orphans/[slug].ts +0 -36
- package/src/astro/routes/api/schema/orphans/index.ts +0 -26
- package/src/astro/routes/api/search/enable.ts +0 -64
- package/src/astro/routes/api/search/index.ts +0 -52
- package/src/astro/routes/api/search/rebuild.ts +0 -72
- package/src/astro/routes/api/search/stats.ts +0 -35
- package/src/astro/routes/api/search/suggest.ts +0 -50
- package/src/astro/routes/api/sections/[slug].ts +0 -203
- package/src/astro/routes/api/sections/index.ts +0 -107
- package/src/astro/routes/api/settings/email.ts +0 -150
- package/src/astro/routes/api/settings.ts +0 -116
- package/src/astro/routes/api/setup/admin-verify.ts +0 -122
- package/src/astro/routes/api/setup/admin.ts +0 -104
- package/src/astro/routes/api/setup/dev-bypass.ts +0 -200
- package/src/astro/routes/api/setup/dev-reset.ts +0 -40
- package/src/astro/routes/api/setup/index.ts +0 -128
- package/src/astro/routes/api/setup/status.ts +0 -122
- package/src/astro/routes/api/snapshot.ts +0 -76
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +0 -232
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +0 -131
- package/src/astro/routes/api/taxonomies/index.ts +0 -114
- package/src/astro/routes/api/themes/preview.ts +0 -78
- package/src/astro/routes/api/typegen.ts +0 -114
- package/src/astro/routes/api/well-known/auth.ts +0 -71
- package/src/astro/routes/api/well-known/oauth-authorization-server.ts +0 -48
- package/src/astro/routes/api/well-known/oauth-protected-resource.ts +0 -39
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +0 -114
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +0 -213
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +0 -126
- package/src/astro/routes/api/widget-areas/[name].ts +0 -135
- package/src/astro/routes/api/widget-areas/index.ts +0 -149
- package/src/astro/routes/api/widget-components.ts +0 -22
- package/src/astro/routes/robots.txt.ts +0 -81
- package/src/astro/routes/sitemap-[collection].xml.ts +0 -104
- package/src/astro/routes/sitemap.xml.ts +0 -92
- /package/dist/{adapters-C2ypTrZZ.d.mts → adapters-DuLQZhRY.d.mts} +0 -0
- /package/{src → dist}/astro/routes/admin.astro +0 -0
- /package/dist/{base64-F8-DUraK.mjs → base64-Cz-aU0X1.mjs} +0 -0
- /package/dist/{chunks--4F8ddV4.mjs → chunks-D_jVet6z.mjs} +0 -0
- /package/dist/{config-BXwuX8Bx.mjs → config-CAMFxGaV.mjs} +0 -0
- /package/dist/{db-errors-CEqD7qH9.mjs → db-errors-DyZkswzF.mjs} +0 -0
- /package/dist/{default-VjJyuuG9.mjs → default-D4ngTpW8.mjs} +0 -0
- /package/dist/{load-Coc9HpHH.mjs → load-B2XtDw__.mjs} +0 -0
- /package/dist/{mode-47goXBBK.mjs → mode-DUhxwUhv.mjs} +0 -0
- /package/dist/{request-cache-Dk5qPSOx.mjs → request-cache-DHMRr2Lf.mjs} +0 -0
- /package/dist/{transaction-Cn2rjY78.mjs → transaction-x2tJQ-A1.mjs} +0 -0
- /package/dist/{transport-Wge_IzKl.d.mts → transport-BXe1AM79.d.mts} +0 -0
- /package/dist/{types-CWbdtiux.d.mts → types-B7kpsMJ3.d.mts} +0 -0
- /package/dist/{types-BzcUjoqg.d.mts → types-DJlpx5Ay.d.mts} +0 -0
- /package/dist/{types-COeOq9nK.mjs → types-DL7Y8D_t.mjs} +0 -0
- /package/dist/{types-DOrVigru.d.mts → types-DZPw8Rru.d.mts} +0 -0
- /package/dist/{types-griIBQOQ.mjs → types-fAInWQDO.mjs} +0 -0
|
@@ -1,301 +1,13 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
2
|
import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
3
|
+
import { c as tableExists, n as currentTimestamp, s as listTablesLike } from "./dialect-helpers-DhTzaUxP.mjs";
|
|
4
|
+
import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-D_jVet6z.mjs";
|
|
5
|
+
import { t as withTransaction } from "./transaction-x2tJQ-A1.mjs";
|
|
6
|
+
import { t as FTSManager } from "./fts-manager-B1pTNEG_.mjs";
|
|
7
|
+
import { i as RESERVED_FIELD_SLUGS, n as FIELD_TYPE_TO_COLUMN, r as RESERVED_COLLECTION_SLUGS } from "./types-DL7Y8D_t.mjs";
|
|
6
8
|
import { sql } from "kysely";
|
|
7
9
|
import { ulid } from "ulidx";
|
|
8
10
|
|
|
9
|
-
//#region src/search/fts-manager.ts
|
|
10
|
-
/**
|
|
11
|
-
* FTS5 Manager
|
|
12
|
-
*
|
|
13
|
-
* Handles creation, deletion, and management of FTS5 virtual tables
|
|
14
|
-
* for full-text search on content collections.
|
|
15
|
-
*/
|
|
16
|
-
var FTSManager = class {
|
|
17
|
-
constructor(db) {
|
|
18
|
-
this.db = db;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate a collection slug and its searchable field names.
|
|
22
|
-
* Must be called before any raw SQL interpolation.
|
|
23
|
-
*/
|
|
24
|
-
validateInputs(collectionSlug, searchableFields) {
|
|
25
|
-
validateIdentifier(collectionSlug, "collection slug");
|
|
26
|
-
if (searchableFields) for (const field of searchableFields) validateIdentifier(field, "searchable field name");
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get the FTS table name for a collection
|
|
30
|
-
* Uses _dineway_ prefix to clearly mark as internal/system table
|
|
31
|
-
*/
|
|
32
|
-
getFtsTableName(collectionSlug) {
|
|
33
|
-
validateIdentifier(collectionSlug, "collection slug");
|
|
34
|
-
return `_dineway_fts_${collectionSlug}`;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get the content table name for a collection
|
|
38
|
-
*/
|
|
39
|
-
getContentTableName(collectionSlug) {
|
|
40
|
-
validateIdentifier(collectionSlug, "collection slug");
|
|
41
|
-
return `ec_${collectionSlug}`;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Check if an FTS table exists for a collection
|
|
45
|
-
*/
|
|
46
|
-
async ftsTableExists(collectionSlug) {
|
|
47
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
48
|
-
return tableExists(this.db, ftsTable);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Create an FTS5 virtual table for a collection.
|
|
52
|
-
* FTS5 is SQLite-only; on other dialects this is a no-op.
|
|
53
|
-
*
|
|
54
|
-
* @param collectionSlug - The collection slug
|
|
55
|
-
* @param searchableFields - Array of field names to index
|
|
56
|
-
* @param weights - Optional field weights for ranking
|
|
57
|
-
*/
|
|
58
|
-
async createFtsTable(collectionSlug, searchableFields, _weights) {
|
|
59
|
-
if (!isSqlite(this.db)) return;
|
|
60
|
-
this.validateInputs(collectionSlug, searchableFields);
|
|
61
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
62
|
-
const contentTable = this.getContentTableName(collectionSlug);
|
|
63
|
-
const columns = [
|
|
64
|
-
"id UNINDEXED",
|
|
65
|
-
"locale UNINDEXED",
|
|
66
|
-
...searchableFields
|
|
67
|
-
].join(", ");
|
|
68
|
-
await sql.raw(`
|
|
69
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS "${ftsTable}" USING fts5(
|
|
70
|
-
${columns},
|
|
71
|
-
content='${contentTable}',
|
|
72
|
-
content_rowid='rowid',
|
|
73
|
-
tokenize='porter unicode61'
|
|
74
|
-
)
|
|
75
|
-
`).execute(this.db);
|
|
76
|
-
await this.createTriggers(collectionSlug, searchableFields);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Create triggers to keep FTS table in sync with content table.
|
|
80
|
-
*
|
|
81
|
-
* Insert and update triggers only add rows to the FTS index when
|
|
82
|
-
* `deleted_at IS NULL`. This keeps soft-deleted content out of the
|
|
83
|
-
* index and keeps repair counts aligned with searchable content.
|
|
84
|
-
*/
|
|
85
|
-
async createTriggers(collectionSlug, searchableFields) {
|
|
86
|
-
this.validateInputs(collectionSlug, searchableFields);
|
|
87
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
88
|
-
const contentTable = this.getContentTableName(collectionSlug);
|
|
89
|
-
const fieldList = searchableFields.join(", ");
|
|
90
|
-
const newFieldList = searchableFields.map((f) => `NEW.${f}`).join(", ");
|
|
91
|
-
await sql.raw(`
|
|
92
|
-
CREATE TRIGGER IF NOT EXISTS "${ftsTable}_insert"
|
|
93
|
-
AFTER INSERT ON "${contentTable}"
|
|
94
|
-
WHEN NEW.deleted_at IS NULL
|
|
95
|
-
BEGIN
|
|
96
|
-
INSERT INTO "${ftsTable}"(rowid, id, locale, ${fieldList})
|
|
97
|
-
VALUES (NEW.rowid, NEW.id, NEW.locale, ${newFieldList});
|
|
98
|
-
END
|
|
99
|
-
`).execute(this.db);
|
|
100
|
-
await sql.raw(`
|
|
101
|
-
CREATE TRIGGER IF NOT EXISTS "${ftsTable}_update"
|
|
102
|
-
AFTER UPDATE ON "${contentTable}"
|
|
103
|
-
BEGIN
|
|
104
|
-
DELETE FROM "${ftsTable}" WHERE rowid = OLD.rowid;
|
|
105
|
-
INSERT INTO "${ftsTable}"(rowid, id, locale, ${fieldList})
|
|
106
|
-
SELECT NEW.rowid, NEW.id, NEW.locale, ${newFieldList}
|
|
107
|
-
WHERE NEW.deleted_at IS NULL;
|
|
108
|
-
END
|
|
109
|
-
`).execute(this.db);
|
|
110
|
-
await sql.raw(`
|
|
111
|
-
CREATE TRIGGER IF NOT EXISTS "${ftsTable}_delete"
|
|
112
|
-
AFTER DELETE ON "${contentTable}"
|
|
113
|
-
BEGIN
|
|
114
|
-
DELETE FROM "${ftsTable}" WHERE rowid = OLD.rowid;
|
|
115
|
-
END
|
|
116
|
-
`).execute(this.db);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Drop triggers for a collection
|
|
120
|
-
*/
|
|
121
|
-
async dropTriggers(collectionSlug) {
|
|
122
|
-
this.validateInputs(collectionSlug);
|
|
123
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
124
|
-
await sql.raw(`DROP TRIGGER IF EXISTS "${ftsTable}_insert"`).execute(this.db);
|
|
125
|
-
await sql.raw(`DROP TRIGGER IF EXISTS "${ftsTable}_update"`).execute(this.db);
|
|
126
|
-
await sql.raw(`DROP TRIGGER IF EXISTS "${ftsTable}_delete"`).execute(this.db);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Drop the FTS table and triggers for a collection
|
|
130
|
-
*/
|
|
131
|
-
async dropFtsTable(collectionSlug) {
|
|
132
|
-
if (!isSqlite(this.db)) return;
|
|
133
|
-
this.validateInputs(collectionSlug);
|
|
134
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
135
|
-
await this.dropTriggers(collectionSlug);
|
|
136
|
-
await sql.raw(`DROP TABLE IF EXISTS "${ftsTable}"`).execute(this.db);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Rebuild the FTS index for a collection
|
|
140
|
-
*
|
|
141
|
-
* This is useful after bulk imports or if the index gets out of sync.
|
|
142
|
-
*/
|
|
143
|
-
async rebuildIndex(collectionSlug, searchableFields, weights) {
|
|
144
|
-
if (!isSqlite(this.db)) return;
|
|
145
|
-
await this.dropFtsTable(collectionSlug);
|
|
146
|
-
await this.createFtsTable(collectionSlug, searchableFields, weights);
|
|
147
|
-
await this.populateFromContent(collectionSlug, searchableFields);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Populate the FTS table from existing content
|
|
151
|
-
*/
|
|
152
|
-
async populateFromContent(collectionSlug, searchableFields) {
|
|
153
|
-
if (!isSqlite(this.db)) return;
|
|
154
|
-
this.validateInputs(collectionSlug, searchableFields);
|
|
155
|
-
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
156
|
-
const contentTable = this.getContentTableName(collectionSlug);
|
|
157
|
-
const fieldList = searchableFields.join(", ");
|
|
158
|
-
await sql.raw(`
|
|
159
|
-
INSERT INTO "${ftsTable}"(rowid, id, locale, ${fieldList})
|
|
160
|
-
SELECT rowid, id, locale, ${fieldList} FROM "${contentTable}"
|
|
161
|
-
WHERE deleted_at IS NULL
|
|
162
|
-
`).execute(this.db);
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Get the search configuration for a collection
|
|
166
|
-
*/
|
|
167
|
-
async getSearchConfig(collectionSlug) {
|
|
168
|
-
const result = await this.db.selectFrom("_dineway_collections").select("search_config").where("slug", "=", collectionSlug).executeTakeFirst();
|
|
169
|
-
if (!result?.search_config) return null;
|
|
170
|
-
try {
|
|
171
|
-
const parsed = JSON.parse(result.search_config);
|
|
172
|
-
if (typeof parsed !== "object" || parsed === null || !("enabled" in parsed) || typeof parsed.enabled !== "boolean") return null;
|
|
173
|
-
const config = { enabled: parsed.enabled };
|
|
174
|
-
if ("weights" in parsed && typeof parsed.weights === "object" && parsed.weights !== null) {
|
|
175
|
-
const weights = {};
|
|
176
|
-
for (const [k, v] of Object.entries(parsed.weights)) if (typeof v === "number") weights[k] = v;
|
|
177
|
-
config.weights = weights;
|
|
178
|
-
}
|
|
179
|
-
return config;
|
|
180
|
-
} catch {
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Update the search configuration for a collection
|
|
186
|
-
*/
|
|
187
|
-
async setSearchConfig(collectionSlug, config) {
|
|
188
|
-
await this.db.updateTable("_dineway_collections").set({ search_config: JSON.stringify(config) }).where("slug", "=", collectionSlug).execute();
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Get searchable fields for a collection
|
|
192
|
-
*/
|
|
193
|
-
async getSearchableFields(collectionSlug) {
|
|
194
|
-
const collection = await this.db.selectFrom("_dineway_collections").select("id").where("slug", "=", collectionSlug).executeTakeFirst();
|
|
195
|
-
if (!collection) return [];
|
|
196
|
-
return (await this.db.selectFrom("_dineway_fields").select("slug").where("collection_id", "=", collection.id).where("searchable", "=", 1).execute()).map((f) => f.slug);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Enable search for a collection.
|
|
200
|
-
*
|
|
201
|
-
* Rebuilds from scratch to ensure stale tables or triggers do not survive
|
|
202
|
-
* repeated enablement.
|
|
203
|
-
*/
|
|
204
|
-
async enableSearch(collectionSlug, options) {
|
|
205
|
-
if (!isSqlite(this.db)) throw new Error("Full-text search is only available with SQLite databases");
|
|
206
|
-
const searchableFields = await this.getSearchableFields(collectionSlug);
|
|
207
|
-
if (searchableFields.length === 0) throw new Error(`No searchable fields defined for collection "${collectionSlug}". Mark at least one field as searchable before enabling search.`);
|
|
208
|
-
await this.rebuildIndex(collectionSlug, searchableFields, options?.weights);
|
|
209
|
-
await this.setSearchConfig(collectionSlug, {
|
|
210
|
-
enabled: true,
|
|
211
|
-
weights: options?.weights
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Disable search for a collection
|
|
216
|
-
*
|
|
217
|
-
* Drops the FTS table and triggers.
|
|
218
|
-
*/
|
|
219
|
-
async disableSearch(collectionSlug) {
|
|
220
|
-
if (!isSqlite(this.db)) return;
|
|
221
|
-
const existing = await this.getSearchConfig(collectionSlug);
|
|
222
|
-
await this.dropFtsTable(collectionSlug);
|
|
223
|
-
await this.setSearchConfig(collectionSlug, {
|
|
224
|
-
enabled: false,
|
|
225
|
-
weights: existing?.weights
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Get index statistics for a collection
|
|
230
|
-
*/
|
|
231
|
-
async getIndexStats(collectionSlug) {
|
|
232
|
-
if (!isSqlite(this.db)) return null;
|
|
233
|
-
this.validateInputs(collectionSlug);
|
|
234
|
-
const ftsDocsizeTable = `${this.getFtsTableName(collectionSlug)}_docsize`;
|
|
235
|
-
if (!await this.ftsTableExists(collectionSlug)) return null;
|
|
236
|
-
return { indexed: (await sql`
|
|
237
|
-
SELECT COUNT(*) as count FROM "${sql.raw(ftsDocsizeTable)}"
|
|
238
|
-
`.execute(this.db)).rows[0]?.count ?? 0 };
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Verify FTS index integrity and rebuild if corrupted.
|
|
242
|
-
*
|
|
243
|
-
* Checks for row count mismatch between content table and FTS table.
|
|
244
|
-
*
|
|
245
|
-
* Returns true if the index was rebuilt, false if it was healthy.
|
|
246
|
-
*/
|
|
247
|
-
async verifyAndRepairIndex(collectionSlug) {
|
|
248
|
-
if (!isSqlite(this.db)) return false;
|
|
249
|
-
this.validateInputs(collectionSlug);
|
|
250
|
-
const ftsDocsizeTable = `${this.getFtsTableName(collectionSlug)}_docsize`;
|
|
251
|
-
const contentTable = this.getContentTableName(collectionSlug);
|
|
252
|
-
const fields = await this.getSearchableFields(collectionSlug);
|
|
253
|
-
const config = await this.getSearchConfig(collectionSlug);
|
|
254
|
-
if (!await this.ftsTableExists(collectionSlug)) {
|
|
255
|
-
if (!config?.enabled || fields.length === 0) return false;
|
|
256
|
-
console.warn(`FTS index for "${collectionSlug}" is missing. Rebuilding.`);
|
|
257
|
-
await this.rebuildIndex(collectionSlug, fields, config.weights);
|
|
258
|
-
return true;
|
|
259
|
-
}
|
|
260
|
-
const contentCount = await sql`
|
|
261
|
-
SELECT COUNT(*) as count FROM ${sql.ref(contentTable)}
|
|
262
|
-
WHERE deleted_at IS NULL
|
|
263
|
-
`.execute(this.db);
|
|
264
|
-
const ftsCount = await sql`
|
|
265
|
-
SELECT COUNT(*) as count FROM "${sql.raw(ftsDocsizeTable)}"
|
|
266
|
-
`.execute(this.db);
|
|
267
|
-
const contentRows = contentCount.rows[0]?.count ?? 0;
|
|
268
|
-
const ftsRows = ftsCount.rows[0]?.count ?? 0;
|
|
269
|
-
if (contentRows !== ftsRows) {
|
|
270
|
-
console.warn(`FTS index for "${collectionSlug}" has ${ftsRows} rows but content table has ${contentRows}. Rebuilding.`);
|
|
271
|
-
if (fields.length > 0) await this.rebuildIndex(collectionSlug, fields, config?.weights);
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
return false;
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Verify and repair FTS indexes for all search-enabled collections.
|
|
278
|
-
*
|
|
279
|
-
* Intended to run at startup to auto-heal any corruption from
|
|
280
|
-
* previous process crashes.
|
|
281
|
-
*/
|
|
282
|
-
async verifyAndRepairAll() {
|
|
283
|
-
if (!isSqlite(this.db)) return 0;
|
|
284
|
-
const collections = await this.db.selectFrom("_dineway_collections").select("slug").where("search_config", "is not", null).execute();
|
|
285
|
-
let repaired = 0;
|
|
286
|
-
for (const { slug } of collections) {
|
|
287
|
-
if (!(await this.getSearchConfig(slug))?.enabled) continue;
|
|
288
|
-
try {
|
|
289
|
-
if (await this.verifyAndRepairIndex(slug)) repaired++;
|
|
290
|
-
} catch (error) {
|
|
291
|
-
console.error(`Failed to verify/repair FTS index for "${slug}":`, error);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
return repaired;
|
|
295
|
-
}
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
//#endregion
|
|
299
11
|
//#region src/schema/registry.ts
|
|
300
12
|
var registry_exports = /* @__PURE__ */ __exportAll({
|
|
301
13
|
SchemaError: () => SchemaError,
|
|
@@ -366,6 +78,26 @@ var SchemaRegistry = class {
|
|
|
366
78
|
return (await this.db.selectFrom("_dineway_collections").selectAll().orderBy("slug", "asc").execute()).map(this.mapCollectionRow);
|
|
367
79
|
}
|
|
368
80
|
/**
|
|
81
|
+
* List all collections with their fields using bounded query shapes.
|
|
82
|
+
*/
|
|
83
|
+
async listCollectionsWithFields() {
|
|
84
|
+
const collections = (await this.db.selectFrom("_dineway_collections").selectAll().orderBy("slug", "asc").execute()).map(this.mapCollectionRow);
|
|
85
|
+
if (collections.length === 0) return [];
|
|
86
|
+
const fieldsByCollectionId = /* @__PURE__ */ new Map();
|
|
87
|
+
for (const collectionIdChunk of chunks(collections.map((collection) => collection.id), SQL_BATCH_SIZE)) {
|
|
88
|
+
const fieldRows = await this.db.selectFrom("_dineway_fields").selectAll().where("collection_id", "in", collectionIdChunk).orderBy("collection_id", "asc").orderBy("sort_order", "asc").orderBy("created_at", "asc").execute();
|
|
89
|
+
for (const field of fieldRows.map(this.mapFieldRow)) {
|
|
90
|
+
const existing = fieldsByCollectionId.get(field.collectionId);
|
|
91
|
+
if (existing) existing.push(field);
|
|
92
|
+
else fieldsByCollectionId.set(field.collectionId, [field]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return collections.map((collection) => ({
|
|
96
|
+
...collection,
|
|
97
|
+
fields: fieldsByCollectionId.get(collection.id) ?? []
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
369
101
|
* Get a collection by slug
|
|
370
102
|
*/
|
|
371
103
|
async getCollection(slug) {
|
|
@@ -916,4 +648,4 @@ var SchemaRegistry = class {
|
|
|
916
648
|
};
|
|
917
649
|
|
|
918
650
|
//#endregion
|
|
919
|
-
export {
|
|
651
|
+
export { SchemaRegistry as n, registry_exports as r, SchemaError as t };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { n as normalizeTrustedHeaders, t as getTrustedProxyHeaders } from "./trusted-proxy-BbaZfkT9.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/request-meta.ts
|
|
4
|
+
/**
|
|
5
|
+
* Loose validation for IPv4 and IPv6 addresses.
|
|
6
|
+
* Accepts digits, hex chars, dots, and colons — rejects anything else
|
|
7
|
+
* (e.g. HTML tags, scripts, or other non-IP garbage in spoofed headers).
|
|
8
|
+
*/
|
|
9
|
+
const IP_PATTERN = /^[\da-fA-F.:]+$/;
|
|
10
|
+
/**
|
|
11
|
+
* Extract the first IP from an X-Forwarded-For header value.
|
|
12
|
+
* The header may contain a comma-separated list of IPs; the first
|
|
13
|
+
* entry is the original client IP.
|
|
14
|
+
*
|
|
15
|
+
* Returns null if the extracted value doesn't look like an IP address.
|
|
16
|
+
*/
|
|
17
|
+
function parseFirstForwardedIp(header) {
|
|
18
|
+
const trimmed = header.split(",")[0]?.trim();
|
|
19
|
+
if (!trimmed) return null;
|
|
20
|
+
return IP_PATTERN.test(trimmed) ? trimmed : null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read an IP from an operator-declared trusted header. Forwarded-for style
|
|
24
|
+
* headers are parsed as comma-separated lists and the first entry is used.
|
|
25
|
+
*/
|
|
26
|
+
function readIpFromHeader(headers, name) {
|
|
27
|
+
const value = headers.get(name);
|
|
28
|
+
if (!value) return null;
|
|
29
|
+
if (name.endsWith("forwarded-for")) return parseFirstForwardedIp(value);
|
|
30
|
+
const trimmed = value.trim();
|
|
31
|
+
if (!trimmed) return null;
|
|
32
|
+
return IP_PATTERN.test(trimmed) ? trimmed : null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the runtime-provided `cf` object from the request, if present.
|
|
36
|
+
*/
|
|
37
|
+
function getCfObject(request) {
|
|
38
|
+
return request.cf;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract geographic information from the runtime-provided `cf` object
|
|
42
|
+
* attached to the request.
|
|
43
|
+
*/
|
|
44
|
+
function extractGeo(cf) {
|
|
45
|
+
if (!cf) return null;
|
|
46
|
+
const country = cf.country ?? null;
|
|
47
|
+
const region = cf.region ?? null;
|
|
48
|
+
const city = cf.city ?? null;
|
|
49
|
+
if (country === null && region === null && city === null) return null;
|
|
50
|
+
return {
|
|
51
|
+
country,
|
|
52
|
+
region,
|
|
53
|
+
city
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract normalized request metadata from a Request object.
|
|
58
|
+
*
|
|
59
|
+
* IP resolution order:
|
|
60
|
+
* 1. `CF-Connecting-IP` header — only trusted when a `cf` object is
|
|
61
|
+
* present on the request (proving the request came through a trusted
|
|
62
|
+
* edge/runtime that strips or overwrites client-supplied values).
|
|
63
|
+
* 2. `X-Forwarded-For` header (first entry) — trusted only with runtime
|
|
64
|
+
* edge metadata.
|
|
65
|
+
* 3. Operator-declared trusted proxy headers, tried in order.
|
|
66
|
+
* 4. `null`
|
|
67
|
+
*/
|
|
68
|
+
function extractRequestMeta(request, configOrTrustedHeaders) {
|
|
69
|
+
const headers = request.headers;
|
|
70
|
+
const cf = getCfObject(request);
|
|
71
|
+
const trustedHeaders = resolveTrustedHeaders(configOrTrustedHeaders);
|
|
72
|
+
let ip = null;
|
|
73
|
+
if (cf) {
|
|
74
|
+
const cfIp = headers.get("cf-connecting-ip")?.trim();
|
|
75
|
+
if (cfIp && IP_PATTERN.test(cfIp)) ip = cfIp;
|
|
76
|
+
}
|
|
77
|
+
if (!ip && cf) {
|
|
78
|
+
const xff = headers.get("x-forwarded-for");
|
|
79
|
+
ip = xff ? parseFirstForwardedIp(xff) : null;
|
|
80
|
+
}
|
|
81
|
+
if (!ip) for (const name of trustedHeaders) {
|
|
82
|
+
const value = readIpFromHeader(headers, name);
|
|
83
|
+
if (value) {
|
|
84
|
+
ip = value;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const userAgent = headers.get("user-agent")?.trim() || null;
|
|
89
|
+
const referer = headers.get("referer")?.trim() || null;
|
|
90
|
+
const geo = extractGeo(cf);
|
|
91
|
+
return {
|
|
92
|
+
ip,
|
|
93
|
+
userAgent,
|
|
94
|
+
referer,
|
|
95
|
+
geo
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function resolveTrustedHeaders(value) {
|
|
99
|
+
if (Array.isArray(value)) return normalizeTrustedHeaders(value);
|
|
100
|
+
return getTrustedProxyHeaders(value);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Headers that must never cross the RPC boundary to sandboxed plugins.
|
|
104
|
+
* Session tokens, auth credentials, and infrastructure headers are stripped
|
|
105
|
+
* to prevent malicious plugins from exfiltrating sensitive data.
|
|
106
|
+
*/
|
|
107
|
+
const SANDBOX_STRIPPED_HEADERS = new Set([
|
|
108
|
+
"cookie",
|
|
109
|
+
"set-cookie",
|
|
110
|
+
"authorization",
|
|
111
|
+
"proxy-authorization",
|
|
112
|
+
"cf-access-jwt-assertion",
|
|
113
|
+
"cf-access-client-id",
|
|
114
|
+
"cf-access-client-secret",
|
|
115
|
+
"x-dineway-request"
|
|
116
|
+
]);
|
|
117
|
+
/**
|
|
118
|
+
* Copy request headers into a plain object, stripping sensitive headers
|
|
119
|
+
* that must not be exposed to sandboxed plugin code.
|
|
120
|
+
*/
|
|
121
|
+
function sanitizeHeadersForSandbox(headers) {
|
|
122
|
+
const safe = {};
|
|
123
|
+
headers.forEach((value, key) => {
|
|
124
|
+
if (!SANDBOX_STRIPPED_HEADERS.has(key)) safe[key] = value;
|
|
125
|
+
});
|
|
126
|
+
return safe;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//#endregion
|
|
130
|
+
export { sanitizeHeadersForSandbox as n, extractRequestMeta as t };
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { n as decodeCursor, r as encodeCursor } from "./types-Bs6lTBBW.mjs";
|
|
2
|
+
import { ulid } from "ulidx";
|
|
3
|
+
|
|
4
|
+
//#region src/database/repositories/review-requests.ts
|
|
5
|
+
var ReviewRequestRepository = class {
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
async create(input) {
|
|
10
|
+
const id = ulid();
|
|
11
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
12
|
+
await this.db.insertInto("_dineway_review_requests").values(toInsertableReviewRequest(id, input, now)).execute();
|
|
13
|
+
const request = await this.findById(id);
|
|
14
|
+
if (!request) throw new Error("Failed to create review request");
|
|
15
|
+
return request;
|
|
16
|
+
}
|
|
17
|
+
async findById(id) {
|
|
18
|
+
const row = await this.db.selectFrom("_dineway_review_requests").selectAll().where("id", "=", id).executeTakeFirst();
|
|
19
|
+
return row ? rowToReviewRequest(row) : null;
|
|
20
|
+
}
|
|
21
|
+
async list(query = {}) {
|
|
22
|
+
const limit = clampLimit(query.limit);
|
|
23
|
+
const rows = await this.queryRows(query).execute();
|
|
24
|
+
const items = rows.slice(0, limit).map(rowToReviewRequest);
|
|
25
|
+
const result = { items };
|
|
26
|
+
if (rows.length > limit && items.length > 0) {
|
|
27
|
+
const last = items.at(-1);
|
|
28
|
+
result.nextCursor = encodeCursor(last.createdAt, last.id);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
async countPending(scope) {
|
|
33
|
+
let query = this.db.selectFrom("_dineway_review_requests").select((eb) => eb.fn.count("id").as("count")).where("status", "=", "pending");
|
|
34
|
+
if (scope) query = query.where("scope", "=", scope);
|
|
35
|
+
const result = await query.executeTakeFirst();
|
|
36
|
+
return Number(result?.count ?? 0);
|
|
37
|
+
}
|
|
38
|
+
async resolve(id, input) {
|
|
39
|
+
const resolvedAt = input.resolvedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
40
|
+
const result = await this.db.updateTable("_dineway_review_requests").set({
|
|
41
|
+
status: input.decision,
|
|
42
|
+
resolved_by_actor_type: input.resolvedByActorType,
|
|
43
|
+
resolved_by_actor_id: input.resolvedByActorId,
|
|
44
|
+
resolved_auth_metadata: jsonOrNull(input.resolvedAuthMetadata),
|
|
45
|
+
review_note: input.reviewNote ?? null,
|
|
46
|
+
resolved_at: resolvedAt,
|
|
47
|
+
updated_at: resolvedAt
|
|
48
|
+
}).where("id", "=", id).where("status", "=", "pending").executeTakeFirst();
|
|
49
|
+
if (Number(result.numUpdatedRows ?? 0) === 0) return null;
|
|
50
|
+
return this.findById(id);
|
|
51
|
+
}
|
|
52
|
+
async findApprovedForTarget(target) {
|
|
53
|
+
let query = this.db.selectFrom("_dineway_review_requests").selectAll().where("status", "=", "approved").where("collection", "=", target.collection).where("entry_id", "=", target.entryId).where("reviewed_rev", "=", target.reviewedRev).where("action_type", "=", target.actionType).where("action_hash", "=", target.actionHash).orderBy("resolved_at", "desc").orderBy("created_at", "desc").orderBy("id", "desc");
|
|
54
|
+
query = target.liveRevisionId === null ? query.where("live_revision_id", "is", null) : query.where("live_revision_id", "=", target.liveRevisionId);
|
|
55
|
+
query = target.draftRevisionId === null ? query.where("draft_revision_id", "is", null) : query.where("draft_revision_id", "=", target.draftRevisionId);
|
|
56
|
+
const row = await query.executeTakeFirst();
|
|
57
|
+
return row ? rowToReviewRequest(row) : null;
|
|
58
|
+
}
|
|
59
|
+
queryRows(query) {
|
|
60
|
+
const limit = clampLimit(query.limit);
|
|
61
|
+
let q = this.db.selectFrom("_dineway_review_requests").selectAll().orderBy("created_at", "desc").orderBy("id", "desc").limit(limit + 1);
|
|
62
|
+
if (query.status) q = q.where("status", "=", query.status);
|
|
63
|
+
if (query.collection) q = q.where("collection", "=", query.collection);
|
|
64
|
+
if (query.entryId) q = q.where("entry_id", "=", query.entryId);
|
|
65
|
+
if (query.scope) q = q.where("scope", "=", query.scope);
|
|
66
|
+
if (query.scopes && query.scopes.length > 0) q = q.where("scope", "in", query.scopes);
|
|
67
|
+
if (query.actionType) q = q.where("action_type", "=", query.actionType);
|
|
68
|
+
if (query.since) q = q.where("updated_at", ">=", query.since);
|
|
69
|
+
if (query.cursor) {
|
|
70
|
+
const decoded = decodeCursor(query.cursor);
|
|
71
|
+
if (decoded) q = q.where((eb) => eb.or([eb("created_at", "<", decoded.orderValue), eb.and([eb("created_at", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
|
|
72
|
+
}
|
|
73
|
+
return q;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
function toInsertableReviewRequest(id, input, now) {
|
|
77
|
+
return {
|
|
78
|
+
id,
|
|
79
|
+
status: "pending",
|
|
80
|
+
collection: input.collection,
|
|
81
|
+
entry_id: input.entryId,
|
|
82
|
+
scope: input.scope ?? `content:${input.collection}:${input.entryId}`,
|
|
83
|
+
live_revision_id: input.liveRevisionId ?? null,
|
|
84
|
+
draft_revision_id: input.draftRevisionId ?? null,
|
|
85
|
+
reviewed_rev: input.reviewedRev,
|
|
86
|
+
action_type: input.actionType,
|
|
87
|
+
action_hash: input.actionHash,
|
|
88
|
+
risk_reason: input.riskReason ?? null,
|
|
89
|
+
review_payload: JSON.stringify(input.reviewPayload),
|
|
90
|
+
requested_by_actor_type: input.requestedByActorType,
|
|
91
|
+
requested_by_actor_id: input.requestedByActorId,
|
|
92
|
+
requested_auth_metadata: jsonOrNull(input.requestedAuthMetadata),
|
|
93
|
+
resolved_by_actor_type: null,
|
|
94
|
+
resolved_by_actor_id: null,
|
|
95
|
+
resolved_auth_metadata: null,
|
|
96
|
+
review_note: null,
|
|
97
|
+
created_at: input.createdAt ?? now,
|
|
98
|
+
updated_at: input.createdAt ?? now,
|
|
99
|
+
resolved_at: null
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function rowToReviewRequest(row) {
|
|
103
|
+
return {
|
|
104
|
+
id: row.id,
|
|
105
|
+
status: row.status,
|
|
106
|
+
collection: row.collection,
|
|
107
|
+
entryId: row.entry_id,
|
|
108
|
+
scope: row.scope,
|
|
109
|
+
liveRevisionId: row.live_revision_id,
|
|
110
|
+
draftRevisionId: row.draft_revision_id,
|
|
111
|
+
reviewedRev: row.reviewed_rev,
|
|
112
|
+
actionType: row.action_type,
|
|
113
|
+
actionHash: row.action_hash,
|
|
114
|
+
riskReason: row.risk_reason,
|
|
115
|
+
reviewPayload: parseRecord(row.review_payload) ?? {},
|
|
116
|
+
requestedByActorType: row.requested_by_actor_type,
|
|
117
|
+
requestedByActorId: row.requested_by_actor_id,
|
|
118
|
+
requestedAuthMetadata: parseRecord(row.requested_auth_metadata),
|
|
119
|
+
resolvedByActorType: row.resolved_by_actor_type,
|
|
120
|
+
resolvedByActorId: row.resolved_by_actor_id,
|
|
121
|
+
resolvedAuthMetadata: parseRecord(row.resolved_auth_metadata),
|
|
122
|
+
reviewNote: row.review_note,
|
|
123
|
+
createdAt: row.created_at,
|
|
124
|
+
updatedAt: row.updated_at,
|
|
125
|
+
resolvedAt: row.resolved_at
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function jsonOrNull(value) {
|
|
129
|
+
return value ? JSON.stringify(value) : null;
|
|
130
|
+
}
|
|
131
|
+
function parseRecord(value) {
|
|
132
|
+
if (!value) return null;
|
|
133
|
+
try {
|
|
134
|
+
const parsed = JSON.parse(value);
|
|
135
|
+
return isRecord(parsed) ? parsed : null;
|
|
136
|
+
} catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function isRecord(value) {
|
|
141
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
142
|
+
}
|
|
143
|
+
function clampLimit(value) {
|
|
144
|
+
return Math.min(Math.max(1, value ?? 50), 100);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
//#endregion
|
|
148
|
+
export { ReviewRequestRepository as t };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { t as ReviewRequestRepository } from "./review-requests-C2DIHwlJ.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/api/handlers/review-requests.ts
|
|
4
|
+
async function handleReviewRequestList(db, query) {
|
|
5
|
+
try {
|
|
6
|
+
return {
|
|
7
|
+
success: true,
|
|
8
|
+
data: await new ReviewRequestRepository(db).list(query)
|
|
9
|
+
};
|
|
10
|
+
} catch (error) {
|
|
11
|
+
console.error("Review request list error:", error);
|
|
12
|
+
return {
|
|
13
|
+
success: false,
|
|
14
|
+
error: {
|
|
15
|
+
code: "REVIEW_REQUEST_LIST_ERROR",
|
|
16
|
+
message: "Failed to list review requests"
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function handleReviewRequestGet(db, id) {
|
|
22
|
+
try {
|
|
23
|
+
const item = await new ReviewRequestRepository(db).findById(id);
|
|
24
|
+
if (!item) return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: {
|
|
27
|
+
code: "NOT_FOUND",
|
|
28
|
+
message: "Review request not found"
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
success: true,
|
|
33
|
+
data: { item }
|
|
34
|
+
};
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error("Review request get error:", error);
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: {
|
|
40
|
+
code: "REVIEW_REQUEST_GET_ERROR",
|
|
41
|
+
message: "Failed to fetch review request"
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function handleReviewRequestResolve(db, id, input) {
|
|
47
|
+
try {
|
|
48
|
+
const item = await new ReviewRequestRepository(db).resolve(id, {
|
|
49
|
+
decision: input.decision,
|
|
50
|
+
reviewNote: input.reviewNote,
|
|
51
|
+
resolvedByActorType: input.actor.actorType,
|
|
52
|
+
resolvedByActorId: input.actor.actorId,
|
|
53
|
+
resolvedAuthMetadata: input.actor.authMetadata
|
|
54
|
+
});
|
|
55
|
+
if (!item) return {
|
|
56
|
+
success: false,
|
|
57
|
+
error: {
|
|
58
|
+
code: "NOT_FOUND",
|
|
59
|
+
message: "Review request not found or already resolved"
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
data: { item }
|
|
65
|
+
};
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error("Review request resolve error:", error);
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
error: {
|
|
71
|
+
code: "REVIEW_REQUEST_RESOLVE_ERROR",
|
|
72
|
+
message: "Failed to resolve review request"
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//#endregion
|
|
79
|
+
export { handleReviewRequestList as n, handleReviewRequestResolve as r, handleReviewRequestGet as t };
|