@neohm/nestend 4.0.2 → 4.1.1

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 (238) hide show
  1. package/README.md +46 -10
  2. package/dist/admin/controllers/admin.tenant.user.controller.d.ts +8 -1
  3. package/dist/admin/controllers/admin.tenant.user.controller.d.ts.map +1 -1
  4. package/dist/admin/controllers/admin.tenant.user.controller.js +75 -7
  5. package/dist/admin/controllers/admin.tenant.user.controller.js.map +1 -1
  6. package/dist/admin/dtos/add.client.membership.dto.d.ts +6 -0
  7. package/dist/admin/dtos/add.client.membership.dto.d.ts.map +1 -0
  8. package/dist/admin/dtos/add.client.membership.dto.js +41 -0
  9. package/dist/admin/dtos/add.client.membership.dto.js.map +1 -0
  10. package/dist/admin/es6.classes.d.ts +4 -2
  11. package/dist/admin/es6.classes.d.ts.map +1 -1
  12. package/dist/admin/es6.classes.js +4 -0
  13. package/dist/admin/es6.classes.js.map +1 -1
  14. package/dist/admin/libraries/bulk.user.data.processor.d.ts.map +1 -1
  15. package/dist/admin/libraries/bulk.user.data.processor.js +13 -5
  16. package/dist/admin/libraries/bulk.user.data.processor.js.map +1 -1
  17. package/dist/admin/libraries/client.membership.data.processor.d.ts +14 -0
  18. package/dist/admin/libraries/client.membership.data.processor.d.ts.map +1 -0
  19. package/dist/admin/libraries/client.membership.data.processor.js +56 -0
  20. package/dist/admin/libraries/client.membership.data.processor.js.map +1 -0
  21. package/dist/admin/libraries/client.user.data.processor.d.ts +1 -2
  22. package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
  23. package/dist/admin/libraries/client.user.data.processor.js +24 -31
  24. package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
  25. package/dist/admin/libraries/client.user.delete.processor.d.ts.map +1 -1
  26. package/dist/admin/libraries/client.user.delete.processor.js +4 -0
  27. package/dist/admin/libraries/client.user.delete.processor.js.map +1 -1
  28. package/dist/admin/libraries/client.user.list.processor.d.ts.map +1 -1
  29. package/dist/admin/libraries/client.user.list.processor.js +14 -2
  30. package/dist/admin/libraries/client.user.list.processor.js.map +1 -1
  31. package/dist/admin/libraries/tenant.delete.processor.d.ts.map +1 -1
  32. package/dist/admin/libraries/tenant.delete.processor.js +22 -9
  33. package/dist/admin/libraries/tenant.delete.processor.js.map +1 -1
  34. package/dist/admin/libraries/user.data.processor.d.ts.map +1 -1
  35. package/dist/admin/libraries/user.data.processor.js +4 -1
  36. package/dist/admin/libraries/user.data.processor.js.map +1 -1
  37. package/dist/auth/auth.module.d.ts.map +1 -1
  38. package/dist/auth/auth.module.js +22 -3
  39. package/dist/auth/auth.module.js.map +1 -1
  40. package/dist/auth/controllers/auth.controller.d.ts +8 -7
  41. package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
  42. package/dist/auth/controllers/auth.controller.js +36 -12
  43. package/dist/auth/controllers/auth.controller.js.map +1 -1
  44. package/dist/auth/controllers/impersonation.controller.d.ts +2 -2
  45. package/dist/auth/controllers/impersonation.controller.d.ts.map +1 -1
  46. package/dist/auth/controllers/tenant.invitation.controller.d.ts +18 -0
  47. package/dist/auth/controllers/tenant.invitation.controller.d.ts.map +1 -0
  48. package/dist/auth/controllers/tenant.invitation.controller.js +120 -0
  49. package/dist/auth/controllers/tenant.invitation.controller.js.map +1 -0
  50. package/dist/auth/controllers/tenant.member.controller.d.ts +18 -0
  51. package/dist/auth/controllers/tenant.member.controller.d.ts.map +1 -0
  52. package/dist/auth/controllers/tenant.member.controller.js +129 -0
  53. package/dist/auth/controllers/tenant.member.controller.js.map +1 -0
  54. package/dist/auth/controllers/user.invitation.controller.d.ts +12 -0
  55. package/dist/auth/controllers/user.invitation.controller.d.ts.map +1 -0
  56. package/dist/auth/controllers/user.invitation.controller.js +76 -0
  57. package/dist/auth/controllers/user.invitation.controller.js.map +1 -0
  58. package/dist/auth/controllers/user.organization.controller.d.ts +17 -0
  59. package/dist/auth/controllers/user.organization.controller.d.ts.map +1 -0
  60. package/dist/auth/controllers/user.organization.controller.js +88 -0
  61. package/dist/auth/controllers/user.organization.controller.js.map +1 -0
  62. package/dist/auth/dtos/invite.tenant.user.dto.d.ts +6 -0
  63. package/dist/auth/dtos/invite.tenant.user.dto.d.ts.map +1 -0
  64. package/dist/auth/dtos/invite.tenant.user.dto.js +45 -0
  65. package/dist/auth/dtos/invite.tenant.user.dto.js.map +1 -0
  66. package/dist/auth/dtos/member.roles.dto.d.ts +4 -0
  67. package/dist/auth/dtos/member.roles.dto.d.ts.map +1 -0
  68. package/dist/auth/dtos/member.roles.dto.js +28 -0
  69. package/dist/auth/dtos/member.roles.dto.js.map +1 -0
  70. package/dist/auth/dtos/switch.organization.dto.d.ts +5 -0
  71. package/dist/auth/dtos/switch.organization.dto.d.ts.map +1 -0
  72. package/dist/auth/dtos/switch.organization.dto.js +25 -0
  73. package/dist/auth/dtos/switch.organization.dto.js.map +1 -0
  74. package/dist/auth/dtos/tenant.invitation.list.dto.d.ts +5 -0
  75. package/dist/auth/dtos/tenant.invitation.list.dto.d.ts.map +1 -0
  76. package/dist/auth/dtos/tenant.invitation.list.dto.js +27 -0
  77. package/dist/auth/dtos/tenant.invitation.list.dto.js.map +1 -0
  78. package/dist/auth/dtos/tenant.member.list.dto.d.ts +5 -0
  79. package/dist/auth/dtos/tenant.member.list.dto.d.ts.map +1 -0
  80. package/dist/auth/dtos/tenant.member.list.dto.js +27 -0
  81. package/dist/auth/dtos/tenant.member.list.dto.js.map +1 -0
  82. package/dist/auth/entities/tenant.invitation.entity.d.ts +13 -0
  83. package/dist/auth/entities/tenant.invitation.entity.d.ts.map +1 -0
  84. package/dist/auth/entities/tenant.invitation.entity.js +52 -0
  85. package/dist/auth/entities/tenant.invitation.entity.js.map +1 -0
  86. package/dist/auth/entities/tenant.user.entity.d.ts +8 -0
  87. package/dist/auth/entities/tenant.user.entity.d.ts.map +1 -0
  88. package/dist/auth/entities/tenant.user.entity.js +35 -0
  89. package/dist/auth/entities/tenant.user.entity.js.map +1 -0
  90. package/dist/auth/entities/user.entity.d.ts +5 -0
  91. package/dist/auth/entities/user.entity.d.ts.map +1 -1
  92. package/dist/auth/entities/user.entity.js +17 -0
  93. package/dist/auth/entities/user.entity.js.map +1 -1
  94. package/dist/auth/entities/user.role.entity.d.ts +2 -2
  95. package/dist/auth/entities/user.role.entity.d.ts.map +1 -1
  96. package/dist/auth/entities/user.role.entity.js +2 -2
  97. package/dist/auth/entities/user.role.entity.js.map +1 -1
  98. package/dist/auth/enums/auth.default.enum.d.ts +3 -1
  99. package/dist/auth/enums/auth.default.enum.d.ts.map +1 -1
  100. package/dist/auth/enums/auth.default.enum.js +2 -0
  101. package/dist/auth/enums/auth.default.enum.js.map +1 -1
  102. package/dist/auth/enums/tenant.invitation.default.enum.d.ts +4 -0
  103. package/dist/auth/enums/tenant.invitation.default.enum.d.ts.map +1 -0
  104. package/dist/auth/enums/tenant.invitation.default.enum.js +8 -0
  105. package/dist/auth/enums/tenant.invitation.default.enum.js.map +1 -0
  106. package/dist/auth/enums/tenant.invitation.status.enum.d.ts +7 -0
  107. package/dist/auth/enums/tenant.invitation.status.enum.d.ts.map +1 -0
  108. package/dist/auth/enums/tenant.invitation.status.enum.js +11 -0
  109. package/dist/auth/enums/tenant.invitation.status.enum.js.map +1 -0
  110. package/dist/auth/enums/user.type.enum.d.ts.map +1 -1
  111. package/dist/auth/enums/user.type.enum.js.map +1 -1
  112. package/dist/auth/es6.classes.d.ts +15 -4
  113. package/dist/auth/es6.classes.d.ts.map +1 -1
  114. package/dist/auth/es6.classes.js +35 -2
  115. package/dist/auth/es6.classes.js.map +1 -1
  116. package/dist/auth/helpers/auth.d.ts +1 -1
  117. package/dist/auth/helpers/auth.d.ts.map +1 -1
  118. package/dist/auth/helpers/auth.js +7 -4
  119. package/dist/auth/helpers/auth.js.map +1 -1
  120. package/dist/auth/processors/change.password.data.processor.d.ts.map +1 -1
  121. package/dist/auth/processors/change.password.data.processor.js +1 -0
  122. package/dist/auth/processors/change.password.data.processor.js.map +1 -1
  123. package/dist/auth/processors/google.user.data.processor.js +1 -1
  124. package/dist/auth/processors/google.user.data.processor.js.map +1 -1
  125. package/dist/auth/processors/register.user.data.processor.js +1 -1
  126. package/dist/auth/processors/register.user.data.processor.js.map +1 -1
  127. package/dist/auth/processors/tenant.invitation.data.processor.d.ts +20 -0
  128. package/dist/auth/processors/tenant.invitation.data.processor.d.ts.map +1 -0
  129. package/dist/auth/processors/tenant.invitation.data.processor.js +112 -0
  130. package/dist/auth/processors/tenant.invitation.data.processor.js.map +1 -0
  131. package/dist/auth/processors/tenant.invitation.list.processor.d.ts +13 -0
  132. package/dist/auth/processors/tenant.invitation.list.processor.d.ts.map +1 -0
  133. package/dist/auth/processors/tenant.invitation.list.processor.js +67 -0
  134. package/dist/auth/processors/tenant.invitation.list.processor.js.map +1 -0
  135. package/dist/auth/processors/tenant.member.list.processor.d.ts +13 -0
  136. package/dist/auth/processors/tenant.member.list.processor.d.ts.map +1 -0
  137. package/dist/auth/processors/tenant.member.list.processor.js +66 -0
  138. package/dist/auth/processors/tenant.member.list.processor.js.map +1 -0
  139. package/dist/auth/services/admin.auth.service.d.ts.map +1 -1
  140. package/dist/auth/services/admin.auth.service.js +2 -2
  141. package/dist/auth/services/admin.auth.service.js.map +1 -1
  142. package/dist/auth/services/auth.service.d.ts +5 -0
  143. package/dist/auth/services/auth.service.d.ts.map +1 -1
  144. package/dist/auth/services/auth.service.js +51 -13
  145. package/dist/auth/services/auth.service.js.map +1 -1
  146. package/dist/auth/services/impersonation.service.d.ts +2 -2
  147. package/dist/auth/services/impersonation.service.d.ts.map +1 -1
  148. package/dist/auth/services/impersonation.service.js +1 -1
  149. package/dist/auth/services/impersonation.service.js.map +1 -1
  150. package/dist/auth/services/tenant.invitation.service.d.ts +26 -0
  151. package/dist/auth/services/tenant.invitation.service.d.ts.map +1 -0
  152. package/dist/auth/services/tenant.invitation.service.js +212 -0
  153. package/dist/auth/services/tenant.invitation.service.js.map +1 -0
  154. package/dist/auth/services/tenant.membership.service.d.ts +29 -0
  155. package/dist/auth/services/tenant.membership.service.d.ts.map +1 -0
  156. package/dist/auth/services/tenant.membership.service.js +178 -0
  157. package/dist/auth/services/tenant.membership.service.js.map +1 -0
  158. package/dist/auth/types/auth.types.d.ts +24 -2
  159. package/dist/auth/types/auth.types.d.ts.map +1 -1
  160. package/dist/auth/utilities/access.revocation.d.ts +2 -0
  161. package/dist/auth/utilities/access.revocation.d.ts.map +1 -1
  162. package/dist/auth/utilities/access.revocation.js +12 -0
  163. package/dist/auth/utilities/access.revocation.js.map +1 -1
  164. package/dist/auth/utilities/auth.utilities.d.ts +1 -0
  165. package/dist/auth/utilities/auth.utilities.d.ts.map +1 -1
  166. package/dist/auth/utilities/auth.utilities.js +4 -0
  167. package/dist/auth/utilities/auth.utilities.js.map +1 -1
  168. package/dist/auth/utilities/tenant.access.d.ts +8 -0
  169. package/dist/auth/utilities/tenant.access.d.ts.map +1 -0
  170. package/dist/auth/utilities/tenant.access.js +61 -0
  171. package/dist/auth/utilities/tenant.access.js.map +1 -0
  172. package/dist/common/es6.classes.d.ts +2 -2
  173. package/dist/constants/entity.constants.d.ts +2 -0
  174. package/dist/constants/entity.constants.d.ts.map +1 -1
  175. package/dist/constants/entity.constants.js +2 -0
  176. package/dist/constants/entity.constants.js.map +1 -1
  177. package/dist/constants/entity.maps.d.ts +4 -0
  178. package/dist/constants/entity.maps.d.ts.map +1 -1
  179. package/dist/constants/entity.maps.js +4 -0
  180. package/dist/constants/entity.maps.js.map +1 -1
  181. package/dist/constants/job.constants.d.ts +1 -0
  182. package/dist/constants/job.constants.d.ts.map +1 -1
  183. package/dist/constants/job.constants.js +1 -0
  184. package/dist/constants/job.constants.js.map +1 -1
  185. package/dist/index.d.ts +6 -1
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +14 -3
  188. package/dist/index.js.map +1 -1
  189. package/dist/migrations/1749600000003.CreateSysUsersTable.d.ts.map +1 -1
  190. package/dist/migrations/1749600000003.CreateSysUsersTable.js +4 -0
  191. package/dist/migrations/1749600000003.CreateSysUsersTable.js.map +1 -1
  192. package/dist/migrations/1749600000006.CreateSysUserRolesJoinTable.d.ts.map +1 -1
  193. package/dist/migrations/1749600000006.CreateSysUserRolesJoinTable.js +8 -1
  194. package/dist/migrations/1749600000006.CreateSysUserRolesJoinTable.js.map +1 -1
  195. package/dist/migrations/1749600000030.CreateSysTenantUsersTable.d.ts +6 -0
  196. package/dist/migrations/1749600000030.CreateSysTenantUsersTable.d.ts.map +1 -0
  197. package/dist/migrations/1749600000030.CreateSysTenantUsersTable.js +33 -0
  198. package/dist/migrations/1749600000030.CreateSysTenantUsersTable.js.map +1 -0
  199. package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.d.ts +6 -0
  200. package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.d.ts.map +1 -0
  201. package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.js +43 -0
  202. package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.js.map +1 -0
  203. package/dist/notification/enums/email.notification.default.enum.d.ts +1 -0
  204. package/dist/notification/enums/email.notification.default.enum.d.ts.map +1 -1
  205. package/dist/notification/enums/email.notification.default.enum.js +1 -0
  206. package/dist/notification/enums/email.notification.default.enum.js.map +1 -1
  207. package/dist/notification/enums/email.template.identifier.enum.d.ts +2 -1
  208. package/dist/notification/enums/email.template.identifier.enum.d.ts.map +1 -1
  209. package/dist/notification/enums/email.template.identifier.enum.js +1 -0
  210. package/dist/notification/enums/email.template.identifier.enum.js.map +1 -1
  211. package/dist/notification/es6.classes.d.ts +2 -1
  212. package/dist/notification/es6.classes.d.ts.map +1 -1
  213. package/dist/notification/es6.classes.js +6 -1
  214. package/dist/notification/es6.classes.js.map +1 -1
  215. package/dist/notification/jobs/tenant.user.invited.mail.job.d.ts +14 -0
  216. package/dist/notification/jobs/tenant.user.invited.mail.job.d.ts.map +1 -0
  217. package/dist/notification/jobs/tenant.user.invited.mail.job.js +57 -0
  218. package/dist/notification/jobs/tenant.user.invited.mail.job.js.map +1 -0
  219. package/dist/notification/notification.module.d.ts.map +1 -1
  220. package/dist/notification/notification.module.js +3 -1
  221. package/dist/notification/notification.module.js.map +1 -1
  222. package/dist/notification/types/email.notification.types.d.ts +9 -0
  223. package/dist/notification/types/email.notification.types.d.ts.map +1 -1
  224. package/dist/tenant/middlewares/tenant.context.middleware.d.ts +2 -3
  225. package/dist/tenant/middlewares/tenant.context.middleware.d.ts.map +1 -1
  226. package/dist/tenant/middlewares/tenant.context.middleware.js +12 -23
  227. package/dist/tenant/middlewares/tenant.context.middleware.js.map +1 -1
  228. package/dist/tenant/services/tenant.service.d.ts +0 -2
  229. package/dist/tenant/services/tenant.service.d.ts.map +1 -1
  230. package/dist/tenant/services/tenant.service.js +0 -22
  231. package/dist/tenant/services/tenant.service.js.map +1 -1
  232. package/dist/tenant/types/tenant.types.d.ts +0 -5
  233. package/dist/tenant/types/tenant.types.d.ts.map +1 -1
  234. package/package.json +1 -1
  235. package/dist/tenant/enums/tenant.default.enum.d.ts +0 -4
  236. package/dist/tenant/enums/tenant.default.enum.d.ts.map +0 -1
  237. package/dist/tenant/enums/tenant.default.enum.js +0 -8
  238. package/dist/tenant/enums/tenant.default.enum.js.map +0 -1
package/README.md CHANGED
@@ -104,14 +104,14 @@ these are free to change without a breaking release.
104
104
  | Area | Key exports | Notes |
105
105
  | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
106
106
  | Entities | `RootEntity`, `CommonEntity`, `CommonAdminEntity`, `UserEntity`, `AdminUserEntity`, `SystemRoleEntity`, `SystemAdminRoleEntity`, ... | uuid PK, soft deletes, `created_by`/`updated_by` (+ `creator`/`updater` relations), jsonb `attributes`; entity-level `findOneOrNew`, `hardDelete`, `restore`, `paginate` statics plus a row-wise `softDelete()` |
107
- | Migrations | `MigrationUtility`, `SeederUtility` (the 29 table migrations ship in `dist/migrations` — glob them, they are not barrel exports) | fluent `this.string()`, `this.numeric()`, `addRecord()` seeding |
107
+ | Migrations | `MigrationUtility`, `SeederUtility` (the 31 table migrations ship in `dist/migrations` — glob them, they are not barrel exports) | fluent `this.string()`, `this.numeric()`, `addRecord()` seeding |
108
108
  | Queue | `QueueModule`, `QueueModule.withConnection()`, `QueueService`, `CommonJob` | BullMQ `@Processor`/`WorkerHost` consumer; auto-discovered jobs, duplicate prevention, recurring schedulers, completed jobs cleared from Redis on success (1-day TTL on failures), `clearQueue()`, retries, failures persisted to `sys_failed_jobs`; connection from `BULL_REDIS_*` or supplied by the app — never register `BullModule.forRoot()` yourself, two roots race over the worker's connection |
109
109
  | Scheduled events | `SystemScheduledTaskEntity`, `ScheduledEventEntity`, `ScheduleKind`, `ScheduleSpec`, `IsCronExpression` | schedule definitions in `sys_scheduled_tasks` → events in `sys_scheduled_events`; interval / cron / once specs with timezones, drift-free slots, horizon materialisation, catch-up + overlap policies, fire-once dispatch with backoff, cadence via `SCHEDULED_EVENT_MIN` |
110
- | Auth | `AuthModule`, `AuthService.validateRole()`, `RoleTier`, `TenantRole`, `Auth`, `JwtMiddleware` | imperative auth (open by default); `<module>.<tier>` role hierarchy (manager > writer > viewer), with `global.admin` overriding every role check; JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login` |
110
+ | Auth | `AuthModule`, `AuthService.validateRole()`, `RoleTier`, `TenantRole`, `Auth`, `JwtMiddleware` | imperative auth (open by default); `<module>.<tier>` role hierarchy (manager > writer > viewer), with `global.admin` overriding every role check; JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login`; multi-organization membership with per-organization roles, organization switching and `global.admin` invitations (`TenantMembershipService`, `TenantInvitationService`) |
111
111
  | Admin auth | `AdminAuthService.validateRole()`, `AdminAuth`, `AdminJwtMiddleware` (endpoints at `/admin/auth`) | fully separate stack for back-office admins — own users table (`sys_admin_users`), own roles (`sys_admin_roles`/`sys_auser_roles`), own sessions/refresh tokens (shared tables, `is_admin` flag) |
112
112
  | API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`, `ApiKeyContext` | hashed keys in `sys_api_keys` (admin-owned), one tenant per key, expiry/revocation, `x-api-key` header; `validateAccess(scope)` returns the tenant the key acts for |
113
113
  | Scopes | `ScopeService`, `AuthService.validateAccess()`, `ScopeEntity`, `TenantScopeEntity`, `ApiScopeEntity` | one feature named once in `sys_scopes`, optionally with child scopes under it, then granted per organization (`sys_tenant_scopes`) or per API key (`sys_api_scopes`) — never an array on the principal |
114
- | Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context; resolve by header, slug, or domain; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`) |
114
+ | Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context bound from the authenticated session (or API key), never a client-supplied header; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`) |
115
115
  | Admin | `AdminModule` (its controllers, DTOs and processors are internal — import the module and hit the endpoints), `GlobalAdminRoles` | back-office APIs: tenant onboarding, client/admin/system user registration (single + bulk), the `has_global_access` grant that enables impersonation, tenant + scheduled-task listing, the email/PDF template catalogues (read at content-reader, written at content-manager, deleted at global admin); 4-tier `GlobalAdminRoles` gate over `sys_admin_roles`; Swagger at `/docs` (hidden in production) |
116
116
  | Notifications | `NotificationModule`, `NotificationService`, `FcmPushNotificationService` | in-app rows + FCM push (optional `firebase-admin`); device token registry |
117
117
  | Email (SES) | `EmailNotificationService`, `ProcessEmailNotification`, `EmailTemplateEntity`, `EmailNotificationLogEntity` | templates in `sys_email_templates` (managed from the admin surface) rendered by a remote service, dispatched via SES per recipient (to/cc/bcc); logged to `sys_email_notification_logs` outside production; dispatch skipped when `AWS_SES_FROM_ADDRESS` unset |
@@ -223,7 +223,8 @@ const { user } = await this.authService.validateAccess(
223
223
 
224
224
  `AuthController` (mounted at `/auth`) exposes the ready-made flows: `POST
225
225
  /auth/login`, `/auth/google`, `/auth/register`, `/auth/refresh`, `/auth/logout`,
226
- `/auth/change-password`, and `GET /auth/me`. Passwords are hashed/verified via
226
+ `/auth/change-password`, and `GET /auth/me` (user, roles in the session's
227
+ organization, `organizations` to switch to, pending `invitations`). Passwords are hashed/verified via
227
228
  `AuthUtility` (bcrypt); the write flows use the processor lifecycle. Credential
228
229
  misses spend the same bcrypt work as a wrong password
229
230
  (`AuthUtility.compareAgainstDummy()`), so response timing does not reveal
@@ -252,6 +253,35 @@ impersonated session, for an in-app switcher), each login writes an
252
253
  tenant from real membership with `Auth.isImpersonating()` /
253
254
  `Auth.impersonatedTenant()`.
254
255
 
256
+ **Multiple organizations** — a tenant user may belong to many organizations
257
+ (`sys_tenant_users`), with roles granted per organization (`sys_user_roles.tenant_id`).
258
+ Each session works in one, held on its `sys_auth_sessions` row and mirrored onto
259
+ `Auth.user().organization_id`, so role and scope checks only ever see that
260
+ organization's grants. Login lands in the last organization switched to (remembered in
261
+ `sys_users.organization_id`) or the first membership; a user with none gets a
262
+ tenantless session. `GET /auth/organizations` lists memberships and
263
+ `POST /auth/organizations/switch` (`{ tenant_id, refresh_token }`) retires the current
264
+ session and returns a pair bound to the chosen one; `POST /auth/organizations/:id/leave`
265
+ ends a membership and returns a fresh pair. A refresh re-checks the membership and
266
+ the tenant, so a removed member or a deactivated tenant drops the organization.
267
+
268
+ **Invitations** — an organization's `global.admin` invites an email with roles at
269
+ `POST /organization/invitations` (`{ email, role_ids }`; also `POST .../list`,
270
+ `DELETE .../:id` to revoke, `GET .../roles` for the picker). An address with no account gets one: a random one-time password is mailed through the
271
+ `tenant-user-invited` template and `password_change_required` is set, so every endpoint
272
+ except `GET /auth/me` and `POST /auth/change-password` (`AuthService.validateIdentity()`)
273
+ refuses until it is changed; resending the invitation re-issues it. The invitee
274
+ sees pending ones on `GET /auth/me` / `GET /auth/invitations` and answers with
275
+ `POST /auth/invitations/:id/accept` (membership + roles, then switch to use it) or
276
+ `.../decline`. Invitations expire after `TENANT_INVITATION_EXPIRY` (default `7d`).
277
+ Acceptance trusts the account's email — emails are unique case-insensitively, but
278
+ verify addresses if you allow open self-registration. The same `global.admin` manages
279
+ members at `/organization/members` (`POST list`, `POST :userId/roles`,
280
+ `POST :userId/deactivate` / `reactivate`, `DELETE :userId`) and resends invitations
281
+ (`POST /organization/invitations/:id/resend`). Deactivation suspends the membership,
282
+ not the account (which may belong elsewhere); an organization always keeps at least
283
+ one active `global.admin`. A deactivated account is refused on its next request.
284
+
255
285
  **Google SSO** — the client posts a Google ID token as `{ id_token }` to
256
286
  `POST /auth/google`. `GoogleAuthService` verifies it against Google's tokeninfo
257
287
  endpoint (audience must match `GOOGLE_CLIENT_ID`, issuer `accounts.google.com`,
@@ -272,13 +302,16 @@ export class ReportController {
272
302
  }
273
303
  ```
274
304
 
275
- Wire the middleware once in your app so the user is resolved per request
276
- (mirrors `TenantContextMiddleware`):
305
+ Wire the middleware once in your app so the user is resolved per request.
306
+ `TenantContextMiddleware` goes after it — it binds the session's organization
307
+ (or the API key's tenant), never a client-supplied header or hostname:
277
308
 
278
309
  ```ts
279
310
  export class AppModule implements NestModule {
280
311
  configure(consumer: MiddlewareConsumer) {
281
- consumer.apply(JwtMiddleware).forRoutes('*'); // Express 5: e.g. '{*splat}'
312
+ consumer
313
+ .apply(JwtMiddleware, ApiKeyMiddleware, TenantContextMiddleware)
314
+ .forRoutes('*'); // Express 5: e.g. '{*splat}'
282
315
  }
283
316
  }
284
317
  ```
@@ -637,9 +670,9 @@ Requires the optional peer dependency `puppeteer`.
637
670
 
638
671
  ### Multi-tenancy
639
672
 
640
- | Variable | Default | Description |
641
- | -------------------- | ------------- | ----------------------------------------------- |
642
- | `TENANT_HEADER_NAME` | `x-tenant-id` | Request header carrying the tenant UUID or slug |
673
+ | Variable | Default | Description |
674
+ | -------------------------- | ------- | ---------------------------------------------------- |
675
+ | `TENANT_INVITATION_EXPIRY` | `7d` | How long an organization invitation stays answerable |
643
676
 
644
677
  ### API Keys
645
678
 
@@ -1067,6 +1100,9 @@ pass the actor to a processor.
1067
1100
  | `POST /admin/tenant-users/list` | content reader | `ClientUserListProcessor` |
1068
1101
  | `GET /admin/tenant-users/:id` | content reader | the row |
1069
1102
  | `DELETE /admin/tenant-users/:id` | admin | `ClientUserDeleteProcessor` |
1103
+ | `POST /admin/tenant-users/memberships` | admin | `ClientMembershipDataProcessor` — add an existing user to a tenant |
1104
+ | `DELETE /admin/tenant-users/:id/memberships/:tenantId` | admin | `TenantMembershipService.removeMember` |
1105
+ | `POST /admin/tenant-users/:id/memberships/:tenantId/deactivate` · `/reactivate` | admin | `TenantMembershipService.setMemberActive` |
1070
1106
  | `POST /admin/system-users` | super admin | `SystemUserDataProcessor` (upsert — send `id` to update) |
1071
1107
  | `POST /admin/system-users/list` | content reader | `SystemUserListProcessor` (scoped to `user_type = system.user`) |
1072
1108
  | `GET /admin/system-users/:id` | content reader | the row |
@@ -7,15 +7,22 @@ import { AdminAccessService } from '../services/admin.access.service';
7
7
  import { TenantService } from '../../tenant/services/tenant.service';
8
8
  import { TenantUserOnboardedMailJob } from '../../notification/jobs/tenant.user.onboarded.mail.job';
9
9
  import { ListFilterService } from '../../common/services/list.filter.service';
10
+ import { TenantMembershipService } from '../../auth/services/tenant.membership.service';
11
+ import { AddClientMembershipDto } from '../dtos/add.client.membership.dto';
10
12
  export declare class AdminTenantUserController {
11
13
  protected readonly adminAccessService: AdminAccessService;
12
14
  protected readonly tenantService: TenantService;
13
15
  protected readonly tenantUserOnboardedMailJob: TenantUserOnboardedMailJob;
14
16
  private readonly listFilterService;
15
- constructor(adminAccessService: AdminAccessService, tenantService: TenantService, tenantUserOnboardedMailJob: TenantUserOnboardedMailJob, listFilterService: ListFilterService);
17
+ private readonly tenantMembershipService;
18
+ constructor(adminAccessService: AdminAccessService, tenantService: TenantService, tenantUserOnboardedMailJob: TenantUserOnboardedMailJob, listFilterService: ListFilterService, tenantMembershipService: TenantMembershipService);
16
19
  clientUserDetail({ id }: CommonParamsDto): Promise<UserEntity>;
17
20
  addClientUser(dto: AddClientUserDto): Promise<UserEntity>;
18
21
  addClientUsersBulk(dto: AddBulkUsersDto): Promise<import("../types/admin.types").BulkUserResult>;
22
+ addMembership(dto: AddClientMembershipDto): Promise<import("../..").TenantUserEntity>;
23
+ deactivateMembership(id: string, tenantId: string): Promise<import("../..").TenantUserEntity>;
24
+ reactivateMembership(id: string, tenantId: string): Promise<import("../..").TenantUserEntity>;
25
+ removeMembership(id: string, tenantId: string): Promise<import("../..").DeleteResult>;
19
26
  listClientUsers(dto: ClientUserListDto): Promise<import("../..").CommonListResult>;
20
27
  removeClientUser(id: string): Promise<import("../..").DeleteResult>;
21
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin.tenant.user.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAKjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,qBACa,yBAAyB;IAElC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAHf,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,0BAA0B,EAAE,0BAA0B,EACxD,iBAAiB,EAAE,iBAAiB;IASjD,gBAAgB,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAkBjD,aAAa,CAAS,GAAG,EAAE,gBAAgB;IAa3C,kBAAkB,CAAS,GAAG,EAAE,eAAe;IAW/C,eAAe,CAAS,GAAG,EAAE,iBAAiB;IAW9C,gBAAgB,CAA6B,EAAE,EAAE,MAAM;CAI9D"}
1
+ {"version":3,"file":"admin.tenant.user.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAKjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,qBACa,yBAAyB;IAElC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;gBAJrB,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,0BAA0B,EAAE,0BAA0B,EACxD,iBAAiB,EAAE,iBAAiB,EACpC,uBAAuB,EAAE,uBAAuB;IAS7D,gBAAgB,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAkBjD,aAAa,CAAS,GAAG,EAAE,gBAAgB;IAa3C,kBAAkB,CAAS,GAAG,EAAE,eAAe;IAW/C,aAAa,CAAS,GAAG,EAAE,sBAAsB;IAWjD,oBAAoB,CACI,EAAE,EAAE,MAAM,EACJ,QAAQ,EAAE,MAAM;IAiB9C,oBAAoB,CACI,EAAE,EAAE,MAAM,EACJ,QAAQ,EAAE,MAAM;IAkB9C,gBAAgB,CACQ,EAAE,EAAE,MAAM,EACJ,QAAQ,EAAE,MAAM;IAiB9C,eAAe,CAAS,GAAG,EAAE,iBAAiB;IAW9C,gBAAgB,CAA6B,EAAE,EAAE,MAAM;CAI9D"}
@@ -29,18 +29,22 @@ const admin_access_service_1 = require("../services/admin.access.service");
29
29
  const tenant_service_1 = require("../../tenant/services/tenant.service");
30
30
  const tenant_user_onboarded_mail_job_1 = require("../../notification/jobs/tenant.user.onboarded.mail.job");
31
31
  const list_filter_service_1 = require("../../common/services/list.filter.service");
32
+ const tenant_membership_service_1 = require("../../auth/services/tenant.membership.service");
33
+ const add_client_membership_dto_1 = require("../dtos/add.client.membership.dto");
34
+ const client_membership_data_processor_1 = require("../libraries/client.membership.data.processor");
32
35
  let AdminTenantUserController = class AdminTenantUserController {
33
- constructor(adminAccessService, tenantService, tenantUserOnboardedMailJob, listFilterService) {
36
+ constructor(adminAccessService, tenantService, tenantUserOnboardedMailJob, listFilterService, tenantMembershipService) {
34
37
  this.adminAccessService = adminAccessService;
35
38
  this.tenantService = tenantService;
36
39
  this.tenantUserOnboardedMailJob = tenantUserOnboardedMailJob;
37
40
  this.listFilterService = listFilterService;
41
+ this.tenantMembershipService = tenantMembershipService;
38
42
  }
39
43
  async clientUserDetail({ id }) {
40
44
  await this.adminAccessService.validateContentReader();
41
45
  const user = await user_entity_1.UserEntity.findOne({
42
46
  where: { id, user_type: user_type_enum_1.UserType.TENANT_USER },
43
- relations: { organization: true, userRoles: { role: true } },
47
+ relations: { memberships: { tenant: true }, userRoles: { role: true } },
44
48
  });
45
49
  if (!user)
46
50
  throw new common_1.NotFoundException('No client user exists for this id');
@@ -54,6 +58,22 @@ let AdminTenantUserController = class AdminTenantUserController {
54
58
  await this.adminAccessService.validateAdmin();
55
59
  return new bulk_user_data_processor_1.BulkUserDataProcessor(this.tenantService).process(dto);
56
60
  }
61
+ async addMembership(dto) {
62
+ await this.adminAccessService.validateAdmin();
63
+ return new client_membership_data_processor_1.ClientMembershipDataProcessor(this.tenantService).process(dto);
64
+ }
65
+ async deactivateMembership(id, tenantId) {
66
+ await this.adminAccessService.validateAdmin();
67
+ return this.tenantMembershipService.setMemberActive(id, tenantId, false, undefined, false);
68
+ }
69
+ async reactivateMembership(id, tenantId) {
70
+ await this.adminAccessService.validateAdmin();
71
+ return this.tenantMembershipService.setMemberActive(id, tenantId, true, undefined, false);
72
+ }
73
+ async removeMembership(id, tenantId) {
74
+ const { user } = await this.adminAccessService.validateAdmin();
75
+ return this.tenantMembershipService.removeMember(id, tenantId, user.id, false);
76
+ }
57
77
  async listClientUsers(dto) {
58
78
  await this.adminAccessService.validateContentReader();
59
79
  return new client_user_list_processor_1.ClientUserListProcessor(this.listFilterService).process(dto);
@@ -68,7 +88,7 @@ __decorate([
68
88
  (0, common_1.Get)(':id'),
69
89
  (0, swagger_1.ApiOperation)({
70
90
  summary: 'One client (tenant-scoped) user, in full.',
71
- description: "Carries the user's tenant name and current role grants alongside everything the listing leaves out. The grants matter for editing: a save reconciles `role_ids` against them and revokes whatever the payload omits, so an edit form has to start from this list. Requires at least the global content reader role.",
91
+ description: "Carries the user's memberships (each with its tenant) and role grants (each with its `tenant_id`) alongside everything the listing leaves out. The grants matter for editing: a save reconciles one tenant's `role_ids` against them and revokes whatever the payload omits, so an edit form has to start from this list. Requires at least the global content reader role.",
72
92
  }),
73
93
  __param(0, (0, common_1.Param)()),
74
94
  __metadata("design:type", Function),
@@ -79,7 +99,7 @@ __decorate([
79
99
  (0, common_1.Post)(),
80
100
  (0, swagger_1.ApiOperation)({
81
101
  summary: 'Register a single client (tenant-scoped) user, or update one.',
82
- description: 'Send an `id` to edit that user; omit it to register a new one. `password` is required only when creating. `role_ids` replaces the current grants, so an edit must send the full set (read them from `GET :id`). `tenant_id` is not applied on an edit — a user does not move between tenants. Requires at least the global admin role.',
102
+ description: "Send an `id` to edit that user; omit it to register a new one as a member of `tenant_id`. `password` is required only when creating. `role_ids` replaces the grants held in `tenant_id`, so an edit must send that tenant's full set (read them from `GET :id`). On an edit `tenant_id` must be one of the user's memberships; others are untouched. Requires at least the global admin role.",
83
103
  }),
84
104
  __param(0, (0, common_1.Body)()),
85
105
  __metadata("design:type", Function),
@@ -97,11 +117,58 @@ __decorate([
97
117
  __metadata("design:paramtypes", [add_bulk_users_dto_1.AddBulkUsersDto]),
98
118
  __metadata("design:returntype", Promise)
99
119
  ], AdminTenantUserController.prototype, "addClientUsersBulk", null);
120
+ __decorate([
121
+ (0, common_1.Post)('memberships'),
122
+ (0, swagger_1.ApiOperation)({
123
+ summary: 'Add an existing client user to another tenant.',
124
+ description: 'Creates the membership and grants `role_ids` in that tenant. Refused when the user is already a member. Requires at least the global admin role.',
125
+ }),
126
+ __param(0, (0, common_1.Body)()),
127
+ __metadata("design:type", Function),
128
+ __metadata("design:paramtypes", [add_client_membership_dto_1.AddClientMembershipDto]),
129
+ __metadata("design:returntype", Promise)
130
+ ], AdminTenantUserController.prototype, "addMembership", null);
131
+ __decorate([
132
+ (0, common_1.Post)(':id/memberships/:tenantId/deactivate'),
133
+ (0, swagger_1.ApiOperation)({
134
+ summary: "Deactivate a client user's membership of one tenant.",
135
+ description: "Roles are kept; the user's credentials bound to the tenant are revoked and it can no longer be worked in. Reversible. Requires at least the global admin role.",
136
+ }),
137
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
138
+ __param(1, (0, common_1.Param)('tenantId', common_1.ParseUUIDPipe)),
139
+ __metadata("design:type", Function),
140
+ __metadata("design:paramtypes", [String, String]),
141
+ __metadata("design:returntype", Promise)
142
+ ], AdminTenantUserController.prototype, "deactivateMembership", null);
143
+ __decorate([
144
+ (0, common_1.Post)(':id/memberships/:tenantId/reactivate'),
145
+ (0, swagger_1.ApiOperation)({
146
+ summary: "Reactivate a client user's membership of one tenant.",
147
+ description: 'Requires at least the global admin role.',
148
+ }),
149
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
150
+ __param(1, (0, common_1.Param)('tenantId', common_1.ParseUUIDPipe)),
151
+ __metadata("design:type", Function),
152
+ __metadata("design:paramtypes", [String, String]),
153
+ __metadata("design:returntype", Promise)
154
+ ], AdminTenantUserController.prototype, "reactivateMembership", null);
155
+ __decorate([
156
+ (0, common_1.Delete)(':id/memberships/:tenantId'),
157
+ (0, swagger_1.ApiOperation)({
158
+ summary: 'Remove a client user from one tenant.',
159
+ description: "Ends that membership and its roles and revokes the user's credentials bound to the tenant; the account and its other memberships stay. Requires at least the global admin role.",
160
+ }),
161
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
162
+ __param(1, (0, common_1.Param)('tenantId', common_1.ParseUUIDPipe)),
163
+ __metadata("design:type", Function),
164
+ __metadata("design:paramtypes", [String, String]),
165
+ __metadata("design:returntype", Promise)
166
+ ], AdminTenantUserController.prototype, "removeMembership", null);
100
167
  __decorate([
101
168
  (0, common_1.Post)('list'),
102
169
  (0, swagger_1.ApiOperation)({
103
170
  summary: 'List, search and filter client (tenant-scoped) users.',
104
- description: 'Scoped to tenant users and joined to their tenant, so rows carry `tenant_name` alongside `tenant_id`. Requires the global super admin role.',
171
+ description: 'Scoped to tenant users, one row per membership, joined to its tenant so rows carry `membership_id` and `tenant_name` alongside `tenant_id`. A user in no tenant appears once with no tenant. Requires the global super admin role.',
105
172
  }),
106
173
  __param(0, (0, common_1.Body)()),
107
174
  __metadata("design:type", Function),
@@ -112,7 +179,7 @@ __decorate([
112
179
  (0, common_1.Delete)(':id'),
113
180
  (0, swagger_1.ApiOperation)({
114
181
  summary: 'Delete a client user.',
115
- description: "Soft delete, with the user's sessions and refresh tokens revoked in the same transaction so tokens already issued stop working immediately. Requires the global admin role.",
182
+ description: "Soft delete of the user and every membership, with the user's sessions and refresh tokens revoked in the same transaction so tokens already issued stop working immediately. Requires the global admin role.",
116
183
  }),
117
184
  __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
118
185
  __metadata("design:type", Function),
@@ -124,6 +191,7 @@ exports.AdminTenantUserController = AdminTenantUserController = __decorate([
124
191
  __metadata("design:paramtypes", [admin_access_service_1.AdminAccessService,
125
192
  tenant_service_1.TenantService,
126
193
  tenant_user_onboarded_mail_job_1.TenantUserOnboardedMailJob,
127
- list_filter_service_1.ListFilterService])
194
+ list_filter_service_1.ListFilterService,
195
+ tenant_membership_service_1.TenantMembershipService])
128
196
  ], AdminTenantUserController);
129
197
  //# sourceMappingURL=admin.tenant.user.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.tenant.user.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.tenant.user.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class AddClientMembershipDto {
2
+ user_id: string;
3
+ tenant_id: string;
4
+ role_ids?: string[];
5
+ }
6
+ //# sourceMappingURL=add.client.membership.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.client.membership.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.client.membership.dto.ts"],"names":[],"mappings":"AAIA,qBAAa,sBAAsB;IAIjC,OAAO,EAAE,MAAM,CAAC;IAKhB,SAAS,EAAE,MAAM,CAAC;IAUlB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AddClientMembershipDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const swagger_1 = require("@nestjs/swagger");
15
+ class AddClientMembershipDto {
16
+ }
17
+ exports.AddClientMembershipDto = AddClientMembershipDto;
18
+ __decorate([
19
+ (0, swagger_1.ApiProperty)({ format: 'uuid' }),
20
+ (0, class_validator_1.IsUUID)(),
21
+ (0, class_validator_1.IsNotEmpty)(),
22
+ __metadata("design:type", String)
23
+ ], AddClientMembershipDto.prototype, "user_id", void 0);
24
+ __decorate([
25
+ (0, swagger_1.ApiProperty)({ format: 'uuid', description: 'Tenant the user joins.' }),
26
+ (0, class_validator_1.IsUUID)(),
27
+ (0, class_validator_1.IsNotEmpty)(),
28
+ __metadata("design:type", String)
29
+ ], AddClientMembershipDto.prototype, "tenant_id", void 0);
30
+ __decorate([
31
+ (0, swagger_1.ApiPropertyOptional)({
32
+ type: [String],
33
+ format: 'uuid',
34
+ description: 'sys_roles uuids granted in that tenant.',
35
+ }),
36
+ (0, class_validator_1.IsOptional)(),
37
+ (0, class_validator_1.IsArray)(),
38
+ (0, class_validator_1.IsUUID)('all', { each: true }),
39
+ __metadata("design:type", Array)
40
+ ], AddClientMembershipDto.prototype, "role_ids", void 0);
41
+ //# sourceMappingURL=add.client.membership.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.client.membership.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.client.membership.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA0E;AAC1E,6CAAmE;AAGnE,MAAa,sBAAsB;CAoBlC;AApBD,wDAoBC;AAhBC;IAHC,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/B,IAAA,wBAAM,GAAE;IACR,IAAA,4BAAU,GAAE;;uDACG;AAKhB;IAHC,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACtE,IAAA,wBAAM,GAAE;IACR,IAAA,4BAAU,GAAE;;yDACK;AAUlB;IARC,IAAA,6BAAmB,EAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,yCAAyC;KACvD,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,wBAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;wDACV"}
@@ -19,6 +19,7 @@ import { AdminUserListProcessor } from './libraries/admin.user.list.processor';
19
19
  import { ApiKeyDataProcessor } from './libraries/api.key.data.processor';
20
20
  import { ApiKeyListProcessor } from './libraries/api.key.list.processor';
21
21
  import { BulkUserDataProcessor } from './libraries/bulk.user.data.processor';
22
+ import { ClientMembershipDataProcessor } from './libraries/client.membership.data.processor';
22
23
  import { ClientUserDataProcessor } from './libraries/client.user.data.processor';
23
24
  import { ClientUserDeleteProcessor } from './libraries/client.user.delete.processor';
24
25
  import { ClientUserListProcessor } from './libraries/client.user.list.processor';
@@ -40,6 +41,7 @@ import { TenantDeleteProcessor } from './libraries/tenant.delete.processor';
40
41
  import { TenantListProcessor } from './libraries/tenant.list.processor';
41
42
  import { AddAdminUserDto } from './dtos/add.admin.user.dto';
42
43
  import { AddApiKeyDto } from './dtos/add.api.key.dto';
44
+ import { AddClientMembershipDto } from './dtos/add.client.membership.dto';
43
45
  import { AddPdfTemplateDto } from './dtos/add.pdf.template.dto';
44
46
  import { ScheduleDto } from './dtos/add.scheduled.task.dto';
45
47
  import { AddScopeDto } from './dtos/add.scope.dto';
@@ -50,8 +52,8 @@ import { BaseUserDto } from './dtos/base.user.dto';
50
52
  export declare const es6Classes: {
51
53
  controllers: (typeof AdminApiKeyController | typeof AdminEmailTemplateController | typeof AdminPdfTemplateController | typeof AdminRoleController | typeof AdminScheduledTaskController | typeof AdminScopeController | typeof AdminTenantController | typeof AdminSystemUserController | typeof AdminTenantUserController | typeof AdminUserController | typeof SystemRoleController)[];
52
54
  services: readonly [typeof AdminAccessService, typeof SystemUserService, typeof TemplateService];
53
- libraries: (typeof ApiKeyDataProcessor | typeof ApiKeyListProcessor | typeof EmailTemplateDataProcessor | typeof EmailTemplateListProcessor | typeof PdfTemplateDataProcessor | typeof PdfTemplateListProcessor | typeof AdminRoleListProcessor | typeof RoleListProcessor | typeof ScheduledTaskDataProcessor | typeof ScheduledTaskDeleteProcessor | typeof ScheduledTaskListProcessor | typeof ScopeDataProcessor | typeof ScopeListProcessor | typeof TenantDataProcessor | typeof TenantDeleteProcessor | typeof TenantListProcessor | typeof SystemUserDataProcessor | typeof SystemUserListProcessor | typeof BulkUserDataProcessor | typeof ClientUserDataProcessor | typeof ClientUserDeleteProcessor | typeof ClientUserListProcessor | typeof AdminUserDataProcessor | typeof AdminUserDeleteProcessor | typeof AdminUserListProcessor | typeof SystemRoleDataProcessor)[];
54
- dtos: (typeof AddApiKeyDto | typeof ApiKeyListDto | typeof AddPdfTemplateDto | typeof ScheduleDto | typeof AddScopeDto | typeof AddTenantDto | typeof BaseUserDto | typeof AddAdminUserDto | typeof AddSystemRoleDto)[];
55
+ libraries: (typeof ApiKeyDataProcessor | typeof ApiKeyListProcessor | typeof EmailTemplateDataProcessor | typeof EmailTemplateListProcessor | typeof PdfTemplateDataProcessor | typeof PdfTemplateListProcessor | typeof AdminRoleListProcessor | typeof RoleListProcessor | typeof ScheduledTaskDataProcessor | typeof ScheduledTaskDeleteProcessor | typeof ScheduledTaskListProcessor | typeof ScopeDataProcessor | typeof ScopeListProcessor | typeof TenantDataProcessor | typeof TenantDeleteProcessor | typeof TenantListProcessor | typeof SystemUserDataProcessor | typeof SystemUserListProcessor | typeof BulkUserDataProcessor | typeof ClientUserDataProcessor | typeof ClientUserDeleteProcessor | typeof ClientUserListProcessor | typeof ClientMembershipDataProcessor | typeof AdminUserDataProcessor | typeof AdminUserDeleteProcessor | typeof AdminUserListProcessor | typeof SystemRoleDataProcessor)[];
56
+ dtos: (typeof AddApiKeyDto | typeof ApiKeyListDto | typeof AddPdfTemplateDto | typeof ScheduleDto | typeof AddScopeDto | typeof AddTenantDto | typeof BaseUserDto | typeof AddClientMembershipDto | typeof AddAdminUserDto | typeof AddSystemRoleDto)[];
55
57
  jobs: any[];
56
58
  subscribers: any[];
57
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"es6.classes.d.ts","sourceRoot":"","sources":["../../src/admin/es6.classes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"es6.classes.d.ts","sourceRoot":"","sources":["../../src/admin/es6.classes.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ const admin_user_list_processor_1 = require("./libraries/admin.user.list.process
22
22
  const api_key_data_processor_1 = require("./libraries/api.key.data.processor");
23
23
  const api_key_list_processor_1 = require("./libraries/api.key.list.processor");
24
24
  const bulk_user_data_processor_1 = require("./libraries/bulk.user.data.processor");
25
+ const client_membership_data_processor_1 = require("./libraries/client.membership.data.processor");
25
26
  const client_user_data_processor_1 = require("./libraries/client.user.data.processor");
26
27
  const client_user_delete_processor_1 = require("./libraries/client.user.delete.processor");
27
28
  const client_user_list_processor_1 = require("./libraries/client.user.list.processor");
@@ -44,6 +45,7 @@ const tenant_list_processor_1 = require("./libraries/tenant.list.processor");
44
45
  const add_admin_user_dto_1 = require("./dtos/add.admin.user.dto");
45
46
  const add_api_key_dto_1 = require("./dtos/add.api.key.dto");
46
47
  const add_bulk_users_dto_1 = require("./dtos/add.bulk.users.dto");
48
+ const add_client_membership_dto_1 = require("./dtos/add.client.membership.dto");
47
49
  const add_client_user_dto_1 = require("./dtos/add.client.user.dto");
48
50
  const add_email_template_dto_1 = require("./dtos/add.email.template.dto");
49
51
  const add_pdf_template_dto_1 = require("./dtos/add.pdf.template.dto");
@@ -86,6 +88,7 @@ exports.es6Classes = {
86
88
  api_key_data_processor_1.ApiKeyDataProcessor,
87
89
  api_key_list_processor_1.ApiKeyListProcessor,
88
90
  bulk_user_data_processor_1.BulkUserDataProcessor,
91
+ client_membership_data_processor_1.ClientMembershipDataProcessor,
89
92
  client_user_data_processor_1.ClientUserDataProcessor,
90
93
  client_user_delete_processor_1.ClientUserDeleteProcessor,
91
94
  client_user_list_processor_1.ClientUserListProcessor,
@@ -110,6 +113,7 @@ exports.es6Classes = {
110
113
  add_admin_user_dto_1.AddAdminUserDto,
111
114
  add_api_key_dto_1.AddApiKeyDto,
112
115
  add_bulk_users_dto_1.BulkUserItemDto,
116
+ add_client_membership_dto_1.AddClientMembershipDto,
113
117
  add_client_user_dto_1.AddClientUserDto,
114
118
  add_email_template_dto_1.AddEmailTemplateDto,
115
119
  add_pdf_template_dto_1.AddPdfTemplateDto,
@@ -1 +1 @@
1
- {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/admin/es6.classes.ts"],"names":[],"mappings":";;;AAAA,qFAA+E;AAC/E,mGAA6F;AAC7F,+FAAyF;AACzF,+EAA0E;AAC1E,mGAA6F;AAC7F,iFAA4E;AAC5E,mFAA8E;AAC9E,6FAAuF;AACvF,6FAAuF;AACvF,+EAA0E;AAC1E,iFAA4E;AAC5E,0EAAqE;AACrE,wEAAmE;AACnE,kEAA8D;AAC9D,qFAA+E;AAC/E,yFAAmF;AACnF,qFAA+E;AAC/E,qFAA+E;AAC/E,+EAAyE;AACzE,+EAAyE;AACzE,mFAA6E;AAC7E,uFAAiF;AACjF,2FAAqF;AACrF,uFAAiF;AACjF,6FAAuF;AACvF,6FAAuF;AACvF,yFAAmF;AACnF,yFAAmF;AACnF,yEAAoE;AACpE,6FAAuF;AACvF,iGAA2F;AAC3F,6FAAuF;AACvF,2EAAsE;AACtE,2EAAsE;AACtE,uFAAiF;AACjF,uFAAiF;AACjF,uFAAiF;AACjF,6EAAwE;AACxE,iFAA4E;AAC5E,6EAAwE;AACxE,kEAA4D;AAC5D,4DAAsD;AACtD,kEAA4D;AAC5D,oEAA8D;AAC9D,0EAAoE;AACpE,sEAAgE;AAChE,0EAA4D;AAC5D,wDAAmD;AACnD,oEAA8D;AAC9D,oEAA8D;AAC9D,0DAAqD;AACrD,oEAA8D;AAC9D,8DAAwD;AACxD,sEAAgE;AAChE,4EAAsE;AACtE,wEAAkE;AAClE,wDAAmD;AACnD,wDAAmD;AACnD,4EAAsE;AACtE,0DAAqD;AACrD,sEAAgE;AAChE,4DAAuD;AAE1C,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE;QACX,gDAAqB;QACrB,8DAA4B;QAC5B,0DAA0B;QAC1B,2CAAmB;QACnB,8DAA4B;QAC5B,6CAAoB;QACpB,+CAAqB;QACrB,2CAAmB;QACnB,wDAAyB;QACzB,wDAAyB;QACzB,6CAAoB;KACrB;IACD,QAAQ,EAAE,CAAC,yCAAkB,EAAE,uCAAiB,EAAE,kCAAe,CAAU;IAC3E,SAAS,EAAE;QACT,kDAAsB;QACtB,sDAAwB;QACxB,kDAAsB;QACtB,kDAAsB;QACtB,4CAAmB;QACnB,4CAAmB;QACnB,gDAAqB;QACrB,oDAAuB;QACvB,wDAAyB;QACzB,oDAAuB;QACvB,0DAA0B;QAC1B,0DAA0B;QAC1B,sDAAwB;QACxB,sDAAwB;QACxB,uCAAiB;QACjB,0DAA0B;QAC1B,8DAA4B;QAC5B,0DAA0B;QAC1B,yCAAkB;QAClB,yCAAkB;QAClB,oDAAuB;QACvB,oDAAuB;QACvB,oDAAuB;QACvB,2CAAmB;QACnB,+CAAqB;QACrB,2CAAmB;KACpB;IACD,IAAI,EAAE;QACJ,oCAAe;QACf,8BAAY;QACZ,oCAAe;QACf,sCAAgB;QAChB,4CAAmB;QACnB,wCAAiB;QACjB,oCAAW;QACX,2BAAW;QACX,sCAAgB;QAChB,sCAAgB;QAChB,6BAAY;QACZ,sCAAgB;QAChB,gCAAa;QACb,2BAAW;QACX,wCAAiB;QACjB,8CAAoB;QACpB,0CAAkB;QAClB,2BAAW;QACX,8CAAoB;QACpB,6BAAY;QACZ,wCAAiB;QACjB,+BAAa;KACd;IACD,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAChB,CAAC"}
1
+ {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/admin/es6.classes.ts"],"names":[],"mappings":";;;AAAA,qFAA+E;AAC/E,mGAA6F;AAC7F,+FAAyF;AACzF,+EAA0E;AAC1E,mGAA6F;AAC7F,iFAA4E;AAC5E,mFAA8E;AAC9E,6FAAuF;AACvF,6FAAuF;AACvF,+EAA0E;AAC1E,iFAA4E;AAC5E,0EAAqE;AACrE,wEAAmE;AACnE,kEAA8D;AAC9D,qFAA+E;AAC/E,yFAAmF;AACnF,qFAA+E;AAC/E,qFAA+E;AAC/E,+EAAyE;AACzE,+EAAyE;AACzE,mFAA6E;AAC7E,mGAA6F;AAC7F,uFAAiF;AACjF,2FAAqF;AACrF,uFAAiF;AACjF,6FAAuF;AACvF,6FAAuF;AACvF,yFAAmF;AACnF,yFAAmF;AACnF,yEAAoE;AACpE,6FAAuF;AACvF,iGAA2F;AAC3F,6FAAuF;AACvF,2EAAsE;AACtE,2EAAsE;AACtE,uFAAiF;AACjF,uFAAiF;AACjF,uFAAiF;AACjF,6EAAwE;AACxE,iFAA4E;AAC5E,6EAAwE;AACxE,kEAA4D;AAC5D,4DAAsD;AACtD,kEAA4D;AAC5D,gFAA0E;AAC1E,oEAA8D;AAC9D,0EAAoE;AACpE,sEAAgE;AAChE,0EAA4D;AAC5D,wDAAmD;AACnD,oEAA8D;AAC9D,oEAA8D;AAC9D,0DAAqD;AACrD,oEAA8D;AAC9D,8DAAwD;AACxD,sEAAgE;AAChE,4EAAsE;AACtE,wEAAkE;AAClE,wDAAmD;AACnD,wDAAmD;AACnD,4EAAsE;AACtE,0DAAqD;AACrD,sEAAgE;AAChE,4DAAuD;AAE1C,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE;QACX,gDAAqB;QACrB,8DAA4B;QAC5B,0DAA0B;QAC1B,2CAAmB;QACnB,8DAA4B;QAC5B,6CAAoB;QACpB,+CAAqB;QACrB,2CAAmB;QACnB,wDAAyB;QACzB,wDAAyB;QACzB,6CAAoB;KACrB;IACD,QAAQ,EAAE,CAAC,yCAAkB,EAAE,uCAAiB,EAAE,kCAAe,CAAU;IAC3E,SAAS,EAAE;QACT,kDAAsB;QACtB,sDAAwB;QACxB,kDAAsB;QACtB,kDAAsB;QACtB,4CAAmB;QACnB,4CAAmB;QACnB,gDAAqB;QACrB,gEAA6B;QAC7B,oDAAuB;QACvB,wDAAyB;QACzB,oDAAuB;QACvB,0DAA0B;QAC1B,0DAA0B;QAC1B,sDAAwB;QACxB,sDAAwB;QACxB,uCAAiB;QACjB,0DAA0B;QAC1B,8DAA4B;QAC5B,0DAA0B;QAC1B,yCAAkB;QAClB,yCAAkB;QAClB,oDAAuB;QACvB,oDAAuB;QACvB,oDAAuB;QACvB,2CAAmB;QACnB,+CAAqB;QACrB,2CAAmB;KACpB;IACD,IAAI,EAAE;QACJ,oCAAe;QACf,8BAAY;QACZ,oCAAe;QACf,kDAAsB;QACtB,sCAAgB;QAChB,4CAAmB;QACnB,wCAAiB;QACjB,oCAAW;QACX,2BAAW;QACX,sCAAgB;QAChB,sCAAgB;QAChB,6BAAY;QACZ,sCAAgB;QAChB,gCAAa;QACb,2BAAW;QACX,wCAAiB;QACjB,8CAAoB;QACpB,0CAAkB;QAClB,2BAAW;QACX,8CAAoB;QACpB,6BAAY;QACZ,wCAAiB;QACjB,+BAAa;KACd;IACD,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bulk.user.data.processor.d.ts","sourceRoot":"","sources":["../../../src/admin/libraries/bulk.user.data.processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,qBAAa,qBAAsB,SAAQ,iBAAiB;IAG9C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEN,aAAa,EAAE,aAAa;IAInD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;YAMlD,QAAQ;YAYR,MAAM;IA2BpB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,oBAAoB;YAQd,eAAe;CAa9B"}
1
+ {"version":3,"file":"bulk.user.data.processor.d.ts","sourceRoot":"","sources":["../../../src/admin/libraries/bulk.user.data.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,qBAAa,qBAAsB,SAAQ,iBAAiB;IAG9C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEN,aAAa,EAAE,aAAa;IAInD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;YAMlD,QAAQ;YAYR,MAAM;IAsCpB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,oBAAoB;YAQd,eAAe;CAe9B"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BulkUserDataProcessor = void 0;
4
- const typeorm_1 = require("typeorm");
5
4
  const user_data_processor_1 = require("./user.data.processor");
6
5
  const user_entity_1 = require("../../auth/entities/user.entity");
7
6
  const user_type_enum_1 = require("../../auth/enums/user.type.enum");
7
+ const tenant_user_entity_1 = require("../../auth/entities/tenant.user.entity");
8
8
  const auth_utilities_1 = require("../../auth/utilities/auth.utilities");
9
9
  class BulkUserDataProcessor extends user_data_processor_1.UserDataProcessor {
10
10
  constructor(tenantService) {
@@ -38,7 +38,13 @@ class BulkUserDataProcessor extends user_data_processor_1.UserDataProcessor {
38
38
  contact: user.contact,
39
39
  active: user.active ?? true,
40
40
  })));
41
- await user_entity_1.UserEntity.save(entities);
41
+ await user_entity_1.UserEntity.getRepository().manager.transaction(async (trx) => {
42
+ await trx.save(entities);
43
+ await trx.save(entities.map((user) => trx.create(tenant_user_entity_1.TenantUserEntity, {
44
+ user_id: user.id,
45
+ tenant_id: body.tenant_id,
46
+ })));
47
+ });
42
48
  return {
43
49
  created: entities.length,
44
50
  users: entities.map((user) => this.stripSecrets(user)),
@@ -65,10 +71,12 @@ class BulkUserDataProcessor extends user_data_processor_1.UserDataProcessor {
65
71
  }
66
72
  async flagTakenEmails() {
67
73
  const emails = this.payload.users.map((user) => user.email);
68
- const existing = await user_entity_1.UserEntity.find({ where: { email: (0, typeorm_1.In)(emails) } });
69
- const taken = new Set(existing.map((user) => user.email));
74
+ const existing = await user_entity_1.UserEntity.find({
75
+ where: { email: user_entity_1.UserEntity.emailMatching(emails) },
76
+ });
77
+ const taken = new Set(existing.map((user) => user.email.toLowerCase()));
70
78
  this.payload.users.forEach((user, index) => {
71
- if (taken.has(user.email)) {
79
+ if (taken.has(user.email.toLowerCase())) {
72
80
  this.setColumnError(`users[${index}].email`, 'Email is already registered');
73
81
  }
74
82
  });
@@ -1 +1 @@
1
- {"version":3,"file":"bulk.user.data.processor.js","sourceRoot":"","sources":["../../../src/admin/libraries/bulk.user.data.processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bulk.user.data.processor.js","sourceRoot":"","sources":["../../../src/admin/libraries/bulk.user.data.processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { CommonDataProcessor } from '../../common/libraries/common.data.processor';
2
+ import { TenantUserEntity } from '../../auth/entities/tenant.user.entity';
3
+ import { TenantService } from '../../tenant/services/tenant.service';
4
+ import { AddClientMembershipDto } from '../dtos/add.client.membership.dto';
5
+ export declare class ClientMembershipDataProcessor extends CommonDataProcessor {
6
+ private readonly tenantService;
7
+ protected payload: AddClientMembershipDto;
8
+ constructor(tenantService: TenantService);
9
+ process(payload: AddClientMembershipDto): Promise<TenantUserEntity>;
10
+ private validate;
11
+ private validateRoles;
12
+ private create;
13
+ }
14
+ //# sourceMappingURL=client.membership.data.processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.membership.data.processor.d.ts","sourceRoot":"","sources":["../../../src/admin/libraries/client.membership.data.processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI1E,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAM3E,qBAAa,6BAA8B,SAAQ,mBAAmB;IAGxD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,SAAS,CAAC,OAAO,EAAE,sBAAsB,CAAC;gBAEb,aAAa,EAAE,aAAa;IAInD,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAM3D,QAAQ;YAgBR,aAAa;YAiBb,MAAM;CAWrB"}