create-fullstack-scaffold 0.5.7 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/cli/index.js +65 -2
  2. package/dist/cli/index.js.map +1 -1
  3. package/package.json +12 -12
  4. package/template/package.json +10 -10
  5. package/template/src/cli/modules/tenant/index.ts +89 -0
  6. package/template/src/server/db/init.ts +0 -52
  7. package/template/src/server/db/schema/index.ts +3 -0
  8. package/template/src/server/db/schema/tenant-invitations.ts +33 -0
  9. package/template/src/server/db/schema/tenant-members.ts +38 -0
  10. package/template/src/server/db/schema/tenant-roles.ts +32 -0
  11. package/template/src/server/db/schema/todos.ts +4 -0
  12. package/template/src/server/db/test-setup.ts +128 -0
  13. package/template/src/server/entries/node.ts +13 -0
  14. package/template/src/server/index.ts +12 -0
  15. package/template/src/server/middleware/__tests__/tenant-isolation.test.ts +55 -9
  16. package/template/src/server/middleware/auth.ts +17 -19
  17. package/template/src/server/middleware/tenant-isolation.ts +4 -2
  18. package/template/src/server/module-auth/module.ts +2 -1
  19. package/template/src/server/module-auth/services/auth-service.ts +39 -0
  20. package/template/src/server/module-tenant/__tests__/tenant-routes.test.ts +97 -0
  21. package/template/src/server/module-tenant/__tests__/tenant-service.test.ts +201 -22
  22. package/template/src/server/module-tenant/module.ts +1 -1
  23. package/template/src/server/module-tenant/routes/tenant-routes.ts +339 -2
  24. package/template/src/server/module-tenant/services/tenant-service.ts +581 -17
  25. package/template/src/server/module-todos/routes/todos-routes.ts +10 -2
  26. package/template/src/server/module-todos/services/todo-service.ts +12 -2
  27. package/template/src/server/utils/__tests__/captcha.test.ts +6 -4
  28. package/template/src/server/utils/id-helpers.ts +13 -0
  29. package/template/src/shared/modules/index.ts +29 -6
  30. package/template/src/shared/modules/tenant/index.ts +30 -0
  31. package/template/src/shared/modules/tenant/permissions.ts +54 -0
  32. package/template/src/shared/modules/tenant/role-templates.ts +66 -0
  33. package/template/src/shared/modules/tenant/schemas.ts +113 -1
  34. package/template/src/shared/modules/todos/schemas.ts +1 -0
  35. package/template/src/shared/schemas/index.ts +28 -0
  36. package/template/src/tenant/App.tsx +30 -23
  37. package/template/src/tenant/components/TenantGuard.tsx +12 -2
  38. package/template/src/tenant/layouts/Header.tsx +6 -2
  39. package/template/src/tenant/pages/InviteAcceptPage.tsx +97 -0
  40. package/template/src/tenant/pages/LoginPage.tsx +82 -0
  41. package/template/src/tenant/pages/SubscriptionPage.tsx +32 -55
  42. package/template/src/tenant/pages/UsersPage.tsx +134 -88
  43. package/template/src/tenant/services/tenantApi.ts +61 -0
  44. package/template/src/tenant/stores/tenantStore.ts +172 -49
  45. package/template/src/test/setup-db-path.ts +20 -0
  46. package/template/vitest.config.ts +3 -1
package/dist/cli/index.js CHANGED
@@ -1583,6 +1583,7 @@ function generateServerApp(resolved) {
1583
1583
  const useRealtime = resolved.hasSSE || resolved.hasWebSocket;
1584
1584
  const useAuditLog = resolved.hasPermission;
1585
1585
  const useCaptcha = resolved.hasCaptcha;
1586
+ const useTenantIsolation = resolved.modules.has("tenant");
1586
1587
  const standaloneRoutes = getStandaloneRoutes(resolved);
1587
1588
  const imports = [
1588
1589
  `import { OpenAPIHono } from '@hono/zod-openapi'`,
@@ -1604,6 +1605,9 @@ function generateServerApp(resolved) {
1604
1605
  if (useCaptcha) {
1605
1606
  imports.push(`import { captchaMiddleware } from './middleware/captcha'`);
1606
1607
  }
1608
+ if (useTenantIsolation) {
1609
+ imports.push(`import { tenantIsolationMiddleware } from './middleware/tenant-isolation'`);
1610
+ }
1607
1611
  imports.push(
1608
1612
  `import { createModuleLoggerSync } from './utils/logger'`,
1609
1613
  `import { adminApiRoutes, clientApiRoutes } from './route-registry'`
@@ -1643,6 +1647,9 @@ function generateServerApp(resolved) {
1643
1647
  )`
1644
1648
  );
1645
1649
  }
1650
+ if (useTenantIsolation) {
1651
+ middlewareChain.push(`.use('/api/*', tenantIsolationMiddleware())`);
1652
+ }
1646
1653
  const routes = [`.route('/', clientApiRoutes)`, `.route('/', adminApiRoutes)`];
1647
1654
  for (const sr of standaloneRoutes) {
1648
1655
  routes.push(`.route('${sr.mountPath}', ${sr.localName})`);
@@ -1915,6 +1922,24 @@ var MODULE_EXPORTS = {
1915
1922
  "TenantListResponseSchema",
1916
1923
  "TenantQuerySchema",
1917
1924
  "TenantIdResponseSchema",
1925
+ "TenantRoleSchema",
1926
+ "CreateTenantRoleSchema",
1927
+ "UpdateTenantRoleSchema",
1928
+ "TenantMemberSchema",
1929
+ "UpdateMemberRoleSchema",
1930
+ "TenantInvitationSchema",
1931
+ "InviteMemberSchema",
1932
+ "PublicInvitationSchema",
1933
+ "StringIdResponseSchema",
1934
+ "TenantArrayResponseSchema",
1935
+ "TenantRoleArrayResponseSchema",
1936
+ "TenantMemberArrayResponseSchema",
1937
+ "TenantPermission",
1938
+ "TENANT_PERMISSION_VALUES",
1939
+ "TENANT_PERMISSION_LABELS",
1940
+ "TenantRoleCode",
1941
+ "TENANT_ROLE_TEMPLATES",
1942
+ "PLAN_ROLE_LIMITS",
1918
1943
  "type Tenant",
1919
1944
  "type TenantStatus",
1920
1945
  "type TenantPlan",
@@ -1925,7 +1950,17 @@ var MODULE_EXPORTS = {
1925
1950
  "type TenantSlug",
1926
1951
  "type TenantListResponse",
1927
1952
  "type TenantQuery",
1928
- "type TenantIdResponse"
1953
+ "type TenantIdResponse",
1954
+ "type TenantRole",
1955
+ "type CreateTenantRoleInput",
1956
+ "type UpdateTenantRoleInput",
1957
+ "type TenantMember",
1958
+ "type UpdateMemberRoleInput",
1959
+ "type TenantInvitation",
1960
+ "type InviteMemberInput",
1961
+ "type PublicInvitation",
1962
+ "type StringIdResponse",
1963
+ "type TenantRoleTemplate"
1929
1964
  ]
1930
1965
  },
1931
1966
  order: {
@@ -2486,6 +2521,24 @@ var MODULE_EXPORTS2 = {
2486
2521
  "TenantListResponseSchema",
2487
2522
  "TenantQuerySchema",
2488
2523
  "TenantIdResponseSchema",
2524
+ "TenantRoleSchema",
2525
+ "CreateTenantRoleSchema",
2526
+ "UpdateTenantRoleSchema",
2527
+ "TenantMemberSchema",
2528
+ "UpdateMemberRoleSchema",
2529
+ "TenantInvitationSchema",
2530
+ "InviteMemberSchema",
2531
+ "PublicInvitationSchema",
2532
+ "StringIdResponseSchema",
2533
+ "TenantArrayResponseSchema",
2534
+ "TenantRoleArrayResponseSchema",
2535
+ "TenantMemberArrayResponseSchema",
2536
+ "TenantPermission",
2537
+ "TENANT_PERMISSION_VALUES",
2538
+ "TENANT_PERMISSION_LABELS",
2539
+ "TenantRoleCode",
2540
+ "TENANT_ROLE_TEMPLATES",
2541
+ "PLAN_ROLE_LIMITS",
2489
2542
  "type Tenant",
2490
2543
  "type TenantStatus",
2491
2544
  "type TenantPlan",
@@ -2496,7 +2549,17 @@ var MODULE_EXPORTS2 = {
2496
2549
  "type TenantSlug",
2497
2550
  "type TenantListResponse",
2498
2551
  "type TenantQuery",
2499
- "type TenantIdResponse"
2552
+ "type TenantIdResponse",
2553
+ "type TenantRole",
2554
+ "type CreateTenantRoleInput",
2555
+ "type UpdateTenantRoleInput",
2556
+ "type TenantMember",
2557
+ "type UpdateMemberRoleInput",
2558
+ "type TenantInvitation",
2559
+ "type InviteMemberInput",
2560
+ "type PublicInvitation",
2561
+ "type StringIdResponse",
2562
+ "type TenantRoleTemplate"
2500
2563
  ]
2501
2564
  },
2502
2565
  dispute: {