@nextsparkjs/core 0.1.0-beta.194 → 0.1.0-beta.196
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/app/guards/DeveloperGuard.d.ts +8 -1
- package/dist/components/app/guards/DeveloperGuard.d.ts.map +1 -1
- package/dist/components/app/guards/DeveloperGuard.js +2 -1
- package/dist/components/app/guards/SuperAdminGuard.d.ts +8 -1
- package/dist/components/app/guards/SuperAdminGuard.d.ts.map +1 -1
- package/dist/components/app/guards/SuperAdminGuard.js +2 -1
- package/dist/components/billing/InvoicesPagination.js +2 -2
- package/dist/components/dashboard/block-editor/block-picker.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/block-picker.js +2 -1
- package/dist/components/dashboard/block-editor/builder-editor-view.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/builder-editor-view.js +39 -23
- package/dist/components/dashboard/block-editor/pattern-reference-preview.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/pattern-reference-preview.js +2 -1
- package/dist/components/dashboard/layouts/AuthGuard.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthGuard.js +3 -4
- package/dist/components/dashboard/layouts/AuthenticatedDashboardLayout.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthenticatedDashboardLayout.js +9 -10
- package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/DashboardAuthLayout.js +3 -4
- package/dist/components/dashboard/layouts/DashboardAuthSkeleton.d.ts +2 -2
- package/dist/components/dashboard/navigation/DynamicNavigation.js +2 -2
- package/dist/components/entities/wrappers/EntityDetailWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityDetailWrapper.js +5 -2
- package/dist/components/entities/wrappers/EntityFormWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityFormWrapper.js +5 -2
- package/dist/components/entities/wrappers/EntityListWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityListWrapper.js +5 -2
- package/dist/components/settings/layouts/SettingsSidebar.d.ts.map +1 -1
- package/dist/components/settings/layouts/SettingsSidebar.js +0 -1
- package/dist/components/teams/CreateTeamButton.js +2 -2
- package/dist/components/teams/CreateTeamDialog.js +1 -1
- package/dist/components/teams/InviteMemberButton.js +3 -3
- package/dist/components/teams/InviteMemberDialog.js +1 -1
- package/dist/components/teams/TeamPendingInvitations.js +2 -2
- package/dist/components/ui/relation-display.d.ts.map +1 -1
- package/dist/components/ui/relation-display.js +2 -1
- package/dist/components/ui/user-display.d.ts.map +1 -1
- package/dist/components/ui/user-display.js +2 -1
- package/dist/emails/otp-verification.d.ts.map +1 -1
- package/dist/emails/otp-verification.js +5 -3
- package/dist/emails/reset-password.d.ts.map +1 -1
- package/dist/emails/reset-password.js +5 -3
- package/dist/emails/team-invitation.d.ts.map +1 -1
- package/dist/emails/team-invitation.js +3 -2
- package/dist/emails/verify-email.d.ts.map +1 -1
- package/dist/emails/verify-email.js +5 -3
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +21 -4
- package/dist/hooks/usePatternUsages.d.ts.map +1 -1
- package/dist/hooks/usePatternUsages.js +3 -2
- package/dist/lib/api/api-error.d.ts +2 -0
- package/dist/lib/api/api-error.d.ts.map +1 -1
- package/dist/lib/api/api-error.js +3 -1
- package/dist/lib/api/auth/dual-auth.d.ts +2 -1
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +22 -4
- package/dist/lib/api/auth/scope-policy.d.ts +6 -3
- package/dist/lib/api/auth/scope-policy.d.ts.map +1 -1
- package/dist/lib/api/auth.d.ts +2 -0
- package/dist/lib/api/auth.d.ts.map +1 -1
- package/dist/lib/api/auth.js +10 -10
- package/dist/lib/api/client-headers.d.ts +11 -0
- package/dist/lib/api/client-headers.d.ts.map +1 -0
- package/dist/lib/api/client-headers.js +12 -0
- package/dist/lib/api/client-ip.d.ts +59 -0
- package/dist/lib/api/client-ip.d.ts.map +1 -0
- package/dist/lib/api/client-ip.js +91 -0
- package/dist/lib/api/cors-response.d.ts +55 -0
- package/dist/lib/api/cors-response.d.ts.map +1 -0
- package/dist/lib/api/cors-response.js +90 -0
- package/dist/lib/api/entities.d.ts.map +1 -1
- package/dist/lib/api/entities.js +4 -3
- package/dist/lib/api/entity/audit-log.d.ts.map +1 -1
- package/dist/lib/api/entity/audit-log.js +2 -1
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +23 -8
- package/dist/lib/api/helpers.d.ts +8 -2
- package/dist/lib/api/helpers.d.ts.map +1 -1
- package/dist/lib/api/helpers.js +32 -103
- package/dist/lib/api/keys.d.ts +6 -0
- package/dist/lib/api/keys.d.ts.map +1 -1
- package/dist/lib/api/keys.js +7 -1
- package/dist/lib/api/permission-middleware.d.ts.map +1 -1
- package/dist/lib/api/permission-middleware.js +0 -2
- package/dist/lib/api/rate-limit.d.ts +12 -0
- package/dist/lib/api/rate-limit.d.ts.map +1 -1
- package/dist/lib/api/rate-limit.js +50 -43
- package/dist/lib/api/request-origin.d.ts +16 -7
- package/dist/lib/api/request-origin.d.ts.map +1 -1
- package/dist/lib/api/request-origin.js +43 -20
- package/dist/lib/auth/load-login-page.d.ts +10 -0
- package/dist/lib/auth/load-login-page.d.ts.map +1 -0
- package/dist/lib/auth/load-login-page.js +7 -0
- package/dist/lib/auth/runtime-readiness.d.ts.map +1 -1
- package/dist/lib/auth/runtime-readiness.js +4 -0
- package/dist/lib/auth/sample-accounts.d.ts +17 -0
- package/dist/lib/auth/sample-accounts.d.ts.map +1 -0
- package/dist/lib/auth/sample-accounts.js +22 -0
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts +1 -8
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts.map +1 -1
- package/dist/lib/auth/security-notifications/device-fingerprint.js +2 -12
- package/dist/lib/auth-email-callbacks.js +3 -3
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +13 -5
- package/dist/lib/cache/public-entity-cache.d.ts +21 -0
- package/dist/lib/cache/public-entity-cache.d.ts.map +1 -0
- package/dist/lib/cache/public-entity-cache.js +25 -0
- package/dist/lib/config/config-client.d.ts.map +1 -1
- package/dist/lib/config/config-client.js +1 -1
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +1 -1
- package/dist/lib/config/public-config-client.d.ts +1 -0
- package/dist/lib/config/public-config-client.d.ts.map +1 -1
- package/dist/lib/config/public-config-client.js +3 -1
- package/dist/lib/config/types.d.ts +2 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/constants/reserved-slugs.d.ts +17 -8
- package/dist/lib/constants/reserved-slugs.d.ts.map +1 -1
- package/dist/lib/constants/reserved-slugs.js +16 -52
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +9 -3
- package/dist/lib/entities/entity-hooks.d.ts.map +1 -1
- package/dist/lib/entities/entity-hooks.js +4 -0
- package/dist/lib/entities/external-api-generator.d.ts.map +1 -1
- package/dist/lib/entities/external-api-generator.js +2 -4
- package/dist/lib/entities/public-slug.d.ts +46 -0
- package/dist/lib/entities/public-slug.d.ts.map +1 -0
- package/dist/lib/entities/public-slug.js +39 -0
- package/dist/lib/mcp/errors.d.ts +2 -0
- package/dist/lib/mcp/errors.d.ts.map +1 -1
- package/dist/lib/mcp/errors.js +3 -1
- package/dist/lib/mcp/index.d.ts +1 -1
- package/dist/lib/mcp/index.d.ts.map +1 -1
- package/dist/lib/mcp/index.js +2 -1
- package/dist/lib/services/generic-entity.service.d.ts.map +1 -1
- package/dist/lib/services/generic-entity.service.js +2 -0
- package/dist/lib/teams/actions.d.ts.map +1 -1
- package/dist/lib/teams/actions.js +0 -1
- package/dist/messages/de/billing.json +12 -1
- package/dist/messages/de/common.json +2 -0
- package/dist/messages/de/docs.json +1 -0
- package/dist/messages/de/features.json +16 -4
- package/dist/messages/de/home.json +5 -0
- package/dist/messages/de/index.d.ts +68 -25
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/de/index.js +2 -0
- package/dist/messages/de/index.ts +2 -0
- package/dist/messages/de/settings.json +1 -0
- package/dist/messages/de/teams.json +3 -18
- package/dist/messages/en/billing.json +1 -1
- package/dist/messages/en/common.json +2 -0
- package/dist/messages/en/docs.json +1 -0
- package/dist/messages/en/features.json +16 -4
- package/dist/messages/en/home.json +5 -0
- package/dist/messages/en/index.d.ts +58 -25
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/index.js +2 -0
- package/dist/messages/en/index.ts +2 -0
- package/dist/messages/en/settings.json +1 -0
- package/dist/messages/en/teams.json +3 -18
- package/dist/messages/es/billing.json +1 -1
- package/dist/messages/es/common.json +2 -0
- package/dist/messages/es/docs.json +1 -0
- package/dist/messages/es/features.json +16 -4
- package/dist/messages/es/home.json +5 -0
- package/dist/messages/es/index.d.ts +41 -8
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/index.js +2 -0
- package/dist/messages/es/index.ts +2 -0
- package/dist/messages/es/settings.json +1 -0
- package/dist/messages/es/teams.json +3 -0
- package/dist/messages/fr/billing.json +12 -1
- package/dist/messages/fr/common.json +2 -0
- package/dist/messages/fr/docs.json +1 -0
- package/dist/messages/fr/features.json +16 -4
- package/dist/messages/fr/home.json +5 -0
- package/dist/messages/fr/index.d.ts +68 -25
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/fr/index.js +2 -0
- package/dist/messages/fr/index.ts +2 -0
- package/dist/messages/fr/settings.json +1 -0
- package/dist/messages/fr/teams.json +3 -18
- package/dist/messages/it/billing.json +12 -1
- package/dist/messages/it/common.json +2 -0
- package/dist/messages/it/docs.json +1 -0
- package/dist/messages/it/features.json +16 -4
- package/dist/messages/it/home.json +5 -0
- package/dist/messages/it/index.d.ts +68 -25
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/it/index.js +2 -0
- package/dist/messages/it/index.ts +2 -0
- package/dist/messages/it/settings.json +1 -0
- package/dist/messages/it/teams.json +3 -18
- package/dist/messages/pt/billing.json +12 -1
- package/dist/messages/pt/common.json +2 -0
- package/dist/messages/pt/docs.json +1 -0
- package/dist/messages/pt/features.json +16 -4
- package/dist/messages/pt/home.json +5 -0
- package/dist/messages/pt/index.d.ts +68 -25
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/messages/pt/index.js +2 -0
- package/dist/messages/pt/index.ts +2 -0
- package/dist/messages/pt/settings.json +1 -0
- package/dist/messages/pt/teams.json +3 -18
- package/dist/migrations/029_sample_accounts_outside_development.sql +55 -0
- package/dist/migrations/090_sample_data.sql +10 -0
- package/dist/routes/(auth)/signup/page.cc.d.ts +3 -8
- package/dist/routes/(auth)/signup/page.cc.d.ts.map +1 -1
- package/dist/routes/(auth)/signup/page.cc.js +7 -1
- package/dist/routes/(auth)/verify-email/page.d.ts.map +1 -1
- package/dist/routes/(auth)/verify-email/page.js +2 -1
- package/dist/routes/(public)/page.cc.d.ts +3 -0
- package/dist/routes/(public)/page.cc.d.ts.map +1 -0
- package/dist/routes/(public)/page.cc.js +3 -0
- package/dist/routes/_internal/area-access.cc.d.ts +21 -0
- package/dist/routes/_internal/area-access.cc.d.ts.map +1 -0
- package/dist/routes/_internal/area-access.cc.js +19 -0
- package/dist/routes/_internal/auth-layout.d.ts.map +1 -1
- package/dist/routes/_internal/auth-layout.js +3 -2
- package/dist/routes/_internal/dashboard-main-shared.d.ts +7 -0
- package/dist/routes/_internal/dashboard-main-shared.d.ts.map +1 -0
- package/dist/routes/_internal/dashboard-main-shared.js +49 -0
- package/dist/routes/_internal/default-auth-layout.d.ts.map +1 -1
- package/dist/routes/_internal/default-auth-layout.js +3 -2
- package/dist/routes/_internal/devtools-layout.cc.d.ts +3 -2
- package/dist/routes/_internal/devtools-layout.cc.d.ts.map +1 -1
- package/dist/routes/_internal/devtools-layout.cc.js +1 -1
- package/dist/routes/_internal/devtools-layout.d.ts +7 -2
- package/dist/routes/_internal/devtools-layout.d.ts.map +1 -1
- package/dist/routes/_internal/devtools-layout.js +4 -4
- package/dist/routes/_internal/entity-detail-route.cc.d.ts +8 -0
- package/dist/routes/_internal/entity-detail-route.cc.d.ts.map +1 -0
- package/dist/routes/_internal/entity-detail-route.cc.js +5 -0
- package/dist/routes/_internal/entity-edit-route.cc.d.ts +8 -0
- package/dist/routes/_internal/entity-edit-route.cc.d.ts.map +1 -0
- package/dist/routes/_internal/entity-edit-route.cc.js +5 -0
- package/dist/routes/_internal/entity-permission-layout.d.ts.map +1 -1
- package/dist/routes/_internal/entity-permission-layout.js +0 -7
- package/dist/routes/_internal/public-archive-route.d.ts +1 -1
- package/dist/routes/_internal/public-archive-route.d.ts.map +1 -1
- package/dist/routes/_internal/public-archive-route.js +8 -3
- package/dist/routes/_internal/public-item-route.cc.d.ts +5 -1
- package/dist/routes/_internal/public-item-route.cc.d.ts.map +1 -1
- package/dist/routes/_internal/public-item-route.cc.js +2 -1
- package/dist/routes/_internal/public-item-route.d.ts +7 -0
- package/dist/routes/_internal/public-item-route.d.ts.map +1 -1
- package/dist/routes/_internal/public-item-route.js +6 -1
- package/dist/routes/_internal/superadmin-layout.cc.d.ts +2 -1
- package/dist/routes/_internal/superadmin-layout.cc.d.ts.map +1 -1
- package/dist/routes/_internal/superadmin-layout.cc.js +1 -1
- package/dist/routes/_internal/superadmin-layout.d.ts +7 -2
- package/dist/routes/_internal/superadmin-layout.d.ts.map +1 -1
- package/dist/routes/_internal/superadmin-layout.js +6 -6
- package/dist/routes/_internal/suspended-route.d.ts +16 -0
- package/dist/routes/_internal/suspended-route.d.ts.map +1 -0
- package/dist/routes/_internal/suspended-route.js +7 -0
- package/dist/routes/api/auth/[...all]/route.d.ts.map +1 -1
- package/dist/routes/api/auth/[...all]/route.js +4 -12
- package/dist/routes/api/csp-report/route.d.ts.map +1 -1
- package/dist/routes/api/csp-report/route.js +2 -13
- package/dist/routes/api/devtools/config/entities/route.d.ts +2 -0
- package/dist/routes/api/devtools/config/entities/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/config/entities/route.js +2 -0
- package/dist/routes/api/devtools/config/theme/route.d.ts +2 -0
- package/dist/routes/api/devtools/config/theme/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/config/theme/route.js +2 -0
- package/dist/routes/api/devtools/tests/[...path]/route.d.ts +2 -0
- package/dist/routes/api/devtools/tests/[...path]/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/tests/[...path]/route.js +2 -0
- package/dist/routes/api/devtools/tests/route.d.ts +2 -0
- package/dist/routes/api/devtools/tests/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/tests/route.js +2 -0
- package/dist/routes/api/health/route.d.ts +2 -0
- package/dist/routes/api/health/route.d.ts.map +1 -1
- package/dist/routes/api/health/route.js +2 -0
- package/dist/routes/api/internal/user-metadata/route.d.ts +2 -0
- package/dist/routes/api/internal/user-metadata/route.d.ts.map +1 -1
- package/dist/routes/api/internal/user-metadata/route.js +2 -0
- package/dist/routes/api/mcp/route.d.ts +2 -0
- package/dist/routes/api/mcp/route.d.ts.map +1 -1
- package/dist/routes/api/mcp/route.js +9 -1
- package/dist/routes/api/superadmin/subscriptions/route.d.ts +2 -0
- package/dist/routes/api/superadmin/subscriptions/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/subscriptions/route.js +2 -0
- package/dist/routes/api/superadmin/teams/[teamId]/route.d.ts +2 -0
- package/dist/routes/api/superadmin/teams/[teamId]/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/teams/[teamId]/route.js +2 -0
- package/dist/routes/api/superadmin/teams/route.d.ts +2 -0
- package/dist/routes/api/superadmin/teams/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/teams/route.js +2 -0
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts +2 -0
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/users/[userId]/route.js +2 -0
- package/dist/routes/api/superadmin/users/route.d.ts +2 -0
- package/dist/routes/api/superadmin/users/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/users/route.js +2 -0
- package/dist/routes/api/user/delete-account/route.d.ts +2 -0
- package/dist/routes/api/user/delete-account/route.d.ts.map +1 -1
- package/dist/routes/api/user/delete-account/route.js +2 -0
- package/dist/routes/api/user/plan-flags/route.d.ts +2 -0
- package/dist/routes/api/user/plan-flags/route.d.ts.map +1 -1
- package/dist/routes/api/user/plan-flags/route.js +2 -0
- package/dist/routes/api/user/profile/route.d.ts +2 -0
- package/dist/routes/api/user/profile/route.d.ts.map +1 -1
- package/dist/routes/api/user/profile/route.js +4 -3
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.d.ts +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.js +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.d.ts +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.js +2 -0
- package/dist/routes/api/v1/billing/cancel/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/cancel/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/cancel/route.js +2 -0
- package/dist/routes/api/v1/billing/change-plan/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/change-plan/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/change-plan/route.js +2 -0
- package/dist/routes/api/v1/billing/check-action/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/check-action/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/check-action/route.js +2 -0
- package/dist/routes/api/v1/billing/checkout/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/checkout/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/checkout/route.js +2 -0
- package/dist/routes/api/v1/billing/plans/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/plans/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/plans/route.js +2 -0
- package/dist/routes/api/v1/billing/portal/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/portal/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/portal/route.js +2 -0
- package/dist/routes/api/v1/blocks/[slug]/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/[slug]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/[slug]/route.js +2 -0
- package/dist/routes/api/v1/blocks/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/route.js +2 -0
- package/dist/routes/api/v1/blocks/validate/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/validate/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/validate/route.js +2 -0
- package/dist/routes/api/v1/devtools/blocks/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/blocks/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/blocks/route.js +2 -9
- package/dist/routes/api/v1/devtools/docs/route.d.ts +2 -0
- package/dist/routes/api/v1/devtools/docs/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/docs/route.js +2 -0
- package/dist/routes/api/v1/devtools/features/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/features/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/features/route.js +2 -9
- package/dist/routes/api/v1/devtools/flows/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/flows/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/flows/route.js +2 -9
- package/dist/routes/api/v1/devtools/scheduled-actions/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/route.js +2 -9
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.js +2 -9
- package/dist/routes/api/v1/devtools/testing/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/testing/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/testing/route.js +2 -9
- package/dist/routes/api/v1/media/[id]/route.d.ts +2 -0
- package/dist/routes/api/v1/media/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/[id]/route.js +2 -0
- package/dist/routes/api/v1/media/[id]/tags/route.d.ts +2 -0
- package/dist/routes/api/v1/media/[id]/tags/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/[id]/tags/route.js +2 -0
- package/dist/routes/api/v1/media/check-duplicates/route.d.ts +2 -0
- package/dist/routes/api/v1/media/check-duplicates/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/check-duplicates/route.js +2 -0
- package/dist/routes/api/v1/media/route.d.ts +2 -0
- package/dist/routes/api/v1/media/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/route.js +2 -0
- package/dist/routes/api/v1/media/upload/route.d.ts +4 -1
- package/dist/routes/api/v1/media/upload/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/upload/route.js +12 -2
- package/dist/routes/api/v1/media-tags/route.d.ts +2 -0
- package/dist/routes/api/v1/media-tags/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media-tags/route.js +2 -0
- package/dist/routes/api/v1/post-categories/[id]/route.d.ts +2 -0
- package/dist/routes/api/v1/post-categories/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/[id]/route.js +2 -0
- package/dist/routes/api/v1/post-categories/route.d.ts +2 -0
- package/dist/routes/api/v1/post-categories/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/route.js +2 -0
- package/dist/routes/api/v1/teams/[teamId]/members/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/members/route.js +14 -12
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.d.ts +2 -0
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.js +2 -0
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.d.ts +2 -0
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.js +2 -0
- package/dist/routes/api/v1/teams/switch/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/switch/route.js +4 -1
- package/dist/routes/api/v1/users/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/users/[id]/route.js +3 -2
- package/dist/routes/api/v1/users/docs.md +34 -19
- package/dist/routes/api/v1/users/me/route.d.ts +6 -0
- package/dist/routes/api/v1/users/me/route.d.ts.map +1 -0
- package/dist/routes/api/v1/users/me/route.js +5 -0
- package/dist/routes/api/v1/users/presets.ts +2 -2
- package/dist/routes/dashboard/(main)/layout.cc.d.ts +4 -0
- package/dist/routes/dashboard/(main)/layout.cc.d.ts.map +1 -0
- package/dist/routes/dashboard/(main)/layout.cc.js +10 -0
- package/dist/routes/dashboard/(main)/layout.d.ts.map +1 -1
- package/dist/routes/dashboard/(main)/layout.js +3 -44
- package/dist/routes/dashboard/permission-denied/page.d.ts +1 -1
- package/dist/routes/dashboard/permission-denied/page.d.ts.map +1 -1
- package/dist/routes/dashboard/permission-denied/page.js +5 -1
- package/dist/routes/dashboard/settings/password/page.d.ts.map +1 -1
- package/dist/routes/dashboard/settings/password/page.js +10 -12
- package/dist/routes/devtools/config/page.js +1 -1
- package/dist/routes/devtools/layout.cc.d.ts.map +1 -1
- package/dist/routes/devtools/layout.cc.js +5 -1
- package/dist/routes/devtools/page.js +1 -1
- package/dist/routes/devtools/scheduled-actions/page.js +1 -1
- package/dist/routes/devtools/tests/[[...path]]/page.js +1 -1
- package/dist/routes/manifest.json +10 -0
- package/dist/routes/robots.d.ts +10 -0
- package/dist/routes/robots.d.ts.map +1 -0
- package/dist/routes/robots.js +10 -0
- package/dist/routes/superadmin/layout.cc.d.ts.map +1 -1
- package/dist/routes/superadmin/layout.cc.js +5 -1
- package/dist/routes/variants.json +12 -2
- package/dist/templates/ci-workflows/github/cypress-regression.yml +1 -1
- package/dist/templates/ci-workflows/github/cypress-smoke.yml +2 -1
- package/dist/templates/next.config.mjs +2 -29
- package/dist/templates/projects/blog/api/authors/[username]/route.ts +3 -0
- package/dist/templates/projects/blog/api/authors/route.ts +3 -0
- package/dist/templates/projects/blog/api/posts/public/route.ts +3 -0
- package/dist/templates/projects/starter/README.md +2 -0
- package/dist/templates/projects/starter/docs/public/01-overview/01-introduction.md +2 -0
- package/dist/templates/projects/starter/templates/dashboard/analytics/layout.tsx +14 -0
- package/dist/templates/proxy.ts +27 -9
- package/dist/templates/public/favicon.ico +0 -0
- package/dist/templates/public/uploads/README.md +5 -94
- package/migrations/029_sample_accounts_outside_development.sql +55 -0
- package/migrations/090_sample_data.sql +10 -0
- package/package.json +2 -2
- package/scripts/build/registry/__tests__/api-docs-colocated.test.mjs +3 -0
- package/scripts/build/registry/__tests__/billing-registry.test.mjs +50 -1
- package/scripts/build/registry/__tests__/block-registry.test.mjs +3 -0
- package/scripts/build/registry/__tests__/icons-discovery.test.mjs +3 -0
- package/scripts/build/registry/__tests__/quiet-console.mjs +17 -0
- package/scripts/build/registry/__tests__/safe-fs.test.mjs +3 -0
- package/scripts/build/registry/__tests__/team-roles.test.mjs +3 -0
- package/scripts/build/registry/discovery/permissions.test.mjs +3 -0
- package/scripts/build/registry/discovery/plugin-capabilities.mjs +2 -2
- package/scripts/build/registry/generators/billing-registry.mjs +7 -3
- package/scripts/build/registry/host/README.md +25 -1
- package/scripts/build/registry/host/__tests__/host-area-access.test.mjs +32 -0
- package/scripts/build/registry/host/__tests__/host-entities.test.mjs +32 -1
- package/scripts/build/registry/host/__tests__/host-plan.test.mjs +12 -2
- package/scripts/build/registry/host/__tests__/host-proxy-areas.test.mjs +72 -1
- package/scripts/build/registry/host/entity-routes.mjs +9 -3
- package/scripts/build/registry/host/proxy-areas.mjs +65 -2
- package/scripts/build/registry/host/static-imports.mjs +4 -0
- package/scripts/build/routes-manifest.mjs +13 -1
- package/scripts/db/run-migrations.mjs +30 -10
- package/scripts/db/sample-data.mjs +44 -0
- package/scripts/db/ssl-config.mjs +12 -1
- package/scripts/db/verify-theme-migrations.mjs +6 -0
- package/templates/ci-workflows/github/cypress-regression.yml +1 -1
- package/templates/ci-workflows/github/cypress-smoke.yml +2 -1
- package/templates/next.config.mjs +2 -29
- package/templates/projects/blog/api/authors/[username]/route.ts +3 -0
- package/templates/projects/blog/api/authors/route.ts +3 -0
- package/templates/projects/blog/api/posts/public/route.ts +3 -0
- package/templates/projects/starter/README.md +2 -0
- package/templates/projects/starter/docs/public/01-overview/01-introduction.md +2 -0
- package/templates/projects/starter/templates/dashboard/analytics/layout.tsx +14 -0
- package/templates/proxy.ts +27 -9
- package/templates/public/favicon.ico +0 -0
- package/templates/public/uploads/README.md +5 -94
- package/tests/jest/__mocks__/@nextsparkjs/registries/api-presets-registry.ts +2 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/mcp-registry.ts +2 -0
- package/dist/templates/projects/starter/public/brand/.gitkeep +0 -0
- package/dist/templates/public/uploads/.gitignore +0 -6
- package/dist/templates/public/uploads/temp/.gitkeep +0 -1
- package/templates/projects/starter/public/brand/.gitkeep +0 -0
- package/templates/public/uploads/.gitignore +0 -6
- package/templates/public/uploads/temp/.gitkeep +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-auth-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/default-auth-layout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"default-auth-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/default-auth-layout.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA+B5E"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Suspense } from "react";
|
|
3
3
|
import { AuthWrapper } from "@nextsparkjs/core/components/auth/layouts/AuthWrapper";
|
|
4
|
+
import { APP_DESCRIPTION, APP_NAME } from "@nextsparkjs/core/lib/config/public-config-client";
|
|
4
5
|
export function DefaultAuthLayout({ children }) {
|
|
5
6
|
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-gradient-to-b from-background to-muted/20 flex items-center justify-center p-4", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md", children: [
|
|
6
7
|
/* @__PURE__ */ jsxs("div", { className: "bg-card rounded-lg shadow-lg border border-border p-8", children: [
|
|
7
8
|
/* @__PURE__ */ jsxs("div", { className: "text-center mb-8", children: [
|
|
8
|
-
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground mb-2", children:
|
|
9
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children:
|
|
9
|
+
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground mb-2", children: APP_NAME }),
|
|
10
|
+
APP_DESCRIPTION && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: APP_DESCRIPTION })
|
|
10
11
|
] }),
|
|
11
12
|
/* @__PURE__ */ jsx(AuthWrapper, { children: /* @__PURE__ */ jsx(Suspense, { fallback: null, children }) })
|
|
12
13
|
] }),
|
|
@@ -10,8 +10,9 @@ export declare const withDevtoolsAreaMessages: (Layout: ComponentType<DevLayoutP
|
|
|
10
10
|
/**
|
|
11
11
|
* What a project's devtools layout is composed with in Cache Components mode (the manifest's `compose` of that
|
|
12
12
|
* variant): the mode's messages and the server-side role check, then core's client guard around the project's layout,
|
|
13
|
-
* as `withDevtoolsGuard` does in the ISR module.
|
|
14
|
-
* the
|
|
13
|
+
* as `withDevtoolsGuard` does in the ISR module. The guard is told the server checked the role (`serverChecked`), so it
|
|
14
|
+
* renders the area while the client session loads. A module of its own so only the devtools route group imports the
|
|
15
|
+
* guard, the role check and their client components.
|
|
15
16
|
*/
|
|
16
17
|
export declare const withDevtoolsGuard: (ProjectLayout: ComponentType<DevLayoutProps>) => ({ children }: {
|
|
17
18
|
children: import("react").ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-layout.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/devtools-layout.cc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAG5E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,aAAa,CAAC,cAAc,CAAC;;6CAA2D,CAAA;AAEzI
|
|
1
|
+
{"version":3,"file":"devtools-layout.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/devtools-layout.cc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAG5E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,aAAa,CAAC,cAAc,CAAC;;6CAA2D,CAAA;AAEzI;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,aAAa,CAAC,cAAc,CAAC;;6CAAuE,CAAA"}
|
|
@@ -2,4 +2,4 @@ import { withDevtoolsMessages } from "./group-layouts.cc.js";
|
|
|
2
2
|
import { guardDevtoolsLayout } from "./devtools-layout.js";
|
|
3
3
|
import { withAreaGate } from "./area-access.js";
|
|
4
4
|
export const withDevtoolsAreaMessages = (Layout) => withDevtoolsMessages(withAreaGate("devtools", Layout));
|
|
5
|
-
export const withDevtoolsGuard = (ProjectLayout) => withDevtoolsAreaMessages(guardDevtoolsLayout(ProjectLayout));
|
|
5
|
+
export const withDevtoolsGuard = (ProjectLayout) => withDevtoolsAreaMessages(guardDevtoolsLayout(ProjectLayout, true));
|
|
@@ -4,6 +4,10 @@ export declare const defaultMetadata: Metadata;
|
|
|
4
4
|
export interface DevLayoutProps {
|
|
5
5
|
children: React.ReactNode;
|
|
6
6
|
}
|
|
7
|
+
/** `serverChecked`: see DeveloperGuard (only the Cache Components module passes it, after its role check). */
|
|
8
|
+
type GuardedProps = DevLayoutProps & {
|
|
9
|
+
serverChecked?: boolean;
|
|
10
|
+
};
|
|
7
11
|
/**
|
|
8
12
|
* Developer Area Layout
|
|
9
13
|
*
|
|
@@ -12,7 +16,7 @@ export interface DevLayoutProps {
|
|
|
12
16
|
* Includes responsive design for mobile and desktop.
|
|
13
17
|
* Uses purple/violet color scheme to differentiate from Admin Panel (red).
|
|
14
18
|
*/
|
|
15
|
-
export declare function DevLayout({ children }:
|
|
19
|
+
export declare function DevLayout({ children, serverChecked }: GuardedProps): import("react/jsx-runtime").JSX.Element;
|
|
16
20
|
/**
|
|
17
21
|
* Wraps a layout for this route group in the group's client messages, after the server-side role check
|
|
18
22
|
* (area-access): it runs before anything is rendered or sent, so a page load without the role gets a 307. The
|
|
@@ -27,10 +31,11 @@ export declare function withDevtoolsMessages(ResolvedDevLayout: ComponentType<De
|
|
|
27
31
|
* /devtools checks again, see area-access). Shared by the message wrappers of both rendering modes
|
|
28
32
|
* (`withDevtoolsGuard` here, and in `group-layouts.cc`).
|
|
29
33
|
*/
|
|
30
|
-
export declare function guardDevtoolsLayout(ProjectLayout: ComponentType<DevLayoutProps
|
|
34
|
+
export declare function guardDevtoolsLayout(ProjectLayout: ComponentType<DevLayoutProps>, serverChecked?: boolean): ({ children }: DevLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
31
35
|
/**
|
|
32
36
|
* The composition of a project's devtools layout with core (the generated host): messages, then
|
|
33
37
|
* `guardDevtoolsLayout` around the project's layout.
|
|
34
38
|
*/
|
|
35
39
|
export declare function withDevtoolsGuard(ProjectLayout: ComponentType<DevLayoutProps>): ({ children }: DevLayoutProps) => Promise<import("react/jsx-runtime").JSX.Element>;
|
|
40
|
+
export {};
|
|
36
41
|
//# sourceMappingURL=devtools-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/devtools-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAK1C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAOhC,eAAO,MAAM,eAAe,EAAE,QAI7B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"devtools-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/devtools-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAK1C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAOhC,eAAO,MAAM,eAAe,EAAE,QAI7B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,8GAA8G;AAC9G,KAAK,YAAY,GAAG,cAAc,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEhE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,YAAY,2CAgClE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,aAAa,CAAC,cAAc,CAAC,IACvC,cAAc,cAAc,sDASzE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,aAAa,UAAQ,IACpE,cAAc,cAAc,6CAS9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC,kBAlClB,cAAc,sDAoCzE"}
|
|
@@ -14,9 +14,9 @@ export const defaultMetadata = {
|
|
|
14
14
|
robots: "noindex, nofollow"
|
|
15
15
|
// Prevent search engine indexing
|
|
16
16
|
};
|
|
17
|
-
export function DevLayout({ children }) {
|
|
17
|
+
export function DevLayout({ children, serverChecked }) {
|
|
18
18
|
const pluginNavItems = getAllPluginNavItems("devtools");
|
|
19
|
-
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(DeveloperGuard, { children: /* @__PURE__ */ jsxs("div", { className: "flex h-screen bg-background", children: [
|
|
19
|
+
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(DeveloperGuard, { serverChecked, children: /* @__PURE__ */ jsxs("div", { className: "flex h-screen bg-background", children: [
|
|
20
20
|
/* @__PURE__ */ jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsx(DevtoolsSidebar, { pluginItems: pluginNavItems }) }),
|
|
21
21
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col overflow-hidden", children: [
|
|
22
22
|
/* @__PURE__ */ jsx(DevtoolsMobileHeader, {}),
|
|
@@ -31,9 +31,9 @@ export function withDevtoolsMessages(ResolvedDevLayout) {
|
|
|
31
31
|
return /* @__PURE__ */ jsx(NextIntlClientProvider, { messages: selectMessages(messages, "devtools"), children: /* @__PURE__ */ jsx(ResolvedDevLayout, { children }) });
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
export function guardDevtoolsLayout(ProjectLayout) {
|
|
34
|
+
export function guardDevtoolsLayout(ProjectLayout, serverChecked = false) {
|
|
35
35
|
return function GuardedDevLayout({ children }) {
|
|
36
|
-
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(DeveloperGuard, { children: /* @__PURE__ */ jsx(ProjectLayout, { children }) }) });
|
|
36
|
+
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(DeveloperGuard, { serverChecked, children: /* @__PURE__ */ jsx(ProjectLayout, { children }) }) });
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
export function withDevtoolsGuard(ProjectLayout) {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createEntityDetailRoute as createRoute } from './entity-detail-route';
|
|
2
|
+
export type { EntityDetailTemplateProps } from './entity-detail-route';
|
|
3
|
+
export declare function createEntityDetailRoute(...args: Parameters<typeof createRoute>): (props: {
|
|
4
|
+
params: Promise<{
|
|
5
|
+
id: string;
|
|
6
|
+
}>;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=entity-detail-route.cc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-detail-route.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/entity-detail-route.cc.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAE9E,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,wBAAgB,uBAAuB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC;;;;8CAE9E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createEntityEditRoute as createRoute } from './entity-edit-route';
|
|
2
|
+
export type { EntityEditTemplateProps } from './entity-edit-route';
|
|
3
|
+
export declare function createEntityEditRoute(...args: Parameters<typeof createRoute>): (props: {
|
|
4
|
+
params: Promise<{
|
|
5
|
+
id: string;
|
|
6
|
+
}>;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=entity-edit-route.cc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-edit-route.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/entity-edit-route.cc.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE1E,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,wBAAgB,qBAAqB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC;;;;8CAE5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-permission-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/entity-permission-layout.tsx"],"names":[],"mappings":"AAqDA,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,MAAM,EACN,QAAQ,GACT,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"entity-permission-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/entity-permission-layout.tsx"],"names":[],"mappings":"AAqDA,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,MAAM,EACN,QAAQ,GACT,EAAE,2BAA2B,oDAyC7B"}
|
|
@@ -34,13 +34,6 @@ export async function EntityPermissionLayout({
|
|
|
34
34
|
}
|
|
35
35
|
const action = detectActionFromPathname(pathname, entity);
|
|
36
36
|
const permission = `${entity}.${action}`;
|
|
37
|
-
console.log("[EntityPermissionLayout] Checking permission:", {
|
|
38
|
-
entity,
|
|
39
|
-
action,
|
|
40
|
-
permission,
|
|
41
|
-
userId,
|
|
42
|
-
teamId
|
|
43
|
-
});
|
|
44
37
|
const hasPermission = await checkPermission(userId, teamId, permission);
|
|
45
38
|
if (!hasPermission) {
|
|
46
39
|
console.log("[EntityPermissionLayout] Permission denied, redirecting");
|
|
@@ -13,7 +13,7 @@ type SearchParams = Promise<{
|
|
|
13
13
|
/** @param config - the entity's config (`ui.public.hasArchivePage` decides whether the archive is served) */
|
|
14
14
|
export declare function createPublicArchiveRoute(config: EntityConfig): ({ searchParams }: {
|
|
15
15
|
searchParams: SearchParams;
|
|
16
|
-
}) =>
|
|
16
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
/** `generateMetadata` of an entity's archive page. */
|
|
18
18
|
export declare function createPublicArchiveMetadata(config: EntityConfig): () => Promise<Metadata>;
|
|
19
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-archive-route.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-archive-route.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"public-archive-route.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-archive-route.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAGpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAGxE,KAAK,YAAY,GAAG,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CAAA;AAW7E,6GAA6G;AAC7G,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,IACxB,kBAAkB;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,6CAkBpF;AAED,sDAAsD;AACtD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,YAAY,SACP,OAAO,CAAC,QAAQ,CAAC,CAMzE"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense } from "react";
|
|
2
3
|
import { notFound } from "next/navigation";
|
|
3
4
|
import { PublicEntityGrid } from "@nextsparkjs/core/components/public/entities/PublicEntityGrid";
|
|
5
|
+
import { APP_NAME } from "@nextsparkjs/core/lib/config/public-config-client";
|
|
6
|
+
async function ArchiveGrid({ config, searchParams }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(PublicEntityGrid, { entityType: config.slug, entitySlug: config.slug, searchParams: await searchParams });
|
|
8
|
+
}
|
|
4
9
|
export function createPublicArchiveRoute(config) {
|
|
5
|
-
return
|
|
10
|
+
return function PublicArchiveRoute({ searchParams }) {
|
|
6
11
|
var _a, _b, _c, _d, _e, _f;
|
|
7
12
|
if (!((_b = (_a = config.ui) == null ? void 0 : _a.public) == null ? void 0 : _b.hasArchivePage)) notFound();
|
|
8
13
|
const hasBasePath = Boolean(((_c = config.access) == null ? void 0 : _c.basePath) ?? ((_e = (_d = config.builder) == null ? void 0 : _d.public) == null ? void 0 : _e.basePath));
|
|
@@ -15,14 +20,14 @@ export function createPublicArchiveRoute(config) {
|
|
|
15
20
|
config.names.plural.toLowerCase()
|
|
16
21
|
] })
|
|
17
22
|
] }),
|
|
18
|
-
/* @__PURE__ */ jsx(
|
|
23
|
+
/* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(ArchiveGrid, { config, searchParams }) })
|
|
19
24
|
] });
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
export function createPublicArchiveMetadata(config) {
|
|
23
28
|
return async function generatePublicArchiveMetadata() {
|
|
24
29
|
return {
|
|
25
|
-
title: `${config.names.plural} |
|
|
30
|
+
title: `${config.names.plural} | ${APP_NAME}`,
|
|
26
31
|
description: `Browse all ${config.names.plural.toLowerCase()}`
|
|
27
32
|
};
|
|
28
33
|
};
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { EntityConfig } from '@nextsparkjs/core/lib/entities/types';
|
|
2
|
-
|
|
2
|
+
declare const cachedRoutes: {
|
|
3
|
+
createPublicItemRoute: (config: EntityConfig, Template?: import("react").ComponentType<import("./public-item-route").PublicItemTemplateProps>) => ({ params, searchParams }: import("./public-item-route").ItemRouteProps) => Promise<import("react/jsx-runtime").JSX.Element>;
|
|
4
|
+
createPublicItemMetadata: (config: EntityConfig) => ({ params }: Pick<import("./public-item-route").ItemRouteProps, "params">) => Promise<import("next").Metadata>;
|
|
5
|
+
};
|
|
6
|
+
export declare const createPublicItemRoute: (...args: Parameters<typeof cachedRoutes.createPublicItemRoute>) => (props: import("./public-item-route").ItemRouteProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
7
|
export declare const createPublicItemMetadata: (config: EntityConfig) => ({ params }: Pick<import("./public-item-route").ItemRouteProps, "params">) => Promise<import("next").Metadata>;
|
|
4
8
|
export type { PublicItemTemplateProps } from './public-item-route';
|
|
5
9
|
//# sourceMappingURL=public-item-route.cc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-item-route.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-item-route.cc.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAsCxE,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"public-item-route.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-item-route.cc.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAsCxE,QAAA,MAAM,YAAY;;;CAAqC,CAAA;AAEvD,eAAO,MAAM,qBAAqB,GAAI,GAAG,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,qBAAqB,CAAC,qGAAgE,CAAA;AACpK,eAAO,MAAM,wBAAwB,0IAAwC,CAAA;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { query } from "@nextsparkjs/core/lib/db";
|
|
|
3
3
|
import { PatternsResolverService } from "@nextsparkjs/core/lib/blocks/patterns-resolver.service";
|
|
4
4
|
import { buildPublicSelectClause, getResolvedBlocks } from "./public-entity-shared.js";
|
|
5
5
|
import { bindPublicItemRoutes } from "./public-item-route.js";
|
|
6
|
+
import { behindSuspense } from "./suspended-route.js";
|
|
6
7
|
async function readPublishedItem(entitySlug, tableName, selectClause, slug) {
|
|
7
8
|
"use cache";
|
|
8
9
|
cacheLife({ stale: 300, revalidate: 3600, expire: 86400 });
|
|
@@ -28,5 +29,5 @@ const cachedSource = {
|
|
|
28
29
|
resolveBlocks: (blocks) => getResolvedBlocks(blocks, readPatterns)
|
|
29
30
|
};
|
|
30
31
|
const cachedRoutes = bindPublicItemRoutes(cachedSource);
|
|
31
|
-
export const createPublicItemRoute = cachedRoutes.createPublicItemRoute;
|
|
32
|
+
export const createPublicItemRoute = (...args) => behindSuspense(cachedRoutes.createPublicItemRoute(...args));
|
|
32
33
|
export const createPublicItemMetadata = cachedRoutes.createPublicItemMetadata;
|
|
@@ -28,6 +28,13 @@ export interface ItemRouteProps {
|
|
|
28
28
|
}>;
|
|
29
29
|
searchParams: SearchParams;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* The extensions of the static files a browser or crawler asks a site for. A request for one that reaches an item route
|
|
33
|
+
* (`/favicon.ico`, `/robots.txt`, `/apple-touch-icon.png`) is not an item: it answers not found at once, without reading the
|
|
34
|
+
* database or rendering a template. A slug may contain a dot (`release-1.0`, `v2.5`), so only these extensions on the last
|
|
35
|
+
* segment count.
|
|
36
|
+
*/
|
|
37
|
+
export declare const STATIC_FILE_EXTENSION: RegExp;
|
|
31
38
|
/**
|
|
32
39
|
* Where a public item comes from. The default reads the database on every render; `public-item-route.cc` (the
|
|
33
40
|
* Cache Components host's module) supplies a cached one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-item-route.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-item-route.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAGpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"public-item-route.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/public-item-route.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAGpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGlG,KAAK,YAAY,GAAG,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CAAA;AAE7E,sGAAsG;AACtG,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC5C,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAuF,CAAA;AAOzH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC5E,oGAAoG;IACpG,aAAa,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG,gBAAgB,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtF;AAkED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB;oCAEzB,YAAY,aAAa,aAAa,CAAC,uBAAuB,CAAC,gCApCjC,cAAc;uCAqCzC,YAAY,kBAxBY,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAG,OAAO,CAAC,QAAQ,CAAC;EA0BhH;AAGD,eAAO,MAAM,qBAAqB,WANE,YAAY,aAAa,aAAa,CAAC,uBAAuB,CAAC,gCApCjC,cAAc,qDA0CP,CAAA;AACzE,eAAO,MAAM,wBAAwB,WANE,YAAY,kBAxBY,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAG,OAAO,CAAC,QAAQ,CA8BjC,CAAA"}
|
|
@@ -2,6 +2,9 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { notFound } from "next/navigation";
|
|
3
3
|
import { PageRenderer } from "@nextsparkjs/core/components/public/pageBuilder";
|
|
4
4
|
import { fetchPublishedItem, getResolvedBlocks } from "./public-entity-shared.js";
|
|
5
|
+
import { APP_NAME } from "@nextsparkjs/core/lib/config/public-config-client";
|
|
6
|
+
export const STATIC_FILE_EXTENSION = /\.(?:ico|png|jpe?g|gif|svg|webp|avif|txt|xml|json|webmanifest|map|js|css|woff2?)$/i;
|
|
7
|
+
const isFileRequest = (slug) => STATIC_FILE_EXTENSION.test(slug);
|
|
5
8
|
const slugOf = (slug) => Array.isArray(slug) ? slug.join("/") : slug;
|
|
6
9
|
const databaseSource = { fetchItem: fetchPublishedItem, resolveBlocks: getResolvedBlocks };
|
|
7
10
|
async function renderDefaultPublicItem(source, entity, slug) {
|
|
@@ -24,6 +27,7 @@ async function renderDefaultPublicItem(source, entity, slug) {
|
|
|
24
27
|
function itemRoute(source, config, Template) {
|
|
25
28
|
return async function PublicItemRoute({ params, searchParams }) {
|
|
26
29
|
const slug = slugOf((await params).slug);
|
|
30
|
+
if (isFileRequest(slug)) notFound();
|
|
27
31
|
if (Template) return /* @__PURE__ */ jsx(Template, { params: Promise.resolve({ slug }), searchParams });
|
|
28
32
|
const item = await renderDefaultPublicItem(source, config, slug);
|
|
29
33
|
if (!item) notFound();
|
|
@@ -33,10 +37,11 @@ function itemRoute(source, config, Template) {
|
|
|
33
37
|
function itemMetadata(source, config) {
|
|
34
38
|
return async function generatePublicItemMetadata({ params }) {
|
|
35
39
|
const slug = slugOf((await params).slug);
|
|
40
|
+
if (isFileRequest(slug)) return { title: "Not Found" };
|
|
36
41
|
const item = await source.fetchItem(config, slug);
|
|
37
42
|
if (item) {
|
|
38
43
|
return {
|
|
39
|
-
title: item.seoTitle || `${item.title} |
|
|
44
|
+
title: item.seoTitle || `${item.title} | ${APP_NAME}`,
|
|
40
45
|
description: item.seoDescription || item.excerpt || void 0,
|
|
41
46
|
openGraph: {
|
|
42
47
|
title: item.seoTitle || item.title,
|
|
@@ -10,7 +10,8 @@ export declare const withSuperadminAreaMessages: (Layout: ComponentType<Superadm
|
|
|
10
10
|
/**
|
|
11
11
|
* What a project's superadmin layout is composed with in Cache Components mode (the manifest's `compose` of that
|
|
12
12
|
* variant): the mode's messages and the server-side role check, then core's client guard around the project's layout,
|
|
13
|
-
* as `withSuperadminGuard` does in the ISR module.
|
|
13
|
+
* as `withSuperadminGuard` does in the ISR module. The guard is told the server checked the role (`serverChecked`), so it
|
|
14
|
+
* renders the area while the client session loads. A module of its own so only the superadmin route group imports the
|
|
14
15
|
* guard, the role check and their client components.
|
|
15
16
|
*/
|
|
16
17
|
export declare const withSuperadminGuard: (ProjectLayout: ComponentType<SuperadminLayoutProps>) => ({ children }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superadmin-layout.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/superadmin-layout.cc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGvF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,aAAa,CAAC,qBAAqB,CAAC;;6CAA+D,CAAA;AAEtJ
|
|
1
|
+
{"version":3,"file":"superadmin-layout.cc.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/superadmin-layout.cc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGvF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,aAAa,CAAC,qBAAqB,CAAC;;6CAA+D,CAAA;AAEtJ;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,eAAe,aAAa,CAAC,qBAAqB,CAAC;;6CAA2E,CAAA"}
|
|
@@ -2,4 +2,4 @@ import { withSuperadminMessages } from "./group-layouts.cc.js";
|
|
|
2
2
|
import { guardSuperadminLayout } from "./superadmin-layout.js";
|
|
3
3
|
import { withAreaGate } from "./area-access.js";
|
|
4
4
|
export const withSuperadminAreaMessages = (Layout) => withSuperadminMessages(withAreaGate("superadmin", Layout));
|
|
5
|
-
export const withSuperadminGuard = (ProjectLayout) => withSuperadminAreaMessages(guardSuperadminLayout(ProjectLayout));
|
|
5
|
+
export const withSuperadminGuard = (ProjectLayout) => withSuperadminAreaMessages(guardSuperadminLayout(ProjectLayout, true));
|
|
@@ -4,13 +4,17 @@ export declare const defaultMetadata: Metadata;
|
|
|
4
4
|
export interface SuperadminLayoutProps {
|
|
5
5
|
children: React.ReactNode;
|
|
6
6
|
}
|
|
7
|
+
/** `serverChecked`: see SuperAdminGuard (only the Cache Components module passes it, after its role check). */
|
|
8
|
+
type GuardedProps = SuperadminLayoutProps & {
|
|
9
|
+
serverChecked?: boolean;
|
|
10
|
+
};
|
|
7
11
|
/**
|
|
8
12
|
* Superadmin Layout
|
|
9
13
|
*
|
|
10
14
|
* Protected layout for superadmin-only sections with dedicated sidebar navigation.
|
|
11
15
|
* Owns the narrowly scoped client catalog for superadmin routes.
|
|
12
16
|
*/
|
|
13
|
-
export declare function SuperadminLayout({ children }:
|
|
17
|
+
export declare function SuperadminLayout({ children, serverChecked }: GuardedProps): import("react/jsx-runtime").JSX.Element;
|
|
14
18
|
/**
|
|
15
19
|
* Wraps a layout for this route group in the group's client messages, after the server-side role check
|
|
16
20
|
* (area-access): it runs before anything is rendered or sent, so a page load without the role gets a 307. The
|
|
@@ -26,10 +30,11 @@ export declare function withSuperadminMessages(ResolvedSuperadminLayout: Compone
|
|
|
26
30
|
* area-access). Shared by the message wrappers of both rendering modes (`withSuperadminGuard` here, and
|
|
27
31
|
* in `group-layouts.cc`).
|
|
28
32
|
*/
|
|
29
|
-
export declare function guardSuperadminLayout(ProjectLayout: ComponentType<SuperadminLayoutProps
|
|
33
|
+
export declare function guardSuperadminLayout(ProjectLayout: ComponentType<SuperadminLayoutProps>, serverChecked?: boolean): ({ children }: SuperadminLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
34
|
/**
|
|
31
35
|
* The composition of a project's superadmin layout with core (the generated host): messages, then
|
|
32
36
|
* `guardSuperadminLayout` around the project's layout.
|
|
33
37
|
*/
|
|
34
38
|
export declare function withSuperadminGuard(ProjectLayout: ComponentType<SuperadminLayoutProps>): ({ children }: SuperadminLayoutProps) => Promise<import("react/jsx-runtime").JSX.Element>;
|
|
39
|
+
export {};
|
|
35
40
|
//# sourceMappingURL=superadmin-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superadmin-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/superadmin-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAIhC,eAAO,MAAM,eAAe,EAAE,QAI7B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"superadmin-layout.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/superadmin-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAIhC,eAAO,MAAM,eAAe,EAAE,QAI7B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,+GAA+G;AAC/G,KAAK,YAAY,GAAG,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AA6CvE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,YAAY,2CAUzE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,wBAAwB,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAChD,cAAc,qBAAqB,sDAUvF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,qBAAqB,CAAC,EAAE,aAAa,UAAQ,IACtE,cAAc,qBAAqB,6CAe5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,qBAAqB,CAAC,kBA1CpB,qBAAqB,sDA4CvF"}
|
|
@@ -16,9 +16,9 @@ export const defaultMetadata = {
|
|
|
16
16
|
robots: "noindex, nofollow"
|
|
17
17
|
// Prevent search engine indexing
|
|
18
18
|
};
|
|
19
|
-
function SuperadminContent({ children }) {
|
|
19
|
+
function SuperadminContent({ children, serverChecked }) {
|
|
20
20
|
const pluginNavItems = getAllPluginNavItems("superadmin");
|
|
21
|
-
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(SuperAdminGuard, { children: /* @__PURE__ */ jsxs("div", { className: "flex h-screen bg-background", "data-cy": "superadmin-container", children: [
|
|
21
|
+
return /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(SuperAdminGuard, { serverChecked, children: /* @__PURE__ */ jsxs("div", { className: "flex h-screen bg-background", "data-cy": "superadmin-container", children: [
|
|
22
22
|
/* @__PURE__ */ jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsx(SuperadminSidebar, { pluginItems: pluginNavItems }) }),
|
|
23
23
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col overflow-hidden", children: [
|
|
24
24
|
/* @__PURE__ */ jsx("div", { className: "lg:hidden bg-card border-b border-border p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -32,8 +32,8 @@ function SuperadminContent({ children }) {
|
|
|
32
32
|
] })
|
|
33
33
|
] }) }) });
|
|
34
34
|
}
|
|
35
|
-
export function SuperadminLayout({ children }) {
|
|
36
|
-
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { className: "min-h-screen flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }), children: /* @__PURE__ */ jsx(SuperadminContent, { children }) });
|
|
35
|
+
export function SuperadminLayout({ children, serverChecked }) {
|
|
36
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { className: "min-h-screen flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }), children: /* @__PURE__ */ jsx(SuperadminContent, { serverChecked, children }) });
|
|
37
37
|
}
|
|
38
38
|
export function withSuperadminMessages(ResolvedSuperadminLayout) {
|
|
39
39
|
return async function SuperadminLayoutWithMessages({ children }) {
|
|
@@ -43,9 +43,9 @@ export function withSuperadminMessages(ResolvedSuperadminLayout) {
|
|
|
43
43
|
return /* @__PURE__ */ jsx(NextIntlClientProvider, { messages: selectMessages(messages, "superadmin", configuredNamespaces.superadmin), children: /* @__PURE__ */ jsx(ResolvedSuperadminLayout, { children }) });
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
export function guardSuperadminLayout(ProjectLayout) {
|
|
46
|
+
export function guardSuperadminLayout(ProjectLayout, serverChecked = false) {
|
|
47
47
|
return function GuardedSuperadminLayout({ children }) {
|
|
48
|
-
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { className: "min-h-screen flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }), children: /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(SuperAdminGuard, { children: /* @__PURE__ */ jsx(ProjectLayout, { children }) }) }) });
|
|
48
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { className: "min-h-screen flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }), children: /* @__PURE__ */ jsx(DashboardProviders, { children: /* @__PURE__ */ jsx(SuperAdminGuard, { serverChecked, children: /* @__PURE__ */ jsx(ProjectLayout, { children }) }) }) });
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
export function withSuperadminGuard(ProjectLayout) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A route component behind its own Suspense boundary, for a host with `cacheComponents` on.
|
|
4
|
+
*
|
|
5
|
+
* A page that awaits `params` (or `searchParams`), redirects or answers notFound() is request-time work. The
|
|
6
|
+
* layouts of the Cache Components host already stream the page after their shell, but Next.js's instant-navigation
|
|
7
|
+
* check (the dev server runs it on every page, and logs "Could not validate ..." when it fails) wants a boundary
|
|
8
|
+
* between the segment it validates and that work, so a navigation to the segment finishes at once and the page
|
|
9
|
+
* streams in. The status a visitor gets is the one the host already gives: a redirect or a 404 thrown after the
|
|
10
|
+
* shell is sent reaches the browser as a 200 with a redirect or a not-found page.
|
|
11
|
+
*
|
|
12
|
+
* Only the Cache Components modules (`*.cc`) use it. An ISR host's pages are rendered before anything is sent, and
|
|
13
|
+
* keep a real 307 and 404.
|
|
14
|
+
*/
|
|
15
|
+
export declare function behindSuspense<Props extends object>(Route: (props: Props) => ReactNode | Promise<ReactNode>): (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=suspended-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspended-route.d.ts","sourceRoot":"","sources":["../../../src/routes/_internal/suspended-route.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IACtE,OAAO,KAAK,6CAOjD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense } from "react";
|
|
3
|
+
export function behindSuspense(Route) {
|
|
4
|
+
return function RouteBehindSuspense(props) {
|
|
5
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Route, { ...props }) });
|
|
6
|
+
};
|
|
7
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/routes/api/auth/[...all]/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/routes/api/auth/[...all]/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkBxD,wBAAsB,OAAO,CAAC,GAAG,EAAE,WAAW,kCAE7C;AAID,wBAAsB,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;CAAE,qBA4C1F;AAGD,wBAAsB,IAAI,CAAC,GAAG,EAAE,WAAW,qBAwI1C"}
|
|
@@ -6,6 +6,7 @@ import { isPublicSignupRestricted } from "@nextsparkjs/core/lib/teams/helpers";
|
|
|
6
6
|
import { TeamService } from "@nextsparkjs/core/lib/services";
|
|
7
7
|
import { wrapAuthHandlerWithCors, handleCorsPreflightRequest, addCorsHeaders } from "@nextsparkjs/core/lib/api/helpers";
|
|
8
8
|
import { checkDistributedRateLimit } from "@nextsparkjs/core/lib/api/rate-limit";
|
|
9
|
+
import { getClientIp } from "@nextsparkjs/core/lib/api/client-ip";
|
|
9
10
|
import { withSignupContext } from "@nextsparkjs/core/lib/auth-context";
|
|
10
11
|
import { dispatchSecurityNotificationsForRequest } from "@nextsparkjs/core/lib/auth/security-notifications";
|
|
11
12
|
import { verifyEmailPageUrl } from "@nextsparkjs/core/lib/auth/verify-email-link";
|
|
@@ -39,19 +40,10 @@ export async function GET(req, context) {
|
|
|
39
40
|
}
|
|
40
41
|
export async function POST(req) {
|
|
41
42
|
var _a, _b, _c, _d, _e;
|
|
42
|
-
const clientIp = (
|
|
43
|
-
const cfIp = req.headers.get("cf-connecting-ip");
|
|
44
|
-
if (cfIp) return cfIp;
|
|
45
|
-
const forwardedFor = req.headers.get("x-forwarded-for");
|
|
46
|
-
if (forwardedFor) {
|
|
47
|
-
const ips = forwardedFor.split(",").map((ip) => ip.trim()).filter(Boolean);
|
|
48
|
-
if (ips.length > 0) return ips[ips.length - 1];
|
|
49
|
-
}
|
|
50
|
-
return req.headers.get("x-real-ip") || "unknown";
|
|
51
|
-
})();
|
|
43
|
+
const clientIp = getClientIp(req.headers);
|
|
52
44
|
const rateLimitResult = await checkDistributedRateLimit(`auth:ip:${clientIp}`, "auth");
|
|
53
45
|
if (!rateLimitResult.allowed) {
|
|
54
|
-
return new NextResponse(JSON.stringify({ error: "Too many requests" }), {
|
|
46
|
+
return wrapAuthHandlerWithCors(async () => new NextResponse(JSON.stringify({ error: "Too many requests" }), {
|
|
55
47
|
status: 429,
|
|
56
48
|
headers: {
|
|
57
49
|
"Content-Type": "application/json",
|
|
@@ -60,7 +52,7 @@ export async function POST(req) {
|
|
|
60
52
|
"X-RateLimit-Remaining": "0",
|
|
61
53
|
"X-RateLimit-Reset": rateLimitResult.resetTime.toString()
|
|
62
54
|
}
|
|
63
|
-
});
|
|
55
|
+
}), req);
|
|
64
56
|
}
|
|
65
57
|
const readinessResponse = await getAuthReadinessResponse(req);
|
|
66
58
|
if (readinessResponse) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/routes/api/csp-report/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/routes/api/csp-report/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AA2DxD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,qBAyF9C;AAID,wBAAsB,OAAO,sBAS5B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { getClientIp } from "@nextsparkjs/core/lib/api/client-ip";
|
|
2
3
|
let checkDistributedRateLimit = null;
|
|
3
4
|
let createRateLimitErrorResponse = null;
|
|
4
5
|
let rateLimitLoaded = false;
|
|
@@ -16,25 +17,13 @@ async function ensureRateLimitLoaded() {
|
|
|
16
17
|
const getAllowedOrigin = () => {
|
|
17
18
|
return process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000";
|
|
18
19
|
};
|
|
19
|
-
function getClientIp(request) {
|
|
20
|
-
const forwardedFor = request.headers.get("x-forwarded-for");
|
|
21
|
-
if (forwardedFor) {
|
|
22
|
-
const ips = forwardedFor.split(",").map((ip) => ip.trim());
|
|
23
|
-
if (ips[0]) return ips[0];
|
|
24
|
-
}
|
|
25
|
-
const realIp = request.headers.get("x-real-ip");
|
|
26
|
-
if (realIp) return realIp;
|
|
27
|
-
const cfIp = request.headers.get("cf-connecting-ip");
|
|
28
|
-
if (cfIp) return cfIp;
|
|
29
|
-
return "unknown";
|
|
30
|
-
}
|
|
31
20
|
export async function POST(request) {
|
|
32
21
|
await ensureRateLimitLoaded();
|
|
33
22
|
const requestId = randomUUID().slice(0, 8);
|
|
34
23
|
let rateLimitHeaders = {};
|
|
35
24
|
if (checkDistributedRateLimit && createRateLimitErrorResponse) {
|
|
36
25
|
try {
|
|
37
|
-
const clientIp = getClientIp(request);
|
|
26
|
+
const clientIp = getClientIp(request.headers);
|
|
38
27
|
const rateLimitResult = await checkDistributedRateLimit(`csp-report:ip:${clientIp}`, "api");
|
|
39
28
|
if (!rateLimitResult.allowed) {
|
|
40
29
|
console.warn(`[CSP Report ${requestId}] Rate limit exceeded for IP: ${clientIp}`);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
|
+
import { corsPreflight } from '@nextsparkjs/core/lib/api/cors-response';
|
|
2
3
|
/**
|
|
3
4
|
* GET /api/devtools/config/entities
|
|
4
5
|
*
|
|
@@ -6,4 +7,5 @@ import { NextResponse } from "next/server";
|
|
|
6
7
|
* Only accessible to developer role
|
|
7
8
|
*/
|
|
8
9
|
export declare const GET: (request: import("next/server").NextRequest) => Promise<NextResponse>;
|
|
10
|
+
export declare const OPTIONS: typeof corsPreflight;
|
|
9
11
|
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/routes/api/devtools/config/entities/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/routes/api/devtools/config/entities/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAgCxE;;;;;GAKG;AACH,eAAO,MAAM,GAAG,uEAwEN,CAAC;AAEX,eAAO,MAAM,OAAO,sBAAgB,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { getTypedSession } from "@nextsparkjs/core/lib/auth";
|
|
|
2
2
|
import { NextResponse } from "next/server";
|
|
3
3
|
import { getEntityRegistry } from "@nextsparkjs/core/lib/entities/queries";
|
|
4
4
|
import { withRateLimitTier } from "@nextsparkjs/core/lib/api/rate-limit";
|
|
5
|
+
import { corsPreflight } from "@nextsparkjs/core/lib/api/cors-response";
|
|
5
6
|
function isEntityConfig(entity) {
|
|
6
7
|
return "slug" in entity;
|
|
7
8
|
}
|
|
@@ -61,3 +62,4 @@ export const GET = withRateLimitTier(async (request) => {
|
|
|
61
62
|
);
|
|
62
63
|
}
|
|
63
64
|
}, "read");
|
|
65
|
+
export const OPTIONS = corsPreflight;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
|
+
import { corsPreflight } from '@nextsparkjs/core/lib/api/cors-response';
|
|
2
3
|
/**
|
|
3
4
|
* GET /api/devtools/config/theme
|
|
4
5
|
*
|
|
@@ -6,4 +7,5 @@ import { NextResponse } from "next/server";
|
|
|
6
7
|
* Only accessible to developer role
|
|
7
8
|
*/
|
|
8
9
|
export declare const GET: (request: import("next/server").NextRequest) => Promise<NextResponse>;
|
|
10
|
+
export declare const OPTIONS: typeof corsPreflight;
|
|
9
11
|
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/routes/api/devtools/config/theme/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/routes/api/devtools/config/theme/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,GAAG,uEAoDN,CAAC;AAEX,eAAO,MAAM,OAAO,sBAAgB,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { getTypedSession } from "@nextsparkjs/core/lib/auth";
|
|
|
2
2
|
import { NextResponse } from "next/server";
|
|
3
3
|
import { ThemeService } from "@nextsparkjs/core/lib/services/theme.service";
|
|
4
4
|
import { withRateLimitTier } from "@nextsparkjs/core/lib/api/rate-limit";
|
|
5
|
+
import { corsPreflight } from "@nextsparkjs/core/lib/api/cors-response";
|
|
5
6
|
export const GET = withRateLimitTier(async (request) => {
|
|
6
7
|
try {
|
|
7
8
|
const session = await getTypedSession(request.headers);
|
|
@@ -46,3 +47,4 @@ export const GET = withRateLimitTier(async (request) => {
|
|
|
46
47
|
);
|
|
47
48
|
}
|
|
48
49
|
}, "read");
|
|
50
|
+
export const OPTIONS = corsPreflight;
|