@actuate-media/cms-core 0.83.0 → 0.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/content/structured-data.d.ts +1 -0
- package/dist/content/structured-data.d.ts.map +1 -1
- package/dist/content/structured-data.js +1 -1
- package/dist/content/structured-data.js.map +1 -1
- package/dist/next-site.d.ts +28 -0
- package/dist/next-site.d.ts.map +1 -0
- package/dist/next-site.js +58 -0
- package/dist/next-site.js.map +1 -0
- package/dist/sections/index.d.ts +2 -0
- package/dist/sections/index.d.ts.map +1 -1
- package/dist/sections/index.js +1 -0
- package/dist/sections/index.js.map +1 -1
- package/dist/sections/registry.d.ts.map +1 -1
- package/dist/sections/registry.js +86 -0
- package/dist/sections/registry.js.map +1 -1
- package/dist/sections/types.d.ts +1 -1
- package/dist/sections/types.d.ts.map +1 -1
- package/dist/sections/validate.d.ts.map +1 -1
- package/dist/sections/validate.js +23 -0
- package/dist/sections/validate.js.map +1 -1
- package/dist/sections/widget-embed.d.ts +45 -0
- package/dist/sections/widget-embed.d.ts.map +1 -0
- package/dist/sections/widget-embed.js +129 -0
- package/dist/sections/widget-embed.js.map +1 -0
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +11 -0
- package/dist/seo/page-meta.js.map +1 -1
- package/package.json +21 -1
- package/dist/__tests__/actions/document-crud.test.d.ts +0 -2
- package/dist/__tests__/actions/document-crud.test.d.ts.map +0 -1
- package/dist/__tests__/actions/document-crud.test.js +0 -442
- package/dist/__tests__/actions/document-crud.test.js.map +0 -1
- package/dist/__tests__/actions/seo-fields-update.test.d.ts +0 -2
- package/dist/__tests__/actions/seo-fields-update.test.d.ts.map +0 -1
- package/dist/__tests__/actions/seo-fields-update.test.js +0 -93
- package/dist/__tests__/actions/seo-fields-update.test.js.map +0 -1
- package/dist/__tests__/ai/ai.test.d.ts +0 -2
- package/dist/__tests__/ai/ai.test.d.ts.map +0 -1
- package/dist/__tests__/ai/ai.test.js +0 -266
- package/dist/__tests__/ai/ai.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-alignment.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-alignment.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-alignment.test.js +0 -38
- package/dist/__tests__/ai/brand-voice-alignment.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-analyze.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-analyze.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-analyze.test.js +0 -117
- package/dist/__tests__/ai/brand-voice-analyze.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-document.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-document.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-document.test.js +0 -74
- package/dist/__tests__/ai/brand-voice-document.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-fix.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-fix.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-fix.test.js +0 -34
- package/dist/__tests__/ai/brand-voice-fix.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-sources.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-sources.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-sources.test.js +0 -14
- package/dist/__tests__/ai/brand-voice-sources.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice-structured.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice-structured.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice-structured.test.js +0 -49
- package/dist/__tests__/ai/brand-voice-structured.test.js.map +0 -1
- package/dist/__tests__/ai/brand-voice.test.d.ts +0 -2
- package/dist/__tests__/ai/brand-voice.test.d.ts.map +0 -1
- package/dist/__tests__/ai/brand-voice.test.js +0 -82
- package/dist/__tests__/ai/brand-voice.test.js.map +0 -1
- package/dist/__tests__/ai/content-writing-generate.test.d.ts +0 -2
- package/dist/__tests__/ai/content-writing-generate.test.d.ts.map +0 -1
- package/dist/__tests__/ai/content-writing-generate.test.js +0 -38
- package/dist/__tests__/ai/content-writing-generate.test.js.map +0 -1
- package/dist/__tests__/ai/resolve.test.d.ts +0 -2
- package/dist/__tests__/ai/resolve.test.d.ts.map +0 -1
- package/dist/__tests__/ai/resolve.test.js +0 -164
- package/dist/__tests__/ai/resolve.test.js.map +0 -1
- package/dist/__tests__/ai/runtime.test.d.ts +0 -2
- package/dist/__tests__/ai/runtime.test.d.ts.map +0 -1
- package/dist/__tests__/ai/runtime.test.js +0 -392
- package/dist/__tests__/ai/runtime.test.js.map +0 -1
- package/dist/__tests__/ai/sampling.test.d.ts +0 -2
- package/dist/__tests__/ai/sampling.test.d.ts.map +0 -1
- package/dist/__tests__/ai/sampling.test.js +0 -25
- package/dist/__tests__/ai/sampling.test.js.map +0 -1
- package/dist/__tests__/api/admin-contracts.test.d.ts +0 -2
- package/dist/__tests__/api/admin-contracts.test.d.ts.map +0 -1
- package/dist/__tests__/api/admin-contracts.test.js +0 -186
- package/dist/__tests__/api/admin-contracts.test.js.map +0 -1
- package/dist/__tests__/api/ai-crawlers.test.d.ts +0 -2
- package/dist/__tests__/api/ai-crawlers.test.d.ts.map +0 -1
- package/dist/__tests__/api/ai-crawlers.test.js +0 -194
- package/dist/__tests__/api/ai-crawlers.test.js.map +0 -1
- package/dist/__tests__/api/ai-quality.test.d.ts +0 -2
- package/dist/__tests__/api/ai-quality.test.d.ts.map +0 -1
- package/dist/__tests__/api/ai-quality.test.js +0 -721
- package/dist/__tests__/api/ai-quality.test.js.map +0 -1
- package/dist/__tests__/api/ai-status.test.d.ts +0 -2
- package/dist/__tests__/api/ai-status.test.d.ts.map +0 -1
- package/dist/__tests__/api/ai-status.test.js +0 -110
- package/dist/__tests__/api/ai-status.test.js.map +0 -1
- package/dist/__tests__/api/api-key-auth.test.d.ts +0 -2
- package/dist/__tests__/api/api-key-auth.test.d.ts.map +0 -1
- package/dist/__tests__/api/api-key-auth.test.js +0 -254
- package/dist/__tests__/api/api-key-auth.test.js.map +0 -1
- package/dist/__tests__/api/appearance-routes.test.d.ts +0 -2
- package/dist/__tests__/api/appearance-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/appearance-routes.test.js +0 -134
- package/dist/__tests__/api/appearance-routes.test.js.map +0 -1
- package/dist/__tests__/api/cache-headers.test.d.ts +0 -2
- package/dist/__tests__/api/cache-headers.test.d.ts.map +0 -1
- package/dist/__tests__/api/cache-headers.test.js +0 -135
- package/dist/__tests__/api/cache-headers.test.js.map +0 -1
- package/dist/__tests__/api/collection-introspection.test.d.ts +0 -2
- package/dist/__tests__/api/collection-introspection.test.d.ts.map +0 -1
- package/dist/__tests__/api/collection-introspection.test.js +0 -129
- package/dist/__tests__/api/collection-introspection.test.js.map +0 -1
- package/dist/__tests__/api/collection-read-access.test.d.ts +0 -2
- package/dist/__tests__/api/collection-read-access.test.d.ts.map +0 -1
- package/dist/__tests__/api/collection-read-access.test.js +0 -140
- package/dist/__tests__/api/collection-read-access.test.js.map +0 -1
- package/dist/__tests__/api/collections-ai-create.test.d.ts +0 -2
- package/dist/__tests__/api/collections-ai-create.test.d.ts.map +0 -1
- package/dist/__tests__/api/collections-ai-create.test.js +0 -313
- package/dist/__tests__/api/collections-ai-create.test.js.map +0 -1
- package/dist/__tests__/api/collections-discovery.test.d.ts +0 -2
- package/dist/__tests__/api/collections-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/api/collections-discovery.test.js +0 -348
- package/dist/__tests__/api/collections-discovery.test.js.map +0 -1
- package/dist/__tests__/api/comments-routes.test.d.ts +0 -2
- package/dist/__tests__/api/comments-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/comments-routes.test.js +0 -266
- package/dist/__tests__/api/comments-routes.test.js.map +0 -1
- package/dist/__tests__/api/cron-routes.test.d.ts +0 -2
- package/dist/__tests__/api/cron-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/cron-routes.test.js +0 -67
- package/dist/__tests__/api/cron-routes.test.js.map +0 -1
- package/dist/__tests__/api/data-filters-routes.test.d.ts +0 -2
- package/dist/__tests__/api/data-filters-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/data-filters-routes.test.js +0 -131
- package/dist/__tests__/api/data-filters-routes.test.js.map +0 -1
- package/dist/__tests__/api/email-settings-routes.test.d.ts +0 -2
- package/dist/__tests__/api/email-settings-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/email-settings-routes.test.js +0 -240
- package/dist/__tests__/api/email-settings-routes.test.js.map +0 -1
- package/dist/__tests__/api/field-values-routes.test.d.ts +0 -2
- package/dist/__tests__/api/field-values-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/field-values-routes.test.js +0 -147
- package/dist/__tests__/api/field-values-routes.test.js.map +0 -1
- package/dist/__tests__/api/form-webhooks.test.d.ts +0 -2
- package/dist/__tests__/api/form-webhooks.test.d.ts.map +0 -1
- package/dist/__tests__/api/form-webhooks.test.js +0 -162
- package/dist/__tests__/api/form-webhooks.test.js.map +0 -1
- package/dist/__tests__/api/globals-routes.test.d.ts +0 -2
- package/dist/__tests__/api/globals-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/globals-routes.test.js +0 -100
- package/dist/__tests__/api/globals-routes.test.js.map +0 -1
- package/dist/__tests__/api/health.test.d.ts +0 -2
- package/dist/__tests__/api/health.test.d.ts.map +0 -1
- package/dist/__tests__/api/health.test.js +0 -144
- package/dist/__tests__/api/health.test.js.map +0 -1
- package/dist/__tests__/api/llms-txt.test.d.ts +0 -2
- package/dist/__tests__/api/llms-txt.test.d.ts.map +0 -1
- package/dist/__tests__/api/llms-txt.test.js +0 -423
- package/dist/__tests__/api/llms-txt.test.js.map +0 -1
- package/dist/__tests__/api/md-route.test.d.ts +0 -2
- package/dist/__tests__/api/md-route.test.d.ts.map +0 -1
- package/dist/__tests__/api/md-route.test.js +0 -106
- package/dist/__tests__/api/md-route.test.js.map +0 -1
- package/dist/__tests__/api/media-upload-storage.test.d.ts +0 -2
- package/dist/__tests__/api/media-upload-storage.test.d.ts.map +0 -1
- package/dist/__tests__/api/media-upload-storage.test.js +0 -171
- package/dist/__tests__/api/media-upload-storage.test.js.map +0 -1
- package/dist/__tests__/api/notifications-routes.test.d.ts +0 -2
- package/dist/__tests__/api/notifications-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/notifications-routes.test.js +0 -270
- package/dist/__tests__/api/notifications-routes.test.js.map +0 -1
- package/dist/__tests__/api/page-sections-routes.test.d.ts +0 -2
- package/dist/__tests__/api/page-sections-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/page-sections-routes.test.js +0 -501
- package/dist/__tests__/api/page-sections-routes.test.js.map +0 -1
- package/dist/__tests__/api/preview-and-scheduling.test.d.ts +0 -2
- package/dist/__tests__/api/preview-and-scheduling.test.d.ts.map +0 -1
- package/dist/__tests__/api/preview-and-scheduling.test.js +0 -479
- package/dist/__tests__/api/preview-and-scheduling.test.js.map +0 -1
- package/dist/__tests__/api/public-forms.test.d.ts +0 -2
- package/dist/__tests__/api/public-forms.test.d.ts.map +0 -1
- package/dist/__tests__/api/public-forms.test.js +0 -125
- package/dist/__tests__/api/public-forms.test.js.map +0 -1
- package/dist/__tests__/api/public-globals.test.d.ts +0 -2
- package/dist/__tests__/api/public-globals.test.d.ts.map +0 -1
- package/dist/__tests__/api/public-globals.test.js +0 -96
- package/dist/__tests__/api/public-globals.test.js.map +0 -1
- package/dist/__tests__/api/public-navigations.test.d.ts +0 -2
- package/dist/__tests__/api/public-navigations.test.d.ts.map +0 -1
- package/dist/__tests__/api/public-navigations.test.js +0 -77
- package/dist/__tests__/api/public-navigations.test.js.map +0 -1
- package/dist/__tests__/api/public-seo.test.d.ts +0 -2
- package/dist/__tests__/api/public-seo.test.d.ts.map +0 -1
- package/dist/__tests__/api/public-seo.test.js +0 -834
- package/dist/__tests__/api/public-seo.test.js.map +0 -1
- package/dist/__tests__/api/resolve-layout-bridge.test.d.ts +0 -2
- package/dist/__tests__/api/resolve-layout-bridge.test.d.ts.map +0 -1
- package/dist/__tests__/api/resolve-layout-bridge.test.js +0 -165
- package/dist/__tests__/api/resolve-layout-bridge.test.js.map +0 -1
- package/dist/__tests__/api/route-contracts.test.d.ts +0 -2
- package/dist/__tests__/api/route-contracts.test.d.ts.map +0 -1
- package/dist/__tests__/api/route-contracts.test.js +0 -466
- package/dist/__tests__/api/route-contracts.test.js.map +0 -1
- package/dist/__tests__/api/security-routes.test.d.ts +0 -2
- package/dist/__tests__/api/security-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/security-routes.test.js +0 -212
- package/dist/__tests__/api/security-routes.test.js.map +0 -1
- package/dist/__tests__/api/seo-read-access.test.d.ts +0 -2
- package/dist/__tests__/api/seo-read-access.test.d.ts.map +0 -1
- package/dist/__tests__/api/seo-read-access.test.js +0 -101
- package/dist/__tests__/api/seo-read-access.test.js.map +0 -1
- package/dist/__tests__/api/seo-summary-ssrf.test.d.ts +0 -2
- package/dist/__tests__/api/seo-summary-ssrf.test.d.ts.map +0 -1
- package/dist/__tests__/api/seo-summary-ssrf.test.js +0 -80
- package/dist/__tests__/api/seo-summary-ssrf.test.js.map +0 -1
- package/dist/__tests__/api/sitemap-pagination.test.d.ts +0 -2
- package/dist/__tests__/api/sitemap-pagination.test.d.ts.map +0 -1
- package/dist/__tests__/api/sitemap-pagination.test.js +0 -100
- package/dist/__tests__/api/sitemap-pagination.test.js.map +0 -1
- package/dist/__tests__/api/stats-collection-filter.test.d.ts +0 -2
- package/dist/__tests__/api/stats-collection-filter.test.d.ts.map +0 -1
- package/dist/__tests__/api/stats-collection-filter.test.js +0 -190
- package/dist/__tests__/api/stats-collection-filter.test.js.map +0 -1
- package/dist/__tests__/api/stats-routes.test.d.ts +0 -2
- package/dist/__tests__/api/stats-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/stats-routes.test.js +0 -251
- package/dist/__tests__/api/stats-routes.test.js.map +0 -1
- package/dist/__tests__/api/stats-seo-cache.test.d.ts +0 -2
- package/dist/__tests__/api/stats-seo-cache.test.d.ts.map +0 -1
- package/dist/__tests__/api/stats-seo-cache.test.js +0 -96
- package/dist/__tests__/api/stats-seo-cache.test.js.map +0 -1
- package/dist/__tests__/api/totp-login.test.d.ts +0 -2
- package/dist/__tests__/api/totp-login.test.d.ts.map +0 -1
- package/dist/__tests__/api/totp-login.test.js +0 -115
- package/dist/__tests__/api/totp-login.test.js.map +0 -1
- package/dist/__tests__/api/updates-routes.test.d.ts +0 -2
- package/dist/__tests__/api/updates-routes.test.d.ts.map +0 -1
- package/dist/__tests__/api/updates-routes.test.js +0 -248
- package/dist/__tests__/api/updates-routes.test.js.map +0 -1
- package/dist/__tests__/api/users-detail.test.d.ts +0 -2
- package/dist/__tests__/api/users-detail.test.d.ts.map +0 -1
- package/dist/__tests__/api/users-detail.test.js +0 -401
- package/dist/__tests__/api/users-detail.test.js.map +0 -1
- package/dist/__tests__/api/users-invite.test.d.ts +0 -2
- package/dist/__tests__/api/users-invite.test.d.ts.map +0 -1
- package/dist/__tests__/api/users-invite.test.js +0 -221
- package/dist/__tests__/api/users-invite.test.js.map +0 -1
- package/dist/__tests__/api/users-search.test.d.ts +0 -2
- package/dist/__tests__/api/users-search.test.d.ts.map +0 -1
- package/dist/__tests__/api/users-search.test.js +0 -182
- package/dist/__tests__/api/users-search.test.js.map +0 -1
- package/dist/__tests__/appearance/appearance.test.d.ts +0 -2
- package/dist/__tests__/appearance/appearance.test.d.ts.map +0 -1
- package/dist/__tests__/appearance/appearance.test.js +0 -287
- package/dist/__tests__/appearance/appearance.test.js.map +0 -1
- package/dist/__tests__/appearance/favicon-icon.test.d.ts +0 -2
- package/dist/__tests__/appearance/favicon-icon.test.d.ts.map +0 -1
- package/dist/__tests__/appearance/favicon-icon.test.js +0 -12
- package/dist/__tests__/appearance/favicon-icon.test.js.map +0 -1
- package/dist/__tests__/auth/invites.test.d.ts +0 -2
- package/dist/__tests__/auth/invites.test.d.ts.map +0 -1
- package/dist/__tests__/auth/invites.test.js +0 -181
- package/dist/__tests__/auth/invites.test.js.map +0 -1
- package/dist/__tests__/auth/oauth.test.d.ts +0 -2
- package/dist/__tests__/auth/oauth.test.d.ts.map +0 -1
- package/dist/__tests__/auth/oauth.test.js +0 -408
- package/dist/__tests__/auth/oauth.test.js.map +0 -1
- package/dist/__tests__/auth/password.test.d.ts +0 -2
- package/dist/__tests__/auth/password.test.d.ts.map +0 -1
- package/dist/__tests__/auth/password.test.js +0 -226
- package/dist/__tests__/auth/password.test.js.map +0 -1
- package/dist/__tests__/auth/reset.test.d.ts +0 -2
- package/dist/__tests__/auth/reset.test.d.ts.map +0 -1
- package/dist/__tests__/auth/reset.test.js +0 -355
- package/dist/__tests__/auth/reset.test.js.map +0 -1
- package/dist/__tests__/auth/roles.test.d.ts +0 -2
- package/dist/__tests__/auth/roles.test.d.ts.map +0 -1
- package/dist/__tests__/auth/roles.test.js +0 -60
- package/dist/__tests__/auth/roles.test.js.map +0 -1
- package/dist/__tests__/auth/session.test.d.ts +0 -2
- package/dist/__tests__/auth/session.test.d.ts.map +0 -1
- package/dist/__tests__/auth/session.test.js +0 -119
- package/dist/__tests__/auth/session.test.js.map +0 -1
- package/dist/__tests__/auth/team.test.d.ts +0 -2
- package/dist/__tests__/auth/team.test.d.ts.map +0 -1
- package/dist/__tests__/auth/team.test.js +0 -154
- package/dist/__tests__/auth/team.test.js.map +0 -1
- package/dist/__tests__/auth/totp.test.d.ts +0 -2
- package/dist/__tests__/auth/totp.test.d.ts.map +0 -1
- package/dist/__tests__/auth/totp.test.js +0 -52
- package/dist/__tests__/auth/totp.test.js.map +0 -1
- package/dist/__tests__/auth/user-admin.test.d.ts +0 -2
- package/dist/__tests__/auth/user-admin.test.d.ts.map +0 -1
- package/dist/__tests__/auth/user-admin.test.js +0 -200
- package/dist/__tests__/auth/user-admin.test.js.map +0 -1
- package/dist/__tests__/billing/stripe-meter.test.d.ts +0 -2
- package/dist/__tests__/billing/stripe-meter.test.d.ts.map +0 -1
- package/dist/__tests__/billing/stripe-meter.test.js +0 -86
- package/dist/__tests__/billing/stripe-meter.test.js.map +0 -1
- package/dist/__tests__/codegen/generate-types.test.d.ts +0 -2
- package/dist/__tests__/codegen/generate-types.test.d.ts.map +0 -1
- package/dist/__tests__/codegen/generate-types.test.js +0 -173
- package/dist/__tests__/codegen/generate-types.test.js.map +0 -1
- package/dist/__tests__/collections/presets.test.d.ts +0 -2
- package/dist/__tests__/collections/presets.test.d.ts.map +0 -1
- package/dist/__tests__/collections/presets.test.js +0 -184
- package/dist/__tests__/collections/presets.test.js.map +0 -1
- package/dist/__tests__/config/runtime.test.d.ts +0 -2
- package/dist/__tests__/config/runtime.test.d.ts.map +0 -1
- package/dist/__tests__/config/runtime.test.js +0 -65
- package/dist/__tests__/config/runtime.test.js.map +0 -1
- package/dist/__tests__/content/slug.test.d.ts +0 -2
- package/dist/__tests__/content/slug.test.d.ts.map +0 -1
- package/dist/__tests__/content/slug.test.js +0 -68
- package/dist/__tests__/content/slug.test.js.map +0 -1
- package/dist/__tests__/content-health/scanner.test.d.ts +0 -2
- package/dist/__tests__/content-health/scanner.test.d.ts.map +0 -1
- package/dist/__tests__/content-health/scanner.test.js +0 -151
- package/dist/__tests__/content-health/scanner.test.js.map +0 -1
- package/dist/__tests__/cron/cron.test.d.ts +0 -2
- package/dist/__tests__/cron/cron.test.d.ts.map +0 -1
- package/dist/__tests__/cron/cron.test.js +0 -340
- package/dist/__tests__/cron/cron.test.js.map +0 -1
- package/dist/__tests__/db/model-types-freshness.test.d.ts +0 -2
- package/dist/__tests__/db/model-types-freshness.test.d.ts.map +0 -1
- package/dist/__tests__/db/model-types-freshness.test.js +0 -46
- package/dist/__tests__/db/model-types-freshness.test.js.map +0 -1
- package/dist/__tests__/diagnostics/api-metrics.test.d.ts +0 -2
- package/dist/__tests__/diagnostics/api-metrics.test.d.ts.map +0 -1
- package/dist/__tests__/diagnostics/api-metrics.test.js +0 -153
- package/dist/__tests__/diagnostics/api-metrics.test.js.map +0 -1
- package/dist/__tests__/diagnostics/env.test.d.ts +0 -2
- package/dist/__tests__/diagnostics/env.test.d.ts.map +0 -1
- package/dist/__tests__/diagnostics/env.test.js +0 -247
- package/dist/__tests__/diagnostics/env.test.js.map +0 -1
- package/dist/__tests__/diagnostics/logger.test.d.ts +0 -2
- package/dist/__tests__/diagnostics/logger.test.d.ts.map +0 -1
- package/dist/__tests__/diagnostics/logger.test.js +0 -111
- package/dist/__tests__/diagnostics/logger.test.js.map +0 -1
- package/dist/__tests__/diagnostics/sentry.test.d.ts +0 -2
- package/dist/__tests__/diagnostics/sentry.test.d.ts.map +0 -1
- package/dist/__tests__/diagnostics/sentry.test.js +0 -60
- package/dist/__tests__/diagnostics/sentry.test.js.map +0 -1
- package/dist/__tests__/email/resolve.test.d.ts +0 -2
- package/dist/__tests__/email/resolve.test.d.ts.map +0 -1
- package/dist/__tests__/email/resolve.test.js +0 -90
- package/dist/__tests__/email/resolve.test.js.map +0 -1
- package/dist/__tests__/email/sender.test.d.ts +0 -2
- package/dist/__tests__/email/sender.test.d.ts.map +0 -1
- package/dist/__tests__/email/sender.test.js +0 -33
- package/dist/__tests__/email/sender.test.js.map +0 -1
- package/dist/__tests__/email/settings-store.test.d.ts +0 -2
- package/dist/__tests__/email/settings-store.test.d.ts.map +0 -1
- package/dist/__tests__/email/settings-store.test.js +0 -149
- package/dist/__tests__/email/settings-store.test.js.map +0 -1
- package/dist/__tests__/fields/component-block.test.d.ts +0 -2
- package/dist/__tests__/fields/component-block.test.d.ts.map +0 -1
- package/dist/__tests__/fields/component-block.test.js +0 -129
- package/dist/__tests__/fields/component-block.test.js.map +0 -1
- package/dist/__tests__/fields/presets.test.d.ts +0 -2
- package/dist/__tests__/fields/presets.test.d.ts.map +0 -1
- package/dist/__tests__/fields/presets.test.js +0 -99
- package/dist/__tests__/fields/presets.test.js.map +0 -1
- package/dist/__tests__/fields/relations.test.d.ts +0 -2
- package/dist/__tests__/fields/relations.test.d.ts.map +0 -1
- package/dist/__tests__/fields/relations.test.js +0 -297
- package/dist/__tests__/fields/relations.test.js.map +0 -1
- package/dist/__tests__/forms/client-validation.test.d.ts +0 -2
- package/dist/__tests__/forms/client-validation.test.d.ts.map +0 -1
- package/dist/__tests__/forms/client-validation.test.js +0 -98
- package/dist/__tests__/forms/client-validation.test.js.map +0 -1
- package/dist/__tests__/forms/encryption.test.d.ts +0 -2
- package/dist/__tests__/forms/encryption.test.d.ts.map +0 -1
- package/dist/__tests__/forms/encryption.test.js +0 -84
- package/dist/__tests__/forms/encryption.test.js.map +0 -1
- package/dist/__tests__/forms/entries-export.test.d.ts +0 -2
- package/dist/__tests__/forms/entries-export.test.d.ts.map +0 -1
- package/dist/__tests__/forms/entries-export.test.js +0 -69
- package/dist/__tests__/forms/entries-export.test.js.map +0 -1
- package/dist/__tests__/forms/forms-service.test.d.ts +0 -2
- package/dist/__tests__/forms/forms-service.test.d.ts.map +0 -1
- package/dist/__tests__/forms/forms-service.test.js +0 -193
- package/dist/__tests__/forms/forms-service.test.js.map +0 -1
- package/dist/__tests__/forms/notify.test.d.ts +0 -2
- package/dist/__tests__/forms/notify.test.d.ts.map +0 -1
- package/dist/__tests__/forms/notify.test.js +0 -114
- package/dist/__tests__/forms/notify.test.js.map +0 -1
- package/dist/__tests__/forms/spam.test.d.ts +0 -2
- package/dist/__tests__/forms/spam.test.d.ts.map +0 -1
- package/dist/__tests__/forms/spam.test.js +0 -115
- package/dist/__tests__/forms/spam.test.js.map +0 -1
- package/dist/__tests__/forms/submission-files.test.d.ts +0 -2
- package/dist/__tests__/forms/submission-files.test.d.ts.map +0 -1
- package/dist/__tests__/forms/submission-files.test.js +0 -65
- package/dist/__tests__/forms/submission-files.test.js.map +0 -1
- package/dist/__tests__/forms/submission-pipeline.test.d.ts +0 -2
- package/dist/__tests__/forms/submission-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/forms/submission-pipeline.test.js +0 -131
- package/dist/__tests__/forms/submission-pipeline.test.js.map +0 -1
- package/dist/__tests__/forms/submission-validation.test.d.ts +0 -2
- package/dist/__tests__/forms/submission-validation.test.d.ts.map +0 -1
- package/dist/__tests__/forms/submission-validation.test.js +0 -108
- package/dist/__tests__/forms/submission-validation.test.js.map +0 -1
- package/dist/__tests__/forms/webhooks.test.d.ts +0 -2
- package/dist/__tests__/forms/webhooks.test.d.ts.map +0 -1
- package/dist/__tests__/forms/webhooks.test.js +0 -203
- package/dist/__tests__/forms/webhooks.test.js.map +0 -1
- package/dist/__tests__/media/seo.test.d.ts +0 -2
- package/dist/__tests__/media/seo.test.d.ts.map +0 -1
- package/dist/__tests__/media/seo.test.js +0 -186
- package/dist/__tests__/media/seo.test.js.map +0 -1
- package/dist/__tests__/middleware.test.d.ts +0 -2
- package/dist/__tests__/middleware.test.d.ts.map +0 -1
- package/dist/__tests__/middleware.test.js +0 -127
- package/dist/__tests__/middleware.test.js.map +0 -1
- package/dist/__tests__/next.test.d.ts +0 -2
- package/dist/__tests__/next.test.d.ts.map +0 -1
- package/dist/__tests__/next.test.js +0 -118
- package/dist/__tests__/next.test.js.map +0 -1
- package/dist/__tests__/plan/features.test.d.ts +0 -2
- package/dist/__tests__/plan/features.test.d.ts.map +0 -1
- package/dist/__tests__/plan/features.test.js +0 -35
- package/dist/__tests__/plan/features.test.js.map +0 -1
- package/dist/__tests__/preview-event-bus.test.d.ts +0 -2
- package/dist/__tests__/preview-event-bus.test.d.ts.map +0 -1
- package/dist/__tests__/preview-event-bus.test.js +0 -89
- package/dist/__tests__/preview-event-bus.test.js.map +0 -1
- package/dist/__tests__/preview-sse-stream.test.d.ts +0 -2
- package/dist/__tests__/preview-sse-stream.test.d.ts.map +0 -1
- package/dist/__tests__/preview-sse-stream.test.js +0 -117
- package/dist/__tests__/preview-sse-stream.test.js.map +0 -1
- package/dist/__tests__/preview.test.d.ts +0 -2
- package/dist/__tests__/preview.test.d.ts.map +0 -1
- package/dist/__tests__/preview.test.js +0 -71
- package/dist/__tests__/preview.test.js.map +0 -1
- package/dist/__tests__/realtime/comments.test.d.ts +0 -2
- package/dist/__tests__/realtime/comments.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/comments.test.js +0 -508
- package/dist/__tests__/realtime/comments.test.js.map +0 -1
- package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts +0 -2
- package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/gateway-ws-integration.test.js +0 -170
- package/dist/__tests__/realtime/gateway-ws-integration.test.js.map +0 -1
- package/dist/__tests__/realtime/gateway.test.d.ts +0 -2
- package/dist/__tests__/realtime/gateway.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/gateway.test.js +0 -402
- package/dist/__tests__/realtime/gateway.test.js.map +0 -1
- package/dist/__tests__/realtime/notification-bus.test.d.ts +0 -2
- package/dist/__tests__/realtime/notification-bus.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/notification-bus.test.js +0 -79
- package/dist/__tests__/realtime/notification-bus.test.js.map +0 -1
- package/dist/__tests__/realtime/notification-stream.test.d.ts +0 -2
- package/dist/__tests__/realtime/notification-stream.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/notification-stream.test.js +0 -157
- package/dist/__tests__/realtime/notification-stream.test.js.map +0 -1
- package/dist/__tests__/realtime/notifications.test.d.ts +0 -2
- package/dist/__tests__/realtime/notifications.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/notifications.test.js +0 -330
- package/dist/__tests__/realtime/notifications.test.js.map +0 -1
- package/dist/__tests__/realtime/persistence.test.d.ts +0 -2
- package/dist/__tests__/realtime/persistence.test.d.ts.map +0 -1
- package/dist/__tests__/realtime/persistence.test.js +0 -124
- package/dist/__tests__/realtime/persistence.test.js.map +0 -1
- package/dist/__tests__/redirects/auto-301.test.d.ts +0 -2
- package/dist/__tests__/redirects/auto-301.test.d.ts.map +0 -1
- package/dist/__tests__/redirects/auto-301.test.js +0 -172
- package/dist/__tests__/redirects/auto-301.test.js.map +0 -1
- package/dist/__tests__/redirects/graph.test.d.ts +0 -2
- package/dist/__tests__/redirects/graph.test.d.ts.map +0 -1
- package/dist/__tests__/redirects/graph.test.js +0 -104
- package/dist/__tests__/redirects/graph.test.js.map +0 -1
- package/dist/__tests__/redirects/suggest.test.d.ts +0 -2
- package/dist/__tests__/redirects/suggest.test.d.ts.map +0 -1
- package/dist/__tests__/redirects/suggest.test.js +0 -28
- package/dist/__tests__/redirects/suggest.test.js.map +0 -1
- package/dist/__tests__/scheduling/scheduling.test.d.ts +0 -2
- package/dist/__tests__/scheduling/scheduling.test.d.ts.map +0 -1
- package/dist/__tests__/scheduling/scheduling.test.js +0 -110
- package/dist/__tests__/scheduling/scheduling.test.js.map +0 -1
- package/dist/__tests__/schema-preview-features.test.d.ts +0 -2
- package/dist/__tests__/schema-preview-features.test.d.ts.map +0 -1
- package/dist/__tests__/schema-preview-features.test.js +0 -42
- package/dist/__tests__/schema-preview-features.test.js.map +0 -1
- package/dist/__tests__/sections/sections-migrate.test.d.ts +0 -2
- package/dist/__tests__/sections/sections-migrate.test.d.ts.map +0 -1
- package/dist/__tests__/sections/sections-migrate.test.js +0 -145
- package/dist/__tests__/sections/sections-migrate.test.js.map +0 -1
- package/dist/__tests__/security/access.test.d.ts +0 -2
- package/dist/__tests__/security/access.test.d.ts.map +0 -1
- package/dist/__tests__/security/access.test.js +0 -181
- package/dist/__tests__/security/access.test.js.map +0 -1
- package/dist/__tests__/security/api-key-enhanced.test.d.ts +0 -2
- package/dist/__tests__/security/api-key-enhanced.test.d.ts.map +0 -1
- package/dist/__tests__/security/api-key-enhanced.test.js +0 -110
- package/dist/__tests__/security/api-key-enhanced.test.js.map +0 -1
- package/dist/__tests__/security/audit.test.d.ts +0 -2
- package/dist/__tests__/security/audit.test.d.ts.map +0 -1
- package/dist/__tests__/security/audit.test.js +0 -50
- package/dist/__tests__/security/audit.test.js.map +0 -1
- package/dist/__tests__/security/center.test.d.ts +0 -2
- package/dist/__tests__/security/center.test.d.ts.map +0 -1
- package/dist/__tests__/security/center.test.js +0 -226
- package/dist/__tests__/security/center.test.js.map +0 -1
- package/dist/__tests__/security/client-ip.test.d.ts +0 -2
- package/dist/__tests__/security/client-ip.test.d.ts.map +0 -1
- package/dist/__tests__/security/client-ip.test.js +0 -37
- package/dist/__tests__/security/client-ip.test.js.map +0 -1
- package/dist/__tests__/security/csrf.test.d.ts +0 -2
- package/dist/__tests__/security/csrf.test.d.ts.map +0 -1
- package/dist/__tests__/security/csrf.test.js +0 -40
- package/dist/__tests__/security/csrf.test.js.map +0 -1
- package/dist/__tests__/security/encrypted-fields.test.d.ts +0 -2
- package/dist/__tests__/security/encrypted-fields.test.d.ts.map +0 -1
- package/dist/__tests__/security/encrypted-fields.test.js +0 -60
- package/dist/__tests__/security/encrypted-fields.test.js.map +0 -1
- package/dist/__tests__/security/ip-allowlist.test.d.ts +0 -2
- package/dist/__tests__/security/ip-allowlist.test.d.ts.map +0 -1
- package/dist/__tests__/security/ip-allowlist.test.js +0 -40
- package/dist/__tests__/security/ip-allowlist.test.js.map +0 -1
- package/dist/__tests__/security/rate-limit.test.d.ts +0 -2
- package/dist/__tests__/security/rate-limit.test.d.ts.map +0 -1
- package/dist/__tests__/security/rate-limit.test.js +0 -199
- package/dist/__tests__/security/rate-limit.test.js.map +0 -1
- package/dist/__tests__/security/reauth.test.d.ts +0 -2
- package/dist/__tests__/security/reauth.test.d.ts.map +0 -1
- package/dist/__tests__/security/reauth.test.js +0 -30
- package/dist/__tests__/security/reauth.test.js.map +0 -1
- package/dist/__tests__/security/redact.test.d.ts +0 -2
- package/dist/__tests__/security/redact.test.d.ts.map +0 -1
- package/dist/__tests__/security/redact.test.js +0 -31
- package/dist/__tests__/security/redact.test.js.map +0 -1
- package/dist/__tests__/security/safe-fetch.test.d.ts +0 -2
- package/dist/__tests__/security/safe-fetch.test.d.ts.map +0 -1
- package/dist/__tests__/security/safe-fetch.test.js +0 -97
- package/dist/__tests__/security/safe-fetch.test.js.map +0 -1
- package/dist/__tests__/security/sanitize-document.test.d.ts +0 -2
- package/dist/__tests__/security/sanitize-document.test.d.ts.map +0 -1
- package/dist/__tests__/security/sanitize-document.test.js +0 -146
- package/dist/__tests__/security/sanitize-document.test.js.map +0 -1
- package/dist/__tests__/security/sanitize.test.d.ts +0 -2
- package/dist/__tests__/security/sanitize.test.d.ts.map +0 -1
- package/dist/__tests__/security/sanitize.test.js +0 -75
- package/dist/__tests__/security/sanitize.test.js.map +0 -1
- package/dist/__tests__/security/secret-storage.test.d.ts +0 -2
- package/dist/__tests__/security/secret-storage.test.d.ts.map +0 -1
- package/dist/__tests__/security/secret-storage.test.js +0 -42
- package/dist/__tests__/security/secret-storage.test.js.map +0 -1
- package/dist/__tests__/security/ssrf.test.d.ts +0 -2
- package/dist/__tests__/security/ssrf.test.d.ts.map +0 -1
- package/dist/__tests__/security/ssrf.test.js +0 -209
- package/dist/__tests__/security/ssrf.test.js.map +0 -1
- package/dist/__tests__/security/upload-magic.test.d.ts +0 -2
- package/dist/__tests__/security/upload-magic.test.d.ts.map +0 -1
- package/dist/__tests__/security/upload-magic.test.js +0 -55
- package/dist/__tests__/security/upload-magic.test.js.map +0 -1
- package/dist/__tests__/seo/ai-bots.test.d.ts +0 -2
- package/dist/__tests__/seo/ai-bots.test.d.ts.map +0 -1
- package/dist/__tests__/seo/ai-bots.test.js +0 -92
- package/dist/__tests__/seo/ai-bots.test.js.map +0 -1
- package/dist/__tests__/seo/alt-text.test.d.ts +0 -2
- package/dist/__tests__/seo/alt-text.test.d.ts.map +0 -1
- package/dist/__tests__/seo/alt-text.test.js +0 -47
- package/dist/__tests__/seo/alt-text.test.js.map +0 -1
- package/dist/__tests__/seo/analysis-markdown.test.d.ts +0 -2
- package/dist/__tests__/seo/analysis-markdown.test.d.ts.map +0 -1
- package/dist/__tests__/seo/analysis-markdown.test.js +0 -57
- package/dist/__tests__/seo/analysis-markdown.test.js.map +0 -1
- package/dist/__tests__/seo/audit-engine.test.d.ts +0 -2
- package/dist/__tests__/seo/audit-engine.test.d.ts.map +0 -1
- package/dist/__tests__/seo/audit-engine.test.js +0 -181
- package/dist/__tests__/seo/audit-engine.test.js.map +0 -1
- package/dist/__tests__/seo/audit-runner.test.d.ts +0 -2
- package/dist/__tests__/seo/audit-runner.test.d.ts.map +0 -1
- package/dist/__tests__/seo/audit-runner.test.js +0 -204
- package/dist/__tests__/seo/audit-runner.test.js.map +0 -1
- package/dist/__tests__/seo/audit-signals.test.d.ts +0 -2
- package/dist/__tests__/seo/audit-signals.test.d.ts.map +0 -1
- package/dist/__tests__/seo/audit-signals.test.js +0 -30
- package/dist/__tests__/seo/audit-signals.test.js.map +0 -1
- package/dist/__tests__/seo/config-store.test.d.ts +0 -2
- package/dist/__tests__/seo/config-store.test.d.ts.map +0 -1
- package/dist/__tests__/seo/config-store.test.js +0 -31
- package/dist/__tests__/seo/config-store.test.js.map +0 -1
- package/dist/__tests__/seo/content-markdown.test.d.ts +0 -2
- package/dist/__tests__/seo/content-markdown.test.d.ts.map +0 -1
- package/dist/__tests__/seo/content-markdown.test.js +0 -124
- package/dist/__tests__/seo/content-markdown.test.js.map +0 -1
- package/dist/__tests__/seo/effective-meta.test.d.ts +0 -2
- package/dist/__tests__/seo/effective-meta.test.d.ts.map +0 -1
- package/dist/__tests__/seo/effective-meta.test.js +0 -58
- package/dist/__tests__/seo/effective-meta.test.js.map +0 -1
- package/dist/__tests__/seo/feeds.test.d.ts +0 -2
- package/dist/__tests__/seo/feeds.test.d.ts.map +0 -1
- package/dist/__tests__/seo/feeds.test.js +0 -61
- package/dist/__tests__/seo/feeds.test.js.map +0 -1
- package/dist/__tests__/seo/fix-brief-export.test.d.ts +0 -2
- package/dist/__tests__/seo/fix-brief-export.test.d.ts.map +0 -1
- package/dist/__tests__/seo/fix-brief-export.test.js +0 -153
- package/dist/__tests__/seo/fix-brief-export.test.js.map +0 -1
- package/dist/__tests__/seo/freshness.test.d.ts +0 -2
- package/dist/__tests__/seo/freshness.test.d.ts.map +0 -1
- package/dist/__tests__/seo/freshness.test.js +0 -89
- package/dist/__tests__/seo/freshness.test.js.map +0 -1
- package/dist/__tests__/seo/index-status.test.d.ts +0 -2
- package/dist/__tests__/seo/index-status.test.d.ts.map +0 -1
- package/dist/__tests__/seo/index-status.test.js +0 -140
- package/dist/__tests__/seo/index-status.test.js.map +0 -1
- package/dist/__tests__/seo/internal-collections.test.d.ts +0 -2
- package/dist/__tests__/seo/internal-collections.test.d.ts.map +0 -1
- package/dist/__tests__/seo/internal-collections.test.js +0 -27
- package/dist/__tests__/seo/internal-collections.test.js.map +0 -1
- package/dist/__tests__/seo/issue-batch-briefs.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-batch-briefs.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-batch-briefs.test.js +0 -64
- package/dist/__tests__/seo/issue-batch-briefs.test.js.map +0 -1
- package/dist/__tests__/seo/issue-content-brief.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-content-brief.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-content-brief.test.js +0 -107
- package/dist/__tests__/seo/issue-content-brief.test.js.map +0 -1
- package/dist/__tests__/seo/issue-content-research.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-content-research.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-content-research.test.js +0 -114
- package/dist/__tests__/seo/issue-content-research.test.js.map +0 -1
- package/dist/__tests__/seo/issue-fix-ai.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-fix-ai.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-fix-ai.test.js +0 -96
- package/dist/__tests__/seo/issue-fix-ai.test.js.map +0 -1
- package/dist/__tests__/seo/issue-fix-orchestrator.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-fix-orchestrator.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-fix-orchestrator.test.js +0 -48
- package/dist/__tests__/seo/issue-fix-orchestrator.test.js.map +0 -1
- package/dist/__tests__/seo/issue-fix.test.d.ts +0 -2
- package/dist/__tests__/seo/issue-fix.test.d.ts.map +0 -1
- package/dist/__tests__/seo/issue-fix.test.js +0 -98
- package/dist/__tests__/seo/issue-fix.test.js.map +0 -1
- package/dist/__tests__/seo/llms-sanitize.test.d.ts +0 -2
- package/dist/__tests__/seo/llms-sanitize.test.d.ts.map +0 -1
- package/dist/__tests__/seo/llms-sanitize.test.js +0 -74
- package/dist/__tests__/seo/llms-sanitize.test.js.map +0 -1
- package/dist/__tests__/seo/meta-tags-alternates.test.d.ts +0 -2
- package/dist/__tests__/seo/meta-tags-alternates.test.d.ts.map +0 -1
- package/dist/__tests__/seo/meta-tags-alternates.test.js +0 -52
- package/dist/__tests__/seo/meta-tags-alternates.test.js.map +0 -1
- package/dist/__tests__/seo/migrate-meta.test.d.ts +0 -2
- package/dist/__tests__/seo/migrate-meta.test.d.ts.map +0 -1
- package/dist/__tests__/seo/migrate-meta.test.js +0 -75
- package/dist/__tests__/seo/migrate-meta.test.js.map +0 -1
- package/dist/__tests__/seo/migrate-schema.test.d.ts +0 -2
- package/dist/__tests__/seo/migrate-schema.test.d.ts.map +0 -1
- package/dist/__tests__/seo/migrate-schema.test.js +0 -97
- package/dist/__tests__/seo/migrate-schema.test.js.map +0 -1
- package/dist/__tests__/seo/page-meta.test.d.ts +0 -2
- package/dist/__tests__/seo/page-meta.test.d.ts.map +0 -1
- package/dist/__tests__/seo/page-meta.test.js +0 -452
- package/dist/__tests__/seo/page-meta.test.js.map +0 -1
- package/dist/__tests__/seo/resolve-path.test.d.ts +0 -2
- package/dist/__tests__/seo/resolve-path.test.d.ts.map +0 -1
- package/dist/__tests__/seo/resolve-path.test.js +0 -46
- package/dist/__tests__/seo/resolve-path.test.js.map +0 -1
- package/dist/__tests__/seo/robots.test.d.ts +0 -2
- package/dist/__tests__/seo/robots.test.d.ts.map +0 -1
- package/dist/__tests__/seo/robots.test.js +0 -72
- package/dist/__tests__/seo/robots.test.js.map +0 -1
- package/dist/__tests__/seo/schema-sync.test.d.ts +0 -2
- package/dist/__tests__/seo/schema-sync.test.d.ts.map +0 -1
- package/dist/__tests__/seo/schema-sync.test.js +0 -59
- package/dist/__tests__/seo/schema-sync.test.js.map +0 -1
- package/dist/__tests__/seo/score.test.d.ts +0 -2
- package/dist/__tests__/seo/score.test.d.ts.map +0 -1
- package/dist/__tests__/seo/score.test.js +0 -152
- package/dist/__tests__/seo/score.test.js.map +0 -1
- package/dist/__tests__/seo/settings-defaults.test.d.ts +0 -2
- package/dist/__tests__/seo/settings-defaults.test.d.ts.map +0 -1
- package/dist/__tests__/seo/settings-defaults.test.js +0 -189
- package/dist/__tests__/seo/settings-defaults.test.js.map +0 -1
- package/dist/__tests__/seo/sitemap-notify.test.d.ts +0 -2
- package/dist/__tests__/seo/sitemap-notify.test.d.ts.map +0 -1
- package/dist/__tests__/seo/sitemap-notify.test.js +0 -267
- package/dist/__tests__/seo/sitemap-notify.test.js.map +0 -1
- package/dist/__tests__/seo/sitemap-public.test.d.ts +0 -2
- package/dist/__tests__/seo/sitemap-public.test.d.ts.map +0 -1
- package/dist/__tests__/seo/sitemap-public.test.js +0 -52
- package/dist/__tests__/seo/sitemap-public.test.js.map +0 -1
- package/dist/__tests__/server-site.test.d.ts +0 -2
- package/dist/__tests__/server-site.test.d.ts.map +0 -1
- package/dist/__tests__/server-site.test.js +0 -173
- package/dist/__tests__/server-site.test.js.map +0 -1
- package/dist/__tests__/setup/index.test.d.ts +0 -2
- package/dist/__tests__/setup/index.test.d.ts.map +0 -1
- package/dist/__tests__/setup/index.test.js +0 -128
- package/dist/__tests__/setup/index.test.js.map +0 -1
- package/dist/__tests__/site.test.d.ts +0 -2
- package/dist/__tests__/site.test.d.ts.map +0 -1
- package/dist/__tests__/site.test.js +0 -81
- package/dist/__tests__/site.test.js.map +0 -1
- package/dist/__tests__/storage/auto-wire.test.d.ts +0 -2
- package/dist/__tests__/storage/auto-wire.test.d.ts.map +0 -1
- package/dist/__tests__/storage/auto-wire.test.js +0 -73
- package/dist/__tests__/storage/auto-wire.test.js.map +0 -1
- package/dist/__tests__/upgrade/version-check.test.d.ts +0 -2
- package/dist/__tests__/upgrade/version-check.test.d.ts.map +0 -1
- package/dist/__tests__/upgrade/version-check.test.js +0 -98
- package/dist/__tests__/upgrade/version-check.test.js.map +0 -1
- package/dist/__tests__/validation/publish.test.d.ts +0 -2
- package/dist/__tests__/validation/publish.test.d.ts.map +0 -1
- package/dist/__tests__/validation/publish.test.js +0 -164
- package/dist/__tests__/validation/publish.test.js.map +0 -1
- package/dist/__tests__/webhooks/webhooks.test.d.ts +0 -2
- package/dist/__tests__/webhooks/webhooks.test.d.ts.map +0 -1
- package/dist/__tests__/webhooks/webhooks.test.js +0 -96
- package/dist/__tests__/webhooks/webhooks.test.js.map +0 -1
- package/dist/cache/__tests__/http.test.d.ts +0 -2
- package/dist/cache/__tests__/http.test.d.ts.map +0 -1
- package/dist/cache/__tests__/http.test.js +0 -285
- package/dist/cache/__tests__/http.test.js.map +0 -1
- package/dist/db/__tests__/find-in-batches.test.d.ts +0 -2
- package/dist/db/__tests__/find-in-batches.test.d.ts.map +0 -1
- package/dist/db/__tests__/find-in-batches.test.js +0 -26
- package/dist/db/__tests__/find-in-batches.test.js.map +0 -1
- package/dist/fields/__tests__/presets.test.d.ts +0 -2
- package/dist/fields/__tests__/presets.test.d.ts.map +0 -1
- package/dist/fields/__tests__/presets.test.js +0 -29
- package/dist/fields/__tests__/presets.test.js.map +0 -1
- package/dist/page-builder/__tests__/a11y-fix.test.d.ts +0 -2
- package/dist/page-builder/__tests__/a11y-fix.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/a11y-fix.test.js +0 -242
- package/dist/page-builder/__tests__/a11y-fix.test.js.map +0 -1
- package/dist/page-builder/__tests__/blocks.test.d.ts +0 -2
- package/dist/page-builder/__tests__/blocks.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/blocks.test.js +0 -194
- package/dist/page-builder/__tests__/blocks.test.js.map +0 -1
- package/dist/page-builder/__tests__/design-scorer.test.d.ts +0 -2
- package/dist/page-builder/__tests__/design-scorer.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/design-scorer.test.js +0 -301
- package/dist/page-builder/__tests__/design-scorer.test.js.map +0 -1
- package/dist/page-builder/__tests__/schema.test.d.ts +0 -2
- package/dist/page-builder/__tests__/schema.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/schema.test.js +0 -191
- package/dist/page-builder/__tests__/schema.test.js.map +0 -1
- package/dist/page-builder/__tests__/seo-analyzer.test.d.ts +0 -2
- package/dist/page-builder/__tests__/seo-analyzer.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/seo-analyzer.test.js +0 -346
- package/dist/page-builder/__tests__/seo-analyzer.test.js.map +0 -1
- package/dist/page-builder/__tests__/tree.test.d.ts +0 -2
- package/dist/page-builder/__tests__/tree.test.d.ts.map +0 -1
- package/dist/page-builder/__tests__/tree.test.js +0 -257
- package/dist/page-builder/__tests__/tree.test.js.map +0 -1
- package/dist/posts/__tests__/query.test.d.ts +0 -2
- package/dist/posts/__tests__/query.test.d.ts.map +0 -1
- package/dist/posts/__tests__/query.test.js +0 -70
- package/dist/posts/__tests__/query.test.js.map +0 -1
- package/dist/sections/__tests__/bridge.test.d.ts +0 -2
- package/dist/sections/__tests__/bridge.test.d.ts.map +0 -1
- package/dist/sections/__tests__/bridge.test.js +0 -171
- package/dist/sections/__tests__/bridge.test.js.map +0 -1
- package/dist/sections/__tests__/define.test.d.ts +0 -2
- package/dist/sections/__tests__/define.test.d.ts.map +0 -1
- package/dist/sections/__tests__/define.test.js +0 -132
- package/dist/sections/__tests__/define.test.js.map +0 -1
- package/dist/sections/__tests__/embed.test.d.ts +0 -2
- package/dist/sections/__tests__/embed.test.d.ts.map +0 -1
- package/dist/sections/__tests__/embed.test.js +0 -54
- package/dist/sections/__tests__/embed.test.js.map +0 -1
- package/dist/sections/__tests__/media-enrich.test.d.ts +0 -2
- package/dist/sections/__tests__/media-enrich.test.d.ts.map +0 -1
- package/dist/sections/__tests__/media-enrich.test.js +0 -97
- package/dist/sections/__tests__/media-enrich.test.js.map +0 -1
- package/dist/sections/__tests__/sections.test.d.ts +0 -2
- package/dist/sections/__tests__/sections.test.d.ts.map +0 -1
- package/dist/sections/__tests__/sections.test.js +0 -453
- package/dist/sections/__tests__/sections.test.js.map +0 -1
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
import { dirname, resolve } from 'node:path';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
/**
|
|
6
|
-
* Guard against the Phase 5.5 regression where `relationLoadStrategy:
|
|
7
|
-
* 'join'` was added to the dashboard / versions / bench queries
|
|
8
|
-
* without the `relationJoins` Preview-feature flag in the schema.
|
|
9
|
-
* Prisma silently rejects the option as an "Unknown argument" when
|
|
10
|
-
* the flag is missing — for `safeFindMany` callers that surfaces as
|
|
11
|
-
* an empty result and for the versions endpoint as a 500 to the
|
|
12
|
-
* client. Either failure mode is hard to spot without a deliberate
|
|
13
|
-
* bench run, so pin the schema's preview-feature set with a tiny
|
|
14
|
-
* test rather than a code-review-only convention.
|
|
15
|
-
*
|
|
16
|
-
* If the preview-feature set legitimately needs to change, update
|
|
17
|
-
* the assertion below in the same commit — that way the rationale
|
|
18
|
-
* surfaces in the diff.
|
|
19
|
-
*/
|
|
20
|
-
describe('Prisma schema preview features', () => {
|
|
21
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
22
|
-
const schemaPath = resolve(here, '..', '..', 'prisma', 'schema.prisma');
|
|
23
|
-
const schema = readFileSync(schemaPath, 'utf8');
|
|
24
|
-
it('declares relationJoins so `relationLoadStrategy: "join"` is honoured', () => {
|
|
25
|
-
const match = schema.match(/previewFeatures\s*=\s*\[([^\]]*)\]/);
|
|
26
|
-
expect(match, 'schema.prisma must declare a previewFeatures array').not.toBeNull();
|
|
27
|
-
const features = (match[1] ?? '')
|
|
28
|
-
.split(',')
|
|
29
|
-
.map((s) => s.trim().replace(/^"|"$/g, ''))
|
|
30
|
-
.filter(Boolean);
|
|
31
|
-
expect(features).toContain('relationJoins');
|
|
32
|
-
});
|
|
33
|
-
it('still declares fullTextSearchPostgres (search uses it)', () => {
|
|
34
|
-
const match = schema.match(/previewFeatures\s*=\s*\[([^\]]*)\]/);
|
|
35
|
-
const features = (match[1] ?? '')
|
|
36
|
-
.split(',')
|
|
37
|
-
.map((s) => s.trim().replace(/^"|"$/g, ''))
|
|
38
|
-
.filter(Boolean);
|
|
39
|
-
expect(features).toContain('fullTextSearchPostgres');
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=schema-preview-features.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-preview-features.test.js","sourceRoot":"","sources":["../../src/__tests__/schema-preview-features.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C;;;;;;;;;;;;;;GAcG;AACH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAE/C,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,MAAM,CAAC,KAAK,EAAE,oDAAoD,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAClF,MAAM,QAAQ,GAAG,CAAC,KAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aAC1C,MAAM,CAAC,OAAO,CAAC,CAAA;QAClB,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,CAAC,KAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aAC1C,MAAM,CAAC,OAAO,CAAC,CAAA;QAClB,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sections-migrate.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/sections/sections-migrate.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { migratePageBuilderSections } from '../../sections/migrate.js';
|
|
3
|
-
/**
|
|
4
|
-
* Mock Prisma supporting the keyset scan used by the migration plus the
|
|
5
|
-
* read/transaction surface `updateDocument` needs.
|
|
6
|
-
*/
|
|
7
|
-
function createMockDB() {
|
|
8
|
-
const docs = new Map();
|
|
9
|
-
const versions = [];
|
|
10
|
-
function sortedNonDeleted() {
|
|
11
|
-
return [...docs.values()]
|
|
12
|
-
.filter((d) => d.deletedAt === null)
|
|
13
|
-
.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
14
|
-
}
|
|
15
|
-
const txClient = {
|
|
16
|
-
document: {
|
|
17
|
-
update: vi.fn(async ({ where, data: updateData }) => {
|
|
18
|
-
const doc = docs.get(where.id);
|
|
19
|
-
if (!doc)
|
|
20
|
-
throw new Error('Not found');
|
|
21
|
-
Object.assign(doc, updateData);
|
|
22
|
-
return doc;
|
|
23
|
-
}),
|
|
24
|
-
},
|
|
25
|
-
version: {
|
|
26
|
-
create: vi.fn(async ({ data }) => {
|
|
27
|
-
const v = { id: `ver-${versions.length}`, ...data, createdAt: new Date() };
|
|
28
|
-
versions.push(v);
|
|
29
|
-
return v;
|
|
30
|
-
}),
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
document: {
|
|
35
|
-
findMany: vi.fn(async ({ take, skip, cursor, select } = {}) => {
|
|
36
|
-
let arr = sortedNonDeleted();
|
|
37
|
-
if (cursor?.id) {
|
|
38
|
-
const idx = arr.findIndex((d) => d.id === cursor.id);
|
|
39
|
-
if (idx >= 0)
|
|
40
|
-
arr = arr.slice(idx + (skip ?? 0));
|
|
41
|
-
}
|
|
42
|
-
if (typeof take === 'number')
|
|
43
|
-
arr = arr.slice(0, take);
|
|
44
|
-
if (select) {
|
|
45
|
-
arr = arr.map((d) => {
|
|
46
|
-
const picked = {};
|
|
47
|
-
for (const k of Object.keys(select))
|
|
48
|
-
picked[k] = d[k];
|
|
49
|
-
return picked;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return arr;
|
|
53
|
-
}),
|
|
54
|
-
findFirst: vi.fn(async ({ where }) => {
|
|
55
|
-
for (const doc of docs.values()) {
|
|
56
|
-
if (where.id && doc.id !== where.id)
|
|
57
|
-
continue;
|
|
58
|
-
if (where.collection && doc.collection !== where.collection)
|
|
59
|
-
continue;
|
|
60
|
-
if (where.deletedAt === null && doc.deletedAt !== null)
|
|
61
|
-
continue;
|
|
62
|
-
return doc;
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
65
|
-
}),
|
|
66
|
-
},
|
|
67
|
-
version: txClient.version,
|
|
68
|
-
$transaction: vi.fn(async (fn) => fn(txClient)),
|
|
69
|
-
_docs: docs,
|
|
70
|
-
_versions: versions,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function ctxFor(db) {
|
|
74
|
-
return { userId: 'admin-1', role: 'ADMIN', db };
|
|
75
|
-
}
|
|
76
|
-
const HERO_LAYOUT = {
|
|
77
|
-
type: 'page',
|
|
78
|
-
children: [
|
|
79
|
-
{
|
|
80
|
-
type: 'section',
|
|
81
|
-
settings: { htmlId: 'top' },
|
|
82
|
-
children: [
|
|
83
|
-
{ type: 'block', settings: { blockType: 'hero' }, data: { title: 'Hi', subtitle: 'Yo' } },
|
|
84
|
-
],
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
};
|
|
88
|
-
function seedDoc(db, id, data) {
|
|
89
|
-
db._docs.set(id, { id, collection: 'pages', status: 'PUBLISHED', data, deletedAt: null });
|
|
90
|
-
}
|
|
91
|
-
describe('migratePageBuilderSections (ADR 0002 backfill)', () => {
|
|
92
|
-
let db;
|
|
93
|
-
beforeEach(() => {
|
|
94
|
-
db = createMockDB();
|
|
95
|
-
});
|
|
96
|
-
it('backfills sections for a legacy _layout-only document', async () => {
|
|
97
|
-
seedDoc(db, 'doc-1', { title: 'Legacy', _layout: HERO_LAYOUT });
|
|
98
|
-
const result = await migratePageBuilderSections(ctxFor(db));
|
|
99
|
-
expect(result.scanned).toBe(1);
|
|
100
|
-
expect(result.migrated).toBe(1);
|
|
101
|
-
expect(result.migratedIds).toEqual(['doc-1']);
|
|
102
|
-
const sections = db._docs.get('doc-1').data.sections;
|
|
103
|
-
expect(sections[0].sectionType).toBe('hero');
|
|
104
|
-
expect(sections[0].content.heading).toBe('Hi');
|
|
105
|
-
});
|
|
106
|
-
it('is idempotent — a second run migrates nothing', async () => {
|
|
107
|
-
seedDoc(db, 'doc-1', { title: 'Legacy', _layout: HERO_LAYOUT });
|
|
108
|
-
await migratePageBuilderSections(ctxFor(db));
|
|
109
|
-
const second = await migratePageBuilderSections(ctxFor(db));
|
|
110
|
-
expect(second.migrated).toBe(0);
|
|
111
|
-
expect(second.skipped).toBe(1);
|
|
112
|
-
});
|
|
113
|
-
it('skips documents that already have sections, and those with no _layout', async () => {
|
|
114
|
-
seedDoc(db, 'doc-1', { title: 'Already', _layout: HERO_LAYOUT, sections: [{ id: 'x' }] });
|
|
115
|
-
seedDoc(db, 'doc-2', { title: 'Flat', sections: [{ id: 'y' }] });
|
|
116
|
-
seedDoc(db, 'doc-3', { title: 'Bare' });
|
|
117
|
-
const result = await migratePageBuilderSections(ctxFor(db));
|
|
118
|
-
expect(result.scanned).toBe(3);
|
|
119
|
-
expect(result.migrated).toBe(0);
|
|
120
|
-
expect(result.skipped).toBe(3);
|
|
121
|
-
});
|
|
122
|
-
it('skips a layout that compiles to nothing (leaves it for the read-time bridge)', async () => {
|
|
123
|
-
seedDoc(db, 'doc-1', { title: 'Empty', _layout: { type: 'page', children: [] } });
|
|
124
|
-
const result = await migratePageBuilderSections(ctxFor(db));
|
|
125
|
-
expect(result.migrated).toBe(0);
|
|
126
|
-
expect(result.skipped).toBe(1);
|
|
127
|
-
expect(db._docs.get('doc-1').data.sections).toBeUndefined();
|
|
128
|
-
});
|
|
129
|
-
it('dryRun reports counts without writing', async () => {
|
|
130
|
-
seedDoc(db, 'doc-1', { title: 'Legacy', _layout: HERO_LAYOUT });
|
|
131
|
-
const result = await migratePageBuilderSections(ctxFor(db), { dryRun: true });
|
|
132
|
-
expect(result.migrated).toBe(1);
|
|
133
|
-
expect(db._docs.get('doc-1').data.sections).toBeUndefined();
|
|
134
|
-
});
|
|
135
|
-
it('pages through batches (batchSize smaller than the doc count)', async () => {
|
|
136
|
-
seedDoc(db, 'doc-1', { title: 'A', _layout: HERO_LAYOUT });
|
|
137
|
-
seedDoc(db, 'doc-2', { title: 'B', _layout: HERO_LAYOUT });
|
|
138
|
-
seedDoc(db, 'doc-3', { title: 'C', _layout: HERO_LAYOUT });
|
|
139
|
-
const result = await migratePageBuilderSections(ctxFor(db), { batchSize: 1 });
|
|
140
|
-
expect(result.scanned).toBe(3);
|
|
141
|
-
expect(result.migrated).toBe(3);
|
|
142
|
-
expect(result.migratedIds.sort()).toEqual(['doc-1', 'doc-2', 'doc-3']);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
//# sourceMappingURL=sections-migrate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sections-migrate.test.js","sourceRoot":"","sources":["../../../src/__tests__/sections/sections-migrate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/security/access.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { checkAccess, getPermissionsForRole, filterFieldsByRole, applyFieldAccess, } from '../../security/access.js';
|
|
3
|
-
describe('checkAccess', () => {
|
|
4
|
-
it('ADMIN can access everything', () => {
|
|
5
|
-
expect(checkAccess('ADMIN', 'ADMIN')).toBe(true);
|
|
6
|
-
expect(checkAccess('ADMIN', 'EDITOR')).toBe(true);
|
|
7
|
-
expect(checkAccess('ADMIN', 'AUTHOR')).toBe(true);
|
|
8
|
-
expect(checkAccess('ADMIN', 'CLIENT')).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
it('EDITOR can access AUTHOR level', () => {
|
|
11
|
-
expect(checkAccess('EDITOR', 'AUTHOR')).toBe(true);
|
|
12
|
-
expect(checkAccess('EDITOR', 'CLIENT')).toBe(true);
|
|
13
|
-
expect(checkAccess('EDITOR', 'EDITOR')).toBe(true);
|
|
14
|
-
});
|
|
15
|
-
it('EDITOR cannot access ADMIN level', () => {
|
|
16
|
-
expect(checkAccess('EDITOR', 'ADMIN')).toBe(false);
|
|
17
|
-
});
|
|
18
|
-
it('AUTHOR cannot access EDITOR level', () => {
|
|
19
|
-
expect(checkAccess('AUTHOR', 'EDITOR')).toBe(false);
|
|
20
|
-
expect(checkAccess('AUTHOR', 'ADMIN')).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
it('AUTHOR can access AUTHOR and CLIENT levels', () => {
|
|
23
|
-
expect(checkAccess('AUTHOR', 'AUTHOR')).toBe(true);
|
|
24
|
-
expect(checkAccess('AUTHOR', 'CLIENT')).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
it('CLIENT cannot access AUTHOR level', () => {
|
|
27
|
-
expect(checkAccess('CLIENT', 'AUTHOR')).toBe(false);
|
|
28
|
-
expect(checkAccess('CLIENT', 'EDITOR')).toBe(false);
|
|
29
|
-
expect(checkAccess('CLIENT', 'ADMIN')).toBe(false);
|
|
30
|
-
});
|
|
31
|
-
it('CLIENT can access CLIENT level', () => {
|
|
32
|
-
expect(checkAccess('CLIENT', 'CLIENT')).toBe(true);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe('getPermissionsForRole', () => {
|
|
36
|
-
it('ADMIN gets delete permission', () => {
|
|
37
|
-
const perms = getPermissionsForRole('ADMIN');
|
|
38
|
-
const actions = perms.map((p) => p.action);
|
|
39
|
-
expect(actions).toContain('delete');
|
|
40
|
-
expect(actions).toContain('create');
|
|
41
|
-
expect(actions).toContain('read');
|
|
42
|
-
expect(actions).toContain('update');
|
|
43
|
-
expect(actions).toContain('publish');
|
|
44
|
-
});
|
|
45
|
-
it('EDITOR gets publish but not delete', () => {
|
|
46
|
-
const perms = getPermissionsForRole('EDITOR');
|
|
47
|
-
const actions = perms.map((p) => p.action);
|
|
48
|
-
expect(actions).toContain('publish');
|
|
49
|
-
expect(actions).toContain('read');
|
|
50
|
-
expect(actions).toContain('create');
|
|
51
|
-
expect(actions).not.toContain('delete');
|
|
52
|
-
});
|
|
53
|
-
it('AUTHOR gets create but not delete', () => {
|
|
54
|
-
const perms = getPermissionsForRole('AUTHOR');
|
|
55
|
-
const actions = perms.map((p) => p.action);
|
|
56
|
-
expect(actions).toContain('read');
|
|
57
|
-
expect(actions).toContain('create');
|
|
58
|
-
expect(actions).not.toContain('delete');
|
|
59
|
-
expect(actions).not.toContain('publish');
|
|
60
|
-
});
|
|
61
|
-
it('CLIENT only gets read permission', () => {
|
|
62
|
-
const perms = getPermissionsForRole('CLIENT');
|
|
63
|
-
const actions = perms.map((p) => p.action);
|
|
64
|
-
expect(actions).toEqual(['read']);
|
|
65
|
-
});
|
|
66
|
-
it('AUTHOR has "update own" but not "update *"', () => {
|
|
67
|
-
const perms = getPermissionsForRole('AUTHOR');
|
|
68
|
-
const updatePerms = perms.filter((p) => p.action === 'update');
|
|
69
|
-
expect(updatePerms).toHaveLength(1);
|
|
70
|
-
expect(updatePerms[0].resource).toBe('own');
|
|
71
|
-
});
|
|
72
|
-
it('EDITOR has "update *" (all resources)', () => {
|
|
73
|
-
const perms = getPermissionsForRole('EDITOR');
|
|
74
|
-
const updatePerms = perms.filter((p) => p.action === 'update');
|
|
75
|
-
const resources = updatePerms.map((p) => p.resource);
|
|
76
|
-
expect(resources).toContain('*');
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe('filterFieldsByRole', () => {
|
|
80
|
-
const adminUser = { id: 'admin-1', role: 'ADMIN' };
|
|
81
|
-
const clientUser = { id: 'client-1', role: 'CLIENT' };
|
|
82
|
-
it('returns all fields when no access control is defined', async () => {
|
|
83
|
-
const fields = {
|
|
84
|
-
title: { type: 'text', label: 'Title', required: true },
|
|
85
|
-
body: { type: 'richText', label: 'Body' },
|
|
86
|
-
};
|
|
87
|
-
const filtered = await filterFieldsByRole(fields, clientUser);
|
|
88
|
-
expect(Object.keys(filtered)).toEqual(['title', 'body']);
|
|
89
|
-
});
|
|
90
|
-
it('returns a shallow copy, not the same reference', async () => {
|
|
91
|
-
const fields = {
|
|
92
|
-
name: { type: 'text', label: 'Name' },
|
|
93
|
-
};
|
|
94
|
-
const filtered = await filterFieldsByRole(fields, adminUser);
|
|
95
|
-
expect(filtered).not.toBe(fields);
|
|
96
|
-
expect(filtered).toEqual(fields);
|
|
97
|
-
});
|
|
98
|
-
it('filters out fields the user cannot read', async () => {
|
|
99
|
-
const fields = {
|
|
100
|
-
title: { type: 'text', label: 'Title' },
|
|
101
|
-
secret: {
|
|
102
|
-
type: 'text',
|
|
103
|
-
label: 'Secret',
|
|
104
|
-
access: {
|
|
105
|
-
read: async ({ user }) => user?.role === 'ADMIN',
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
const clientFiltered = await filterFieldsByRole(fields, clientUser);
|
|
110
|
-
expect(Object.keys(clientFiltered)).toEqual(['title']);
|
|
111
|
-
const adminFiltered = await filterFieldsByRole(fields, adminUser);
|
|
112
|
-
expect(Object.keys(adminFiltered)).toEqual(['title', 'secret']);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
describe('applyFieldAccess', () => {
|
|
116
|
-
const adminUser = { id: 'admin-1', role: 'ADMIN' };
|
|
117
|
-
const clientUser = { id: 'client-1', role: 'CLIENT' };
|
|
118
|
-
it('read mode: strips fields the user cannot read', async () => {
|
|
119
|
-
const fields = {
|
|
120
|
-
title: { type: 'text', label: 'Title' },
|
|
121
|
-
internal: {
|
|
122
|
-
type: 'text',
|
|
123
|
-
label: 'Internal',
|
|
124
|
-
access: {
|
|
125
|
-
read: async ({ user }) => user?.role === 'ADMIN',
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
};
|
|
129
|
-
const data = { title: 'Hello', internal: 'secret-value', extra: 'kept' };
|
|
130
|
-
const clientResult = await applyFieldAccess('read', fields, data, clientUser);
|
|
131
|
-
expect(clientResult).toEqual({ title: 'Hello', extra: 'kept' });
|
|
132
|
-
const adminResult = await applyFieldAccess('read', fields, data, adminUser);
|
|
133
|
-
expect(adminResult).toEqual({ title: 'Hello', internal: 'secret-value', extra: 'kept' });
|
|
134
|
-
});
|
|
135
|
-
it('write mode: strips fields the user cannot update', async () => {
|
|
136
|
-
const fields = {
|
|
137
|
-
title: { type: 'text', label: 'Title' },
|
|
138
|
-
locked: {
|
|
139
|
-
type: 'text',
|
|
140
|
-
label: 'Locked',
|
|
141
|
-
access: {
|
|
142
|
-
update: async ({ user }) => user?.role === 'ADMIN',
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
const data = { title: 'New Title', locked: 'overwrite-attempt' };
|
|
147
|
-
const clientResult = await applyFieldAccess('write', fields, data, clientUser);
|
|
148
|
-
expect(clientResult).toEqual({ title: 'New Title' });
|
|
149
|
-
const adminResult = await applyFieldAccess('write', fields, data, adminUser);
|
|
150
|
-
expect(adminResult).toEqual({ title: 'New Title', locked: 'overwrite-attempt' });
|
|
151
|
-
});
|
|
152
|
-
it('passes through unknown keys on read', async () => {
|
|
153
|
-
const fields = {
|
|
154
|
-
title: { type: 'text', label: 'Title' },
|
|
155
|
-
};
|
|
156
|
-
const data = { title: 'Hello', unknownField: 'value' };
|
|
157
|
-
const result = await applyFieldAccess('read', fields, data, clientUser);
|
|
158
|
-
expect(result).toEqual({ title: 'Hello', unknownField: 'value' });
|
|
159
|
-
});
|
|
160
|
-
it('strips unknown keys on write (mass assignment prevention)', async () => {
|
|
161
|
-
const fields = {
|
|
162
|
-
title: { type: 'text', label: 'Title' },
|
|
163
|
-
};
|
|
164
|
-
const data = { title: 'Hello', isAdmin: true, role: 'ADMIN' };
|
|
165
|
-
const result = await applyFieldAccess('write', fields, data, clientUser);
|
|
166
|
-
expect(result).toEqual({ title: 'Hello' });
|
|
167
|
-
expect(result).not.toHaveProperty('isAdmin');
|
|
168
|
-
expect(result).not.toHaveProperty('role');
|
|
169
|
-
});
|
|
170
|
-
it('allows system keys on write', async () => {
|
|
171
|
-
const fields = {
|
|
172
|
-
body: { type: 'richText', label: 'Body' },
|
|
173
|
-
};
|
|
174
|
-
const data = { body: '<p>Hi</p>', title: 'My Page', slug: 'my-page', status: 'PUBLISHED' };
|
|
175
|
-
const result = await applyFieldAccess('write', fields, data, clientUser);
|
|
176
|
-
expect(result).toHaveProperty('title');
|
|
177
|
-
expect(result).toHaveProperty('slug');
|
|
178
|
-
expect(result).toHaveProperty('status');
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
//# sourceMappingURL=access.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.test.js","sourceRoot":"","sources":["../../../src/__tests__/security/access.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-enhanced.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/security/api-key-enhanced.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { generateApiKey, hashApiKey, looksLikeApiKey, validateApiKeyScope, validateApiKeyGlobalScope, validateApiKeyMediaScope, validateApiKeyPageBuilderScope, validateApiKeyIp, } from '../../security/api-key-enhanced.js';
|
|
3
|
-
describe('generateApiKey', () => {
|
|
4
|
-
it('returns a key, hash, and prefix with the expected shape', async () => {
|
|
5
|
-
const { key, keyHash, keyPrefix } = await generateApiKey({
|
|
6
|
-
prefix: 'act_sk',
|
|
7
|
-
scopes: { admin: true },
|
|
8
|
-
});
|
|
9
|
-
expect(key).toMatch(/^act_sk_[a-f0-9]{64}$/);
|
|
10
|
-
expect(keyHash).toMatch(/^[a-f0-9]{64}$/);
|
|
11
|
-
expect(keyPrefix.startsWith('act_sk_')).toBe(true);
|
|
12
|
-
expect(keyPrefix.length).toBe(15);
|
|
13
|
-
});
|
|
14
|
-
it('produces unique keys on each call', async () => {
|
|
15
|
-
const a = await generateApiKey({ prefix: 'act_sk', scopes: { admin: true } });
|
|
16
|
-
const b = await generateApiKey({ prefix: 'act_sk', scopes: { admin: true } });
|
|
17
|
-
expect(a.key).not.toBe(b.key);
|
|
18
|
-
expect(a.keyHash).not.toBe(b.keyHash);
|
|
19
|
-
});
|
|
20
|
-
it('hashApiKey is deterministic for the same input', async () => {
|
|
21
|
-
const { key } = await generateApiKey({ prefix: 'act_sk', scopes: { admin: true } });
|
|
22
|
-
const h1 = await hashApiKey(key);
|
|
23
|
-
const h2 = await hashApiKey(key);
|
|
24
|
-
expect(h1).toBe(h2);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
describe('looksLikeApiKey', () => {
|
|
28
|
-
it('matches valid act_sk_ tokens', () => {
|
|
29
|
-
expect(looksLikeApiKey('act_sk_' + 'a'.repeat(64))).toBe(true);
|
|
30
|
-
expect(looksLikeApiKey('act_sk_' + '0'.repeat(40))).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
it('rejects non-API-key tokens', () => {
|
|
33
|
-
expect(looksLikeApiKey('not_a_key')).toBe(false);
|
|
34
|
-
expect(looksLikeApiKey('act_sk_short')).toBe(false);
|
|
35
|
-
expect(looksLikeApiKey('eyJhbGciOiJIUzI1NiJ9.foo.bar')).toBe(false);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe('validateApiKeyScope', () => {
|
|
39
|
-
it('admin scope always passes', () => {
|
|
40
|
-
expect(validateApiKeyScope({ admin: true }, 'anything', 'delete')).toBe(true);
|
|
41
|
-
});
|
|
42
|
-
it('denies when no collections are configured', () => {
|
|
43
|
-
expect(validateApiKeyScope({}, 'posts', 'read')).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
it('denies when action is not in the actions list', () => {
|
|
46
|
-
expect(validateApiKeyScope({ collections: ['posts'], actions: ['read'] }, 'posts', 'delete')).toBe(false);
|
|
47
|
-
});
|
|
48
|
-
it('allows when collection and action match', () => {
|
|
49
|
-
expect(validateApiKeyScope({ collections: ['posts'], actions: ['read', 'create'] }, 'posts', 'create')).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
it('wildcard collection matches anything', () => {
|
|
52
|
-
expect(validateApiKeyScope({ collections: ['*'], actions: ['read'] }, 'random', 'read')).toBe(true);
|
|
53
|
-
});
|
|
54
|
-
it('does not match a different collection without wildcard', () => {
|
|
55
|
-
expect(validateApiKeyScope({ collections: ['posts'], actions: ['read'] }, 'pages', 'read')).toBe(false);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
describe('validateApiKeyGlobalScope', () => {
|
|
59
|
-
it('admin passes globals check', () => {
|
|
60
|
-
expect(validateApiKeyGlobalScope({ admin: true }, 'site-settings')).toBe(true);
|
|
61
|
-
});
|
|
62
|
-
it('denies when no globals scope is granted', () => {
|
|
63
|
-
expect(validateApiKeyGlobalScope({}, 'site-settings')).toBe(false);
|
|
64
|
-
});
|
|
65
|
-
it('matches explicit slug', () => {
|
|
66
|
-
expect(validateApiKeyGlobalScope({ globals: ['site-settings'] }, 'site-settings')).toBe(true);
|
|
67
|
-
});
|
|
68
|
-
it('matches wildcard', () => {
|
|
69
|
-
expect(validateApiKeyGlobalScope({ globals: ['*'] }, 'anything')).toBe(true);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('validateApiKeyMediaScope', () => {
|
|
73
|
-
it('admin passes', () => {
|
|
74
|
-
expect(validateApiKeyMediaScope({ admin: true })).toBe(true);
|
|
75
|
-
});
|
|
76
|
-
it('media flag passes', () => {
|
|
77
|
-
expect(validateApiKeyMediaScope({ media: true })).toBe(true);
|
|
78
|
-
});
|
|
79
|
-
it('without flag fails', () => {
|
|
80
|
-
expect(validateApiKeyMediaScope({})).toBe(false);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('validateApiKeyPageBuilderScope', () => {
|
|
84
|
-
it('admin passes', () => {
|
|
85
|
-
expect(validateApiKeyPageBuilderScope({ admin: true })).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
it('pageBuilder flag passes', () => {
|
|
88
|
-
expect(validateApiKeyPageBuilderScope({ pageBuilder: true })).toBe(true);
|
|
89
|
-
});
|
|
90
|
-
it('without flag fails', () => {
|
|
91
|
-
expect(validateApiKeyPageBuilderScope({})).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe('validateApiKeyIp', () => {
|
|
95
|
-
it('allows when no restrictions set', () => {
|
|
96
|
-
expect(validateApiKeyIp(null, '1.2.3.4')).toBe(true);
|
|
97
|
-
expect(validateApiKeyIp([], '1.2.3.4')).toBe(true);
|
|
98
|
-
expect(validateApiKeyIp(undefined, '1.2.3.4')).toBe(true);
|
|
99
|
-
});
|
|
100
|
-
it('allows when IP is in the allowlist', () => {
|
|
101
|
-
expect(validateApiKeyIp(['1.2.3.4', '5.6.7.8'], '5.6.7.8')).toBe(true);
|
|
102
|
-
});
|
|
103
|
-
it('denies when IP is not in the allowlist', () => {
|
|
104
|
-
expect(validateApiKeyIp(['1.2.3.4'], '5.6.7.8')).toBe(false);
|
|
105
|
-
});
|
|
106
|
-
it('denies when client IP is unknown but restrictions are set', () => {
|
|
107
|
-
expect(validateApiKeyIp(['1.2.3.4'], 'unknown')).toBe(false);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
//# sourceMappingURL=api-key-enhanced.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-enhanced.test.js","sourceRoot":"","sources":["../../../src/__tests__/security/api-key-enhanced.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/security/audit.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { initDB } from '../../db.js';
|
|
3
|
-
import { logEvent, getAuditLog } from '../../security/audit.js';
|
|
4
|
-
function createMockDB() {
|
|
5
|
-
const records = [];
|
|
6
|
-
return {
|
|
7
|
-
auditLog: {
|
|
8
|
-
create: async ({ data }) => {
|
|
9
|
-
const row = { ...data, id: `log-${records.length + 1}`, timestamp: new Date() };
|
|
10
|
-
records.push(row);
|
|
11
|
-
return row;
|
|
12
|
-
},
|
|
13
|
-
findMany: async ({ where, orderBy, skip, take }) => {
|
|
14
|
-
let filtered = records;
|
|
15
|
-
if (where?.event)
|
|
16
|
-
filtered = filtered.filter((r) => r.event === where.event);
|
|
17
|
-
if (orderBy?.timestamp === 'desc') {
|
|
18
|
-
filtered = [...filtered].sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
19
|
-
}
|
|
20
|
-
return filtered.slice(skip ?? 0, (skip ?? 0) + (take ?? filtered.length));
|
|
21
|
-
},
|
|
22
|
-
count: async ({ where }) => {
|
|
23
|
-
if (!where?.event)
|
|
24
|
-
return records.length;
|
|
25
|
-
return records.filter((r) => r.event === where.event).length;
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
describe('audit log', () => {
|
|
31
|
-
it('logEvent stores an entry and getAuditLog reads it back', async () => {
|
|
32
|
-
const db = createMockDB();
|
|
33
|
-
initDB(db);
|
|
34
|
-
await logEvent({ event: 'login_success', userId: 'u1', ipAddress: '203.0.113.5' });
|
|
35
|
-
const result = await getAuditLog({ event: 'login_success' });
|
|
36
|
-
expect(result.total).toBe(1);
|
|
37
|
-
expect(result.entries[0]).toMatchObject({ event: 'login_success', userId: 'u1' });
|
|
38
|
-
});
|
|
39
|
-
it('getAuditLog orders by timestamp (regression: previously used non-existent createdAt column)', async () => {
|
|
40
|
-
const db = createMockDB();
|
|
41
|
-
initDB(db);
|
|
42
|
-
await logEvent({ event: 'a' });
|
|
43
|
-
await new Promise((r) => setTimeout(r, 5));
|
|
44
|
-
await logEvent({ event: 'b' });
|
|
45
|
-
const result = await getAuditLog({});
|
|
46
|
-
expect(result.entries[0]?.event).toBe('b');
|
|
47
|
-
expect(result.entries[1]?.event).toBe('a');
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=audit.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../../src/__tests__/security/audit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"center.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/security/center.test.ts"],"names":[],"mappings":""}
|