@neohm/nestend 3.1.4 → 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 (168) 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.client.user.dto.d.ts +1 -2
  25. package/dist/admin/dtos/add.client.user.dto.d.ts.map +1 -1
  26. package/dist/admin/dtos/add.client.user.dto.js +2 -1
  27. package/dist/admin/dtos/add.client.user.dto.js.map +1 -1
  28. package/dist/admin/dtos/add.scope.dto.d.ts +7 -0
  29. package/dist/admin/dtos/add.scope.dto.d.ts.map +1 -0
  30. package/dist/admin/dtos/add.scope.dto.js +47 -0
  31. package/dist/admin/dtos/add.scope.dto.js.map +1 -0
  32. package/dist/admin/dtos/add.tenant.dto.d.ts +1 -0
  33. package/dist/admin/dtos/add.tenant.dto.d.ts.map +1 -1
  34. package/dist/admin/dtos/add.tenant.dto.js +12 -0
  35. package/dist/admin/dtos/add.tenant.dto.js.map +1 -1
  36. package/dist/admin/dtos/api.key.list.dto.d.ts +4 -0
  37. package/dist/admin/dtos/api.key.list.dto.d.ts.map +1 -0
  38. package/dist/admin/dtos/api.key.list.dto.js +8 -0
  39. package/dist/admin/dtos/api.key.list.dto.js.map +1 -0
  40. package/dist/admin/dtos/scope.list.dto.d.ts +4 -0
  41. package/dist/admin/dtos/scope.list.dto.d.ts.map +1 -0
  42. package/dist/admin/dtos/scope.list.dto.js +8 -0
  43. package/dist/admin/dtos/scope.list.dto.js.map +1 -0
  44. package/dist/admin/es6.classes.d.ts +12 -4
  45. package/dist/admin/es6.classes.d.ts.map +1 -1
  46. package/dist/admin/es6.classes.js +21 -1
  47. package/dist/admin/es6.classes.js.map +1 -1
  48. package/dist/admin/libraries/api.key.data.processor.d.ts +16 -0
  49. package/dist/admin/libraries/api.key.data.processor.d.ts.map +1 -0
  50. package/dist/admin/libraries/api.key.data.processor.js +59 -0
  51. package/dist/admin/libraries/api.key.data.processor.js.map +1 -0
  52. package/dist/admin/libraries/api.key.list.processor.d.ts +15 -0
  53. package/dist/admin/libraries/api.key.list.processor.d.ts.map +1 -0
  54. package/dist/admin/libraries/api.key.list.processor.js +48 -0
  55. package/dist/admin/libraries/api.key.list.processor.js.map +1 -0
  56. package/dist/admin/libraries/client.user.data.processor.d.ts +3 -6
  57. package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
  58. package/dist/admin/libraries/client.user.data.processor.js +14 -33
  59. package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
  60. package/dist/admin/libraries/scope.data.processor.d.ts +13 -0
  61. package/dist/admin/libraries/scope.data.processor.d.ts.map +1 -0
  62. package/dist/admin/libraries/scope.data.processor.js +43 -0
  63. package/dist/admin/libraries/scope.data.processor.js.map +1 -0
  64. package/dist/admin/libraries/scope.list.processor.d.ts +15 -0
  65. package/dist/admin/libraries/scope.list.processor.d.ts.map +1 -0
  66. package/dist/admin/libraries/scope.list.processor.js +29 -0
  67. package/dist/admin/libraries/scope.list.processor.js.map +1 -0
  68. package/dist/admin/libraries/tenant.data.processor.d.ts +5 -6
  69. package/dist/admin/libraries/tenant.data.processor.d.ts.map +1 -1
  70. package/dist/admin/libraries/tenant.data.processor.js +41 -28
  71. package/dist/admin/libraries/tenant.data.processor.js.map +1 -1
  72. package/dist/admin/libraries/tenant.delete.processor.d.ts.map +1 -1
  73. package/dist/admin/libraries/tenant.delete.processor.js +14 -0
  74. package/dist/admin/libraries/tenant.delete.processor.js.map +1 -1
  75. package/dist/admin/types/admin.types.d.ts +10 -4
  76. package/dist/admin/types/admin.types.d.ts.map +1 -1
  77. package/dist/auth/auth.module.d.ts.map +1 -1
  78. package/dist/auth/auth.module.js +9 -2
  79. package/dist/auth/auth.module.js.map +1 -1
  80. package/dist/auth/entities/api.key.entity.d.ts +3 -1
  81. package/dist/auth/entities/api.key.entity.d.ts.map +1 -1
  82. package/dist/auth/entities/api.key.entity.js +9 -3
  83. package/dist/auth/entities/api.key.entity.js.map +1 -1
  84. package/dist/auth/entities/tenant.scope.entity.d.ts +10 -0
  85. package/dist/auth/entities/tenant.scope.entity.d.ts.map +1 -0
  86. package/dist/auth/entities/tenant.scope.entity.js +41 -0
  87. package/dist/auth/entities/tenant.scope.entity.js.map +1 -0
  88. package/dist/auth/enums/api.key.default.enum.d.ts +2 -1
  89. package/dist/auth/enums/api.key.default.enum.d.ts.map +1 -1
  90. package/dist/auth/enums/api.key.default.enum.js +1 -0
  91. package/dist/auth/enums/api.key.default.enum.js.map +1 -1
  92. package/dist/auth/es6.classes.d.ts +2 -1
  93. package/dist/auth/es6.classes.d.ts.map +1 -1
  94. package/dist/auth/es6.classes.js +2 -0
  95. package/dist/auth/es6.classes.js.map +1 -1
  96. package/dist/auth/guards/api.key.guard.js +1 -1
  97. package/dist/auth/guards/api.key.guard.js.map +1 -1
  98. package/dist/auth/helpers/api.key.context.d.ts +6 -1
  99. package/dist/auth/helpers/api.key.context.d.ts.map +1 -1
  100. package/dist/auth/helpers/api.key.context.js +11 -2
  101. package/dist/auth/helpers/api.key.context.js.map +1 -1
  102. package/dist/auth/middlewares/api.key.middleware.d.ts +1 -0
  103. package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -1
  104. package/dist/auth/middlewares/api.key.middleware.js +17 -5
  105. package/dist/auth/middlewares/api.key.middleware.js.map +1 -1
  106. package/dist/auth/services/api.key.service.d.ts +13 -2
  107. package/dist/auth/services/api.key.service.d.ts.map +1 -1
  108. package/dist/auth/services/api.key.service.js +77 -5
  109. package/dist/auth/services/api.key.service.js.map +1 -1
  110. package/dist/auth/services/auth.service.d.ts +4 -1
  111. package/dist/auth/services/auth.service.d.ts.map +1 -1
  112. package/dist/auth/services/auth.service.js +19 -15
  113. package/dist/auth/services/auth.service.js.map +1 -1
  114. package/dist/auth/services/scope.service.d.ts +10 -0
  115. package/dist/auth/services/scope.service.d.ts.map +1 -0
  116. package/dist/auth/services/scope.service.js +50 -0
  117. package/dist/auth/services/scope.service.js.map +1 -0
  118. package/dist/auth/types/api.key.types.d.ts +15 -1
  119. package/dist/auth/types/api.key.types.d.ts.map +1 -1
  120. package/dist/common/types/common.response.types.d.ts +10 -0
  121. package/dist/common/types/common.response.types.d.ts.map +1 -1
  122. package/dist/constants/entity.constants.d.ts +1 -0
  123. package/dist/constants/entity.constants.d.ts.map +1 -1
  124. package/dist/constants/entity.constants.js +1 -0
  125. package/dist/constants/entity.constants.js.map +1 -1
  126. package/dist/constants/entity.maps.d.ts +2 -0
  127. package/dist/constants/entity.maps.d.ts.map +1 -1
  128. package/dist/constants/entity.maps.js +2 -0
  129. package/dist/constants/entity.maps.js.map +1 -1
  130. package/dist/constants/job.constants.d.ts +2 -0
  131. package/dist/constants/job.constants.d.ts.map +1 -1
  132. package/dist/constants/job.constants.js +2 -0
  133. package/dist/constants/job.constants.js.map +1 -1
  134. package/dist/constants/job.maps.d.ts.map +1 -1
  135. package/dist/constants/job.maps.js.map +1 -1
  136. package/dist/index.d.ts +4 -2
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -3
  139. package/dist/index.js.map +1 -1
  140. package/dist/migrations/1749600000017.CreateSysApiKeysTable.d.ts.map +1 -1
  141. package/dist/migrations/1749600000017.CreateSysApiKeysTable.js +7 -1
  142. package/dist/migrations/1749600000017.CreateSysApiKeysTable.js.map +1 -1
  143. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.d.ts +6 -0
  144. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.d.ts.map +1 -0
  145. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.js +36 -0
  146. package/dist/migrations/1749600000027.CreateSysTenantScopesTable.js.map +1 -0
  147. package/dist/notification/es6.classes.d.ts +3 -1
  148. package/dist/notification/es6.classes.d.ts.map +1 -1
  149. package/dist/notification/es6.classes.js +3 -1
  150. package/dist/notification/es6.classes.js.map +1 -1
  151. package/dist/notification/jobs/tenant.onboarded.mail.job.d.ts +15 -0
  152. package/dist/notification/jobs/tenant.onboarded.mail.job.d.ts.map +1 -0
  153. package/dist/notification/jobs/tenant.onboarded.mail.job.js +56 -0
  154. package/dist/notification/jobs/tenant.onboarded.mail.job.js.map +1 -0
  155. package/dist/notification/jobs/tenant.user.onboarded.mail.job.d.ts +15 -0
  156. package/dist/notification/jobs/tenant.user.onboarded.mail.job.d.ts.map +1 -0
  157. package/dist/notification/jobs/tenant.user.onboarded.mail.job.js +56 -0
  158. package/dist/notification/jobs/tenant.user.onboarded.mail.job.js.map +1 -0
  159. package/dist/notification/notification.module.d.ts.map +1 -1
  160. package/dist/notification/notification.module.js +7 -0
  161. package/dist/notification/notification.module.js.map +1 -1
  162. package/dist/notification/types/email.notification.types.d.ts +12 -0
  163. package/dist/notification/types/email.notification.types.d.ts.map +1 -1
  164. package/package.json +1 -1
  165. package/dist/admin/dtos/add.user.role.dto.d.ts +0 -4
  166. package/dist/admin/dtos/add.user.role.dto.d.ts.map +0 -1
  167. package/dist/admin/dtos/add.user.role.dto.js +0 -22
  168. package/dist/admin/dtos/add.user.role.dto.js.map +0 -1
@@ -23,7 +23,7 @@ const jwt_middleware_1 = require("./middlewares/jwt.middleware");
23
23
  const admin_jwt_middleware_1 = require("./middlewares/admin.jwt.middleware");
24
24
  const api_key_middleware_1 = require("./middlewares/api.key.middleware");
25
25
  const es6_classes_1 = require("./es6.classes");
26
- const [ApiKeyService, AuthService, AdminAuthService, GoogleAuthService] = es6_classes_1.es6Classes.services;
26
+ const [ApiKeyService, ScopeService, AuthService, AdminAuthService, GoogleAuthService,] = es6_classes_1.es6Classes.services;
27
27
  function createAuthImports() {
28
28
  return [
29
29
  common_module_1.CommonModule,
@@ -43,11 +43,12 @@ function createAuthProviders(options = {}) {
43
43
  return [
44
44
  {
45
45
  provide: AuthService,
46
- useFactory: (jwtService, cacheService, dataSource) => new AuthService(jwtService, cacheService, dataSource),
46
+ useFactory: (jwtService, cacheService, dataSource, scopeService) => new AuthService(jwtService, cacheService, dataSource, scopeService),
47
47
  inject: [
48
48
  jwt_1.JwtService,
49
49
  cache_service_1.CacheService,
50
50
  (0, typeorm_1.getDataSourceToken)(options.dataSourceName),
51
+ ScopeService,
51
52
  ],
52
53
  },
53
54
  {
@@ -60,6 +61,11 @@ function createAuthProviders(options = {}) {
60
61
  useFactory: (dataSource) => new ApiKeyService(dataSource),
61
62
  inject: [(0, typeorm_1.getDataSourceToken)(options.dataSourceName)],
62
63
  },
64
+ {
65
+ provide: ScopeService,
66
+ useFactory: (dataSource) => new ScopeService(dataSource),
67
+ inject: [(0, typeorm_1.getDataSourceToken)(options.dataSourceName)],
68
+ },
63
69
  GoogleAuthService,
64
70
  jwt_strategy_1.JwtStrategy,
65
71
  jwt_refresh_strategy_1.JwtRefreshStrategy,
@@ -75,6 +81,7 @@ const authExports = [
75
81
  AuthService,
76
82
  AdminAuthService,
77
83
  ApiKeyService,
84
+ ScopeService,
78
85
  GoogleAuthService,
79
86
  jwt_auth_guard_1.JwtAuthGuard,
80
87
  jwt_refresh_guard_1.JwtRefreshGuard,
@@ -1 +1 @@
1
- {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAKwB;AACxB,qCAAoE;AACpE,+CAAkD;AAClD,6CAAqD;AAErD,2DAAuD;AACvD,oEAAgE;AAChE,0DAAqD;AACrD,4DAAuD;AACvD,kEAA6D;AAC7D,0EAAqE;AACrE,0DAAsD;AACtD,iEAA6D;AAC7D,6EAAwE;AACxE,yEAAoE;AACpE,+CAA2C;AAI3C,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,GACrE,wBAAU,CAAC,QAAQ,CAAC;AAEtB,SAAS,iBAAiB;IACxB,OAAO;QACL,4BAAY;QACZ,yBAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QAEnD,eAAS,CAAC,aAAa,CAAC;YACtB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBACvC,WAAW,EAAE;oBACX,SAAS,EAAE,OAAO,CAAC,GAAG;yBACnB,mBAAkD;iBACtD;aACF,CAAC;SACH,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA6B,EAAE;IAC1D,OAAO;QACL;YACE,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,CACV,UAAsB,EACtB,YAA0B,EAC1B,UAAsB,EACtB,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC;YAC1D,MAAM,EAAE;gBACN,gBAAU;gBACV,4BAAY;gBACZ,IAAA,4BAAkB,EAAC,OAAO,CAAC,cAAc,CAAC;aAC3C;SACF;QACD;YACE,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,CAAC,UAAsB,EAAE,UAAsB,EAAE,EAAE,CAC7D,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;YAC9C,MAAM,EAAE,CAAC,gBAAU,EAAE,IAAA,4BAAkB,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SACjE;QACD;YACE,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;YACrE,MAAM,EAAE,CAAC,IAAA,4BAAkB,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SACrD;QACD,iBAAiB;QACjB,0BAAW;QACX,yCAAkB;QAClB,6BAAY;QACZ,mCAAe;QACf,2BAAW;QACX,8BAAa;QACb,yCAAkB;QAClB,qCAAgB;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,6BAAY;IACZ,mCAAe;IACf,2BAAW;IACX,8BAAa;IACb,yCAAkB;IAClB,qCAAgB;IAChB,eAAS;IACT,yBAAc;CACf,CAAC;AAYK,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,UAA6B,EAAE;QAC7C,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE,iBAAiB,EAAE;YAC5B,WAAW,EAAE,CAAC,GAAG,wBAAU,CAAC,WAAW,CAAC;YACxC,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACvC,OAAO,EAAE,WAAW;SACrB,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,gCAAU;qBAAV,UAAU;IANtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,iBAAiB,EAAE;QAC5B,WAAW,EAAE,CAAC,GAAG,wBAAU,CAAC,WAAW,CAAC;QACxC,SAAS,EAAE,mBAAmB,EAAE;QAChC,OAAO,EAAE,WAAW;KACrB,CAAC;GACW,UAAU,CAUtB"}
1
+ {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { CommonAdminEntity } from '../../common/entities/common.admin.entity';
2
+ import { TenantEntity } from '../../tenant/entities/tenant.entity';
2
3
  export declare class ApiKeyEntity extends CommonAdminEntity {
3
4
  is_active: boolean;
4
5
  name: string;
5
6
  key_prefix: string;
6
7
  key_hash: string;
7
- scopes: string[];
8
+ tenant_id: string;
8
9
  expires_at: Date;
9
10
  revoked_at: Date;
10
11
  last_used_at: Date;
12
+ tenant: TenantEntity;
11
13
  }
12
14
  //# sourceMappingURL=api.key.entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.entity.d.ts","sourceRoot":"","sources":["../../../src/auth/entities/api.key.entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,qBACa,YAAa,SAAQ,iBAAiB;IAEjD,SAAS,EAAE,OAAO,CAAC;IAGnB,IAAI,EAAE,MAAM,CAAC;IAIb,UAAU,EAAE,MAAM,CAAC;IAInB,QAAQ,EAAE,MAAM,CAAC;IAIjB,MAAM,EAAE,MAAM,EAAE,CAAC;IAGjB,UAAU,EAAE,IAAI,CAAC;IAGjB,UAAU,EAAE,IAAI,CAAC;IAGjB,YAAY,EAAE,IAAI,CAAC;CACpB"}
1
+ {"version":3,"file":"api.key.entity.d.ts","sourceRoot":"","sources":["../../../src/auth/entities/api.key.entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE,qBACa,YAAa,SAAQ,iBAAiB;IAEjD,SAAS,EAAE,OAAO,CAAC;IAGnB,IAAI,EAAE,MAAM,CAAC;IAIb,UAAU,EAAE,MAAM,CAAC;IAInB,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,IAAI,CAAC;IAGjB,UAAU,EAAE,IAAI,CAAC;IAGjB,YAAY,EAAE,IAAI,CAAC;IAInB,MAAM,EAAE,YAAY,CAAC;CACtB"}
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ApiKeyEntity = void 0;
13
13
  const typeorm_1 = require("typeorm");
14
14
  const common_admin_entity_1 = require("../../common/entities/common.admin.entity");
15
+ const tenant_entity_1 = require("../../tenant/entities/tenant.entity");
15
16
  let ApiKeyEntity = class ApiKeyEntity extends common_admin_entity_1.CommonAdminEntity {
16
17
  };
17
18
  exports.ApiKeyEntity = ApiKeyEntity;
@@ -32,9 +33,9 @@ __decorate([
32
33
  __metadata("design:type", String)
33
34
  ], ApiKeyEntity.prototype, "key_hash", void 0);
34
35
  __decorate([
35
- (0, typeorm_1.Column)({ type: 'jsonb' }),
36
- __metadata("design:type", Array)
37
- ], ApiKeyEntity.prototype, "scopes", void 0);
36
+ (0, typeorm_1.Column)({ type: 'uuid', nullable: true }),
37
+ __metadata("design:type", String)
38
+ ], ApiKeyEntity.prototype, "tenant_id", void 0);
38
39
  __decorate([
39
40
  (0, typeorm_1.Column)({ type: 'timestamptz' }),
40
41
  __metadata("design:type", Date)
@@ -47,6 +48,11 @@ __decorate([
47
48
  (0, typeorm_1.Column)({ type: 'timestamptz' }),
48
49
  __metadata("design:type", Date)
49
50
  ], ApiKeyEntity.prototype, "last_used_at", void 0);
51
+ __decorate([
52
+ (0, typeorm_1.ManyToOne)(() => tenant_entity_1.TenantEntity),
53
+ (0, typeorm_1.JoinColumn)({ name: 'tenant_id' }),
54
+ __metadata("design:type", tenant_entity_1.TenantEntity)
55
+ ], ApiKeyEntity.prototype, "tenant", void 0);
50
56
  exports.ApiKeyEntity = ApiKeyEntity = __decorate([
51
57
  (0, typeorm_1.Entity)({ name: 'sys_api_keys' })
52
58
  ], ApiKeyEntity);
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.entity.js","sourceRoot":"","sources":["../../../src/auth/entities/api.key.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAyC;AACzC,mFAA8E;AAGvE,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,uCAAiB;CA2BlD,CAAA;AA3BY,oCAAY;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;+CACxB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;0CACf;AAIb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;gDACT;AAInB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;8CACX;AAIjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;4CACT;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACpB,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACpB,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClB,IAAI;kDAAC;uBA1BR,YAAY;IADxB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;GACpB,YAAY,CA2BxB"}
1
+ {"version":3,"file":"api.key.entity.js","sourceRoot":"","sources":["../../../src/auth/entities/api.key.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgE;AAChE,mFAA8E;AAC9E,uEAAmE;AAI5D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,uCAAiB;CA8BlD,CAAA;AA9BY,oCAAY;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;+CACxB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;0CACf;AAIb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;gDACT;AAInB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;8CACX;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACvB;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACpB,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACpB,IAAI;gDAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClB,IAAI;kDAAC;AAInB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC;IAC7B,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC1B,4BAAY;4CAAC;uBA7BV,YAAY;IADxB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;GACpB,YAAY,CA8BxB"}
@@ -0,0 +1,10 @@
1
+ import { CommonAdminEntity } from '../../common/entities/common.admin.entity';
2
+ import { TenantEntity } from '../../tenant/entities/tenant.entity';
3
+ import { ScopeEntity } from './scope.entity';
4
+ export declare class TenantScopeEntity extends CommonAdminEntity {
5
+ tenant_id: string;
6
+ scope_id: string;
7
+ tenant: TenantEntity;
8
+ scope: ScopeEntity;
9
+ }
10
+ //# sourceMappingURL=tenant.scope.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.scope.entity.d.ts","sourceRoot":"","sources":["../../../src/auth/entities/tenant.scope.entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,qBACa,iBAAkB,SAAQ,iBAAiB;IAEtD,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IAIjB,MAAM,EAAE,YAAY,CAAC;IAIrB,KAAK,EAAE,WAAW,CAAC;CACpB"}
@@ -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.TenantScopeEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const common_admin_entity_1 = require("../../common/entities/common.admin.entity");
15
+ const tenant_entity_1 = require("../../tenant/entities/tenant.entity");
16
+ const scope_entity_1 = require("./scope.entity");
17
+ let TenantScopeEntity = class TenantScopeEntity extends common_admin_entity_1.CommonAdminEntity {
18
+ };
19
+ exports.TenantScopeEntity = TenantScopeEntity;
20
+ __decorate([
21
+ (0, typeorm_1.Column)({ type: 'uuid' }),
22
+ __metadata("design:type", String)
23
+ ], TenantScopeEntity.prototype, "tenant_id", void 0);
24
+ __decorate([
25
+ (0, typeorm_1.Column)({ type: 'uuid' }),
26
+ __metadata("design:type", String)
27
+ ], TenantScopeEntity.prototype, "scope_id", void 0);
28
+ __decorate([
29
+ (0, typeorm_1.ManyToOne)(() => tenant_entity_1.TenantEntity),
30
+ (0, typeorm_1.JoinColumn)({ name: 'tenant_id' }),
31
+ __metadata("design:type", tenant_entity_1.TenantEntity)
32
+ ], TenantScopeEntity.prototype, "tenant", void 0);
33
+ __decorate([
34
+ (0, typeorm_1.ManyToOne)(() => scope_entity_1.ScopeEntity),
35
+ (0, typeorm_1.JoinColumn)({ name: 'scope_id' }),
36
+ __metadata("design:type", scope_entity_1.ScopeEntity)
37
+ ], TenantScopeEntity.prototype, "scope", void 0);
38
+ exports.TenantScopeEntity = TenantScopeEntity = __decorate([
39
+ (0, typeorm_1.Entity)({ name: 'sys_tenant_scopes' })
40
+ ], TenantScopeEntity);
41
+ //# sourceMappingURL=tenant.scope.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.scope.entity.js","sourceRoot":"","sources":["../../../src/auth/entities/tenant.scope.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgE;AAChE,mFAA8E;AAC9E,uEAAmE;AACnE,iDAA6C;AAItC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,uCAAiB;CAcvD,CAAA;AAdY,8CAAiB;AAE5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACP;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACR;AAIjB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC;IAC7B,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC1B,4BAAY;iDAAC;AAIrB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC;IAC5B,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;8BAC1B,0BAAW;gDAAC;4BAbR,iBAAiB;IAD7B,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;GACzB,iBAAiB,CAc7B"}
@@ -2,6 +2,7 @@ export declare enum ApiKeyDefault {
2
2
  PREFIX = "ak",
3
3
  HEADER_NAME = "x-api-key",
4
4
  RANDOM_BYTES = 24,
5
- PREFIX_VISIBLE_LENGTH = 11
5
+ PREFIX_VISIBLE_LENGTH = 11,
6
+ WILDCARD_SCOPE = "*"
6
7
  }
7
8
  //# sourceMappingURL=api.key.default.enum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.default.enum.d.ts","sourceRoot":"","sources":["../../../src/auth/enums/api.key.default.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,MAAM,OAAO;IACb,WAAW,cAAc;IACzB,YAAY,KAAK;IAEjB,qBAAqB,KAAK;CAC3B"}
1
+ {"version":3,"file":"api.key.default.enum.d.ts","sourceRoot":"","sources":["../../../src/auth/enums/api.key.default.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,MAAM,OAAO;IACb,WAAW,cAAc;IACzB,YAAY,KAAK;IAEjB,qBAAqB,KAAK;IAE1B,cAAc,MAAM;CACrB"}
@@ -7,5 +7,6 @@ var ApiKeyDefault;
7
7
  ApiKeyDefault["HEADER_NAME"] = "x-api-key";
8
8
  ApiKeyDefault[ApiKeyDefault["RANDOM_BYTES"] = 24] = "RANDOM_BYTES";
9
9
  ApiKeyDefault[ApiKeyDefault["PREFIX_VISIBLE_LENGTH"] = 11] = "PREFIX_VISIBLE_LENGTH";
10
+ ApiKeyDefault["WILDCARD_SCOPE"] = "*";
10
11
  })(ApiKeyDefault || (exports.ApiKeyDefault = ApiKeyDefault = {}));
11
12
  //# sourceMappingURL=api.key.default.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.default.enum.js","sourceRoot":"","sources":["../../../src/auth/enums/api.key.default.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,0CAAyB,CAAA;IACzB,kEAAiB,CAAA;IAEjB,oFAA0B,CAAA;AAC5B,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB"}
1
+ {"version":3,"file":"api.key.default.enum.js","sourceRoot":"","sources":["../../../src/auth/enums/api.key.default.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAQX;AARD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,0CAAyB,CAAA;IACzB,kEAAiB,CAAA;IAEjB,oFAA0B,CAAA;IAE1B,qCAAoB,CAAA;AACtB,CAAC,EARW,aAAa,6BAAb,aAAa,QAQxB"}
@@ -1,6 +1,7 @@
1
1
  import { AuthController } from './controllers/auth.controller';
2
2
  import { AdminAuthController } from './controllers/admin.auth.controller';
3
3
  import { ApiKeyService } from './services/api.key.service';
4
+ import { ScopeService } from './services/scope.service';
4
5
  import { AuthService } from './services/auth.service';
5
6
  import { AdminAuthService } from './services/admin.auth.service';
6
7
  import { GoogleAuthService } from './services/google.auth.service';
@@ -11,7 +12,7 @@ import { LoginDto } from './dtos/login.dto';
11
12
  import { RefreshTokenDto } from './dtos/refresh.token.dto';
12
13
  export declare const es6Classes: {
13
14
  controllers: (typeof AuthController | typeof AdminAuthController)[];
14
- services: readonly [typeof ApiKeyService, typeof AuthService, typeof AdminAuthService, typeof GoogleAuthService];
15
+ services: readonly [typeof ApiKeyService, typeof ScopeService, typeof AuthService, typeof AdminAuthService, typeof GoogleAuthService];
15
16
  libraries: any[];
16
17
  dtos: (typeof LoginDto | typeof GoogleLoginDto | typeof RefreshTokenDto | typeof ChangePasswordDto | typeof AdminLoginDto)[];
17
18
  jobs: any[];
@@ -1 +1 @@
1
- {"version":3,"file":"es6.classes.d.ts","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,eAAO,MAAM,UAAU;;;;;;;CAmBtB,CAAC"}
1
+ {"version":3,"file":"es6.classes.d.ts","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,eAAO,MAAM,UAAU;;;;;;;CAoBtB,CAAC"}
@@ -4,6 +4,7 @@ exports.es6Classes = void 0;
4
4
  const auth_controller_1 = require("./controllers/auth.controller");
5
5
  const admin_auth_controller_1 = require("./controllers/admin.auth.controller");
6
6
  const api_key_service_1 = require("./services/api.key.service");
7
+ const scope_service_1 = require("./services/scope.service");
7
8
  const auth_service_1 = require("./services/auth.service");
8
9
  const admin_auth_service_1 = require("./services/admin.auth.service");
9
10
  const google_auth_service_1 = require("./services/google.auth.service");
@@ -17,6 +18,7 @@ exports.es6Classes = {
17
18
  controllers: [auth_controller_1.AuthController, admin_auth_controller_1.AdminAuthController],
18
19
  services: [
19
20
  api_key_service_1.ApiKeyService,
21
+ scope_service_1.ScopeService,
20
22
  auth_service_1.AuthService,
21
23
  admin_auth_service_1.AdminAuthService,
22
24
  google_auth_service_1.GoogleAuthService,
@@ -1 +1 @@
1
- {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,+EAA0E;AAC1E,gEAA2D;AAC3D,0DAAsD;AACtD,sEAAiE;AACjE,wEAAmE;AACnE,4DAAuD;AACvD,oEAA+D;AAC/D,8DAAyD;AACzD,gDAA4C;AAC5C,gEAA2D;AAC3D,sDAAkD;AAErC,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE,CAAC,gCAAc,EAAE,2CAAmB,CAAC;IAClD,QAAQ,EAAE;QACR,+BAAa;QACb,0BAAW;QACX,qCAAgB;QAChB,uCAAiB;KACT;IACV,SAAS,EAAE,EAAE;IACb,IAAI,EAAE;QACJ,+BAAa;QACb,uCAAiB;QACjB,iCAAc;QACd,oBAAQ;QACR,mCAAe;QACf,0BAAW;KACZ;IACD,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAChB,CAAC"}
1
+ {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,+EAA0E;AAC1E,gEAA2D;AAC3D,4DAAwD;AACxD,0DAAsD;AACtD,sEAAiE;AACjE,wEAAmE;AACnE,4DAAuD;AACvD,oEAA+D;AAC/D,8DAAyD;AACzD,gDAA4C;AAC5C,gEAA2D;AAC3D,sDAAkD;AAErC,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE,CAAC,gCAAc,EAAE,2CAAmB,CAAC;IAClD,QAAQ,EAAE;QACR,+BAAa;QACb,4BAAY;QACZ,0BAAW;QACX,qCAAgB;QAChB,uCAAiB;KACT;IACV,SAAS,EAAE,EAAE;IACb,IAAI,EAAE;QACJ,+BAAa;QACb,uCAAiB;QACjB,iCAAc;QACd,oBAAQ;QACR,mCAAe;QACf,0BAAW;KACZ;IACD,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAChB,CAAC"}
@@ -41,7 +41,7 @@ let ApiKeyGuard = class ApiKeyGuard {
41
41
  context.getClass(),
42
42
  ]) ?? [];
43
43
  for (const scope of requiredScopes) {
44
- if (!this.apiKeyService.hasScope(apiKey, scope)) {
44
+ if (!(await this.apiKeyService.hasScope(apiKey, scope))) {
45
45
  throw new access_exception_1.AccessException(`API key is missing the "${scope}" scope.`);
46
46
  }
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/api.key.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AAEzC,+EAA2E;AAC3E,qFAA4E;AAC5E,wEAA8D;AAC9D,qEAA+D;AAC/D,iEAA4D;AAUrD,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,YACmB,aAA4B,EAC5B,SAAoB;QADpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,8BAAqB,CAC7B,yCAAyC,CAC1C,CAAC;QAEJ,MAAM,cAAc,GAClB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,6CAAkB,EAAE;YAC7D,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,IAAI,EAAE,CAAC;QACX,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,kCAAe,CAAC,2BAA2B,KAAK,UAAU,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAEA,OAAgC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAlDY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGuB,+BAAa;QACjB,gBAAS;GAH5B,WAAW,CAkDvB"}
1
+ {"version":3,"file":"api.key.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/api.key.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AAEzC,+EAA2E;AAC3E,qFAA4E;AAC5E,wEAA8D;AAC9D,qEAA+D;AAC/D,iEAA4D;AAUrD,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,YACmB,aAA4B,EAC5B,SAAoB;QADpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,8BAAqB,CAC7B,yCAAyC,CAC1C,CAAC;QAEJ,MAAM,cAAc,GAClB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,6CAAkB,EAAE;YAC7D,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,IAAI,EAAE,CAAC;QACX,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,kCAAe,CAAC,2BAA2B,KAAK,UAAU,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAEA,OAAgC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAlDY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGuB,+BAAa;QACjB,gBAAS;GAH5B,WAAW,CAkDvB"}
@@ -1,6 +1,11 @@
1
1
  import { ApiKeyEntity } from '../entities/api.key.entity';
2
+ import { TenantEntity } from '../../tenant/entities/tenant.entity';
3
+ import type { ApiKeyContextValue } from '../types/api.key.types';
2
4
  export declare class ApiKeyContext {
3
- static set(apiKey: ApiKeyEntity): void;
5
+ static runWithContext<T>(context: ApiKeyContextValue, callback: () => T): T;
6
+ static set(context: ApiKeyContextValue): void;
4
7
  static apiKey(): ApiKeyEntity | undefined;
8
+ static tenant(): TenantEntity | undefined;
9
+ static scopes(): ApiKeyContextValue | undefined;
5
10
  }
6
11
  //# sourceMappingURL=api.key.context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.context.d.ts","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAU1D,qBAAa,aAAa;IACxB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAItC,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,SAAS;CAG1C"}
1
+ {"version":3,"file":"api.key.context.d.ts","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAYjE,qBAAa,aAAa;IAMxB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAS3E,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAI7C,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,SAAS;IAIzC,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,SAAS;IAUzC,MAAM,CAAC,MAAM,IAAI,kBAAkB,GAAG,SAAS;CAGhD"}
@@ -4,10 +4,19 @@ exports.ApiKeyContext = void 0;
4
4
  const async_hooks_1 = require("async_hooks");
5
5
  const storage = new async_hooks_1.AsyncLocalStorage();
6
6
  class ApiKeyContext {
7
- static set(apiKey) {
8
- storage.enterWith(apiKey);
7
+ static runWithContext(context, callback) {
8
+ return storage.run(context, callback);
9
+ }
10
+ static set(context) {
11
+ storage.enterWith(context);
9
12
  }
10
13
  static apiKey() {
14
+ return storage.getStore()?.apiKey;
15
+ }
16
+ static tenant() {
17
+ return storage.getStore()?.tenant;
18
+ }
19
+ static scopes() {
11
20
  return storage.getStore();
12
21
  }
13
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.context.js","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAGhD,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAgB,CAAC;AAQtD,MAAa,aAAa;IACxB,MAAM,CAAC,GAAG,CAAC,MAAoB;QAC7B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AARD,sCAQC"}
1
+ {"version":3,"file":"api.key.context.js","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAKhD,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAsB,CAAC;AAU5D,MAAa,aAAa;IAMxB,MAAM,CAAC,cAAc,CAAI,OAA2B,EAAE,QAAiB;QACrE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAOD,MAAM,CAAC,GAAG,CAAC,OAA2B;QACpC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;IACpC,CAAC;IAQD,MAAM,CAAC,MAAM;QACX,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AApCD,sCAoCC"}
@@ -5,6 +5,7 @@ export declare class ApiKeyMiddleware implements NestMiddleware {
5
5
  private readonly apiKeyService;
6
6
  constructor(apiKeyService: ApiKeyService);
7
7
  use(request: Request, _response: Response, next: NextFunction): Promise<void>;
8
+ private resolveContext;
8
9
  private extractKey;
9
10
  }
10
11
  //# sourceMappingURL=api.key.middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAe5D,qBACa,gBAAiB,YAAW,cAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IAShB,OAAO,CAAC,UAAU;CAYnB"}
1
+ {"version":3,"file":"api.key.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAiB5D,qBACa,gBAAiB,YAAW,cAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;YAcF,cAAc;IAgB5B,OAAO,CAAC,UAAU;CAYnB"}
@@ -19,14 +19,26 @@ let ApiKeyMiddleware = class ApiKeyMiddleware {
19
19
  this.apiKeyService = apiKeyService;
20
20
  }
21
21
  async use(request, _response, next) {
22
- const rawKey = this.extractKey(request);
23
- if (rawKey) {
24
- const apiKey = await this.apiKeyService.validateApiKey(rawKey);
25
- if (apiKey)
26
- api_key_context_1.ApiKeyContext.set(apiKey);
22
+ const context = await this.resolveContext(request);
23
+ if (context) {
24
+ api_key_context_1.ApiKeyContext.runWithContext(context, next);
25
+ return;
27
26
  }
28
27
  next();
29
28
  }
29
+ async resolveContext(request) {
30
+ const rawKey = this.extractKey(request);
31
+ if (!rawKey)
32
+ return null;
33
+ const apiKey = await this.apiKeyService.validateApiKey(rawKey);
34
+ if (!apiKey)
35
+ return null;
36
+ return {
37
+ apiKey,
38
+ tenant: apiKey.tenant ?? undefined,
39
+ scopes: await this.apiKeyService.grantedScopes(apiKey.id),
40
+ };
41
+ }
30
42
  extractKey(request) {
31
43
  const headerName = process.env.API_KEY_HEADER_NAME || api_key_default_enum_1.ApiKeyDefault.HEADER_NAME;
32
44
  const headerKey = request.headers[headerName];
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.middleware.js","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,wEAA8D;AAC9D,iEAA4D;AAC5D,gEAA2D;AAepD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,GAAG,CACP,OAAgB,EAChB,SAAmB,EACnB,IAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,MAAM;gBAAE,+BAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA5BY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAEiC,+BAAa;GAD9C,gBAAgB,CA4B5B"}
1
+ {"version":3,"file":"api.key.middleware.js","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,wEAA8D;AAC9D,iEAA4D;AAC5D,gEAA2D;AAiBpD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,GAAG,CACP,OAAgB,EAChB,SAAmB,EACnB,IAAkB;QAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAKnD,IAAI,OAAO,EAAE,CAAC;YACZ,+BAAa,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAGO,KAAK,CAAC,cAAc,CAC1B,OAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACL,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;YAClC,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjDY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAEiC,+BAAa;GAD9C,gBAAgB,CAiD5B"}
@@ -1,17 +1,28 @@
1
1
  import { Logger } from '@nestjs/common';
2
2
  import { DataSource } from 'typeorm';
3
+ import { DeleteResult, DisableResult } from '../../common/types/common.response.types';
3
4
  import { ApiKeyEntity } from '../entities/api.key.entity';
4
- import { GenerateApiKeyOptions, GeneratedApiKey } from '../types/api.key.types';
5
+ import { ApiScopeEntity } from '../entities/api.scope.entity';
6
+ import { ApiKeyAccess, ApiKeyDetail, GenerateApiKeyOptions, GeneratedApiKey } from '../types/api.key.types';
5
7
  export declare class ApiKeyService {
6
8
  private readonly dataSource;
7
9
  protected readonly logger: Logger;
8
10
  constructor(dataSource: DataSource);
9
11
  generateApiKey(name: string, options?: GenerateApiKeyOptions): Promise<GeneratedApiKey>;
12
+ grantScopes(apiKeyUuid: string, scopeIds?: string[], grantedBy?: string): Promise<ApiScopeEntity[]>;
10
13
  validateApiKey(rawKey: string): Promise<ApiKeyEntity | null>;
11
- hasScope(apiKey: ApiKeyEntity, scope: string): boolean;
14
+ grantedScopes(apiKeyUuid: string): Promise<string[]>;
15
+ apiKeyDetail(apiKeyUuid: string): Promise<ApiKeyDetail>;
16
+ hasScope(apiKey: ApiKeyEntity, scope: string): Promise<boolean>;
17
+ validateAccess(scopeIdentifier: string): ApiKeyAccess;
12
18
  revokeApiKey(apiKeyUuid: string): Promise<void>;
19
+ disableApiKey(apiKeyUuid: string, actorUuid: string): Promise<DisableResult>;
20
+ deleteApiKey(apiKeyUuid: string, actorUuid: string): Promise<DeleteResult>;
13
21
  listApiKeys(): Promise<ApiKeyEntity[]>;
22
+ private grantedScopeRecords;
23
+ private grants;
14
24
  private touchLastUsed;
15
25
  private get apiKeyRepository();
26
+ private get apiScopeRepository();
16
27
  }
17
28
  //# sourceMappingURL=api.key.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.service.d.ts","sourceRoot":"","sources":["../../../src/auth/services/api.key.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOhF,qBACa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAkC;gBAE9B,UAAU,EAAE,UAAU;IAE7C,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC;IAiBrB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAgBlE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAKhD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAI9B,aAAa;IAO3B,OAAO,KAAK,gBAAgB,GAE3B;CACF"}
1
+ {"version":3,"file":"api.key.service.d.ts","sourceRoot":"","sources":["../../../src/auth/services/api.key.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAGjD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAWhC,qBACa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAkC;gBAE9B,UAAU,EAAE,UAAU;IAE7C,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC;IAoBrB,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,EAAE,CAAC;IAetB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAiB5D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASpD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAavD,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrE,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY;IAkB/C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAkBnB,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IAiBlB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAK9B,mBAAmB;IAajC,OAAO,CAAC,MAAM;YAMA,aAAa;IAO3B,OAAO,KAAK,gBAAgB,GAE3B;IAED,OAAO,KAAK,kBAAkB,GAE7B;CACF"}
@@ -14,10 +14,13 @@ exports.ApiKeyService = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const crypto_1 = require("crypto");
16
16
  const typeorm_1 = require("typeorm");
17
+ const access_exception_1 = require("../../global/exceptions/access.exception");
17
18
  const not_found_exception_1 = require("../../global/exceptions/not.found.exception");
18
19
  const hash_util_1 = require("../../global/utilities/hash.util");
19
20
  const api_key_entity_1 = require("../entities/api.key.entity");
21
+ const api_scope_entity_1 = require("../entities/api.scope.entity");
20
22
  const api_key_default_enum_1 = require("../enums/api.key.default.enum");
23
+ const api_key_context_1 = require("../helpers/api.key.context");
21
24
  let ApiKeyService = ApiKeyService_1 = class ApiKeyService {
22
25
  constructor(dataSource) {
23
26
  this.dataSource = dataSource;
@@ -30,17 +33,28 @@ let ApiKeyService = ApiKeyService_1 = class ApiKeyService {
30
33
  key_prefix: rawKey.slice(0, api_key_default_enum_1.ApiKeyDefault.PREFIX_VISIBLE_LENGTH),
31
34
  key_hash: hash_util_1.Hash.sha256(rawKey),
32
35
  is_active: true,
33
- ...(options?.scopes ? { scopes: options.scopes } : {}),
36
+ ...(options?.tenantId ? { tenant_id: options.tenantId } : {}),
34
37
  ...(options?.expiresAt ? { expires_at: options.expiresAt } : {}),
35
38
  ...(options?.createdBy ? { created_by: options.createdBy } : {}),
36
39
  }));
40
+ await this.grantScopes(apiKey.id, options?.scopeIds, options?.createdBy);
37
41
  return { rawKey, apiKey };
38
42
  }
43
+ async grantScopes(apiKeyUuid, scopeIds, grantedBy) {
44
+ if (!scopeIds?.length)
45
+ return [];
46
+ return this.apiScopeRepository.save([...new Set(scopeIds)].map((scope_id) => this.apiScopeRepository.create({
47
+ api_key_id: apiKeyUuid,
48
+ scope_id,
49
+ ...(grantedBy ? { created_by: grantedBy } : {}),
50
+ })));
51
+ }
39
52
  async validateApiKey(rawKey) {
40
53
  if (!rawKey)
41
54
  return null;
42
55
  const apiKey = await this.apiKeyRepository.findOne({
43
56
  where: { key_hash: hash_util_1.Hash.sha256(rawKey) },
57
+ relations: { tenant: true },
44
58
  });
45
59
  if (!apiKey || !apiKey.is_active || apiKey.revoked_at)
46
60
  return null;
@@ -49,10 +63,33 @@ let ApiKeyService = ApiKeyService_1 = class ApiKeyService {
49
63
  this.touchLastUsed(apiKey).catch((error) => this.logger.warn(`Failed to update last_used_at: ${error.message}`));
50
64
  return apiKey;
51
65
  }
52
- hasScope(apiKey, scope) {
53
- if (!apiKey.scopes || apiKey.scopes.length === 0)
54
- return true;
55
- return apiKey.scopes.includes('*') || apiKey.scopes.includes(scope);
66
+ async grantedScopes(apiKeyUuid) {
67
+ const scopes = await this.grantedScopeRecords(apiKeyUuid);
68
+ return scopes.map((scope) => scope.identifier);
69
+ }
70
+ async apiKeyDetail(apiKeyUuid) {
71
+ const apiKey = await this.apiKeyRepository.findOne({
72
+ where: { id: apiKeyUuid },
73
+ relations: { tenant: true },
74
+ });
75
+ if (!apiKey)
76
+ throw new not_found_exception_1.NotFoundException('No API key exists for this id');
77
+ return Object.assign(apiKey, {
78
+ scopes: await this.grantedScopeRecords(apiKeyUuid),
79
+ });
80
+ }
81
+ async hasScope(apiKey, scope) {
82
+ return this.grants(await this.grantedScopes(apiKey.id), scope);
83
+ }
84
+ validateAccess(scopeIdentifier) {
85
+ const granted = api_key_context_1.ApiKeyContext.scopes();
86
+ if (!granted)
87
+ throw new access_exception_1.AccessException('Authentication required: no valid API key on this request.');
88
+ if (!this.grants(granted.scopes, scopeIdentifier))
89
+ throw new access_exception_1.AccessException('This feature is not enabled for this Api key');
90
+ if (!granted.tenant)
91
+ throw new access_exception_1.AccessException('This Api key is not bound to an organization.');
92
+ return { tenant: granted.tenant };
56
93
  }
57
94
  async revokeApiKey(apiKeyUuid) {
58
95
  const apiKey = await this.apiKeyRepository.findOne({
@@ -64,15 +101,50 @@ let ApiKeyService = ApiKeyService_1 = class ApiKeyService {
64
101
  apiKey.is_active = false;
65
102
  await this.apiKeyRepository.save(apiKey);
66
103
  }
104
+ async disableApiKey(apiKeyUuid, actorUuid) {
105
+ const apiKey = await this.apiKeyRepository.findOne({
106
+ where: { id: apiKeyUuid },
107
+ });
108
+ if (!apiKey)
109
+ throw new not_found_exception_1.NotFoundException('No API key exists for this id');
110
+ apiKey.is_active = false;
111
+ await this.apiKeyRepository.save(apiKey);
112
+ return { id: apiKeyUuid, disabled: true, disabled_by: actorUuid };
113
+ }
114
+ async deleteApiKey(apiKeyUuid, actorUuid) {
115
+ if (!(await this.apiKeyRepository.existsBy({ id: apiKeyUuid })))
116
+ throw new not_found_exception_1.NotFoundException('No API key exists for this id');
117
+ await this.dataSource.transaction(async (trx) => {
118
+ await trx.update(api_key_entity_1.ApiKeyEntity, { id: apiKeyUuid }, { is_active: false, revoked_at: new Date() });
119
+ await trx.softDelete(api_scope_entity_1.ApiScopeEntity, { api_key_id: apiKeyUuid });
120
+ await trx.softDelete(api_key_entity_1.ApiKeyEntity, { id: apiKeyUuid });
121
+ });
122
+ return { id: apiKeyUuid, deleted: true, deleted_by: actorUuid };
123
+ }
67
124
  async listApiKeys() {
68
125
  return this.apiKeyRepository.find({ order: { created_at: 'DESC' } });
69
126
  }
127
+ async grantedScopeRecords(apiKeyUuid) {
128
+ const apiScopes = await this.apiScopeRepository.find({
129
+ where: { api_key_id: apiKeyUuid },
130
+ relations: { scope: true },
131
+ });
132
+ return apiScopes
133
+ .map((apiScope) => apiScope.scope)
134
+ .filter((scope) => !!scope);
135
+ }
136
+ grants(granted, scope) {
137
+ return (granted.includes(api_key_default_enum_1.ApiKeyDefault.WILDCARD_SCOPE) || granted.includes(scope));
138
+ }
70
139
  async touchLastUsed(apiKey) {
71
140
  await this.apiKeyRepository.update({ id: apiKey.id }, { last_used_at: new Date() });
72
141
  }
73
142
  get apiKeyRepository() {
74
143
  return this.dataSource.getRepository(api_key_entity_1.ApiKeyEntity);
75
144
  }
145
+ get apiScopeRepository() {
146
+ return this.dataSource.getRepository(api_scope_entity_1.ApiScopeEntity);
147
+ }
76
148
  };
77
149
  exports.ApiKeyService = ApiKeyService;
78
150
  exports.ApiKeyService = ApiKeyService = ApiKeyService_1 = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"api.key.service.js","sourceRoot":"","sources":["../../../src/auth/services/api.key.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.key.service.js","sourceRoot":"","sources":["../../../src/auth/services/api.key.service.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,16 @@ import { JwtService } from '@nestjs/jwt';
2
2
  import { DataSource } from 'typeorm';
3
3
  import { UserEntity } from '../entities/user.entity';
4
4
  import { CacheService } from '../../common/services/cache.service';
5
+ import { ScopeService } from './scope.service';
5
6
  import { AuthenticatedAccess, AuthTokenPair, IssueTokensUser, TokenIssueContext } from '../types/auth.types';
6
7
  export declare class AuthService {
7
8
  private readonly jwtService;
8
9
  private readonly cacheService;
9
10
  private readonly dataSource;
10
- constructor(jwtService: JwtService, cacheService: CacheService, dataSource: DataSource);
11
+ private readonly scopeService;
12
+ constructor(jwtService: JwtService, cacheService: CacheService, dataSource: DataSource, scopeService: ScopeService);
11
13
  validateRole(roleIdentifier?: string): Promise<AuthenticatedAccess>;
14
+ validateAccess(scopeIdentifier: string, roleIdentifier?: string): Promise<AuthenticatedAccess>;
12
15
  validateCredentials(email: string, password: string): Promise<UserEntity>;
13
16
  issueTokens(user: IssueTokensUser, context?: TokenIssueContext): Promise<AuthTokenPair>;
14
17
  refresh(rawRefreshToken: string, context?: TokenIssueContext): Promise<AuthTokenPair>;