@nextsparkjs/core 0.1.0-beta.82 → 0.1.0-beta.83
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/entities/wrappers/EntityDetailWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityDetailWrapper.js +11 -39
- package/dist/hooks/useEntityQuery.d.ts.map +1 -1
- package/dist/hooks/useEntityQuery.js +21 -3
- package/dist/lib/theme/get-default-theme-mode.d.ts +11 -0
- package/dist/lib/theme/get-default-theme-mode.d.ts.map +1 -1
- package/dist/lib/theme/get-default-theme-mode.js +42 -25
- package/dist/styles/classes.json +1 -1
- package/dist/types/theme.d.ts +2 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/package.json +16 -16
- package/scripts/build/docs-registry.mjs +0 -0
- package/scripts/create-theme.mjs +0 -0
- package/scripts/deploy/release-version.mjs +0 -0
- package/scripts/deploy/vercel-deploy.mjs +0 -0
- package/scripts/dev/watch-plugins.mjs +0 -0
- package/scripts/maintenance/update-core.mjs +0 -0
- package/scripts/setup/npm-postinstall.mjs +0 -0
- package/scripts/setup/setup-claude.mjs +0 -0
- package/scripts/validation/check-imports.sh +0 -0
- package/dist/templates/app/(auth)/forgot-password/page.tsx +0 -216
- package/dist/templates/app/(auth)/layout.tsx +0 -51
- package/dist/templates/app/(auth)/login/page.tsx +0 -21
- package/dist/templates/app/(auth)/reset-password/page.tsx +0 -212
- package/dist/templates/app/(auth)/signup/page.tsx +0 -21
- package/dist/templates/app/(auth)/verify-email/page.tsx +0 -190
- package/dist/templates/app/(public)/[...slug]/page.tsx +0 -378
- package/dist/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
- package/dist/templates/app/(public)/docs/layout.tsx +0 -25
- package/dist/templates/app/(public)/docs/page.tsx +0 -81
- package/dist/templates/app/(public)/layout.tsx +0 -41
- package/dist/templates/app/(public)/page.tsx +0 -19
- package/dist/templates/app/403/page.tsx +0 -89
- package/dist/templates/app/api/auth/[...all]/route.ts +0 -78
- package/dist/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
- package/dist/templates/app/api/csp-report/route.ts +0 -175
- package/dist/templates/app/api/devtools/config/entities/route.ts +0 -108
- package/dist/templates/app/api/devtools/config/theme/route.ts +0 -66
- package/dist/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
- package/dist/templates/app/api/devtools/tests/route.ts +0 -134
- package/dist/templates/app/api/health/route.ts +0 -29
- package/dist/templates/app/api/internal/user-metadata/route.ts +0 -36
- package/dist/templates/app/api/superadmin/subscriptions/route.ts +0 -310
- package/dist/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
- package/dist/templates/app/api/superadmin/teams/route.ts +0 -188
- package/dist/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
- package/dist/templates/app/api/superadmin/users/route.ts +0 -323
- package/dist/templates/app/api/user/delete-account/route.ts +0 -55
- package/dist/templates/app/api/user/plan-flags/route.ts +0 -283
- package/dist/templates/app/api/user/profile/route.ts +0 -133
- package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
- package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
- package/dist/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
- package/dist/templates/app/api/v1/[entity]/docs.md +0 -369
- package/dist/templates/app/api/v1/[entity]/presets.ts +0 -194
- package/dist/templates/app/api/v1/[entity]/route.ts +0 -31
- package/dist/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
- package/dist/templates/app/api/v1/api-keys/docs.md +0 -101
- package/dist/templates/app/api/v1/api-keys/presets.ts +0 -31
- package/dist/templates/app/api/v1/api-keys/route.ts +0 -250
- package/dist/templates/app/api/v1/auth/docs.md +0 -184
- package/dist/templates/app/api/v1/auth/presets.ts +0 -44
- package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
- package/dist/templates/app/api/v1/billing/cancel/route.ts +0 -206
- package/dist/templates/app/api/v1/billing/change-plan/route.ts +0 -97
- package/dist/templates/app/api/v1/billing/check-action/route.ts +0 -81
- package/dist/templates/app/api/v1/billing/checkout/route.ts +0 -124
- package/dist/templates/app/api/v1/billing/docs.md +0 -209
- package/dist/templates/app/api/v1/billing/plans/route.ts +0 -85
- package/dist/templates/app/api/v1/billing/portal/route.ts +0 -90
- package/dist/templates/app/api/v1/billing/presets.ts +0 -121
- package/dist/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
- package/dist/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
- package/dist/templates/app/api/v1/blocks/docs.md +0 -173
- package/dist/templates/app/api/v1/blocks/presets.ts +0 -121
- package/dist/templates/app/api/v1/blocks/route.ts +0 -45
- package/dist/templates/app/api/v1/blocks/validate/route.ts +0 -45
- package/dist/templates/app/api/v1/cron/docs.md +0 -116
- package/dist/templates/app/api/v1/cron/presets.ts +0 -26
- package/dist/templates/app/api/v1/cron/process/route.ts +0 -108
- package/dist/templates/app/api/v1/devtools/blocks/route.ts +0 -82
- package/dist/templates/app/api/v1/devtools/docs/route.ts +0 -150
- package/dist/templates/app/api/v1/devtools/docs.md +0 -204
- package/dist/templates/app/api/v1/devtools/features/route.ts +0 -61
- package/dist/templates/app/api/v1/devtools/flows/route.ts +0 -61
- package/dist/templates/app/api/v1/devtools/presets.ts +0 -113
- package/dist/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
- package/dist/templates/app/api/v1/devtools/testing/route.ts +0 -82
- package/dist/templates/app/api/v1/media/docs.md +0 -117
- package/dist/templates/app/api/v1/media/presets.ts +0 -24
- package/dist/templates/app/api/v1/media/upload/route.ts +0 -150
- package/dist/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
- package/dist/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
- package/dist/templates/app/api/v1/plugin/docs.md +0 -79
- package/dist/templates/app/api/v1/plugin/presets.ts +0 -21
- package/dist/templates/app/api/v1/plugin/route.ts +0 -96
- package/dist/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
- package/dist/templates/app/api/v1/post-categories/docs.md +0 -134
- package/dist/templates/app/api/v1/post-categories/presets.ts +0 -78
- package/dist/templates/app/api/v1/post-categories/route.ts +0 -119
- package/dist/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
- package/dist/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
- package/dist/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
- package/dist/templates/app/api/v1/team-invitations/docs.md +0 -88
- package/dist/templates/app/api/v1/team-invitations/presets.ts +0 -43
- package/dist/templates/app/api/v1/team-invitations/route.ts +0 -114
- package/dist/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
- package/dist/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
- package/dist/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
- package/dist/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
- package/dist/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
- package/dist/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
- package/dist/templates/app/api/v1/teams/docs.md +0 -320
- package/dist/templates/app/api/v1/teams/presets.ts +0 -178
- package/dist/templates/app/api/v1/teams/route.ts +0 -293
- package/dist/templates/app/api/v1/teams/switch/route.ts +0 -88
- package/dist/templates/app/api/v1/theme/[...path]/route.ts +0 -361
- package/dist/templates/app/api/v1/theme/docs.md +0 -74
- package/dist/templates/app/api/v1/theme/presets.ts +0 -21
- package/dist/templates/app/api/v1/theme/route.ts +0 -96
- package/dist/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
- package/dist/templates/app/api/v1/users/[id]/route.ts +0 -302
- package/dist/templates/app/api/v1/users/docs.md +0 -93
- package/dist/templates/app/api/v1/users/presets.ts +0 -59
- package/dist/templates/app/api/v1/users/route.ts +0 -197
- package/dist/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
- package/dist/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
- package/dist/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
- package/dist/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
- package/dist/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
- package/dist/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
- package/dist/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
- package/dist/templates/app/dashboard/(main)/layout.tsx +0 -98
- package/dist/templates/app/dashboard/(main)/loading.tsx +0 -5
- package/dist/templates/app/dashboard/(main)/page.tsx +0 -201
- package/dist/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
- package/dist/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
- package/dist/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
- package/dist/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
- package/dist/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
- package/dist/templates/app/dashboard/features/analytics/page.tsx +0 -35
- package/dist/templates/app/dashboard/features/automation/page.tsx +0 -35
- package/dist/templates/app/dashboard/features/layout.tsx +0 -13
- package/dist/templates/app/dashboard/features/loading.tsx +0 -5
- package/dist/templates/app/dashboard/features/webhooks/page.tsx +0 -35
- package/dist/templates/app/dashboard/layout.tsx +0 -86
- package/dist/templates/app/dashboard/permission-denied/page.tsx +0 -29
- package/dist/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
- package/dist/templates/app/dashboard/settings/billing/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/billing/page.tsx +0 -284
- package/dist/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
- package/dist/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/invoices/page.tsx +0 -82
- package/dist/templates/app/dashboard/settings/layout.tsx +0 -151
- package/dist/templates/app/dashboard/settings/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/notifications/page.tsx +0 -462
- package/dist/templates/app/dashboard/settings/page.tsx +0 -92
- package/dist/templates/app/dashboard/settings/password/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/password/page.tsx +0 -306
- package/dist/templates/app/dashboard/settings/plans/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/plans/page.tsx +0 -40
- package/dist/templates/app/dashboard/settings/profile/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/profile/page.tsx +0 -686
- package/dist/templates/app/dashboard/settings/security/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/security/page.tsx +0 -505
- package/dist/templates/app/dashboard/settings/teams/loading.tsx +0 -5
- package/dist/templates/app/dashboard/settings/teams/page.tsx +0 -272
- package/dist/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
- package/dist/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
- package/dist/templates/app/devtools/blocks/page.tsx +0 -31
- package/dist/templates/app/devtools/config/page.tsx +0 -31
- package/dist/templates/app/devtools/features/page.tsx +0 -31
- package/dist/templates/app/devtools/flows/page.tsx +0 -31
- package/dist/templates/app/devtools/layout.tsx +0 -58
- package/dist/templates/app/devtools/page.tsx +0 -121
- package/dist/templates/app/devtools/scheduled-actions/page.tsx +0 -157
- package/dist/templates/app/devtools/style/page.tsx +0 -330
- package/dist/templates/app/devtools/tags/page.tsx +0 -31
- package/dist/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
- package/dist/templates/app/favicon.ico +0 -0
- package/dist/templates/app/globals.css +0 -12
- package/dist/templates/app/layout.tsx +0 -96
- package/dist/templates/app/public/page.tsx +0 -30
- package/dist/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
- package/dist/templates/app/superadmin/docs/page.tsx +0 -75
- package/dist/templates/app/superadmin/layout.tsx +0 -67
- package/dist/templates/app/superadmin/page.tsx +0 -149
- package/dist/templates/app/superadmin/subscriptions/page.tsx +0 -655
- package/dist/templates/app/superadmin/team-roles/page.tsx +0 -493
- package/dist/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
- package/dist/templates/app/superadmin/teams/page.tsx +0 -302
- package/dist/templates/app/superadmin/users/[userId]/page.tsx +0 -548
- package/dist/templates/app/superadmin/users/page.tsx +0 -528
- package/templates/app/(auth)/forgot-password/page.tsx +0 -216
- package/templates/app/(auth)/layout.tsx +0 -51
- package/templates/app/(auth)/login/page.tsx +0 -21
- package/templates/app/(auth)/reset-password/page.tsx +0 -212
- package/templates/app/(auth)/signup/page.tsx +0 -21
- package/templates/app/(auth)/verify-email/page.tsx +0 -190
- package/templates/app/(public)/[...slug]/page.tsx +0 -378
- package/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
- package/templates/app/(public)/docs/layout.tsx +0 -25
- package/templates/app/(public)/docs/page.tsx +0 -81
- package/templates/app/(public)/layout.tsx +0 -41
- package/templates/app/(public)/page.tsx +0 -19
- package/templates/app/403/page.tsx +0 -89
- package/templates/app/api/auth/[...all]/route.ts +0 -78
- package/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
- package/templates/app/api/csp-report/route.ts +0 -175
- package/templates/app/api/devtools/config/entities/route.ts +0 -108
- package/templates/app/api/devtools/config/theme/route.ts +0 -66
- package/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
- package/templates/app/api/devtools/tests/route.ts +0 -134
- package/templates/app/api/health/route.ts +0 -29
- package/templates/app/api/internal/user-metadata/route.ts +0 -36
- package/templates/app/api/superadmin/subscriptions/route.ts +0 -310
- package/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
- package/templates/app/api/superadmin/teams/route.ts +0 -188
- package/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
- package/templates/app/api/superadmin/users/route.ts +0 -323
- package/templates/app/api/user/delete-account/route.ts +0 -55
- package/templates/app/api/user/plan-flags/route.ts +0 -283
- package/templates/app/api/user/profile/route.ts +0 -133
- package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
- package/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
- package/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
- package/templates/app/api/v1/[entity]/docs.md +0 -369
- package/templates/app/api/v1/[entity]/presets.ts +0 -194
- package/templates/app/api/v1/[entity]/route.ts +0 -31
- package/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
- package/templates/app/api/v1/api-keys/docs.md +0 -101
- package/templates/app/api/v1/api-keys/presets.ts +0 -31
- package/templates/app/api/v1/api-keys/route.ts +0 -250
- package/templates/app/api/v1/auth/docs.md +0 -184
- package/templates/app/api/v1/auth/presets.ts +0 -44
- package/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
- package/templates/app/api/v1/billing/cancel/route.ts +0 -206
- package/templates/app/api/v1/billing/change-plan/route.ts +0 -97
- package/templates/app/api/v1/billing/check-action/route.ts +0 -81
- package/templates/app/api/v1/billing/checkout/route.ts +0 -124
- package/templates/app/api/v1/billing/docs.md +0 -209
- package/templates/app/api/v1/billing/plans/route.ts +0 -85
- package/templates/app/api/v1/billing/portal/route.ts +0 -90
- package/templates/app/api/v1/billing/presets.ts +0 -121
- package/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
- package/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
- package/templates/app/api/v1/blocks/docs.md +0 -173
- package/templates/app/api/v1/blocks/presets.ts +0 -121
- package/templates/app/api/v1/blocks/route.ts +0 -45
- package/templates/app/api/v1/blocks/validate/route.ts +0 -45
- package/templates/app/api/v1/cron/docs.md +0 -116
- package/templates/app/api/v1/cron/presets.ts +0 -26
- package/templates/app/api/v1/cron/process/route.ts +0 -108
- package/templates/app/api/v1/devtools/blocks/route.ts +0 -82
- package/templates/app/api/v1/devtools/docs/route.ts +0 -150
- package/templates/app/api/v1/devtools/docs.md +0 -204
- package/templates/app/api/v1/devtools/features/route.ts +0 -61
- package/templates/app/api/v1/devtools/flows/route.ts +0 -61
- package/templates/app/api/v1/devtools/presets.ts +0 -113
- package/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
- package/templates/app/api/v1/devtools/testing/route.ts +0 -82
- package/templates/app/api/v1/media/docs.md +0 -117
- package/templates/app/api/v1/media/presets.ts +0 -24
- package/templates/app/api/v1/media/upload/route.ts +0 -150
- package/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
- package/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
- package/templates/app/api/v1/plugin/docs.md +0 -79
- package/templates/app/api/v1/plugin/presets.ts +0 -21
- package/templates/app/api/v1/plugin/route.ts +0 -96
- package/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
- package/templates/app/api/v1/post-categories/docs.md +0 -134
- package/templates/app/api/v1/post-categories/presets.ts +0 -78
- package/templates/app/api/v1/post-categories/route.ts +0 -119
- package/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
- package/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
- package/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
- package/templates/app/api/v1/team-invitations/docs.md +0 -88
- package/templates/app/api/v1/team-invitations/presets.ts +0 -43
- package/templates/app/api/v1/team-invitations/route.ts +0 -114
- package/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
- package/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
- package/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
- package/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
- package/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
- package/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
- package/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
- package/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
- package/templates/app/api/v1/teams/docs.md +0 -320
- package/templates/app/api/v1/teams/presets.ts +0 -178
- package/templates/app/api/v1/teams/route.ts +0 -293
- package/templates/app/api/v1/teams/switch/route.ts +0 -88
- package/templates/app/api/v1/theme/[...path]/route.ts +0 -361
- package/templates/app/api/v1/theme/docs.md +0 -74
- package/templates/app/api/v1/theme/presets.ts +0 -21
- package/templates/app/api/v1/theme/route.ts +0 -96
- package/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
- package/templates/app/api/v1/users/[id]/route.ts +0 -302
- package/templates/app/api/v1/users/docs.md +0 -93
- package/templates/app/api/v1/users/presets.ts +0 -59
- package/templates/app/api/v1/users/route.ts +0 -197
- package/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
- package/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
- package/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
- package/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
- package/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
- package/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
- package/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
- package/templates/app/dashboard/(main)/layout.tsx +0 -98
- package/templates/app/dashboard/(main)/loading.tsx +0 -5
- package/templates/app/dashboard/(main)/page.tsx +0 -201
- package/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
- package/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
- package/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
- package/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
- package/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
- package/templates/app/dashboard/features/analytics/page.tsx +0 -35
- package/templates/app/dashboard/features/automation/page.tsx +0 -35
- package/templates/app/dashboard/features/layout.tsx +0 -13
- package/templates/app/dashboard/features/loading.tsx +0 -5
- package/templates/app/dashboard/features/webhooks/page.tsx +0 -35
- package/templates/app/dashboard/layout.tsx +0 -86
- package/templates/app/dashboard/permission-denied/page.tsx +0 -29
- package/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
- package/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
- package/templates/app/dashboard/settings/billing/loading.tsx +0 -5
- package/templates/app/dashboard/settings/billing/page.tsx +0 -284
- package/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
- package/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
- package/templates/app/dashboard/settings/invoices/page.tsx +0 -82
- package/templates/app/dashboard/settings/layout.tsx +0 -151
- package/templates/app/dashboard/settings/loading.tsx +0 -5
- package/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
- package/templates/app/dashboard/settings/notifications/page.tsx +0 -462
- package/templates/app/dashboard/settings/page.tsx +0 -92
- package/templates/app/dashboard/settings/password/loading.tsx +0 -5
- package/templates/app/dashboard/settings/password/page.tsx +0 -306
- package/templates/app/dashboard/settings/plans/loading.tsx +0 -5
- package/templates/app/dashboard/settings/plans/page.tsx +0 -40
- package/templates/app/dashboard/settings/profile/loading.tsx +0 -5
- package/templates/app/dashboard/settings/profile/page.tsx +0 -686
- package/templates/app/dashboard/settings/security/loading.tsx +0 -5
- package/templates/app/dashboard/settings/security/page.tsx +0 -505
- package/templates/app/dashboard/settings/teams/loading.tsx +0 -5
- package/templates/app/dashboard/settings/teams/page.tsx +0 -272
- package/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
- package/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
- package/templates/app/devtools/blocks/page.tsx +0 -31
- package/templates/app/devtools/config/page.tsx +0 -31
- package/templates/app/devtools/features/page.tsx +0 -31
- package/templates/app/devtools/flows/page.tsx +0 -31
- package/templates/app/devtools/layout.tsx +0 -58
- package/templates/app/devtools/page.tsx +0 -121
- package/templates/app/devtools/scheduled-actions/page.tsx +0 -157
- package/templates/app/devtools/style/page.tsx +0 -330
- package/templates/app/devtools/tags/page.tsx +0 -31
- package/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
- package/templates/app/favicon.ico +0 -0
- package/templates/app/globals.css +0 -12
- package/templates/app/layout.tsx +0 -96
- package/templates/app/public/page.tsx +0 -30
- package/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
- package/templates/app/superadmin/docs/page.tsx +0 -75
- package/templates/app/superadmin/layout.tsx +0 -67
- package/templates/app/superadmin/page.tsx +0 -149
- package/templates/app/superadmin/subscriptions/page.tsx +0 -655
- package/templates/app/superadmin/team-roles/page.tsx +0 -493
- package/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
- package/templates/app/superadmin/teams/page.tsx +0 -302
- package/templates/app/superadmin/users/[userId]/page.tsx +0 -548
- package/templates/app/superadmin/users/page.tsx +0 -528
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { NextRequest, NextResponse } from 'next/server'
|
|
2
|
-
import { queryWithRLS, getTransactionClient, queryRows } from '@nextsparkjs/core/lib/db'
|
|
3
|
-
import {
|
|
4
|
-
createApiResponse,
|
|
5
|
-
createApiError,
|
|
6
|
-
createPaginationMeta,
|
|
7
|
-
withApiLogging,
|
|
8
|
-
handleCorsPreflightRequest,
|
|
9
|
-
addCorsHeaders,
|
|
10
|
-
} from '@nextsparkjs/core/lib/api/helpers'
|
|
11
|
-
import { authenticateRequest } from '@nextsparkjs/core/lib/api/auth/dual-auth'
|
|
12
|
-
import { isSuperAdmin } from '@nextsparkjs/core/lib/api/auth/permissions'
|
|
13
|
-
import { createTeamSchema, teamListQuerySchema } from '@nextsparkjs/core/lib/teams/schema'
|
|
14
|
-
import { TeamService } from '@nextsparkjs/core/lib/services'
|
|
15
|
-
import type { Team } from '@nextsparkjs/core/lib/teams/types'
|
|
16
|
-
import { APP_CONFIG_MERGED } from '@nextsparkjs/core/lib/config/config-sync'
|
|
17
|
-
|
|
18
|
-
// Handle CORS preflight
|
|
19
|
-
export async function OPTIONS(req: NextRequest) {
|
|
20
|
-
return handleCorsPreflightRequest(req)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// GET /api/v1/teams - List user's teams
|
|
24
|
-
export const GET = withApiLogging(async (req: NextRequest): Promise<NextResponse> => {
|
|
25
|
-
try {
|
|
26
|
-
// Authenticate using dual auth
|
|
27
|
-
const authResult = await authenticateRequest(req)
|
|
28
|
-
|
|
29
|
-
if (!authResult.success) {
|
|
30
|
-
return NextResponse.json(
|
|
31
|
-
{ success: false, error: 'Authentication required', code: 'AUTHENTICATION_FAILED' },
|
|
32
|
-
{ status: 401 }
|
|
33
|
-
)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (authResult.rateLimitResponse) {
|
|
37
|
-
return authResult.rateLimitResponse as NextResponse
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Parse query parameters (filter out null values so Zod defaults work)
|
|
41
|
-
const { searchParams } = new URL(req.url)
|
|
42
|
-
const queryParams = Object.fromEntries(
|
|
43
|
-
Object.entries({
|
|
44
|
-
page: searchParams.get('page'),
|
|
45
|
-
limit: searchParams.get('limit'),
|
|
46
|
-
search: searchParams.get('search'),
|
|
47
|
-
sort: searchParams.get('sort'),
|
|
48
|
-
order: searchParams.get('order'),
|
|
49
|
-
scope: searchParams.get('scope'),
|
|
50
|
-
}).filter(([, value]) => value !== null && value !== '')
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
const validatedQuery = teamListQuerySchema.parse(queryParams)
|
|
54
|
-
const { page, limit, search, sort, order, scope } = validatedQuery
|
|
55
|
-
const offset = (page - 1) * limit
|
|
56
|
-
|
|
57
|
-
// Check if scope=all is requested (requires superadmin)
|
|
58
|
-
const requestAllTeams = scope === 'all'
|
|
59
|
-
if (requestAllTeams && !isSuperAdmin(authResult)) {
|
|
60
|
-
const response = createApiError(
|
|
61
|
-
'Insufficient permissions. Superadmin access required for scope=all.',
|
|
62
|
-
403
|
|
63
|
-
)
|
|
64
|
-
return addCorsHeaders(response, req)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Build WHERE clause based on filters
|
|
68
|
-
// If scope=all (superadmin), don't filter by user
|
|
69
|
-
let whereClause = requestAllTeams ? 'WHERE 1=1' : 'WHERE tm."userId" = $1'
|
|
70
|
-
const queryValues: unknown[] = requestAllTeams ? [] : [authResult.user!.id]
|
|
71
|
-
let paramCount = requestAllTeams ? 1 : 2
|
|
72
|
-
|
|
73
|
-
if (search) {
|
|
74
|
-
whereClause += ` AND (t.name ILIKE $${paramCount} OR t.description ILIKE $${paramCount})`
|
|
75
|
-
queryValues.push(`%${search}%`)
|
|
76
|
-
paramCount++
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Build ORDER BY clause
|
|
80
|
-
const orderByMap: Record<string, string> = {
|
|
81
|
-
createdAt: 't."createdAt"',
|
|
82
|
-
updatedAt: 't."updatedAt"',
|
|
83
|
-
name: 't.name',
|
|
84
|
-
}
|
|
85
|
-
const orderByClause = `${orderByMap[sort]} ${order.toUpperCase()}`
|
|
86
|
-
|
|
87
|
-
// Add pagination params
|
|
88
|
-
queryValues.push(limit, offset)
|
|
89
|
-
|
|
90
|
-
let teams: (Team & { userRole: string | null; memberCount: string })[]
|
|
91
|
-
let totalResult: { count: string }[]
|
|
92
|
-
|
|
93
|
-
if (requestAllTeams) {
|
|
94
|
-
// Superadmin query: get all teams without user membership filter
|
|
95
|
-
teams = await queryRows<Team & { userRole: string | null; memberCount: string }>(
|
|
96
|
-
`SELECT
|
|
97
|
-
t.*,
|
|
98
|
-
NULL as "userRole",
|
|
99
|
-
COUNT(DISTINCT tm.id) as "memberCount"
|
|
100
|
-
FROM "teams" t
|
|
101
|
-
LEFT JOIN "team_members" tm ON t.id = tm."teamId"
|
|
102
|
-
${whereClause}
|
|
103
|
-
GROUP BY t.id, t.name, t.slug, t.description, t."ownerId", t."avatarUrl",
|
|
104
|
-
t.settings, t."createdAt", t."updatedAt"
|
|
105
|
-
ORDER BY ${orderByClause}
|
|
106
|
-
LIMIT $${paramCount++} OFFSET $${paramCount++}`,
|
|
107
|
-
queryValues
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
// Get total count for pagination (superadmin)
|
|
111
|
-
totalResult = await queryRows<{ count: string }>(
|
|
112
|
-
`SELECT COUNT(DISTINCT t.id) as count
|
|
113
|
-
FROM "teams" t
|
|
114
|
-
${whereClause}`,
|
|
115
|
-
queryValues.slice(0, -2) // Remove limit and offset
|
|
116
|
-
)
|
|
117
|
-
} else {
|
|
118
|
-
// Regular user query: filter by membership
|
|
119
|
-
teams = await queryWithRLS<Team & { userRole: string; memberCount: string }>(
|
|
120
|
-
`SELECT
|
|
121
|
-
t.*,
|
|
122
|
-
tm.role as "userRole",
|
|
123
|
-
COUNT(DISTINCT tm2.id) as "memberCount"
|
|
124
|
-
FROM "teams" t
|
|
125
|
-
INNER JOIN "team_members" tm ON t.id = tm."teamId"
|
|
126
|
-
LEFT JOIN "team_members" tm2 ON t.id = tm2."teamId"
|
|
127
|
-
${whereClause}
|
|
128
|
-
GROUP BY t.id, t.name, t.slug, t.description, t."ownerId", t."avatarUrl",
|
|
129
|
-
t.settings, t."createdAt", t."updatedAt", tm.role
|
|
130
|
-
ORDER BY ${orderByClause}
|
|
131
|
-
LIMIT $${paramCount++} OFFSET $${paramCount++}`,
|
|
132
|
-
queryValues,
|
|
133
|
-
authResult.user!.id
|
|
134
|
-
)
|
|
135
|
-
|
|
136
|
-
// Get total count for pagination (regular user)
|
|
137
|
-
totalResult = await queryWithRLS<{ count: string }>(
|
|
138
|
-
`SELECT COUNT(DISTINCT t.id) as count
|
|
139
|
-
FROM "teams" t
|
|
140
|
-
INNER JOIN "team_members" tm ON t.id = tm."teamId"
|
|
141
|
-
${whereClause}`,
|
|
142
|
-
queryValues.slice(0, -2), // Remove limit and offset
|
|
143
|
-
authResult.user!.id
|
|
144
|
-
)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const total = parseInt(totalResult[0]?.count || '0', 10)
|
|
148
|
-
const paginationMeta = createPaginationMeta(page, limit, total)
|
|
149
|
-
|
|
150
|
-
// Transform data
|
|
151
|
-
const teamsWithMembers = teams.map((team) => ({
|
|
152
|
-
...team,
|
|
153
|
-
memberCount: parseInt(team.memberCount, 10),
|
|
154
|
-
}))
|
|
155
|
-
|
|
156
|
-
const response = createApiResponse(teamsWithMembers, paginationMeta)
|
|
157
|
-
return addCorsHeaders(response, req)
|
|
158
|
-
} catch (error) {
|
|
159
|
-
console.error('Error fetching teams:', error)
|
|
160
|
-
const response = createApiError('Internal server error', 500)
|
|
161
|
-
return addCorsHeaders(response, req)
|
|
162
|
-
}
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
// POST /api/v1/teams - Create new team
|
|
166
|
-
export const POST = withApiLogging(async (req: NextRequest): Promise<NextResponse> => {
|
|
167
|
-
try {
|
|
168
|
-
// Authenticate using dual auth
|
|
169
|
-
const authResult = await authenticateRequest(req)
|
|
170
|
-
|
|
171
|
-
if (!authResult.success) {
|
|
172
|
-
return NextResponse.json(
|
|
173
|
-
{ success: false, error: 'Authentication required', code: 'AUTHENTICATION_FAILED' },
|
|
174
|
-
{ status: 401 }
|
|
175
|
-
)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
if (authResult.rateLimitResponse) {
|
|
179
|
-
return authResult.rateLimitResponse as NextResponse
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const body = await req.json()
|
|
183
|
-
const validatedData = createTeamSchema.parse(body)
|
|
184
|
-
|
|
185
|
-
const { mode, options } = APP_CONFIG_MERGED.teams
|
|
186
|
-
const userId = authResult.user!.id
|
|
187
|
-
|
|
188
|
-
// Validate if the mode allows creating teams
|
|
189
|
-
if (mode !== 'multi-tenant') {
|
|
190
|
-
const response = createApiError(
|
|
191
|
-
'Team creation is not allowed in this mode',
|
|
192
|
-
403,
|
|
193
|
-
null,
|
|
194
|
-
'TEAM_CREATION_DISABLED'
|
|
195
|
-
)
|
|
196
|
-
return addCorsHeaders(response, req)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Validate allowCreateTeams option
|
|
200
|
-
const allowCreateTeams = options?.allowCreateTeams ?? true
|
|
201
|
-
if (!allowCreateTeams) {
|
|
202
|
-
// Check if user is already owner of any team
|
|
203
|
-
const ownedTeams = await queryWithRLS<{ count: string }>(
|
|
204
|
-
`SELECT COUNT(*) as count FROM "team_members"
|
|
205
|
-
WHERE "userId" = $1 AND role = 'owner'`,
|
|
206
|
-
[userId],
|
|
207
|
-
userId
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
if (parseInt(ownedTeams[0]?.count || '0', 10) > 0) {
|
|
211
|
-
const response = createApiError(
|
|
212
|
-
'You are already owner of a team. Creating additional teams is not allowed.',
|
|
213
|
-
403,
|
|
214
|
-
null,
|
|
215
|
-
'MAX_TEAMS_REACHED'
|
|
216
|
-
)
|
|
217
|
-
return addCorsHeaders(response, req)
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Check if slug is available
|
|
222
|
-
const slugAvailable = await TeamService.isSlugAvailable(validatedData.slug)
|
|
223
|
-
if (!slugAvailable) {
|
|
224
|
-
const response = createApiError('Team slug already exists', 409, null, 'SLUG_EXISTS')
|
|
225
|
-
return addCorsHeaders(response, req)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Use transaction to ensure atomicity
|
|
229
|
-
const tx = await getTransactionClient(userId)
|
|
230
|
-
|
|
231
|
-
try {
|
|
232
|
-
// Create team WITHOUT type column
|
|
233
|
-
const [team] = await tx.query<Team>(
|
|
234
|
-
`INSERT INTO "teams" (name, slug, description, "ownerId")
|
|
235
|
-
VALUES ($1, $2, $3, $4)
|
|
236
|
-
RETURNING *`,
|
|
237
|
-
[
|
|
238
|
-
validatedData.name,
|
|
239
|
-
validatedData.slug,
|
|
240
|
-
validatedData.description || null,
|
|
241
|
-
userId,
|
|
242
|
-
]
|
|
243
|
-
)
|
|
244
|
-
|
|
245
|
-
if (!team) {
|
|
246
|
-
throw new Error('Failed to create team')
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Add creator as owner
|
|
250
|
-
await tx.query(
|
|
251
|
-
`INSERT INTO "team_members" ("teamId", "userId", role, "joinedAt")
|
|
252
|
-
VALUES ($1, $2, 'owner', NOW())`,
|
|
253
|
-
[team.id, authResult.user!.id]
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
await tx.commit()
|
|
257
|
-
|
|
258
|
-
// Fetch team with member count
|
|
259
|
-
const teamWithCount = await queryWithRLS<Team & { memberCount: string }>(
|
|
260
|
-
`SELECT
|
|
261
|
-
t.*,
|
|
262
|
-
COUNT(DISTINCT tm.id) as "memberCount"
|
|
263
|
-
FROM "teams" t
|
|
264
|
-
LEFT JOIN "team_members" tm ON t.id = tm."teamId"
|
|
265
|
-
WHERE t.id = $1
|
|
266
|
-
GROUP BY t.id`,
|
|
267
|
-
[team.id],
|
|
268
|
-
authResult.user!.id
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
const responseData = {
|
|
272
|
-
...teamWithCount[0],
|
|
273
|
-
memberCount: parseInt(teamWithCount[0]?.memberCount || '1', 10),
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
const response = createApiResponse(responseData, { created: true }, 201)
|
|
277
|
-
return addCorsHeaders(response, req)
|
|
278
|
-
} catch (error) {
|
|
279
|
-
await tx.rollback()
|
|
280
|
-
throw error
|
|
281
|
-
}
|
|
282
|
-
} catch (error) {
|
|
283
|
-
if (error instanceof Error && error.name === 'ZodError') {
|
|
284
|
-
const zodError = error as { issues?: unknown[] }
|
|
285
|
-
const response = createApiError('Validation error', 400, zodError.issues, 'VALIDATION_ERROR')
|
|
286
|
-
return addCorsHeaders(response, req)
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
console.error('Error creating team:', error)
|
|
290
|
-
const response = createApiError('Internal server error', 500)
|
|
291
|
-
return addCorsHeaders(response, req)
|
|
292
|
-
}
|
|
293
|
-
})
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { NextRequest, NextResponse } from 'next/server'
|
|
2
|
-
import {
|
|
3
|
-
createApiResponse,
|
|
4
|
-
createApiError,
|
|
5
|
-
withApiLogging,
|
|
6
|
-
handleCorsPreflightRequest,
|
|
7
|
-
addCorsHeaders,
|
|
8
|
-
} from '@nextsparkjs/core/lib/api/helpers'
|
|
9
|
-
import { authenticateRequest } from '@nextsparkjs/core/lib/api/auth/dual-auth'
|
|
10
|
-
import { TeamService } from '@nextsparkjs/core/lib/services'
|
|
11
|
-
import { z } from 'zod'
|
|
12
|
-
|
|
13
|
-
const switchTeamSchema = z.object({
|
|
14
|
-
teamId: z.string().min(1, 'Team ID is required'),
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
// Handle CORS preflight
|
|
18
|
-
export async function OPTIONS() {
|
|
19
|
-
return handleCorsPreflightRequest()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// POST /api/v1/teams/switch - Switch active team context
|
|
23
|
-
export const POST = withApiLogging(async (req: NextRequest): Promise<NextResponse> => {
|
|
24
|
-
try {
|
|
25
|
-
// Authenticate using dual auth
|
|
26
|
-
const authResult = await authenticateRequest(req)
|
|
27
|
-
|
|
28
|
-
if (!authResult.success) {
|
|
29
|
-
return NextResponse.json(
|
|
30
|
-
{ success: false, error: 'Authentication required', code: 'AUTHENTICATION_FAILED' },
|
|
31
|
-
{ status: 401 }
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (authResult.rateLimitResponse) {
|
|
36
|
-
return authResult.rateLimitResponse as NextResponse
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const body = await req.json()
|
|
40
|
-
const validatedData = switchTeamSchema.parse(body)
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
// Use the TeamService.switchActive (verifies membership)
|
|
44
|
-
await TeamService.switchActive(authResult.user!.id, validatedData.teamId)
|
|
45
|
-
|
|
46
|
-
const response = createApiResponse({
|
|
47
|
-
success: true,
|
|
48
|
-
teamId: validatedData.teamId,
|
|
49
|
-
message: 'Active team switched successfully',
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
// Set cookie for server-side access (layouts, server components)
|
|
53
|
-
// This enables permission validation in [entity]/layout.tsx
|
|
54
|
-
// SECURITY: httpOnly prevents client-side JS manipulation
|
|
55
|
-
response.cookies.set('activeTeamId', validatedData.teamId, {
|
|
56
|
-
path: '/',
|
|
57
|
-
httpOnly: true, // Security: prevent client-side manipulation
|
|
58
|
-
secure: process.env.NODE_ENV === 'production',
|
|
59
|
-
sameSite: 'lax',
|
|
60
|
-
maxAge: 60 * 60 * 24 * 365 // 1 year
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
return addCorsHeaders(response)
|
|
64
|
-
} catch (error) {
|
|
65
|
-
if (error instanceof Error && error.message === 'User is not a member of this team') {
|
|
66
|
-
const response = createApiError(
|
|
67
|
-
'You are not a member of this team',
|
|
68
|
-
403,
|
|
69
|
-
null,
|
|
70
|
-
'NOT_TEAM_MEMBER'
|
|
71
|
-
)
|
|
72
|
-
return addCorsHeaders(response)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
throw error
|
|
76
|
-
}
|
|
77
|
-
} catch (error) {
|
|
78
|
-
if (error instanceof Error && error.name === 'ZodError') {
|
|
79
|
-
const zodError = error as { issues?: unknown[] }
|
|
80
|
-
const response = createApiError('Validation error', 400, zodError.issues, 'VALIDATION_ERROR')
|
|
81
|
-
return addCorsHeaders(response)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
console.error('Error switching team:', error)
|
|
85
|
-
const response = createApiError('Internal server error', 500)
|
|
86
|
-
return addCorsHeaders(response)
|
|
87
|
-
}
|
|
88
|
-
})
|