dineway 0.1.9 → 0.1.11
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-BsMaXdJa.mjs +540 -0
- package/dist/allowed-origins-DG86sH8U.mjs +68 -0
- package/dist/api/route-utils.d.mts +41 -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-Cmy8Rjk5.mjs +2704 -0
- package/dist/api-tokens-Bu3ez1MO.mjs +153 -0
- package/dist/api-tokens-DzloJxuh.mjs +3 -0
- package/dist/{apply-iVSqz2qs.mjs → apply-Co5imxxT.mjs} +15 -689
- package/dist/astro/index.d.mts +10 -6
- package/dist/astro/index.mjs +86 -11
- package/dist/astro/middleware/auth.d.mts +10 -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 +86 -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 +45 -0
- package/dist/astro/routes/api/admin/context/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +45 -0
- package/dist/astro/routes/api/admin/context/_id_/review.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +60 -0
- package/dist/astro/routes/api/admin/context/_id_/supersede.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +63 -0
- package/dist/astro/routes/api/admin/context/diff.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/diff.mjs +49 -0
- package/dist/astro/routes/api/admin/context/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/context/index.mjs +71 -0
- package/dist/astro/routes/api/admin/context/stale.d.mts +7 -0
- package/dist/astro/routes/api/admin/context/stale.mjs +49 -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 +51 -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 +67 -0
- package/dist/astro/routes/api/admin/hitl-requests/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +55 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts +7 -0
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +98 -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 +89 -0
- package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +89 -0
- package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +54 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +98 -0
- package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +131 -0
- package/dist/astro/routes/api/admin/plugins/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/index.mjs +52 -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 +54 -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 +128 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +61 -0
- package/dist/astro/routes/api/admin/plugins/updates.d.mts +7 -0
- package/dist/astro/routes/api/admin/plugins/updates.mjs +52 -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 +97 -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 +54 -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 +70 -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 +92 -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 +197 -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 +155 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +21 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +289 -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 +268 -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 +2700 -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/{src/astro/routes/api/menus/[name]/items.ts → dist/astro/routes/api/menus/_name_/items.mjs} +63 -105
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts +7 -0
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +77 -0
- package/dist/astro/routes/api/menus/_name_.d.mts +9 -0
- package/dist/astro/routes/api/menus/_name_.mjs +123 -0
- package/dist/astro/routes/api/menus/index.d.mts +8 -0
- package/dist/astro/routes/api/menus/index.mjs +84 -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 +152 -0
- package/dist/astro/routes/api/redirects/index.d.mts +8 -0
- package/dist/astro/routes/api/redirects/index.mjs +97 -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 +98 -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 +80 -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 +67 -0
- package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts +9 -0
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +97 -0
- package/dist/astro/routes/api/schema/collections/index.d.mts +8 -0
- package/dist/astro/routes/api/schema/collections/index.mjs +77 -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 +58 -0
- package/dist/astro/routes/api/schema/orphans/index.d.mts +7 -0
- package/dist/astro/routes/api/schema/orphans/index.mjs +53 -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 +156 -0
- package/dist/astro/routes/api/sections/index.d.mts +8 -0
- package/dist/astro/routes/api/sections/index.mjs +99 -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 +101 -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 +189 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts +14 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +113 -0
- package/dist/astro/routes/api/taxonomies/index.d.mts +14 -0
- package/dist/astro/routes/api/taxonomies/index.mjs +103 -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 +88 -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 +158 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts +7 -0
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +104 -0
- package/dist/astro/routes/api/widget-areas/_name_.d.mts +8 -0
- package/dist/astro/routes/api/widget-areas/_name_.mjs +99 -0
- package/dist/astro/routes/api/widget-areas/index.d.mts +8 -0
- package/dist/astro/routes/api/widget-areas/index.mjs +108 -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 +41 -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-DKUe_1oa.mjs +13 -0
- package/dist/authorize-BBj8C6Y8.mjs +36 -0
- package/dist/briefing-BrXCuMEE.mjs +1294 -0
- package/dist/briefing-ClWw4mc9.mjs +29 -0
- package/dist/{byline-OhH2dlRu.mjs → byline-naZxOPSa.mjs} +3 -3
- package/dist/{bylines-BGpD9_hy.mjs → bylines-BcOPh6Ej.mjs} +20 -53
- package/dist/bylines-HfUKum_j.d.mts +2023 -0
- package/dist/{cache-BdSY-gQN.mjs → cache-DEbQ13c9.mjs} +21 -11
- package/dist/challenge-store-DHMgBGOq.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-Gy3zLBaP.mjs +186 -0
- package/dist/components-DND2rd3D.mjs +107 -0
- package/dist/{content-DWi4d0rT.mjs → content-CyLkb-qH.mjs} +33 -44
- package/dist/context-bE5Kyvcj.mjs +184 -0
- package/dist/context-nxMyOe3p.mjs +849 -0
- package/dist/context-route-helpers-D-6uCQ0S.mjs +45 -0
- package/dist/context-types-C-LwdAxx.mjs +23 -0
- package/dist/cron-DGzVTtJp.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-7AhWNwCK.mjs +487 -0
- package/dist/email-console-CgLVZbcn.mjs +36 -0
- package/dist/entity-aliases-C0v-yNET.mjs +51 -0
- package/dist/error-DEGjx2Xw.mjs +435 -0
- package/dist/escape-mNZr4t2A.mjs +8 -0
- package/dist/experimental-workflows-DldxJlqV.mjs +38 -0
- package/dist/fts-manager-B1pTNEG_.mjs +297 -0
- package/dist/hash-CDX7M0ze.mjs +32 -0
- package/dist/hitl-requests-Bx3Bkk9l.mjs +118 -0
- package/dist/hitl-route-helpers-DMmJRS7B.mjs +96 -0
- package/dist/import-DD3f2jkc.mjs +243 -0
- package/dist/import-DVZcYlDp.mjs +1323 -0
- package/dist/index-CkljPf5F.d.mts +227 -0
- package/dist/index.d.mts +15 -11
- package/dist/index.mjs +60 -22
- package/dist/{loader-sMG4TZ-u.mjs → loader-PZnPxFLc.mjs} +42 -5
- package/dist/{manifest-schema-D1MSVnoI.mjs → manifest-schema-DYoCQ5np.mjs} +22 -10
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +2 -1
- package/dist/media/local-runtime.d.mts +11 -7
- package/dist/media/local-runtime.mjs +3 -3
- package/dist/{media-DMTr80Gv.mjs → media-_7Fxdu45.mjs} +1 -1
- package/dist/menus-BacxVCCo.mjs +312 -0
- package/dist/menus-CrzHokKj.mjs +3502 -0
- package/dist/normalize-C49G_o1k.mjs +126 -0
- package/dist/oauth-authorization-C1qiw4hd.mjs +283 -0
- package/dist/oauth-clients-CvWatf5p.mjs +298 -0
- package/dist/oauth-state-store-hSdzxsEe.mjs +48 -0
- package/dist/oauth-user-lookup-B4OcmsLV.mjs +25 -0
- package/dist/options-z8VVg1Ll.mjs +114 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/parse-BeQXIt1U.mjs +88 -0
- package/dist/passkey-config-Daqs5fjq.mjs +42 -0
- package/dist/{patterns-CrCYkMBb.mjs → patterns-K0DLqWir.mjs} +53 -1
- package/dist/{placeholder-Cp8g5Emj.mjs → placeholder-C2P5fKa4.mjs} +1 -126
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -5
- package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
- package/dist/preview-C_4DyVox.mjs +788 -0
- package/dist/public-url-BB_umF5G.mjs +71 -0
- package/dist/{query-kDmwCsHh.mjs → query-RiobVwB5.mjs} +93 -19
- package/dist/rate-limit-CbJoj_fT.mjs +112 -0
- package/dist/{redirect-DnEWAkVg.mjs → redirect-CGl64yOX.mjs} +9 -5
- package/dist/redirect-ClSmMOtC.mjs +16 -0
- package/dist/redirects-B69T59hK.mjs +499 -0
- package/dist/redirects-CqaxraTO.mjs +1070 -0
- package/dist/{registry-C0zjeB9P.mjs → registry-C-_hxLqa.mjs} +26 -294
- package/dist/request-meta-Bd0mQfiS.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-9eIQXuc2.d.mts} +1 -1
- package/dist/{index-yvc6E_17.d.mts → runtime-C4-7y7xK.d.mts} +1539 -2007
- package/dist/runtime.d.mts +10 -6
- package/dist/runtime.mjs +3 -3
- package/dist/schema-BNpI53of.mjs +40 -0
- package/dist/search-DM6CVti3.mjs +337 -0
- package/dist/secrets-dI8zzTV7.mjs +160 -0
- package/dist/sections-DZFyAQXd.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-BBgTCOYU.mjs +85 -0
- package/dist/seo-CUQctrog.mjs +129 -0
- package/dist/service-CSfcQguB.mjs +194 -0
- package/dist/settings-4XnpVMOS.mjs +223 -0
- package/dist/settings-Bw93cLfe.mjs +50 -0
- package/dist/setup-complete-DidsDQ1e.mjs +21 -0
- package/dist/setup-nonce-pml1PMKo.mjs +17 -0
- package/dist/sidecar-client-vzwV98K4.mjs +66 -0
- package/dist/site-activity-B8FjLIVh.mjs +104 -0
- package/dist/site-context-Bpu_Paur.mjs +4122 -0
- package/dist/site-url-CYIcO0Tj.mjs +12 -0
- package/dist/slugify-PDTDtMXp.mjs +30 -0
- package/dist/ssrf-CmM76lLV.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-BvBgfzn3.mjs} +11 -7
- package/dist/taxonomies-CpqGcIJD.mjs +355 -0
- package/dist/taxonomy-D5cbhc8u.mjs +165 -0
- package/dist/{tokens-CJz9ubV6.mjs → tokens-DLTo4dO2.mjs} +1 -1
- package/dist/{transport-DB5eDN4x.mjs → transport-C9e_h-BF.mjs} +5 -4
- package/dist/trusted-proxy-Bi0Cuk5n.mjs +30 -0
- package/dist/{types-BawVha09.mjs → types-Bs6lTBBW.mjs} +1 -1
- package/dist/types-C982qI5I.d.mts +344 -0
- package/dist/types-D4XVOt01.d.mts +165 -0
- package/dist/{types-Cj0KMIZV.d.mts → types-DgfUZqcd.d.mts} +54 -16
- package/dist/{types-BuMDPy5C.d.mts → types-IPACEM14.d.mts} +6 -0
- package/dist/user-CcXq-zoL.mjs +154 -0
- package/dist/utils-D2in-zwy.mjs +285 -0
- package/dist/{validate-BZ5wnLLp.mjs → validate-BJgA6TW_.mjs} +1 -1
- package/dist/{validate-IPf8n4Fj.d.mts → validate-JCZihRIa.d.mts} +3 -3
- package/dist/version-DH53KCQd.mjs +6 -0
- package/dist/widgets-B7Q_7bxN.mjs +104 -0
- package/dist/wordpress-slugs-BevajWrC.mjs +14 -0
- package/dist/zod-generator-DBVP8D0P.mjs +132 -0
- package/locals.d.ts +1 -6
- package/package.json +67 -11
- package/src/components/DinewayHead.astro +8 -4
- package/src/components/DinewayImage.astro +7 -5
- package/src/components/DinewayMedia.astro +9 -3
- package/src/components/Gallery.astro +5 -3
- package/src/components/Image.astro +5 -1
- package/src/components/InlinePortableTextEditor.tsx +68 -19
- 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]/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-BLDldpJg.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-DKUg_NgF.mjs} +0 -0
- /package/dist/{default-VjJyuuG9.mjs → default-C3PZN-bz.mjs} +0 -0
- /package/dist/{load-Coc9HpHH.mjs → load-D-9NhLmF.mjs} +0 -0
- /package/dist/{mode-47goXBBK.mjs → mode-C80mAZQv.mjs} +0 -0
- /package/dist/{placeholder--wOi4TbO.d.mts → placeholder-CHkLckzK.d.mts} +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-6RefuBdV.d.mts} +0 -0
- /package/dist/{types-griIBQOQ.mjs → types-B9gKVOHk.mjs} +0 -0
- /package/dist/{types-CWbdtiux.d.mts → types-B9qVtiHb.d.mts} +0 -0
- /package/dist/{types-COeOq9nK.mjs → types-DL7Y8D_t.mjs} +0 -0
- /package/dist/{types-BzcUjoqg.d.mts → types-Djdp0cZO.d.mts} +0 -0
- /package/dist/{types-DOrVigru.d.mts → types-Du8jreyC.d.mts} +0 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
|
|
2
|
+
import { t as CommentRepository } from "./comment-DFO-gWDH.mjs";
|
|
3
|
+
import { t as escapeHtml } from "./escape-mNZr4t2A.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/comments/notifications.ts
|
|
6
|
+
const NOTIFICATION_SOURCE = "dineway-comments";
|
|
7
|
+
const MAX_EXCERPT_LENGTH = 500;
|
|
8
|
+
const CRLF_RE = /[\r\n]/g;
|
|
9
|
+
/**
|
|
10
|
+
* Build an email notification for a new comment.
|
|
11
|
+
*/
|
|
12
|
+
function buildCommentNotificationEmail(to, data) {
|
|
13
|
+
const title = data.contentTitle || `${data.collection} item`;
|
|
14
|
+
const subject = `New comment on "${title}"`.replace(CRLF_RE, " ");
|
|
15
|
+
const excerpt = data.commentBody.length > MAX_EXCERPT_LENGTH ? data.commentBody.slice(0, MAX_EXCERPT_LENGTH) + "..." : data.commentBody;
|
|
16
|
+
const adminUrl = `${data.adminBaseUrl}/admin/comments`;
|
|
17
|
+
return {
|
|
18
|
+
to,
|
|
19
|
+
subject,
|
|
20
|
+
text: [
|
|
21
|
+
`${data.commentAuthorName} commented on "${title}":`,
|
|
22
|
+
"",
|
|
23
|
+
excerpt,
|
|
24
|
+
"",
|
|
25
|
+
`View in admin: ${adminUrl}`
|
|
26
|
+
].join("\n"),
|
|
27
|
+
html: [
|
|
28
|
+
`<p><strong>${escapeHtml(data.commentAuthorName)}</strong> commented on “${escapeHtml(title)}”:</p>`,
|
|
29
|
+
`<blockquote style="border-left:3px solid #ccc;padding-left:12px;margin:12px 0;color:#555">${escapeHtml(excerpt)}</blockquote>`,
|
|
30
|
+
`<p><a href="${escapeHtml(adminUrl)}">View in admin</a></p>`
|
|
31
|
+
].join("\n")
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Send a comment notification to the content author if all conditions are met:
|
|
36
|
+
* 1. Comment status is "approved"
|
|
37
|
+
* 2. Content author exists and has an email
|
|
38
|
+
* 3. Email provider is configured
|
|
39
|
+
* 4. Commenter is not the content author (no self-notifications)
|
|
40
|
+
*
|
|
41
|
+
* Returns true if the email was sent, false if skipped.
|
|
42
|
+
*/
|
|
43
|
+
async function sendCommentNotification(params) {
|
|
44
|
+
const { email, comment, contentAuthor, adminBaseUrl } = params;
|
|
45
|
+
if (comment.status !== "approved") return false;
|
|
46
|
+
if (!contentAuthor?.email) return false;
|
|
47
|
+
if (!email.isAvailable()) return false;
|
|
48
|
+
if (comment.authorEmail.toLowerCase() === contentAuthor.email.toLowerCase()) return false;
|
|
49
|
+
const message = buildCommentNotificationEmail(contentAuthor.email, {
|
|
50
|
+
commentAuthorName: comment.authorName,
|
|
51
|
+
commentBody: comment.body,
|
|
52
|
+
contentTitle: params.contentTitle || "",
|
|
53
|
+
collection: comment.collection,
|
|
54
|
+
adminBaseUrl
|
|
55
|
+
});
|
|
56
|
+
await email.send(message, NOTIFICATION_SOURCE);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Look up a content item's author from the database.
|
|
61
|
+
*
|
|
62
|
+
* Used by the admin moderation route where content info isn't
|
|
63
|
+
* readily available (only the comment record is at hand).
|
|
64
|
+
*/
|
|
65
|
+
async function lookupContentAuthor(db, collection, contentId) {
|
|
66
|
+
validateIdentifier(collection, "collection");
|
|
67
|
+
const contentRow = await db.selectFrom(`ec_${collection}`).select(["slug", "author_id"]).where("id", "=", contentId).executeTakeFirst();
|
|
68
|
+
if (!contentRow) return null;
|
|
69
|
+
const typed = contentRow;
|
|
70
|
+
let author;
|
|
71
|
+
if (typed.author_id) {
|
|
72
|
+
const userRow = await db.selectFrom("users").select([
|
|
73
|
+
"id",
|
|
74
|
+
"name",
|
|
75
|
+
"email",
|
|
76
|
+
"email_verified"
|
|
77
|
+
]).where("id", "=", typed.author_id).executeTakeFirst();
|
|
78
|
+
if (userRow && userRow.email_verified) author = {
|
|
79
|
+
id: userRow.id,
|
|
80
|
+
email: userRow.email,
|
|
81
|
+
name: userRow.name
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
slug: typed.slug,
|
|
86
|
+
author
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/comments/service.ts
|
|
92
|
+
/**
|
|
93
|
+
* Create a comment through the full hook pipeline.
|
|
94
|
+
*
|
|
95
|
+
* Returns null if the comment was rejected by a beforeCreate handler.
|
|
96
|
+
*/
|
|
97
|
+
async function createComment(db, input, collectionSettings, hooks, contentInfo) {
|
|
98
|
+
const repo = new CommentRepository(db);
|
|
99
|
+
const beforeCreateEvent = {
|
|
100
|
+
comment: {
|
|
101
|
+
collection: input.collection,
|
|
102
|
+
contentId: input.contentId,
|
|
103
|
+
parentId: input.parentId ?? null,
|
|
104
|
+
authorName: input.authorName,
|
|
105
|
+
authorEmail: input.authorEmail,
|
|
106
|
+
authorUserId: input.authorUserId ?? null,
|
|
107
|
+
body: input.body,
|
|
108
|
+
ipHash: input.ipHash ?? null,
|
|
109
|
+
userAgent: input.userAgent ?? null
|
|
110
|
+
},
|
|
111
|
+
metadata: {}
|
|
112
|
+
};
|
|
113
|
+
const result = await hooks.runBeforeCreate(beforeCreateEvent);
|
|
114
|
+
if (result === false) return null;
|
|
115
|
+
const event = result;
|
|
116
|
+
const priorApprovedCount = await repo.countApprovedByEmail(event.comment.authorEmail);
|
|
117
|
+
const moderateEvent = {
|
|
118
|
+
comment: event.comment,
|
|
119
|
+
metadata: event.metadata,
|
|
120
|
+
collectionSettings,
|
|
121
|
+
priorApprovedCount
|
|
122
|
+
};
|
|
123
|
+
const decision = await hooks.runModerate(moderateEvent);
|
|
124
|
+
const comment = await repo.create({
|
|
125
|
+
collection: event.comment.collection,
|
|
126
|
+
contentId: event.comment.contentId,
|
|
127
|
+
parentId: event.comment.parentId,
|
|
128
|
+
authorName: event.comment.authorName,
|
|
129
|
+
authorEmail: event.comment.authorEmail,
|
|
130
|
+
authorUserId: event.comment.authorUserId,
|
|
131
|
+
body: event.comment.body,
|
|
132
|
+
status: decision.status,
|
|
133
|
+
ipHash: event.comment.ipHash,
|
|
134
|
+
userAgent: event.comment.userAgent,
|
|
135
|
+
moderationMetadata: Object.keys(event.metadata).length > 0 ? event.metadata : null
|
|
136
|
+
});
|
|
137
|
+
if (contentInfo) {
|
|
138
|
+
const afterEvent = {
|
|
139
|
+
comment: commentToStored(comment),
|
|
140
|
+
metadata: event.metadata,
|
|
141
|
+
content: {
|
|
142
|
+
id: contentInfo.id,
|
|
143
|
+
collection: contentInfo.collection,
|
|
144
|
+
slug: contentInfo.slug,
|
|
145
|
+
title: contentInfo.title
|
|
146
|
+
},
|
|
147
|
+
contentAuthor: contentInfo.author
|
|
148
|
+
};
|
|
149
|
+
hooks.fireAfterCreate(afterEvent);
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
comment,
|
|
153
|
+
decision
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Admin moderation — change a comment's status.
|
|
158
|
+
* Fires comment:afterModerate hook.
|
|
159
|
+
*/
|
|
160
|
+
async function moderateComment(db, id, newStatus, moderator, hooks) {
|
|
161
|
+
const repo = new CommentRepository(db);
|
|
162
|
+
const existing = await repo.findById(id);
|
|
163
|
+
if (!existing) return null;
|
|
164
|
+
const previousStatus = existing.status;
|
|
165
|
+
const updated = await repo.updateStatus(id, newStatus);
|
|
166
|
+
if (!updated) return null;
|
|
167
|
+
const afterEvent = {
|
|
168
|
+
comment: commentToStored(updated),
|
|
169
|
+
previousStatus,
|
|
170
|
+
newStatus,
|
|
171
|
+
moderator
|
|
172
|
+
};
|
|
173
|
+
hooks.fireAfterModerate(afterEvent);
|
|
174
|
+
return updated;
|
|
175
|
+
}
|
|
176
|
+
function commentToStored(comment) {
|
|
177
|
+
return {
|
|
178
|
+
id: comment.id,
|
|
179
|
+
collection: comment.collection,
|
|
180
|
+
contentId: comment.contentId,
|
|
181
|
+
parentId: comment.parentId,
|
|
182
|
+
authorName: comment.authorName,
|
|
183
|
+
authorEmail: comment.authorEmail,
|
|
184
|
+
authorUserId: comment.authorUserId,
|
|
185
|
+
body: comment.body,
|
|
186
|
+
status: comment.status,
|
|
187
|
+
moderationMetadata: comment.moderationMetadata,
|
|
188
|
+
createdAt: comment.createdAt,
|
|
189
|
+
updatedAt: comment.updatedAt
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
//#endregion
|
|
194
|
+
export { sendCommentNotification as i, moderateComment as n, lookupContentAuthor as r, createComment as t };
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { t as MediaRepository } from "./media-_7Fxdu45.mjs";
|
|
2
|
+
import { t as OptionsRepository } from "./options-z8VVg1Ll.mjs";
|
|
3
|
+
import { r as getDb } from "./loader-PZnPxFLc.mjs";
|
|
4
|
+
import { n as requestCached, t as peekRequestCache } from "./request-cache-DHMRr2Lf.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/media/url.ts
|
|
7
|
+
const INTERNAL_MEDIA_PREFIX = "/_dineway/api/media/file/";
|
|
8
|
+
function resolvePublicMediaUrl(storage, storageKey) {
|
|
9
|
+
if (!storageKey) return "";
|
|
10
|
+
if (storage) return storage.getPublicUrl(storageKey);
|
|
11
|
+
return `${INTERNAL_MEDIA_PREFIX}${storageKey}`;
|
|
12
|
+
}
|
|
13
|
+
function createPublicMediaUrlResolver(storage) {
|
|
14
|
+
return (key) => resolvePublicMediaUrl(storage, key);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/settings/index.ts
|
|
19
|
+
/** Prefix for site settings in the options table */
|
|
20
|
+
const SETTINGS_PREFIX = "site:";
|
|
21
|
+
const SITE_SETTINGS_CACHE_KEY = Symbol.for("dineway:site-settings");
|
|
22
|
+
const globalCache = globalThis;
|
|
23
|
+
const siteSettingsCache = globalCache[SITE_SETTINGS_CACHE_KEY] ?? (() => {
|
|
24
|
+
const holder = {
|
|
25
|
+
version: 0,
|
|
26
|
+
cached: null,
|
|
27
|
+
cachedVersion: -1
|
|
28
|
+
};
|
|
29
|
+
globalCache[SITE_SETTINGS_CACHE_KEY] = holder;
|
|
30
|
+
return holder;
|
|
31
|
+
})();
|
|
32
|
+
function invalidateSiteSettingsCache() {
|
|
33
|
+
siteSettingsCache.version++;
|
|
34
|
+
siteSettingsCache.cached = null;
|
|
35
|
+
siteSettingsCache.cachedVersion = -1;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Type guard for MediaReference values
|
|
39
|
+
*/
|
|
40
|
+
function isMediaReference(value) {
|
|
41
|
+
return typeof value === "object" && value !== null && "mediaId" in value;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve a media reference to include the full URL and content metadata.
|
|
45
|
+
*/
|
|
46
|
+
async function resolveMediaReference(mediaRef, db, storage) {
|
|
47
|
+
if (!mediaRef?.mediaId) return mediaRef;
|
|
48
|
+
try {
|
|
49
|
+
const media = await new MediaRepository(db).findById(mediaRef.mediaId);
|
|
50
|
+
if (media) return {
|
|
51
|
+
...mediaRef,
|
|
52
|
+
url: resolvePublicMediaUrl(storage, media.storageKey),
|
|
53
|
+
contentType: media.mimeType,
|
|
54
|
+
...media.width !== null ? { width: media.width } : {},
|
|
55
|
+
...media.height !== null ? { height: media.height } : {}
|
|
56
|
+
};
|
|
57
|
+
} catch {}
|
|
58
|
+
return mediaRef;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a single site setting by key
|
|
62
|
+
*
|
|
63
|
+
* Returns `undefined` if the setting has not been configured.
|
|
64
|
+
* For media settings (logo, favicon), the URL is resolved automatically.
|
|
65
|
+
*
|
|
66
|
+
* @param key - The setting key (e.g., "title", "logo", "social")
|
|
67
|
+
* @returns The setting value, or undefined if not set
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { getSiteSetting } from "dineway";
|
|
72
|
+
*
|
|
73
|
+
* const title = await getSiteSetting("title");
|
|
74
|
+
* const logo = await getSiteSetting("logo");
|
|
75
|
+
* console.log(logo?.url); // Resolved URL
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
async function getSiteSetting(key) {
|
|
79
|
+
const primed = peekRequestCache("siteSettings");
|
|
80
|
+
if (primed) return (await primed)[key];
|
|
81
|
+
return requestCached(`siteSetting:${key}`, async () => {
|
|
82
|
+
return getSiteSettingWithDb(key, await getDb());
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get a single site setting by key (with explicit db)
|
|
87
|
+
*
|
|
88
|
+
* @internal Use `getSiteSetting()` in templates. This variant is for admin routes
|
|
89
|
+
* that already have a database handle.
|
|
90
|
+
*/
|
|
91
|
+
async function getSiteSettingWithDb(key, db, storage = null) {
|
|
92
|
+
const value = await new OptionsRepository(db).get(`${SETTINGS_PREFIX}${key}`);
|
|
93
|
+
if (!value) return;
|
|
94
|
+
if ((key === "logo" || key === "favicon") && isMediaReference(value)) return await resolveMediaReference(value, db, storage);
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get all site settings
|
|
99
|
+
*
|
|
100
|
+
* Returns all configured settings. Unset values are undefined.
|
|
101
|
+
* Media references (logo/favicon) are resolved to include URLs.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* import { getSiteSettings } from "dineway";
|
|
106
|
+
*
|
|
107
|
+
* const settings = await getSiteSettings();
|
|
108
|
+
* console.log(settings.title); // "My Site"
|
|
109
|
+
* console.log(settings.logo?.url); // "/_dineway/api/media/file/abc123"
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
async function getSiteSettings() {
|
|
113
|
+
return requestCached("siteSettings", () => {
|
|
114
|
+
const versionAtCall = siteSettingsCache.version;
|
|
115
|
+
if (siteSettingsCache.cached && siteSettingsCache.cachedVersion === versionAtCall) return siteSettingsCache.cached;
|
|
116
|
+
const fetchPromise = (async () => {
|
|
117
|
+
return getSiteSettingsWithDb(await getDb());
|
|
118
|
+
})().catch((error) => {
|
|
119
|
+
if (siteSettingsCache.cached === fetchPromise) {
|
|
120
|
+
siteSettingsCache.cached = null;
|
|
121
|
+
siteSettingsCache.cachedVersion = -1;
|
|
122
|
+
}
|
|
123
|
+
throw error;
|
|
124
|
+
});
|
|
125
|
+
siteSettingsCache.cached = fetchPromise;
|
|
126
|
+
siteSettingsCache.cachedVersion = versionAtCall;
|
|
127
|
+
return fetchPromise;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get all site settings (with explicit db)
|
|
132
|
+
*
|
|
133
|
+
* @internal Use `getSiteSettings()` in templates. This variant is for admin routes
|
|
134
|
+
* that already have a database handle.
|
|
135
|
+
*/
|
|
136
|
+
async function getSiteSettingsWithDb(db, storage = null) {
|
|
137
|
+
const allOptions = await new OptionsRepository(db).getByPrefix(SETTINGS_PREFIX);
|
|
138
|
+
const settings = {};
|
|
139
|
+
for (const [key, value] of allOptions) {
|
|
140
|
+
const settingKey = key.replace(SETTINGS_PREFIX, "");
|
|
141
|
+
settings[settingKey] = value;
|
|
142
|
+
}
|
|
143
|
+
const typedSettings = settings;
|
|
144
|
+
if (typedSettings.logo) typedSettings.logo = await resolveMediaReference(typedSettings.logo, db, storage);
|
|
145
|
+
if (typedSettings.favicon) typedSettings.favicon = await resolveMediaReference(typedSettings.favicon, db, storage);
|
|
146
|
+
return typedSettings;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Set site settings (internal function used by admin API)
|
|
150
|
+
*
|
|
151
|
+
* Merges provided settings with existing ones. Only provided fields are updated.
|
|
152
|
+
* Media references should include just the mediaId; URLs are resolved on read.
|
|
153
|
+
*
|
|
154
|
+
* @param settings - Partial settings object with values to update
|
|
155
|
+
* @param db - Kysely database instance
|
|
156
|
+
* @returns Promise that resolves when settings are saved
|
|
157
|
+
*
|
|
158
|
+
* @internal
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* // Update multiple settings at once
|
|
163
|
+
* await setSiteSettings({
|
|
164
|
+
* title: "My Site",
|
|
165
|
+
* tagline: "Welcome",
|
|
166
|
+
* logo: { mediaId: "med_123", alt: "Logo" }
|
|
167
|
+
* }, db);
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
async function setSiteSettings(settings, db) {
|
|
171
|
+
const options = new OptionsRepository(db);
|
|
172
|
+
const updates = {};
|
|
173
|
+
for (const [key, value] of Object.entries(settings)) if (value !== void 0) updates[`${SETTINGS_PREFIX}${key}`] = value;
|
|
174
|
+
try {
|
|
175
|
+
await options.setMany(updates);
|
|
176
|
+
} finally {
|
|
177
|
+
invalidateSiteSettingsCache();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get a single plugin setting by key.
|
|
182
|
+
*
|
|
183
|
+
* Plugin settings are stored in the options table under
|
|
184
|
+
* `plugin:<pluginId>:settings:<key>`.
|
|
185
|
+
*/
|
|
186
|
+
async function getPluginSetting(pluginId, key) {
|
|
187
|
+
return getPluginSettingWithDb(pluginId, key, await getDb());
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get a single plugin setting by key (with explicit db).
|
|
191
|
+
*
|
|
192
|
+
* @internal Use `getPluginSetting()` in templates and plugin rendering code.
|
|
193
|
+
*/
|
|
194
|
+
async function getPluginSettingWithDb(pluginId, key, db) {
|
|
195
|
+
return await new OptionsRepository(db).get(`plugin:${pluginId}:settings:${key}`) ?? void 0;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get all persisted plugin settings for a plugin.
|
|
199
|
+
*
|
|
200
|
+
* Defaults declared in `admin.settingsSchema` are not materialized
|
|
201
|
+
* automatically; callers should apply their own fallback defaults.
|
|
202
|
+
*/
|
|
203
|
+
async function getPluginSettings(pluginId) {
|
|
204
|
+
return getPluginSettingsWithDb(pluginId, await getDb());
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get all persisted plugin settings for a plugin (with explicit db).
|
|
208
|
+
*
|
|
209
|
+
* @internal Use `getPluginSettings()` in templates and plugin rendering code.
|
|
210
|
+
*/
|
|
211
|
+
async function getPluginSettingsWithDb(pluginId, db) {
|
|
212
|
+
const prefix = `plugin:${pluginId}:settings:`;
|
|
213
|
+
const allOptions = await new OptionsRepository(db).getByPrefix(prefix);
|
|
214
|
+
const settings = {};
|
|
215
|
+
for (const [key, value] of allOptions) {
|
|
216
|
+
if (!key.startsWith(prefix)) continue;
|
|
217
|
+
settings[key.slice(prefix.length)] = value;
|
|
218
|
+
}
|
|
219
|
+
return settings;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
//#endregion
|
|
223
|
+
export { getSiteSettingsWithDb as a, getSiteSettings as i, getPluginSettings as n, setSiteSettings as o, getSiteSetting as r, createPublicMediaUrlResolver as s, getPluginSetting as t };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
+
import { a as getSiteSettingsWithDb, o as setSiteSettings } from "./settings-4XnpVMOS.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/api/handlers/settings.ts
|
|
5
|
+
var settings_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
handleSettingsGet: () => handleSettingsGet,
|
|
7
|
+
handleSettingsUpdate: () => handleSettingsUpdate
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Get all site settings
|
|
11
|
+
*/
|
|
12
|
+
async function handleSettingsGet(db, storage) {
|
|
13
|
+
try {
|
|
14
|
+
return {
|
|
15
|
+
success: true,
|
|
16
|
+
data: await getSiteSettingsWithDb(db, storage)
|
|
17
|
+
};
|
|
18
|
+
} catch {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
error: {
|
|
22
|
+
code: "SETTINGS_READ_ERROR",
|
|
23
|
+
message: "Failed to get settings"
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Update site settings
|
|
30
|
+
*/
|
|
31
|
+
async function handleSettingsUpdate(db, storage, input) {
|
|
32
|
+
try {
|
|
33
|
+
await setSiteSettings(input, db);
|
|
34
|
+
return {
|
|
35
|
+
success: true,
|
|
36
|
+
data: await getSiteSettingsWithDb(db, storage)
|
|
37
|
+
};
|
|
38
|
+
} catch {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: {
|
|
42
|
+
code: "SETTINGS_UPDATE_ERROR",
|
|
43
|
+
message: "Failed to update settings"
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { handleSettingsUpdate as n, settings_exports as r, handleSettingsGet as t };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { t as OptionsRepository } from "./options-z8VVg1Ll.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/api/setup-complete.ts
|
|
4
|
+
/**
|
|
5
|
+
* Finalize setup after the first admin user is created.
|
|
6
|
+
*
|
|
7
|
+
* Safe to call multiple times: if setup is already complete, this no-ops.
|
|
8
|
+
*/
|
|
9
|
+
async function finalizeSetup(db) {
|
|
10
|
+
const options = new OptionsRepository(db);
|
|
11
|
+
const setupComplete = await options.get("dineway:setup_complete");
|
|
12
|
+
if (setupComplete === true || setupComplete === "true") return;
|
|
13
|
+
const setupState = await options.get("dineway:setup_state");
|
|
14
|
+
if (typeof setupState?.title === "string") await options.set("dineway:site_title", setupState.title);
|
|
15
|
+
if (typeof setupState?.tagline === "string") await options.set("dineway:site_tagline", setupState.tagline);
|
|
16
|
+
await options.set("dineway:setup_complete", true);
|
|
17
|
+
await options.delete("dineway:setup_state");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { finalizeSetup as t };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/auth/setup-nonce.ts
|
|
2
|
+
/**
|
|
3
|
+
* Session binding for the first-setup admin-creation flow.
|
|
4
|
+
*
|
|
5
|
+
* Shared constants for the nonce cookie that ties /_dineway/api/setup/admin
|
|
6
|
+
* and /_dineway/api/setup/admin/verify to the same browser.
|
|
7
|
+
*/
|
|
8
|
+
/** Cookie name carrying the setup-admin session nonce. */
|
|
9
|
+
const SETUP_NONCE_COOKIE = "dineway_setup_nonce";
|
|
10
|
+
/**
|
|
11
|
+
* Cookie max-age in seconds. One hour is enough time to complete a passkey
|
|
12
|
+
* registration; if the user lingers longer the admin step can be retried.
|
|
13
|
+
*/
|
|
14
|
+
const SETUP_NONCE_MAX_AGE_SECONDS = 3600;
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { SETUP_NONCE_MAX_AGE_SECONDS as n, SETUP_NONCE_COOKIE as t };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//#region src/preview/sidecar-client.ts
|
|
2
|
+
/**
|
|
3
|
+
* Preview sidecar protocol helpers.
|
|
4
|
+
*
|
|
5
|
+
* These utilities define the signed URL and snapshot-auth contract shared
|
|
6
|
+
* by preview sidecars and the source site serving snapshot exports.
|
|
7
|
+
*/
|
|
8
|
+
/** Matches a lowercase hex string */
|
|
9
|
+
const HEX_PATTERN = /^[0-9a-f]+$/;
|
|
10
|
+
async function hmacSign(message, secret) {
|
|
11
|
+
const encoder = new TextEncoder();
|
|
12
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
|
|
13
|
+
name: "HMAC",
|
|
14
|
+
hash: "SHA-256"
|
|
15
|
+
}, false, ["sign"]);
|
|
16
|
+
const buffer = await crypto.subtle.sign("HMAC", key, encoder.encode(message));
|
|
17
|
+
return Array.from(new Uint8Array(buffer), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
18
|
+
}
|
|
19
|
+
async function signPreviewUrl(previewBase, source, secret, ttl = 3600) {
|
|
20
|
+
const exp = Math.floor(Date.now() / 1e3) + ttl;
|
|
21
|
+
const sig = await hmacSign(`${source}:${exp}`, secret);
|
|
22
|
+
const url = new URL(previewBase);
|
|
23
|
+
url.searchParams.set("source", source);
|
|
24
|
+
url.searchParams.set("exp", String(exp));
|
|
25
|
+
url.searchParams.set("sig", sig);
|
|
26
|
+
return url.toString();
|
|
27
|
+
}
|
|
28
|
+
function buildPreviewSignatureHeader(signature) {
|
|
29
|
+
return `${signature.source}:${signature.exp}:${signature.sig}`;
|
|
30
|
+
}
|
|
31
|
+
function parsePreviewSignatureHeader(header) {
|
|
32
|
+
const lastColon = header.lastIndexOf(":");
|
|
33
|
+
if (lastColon <= 0) return null;
|
|
34
|
+
const sig = header.substring(lastColon + 1);
|
|
35
|
+
if (sig.length !== 64 || !HEX_PATTERN.test(sig)) return null;
|
|
36
|
+
const rest = header.substring(0, lastColon);
|
|
37
|
+
const secondLastColon = rest.lastIndexOf(":");
|
|
38
|
+
if (secondLastColon <= 0) return null;
|
|
39
|
+
const source = rest.substring(0, secondLastColon);
|
|
40
|
+
const exp = parseInt(rest.substring(secondLastColon + 1), 10);
|
|
41
|
+
if (isNaN(exp) || source.length === 0) return null;
|
|
42
|
+
return {
|
|
43
|
+
source,
|
|
44
|
+
exp,
|
|
45
|
+
sig
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function verifyPreviewSignature(source, exp, sig, secret) {
|
|
49
|
+
if (exp < Date.now() / 1e3) return false;
|
|
50
|
+
if (sig.length !== 64 || !HEX_PATTERN.test(sig)) return false;
|
|
51
|
+
const sigBytes = new Uint8Array(32);
|
|
52
|
+
for (let i = 0; i < 64; i += 2) sigBytes[i / 2] = parseInt(sig.substring(i, i + 2), 16);
|
|
53
|
+
const encoder = new TextEncoder();
|
|
54
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
|
|
55
|
+
name: "HMAC",
|
|
56
|
+
hash: "SHA-256"
|
|
57
|
+
}, false, ["verify"]);
|
|
58
|
+
return crypto.subtle.verify("HMAC", key, sigBytes, encoder.encode(`${source}:${exp}`));
|
|
59
|
+
}
|
|
60
|
+
const defaultPreviewSidecarClient = {
|
|
61
|
+
signPreviewUrl,
|
|
62
|
+
buildSnapshotSignatureHeader: buildPreviewSignatureHeader
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
export { verifyPreviewSignature as a, signPreviewUrl as i, defaultPreviewSidecarClient as n, parsePreviewSignatureHeader as r, buildPreviewSignatureHeader as t };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { n as decodeCursor, r as encodeCursor } from "./types-Bs6lTBBW.mjs";
|
|
2
|
+
import { ulid } from "ulidx";
|
|
3
|
+
|
|
4
|
+
//#region src/database/repositories/site-activity.ts
|
|
5
|
+
var SiteActivityRepository = class {
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
async create(input) {
|
|
10
|
+
const id = ulid();
|
|
11
|
+
const values = {
|
|
12
|
+
id,
|
|
13
|
+
actor_type: input.actorType,
|
|
14
|
+
actor_id: input.actorId,
|
|
15
|
+
auth_metadata: input.authMetadata ? JSON.stringify(input.authMetadata) : null,
|
|
16
|
+
action_type: input.actionType,
|
|
17
|
+
subject_type: input.subjectType,
|
|
18
|
+
subject_id: input.subjectId ?? null,
|
|
19
|
+
related_subject_type: input.relatedSubjectType ?? null,
|
|
20
|
+
related_subject_id: input.relatedSubjectId ?? null,
|
|
21
|
+
source_type: input.sourceType ?? null,
|
|
22
|
+
source_name: input.sourceName ?? null,
|
|
23
|
+
result_status: input.resultStatus ?? "succeeded",
|
|
24
|
+
scope: input.scope,
|
|
25
|
+
summary: input.summary,
|
|
26
|
+
detail: input.detail ? JSON.stringify(input.detail) : null,
|
|
27
|
+
created_at: input.createdAt ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
28
|
+
};
|
|
29
|
+
await this.db.insertInto("_dineway_activity_log").values(values).execute();
|
|
30
|
+
const activity = await this.findById(id);
|
|
31
|
+
if (!activity) throw new Error("Failed to create site activity");
|
|
32
|
+
return activity;
|
|
33
|
+
}
|
|
34
|
+
async findById(id) {
|
|
35
|
+
const row = await this.db.selectFrom("_dineway_activity_log").selectAll().where("id", "=", id).executeTakeFirst();
|
|
36
|
+
return row ? rowToSiteActivity(row) : null;
|
|
37
|
+
}
|
|
38
|
+
async findTimeline(query = {}) {
|
|
39
|
+
if (query.scopes && query.scopes.length === 0) return { items: [] };
|
|
40
|
+
const limit = Math.min(Math.max(1, query.limit ?? 50), 100);
|
|
41
|
+
let q = this.db.selectFrom("_dineway_activity_log").selectAll().orderBy("created_at", "desc").orderBy("id", "desc").limit(limit + 1);
|
|
42
|
+
if (query.scopes) q = q.where("scope", "in", query.scopes);
|
|
43
|
+
if (query.actorType) q = q.where("actor_type", "=", query.actorType);
|
|
44
|
+
if (query.actorId) q = q.where("actor_id", "=", query.actorId);
|
|
45
|
+
if (query.actionType) q = q.where("action_type", "=", query.actionType);
|
|
46
|
+
if (query.subjectType) q = q.where("subject_type", "=", query.subjectType);
|
|
47
|
+
if (query.subjectId) q = q.where("subject_id", "=", query.subjectId);
|
|
48
|
+
if (query.relatedSubjectType) q = q.where("related_subject_type", "=", query.relatedSubjectType);
|
|
49
|
+
if (query.relatedSubjectId) q = q.where("related_subject_id", "=", query.relatedSubjectId);
|
|
50
|
+
if (query.sourceType) q = q.where("source_type", "=", query.sourceType);
|
|
51
|
+
if (query.sourceName) q = q.where("source_name", "=", query.sourceName);
|
|
52
|
+
if (query.resultStatus) q = q.where("result_status", "=", query.resultStatus);
|
|
53
|
+
if (query.since) q = q.where("created_at", ">=", query.since);
|
|
54
|
+
if (query.until) q = q.where("created_at", "<=", query.until);
|
|
55
|
+
if (query.cursor) {
|
|
56
|
+
const decoded = decodeCursor(query.cursor);
|
|
57
|
+
if (decoded) q = q.where((eb) => eb.or([eb("created_at", "<", decoded.orderValue), eb.and([eb("created_at", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
|
|
58
|
+
}
|
|
59
|
+
const rows = await q.execute();
|
|
60
|
+
const items = rows.slice(0, limit).map((row) => rowToSiteActivity(row));
|
|
61
|
+
const result = { items };
|
|
62
|
+
if (rows.length > limit && items.length > 0) {
|
|
63
|
+
const last = items.at(-1);
|
|
64
|
+
result.nextCursor = encodeCursor(last.createdAt, last.id);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
function rowToSiteActivity(row) {
|
|
70
|
+
return {
|
|
71
|
+
id: row.id,
|
|
72
|
+
actorType: row.actor_type,
|
|
73
|
+
actorId: row.actor_id,
|
|
74
|
+
authMetadata: parseRecord(row.auth_metadata),
|
|
75
|
+
actionType: row.action_type,
|
|
76
|
+
subjectType: row.subject_type,
|
|
77
|
+
subjectId: row.subject_id,
|
|
78
|
+
relatedSubjectType: row.related_subject_type,
|
|
79
|
+
relatedSubjectId: row.related_subject_id,
|
|
80
|
+
sourceType: row.source_type,
|
|
81
|
+
sourceName: row.source_name,
|
|
82
|
+
resultStatus: row.result_status,
|
|
83
|
+
scope: row.scope,
|
|
84
|
+
summary: row.summary,
|
|
85
|
+
detail: parseRecord(row.detail),
|
|
86
|
+
createdAt: row.created_at
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function parseRecord(value) {
|
|
90
|
+
if (!value) return null;
|
|
91
|
+
try {
|
|
92
|
+
const parsed = JSON.parse(value);
|
|
93
|
+
if (isRecord(parsed)) return parsed;
|
|
94
|
+
return null;
|
|
95
|
+
} catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function isRecord(value) {
|
|
100
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
export { SiteActivityRepository as t };
|