@loopstack/auth 0.19.0 → 0.21.0-rc.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 (42) hide show
  1. package/dist/auth.module.js +5 -5
  2. package/dist/auth.module.js.map +1 -1
  3. package/dist/commands/assign-role.command.d.ts +16 -0
  4. package/dist/commands/assign-role.command.d.ts.map +1 -0
  5. package/dist/commands/assign-role.command.js +106 -0
  6. package/dist/commands/assign-role.command.js.map +1 -0
  7. package/dist/dtos/hub-login-request.dto.d.ts +1 -2
  8. package/dist/dtos/hub-login-request.dto.d.ts.map +1 -1
  9. package/dist/dtos/hub-login-request.dto.js +3 -9
  10. package/dist/dtos/hub-login-request.dto.js.map +1 -1
  11. package/dist/guards/roles.guard.js.map +1 -1
  12. package/dist/interfaces/auth-config.interface.d.ts +4 -2
  13. package/dist/interfaces/auth-config.interface.d.ts.map +1 -1
  14. package/dist/repositories/user.repository.js +2 -2
  15. package/dist/repositories/user.repository.js.map +1 -1
  16. package/dist/services/auth.service.js +1 -1
  17. package/dist/services/auth.service.js.map +1 -1
  18. package/dist/services/index.d.ts +0 -1
  19. package/dist/services/index.d.ts.map +1 -1
  20. package/dist/services/index.js +0 -1
  21. package/dist/services/index.js.map +1 -1
  22. package/dist/strategies/hub.strategy.d.ts +3 -3
  23. package/dist/strategies/hub.strategy.d.ts.map +1 -1
  24. package/dist/strategies/hub.strategy.js +34 -17
  25. package/dist/strategies/hub.strategy.js.map +1 -1
  26. package/package.json +16 -11
  27. package/dist/exceptions/hub.exceptions.d.ts +0 -17
  28. package/dist/exceptions/hub.exceptions.d.ts.map +0 -1
  29. package/dist/exceptions/hub.exceptions.js +0 -35
  30. package/dist/exceptions/hub.exceptions.js.map +0 -1
  31. package/dist/interfaces/hub-service.interfaces.d.ts +0 -17
  32. package/dist/interfaces/hub-service.interfaces.d.ts.map +0 -1
  33. package/dist/interfaces/hub-service.interfaces.js +0 -3
  34. package/dist/interfaces/hub-service.interfaces.js.map +0 -1
  35. package/dist/services/hub-audit.service.d.ts +0 -15
  36. package/dist/services/hub-audit.service.d.ts.map +0 -1
  37. package/dist/services/hub-audit.service.js +0 -47
  38. package/dist/services/hub-audit.service.js.map +0 -1
  39. package/dist/services/hub.service.d.ts +0 -21
  40. package/dist/services/hub.service.d.ts.map +0 -1
  41. package/dist/services/hub.service.js +0 -225
  42. package/dist/services/hub.service.js.map +0 -1
@@ -14,12 +14,12 @@ const jwt_1 = require("@nestjs/jwt");
14
14
  const passport_1 = require("@nestjs/passport");
15
15
  const typeorm_1 = require("@nestjs/typeorm");
16
16
  const common_2 = require("@loopstack/common");
17
+ const assign_role_command_1 = require("./commands/assign-role.command");
17
18
  const controllers_1 = require("./controllers");
18
19
  const guards_1 = require("./guards");
19
20
  const repositories_1 = require("./repositories");
20
21
  const services_1 = require("./services");
21
22
  const config_validation_service_1 = require("./services/config-validation.service");
22
- const hub_audit_service_1 = require("./services/hub-audit.service");
23
23
  const strategies_1 = require("./strategies");
24
24
  let AuthModule = AuthModule_1 = class AuthModule {
25
25
  static forRoot() {
@@ -39,7 +39,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
39
39
  }),
40
40
  inject: [config_1.ConfigService],
41
41
  }),
42
- typeorm_1.TypeOrmModule.forFeature([common_2.User, common_2.Permission, common_2.Role]),
42
+ typeorm_1.TypeOrmModule.forFeature([common_2.User, common_2.Role]),
43
43
  ],
44
44
  controllers: [controllers_1.AuthController],
45
45
  providers: [
@@ -48,12 +48,12 @@ let AuthModule = AuthModule_1 = class AuthModule {
48
48
  repositories_1.UserRepository,
49
49
  services_1.TokenService,
50
50
  strategies_1.JwtStrategy,
51
- services_1.HubService,
52
51
  strategies_1.HubStrategy,
53
- hub_audit_service_1.HubAuditService,
54
52
  guards_1.JwtAuthGuard,
53
+ guards_1.RolesGuard,
54
+ assign_role_command_1.AssignRoleCommand,
55
55
  ],
56
- exports: [services_1.AuthService, repositories_1.UserRepository, guards_1.JwtAuthGuard],
56
+ exports: [services_1.AuthService, repositories_1.UserRepository, guards_1.JwtAuthGuard, guards_1.RolesGuard],
57
57
  };
58
58
  }
59
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2CAA+C;AAC/C,qCAAwC;AACxC,+CAAkD;AAClD,6CAAgD;AAEhD,8CAA2D;AAC3D,+CAA+C;AAC/C,qCAAwC;AACxC,iDAAgD;AAChD,yCAAmE;AACnE,oFAA+E;AAC/E,oEAA+D;AAC/D,6CAAwD;AAGjD,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,MAAM,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE;gBACP,yBAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBACnD,eAAS,CAAC,aAAa,CAAC;oBACtB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC;wBAC7C,MAAM,EAAE,aAAa,CAAC,GAAG,CAAS,iBAAiB,CAAC;wBACpD,WAAW,EAAE;4BACX,SAAS,EAAE,aAAa,CAAC,GAAG,CAAmC,oBAAoB,CAAC,IAAI,IAAI;yBAC7F;qBACF,CAAC;oBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;iBACxB,CAAC;gBACF,uBAAa,CAAC,UAAU,CAAC,CAAC,aAAI,EAAE,mBAAU,EAAE,aAAI,CAAC,CAAC;aACnD;YACD,WAAW,EAAE,CAAC,4BAAc,CAAC;YAC7B,SAAS,EAAE;gBACT,mDAAuB;gBACvB,sBAAW;gBACX,6BAAc;gBACd,uBAAY;gBACZ,wBAAW;gBACX,qBAAU;gBACV,wBAAW;gBACX,mCAAe;gBACf,qBAAY;aACb;YACD,OAAO,EAAE,CAAC,sBAAW,EAAE,6BAAc,EAAE,qBAAY,CAAC;SACrD,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,gCAAU;qBAAV,UAAU;IADtB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,UAAU,CAoCtB"}
1
+ {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2CAA+C;AAC/C,qCAAwC;AACxC,+CAAkD;AAClD,6CAAgD;AAEhD,8CAA+C;AAC/C,wEAAmE;AACnE,+CAA+C;AAC/C,qCAAoD;AACpD,iDAAgD;AAChD,yCAAuD;AACvD,oFAA+E;AAC/E,6CAAwD;AAGjD,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,MAAM,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE;gBACP,yBAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBACnD,eAAS,CAAC,aAAa,CAAC;oBACtB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC;wBAC7C,MAAM,EAAE,aAAa,CAAC,GAAG,CAAS,iBAAiB,CAAC;wBACpD,WAAW,EAAE;4BACX,SAAS,EAAE,aAAa,CAAC,GAAG,CAAmC,oBAAoB,CAAC,IAAI,IAAI;yBAC7F;qBACF,CAAC;oBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;iBACxB,CAAC;gBACF,uBAAa,CAAC,UAAU,CAAC,CAAC,aAAI,EAAE,aAAI,CAAC,CAAC;aACvC;YACD,WAAW,EAAE,CAAC,4BAAc,CAAC;YAC7B,SAAS,EAAE;gBACT,mDAAuB;gBACvB,sBAAW;gBACX,6BAAc;gBACd,uBAAY;gBACZ,wBAAW;gBACX,wBAAW;gBACX,qBAAY;gBACZ,mBAAU;gBACV,uCAAiB;aAClB;YACD,OAAO,EAAE,CAAC,sBAAW,EAAE,6BAAc,EAAE,qBAAY,EAAE,mBAAU,CAAC;SACjE,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,gCAAU;qBAAV,UAAU;IADtB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,UAAU,CAoCtB"}
@@ -0,0 +1,16 @@
1
+ import { CommandRunner } from 'nest-commander';
2
+ import { Repository } from 'typeorm';
3
+ import { Role, RoleName, User } from '@loopstack/common';
4
+ interface AssignRoleCommandOptions {
5
+ role: RoleName;
6
+ }
7
+ export declare class AssignRoleCommand extends CommandRunner {
8
+ private readonly userRepository;
9
+ private readonly roleRepository;
10
+ private readonly logger;
11
+ constructor(userRepository: Repository<User>, roleRepository: Repository<Role>);
12
+ run(inputs: string[], options: AssignRoleCommandOptions): Promise<void>;
13
+ parseRole(val: string): RoleName;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=assign-role.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-role.command.d.ts","sourceRoot":"","sources":["../../src/commands/assign-role.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzD,UAAU,wBAAwB;IAChC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,qBAKa,iBAAkB,SAAQ,aAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,cAAc;IANjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAI1C,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,EAEhC,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC;IAK7C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgE7E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;CAGjC"}
@@ -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
+ var AssignRoleCommand_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AssignRoleCommand = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_1 = require("@nestjs/typeorm");
19
+ const nest_commander_1 = require("nest-commander");
20
+ const typeorm_2 = require("typeorm");
21
+ const common_2 = require("@loopstack/common");
22
+ let AssignRoleCommand = AssignRoleCommand_1 = class AssignRoleCommand extends nest_commander_1.CommandRunner {
23
+ userRepository;
24
+ roleRepository;
25
+ logger = new common_1.Logger(AssignRoleCommand_1.name);
26
+ constructor(userRepository, roleRepository) {
27
+ super();
28
+ this.userRepository = userRepository;
29
+ this.roleRepository = roleRepository;
30
+ }
31
+ async run(inputs, options) {
32
+ const [userId] = inputs;
33
+ if (!userId) {
34
+ console.error('Please specify a user ID');
35
+ console.log('Usage: loopstack assign-role <userId> --role ADMIN');
36
+ process.exit(1);
37
+ }
38
+ const roleName = options.role;
39
+ if (!roleName) {
40
+ console.error('Please specify a role with --role');
41
+ console.log(`Available roles: ${Object.values(common_2.RoleName).join(', ')}`);
42
+ process.exit(1);
43
+ }
44
+ if (!Object.values(common_2.RoleName).includes(roleName)) {
45
+ console.error(`Invalid role: ${roleName}`);
46
+ console.log(`Available roles: ${Object.values(common_2.RoleName).join(', ')}`);
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ const user = await this.userRepository.findOne({
51
+ where: { id: userId },
52
+ relations: ['roles'],
53
+ });
54
+ if (!user) {
55
+ console.error(`User with ID '${userId}' not found`);
56
+ process.exit(1);
57
+ }
58
+ if (user.roles.some((r) => r.name === roleName)) {
59
+ console.log(`User '${userId}' already has role '${roleName}'`);
60
+ return;
61
+ }
62
+ let role = await this.roleRepository.findOne({ where: { name: roleName } });
63
+ if (!role) {
64
+ role = this.roleRepository.create({
65
+ name: roleName,
66
+ description: `${roleName} role`,
67
+ });
68
+ role = await this.roleRepository.save(role);
69
+ this.logger.log(`Created role '${roleName}'`);
70
+ }
71
+ user.roles.push(role);
72
+ await this.userRepository.save(user);
73
+ console.log(`Role '${roleName}' assigned to user '${userId}'`);
74
+ }
75
+ catch (error) {
76
+ console.error('Failed to assign role:', error instanceof Error ? error.message : error);
77
+ process.exit(1);
78
+ }
79
+ }
80
+ parseRole(val) {
81
+ return val;
82
+ }
83
+ };
84
+ exports.AssignRoleCommand = AssignRoleCommand;
85
+ __decorate([
86
+ (0, nest_commander_1.Option)({
87
+ flags: '-r, --role <role>',
88
+ description: `Role to assign (${Object.values(common_2.RoleName).join(', ')})`,
89
+ required: true,
90
+ }),
91
+ __metadata("design:type", Function),
92
+ __metadata("design:paramtypes", [String]),
93
+ __metadata("design:returntype", String)
94
+ ], AssignRoleCommand.prototype, "parseRole", null);
95
+ exports.AssignRoleCommand = AssignRoleCommand = AssignRoleCommand_1 = __decorate([
96
+ (0, nest_commander_1.Command)({
97
+ name: 'assign-role',
98
+ description: 'Assign a role to an existing user',
99
+ arguments: '<userId>',
100
+ }),
101
+ __param(0, (0, typeorm_1.InjectRepository)(common_2.User)),
102
+ __param(1, (0, typeorm_1.InjectRepository)(common_2.Role)),
103
+ __metadata("design:paramtypes", [typeorm_2.Repository,
104
+ typeorm_2.Repository])
105
+ ], AssignRoleCommand);
106
+ //# sourceMappingURL=assign-role.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-role.command.js","sourceRoot":"","sources":["../../src/commands/assign-role.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,6CAAmD;AACnD,mDAAgE;AAChE,qCAAqC;AACrC,8CAAyD;AAWlD,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,8BAAa;IAK/B;IAEA;IANF,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAE7D,YAEmB,cAAgC,EAEhC,cAAgC;QAEjD,KAAK,EAAE,CAAC;QAJS,mBAAc,GAAd,cAAc,CAAkB;QAEhC,mBAAc,GAAd,cAAc,CAAkB;IAGnD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAgB,EAAE,OAAiC;QAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QAExB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;gBACrB,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,aAAa,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAM,QAAmB,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,uBAAuB,QAAQ,GAAG,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAE5E,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;oBAChC,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,GAAG,QAAQ,OAAO;iBAChC,CAAC,CAAC;gBACH,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,QAAQ,GAAG,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErC,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,uBAAuB,MAAM,GAAG,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAOD,SAAS,CAAC,GAAW;QACnB,OAAO,GAAe,CAAC;IACzB,CAAC;CACF,CAAA;AA/EY,8CAAiB;AA4E5B;IALC,IAAA,uBAAM,EAAC;QACN,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mBAAmB,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrE,QAAQ,EAAE,IAAI;KACf,CAAC;;;;kDAGD;4BA9EU,iBAAiB;IAL7B,IAAA,wBAAO,EAAC;QACP,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mCAAmC;QAChD,SAAS,EAAE,UAAU;KACtB,CAAC;IAKG,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;IAEtB,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;qCADU,oBAAU;QAEV,oBAAU;GAPlC,iBAAiB,CA+E7B"}
@@ -1,5 +1,4 @@
1
1
  export declare class HubLoginRequestDto {
2
- code: string;
3
- grantType: string;
2
+ idToken: string;
4
3
  }
5
4
  //# sourceMappingURL=hub-login-request.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub-login-request.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAG7B,IAAI,EAAE,MAAM,CAAC;IAIb,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"hub-login-request.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAG7B,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -13,18 +13,12 @@ exports.HubLoginRequestDto = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
14
  const class_transformer_1 = require("class-transformer");
15
15
  class HubLoginRequestDto {
16
- code;
17
- grantType;
16
+ idToken;
18
17
  }
19
18
  exports.HubLoginRequestDto = HubLoginRequestDto;
20
19
  __decorate([
21
20
  (0, class_transformer_1.Expose)(),
22
- (0, swagger_1.ApiProperty)({ description: 'The authorization code' }),
21
+ (0, swagger_1.ApiProperty)({ description: 'Hub-signed ID token' }),
23
22
  __metadata("design:type", String)
24
- ], HubLoginRequestDto.prototype, "code", void 0);
25
- __decorate([
26
- (0, class_transformer_1.Expose)(),
27
- (0, swagger_1.ApiProperty)({ description: 'The grant type', example: 'authorization_code' }),
28
- __metadata("design:type", String)
29
- ], HubLoginRequestDto.prototype, "grantType", void 0);
23
+ ], HubLoginRequestDto.prototype, "idToken", void 0);
30
24
  //# sourceMappingURL=hub-login-request.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub-login-request.dto.js","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,yDAA2C;AAE3C,MAAa,kBAAkB;IAG7B,IAAI,CAAS;IAIb,SAAS,CAAS;CACnB;AARD,gDAQC;AALC;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;;gDAC1C;AAIb;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;;qDAC5D"}
1
+ {"version":3,"file":"hub-login-request.dto.js","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,yDAA2C;AAE3C,MAAa,kBAAkB;IAG7B,OAAO,CAAS;CACjB;AAJD,gDAIC;AADC;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;;mDACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../src/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAyC;AAEzC,8CAAoE;AAG7D,IAAM,UAAU,GAAhB,MAAM,UAAU;IACD;IAApB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,WAAW,CAAC,OAAyB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,kBAAS,EAAE;YAC1E,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAA4C,CAAC;QAC/F,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;CACF,CAAA;AAdY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,UAAU,CActB"}
1
+ {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../src/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAyC;AAEzC,8CAA8E;AAGvE,IAAM,UAAU,GAAhB,MAAM,UAAU;IACD;IAApB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,WAAW,CAAC,OAAyB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAa,kBAAS,EAAE;YAC5E,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAA4C,CAAC;QAC/F,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;CACF,CAAA;AAdY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,UAAU,CActB"}
@@ -7,7 +7,9 @@ export interface AuthConfig {
7
7
  cookieDomain?: string;
8
8
  };
9
9
  clientId?: string;
10
- clientSecret?: string;
11
- authCallback?: string;
10
+ hub?: {
11
+ issuer: string;
12
+ jwksUri: string;
13
+ };
12
14
  }
13
15
  //# sourceMappingURL=auth-config.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/auth-config.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"auth-config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/auth-config.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH"}
@@ -26,7 +26,7 @@ let UserRepository = class UserRepository {
26
26
  async findById(id) {
27
27
  return this.repository.findOne({
28
28
  where: { id },
29
- relations: ['roles', 'roles.permissions'],
29
+ relations: ['roles'],
30
30
  });
31
31
  }
32
32
  async findLocalUser() {
@@ -34,7 +34,7 @@ let UserRepository = class UserRepository {
34
34
  where: {
35
35
  type: common_3.UserTypeEnum.Local,
36
36
  },
37
- relations: ['roles', 'roles.permissions'],
37
+ relations: ['roles'],
38
38
  });
39
39
  }
40
40
  async create(userData) {
@@ -1 +1 @@
1
- {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,8CAAyC;AACzC,8CAAiD;AAG1C,IAAM,cAAc,GAApB,MAAM,cAAc;IAGf;IAFV,YAEU,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;IACnC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,SAAS,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE;gBACL,IAAI,EAAE,qBAAY,CAAC,KAAK;aACzB;YACD,SAAS,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,QAAuB;QAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF,CAAA;AAnCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;qCACH,oBAAU;GAHrB,cAAc,CAmC1B"}
1
+ {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,8CAAyC;AACzC,8CAAiD;AAG1C,IAAM,cAAc,GAApB,MAAM,cAAc;IAGf;IAFV,YAEU,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;IACnC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,SAAS,EAAE,CAAC,OAAO,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE;gBACL,IAAI,EAAE,qBAAY,CAAC,KAAK;aACzB;YACD,SAAS,EAAE,CAAC,OAAO,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,QAAuB;QAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF,CAAA;AAnCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;qCACH,oBAAU;GAHrB,cAAc,CAmC1B"}
@@ -82,7 +82,7 @@ let AuthService = class AuthService {
82
82
  const isLocalMode = this.configService.get('app.isLocalMode');
83
83
  return (0, class_transformer_1.plainToInstance)(worker_info_dto_1.WorkerInfoDto, {
84
84
  clientId: isLocalMode ? 'local' : this.configService.get('auth.clientId'),
85
- isConfigured: isLocalMode || !!this.configService.get('auth.clientSecret'),
85
+ isConfigured: isLocalMode || !!this.configService.get('auth.hub.jwksUri'),
86
86
  timestamp: new Date(),
87
87
  }, {
88
88
  excludeExtraneousValues: true,
@@ -1 +1 @@
1
- {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
1
  export * from './auth.service';
2
2
  export * from './token.service';
3
- export * from './hub.service';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
@@ -16,5 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./auth.service"), exports);
18
18
  __exportStar(require("./token.service"), exports);
19
- __exportStar(require("./hub.service"), exports);
20
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC"}
@@ -3,16 +3,16 @@ import { Request } from 'express';
3
3
  import { Strategy } from 'passport-custom';
4
4
  import { User } from '@loopstack/common';
5
5
  import { UserRepository } from '../repositories';
6
- import { HubService } from '../services';
7
6
  declare const HubStrategy_base: new () => Strategy & {
8
7
  validate(...args: any[]): unknown;
9
8
  };
10
9
  export declare class HubStrategy extends HubStrategy_base {
11
10
  private readonly configService;
12
- private readonly hubService;
13
11
  private readonly userRepository;
14
12
  private readonly logger;
15
- constructor(configService: ConfigService, hubService: HubService, userRepository: UserRepository);
13
+ private jwks;
14
+ constructor(configService: ConfigService, userRepository: UserRepository);
15
+ private getJwks;
16
16
  private validateLocalUser;
17
17
  private validateCloudUser;
18
18
  validate(req: Request): Promise<User>;
@@ -1 +1 @@
1
- {"version":3,"file":"hub.strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/hub.strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;;;;AAEzC,qBACa,WAAY,SAAQ,gBAAiC;IAI9D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAGpC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc;YAKnC,iBAAiB;YAkBjB,iBAAiB;IA8BzB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAY5C"}
1
+ {"version":3,"file":"hub.strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/hub.strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;;;AAEjD,qBACa,WAAY,SAAQ,gBAAiC;IAK9D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,IAAI,CAAgC;gBAGzB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAKjD,OAAO,CAAC,OAAO;YAWD,iBAAiB;YAkBjB,iBAAiB;IAoCzB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB5C"}
@@ -14,21 +14,30 @@ exports.HubStrategy = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const config_1 = require("@nestjs/config");
16
16
  const passport_1 = require("@nestjs/passport");
17
+ const jose_1 = require("jose");
17
18
  const passport_custom_1 = require("passport-custom");
18
19
  const common_2 = require("@loopstack/common");
19
20
  const repositories_1 = require("../repositories");
20
- const services_1 = require("../services");
21
21
  let HubStrategy = HubStrategy_1 = class HubStrategy extends (0, passport_1.PassportStrategy)(passport_custom_1.Strategy, 'hub') {
22
22
  configService;
23
- hubService;
24
23
  userRepository;
25
24
  logger = new common_1.Logger(HubStrategy_1.name);
26
- constructor(configService, hubService, userRepository) {
25
+ jwks = null;
26
+ constructor(configService, userRepository) {
27
27
  super();
28
28
  this.configService = configService;
29
- this.hubService = hubService;
30
29
  this.userRepository = userRepository;
31
30
  }
31
+ getJwks() {
32
+ if (!this.jwks) {
33
+ const jwksUri = this.configService.get('auth.hub.jwksUri');
34
+ if (!jwksUri) {
35
+ throw new common_1.UnauthorizedException('Hub JWKS URI not configured');
36
+ }
37
+ this.jwks = (0, jose_1.createRemoteJWKSet)(new URL(jwksUri));
38
+ }
39
+ return this.jwks;
40
+ }
32
41
  async validateLocalUser() {
33
42
  const existingUser = await this.userRepository.findLocalUser();
34
43
  if (existingUser) {
@@ -44,25 +53,30 @@ let HubStrategy = HubStrategy_1 = class HubStrategy extends (0, passport_1.Passp
44
53
  return user;
45
54
  }
46
55
  async validateCloudUser(req) {
47
- const { code, grantType } = req.body;
48
- this.logger.log('Validating SSO token exchange request');
49
- if (!code || grantType !== 'authorization_code') {
50
- throw new common_1.UnauthorizedException('Invalid grant type or missing code');
56
+ const { idToken } = req.body;
57
+ if (!idToken) {
58
+ throw new common_1.UnauthorizedException('Missing ID token');
51
59
  }
52
- const validateCodeResponse = await this.hubService.exchangeCodeForUserInfo(code);
53
- if (!validateCodeResponse.data?.id) {
54
- throw new common_1.UnauthorizedException('Code exchange failed');
60
+ const issuer = this.configService.get('auth.hub.issuer');
61
+ const clientId = this.configService.get('auth.clientId');
62
+ const { payload } = await (0, jose_1.jwtVerify)(idToken, this.getJwks(), {
63
+ issuer,
64
+ audience: clientId,
65
+ });
66
+ if (!payload.sub) {
67
+ throw new common_1.UnauthorizedException('ID token missing sub claim');
55
68
  }
56
- const existingUser = await this.userRepository.findById(validateCodeResponse.data?.id);
69
+ const existingUser = await this.userRepository.findById(payload.sub);
57
70
  if (existingUser) {
58
71
  return existingUser;
59
72
  }
60
73
  const user = await this.userRepository.create({
61
- id: validateCodeResponse.data?.id,
74
+ id: payload.sub,
75
+ type: common_2.UserTypeEnum.Cloud,
62
76
  isActive: true,
63
77
  roles: [],
64
78
  });
65
- this.logger.log(`SSO authentication successful for user ${user.id}`);
79
+ this.logger.log(`Hub ID token authentication successful for user ${user.id}`);
66
80
  return user;
67
81
  }
68
82
  async validate(req) {
@@ -71,9 +85,13 @@ let HubStrategy = HubStrategy_1 = class HubStrategy extends (0, passport_1.Passp
71
85
  if (isLocalDevMode) {
72
86
  return this.validateLocalUser();
73
87
  }
74
- return this.validateCloudUser(req);
88
+ return await this.validateCloudUser(req);
75
89
  }
76
- catch {
90
+ catch (error) {
91
+ if (error instanceof common_1.UnauthorizedException) {
92
+ throw error;
93
+ }
94
+ this.logger.error(`Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
77
95
  throw new common_1.UnauthorizedException('Authentication failed.');
78
96
  }
79
97
  }
@@ -82,7 +100,6 @@ exports.HubStrategy = HubStrategy;
82
100
  exports.HubStrategy = HubStrategy = HubStrategy_1 = __decorate([
83
101
  (0, common_1.Injectable)(),
84
102
  __metadata("design:paramtypes", [config_1.ConfigService,
85
- services_1.HubService,
86
103
  repositories_1.UserRepository])
87
104
  ], HubStrategy);
88
105
  //# sourceMappingURL=hub.strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub.strategy.js","sourceRoot":"","sources":["../../src/strategies/hub.strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub.strategy.js","sourceRoot":"","sources":["../../src/strategies/hub.strategy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@loopstack/auth",
3
3
  "displayName": "Loopstack Auth Module",
4
4
  "description": "The auth module of the loopstack automation framework",
5
- "version": "0.19.0",
5
+ "version": "0.21.0-rc.0",
6
6
  "license": "BSL",
7
7
  "author": {
8
8
  "name": "Jakob Klippel",
@@ -23,23 +23,25 @@
23
23
  "watch": "nest build --watch"
24
24
  },
25
25
  "dependencies": {
26
- "@loopstack/common": "^0.19.0",
27
- "@loopstack/contracts": "^0.19.0",
28
- "@loopstack/core": "^0.19.0",
29
- "@nestjs/common": "^11.1.12",
30
- "@nestjs/config": "^4.0.2",
31
- "@nestjs/core": "^11.1.12",
26
+ "@loopstack/common": "^0.21.0-rc.0",
27
+ "@loopstack/contracts": "^0.21.0-rc.0",
28
+ "@loopstack/core": "^0.21.0-rc.0",
29
+ "@nestjs/common": "^11.1.14",
30
+ "@nestjs/config": "^4.0.3",
31
+ "@nestjs/core": "^11.1.14",
32
32
  "@nestjs/event-emitter": "^3.0.1",
33
33
  "@nestjs/jwt": "^11.0.2",
34
- "@nestjs/microservices": "^11.1.12",
34
+ "@nestjs/microservices": "^11.1.14",
35
35
  "@nestjs/passport": "^11.0.5",
36
- "@nestjs/platform-express": "^11.1.12",
37
- "@nestjs/swagger": "^11.2.5",
38
- "axios": "^1.13.2",
36
+ "@nestjs/platform-express": "^11.1.14",
37
+ "@nestjs/swagger": "^11.2.6",
38
+ "axios": "^1.13.5",
39
39
  "class-transformer": "^0.5.1",
40
40
  "class-validator": "^0.14.3",
41
41
  "cookie-parser": "^1.4.7",
42
+ "nest-commander": "^3.20.1",
42
43
  "lodash": "^4.17.23",
44
+ "jose": "^6.1.3",
43
45
  "passport-custom": "^1.1.1",
44
46
  "passport-jwt": "^4.0.1",
45
47
  "reflect-metadata": "^0.2.2",
@@ -62,6 +64,9 @@
62
64
  "transform": {
63
65
  "^.+\\.(t|j)s$": "ts-jest"
64
66
  },
67
+ "transformIgnorePatterns": [
68
+ "node_modules/(?!jose/)"
69
+ ],
65
70
  "collectCoverageFrom": [
66
71
  "**/*.(t|j)s"
67
72
  ],
@@ -1,17 +0,0 @@
1
- import { HttpException } from '@nestjs/common';
2
- export declare class HubConfigurationException extends HttpException {
3
- constructor(message: string);
4
- }
5
- export declare class HubServiceUnavailableException extends HttpException {
6
- constructor();
7
- }
8
- export declare class InvalidAuthCodeException extends HttpException {
9
- constructor();
10
- }
11
- export declare class HubAuthenticationException extends HttpException {
12
- constructor();
13
- }
14
- export declare class HubTimeoutException extends HttpException {
15
- constructor();
16
- }
17
- //# sourceMappingURL=hub.exceptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/hub.exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAE3D,qBAAa,yBAA0B,SAAQ,aAAa;gBAC9C,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,8BAA+B,SAAQ,aAAa;;CAIhE;AAED,qBAAa,wBAAyB,SAAQ,aAAa;;CAI1D;AAED,qBAAa,0BAA2B,SAAQ,aAAa;;CAI5D;AAED,qBAAa,mBAAoB,SAAQ,aAAa;;CAIrD"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HubTimeoutException = exports.HubAuthenticationException = exports.InvalidAuthCodeException = exports.HubServiceUnavailableException = exports.HubConfigurationException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- class HubConfigurationException extends common_1.HttpException {
6
- constructor(message) {
7
- super(`Hub service configuration error: ${message}`, common_1.HttpStatus.INTERNAL_SERVER_ERROR);
8
- }
9
- }
10
- exports.HubConfigurationException = HubConfigurationException;
11
- class HubServiceUnavailableException extends common_1.HttpException {
12
- constructor() {
13
- super('Hub service is temporarily unavailable', common_1.HttpStatus.SERVICE_UNAVAILABLE);
14
- }
15
- }
16
- exports.HubServiceUnavailableException = HubServiceUnavailableException;
17
- class InvalidAuthCodeException extends common_1.HttpException {
18
- constructor() {
19
- super('Invalid or expired authorization code', common_1.HttpStatus.UNAUTHORIZED);
20
- }
21
- }
22
- exports.InvalidAuthCodeException = InvalidAuthCodeException;
23
- class HubAuthenticationException extends common_1.HttpException {
24
- constructor() {
25
- super('Failed to authenticate with hub service', common_1.HttpStatus.UNAUTHORIZED);
26
- }
27
- }
28
- exports.HubAuthenticationException = HubAuthenticationException;
29
- class HubTimeoutException extends common_1.HttpException {
30
- constructor() {
31
- super('Hub service request timeout', common_1.HttpStatus.REQUEST_TIMEOUT);
32
- }
33
- }
34
- exports.HubTimeoutException = HubTimeoutException;
35
- //# sourceMappingURL=hub.exceptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/hub.exceptions.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAE3D,MAAa,yBAA0B,SAAQ,sBAAa;IAC1D,YAAY,OAAe;QACzB,KAAK,CAAC,oCAAoC,OAAO,EAAE,EAAE,mBAAU,CAAC,qBAAqB,CAAC,CAAC;IACzF,CAAC;CACF;AAJD,8DAIC;AAED,MAAa,8BAA+B,SAAQ,sBAAa;IAC/D;QACE,KAAK,CAAC,wCAAwC,EAAE,mBAAU,CAAC,mBAAmB,CAAC,CAAC;IAClF,CAAC;CACF;AAJD,wEAIC;AAED,MAAa,wBAAyB,SAAQ,sBAAa;IACzD;QACE,KAAK,CAAC,uCAAuC,EAAE,mBAAU,CAAC,YAAY,CAAC,CAAC;IAC1E,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,0BAA2B,SAAQ,sBAAa;IAC3D;QACE,KAAK,CAAC,yCAAyC,EAAE,mBAAU,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;CACF;AAJD,gEAIC;AAED,MAAa,mBAAoB,SAAQ,sBAAa;IACpD;QACE,KAAK,CAAC,6BAA6B,EAAE,mBAAU,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;CACF;AAJD,kDAIC"}
@@ -1,17 +0,0 @@
1
- export interface HubConfig {
2
- authCallback: string;
3
- clientId: string;
4
- clientSecret: string;
5
- timeout?: number;
6
- retries?: number;
7
- cacheEnabled?: boolean;
8
- cacheTtlSeconds?: number;
9
- }
10
- export interface RequestContext {
11
- correlationId: string;
12
- requestId?: string;
13
- userId?: string;
14
- clientIp?: string;
15
- userAgent?: string;
16
- }
17
- //# sourceMappingURL=hub-service.interfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-service.interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces/hub-service.interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=hub-service.interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-service.interfaces.js","sourceRoot":"","sources":["../../src/interfaces/hub-service.interfaces.ts"],"names":[],"mappings":""}
@@ -1,15 +0,0 @@
1
- import { RequestContext } from '../interfaces/hub-service.interfaces';
2
- export interface HubAuditEvent {
3
- action: string;
4
- context: RequestContext;
5
- success: boolean;
6
- responseTime?: number;
7
- error?: string;
8
- metadata?: Record<string, any>;
9
- }
10
- export declare class HubAuditService {
11
- private readonly logger;
12
- logCodeExchange(context: RequestContext, success: boolean, responseTime: number, error?: string, metadata?: Record<string, any>): void;
13
- private sanitizeEvent;
14
- }
15
- //# sourceMappingURL=hub-audit.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-audit.service.d.ts","sourceRoot":"","sources":["../../src/services/hub-audit.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D,eAAe,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqBhC,OAAO,CAAC,aAAa;CAStB"}
@@ -1,47 +0,0 @@
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 HubAuditService_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.HubAuditService = void 0;
11
- const common_1 = require("@nestjs/common");
12
- let HubAuditService = HubAuditService_1 = class HubAuditService {
13
- logger = new common_1.Logger(HubAuditService_1.name);
14
- logCodeExchange(context, success, responseTime, error, metadata) {
15
- const event = {
16
- action: 'HUB_CODE_EXCHANGE',
17
- context,
18
- success,
19
- responseTime,
20
- error,
21
- metadata: {
22
- ...metadata,
23
- timestamp: new Date().toISOString(),
24
- },
25
- };
26
- if (success) {
27
- this.logger.log(`HUB_AUDIT: ${JSON.stringify(this.sanitizeEvent(event))}`);
28
- }
29
- else {
30
- this.logger.error(`HUB_AUDIT_FAILURE: ${JSON.stringify(this.sanitizeEvent(event))}`);
31
- }
32
- }
33
- sanitizeEvent(event) {
34
- return {
35
- ...event,
36
- context: {
37
- ...event.context,
38
- userId: event.context.userId ? `${event.context.userId.substring(0, 8)}...` : undefined,
39
- },
40
- };
41
- }
42
- };
43
- exports.HubAuditService = HubAuditService;
44
- exports.HubAuditService = HubAuditService = HubAuditService_1 = __decorate([
45
- (0, common_1.Injectable)()
46
- ], HubAuditService);
47
- //# sourceMappingURL=hub-audit.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-audit.service.js","sourceRoot":"","sources":["../../src/services/hub-audit.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AAa7C,IAAM,eAAe,uBAArB,MAAM,eAAe;IACT,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAE3D,eAAe,CACb,OAAuB,EACvB,OAAgB,EAChB,YAAoB,EACpB,KAAc,EACd,QAA8B;QAE9B,MAAM,KAAK,GAAkB;YAC3B,MAAM,EAAE,mBAAmB;YAC3B,OAAO;YACP,OAAO;YACP,YAAY;YACZ,KAAK;YACL,QAAQ,EAAE;gBACR,GAAG,QAAQ;gBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC;SACF,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAoB;QACxC,OAAO;YACL,GAAG,KAAK;YACR,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,OAAO;gBAChB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAtCY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;GACA,eAAe,CAsC3B"}
@@ -1,21 +0,0 @@
1
- import { OnModuleInit } from '@nestjs/common';
2
- import { ConfigService } from '@nestjs/config';
3
- import { IValidateCodeResponse } from '@loopstack/common';
4
- import { RequestContext } from '../interfaces/hub-service.interfaces';
5
- import { HubAuditService } from './hub-audit.service';
6
- export declare class HubService implements OnModuleInit {
7
- private readonly configService;
8
- private readonly auditService;
9
- private readonly logger;
10
- private axiosInstance;
11
- private config;
12
- constructor(configService: ConfigService, auditService: HubAuditService);
13
- onModuleInit(): void;
14
- private initialize;
15
- private getConfig;
16
- private validateConfiguration;
17
- private setupAxiosInterceptors;
18
- private retryOperation;
19
- exchangeCodeForUserInfo(code: string, context?: RequestContext): Promise<IValidateCodeResponse>;
20
- }
21
- //# sourceMappingURL=hub.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub.service.d.ts","sourceRoot":"","sources":["../../src/services/hub.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAS1D,OAAO,EAAa,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBACa,UAAW,YAAW,YAAY;IAM3C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAN/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAY;gBAGP,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe;IAGhD,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,sBAAsB;YA4BhB,cAAc;IAiCtB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAqFtG"}
@@ -1,225 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- 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;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var __metadata = (this && this.__metadata) || function (k, v) {
42
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
- };
44
- var HubService_1;
45
- Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.HubService = void 0;
47
- const common_1 = require("@nestjs/common");
48
- const config_1 = require("@nestjs/config");
49
- const axios_1 = __importStar(require("axios"));
50
- const hub_exceptions_1 = require("../exceptions/hub.exceptions");
51
- const hub_audit_service_1 = require("./hub-audit.service");
52
- let HubService = HubService_1 = class HubService {
53
- configService;
54
- auditService;
55
- logger = new common_1.Logger(HubService_1.name);
56
- axiosInstance;
57
- config;
58
- constructor(configService, auditService) {
59
- this.configService = configService;
60
- this.auditService = auditService;
61
- }
62
- onModuleInit() {
63
- this.initialize();
64
- }
65
- initialize() {
66
- try {
67
- this.config = this.getConfig();
68
- if (!this.configService.get('app.isLocalMode')) {
69
- this.validateConfiguration();
70
- }
71
- this.axiosInstance = axios_1.default.create({
72
- timeout: this.config.timeout || 10000,
73
- headers: {
74
- 'Content-Type': 'application/json',
75
- 'User-Agent': 'HubService/1.0',
76
- },
77
- });
78
- this.setupAxiosInterceptors();
79
- this.logger.log('Hub service initialized successfully');
80
- }
81
- catch (error) {
82
- this.logger.error('Failed to initialize Hub service:', error);
83
- throw new hub_exceptions_1.HubConfigurationException('Service initialization failed');
84
- }
85
- }
86
- getConfig() {
87
- return {
88
- authCallback: this.configService.get('auth.authCallback') ?? '',
89
- clientId: this.configService.get('auth.clientId') ?? '',
90
- clientSecret: this.configService.get('auth.clientSecret') ?? '',
91
- timeout: 10000,
92
- retries: 3,
93
- };
94
- }
95
- validateConfiguration() {
96
- const required = ['authCallback'];
97
- const missing = required.filter((field) => !this.config[field]);
98
- if (missing.length > 0) {
99
- throw new hub_exceptions_1.HubConfigurationException(`Missing required fields: ${missing.join(', ')}`);
100
- }
101
- try {
102
- new URL(this.config.authCallback);
103
- }
104
- catch {
105
- throw new hub_exceptions_1.HubConfigurationException('Invalid authCallback URL format');
106
- }
107
- this.logger.log('Configuration validated successfully');
108
- }
109
- setupAxiosInterceptors() {
110
- this.axiosInstance.interceptors.request.use((config) => {
111
- this.logger.debug(`Making request to: ${config.url}`);
112
- return config;
113
- }, (error) => {
114
- this.logger.error('Request interceptor error:', error);
115
- return Promise.reject(error instanceof Error ? error : new Error(String(error)));
116
- });
117
- this.axiosInstance.interceptors.response.use((response) => {
118
- this.logger.debug(`Response received: ${response.status}`);
119
- return response;
120
- }, (error) => {
121
- if (error instanceof axios_1.AxiosError) {
122
- this.logger.error(`Response error: ${error.response?.status} - ${error.message}`);
123
- }
124
- else {
125
- this.logger.error('Response error:', error);
126
- }
127
- return Promise.reject(error instanceof Error ? error : new Error(String(error)));
128
- });
129
- }
130
- async retryOperation(operation, maxRetries = 3, delay = 1000) {
131
- let lastError = new Error('Unknown error');
132
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
133
- try {
134
- return await operation();
135
- }
136
- catch (error) {
137
- lastError = error instanceof Error ? error : new Error(String(error));
138
- if (error instanceof axios_1.AxiosError &&
139
- error.response?.status &&
140
- error.response?.status >= 400 &&
141
- error.response?.status < 500) {
142
- throw error;
143
- }
144
- if (attempt < maxRetries) {
145
- this.logger.warn(`Attempt ${attempt} failed, retrying in ${delay}ms: ${lastError.message}`);
146
- await new Promise((resolve) => setTimeout(resolve, delay * attempt));
147
- }
148
- }
149
- }
150
- throw lastError;
151
- }
152
- async exchangeCodeForUserInfo(code, context) {
153
- const requestContext = {
154
- correlationId: context?.correlationId || 'no-correlation-id',
155
- requestId: context?.requestId,
156
- userId: context?.userId,
157
- clientIp: context?.clientIp,
158
- userAgent: context?.userAgent,
159
- };
160
- const startTime = Date.now();
161
- this.logger.log(`[${requestContext.correlationId}] Exchanging authorization code for user info`);
162
- try {
163
- const result = await this.retryOperation(async () => {
164
- const response = await this.axiosInstance.post(this.config.authCallback, {
165
- code,
166
- clientId: this.config.clientId,
167
- }, {
168
- headers: {
169
- Authorization: `Bearer ${this.config.clientSecret}`,
170
- 'X-Correlation-ID': requestContext.correlationId,
171
- 'X-Request-ID': requestContext.requestId || requestContext.correlationId,
172
- },
173
- });
174
- return response.data;
175
- }, this.config.retries);
176
- const responseTime = Date.now() - startTime;
177
- this.auditService.logCodeExchange(requestContext, true, responseTime);
178
- this.logger.log(`[${requestContext.correlationId}] Code exchange successful in ${responseTime}ms`);
179
- return result;
180
- }
181
- catch (error) {
182
- const responseTime = Date.now() - startTime;
183
- let thrownError;
184
- if (error instanceof axios_1.AxiosError) {
185
- const status = error.response?.status;
186
- if (status === 400) {
187
- thrownError = new hub_exceptions_1.InvalidAuthCodeException();
188
- }
189
- else if (status === 401) {
190
- thrownError = new hub_exceptions_1.HubAuthenticationException();
191
- }
192
- else if (error.code === 'ECONNABORTED') {
193
- thrownError = new hub_exceptions_1.HubTimeoutException();
194
- }
195
- else if (status && status >= 500) {
196
- thrownError = new hub_exceptions_1.HubServiceUnavailableException();
197
- }
198
- else {
199
- thrownError = new common_1.BadRequestException('Failed to validate authorization code');
200
- }
201
- this.auditService.logCodeExchange(requestContext, false, responseTime, thrownError.message, {
202
- errorType: error.constructor.name,
203
- statusCode: error.response?.status,
204
- });
205
- }
206
- else {
207
- this.logger.error(`[${requestContext.correlationId}] Unexpected error during code exchange:`, error);
208
- thrownError = new common_1.BadGatewayException('Hub service communication error');
209
- this.auditService.logCodeExchange(requestContext, false, responseTime, thrownError.message, {
210
- errorType: error instanceof Error ? error.constructor.name : 'Unknown',
211
- statusCode: undefined,
212
- });
213
- }
214
- this.logger.error(`[${requestContext.correlationId}] Code exchange failed in ${responseTime}ms: ${thrownError.message}`);
215
- throw thrownError;
216
- }
217
- }
218
- };
219
- exports.HubService = HubService;
220
- exports.HubService = HubService = HubService_1 = __decorate([
221
- (0, common_1.Injectable)(),
222
- __metadata("design:paramtypes", [config_1.ConfigService,
223
- hub_audit_service_1.HubAuditService])
224
- ], HubService);
225
- //# sourceMappingURL=hub.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub.service.js","sourceRoot":"","sources":["../../src/services/hub.service.ts"],"names":[],"mappings":"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"}