@neohm/nestend 3.1.5 → 3.2.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 (164) hide show
  1. package/README.md +68 -10
  2. package/dist/admin/controllers/admin.api.key.controller.d.ts +24 -0
  3. package/dist/admin/controllers/admin.api.key.controller.d.ts.map +1 -0
  4. package/dist/admin/controllers/admin.api.key.controller.js +117 -0
  5. package/dist/admin/controllers/admin.api.key.controller.js.map +1 -0
  6. package/dist/admin/controllers/admin.scheduled.task.controller.d.ts +1 -1
  7. package/dist/admin/controllers/admin.scope.controller.d.ts +24 -0
  8. package/dist/admin/controllers/admin.scope.controller.d.ts.map +1 -0
  9. package/dist/admin/controllers/admin.scope.controller.js +106 -0
  10. package/dist/admin/controllers/admin.scope.controller.js.map +1 -0
  11. package/dist/admin/controllers/admin.tenant.controller.d.ts +5 -6
  12. package/dist/admin/controllers/admin.tenant.controller.d.ts.map +1 -1
  13. package/dist/admin/controllers/admin.tenant.controller.js +17 -11
  14. package/dist/admin/controllers/admin.tenant.controller.js.map +1 -1
  15. package/dist/admin/controllers/admin.tenant.user.controller.d.ts +4 -6
  16. package/dist/admin/controllers/admin.tenant.user.controller.d.ts.map +1 -1
  17. package/dist/admin/controllers/admin.tenant.user.controller.js +5 -8
  18. package/dist/admin/controllers/admin.tenant.user.controller.js.map +1 -1
  19. package/dist/admin/controllers/admin.user.controller.d.ts +1 -1
  20. package/dist/admin/dtos/add.api.key.dto.d.ts +7 -0
  21. package/dist/admin/dtos/add.api.key.dto.d.ts.map +1 -0
  22. package/dist/admin/dtos/add.api.key.dto.js +55 -0
  23. package/dist/admin/dtos/add.api.key.dto.js.map +1 -0
  24. package/dist/admin/dtos/add.scope.dto.d.ts +7 -0
  25. package/dist/admin/dtos/add.scope.dto.d.ts.map +1 -0
  26. package/dist/admin/dtos/add.scope.dto.js +47 -0
  27. package/dist/admin/dtos/add.scope.dto.js.map +1 -0
  28. package/dist/admin/dtos/add.tenant.dto.d.ts +1 -0
  29. package/dist/admin/dtos/add.tenant.dto.d.ts.map +1 -1
  30. package/dist/admin/dtos/add.tenant.dto.js +12 -0
  31. package/dist/admin/dtos/add.tenant.dto.js.map +1 -1
  32. package/dist/admin/dtos/api.key.list.dto.d.ts +4 -0
  33. package/dist/admin/dtos/api.key.list.dto.d.ts.map +1 -0
  34. package/dist/admin/dtos/api.key.list.dto.js +8 -0
  35. package/dist/admin/dtos/api.key.list.dto.js.map +1 -0
  36. package/dist/admin/dtos/scope.list.dto.d.ts +4 -0
  37. package/dist/admin/dtos/scope.list.dto.d.ts.map +1 -0
  38. package/dist/admin/dtos/scope.list.dto.js +8 -0
  39. package/dist/admin/dtos/scope.list.dto.js.map +1 -0
  40. package/dist/admin/es6.classes.d.ts +12 -4
  41. package/dist/admin/es6.classes.d.ts.map +1 -1
  42. package/dist/admin/es6.classes.js +21 -1
  43. package/dist/admin/es6.classes.js.map +1 -1
  44. package/dist/admin/libraries/api.key.data.processor.d.ts +16 -0
  45. package/dist/admin/libraries/api.key.data.processor.d.ts.map +1 -0
  46. package/dist/admin/libraries/api.key.data.processor.js +59 -0
  47. package/dist/admin/libraries/api.key.data.processor.js.map +1 -0
  48. package/dist/admin/libraries/api.key.list.processor.d.ts +15 -0
  49. package/dist/admin/libraries/api.key.list.processor.d.ts.map +1 -0
  50. package/dist/admin/libraries/api.key.list.processor.js +48 -0
  51. package/dist/admin/libraries/api.key.list.processor.js.map +1 -0
  52. package/dist/admin/libraries/client.user.data.processor.d.ts +3 -6
  53. package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
  54. package/dist/admin/libraries/client.user.data.processor.js +11 -30
  55. package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
  56. package/dist/admin/libraries/scope.data.processor.d.ts +13 -0
  57. package/dist/admin/libraries/scope.data.processor.d.ts.map +1 -0
  58. package/dist/admin/libraries/scope.data.processor.js +43 -0
  59. package/dist/admin/libraries/scope.data.processor.js.map +1 -0
  60. package/dist/admin/libraries/scope.list.processor.d.ts +15 -0
  61. package/dist/admin/libraries/scope.list.processor.d.ts.map +1 -0
  62. package/dist/admin/libraries/scope.list.processor.js +29 -0
  63. package/dist/admin/libraries/scope.list.processor.js.map +1 -0
  64. package/dist/admin/libraries/tenant.data.processor.d.ts +5 -6
  65. package/dist/admin/libraries/tenant.data.processor.d.ts.map +1 -1
  66. package/dist/admin/libraries/tenant.data.processor.js +41 -28
  67. package/dist/admin/libraries/tenant.data.processor.js.map +1 -1
  68. package/dist/admin/libraries/tenant.delete.processor.d.ts.map +1 -1
  69. package/dist/admin/libraries/tenant.delete.processor.js +14 -0
  70. package/dist/admin/libraries/tenant.delete.processor.js.map +1 -1
  71. package/dist/admin/types/admin.types.d.ts +10 -4
  72. package/dist/admin/types/admin.types.d.ts.map +1 -1
  73. package/dist/auth/auth.module.d.ts.map +1 -1
  74. package/dist/auth/auth.module.js +9 -2
  75. package/dist/auth/auth.module.js.map +1 -1
  76. package/dist/auth/entities/api.key.entity.d.ts +3 -1
  77. package/dist/auth/entities/api.key.entity.d.ts.map +1 -1
  78. package/dist/auth/entities/api.key.entity.js +9 -3
  79. package/dist/auth/entities/api.key.entity.js.map +1 -1
  80. package/dist/auth/entities/tenant.scope.entity.d.ts +10 -0
  81. package/dist/auth/entities/tenant.scope.entity.d.ts.map +1 -0
  82. package/dist/auth/entities/tenant.scope.entity.js +41 -0
  83. package/dist/auth/entities/tenant.scope.entity.js.map +1 -0
  84. package/dist/auth/enums/api.key.default.enum.d.ts +2 -1
  85. package/dist/auth/enums/api.key.default.enum.d.ts.map +1 -1
  86. package/dist/auth/enums/api.key.default.enum.js +1 -0
  87. package/dist/auth/enums/api.key.default.enum.js.map +1 -1
  88. package/dist/auth/es6.classes.d.ts +2 -1
  89. package/dist/auth/es6.classes.d.ts.map +1 -1
  90. package/dist/auth/es6.classes.js +2 -0
  91. package/dist/auth/es6.classes.js.map +1 -1
  92. package/dist/auth/guards/api.key.guard.js +1 -1
  93. package/dist/auth/guards/api.key.guard.js.map +1 -1
  94. package/dist/auth/helpers/api.key.context.d.ts +6 -1
  95. package/dist/auth/helpers/api.key.context.d.ts.map +1 -1
  96. package/dist/auth/helpers/api.key.context.js +11 -2
  97. package/dist/auth/helpers/api.key.context.js.map +1 -1
  98. package/dist/auth/middlewares/api.key.middleware.d.ts +1 -0
  99. package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -1
  100. package/dist/auth/middlewares/api.key.middleware.js +17 -5
  101. package/dist/auth/middlewares/api.key.middleware.js.map +1 -1
  102. package/dist/auth/services/api.key.service.d.ts +13 -2
  103. package/dist/auth/services/api.key.service.d.ts.map +1 -1
  104. package/dist/auth/services/api.key.service.js +77 -5
  105. package/dist/auth/services/api.key.service.js.map +1 -1
  106. package/dist/auth/services/auth.service.d.ts +4 -1
  107. package/dist/auth/services/auth.service.d.ts.map +1 -1
  108. package/dist/auth/services/auth.service.js +19 -15
  109. package/dist/auth/services/auth.service.js.map +1 -1
  110. package/dist/auth/services/scope.service.d.ts +10 -0
  111. package/dist/auth/services/scope.service.d.ts.map +1 -0
  112. package/dist/auth/services/scope.service.js +50 -0
  113. package/dist/auth/services/scope.service.js.map +1 -0
  114. package/dist/auth/types/api.key.types.d.ts +15 -1
  115. package/dist/auth/types/api.key.types.d.ts.map +1 -1
  116. package/dist/common/types/common.response.types.d.ts +10 -0
  117. package/dist/common/types/common.response.types.d.ts.map +1 -1
  118. package/dist/constants/entity.constants.d.ts +1 -0
  119. package/dist/constants/entity.constants.d.ts.map +1 -1
  120. package/dist/constants/entity.constants.js +1 -0
  121. package/dist/constants/entity.constants.js.map +1 -1
  122. package/dist/constants/entity.maps.d.ts +2 -0
  123. package/dist/constants/entity.maps.d.ts.map +1 -1
  124. package/dist/constants/entity.maps.js +2 -0
  125. package/dist/constants/entity.maps.js.map +1 -1
  126. package/dist/constants/job.constants.d.ts +2 -0
  127. package/dist/constants/job.constants.d.ts.map +1 -1
  128. package/dist/constants/job.constants.js +2 -0
  129. package/dist/constants/job.constants.js.map +1 -1
  130. package/dist/constants/job.maps.d.ts.map +1 -1
  131. package/dist/constants/job.maps.js.map +1 -1
  132. package/dist/index.d.ts +4 -2
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +7 -3
  135. package/dist/index.js.map +1 -1
  136. package/dist/migrations/1749600000017.CreateSysApiKeysTable.d.ts.map +1 -1
  137. package/dist/migrations/1749600000017.CreateSysApiKeysTable.js +7 -1
  138. package/dist/migrations/1749600000017.CreateSysApiKeysTable.js.map +1 -1
  139. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.d.ts +6 -0
  140. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.d.ts.map +1 -0
  141. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.js +36 -0
  142. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.js.map +1 -0
  143. package/dist/notification/es6.classes.d.ts +3 -1
  144. package/dist/notification/es6.classes.d.ts.map +1 -1
  145. package/dist/notification/es6.classes.js +3 -1
  146. package/dist/notification/es6.classes.js.map +1 -1
  147. package/dist/notification/jobs/tenant.onboarded.mail.job.d.ts +15 -0
  148. package/dist/notification/jobs/tenant.onboarded.mail.job.d.ts.map +1 -0
  149. package/dist/notification/jobs/tenant.onboarded.mail.job.js +56 -0
  150. package/dist/notification/jobs/tenant.onboarded.mail.job.js.map +1 -0
  151. package/dist/notification/jobs/tenant.user.onboarded.mail.job.d.ts +15 -0
  152. package/dist/notification/jobs/tenant.user.onboarded.mail.job.d.ts.map +1 -0
  153. package/dist/notification/jobs/tenant.user.onboarded.mail.job.js +56 -0
  154. package/dist/notification/jobs/tenant.user.onboarded.mail.job.js.map +1 -0
  155. package/dist/notification/notification.module.d.ts.map +1 -1
  156. package/dist/notification/notification.module.js +7 -0
  157. package/dist/notification/notification.module.js.map +1 -1
  158. package/dist/notification/types/email.notification.types.d.ts +12 -0
  159. package/dist/notification/types/email.notification.types.d.ts.map +1 -1
  160. package/package.json +1 -1
  161. package/dist/admin/dtos/add.user.role.dto.d.ts +0 -4
  162. package/dist/admin/dtos/add.user.role.dto.d.ts.map +0 -1
  163. package/dist/admin/dtos/add.user.role.dto.js +0 -22
  164. package/dist/admin/dtos/add.user.role.dto.js.map +0 -1
package/README.md CHANGED
@@ -106,7 +106,8 @@ these are free to change without a breaking release.
106
106
  | 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` |
107
107
  | Auth | `AuthModule`, `AuthService.validateRole()`, `Auth`, `JwtMiddleware` | imperative auth (open by default); 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` |
108
108
  | 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) |
109
- | API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`, `ScopeEntity`, `ApiScopeEntity` | hashed keys in `sys_api_keys` (admin-owned), scopes, expiry/revocation, `x-api-key` header; normalized scopes catalogue in `sys_scopes`/`sys_api_scopes` |
109
+ | 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 |
110
+ | Scopes | `ScopeService`, `AuthService.validateAccess()`, `ScopeEntity`, `TenantScopeEntity`, `ApiScopeEntity` | one feature named once in `sys_scopes`, then granted per organization (`sys_tenant_scopes`) or per API key (`sys_api_scopes`) — never an array on the principal |
110
111
  | Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context; resolve by header, slug, or domain; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`) |
111
112
  | Admin | `AdminModule` (its controllers, DTOs and processors are internal — import the module and hit the endpoints), `GlobalAdminRoles` | back-office APIs: tenant onboarding, client/admin user registration (single + bulk, no role granting), tenant + scheduled-task listing; 4-tier `GlobalAdminRoles` gate over `sys_admin_roles`; Swagger at `/docs` (hidden in production) |
112
113
  | Notifications | `NotificationModule`, `NotificationService`, `FcmPushNotificationService` | in-app rows + FCM push (optional `firebase-admin`); device token registry |
@@ -182,6 +183,17 @@ active session. Pass a role identifier to gate on a specific role:
182
183
  `validateRole('tenant.editor')`. This keeps authorization next to your business
183
184
  logic, so layering tenant/plan/role checks is just more code.
184
185
 
186
+ For a feature that a whole organization is either enabled for or not, use
187
+ `validateAccess(scopeIdentifier, roleIdentifier?)`: it first checks that the
188
+ caller's tenant holds that scope (`sys_tenant_scopes` against the `sys_scopes`
189
+ catalogue), then delegates to `validateRole()`. One call answers "is this feature
190
+ sold to them?" and "is this person allowed to use it?" in that order.
191
+
192
+ ```ts
193
+ const { user } = await this.authService.validateAccess('billing.invoices');
194
+ const { user } = await this.authService.validateAccess('billing.invoices', 'tenant.editor');
195
+ ```
196
+
185
197
  `AuthController` (mounted at `/auth`) exposes the ready-made flows: `POST
186
198
  /auth/login`, `/auth/google`, `/auth/register`, `/auth/refresh`, `/auth/logout`,
187
199
  `/auth/change-password`, and `GET /auth/me`. Passwords are hashed/verified via
@@ -557,6 +569,20 @@ a subscriber only starts firing once something constructs it.
557
569
  | --------------------- | ----------- | ----------------------------------- |
558
570
  | `API_KEY_HEADER_NAME` | `x-api-key` | Request header carrying the API key |
559
571
 
572
+ A key belongs to one tenant and holds its scopes as `sys_api_scopes` rows against
573
+ the `sys_scopes` catalogue — there is no scopes array on the key, and a key grants
574
+ nothing it was not given (a granted `*` is the only blanket). `ApiKeyMiddleware`
575
+ resolves the key, its tenant and its scope identifiers once per request into
576
+ `ApiKeyContext`; enforce from there:
577
+
578
+ ```ts
579
+ const { tenant } = this.apiKeyService.validateAccess('orders:read');
580
+ // tenant is the sys_tenants row the key acts for — never taken from the payload
581
+ ```
582
+
583
+ `ApiKeyGuard`/`@ApiKeyScopes()` remain available for guard-based enforcement;
584
+ `hasScope()` is `async` now that grants are rows.
585
+
560
586
  ### Email Notifications (AWS SES)
561
587
 
562
588
  Credentials resolve through the standard AWS SDK chain. When
@@ -757,18 +783,50 @@ pass the actor to a processor.
757
783
 
758
784
  ### Endpoints
759
785
 
760
- | Route | Min. role | Processor |
761
- | ---------------------------------- | --------------- | ----------------------------------------------------------- |
762
- | `POST /admin/tenants` | super admin | `TenantDataProcessor` (upsert — send `id` to update) |
763
- | `POST /admin/tenants/list` | admin | `TenantListProcessor` |
764
- | `POST /admin/users/clients` | super admin | `ClientUserDataProcessor` |
765
- | `POST /admin/users/clients/bulk` | super admin | `BulkUserDataProcessor` |
766
- | `POST /admin/users/admins` | admin | `AdminUserDataProcessor` |
767
- | `POST /admin/scheduled-tasks` | content manager | `ScheduledTaskDataProcessor` (upsert — send `id` to update) |
768
- | `POST /admin/scheduled-tasks/list` | content reader | `ScheduledTaskListProcessor` |
786
+ | Route | Min. role | Handler |
787
+ | ---------------------------------------- | --------------- | ----------------------------------------------------------- |
788
+ | `POST /admin/tenants` | super admin | `TenantDataProcessor` (upsert — send `id` to update) |
789
+ | `POST /admin/tenants/list` | content reader | `TenantListProcessor` |
790
+ | `GET /admin/tenants/:id` | content reader | the row plus its `scopes` |
791
+ | `POST /admin/tenants/:id/delete` | super admin | `TenantDeleteProcessor` |
792
+ | `POST /admin/tenant-users` | admin | `ClientUserDataProcessor` |
793
+ | `POST /admin/tenant-users/bulk` | admin | `BulkUserDataProcessor` |
794
+ | `POST /admin/tenant-users/list` | content reader | `ClientUserListProcessor` |
795
+ | `GET /admin/tenant-users/:id` | content reader | the row |
796
+ | `POST /admin/tenant-users/:id/delete` | admin | `ClientUserDeleteProcessor` |
797
+ | `POST /admin/users` | super admin | `AdminUserDataProcessor` |
798
+ | `POST /admin/users/list` | content reader | `AdminUserListProcessor` |
799
+ | `GET /admin/users/:id` | content reader | the row |
800
+ | `POST /admin/users/:id/delete` | super admin | `AdminUserDeleteProcessor` |
801
+ | `POST /admin/roles/list` | admin | `AdminRoleListProcessor` |
802
+ | `POST /admin/roles/tenant/list` | admin | `RoleListProcessor` |
803
+ | `POST /admin/scheduled-tasks` | content manager | `ScheduledTaskDataProcessor` (upsert — send `id` to update) |
804
+ | `POST /admin/scheduled-tasks/list` | content reader | `ScheduledTaskListProcessor` |
805
+ | `GET /admin/scheduled-tasks/:id` | content reader | the row |
806
+ | `POST /admin/scheduled-tasks/:id/delete` | content manager | `ScheduledTaskDeleteProcessor` |
807
+ | `POST /admin/scopes` | content manager | `ScopeDataProcessor` (upsert — send `id` to update) |
808
+ | `POST /admin/scopes/list` | content reader | `ScopeListProcessor` |
809
+ | `GET /admin/scopes/:id` | content reader | the row |
810
+ | `POST /admin/scopes/:id/delete` | content manager | `ScopeService.deleteScope` (cascades to every grant) |
811
+ | `POST /admin/api-keys` | admin | `ApiKeyDataProcessor` — returns `{ raw_key, api_key }` |
812
+ | `POST /admin/api-keys/list` | content reader | `ApiKeyListProcessor` |
813
+ | `GET /admin/api-keys/:id` | content reader | `ApiKeyService.apiKeyDetail` — the row plus its `scopes` |
814
+ | `POST /admin/api-keys/:id/disable` | admin | `ApiKeyService.disableApiKey` (reversible) |
815
+ | `POST /admin/api-keys/:id/delete` | admin | `ApiKeyService.deleteApiKey` (soft, and revokes) |
769
816
 
770
817
  List endpoints are `POST .../list` with the filter payload in the body (a
771
818
  `CommonListFilterDto`) — see [List Endpoints & Filtering](#list-endpoints--filtering).
819
+ Deletes and the API-key disable are single-action, so they sit on the domain service
820
+ rather than in a processor; processors are for the writes that validate a payload.
821
+
822
+ **Scopes and grants.** A scope is defined once in `sys_scopes` (content manager),
823
+ then granted to the principals that hold it. `AddTenantDto.scope_ids` carries the
824
+ tenant's whole scope set — `setScopes()` grants what is new and soft-removes what is
825
+ gone, so an omitted list revokes them all (a picker has no other way to clear its
826
+ last selection); every other optional field on that DTO still keeps its stored value.
827
+ An API key can only be granted scopes its tenant already holds, so a key never
828
+ out-ranks the organization it acts for. `raw_key` appears in the issue response and
829
+ nowhere else.
772
830
 
773
831
  Auth endpoints for admins themselves (`login`, `refresh`, `logout`, `me`) live
774
832
  at `/admin/auth` (`AdminAuthController`) — see
@@ -0,0 +1,24 @@
1
+ import { SqlService } from '../../common/services/sql.service';
2
+ import { ApiKeyService } from '../../auth/services/api.key.service';
3
+ import { AdminAccessService } from '../services/admin.access.service';
4
+ import { CommonParamsDto } from '../../common/dtos/common.params.dto';
5
+ import { AddApiKeyDto } from '../dtos/add.api.key.dto';
6
+ import { ApiKeyListDto } from '../dtos/api.key.list.dto';
7
+ export declare class AdminApiKeyController {
8
+ private readonly adminAccessService;
9
+ private readonly apiKeyService;
10
+ private readonly sqlService;
11
+ constructor(adminAccessService: AdminAccessService, apiKeyService: ApiKeyService, sqlService: SqlService);
12
+ issue(dto: AddApiKeyDto): Promise<import("../types/admin.types").IssuedApiKey>;
13
+ list(dto: ApiKeyListDto): Promise<{
14
+ records: import("../..").SqlRow[];
15
+ total: number;
16
+ page: number;
17
+ limit: number;
18
+ total_pages: number;
19
+ }>;
20
+ detail({ id }: CommonParamsDto): Promise<import("../..").ApiKeyDetail>;
21
+ disable({ id }: CommonParamsDto): Promise<import("../..").DisableResult>;
22
+ remove({ id }: CommonParamsDto): Promise<import("../..").DeleteResult>;
23
+ }
24
+ //# sourceMappingURL=admin.api.key.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.api.key.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,qBAGa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU;IASnC,KAAK,CAAS,GAAG,EAAE,YAAY;IAW/B,IAAI,CAAS,GAAG,EAAE,aAAa;;;;;;;IAW/B,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAWvC,OAAO,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAWxC,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;CAI9C"}
@@ -0,0 +1,117 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AdminApiKeyController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const sql_service_1 = require("../../common/services/sql.service");
19
+ const api_key_service_1 = require("../../auth/services/api.key.service");
20
+ const admin_access_service_1 = require("../services/admin.access.service");
21
+ const common_params_dto_1 = require("../../common/dtos/common.params.dto");
22
+ const api_key_data_processor_1 = require("../libraries/api.key.data.processor");
23
+ const api_key_list_processor_1 = require("../libraries/api.key.list.processor");
24
+ const add_api_key_dto_1 = require("../dtos/add.api.key.dto");
25
+ const api_key_list_dto_1 = require("../dtos/api.key.list.dto");
26
+ let AdminApiKeyController = class AdminApiKeyController {
27
+ constructor(adminAccessService, apiKeyService, sqlService) {
28
+ this.adminAccessService = adminAccessService;
29
+ this.apiKeyService = apiKeyService;
30
+ this.sqlService = sqlService;
31
+ }
32
+ async issue(dto) {
33
+ const { user } = await this.adminAccessService.validateAdmin();
34
+ return new api_key_data_processor_1.ApiKeyDataProcessor(user, this.apiKeyService).process(dto);
35
+ }
36
+ async list(dto) {
37
+ await this.adminAccessService.validateContentReader();
38
+ return new api_key_list_processor_1.ApiKeyListProcessor(this.sqlService).process(dto);
39
+ }
40
+ async detail({ id }) {
41
+ await this.adminAccessService.validateContentReader();
42
+ return this.apiKeyService.apiKeyDetail(id);
43
+ }
44
+ async disable({ id }) {
45
+ const { user } = await this.adminAccessService.validateAdmin();
46
+ return this.apiKeyService.disableApiKey(id, user.id);
47
+ }
48
+ async remove({ id }) {
49
+ const { user } = await this.adminAccessService.validateAdmin();
50
+ return this.apiKeyService.deleteApiKey(id, user.id);
51
+ }
52
+ };
53
+ exports.AdminApiKeyController = AdminApiKeyController;
54
+ __decorate([
55
+ (0, common_1.Post)(),
56
+ (0, swagger_1.ApiOperation)({
57
+ summary: 'Issue an API key for a tenant.',
58
+ description: 'Create-only — `raw_key` is the full key and is returned exactly once, since only its hash is stored. A key can only be granted scopes its tenant already holds. Requires at least the global admin role.',
59
+ }),
60
+ __param(0, (0, common_1.Body)()),
61
+ __metadata("design:type", Function),
62
+ __metadata("design:paramtypes", [add_api_key_dto_1.AddApiKeyDto]),
63
+ __metadata("design:returntype", Promise)
64
+ ], AdminApiKeyController.prototype, "issue", null);
65
+ __decorate([
66
+ (0, common_1.Post)('list'),
67
+ (0, swagger_1.ApiOperation)({
68
+ summary: 'List, search and filter API keys.',
69
+ description: 'Rows carry `key_prefix` rather than the key itself, and `scopes` as the granted `{ id, identifier, name }` objects. Requires at least the global content reader role.',
70
+ }),
71
+ __param(0, (0, common_1.Body)()),
72
+ __metadata("design:type", Function),
73
+ __metadata("design:paramtypes", [api_key_list_dto_1.ApiKeyListDto]),
74
+ __metadata("design:returntype", Promise)
75
+ ], AdminApiKeyController.prototype, "list", null);
76
+ __decorate([
77
+ (0, common_1.Get)(':id'),
78
+ (0, swagger_1.ApiOperation)({
79
+ summary: 'One API key, in full.',
80
+ description: 'Carries the owning tenant and the `scopes` granted to the key. Never the key itself — only `key_prefix` survives generation. Requires at least the global content reader role.',
81
+ }),
82
+ __param(0, (0, common_1.Param)()),
83
+ __metadata("design:type", Function),
84
+ __metadata("design:paramtypes", [common_params_dto_1.CommonParamsDto]),
85
+ __metadata("design:returntype", Promise)
86
+ ], AdminApiKeyController.prototype, "detail", null);
87
+ __decorate([
88
+ (0, common_1.Post)(':id/disable'),
89
+ (0, swagger_1.ApiOperation)({
90
+ summary: 'Disable an API key.',
91
+ description: 'Turns the key off (`is_active` false) without destroying it: validation stops accepting it, while the row keeps its scopes and its history. Requires at least the global admin role.',
92
+ }),
93
+ __param(0, (0, common_1.Param)()),
94
+ __metadata("design:type", Function),
95
+ __metadata("design:paramtypes", [common_params_dto_1.CommonParamsDto]),
96
+ __metadata("design:returntype", Promise)
97
+ ], AdminApiKeyController.prototype, "disable", null);
98
+ __decorate([
99
+ (0, common_1.Post)(':id/delete'),
100
+ (0, swagger_1.ApiOperation)({
101
+ summary: 'Delete an API key.',
102
+ description: 'Soft delete: the row keeps its data with `deleted_at` set and drops out of every listing. It is revoked in the same transaction, along with its scope grants — key validation matches on `is_active`/`revoked_at`, so a row that only left the listings would keep authenticating requests. Requires at least the global admin role.',
103
+ }),
104
+ __param(0, (0, common_1.Param)()),
105
+ __metadata("design:type", Function),
106
+ __metadata("design:paramtypes", [common_params_dto_1.CommonParamsDto]),
107
+ __metadata("design:returntype", Promise)
108
+ ], AdminApiKeyController.prototype, "remove", null);
109
+ exports.AdminApiKeyController = AdminApiKeyController = __decorate([
110
+ (0, swagger_1.ApiTags)('Admin - API Keys'),
111
+ (0, swagger_1.ApiBearerAuth)(),
112
+ (0, common_1.Controller)('api/admin/api-keys'),
113
+ __metadata("design:paramtypes", [admin_access_service_1.AdminAccessService,
114
+ api_key_service_1.ApiKeyService,
115
+ sql_service_1.SqlService])
116
+ ], AdminApiKeyController);
117
+ //# sourceMappingURL=admin.api.key.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.api.key.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,6 @@ export declare class AdminScheduledTaskController {
17
17
  total_pages: number;
18
18
  }>;
19
19
  detail({ id }: CommonParamsDto): Promise<SystemScheduledTaskEntity>;
20
- remove({ id }: CommonParamsDto): Promise<import("../types/admin.types").DeleteResult>;
20
+ remove({ id }: CommonParamsDto): Promise<import("../..").DeleteResult>;
21
21
  }
22
22
  //# sourceMappingURL=admin.scheduled.task.controller.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { SqlService } from '../../common/services/sql.service';
2
+ import { AdminAccessService } from '../services/admin.access.service';
3
+ import { CommonParamsDto } from '../../common/dtos/common.params.dto';
4
+ import { ScopeService } from '../../auth/services/scope.service';
5
+ import { AddScopeDto } from '../dtos/add.scope.dto';
6
+ import { ScopeListDto } from '../dtos/scope.list.dto';
7
+ import { ScopeEntity } from '../../auth/entities/scope.entity';
8
+ export declare class AdminScopeController {
9
+ private readonly adminAccessService;
10
+ private readonly scopeService;
11
+ private readonly sqlService;
12
+ constructor(adminAccessService: AdminAccessService, scopeService: ScopeService, sqlService: SqlService);
13
+ save(dto: AddScopeDto): Promise<ScopeEntity>;
14
+ list(dto: ScopeListDto): Promise<{
15
+ records: import("../..").SqlRow[];
16
+ total: number;
17
+ page: number;
18
+ limit: number;
19
+ total_pages: number;
20
+ }>;
21
+ detail({ id }: CommonParamsDto): Promise<ScopeEntity>;
22
+ remove({ id }: CommonParamsDto): Promise<import("../..").DeleteResult>;
23
+ }
24
+ //# sourceMappingURL=admin.scope.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.scope.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQ/D,qBAGa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU;IASnC,IAAI,CAAS,GAAG,EAAE,WAAW;IAU7B,IAAI,CAAS,GAAG,EAAE,YAAY;;;;;;;IAU9B,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAevC,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;CAI9C"}
@@ -0,0 +1,106 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AdminScopeController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const sql_service_1 = require("../../common/services/sql.service");
19
+ const admin_access_service_1 = require("../services/admin.access.service");
20
+ const common_params_dto_1 = require("../../common/dtos/common.params.dto");
21
+ const scope_service_1 = require("../../auth/services/scope.service");
22
+ const scope_data_processor_1 = require("../libraries/scope.data.processor");
23
+ const scope_list_processor_1 = require("../libraries/scope.list.processor");
24
+ const add_scope_dto_1 = require("../dtos/add.scope.dto");
25
+ const scope_list_dto_1 = require("../dtos/scope.list.dto");
26
+ const scope_entity_1 = require("../../auth/entities/scope.entity");
27
+ let AdminScopeController = class AdminScopeController {
28
+ constructor(adminAccessService, scopeService, sqlService) {
29
+ this.adminAccessService = adminAccessService;
30
+ this.scopeService = scopeService;
31
+ this.sqlService = sqlService;
32
+ }
33
+ async save(dto) {
34
+ const { user } = await this.adminAccessService.validateContentManager();
35
+ return new scope_data_processor_1.ScopeDataProcessor(user).process(dto);
36
+ }
37
+ async list(dto) {
38
+ await this.adminAccessService.validateContentReader();
39
+ return new scope_list_processor_1.ScopeListProcessor(this.sqlService).process(dto);
40
+ }
41
+ async detail({ id }) {
42
+ await this.adminAccessService.validateContentReader();
43
+ const scope = await scope_entity_1.ScopeEntity.findOne({ where: { id } });
44
+ if (!scope)
45
+ throw new common_1.NotFoundException('No scope exists for this id');
46
+ return scope;
47
+ }
48
+ async remove({ id }) {
49
+ const { user } = await this.adminAccessService.validateContentManager();
50
+ return this.scopeService.deleteScope(id, user.id);
51
+ }
52
+ };
53
+ exports.AdminScopeController = AdminScopeController;
54
+ __decorate([
55
+ (0, common_1.Post)(),
56
+ (0, swagger_1.ApiOperation)({
57
+ summary: 'Define a scope, or update an existing one.',
58
+ description: 'Send an `id` to edit that scope; omit it to define a new one. `identifier` is what code checks and is unique across the catalogue. Requires at least the global content manager role.',
59
+ }),
60
+ __param(0, (0, common_1.Body)()),
61
+ __metadata("design:type", Function),
62
+ __metadata("design:paramtypes", [add_scope_dto_1.AddScopeDto]),
63
+ __metadata("design:returntype", Promise)
64
+ ], AdminScopeController.prototype, "save", null);
65
+ __decorate([
66
+ (0, common_1.Post)('list'),
67
+ (0, swagger_1.ApiOperation)({
68
+ summary: 'List, search and filter scopes.',
69
+ description: 'Requires at least the global content reader role.',
70
+ }),
71
+ __param(0, (0, common_1.Body)()),
72
+ __metadata("design:type", Function),
73
+ __metadata("design:paramtypes", [scope_list_dto_1.ScopeListDto]),
74
+ __metadata("design:returntype", Promise)
75
+ ], AdminScopeController.prototype, "list", null);
76
+ __decorate([
77
+ (0, common_1.Get)(':id'),
78
+ (0, swagger_1.ApiOperation)({
79
+ summary: 'One scope, in full.',
80
+ description: 'Requires at least the global content reader role.',
81
+ }),
82
+ __param(0, (0, common_1.Param)()),
83
+ __metadata("design:type", Function),
84
+ __metadata("design:paramtypes", [common_params_dto_1.CommonParamsDto]),
85
+ __metadata("design:returntype", Promise)
86
+ ], AdminScopeController.prototype, "detail", null);
87
+ __decorate([
88
+ (0, common_1.Post)(':id/delete'),
89
+ (0, swagger_1.ApiOperation)({
90
+ summary: 'Delete a scope.',
91
+ description: 'Soft delete: the row keeps its data with `deleted_at` set and drops out of every listing. Every grant of it goes too — the tenant rows in `sys_tenant_scopes` and the API-key rows in `sys_api_scopes` — so no principal keeps a feature the catalogue no longer defines. Requires at least the global content manager role.',
92
+ }),
93
+ __param(0, (0, common_1.Param)()),
94
+ __metadata("design:type", Function),
95
+ __metadata("design:paramtypes", [common_params_dto_1.CommonParamsDto]),
96
+ __metadata("design:returntype", Promise)
97
+ ], AdminScopeController.prototype, "remove", null);
98
+ exports.AdminScopeController = AdminScopeController = __decorate([
99
+ (0, swagger_1.ApiTags)('Admin - Scopes'),
100
+ (0, swagger_1.ApiBearerAuth)(),
101
+ (0, common_1.Controller)('api/admin/scopes'),
102
+ __metadata("design:paramtypes", [admin_access_service_1.AdminAccessService,
103
+ scope_service_1.ScopeService,
104
+ sql_service_1.SqlService])
105
+ ], AdminScopeController);
106
+ //# sourceMappingURL=admin.scope.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.scope.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,14 @@ import { AdminAccessService } from '../services/admin.access.service';
3
3
  import { CommonParamsDto } from '../../common/dtos/common.params.dto';
4
4
  import { AddTenantDto } from '../dtos/add.tenant.dto';
5
5
  import { TenantListDto } from '../dtos/tenant.list.dto';
6
- import { EmailNotificationService } from '../../notification/services/email.notification.service';
7
- import { SystemPropertyService } from '../../common/services/system.property.service';
6
+ import { TenantOnboardedMailJob } from '../../notification/jobs/tenant.onboarded.mail.job';
8
7
  import { TenantEntity } from '../../tenant/entities/tenant.entity';
8
+ import { TenantDetail } from '../types/admin.types';
9
9
  export declare class AdminTenantController {
10
10
  private readonly adminAccessService;
11
11
  private readonly sqlService;
12
- private readonly emailNotificationService;
13
- private readonly systemPropertyService;
14
- constructor(adminAccessService: AdminAccessService, sqlService: SqlService, emailNotificationService: EmailNotificationService, systemPropertyService: SystemPropertyService);
12
+ private readonly tenantOnboardedMailJob;
13
+ constructor(adminAccessService: AdminAccessService, sqlService: SqlService, tenantOnboardedMailJob: TenantOnboardedMailJob);
15
14
  onboard(dto: AddTenantDto): Promise<TenantEntity>;
16
15
  list(dto: TenantListDto): Promise<{
17
16
  records: import("../..").SqlRow[];
@@ -20,7 +19,7 @@ export declare class AdminTenantController {
20
19
  limit: number;
21
20
  total_pages: number;
22
21
  }>;
23
- detail({ id }: CommonParamsDto): Promise<TenantEntity>;
22
+ detail({ id }: CommonParamsDto): Promise<TenantDetail>;
24
23
  remove({ id }: CommonParamsDto): Promise<import("../types/admin.types").DeleteResult>;
25
24
  }
26
25
  //# sourceMappingURL=admin.tenant.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.tenant.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAItE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,qBAGa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAHrB,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,wBAAwB,EAClD,qBAAqB,EAAE,qBAAqB;IASzD,OAAO,CAAS,GAAG,EAAE,YAAY;IAejC,IAAI,CAAS,GAAG,EAAE,aAAa;;;;;;;IAW/B,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAevC,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;CAI9C"}
1
+ {"version":3,"file":"admin.tenant.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAItE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qBAGa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAFtB,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB;IAS3D,OAAO,CAAS,GAAG,EAAE,YAAY;IAajC,IAAI,CAAS,GAAG,EAAE,aAAa;;;;;;;IAW/B,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA2B/D,MAAM,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;CAI9C"}
@@ -23,19 +23,18 @@ const tenant_delete_processor_1 = require("../libraries/tenant.delete.processor"
23
23
  const tenant_list_processor_1 = require("../libraries/tenant.list.processor");
24
24
  const add_tenant_dto_1 = require("../dtos/add.tenant.dto");
25
25
  const tenant_list_dto_1 = require("../dtos/tenant.list.dto");
26
- const email_notification_service_1 = require("../../notification/services/email.notification.service");
27
- const system_property_service_1 = require("../../common/services/system.property.service");
26
+ const tenant_onboarded_mail_job_1 = require("../../notification/jobs/tenant.onboarded.mail.job");
28
27
  const tenant_entity_1 = require("../../tenant/entities/tenant.entity");
28
+ const tenant_scope_entity_1 = require("../../auth/entities/tenant.scope.entity");
29
29
  let AdminTenantController = class AdminTenantController {
30
- constructor(adminAccessService, sqlService, emailNotificationService, systemPropertyService) {
30
+ constructor(adminAccessService, sqlService, tenantOnboardedMailJob) {
31
31
  this.adminAccessService = adminAccessService;
32
32
  this.sqlService = sqlService;
33
- this.emailNotificationService = emailNotificationService;
34
- this.systemPropertyService = systemPropertyService;
33
+ this.tenantOnboardedMailJob = tenantOnboardedMailJob;
35
34
  }
36
35
  async onboard(dto) {
37
36
  const { user } = await this.adminAccessService.validateSuperAdmin();
38
- return new tenant_data_processor_1.TenantDataProcessor(user, this.emailNotificationService, this.systemPropertyService).process(dto);
37
+ return new tenant_data_processor_1.TenantDataProcessor(user, this.tenantOnboardedMailJob).process(dto);
39
38
  }
40
39
  async list(dto) {
41
40
  await this.adminAccessService.validateContentReader();
@@ -46,7 +45,15 @@ let AdminTenantController = class AdminTenantController {
46
45
  const tenant = await tenant_entity_1.TenantEntity.findOne({ where: { id } });
47
46
  if (!tenant)
48
47
  throw new common_1.NotFoundException('No tenant exists for this id');
49
- return tenant;
48
+ const tenantScopes = await tenant_scope_entity_1.TenantScopeEntity.find({
49
+ where: { tenant_id: id },
50
+ relations: { scope: true },
51
+ });
52
+ return Object.assign(tenant, {
53
+ scopes: tenantScopes
54
+ .map((tenantScope) => tenantScope.scope)
55
+ .filter((scope) => !!scope),
56
+ });
50
57
  }
51
58
  async remove({ id }) {
52
59
  const { user } = await this.adminAccessService.validateSuperAdmin();
@@ -58,7 +65,7 @@ __decorate([
58
65
  (0, common_1.Post)(),
59
66
  (0, swagger_1.ApiOperation)({
60
67
  summary: 'Onboard a new client tenant, or update an existing one.',
61
- description: 'Send an `id` to edit that tenant; omit it to onboard a new one. Omitted optional fields keep their stored value. An edit never re-runs onboarding — `onboarded_at`, `created_by` and the welcome email belong to first registration. Requires the global super admin role.',
68
+ description: "Send an `id` to edit that tenant; omit it to onboard a new one. Omitted optional fields keep their stored value, except `scope_ids` — that list replaces the tenant's scope grants, so an omitted one revokes them all. An edit never re-runs onboarding — `onboarded_at`, `created_by` and the welcome email belong to first registration. Requires the global super admin role.",
62
69
  }),
63
70
  __param(0, (0, common_1.Body)()),
64
71
  __metadata("design:type", Function),
@@ -80,7 +87,7 @@ __decorate([
80
87
  (0, common_1.Get)(':id'),
81
88
  (0, swagger_1.ApiOperation)({
82
89
  summary: 'One tenant, in full.',
83
- description: 'Everything the listing leaves out — address, attributes and the onboarding trail. Requires at least the global reader role.',
90
+ description: 'Everything the listing leaves out — address, attributes, the onboarding trail and the `scopes` enabled for the tenant. Requires at least the global reader role.',
84
91
  }),
85
92
  __param(0, (0, common_1.Param)()),
86
93
  __metadata("design:type", Function),
@@ -104,7 +111,6 @@ exports.AdminTenantController = AdminTenantController = __decorate([
104
111
  (0, common_1.Controller)('api/admin/tenants'),
105
112
  __metadata("design:paramtypes", [admin_access_service_1.AdminAccessService,
106
113
  sql_service_1.SqlService,
107
- email_notification_service_1.EmailNotificationService,
108
- system_property_service_1.SystemPropertyService])
114
+ tenant_onboarded_mail_job_1.TenantOnboardedMailJob])
109
115
  ], AdminTenantController);
110
116
  //# sourceMappingURL=admin.tenant.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.tenant.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,6CAAuE;AACvE,mEAA+D;AAC/D,2EAAsE;AACtE,2EAAsE;AACtE,8EAAyE;AACzE,kFAA6E;AAC7E,8EAAyE;AACzE,2DAAsD;AACtD,6DAAwD;AACxD,uGAAkG;AAClG,2FAAsF;AACtF,uEAAmE;AAK5D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YACmB,kBAAsC,EACtC,UAAsB,EACtB,wBAAkD,EAClD,qBAA4C;QAH5C,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,eAAU,GAAV,UAAU,CAAY;QACtB,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,0BAAqB,GAArB,qBAAqB,CAAuB;IAC5D,CAAC;IAQE,AAAN,KAAK,CAAC,OAAO,CAAS,GAAiB;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAEpE,OAAO,IAAI,2CAAmB,CAC5B,IAAI,EACJ,IAAI,CAAC,wBAAwB,EAC7B,IAAI,CAAC,qBAAqB,CAC3B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAOK,AAAN,KAAK,CAAC,IAAI,CAAS,GAAkB;QACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,2CAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IAQK,AAAN,KAAK,CAAC,MAAM,CAAU,EAAE,EAAE,EAAmB;QAC3C,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,4BAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,0BAAiB,CAAC,8BAA8B,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAChB,CAAC;IAQK,AAAN,KAAK,CAAC,MAAM,CAAU,EAAE,EAAE,EAAmB;QAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QACpE,OAAO,IAAI,+CAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AA3DY,sDAAqB;AAc1B;IANL,IAAA,aAAI,GAAE;IACN,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,yDAAyD;QAClE,WAAW,EACT,4QAA4Q;KAC/Q,CAAC;IACa,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,6BAAY;;oDAQtC;AAOK;IALL,IAAA,aAAI,EAAC,MAAM,CAAC;IACZ,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,kCAAkC;QAC3C,WAAW,EAAE,mDAAmD;KACjE,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,+BAAa;;iDAGpC;AAQK;IANL,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EACT,6HAA6H;KAChI,CAAC;IACY,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAS,mCAAe;;mDAO5C;AAQK;IANL,IAAA,aAAI,EAAC,YAAY,CAAC;IAClB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EACT,yTAAyT;KAC5T,CAAC;IACY,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAS,mCAAe;;mDAG5C;gCA1DU,qBAAqB;IAHjC,IAAA,iBAAO,EAAC,iBAAiB,CAAC;IAC1B,IAAA,uBAAa,GAAE;IACf,IAAA,mBAAU,EAAC,mBAAmB,CAAC;qCAGS,yCAAkB;QAC1B,wBAAU;QACI,qDAAwB;QAC3B,+CAAqB;GALpD,qBAAqB,CA2DjC"}
1
+ {"version":3,"file":"admin.tenant.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.controller.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,14 @@ import { AddClientUserDto } from '../dtos/add.client.user.dto';
5
5
  import { ClientUserListDto } from '../dtos/client.user.list.dto';
6
6
  import { AdminAccessService } from '../services/admin.access.service';
7
7
  import { TenantService } from '../../tenant/services/tenant.service';
8
- import { EmailNotificationService } from '../../notification/services/email.notification.service';
9
- import { SystemPropertyService } from '../../common/services/system.property.service';
8
+ import { TenantUserOnboardedMailJob } from '../../notification/jobs/tenant.user.onboarded.mail.job';
10
9
  import { SqlService } from '../../common/services/sql.service';
11
10
  export declare class AdminTenantUserController {
12
11
  protected readonly adminAccessService: AdminAccessService;
13
12
  protected readonly tenantService: TenantService;
14
- protected readonly emailNotificationService: EmailNotificationService;
15
- protected readonly systemPropertyService: SystemPropertyService;
13
+ protected readonly tenantUserOnboardedMailJob: TenantUserOnboardedMailJob;
16
14
  protected readonly sqlService: SqlService;
17
- constructor(adminAccessService: AdminAccessService, tenantService: TenantService, emailNotificationService: EmailNotificationService, systemPropertyService: SystemPropertyService, sqlService: SqlService);
15
+ constructor(adminAccessService: AdminAccessService, tenantService: TenantService, tenantUserOnboardedMailJob: TenantUserOnboardedMailJob, sqlService: SqlService);
18
16
  clientUserDetail({ id }: CommonParamsDto): Promise<UserEntity>;
19
17
  addClientUser(dto: AddClientUserDto): Promise<UserEntity>;
20
18
  addClientUsersBulk(dto: AddBulkUsersDto): Promise<import("../types/admin.types").BulkUserResult>;
@@ -25,6 +23,6 @@ export declare class AdminTenantUserController {
25
23
  limit: number;
26
24
  total_pages: number;
27
25
  }>;
28
- removeClientUser(id: string): Promise<import("../types/admin.types").DeleteResult>;
26
+ removeClientUser(id: string): Promise<import("../..").DeleteResult>;
29
27
  }
30
28
  //# sourceMappingURL=admin.tenant.user.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.tenant.user.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"AAUA,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,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,qBACa,yBAAyB;IAElC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB;IACrE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IAC/D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;gBAJtB,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,wBAAwB,EAAE,wBAAwB,EAClD,qBAAqB,EAAE,qBAAqB,EAC5C,UAAU,EAAE,UAAU;IASrC,gBAAgB,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAiBjD,aAAa,CAAS,GAAG,EAAE,gBAAgB;IAc3C,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":"AAUA,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,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,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,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;gBAHtB,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,0BAA0B,EAAE,0BAA0B,EACtD,UAAU,EAAE,UAAU;IASrC,gBAAgB,CAAU,EAAE,EAAE,EAAE,EAAE,eAAe;IAiBjD,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"}