@loopstack/auth 0.8.0 → 0.9.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 (105) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +43 -21
  3. package/dist/auth.module.d.ts +2 -2
  4. package/dist/auth.module.js +29 -24
  5. package/dist/auth.module.js.map +1 -1
  6. package/dist/controllers/auth.controller.d.ts +9 -16
  7. package/dist/controllers/auth.controller.js +40 -95
  8. package/dist/controllers/auth.controller.js.map +1 -1
  9. package/dist/dtos/hub-login-request.dto.d.ts +4 -0
  10. package/dist/dtos/hub-login-request.dto.js +30 -0
  11. package/dist/dtos/hub-login-request.dto.js.map +1 -0
  12. package/dist/dtos/worker-info.dto.d.ts +5 -0
  13. package/dist/dtos/worker-info.dto.js +42 -0
  14. package/dist/dtos/worker-info.dto.js.map +1 -0
  15. package/dist/exceptions/hub.exceptions.d.ts +16 -0
  16. package/dist/exceptions/hub.exceptions.js +35 -0
  17. package/dist/exceptions/hub.exceptions.js.map +1 -0
  18. package/dist/guards/hub-auth.guard.d.ts +4 -0
  19. package/dist/guards/{dev-auth.guard.js → hub-auth.guard.js} +6 -6
  20. package/dist/guards/hub-auth.guard.js.map +1 -0
  21. package/dist/guards/index.d.ts +0 -3
  22. package/dist/guards/index.js +0 -3
  23. package/dist/guards/index.js.map +1 -1
  24. package/dist/guards/jwt-auth.guard.d.ts +5 -3
  25. package/dist/guards/jwt-auth.guard.js +14 -4
  26. package/dist/guards/jwt-auth.guard.js.map +1 -1
  27. package/dist/guards/worker-auth.guard.d.ts +7 -0
  28. package/dist/{strategies/dev.strategy.js → guards/worker-auth.guard.js} +15 -20
  29. package/dist/guards/worker-auth.guard.js.map +1 -0
  30. package/dist/index.d.ts +0 -1
  31. package/dist/index.js +0 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/interfaces/auth-config.interface.d.ts +3 -13
  34. package/dist/interfaces/hub-service.interfaces.d.ts +16 -0
  35. package/dist/interfaces/hub-service.interfaces.js +3 -0
  36. package/dist/interfaces/hub-service.interfaces.js.map +1 -0
  37. package/dist/repositories/user.repository.d.ts +0 -1
  38. package/dist/repositories/user.repository.js +0 -6
  39. package/dist/repositories/user.repository.js.map +1 -1
  40. package/dist/services/auth.service.d.ts +7 -11
  41. package/dist/services/auth.service.js +32 -46
  42. package/dist/services/auth.service.js.map +1 -1
  43. package/dist/services/config-validation.service.d.ts +8 -0
  44. package/dist/services/config-validation.service.js +44 -0
  45. package/dist/services/config-validation.service.js.map +1 -0
  46. package/dist/services/hub-audit.service.d.ts +14 -0
  47. package/dist/services/hub-audit.service.js +47 -0
  48. package/dist/services/hub-audit.service.js.map +1 -0
  49. package/dist/services/hub.service.d.ts +20 -0
  50. package/dist/services/hub.service.js +179 -0
  51. package/dist/services/hub.service.js.map +1 -0
  52. package/dist/services/index.d.ts +1 -2
  53. package/dist/services/index.js +1 -2
  54. package/dist/services/index.js.map +1 -1
  55. package/dist/services/token.service.d.ts +10 -6
  56. package/dist/services/token.service.js +24 -21
  57. package/dist/services/token.service.js.map +1 -1
  58. package/dist/strategies/hub.strategy.d.ts +17 -0
  59. package/dist/strategies/hub.strategy.js +67 -0
  60. package/dist/strategies/hub.strategy.js.map +1 -0
  61. package/dist/strategies/index.d.ts +1 -3
  62. package/dist/strategies/index.js +1 -3
  63. package/dist/strategies/index.js.map +1 -1
  64. package/dist/strategies/jwt.strategy.d.ts +1 -1
  65. package/dist/strategies/jwt.strategy.js +10 -7
  66. package/dist/strategies/jwt.strategy.js.map +1 -1
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +12 -11
  69. package/dist/decorators/current-user.decorator.d.ts +0 -1
  70. package/dist/decorators/current-user.decorator.js +0 -9
  71. package/dist/decorators/current-user.decorator.js.map +0 -1
  72. package/dist/decorators/index.d.ts +0 -3
  73. package/dist/decorators/index.js +0 -20
  74. package/dist/decorators/index.js.map +0 -1
  75. package/dist/decorators/public.decorator.d.ts +0 -1
  76. package/dist/decorators/public.decorator.js +0 -8
  77. package/dist/decorators/public.decorator.js.map +0 -1
  78. package/dist/decorators/roles.decorator.d.ts +0 -1
  79. package/dist/decorators/roles.decorator.js +0 -8
  80. package/dist/decorators/roles.decorator.js.map +0 -1
  81. package/dist/guards/dev-auth.guard.d.ts +0 -4
  82. package/dist/guards/dev-auth.guard.js.map +0 -1
  83. package/dist/guards/google-auth.guard.d.ts +0 -5
  84. package/dist/guards/google-auth.guard.js +0 -23
  85. package/dist/guards/google-auth.guard.js.map +0 -1
  86. package/dist/guards/local-auth.guard.d.ts +0 -4
  87. package/dist/guards/local-auth.guard.js +0 -18
  88. package/dist/guards/local-auth.guard.js.map +0 -1
  89. package/dist/repositories/auth-provider.repository.d.ts +0 -9
  90. package/dist/repositories/auth-provider.repository.js +0 -47
  91. package/dist/repositories/auth-provider.repository.js.map +0 -1
  92. package/dist/services/oauth.service.d.ts +0 -15
  93. package/dist/services/oauth.service.js +0 -91
  94. package/dist/services/oauth.service.js.map +0 -1
  95. package/dist/services/password.service.d.ts +0 -5
  96. package/dist/services/password.service.js +0 -25
  97. package/dist/services/password.service.js.map +0 -1
  98. package/dist/strategies/dev.strategy.d.ts +0 -9
  99. package/dist/strategies/dev.strategy.js.map +0 -1
  100. package/dist/strategies/google.strategy.d.ts +0 -8
  101. package/dist/strategies/google.strategy.js +0 -51
  102. package/dist/strategies/google.strategy.js.map +0 -1
  103. package/dist/strategies/local.strategy.d.ts +0 -8
  104. package/dist/strategies/local.strategy.js +0 -36
  105. package/dist/strategies/local.strategy.js.map +0 -1
@@ -1,5 +1,2 @@
1
1
  export * from './jwt-auth.guard';
2
- export * from './local-auth.guard';
3
2
  export * from './roles.guard';
4
- export * from './google-auth.guard';
5
- export * from './dev-auth.guard';
@@ -15,8 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./jwt-auth.guard"), exports);
18
- __exportStar(require("./local-auth.guard"), exports);
19
18
  __exportStar(require("./roles.guard"), exports);
20
- __exportStar(require("./google-auth.guard"), exports);
21
- __exportStar(require("./dev-auth.guard"), exports);
22
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,qDAAkC;AAClC,gDAA6B;AAC7B,sDAAmC;AACnC,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,gDAA6B"}
@@ -1,9 +1,11 @@
1
1
  import { ExecutionContext } from '@nestjs/common';
2
2
  import { Reflector } from '@nestjs/core';
3
+ import { ConfigService } from '@nestjs/config';
3
4
  declare const JwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
4
5
  export declare class JwtAuthGuard extends JwtAuthGuard_base {
5
- private reflector;
6
- constructor(reflector: Reflector);
7
- canActivate(context: ExecutionContext): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
6
+ private readonly reflector;
7
+ private readonly configService;
8
+ constructor(reflector: Reflector, configService: ConfigService);
9
+ canActivate(context: ExecutionContext): Promise<boolean>;
8
10
  }
9
11
  export {};
@@ -14,13 +14,16 @@ const common_1 = require("@nestjs/common");
14
14
  const core_1 = require("@nestjs/core");
15
15
  const passport_1 = require("@nestjs/passport");
16
16
  const shared_1 = require("@loopstack/shared");
17
+ const config_1 = require("@nestjs/config");
17
18
  let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
18
19
  reflector;
19
- constructor(reflector) {
20
+ configService;
21
+ constructor(reflector, configService) {
20
22
  super();
21
23
  this.reflector = reflector;
24
+ this.configService = configService;
22
25
  }
23
- canActivate(context) {
26
+ async canActivate(context) {
24
27
  const isPublic = this.reflector.getAllAndOverride(shared_1.IS_PUBLIC_KEY, [
25
28
  context.getHandler(),
26
29
  context.getClass(),
@@ -28,12 +31,19 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
28
31
  if (isPublic) {
29
32
  return true;
30
33
  }
31
- return super.canActivate(context);
34
+ const result = await super.canActivate(context);
35
+ if (!result) {
36
+ return false;
37
+ }
38
+ const { user } = context.switchToHttp().getRequest();
39
+ const clientId = this.configService.get('auth.clientId');
40
+ return clientId === user.workerId;
32
41
  }
33
42
  };
34
43
  exports.JwtAuthGuard = JwtAuthGuard;
35
44
  exports.JwtAuthGuard = JwtAuthGuard = __decorate([
36
45
  (0, common_1.Injectable)(),
37
- __metadata("design:paramtypes", [core_1.Reflector])
46
+ __metadata("design:paramtypes", [core_1.Reflector,
47
+ config_1.ConfigService])
38
48
  ], JwtAuthGuard);
39
49
  //# sourceMappingURL=jwt-auth.guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA8D;AAC9D,uCAAyC;AACzC,+CAA6C;AAC7C,8CAAkD;AAG3C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAC5B;IAApB,YAAoB,SAAoB;QACtC,KAAK,EAAE,CAAC;QADU,cAAS,GAAT,SAAS,CAAW;IAExC,CAAC;IAED,WAAW,CAAC,OAAyB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,sBAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AAfY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,YAAY,CAexB"}
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA8D;AAC9D,uCAAyC;AACzC,+CAA6C;AAC7C,8CAAwE;AACxE,2CAA+C;AAGxC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAE7B;IACA;IAFnB,YACmB,SAAoB,EACpB,aAA4B;QAE7C,KAAK,EAAE,CAAC;QAHS,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;IAG/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAyB;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,sBAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAOD,MAAM,EAAE,IAAI,EAAE,GAAmC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC,CAAC;QACjE,OAAO,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;CACF,CAAA;AAjCY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAGmB,gBAAS;QACL,sBAAa;GAHpC,YAAY,CAiCxB"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export declare class WorkerAuthGuard implements CanActivate {
4
+ private readonly configService;
5
+ constructor(configService: ConfigService);
6
+ canActivate(context: ExecutionContext): boolean;
7
+ }
@@ -9,28 +9,23 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DevStrategy = void 0;
13
- const passport_1 = require("@nestjs/passport");
12
+ exports.WorkerAuthGuard = void 0;
14
13
  const common_1 = require("@nestjs/common");
15
- const passport_custom_1 = require("passport-custom");
16
- let DevStrategy = class DevStrategy extends (0, passport_1.PassportStrategy)(passport_custom_1.Strategy, 'dev') {
17
- constructor() {
18
- super();
14
+ const config_1 = require("@nestjs/config");
15
+ let WorkerAuthGuard = class WorkerAuthGuard {
16
+ configService;
17
+ constructor(configService) {
18
+ this.configService = configService;
19
19
  }
20
- async validate(req) {
21
- return {
22
- id: null,
23
- email: 'dev@localhost',
24
- firstName: 'Dev',
25
- lastName: 'User',
26
- roles: [],
27
- isActive: true,
28
- };
20
+ canActivate(context) {
21
+ const { user } = context.switchToHttp().getRequest();
22
+ const clientId = this.configService.get('auth.clientId');
23
+ return clientId === user.workerId;
29
24
  }
30
25
  };
31
- exports.DevStrategy = DevStrategy;
32
- exports.DevStrategy = DevStrategy = __decorate([
26
+ exports.WorkerAuthGuard = WorkerAuthGuard;
27
+ exports.WorkerAuthGuard = WorkerAuthGuard = __decorate([
33
28
  (0, common_1.Injectable)(),
34
- __metadata("design:paramtypes", [])
35
- ], DevStrategy);
36
- //# sourceMappingURL=dev.strategy.js.map
29
+ __metadata("design:paramtypes", [config_1.ConfigService])
30
+ ], WorkerAuthGuard);
31
+ //# sourceMappingURL=worker-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-auth.guard.js","sourceRoot":"","sources":["../../src/guards/worker-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,2CAA+C;AAaxC,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,WAAW,CAAC,OAAyB;QACnC,MAAM,EAAE,IAAI,EAAE,GAAmC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC,CAAC;QACjE,OAAO,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;CACF,CAAA;AARY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAEiC,sBAAa;GAD9C,eAAe,CAQ3B"}
package/dist/index.d.ts CHANGED
@@ -6,4 +6,3 @@ export * from './guards';
6
6
  export * from './interfaces';
7
7
  export * from './repositories';
8
8
  export * from './services';
9
- export * from './services';
package/dist/index.js CHANGED
@@ -22,5 +22,4 @@ __exportStar(require("./guards"), exports);
22
22
  __exportStar(require("./interfaces"), exports);
23
23
  __exportStar(require("./repositories"), exports);
24
24
  __exportStar(require("./services"), exports);
25
- __exportStar(require("./services"), exports);
26
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,2DAAwC;AACxC,8CAA2B;AAE3B,gDAA6B;AAC7B,2CAAwB;AACxB,+CAA4B;AAC5B,iDAA8B;AAC9B,6CAA0B;AAC1B,6CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,2DAAwC;AACxC,8CAA2B;AAE3B,gDAA6B;AAC7B,2CAAwB;AACxB,+CAA4B;AAC5B,iDAA8B;AAC9B,6CAA0B"}
@@ -1,12 +1,4 @@
1
- import { AuthStrategy } from '@loopstack/shared';
2
- export interface OAuthProviderConfig {
3
- clientId: string;
4
- clientSecret: string;
5
- callbackUrl: string;
6
- scope?: string[];
7
- }
8
1
  export interface AuthConfig {
9
- strategies: AuthStrategy[];
10
2
  jwt?: {
11
3
  secret: string;
12
4
  expiresIn: string;
@@ -14,9 +6,7 @@ export interface AuthConfig {
14
6
  refreshExpiresIn?: string;
15
7
  cookieDomain?: string;
16
8
  };
17
- oauth?: {
18
- google?: OAuthProviderConfig;
19
- github?: OAuthProviderConfig;
20
- facebook?: OAuthProviderConfig;
21
- };
9
+ clientId?: string;
10
+ clientSecret?: string;
11
+ authCallback?: string;
22
12
  }
@@ -0,0 +1,16 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=hub-service.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-service.interfaces.js","sourceRoot":"","sources":["../../src/interfaces/hub-service.interfaces.ts"],"names":[],"mappings":""}
@@ -4,7 +4,6 @@ export declare class UserRepository {
4
4
  private repository;
5
5
  constructor(repository: Repository<User>);
6
6
  findById(id: string): Promise<User | null>;
7
- findByEmail(email: string): Promise<User | null>;
8
7
  create(userData: Partial<User>): Promise<User>;
9
8
  update(id: string, userData: Partial<User>): Promise<User | null>;
10
9
  }
@@ -28,12 +28,6 @@ let UserRepository = class UserRepository {
28
28
  relations: ['roles', 'roles.permissions'],
29
29
  });
30
30
  }
31
- async findByEmail(email) {
32
- return this.repository.findOne({
33
- where: { email },
34
- relations: ['roles', 'roles.permissions'],
35
- });
36
- }
37
31
  async create(userData) {
38
32
  const user = this.repository.create(userData);
39
33
  return this.repository.save(user);
@@ -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;AAGlC,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,WAAW,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,EAAE,KAAK,EAAE;YAChB,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;CACF,CAAA;AA7BY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;qCACH,oBAAU;GAHrB,cAAc,CA6B1B"}
1
+ {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,8CAAyC;AAGlC,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,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;CACF,CAAA;AAtBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,aAAI,CAAC,CAAA;qCACH,oBAAU;GAHrB,cAAc,CAsB1B"}
@@ -1,20 +1,16 @@
1
- import { JwtService } from '@nestjs/jwt';
2
1
  import { UserRepository } from '../repositories';
3
- import { PasswordService } from './password.service';
4
2
  import { TokenService } from './token.service';
5
- import { AuthConfig } from '../interfaces';
6
- import { AuthResponseDto, RegisterDto, User, UserResponseDto } from '@loopstack/shared';
3
+ import { AuthResponseDto, User, UserResponseDto } from '@loopstack/shared';
4
+ import { WorkerInfoDto } from '../dtos/worker-info.dto';
5
+ import { ConfigService } from '@nestjs/config';
7
6
  export declare class AuthService {
8
- private config;
7
+ private readonly configService;
9
8
  private userRepository;
10
- private passwordService;
11
9
  private tokenService;
12
- private jwtService;
13
- constructor(config: AuthConfig, userRepository: UserRepository, passwordService: PasswordService, tokenService: TokenService, jwtService: JwtService);
14
- validateUser(email: string, password: string): Promise<any>;
15
- login(user: any): Promise<AuthResponseDto>;
16
- register(registerDto: RegisterDto): Promise<UserResponseDto>;
10
+ constructor(configService: ConfigService, userRepository: UserRepository, tokenService: TokenService);
11
+ login(user: User): Promise<AuthResponseDto>;
17
12
  refresh(refreshToken: string): Promise<AuthResponseDto>;
18
13
  mapUserToResponse(user: User): UserResponseDto;
19
14
  getCurrentUser(userId: string): Promise<UserResponseDto>;
15
+ getWorkerHealthInfo(): WorkerInfoDto;
20
16
  }
@@ -8,67 +8,49 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.AuthService = void 0;
16
13
  const common_1 = require("@nestjs/common");
17
- const jwt_1 = require("@nestjs/jwt");
18
14
  const repositories_1 = require("../repositories");
19
- const password_service_1 = require("./password.service");
20
15
  const token_service_1 = require("./token.service");
21
- const constants_1 = require("../constants");
16
+ const worker_info_dto_1 = require("../dtos/worker-info.dto");
17
+ const class_transformer_1 = require("class-transformer");
18
+ const config_1 = require("@nestjs/config");
22
19
  let AuthService = class AuthService {
23
- config;
20
+ configService;
24
21
  userRepository;
25
- passwordService;
26
22
  tokenService;
27
- jwtService;
28
- constructor(config, userRepository, passwordService, tokenService, jwtService) {
29
- this.config = config;
23
+ constructor(configService, userRepository, tokenService) {
24
+ this.configService = configService;
30
25
  this.userRepository = userRepository;
31
- this.passwordService = passwordService;
32
26
  this.tokenService = tokenService;
33
- this.jwtService = jwtService;
34
- }
35
- async validateUser(email, password) {
36
- const user = await this.userRepository.findByEmail(email);
37
- if (user && await this.passwordService.compare(password, user.password)) {
38
- const { password, ...result } = user;
39
- return result;
40
- }
41
- return null;
42
27
  }
43
28
  async login(user) {
44
- const tokens = await this.tokenService.generateTokens(user);
29
+ const workerId = this.configService.get('auth.clientId');
30
+ const payload = {
31
+ sub: user.id,
32
+ roles: user.roles?.map(role => role.name) || [],
33
+ workerId,
34
+ };
35
+ const tokens = await this.tokenService.generateTokens(payload);
45
36
  return {
46
37
  ...tokens,
47
38
  tokenType: 'Bearer',
48
39
  };
49
40
  }
50
- async register(registerDto) {
51
- const existingUser = await this.userRepository.findByEmail(registerDto.email);
52
- if (existingUser) {
53
- throw new common_1.ConflictException('User already exists');
54
- }
55
- const hashedPassword = await this.passwordService.hash(registerDto.password);
56
- const user = await this.userRepository.create({
57
- ...registerDto,
58
- password: hashedPassword,
59
- });
60
- return this.mapUserToResponse(user);
61
- }
62
41
  async refresh(refreshToken) {
63
42
  try {
64
- const payload = this.jwtService.verify(refreshToken, {
65
- secret: this.config.jwt?.refreshSecret || this.config.jwt?.secret,
66
- });
43
+ const payload = this.tokenService.verifyRefreshToken(refreshToken);
67
44
  const user = await this.userRepository.findById(payload.sub);
68
45
  if (!user || !user.isActive) {
69
46
  throw new common_1.UnauthorizedException('Invalid refresh token');
70
47
  }
71
- const tokens = await this.tokenService.generateTokens(user);
48
+ const newPayload = {
49
+ sub: payload.sub,
50
+ workerId: payload.workerId,
51
+ roles: user.roles?.map(role => role.name) || [],
52
+ };
53
+ const tokens = await this.tokenService.generateTokens(newPayload);
72
54
  return {
73
55
  ...tokens,
74
56
  tokenType: 'Bearer',
@@ -81,9 +63,6 @@ let AuthService = class AuthService {
81
63
  mapUserToResponse(user) {
82
64
  return {
83
65
  id: user.id,
84
- email: user.email,
85
- firstName: user.firstName,
86
- lastName: user.lastName,
87
66
  isActive: user.isActive,
88
67
  roles: user.roles?.map(role => role.name) || [],
89
68
  createdAt: user.createdAt,
@@ -97,14 +76,21 @@ let AuthService = class AuthService {
97
76
  }
98
77
  return this.mapUserToResponse(user);
99
78
  }
79
+ getWorkerHealthInfo() {
80
+ return (0, class_transformer_1.plainToInstance)(worker_info_dto_1.WorkerInfoDto, {
81
+ clientId: this.configService.get('auth.clientId'),
82
+ isConfigured: !!this.configService.get('auth.clientSecret'),
83
+ timestamp: new Date(),
84
+ }, {
85
+ excludeExtraneousValues: true,
86
+ });
87
+ }
100
88
  };
101
89
  exports.AuthService = AuthService;
102
90
  exports.AuthService = AuthService = __decorate([
103
91
  (0, common_1.Injectable)(),
104
- __param(0, (0, common_1.Inject)(constants_1.AUTH_CONFIG)),
105
- __metadata("design:paramtypes", [Object, repositories_1.UserRepository,
106
- password_service_1.PasswordService,
107
- token_service_1.TokenService,
108
- jwt_1.JwtService])
92
+ __metadata("design:paramtypes", [config_1.ConfigService,
93
+ repositories_1.UserRepository,
94
+ token_service_1.TokenService])
109
95
  ], AuthService);
110
96
  //# sourceMappingURL=auth.service.js.map
@@ -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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"}
@@ -0,0 +1,8 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export declare class ConfigValidationService implements OnModuleInit {
4
+ private configService;
5
+ constructor(configService: ConfigService);
6
+ onModuleInit(): void;
7
+ private validateAuthConfig;
8
+ }
@@ -0,0 +1,44 @@
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.ConfigValidationService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ let ConfigValidationService = class ConfigValidationService {
16
+ configService;
17
+ constructor(configService) {
18
+ this.configService = configService;
19
+ }
20
+ onModuleInit() {
21
+ this.validateAuthConfig();
22
+ }
23
+ validateAuthConfig() {
24
+ const requiredConfigs = [
25
+ { key: 'auth.jwt.secret', name: 'JWT_SECRET' },
26
+ ];
27
+ const missingConfigs = [];
28
+ requiredConfigs.forEach(({ key, name }) => {
29
+ const value = this.configService.get(key);
30
+ if (!value) {
31
+ missingConfigs.push(name);
32
+ }
33
+ });
34
+ if (missingConfigs.length > 0) {
35
+ throw new Error(`Missing required configuration values: ${missingConfigs.join(', ')}`);
36
+ }
37
+ }
38
+ };
39
+ exports.ConfigValidationService = ConfigValidationService;
40
+ exports.ConfigValidationService = ConfigValidationService = __decorate([
41
+ (0, common_1.Injectable)(),
42
+ __metadata("design:paramtypes", [config_1.ConfigService])
43
+ ], ConfigValidationService);
44
+ //# sourceMappingURL=config-validation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validation.service.js","sourceRoot":"","sources":["../../src/services/config-validation.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,2CAA+C;AAGxC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACd;IAApB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,YAAY;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QACxB,MAAM,eAAe,GAAG;YAGtB,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;SAC/C,CAAC;QAEF,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,0CAA0C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA7BY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAEwB,sBAAa;GADrC,uBAAuB,CA6BnC"}
@@ -0,0 +1,14 @@
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>): Promise<void>;
13
+ private sanitizeEvent;
14
+ }
@@ -0,0 +1,47 @@
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
+ async 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
@@ -0,0 +1 @@
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,KAAK,CAAC,eAAe,CACnB,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"}
@@ -0,0 +1,20 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { IValidateCodeResponse } from '@loopstack/shared';
3
+ import { ConfigService } from '@nestjs/config';
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(): Promise<void>;
14
+ private initialize;
15
+ private loadConfiguration;
16
+ private validateConfiguration;
17
+ private setupAxiosInterceptors;
18
+ private retryOperation;
19
+ exchangeCodeForUserInfo(code: string, context?: RequestContext): Promise<IValidateCodeResponse>;
20
+ }