@loopstack/auth 0.35.0 → 0.37.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 (59) hide show
  1. package/dist/auth.module.d.ts.map +1 -1
  2. package/dist/auth.module.js +7 -6
  3. package/dist/auth.module.js.map +1 -1
  4. package/dist/controllers/api-token.controller.d.ts +11 -0
  5. package/dist/controllers/api-token.controller.d.ts.map +1 -0
  6. package/dist/controllers/api-token.controller.js +71 -0
  7. package/dist/controllers/api-token.controller.js.map +1 -0
  8. package/dist/controllers/auth.controller.d.ts +7 -14
  9. package/dist/controllers/auth.controller.d.ts.map +1 -1
  10. package/dist/controllers/auth.controller.js +6 -7
  11. package/dist/controllers/auth.controller.js.map +1 -1
  12. package/dist/controllers/index.d.ts +1 -0
  13. package/dist/controllers/index.d.ts.map +1 -1
  14. package/dist/controllers/index.js +1 -0
  15. package/dist/controllers/index.js.map +1 -1
  16. package/dist/guards/jwt-auth.guard.d.ts +7 -1
  17. package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
  18. package/dist/guards/jwt-auth.guard.js +44 -6
  19. package/dist/guards/jwt-auth.guard.js.map +1 -1
  20. package/dist/repositories/user.repository.d.ts +1 -0
  21. package/dist/repositories/user.repository.d.ts.map +1 -1
  22. package/dist/repositories/user.repository.js +12 -0
  23. package/dist/repositories/user.repository.js.map +1 -1
  24. package/dist/services/api-token.service.d.ts +18 -0
  25. package/dist/services/api-token.service.d.ts.map +1 -0
  26. package/dist/services/api-token.service.js +82 -0
  27. package/dist/services/api-token.service.js.map +1 -0
  28. package/dist/services/auth.service.d.ts +4 -5
  29. package/dist/services/auth.service.d.ts.map +1 -1
  30. package/dist/services/auth.service.js +8 -10
  31. package/dist/services/auth.service.js.map +1 -1
  32. package/dist/services/index.d.ts +1 -0
  33. package/dist/services/index.d.ts.map +1 -1
  34. package/dist/services/index.js +1 -0
  35. package/dist/services/index.js.map +1 -1
  36. package/dist/strategies/hub.strategy.d.ts.map +1 -1
  37. package/dist/strategies/hub.strategy.js +1 -10
  38. package/dist/strategies/hub.strategy.js.map +1 -1
  39. package/package.json +4 -4
  40. package/dist/dtos/hub-login-request.dto.d.ts +0 -5
  41. package/dist/dtos/hub-login-request.dto.d.ts.map +0 -1
  42. package/dist/dtos/hub-login-request.dto.js +0 -18
  43. package/dist/dtos/hub-login-request.dto.js.map +0 -1
  44. package/dist/dtos/hub-login-response.dto.d.ts +0 -5
  45. package/dist/dtos/hub-login-response.dto.d.ts.map +0 -1
  46. package/dist/dtos/hub-login-response.dto.js +0 -23
  47. package/dist/dtos/hub-login-response.dto.js.map +0 -1
  48. package/dist/dtos/user-response.dto.d.ts +0 -8
  49. package/dist/dtos/user-response.dto.d.ts.map +0 -1
  50. package/dist/dtos/user-response.dto.js +0 -8
  51. package/dist/dtos/user-response.dto.js.map +0 -1
  52. package/dist/dtos/worker-info.dto.d.ts +0 -7
  53. package/dist/dtos/worker-info.dto.d.ts.map +0 -1
  54. package/dist/dtos/worker-info.dto.js +0 -28
  55. package/dist/dtos/worker-info.dto.js.map +0 -1
  56. package/dist/seeds/local-dev-user.seed.d.ts +0 -12
  57. package/dist/seeds/local-dev-user.seed.d.ts.map +0 -1
  58. package/dist/seeds/local-dev-user.seed.js +0 -45
  59. package/dist/seeds/local-dev-user.seed.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auth.module.d.ts","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgBvF,qBACa,UAAW,YAAW,UAAU;IAC3C,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAItC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;CA+BnD"}
1
+ {"version":3,"file":"auth.module.d.ts","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgBvF,qBACa,UAAW,YAAW,UAAU;IAC3C,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAItC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;CAgCnD"}
@@ -11,13 +11,13 @@ import { JwtModule } from '@nestjs/jwt';
11
11
  import { PassportModule } from '@nestjs/passport';
12
12
  import { TypeOrmModule } from '@nestjs/typeorm';
13
13
  import cookieParser from 'cookie-parser';
14
- import { Role, User } from '@loopstack/common';
14
+ import { ApiTokenEntity, Role, User } from '@loopstack/common';
15
15
  import { AssignRoleCommand } from './commands/assign-role.command.js';
16
- import { AuthController } from './controllers/index.js';
16
+ import { ApiTokenController, AuthController } from './controllers/index.js';
17
17
  import { JwtAuthGuard, RolesGuard } from './guards/index.js';
18
18
  import { UserRepository } from './repositories/index.js';
19
19
  import { ConfigValidationService } from './services/config-validation.service.js';
20
- import { AuthService, TokenService } from './services/index.js';
20
+ import { ApiTokenService, AuthService, TokenService } from './services/index.js';
21
21
  import { HubStrategy, JwtStrategy } from './strategies/index.js';
22
22
  let AuthModule = AuthModule_1 = class AuthModule {
23
23
  configure(consumer) {
@@ -37,11 +37,12 @@ let AuthModule = AuthModule_1 = class AuthModule {
37
37
  }),
38
38
  inject: [ConfigService],
39
39
  }),
40
- TypeOrmModule.forFeature([User, Role], connection),
40
+ TypeOrmModule.forFeature([User, Role, ApiTokenEntity], connection),
41
41
  ],
42
- controllers: [AuthController],
42
+ controllers: [ApiTokenController, AuthController],
43
43
  providers: [
44
44
  ConfigValidationService,
45
+ ApiTokenService,
45
46
  AuthService,
46
47
  UserRepository,
47
48
  TokenService,
@@ -51,7 +52,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
51
52
  RolesGuard,
52
53
  AssignRoleCommand,
53
54
  ],
54
- exports: [AuthService, UserRepository, JwtAuthGuard, RolesGuard],
55
+ exports: [ApiTokenService, AuthService, UserRepository, JwtAuthGuard, RolesGuard],
55
56
  };
56
57
  }
57
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAqC,MAAM,EAAc,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG1D,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,UAAmB;QAChC,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE;gBACP,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBACnD,SAAS,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,aAAa,CAAC;iBACxB,CAAC;gBACF,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC;aACnD;YACD,WAAW,EAAE,CAAC,cAAc,CAAC;YAC7B,SAAS,EAAE;gBACT,uBAAuB;gBACvB,WAAW;gBACX,cAAc;gBACd,YAAY;gBACZ,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,UAAU;gBACV,iBAAiB;aAClB;YACD,OAAO,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC;SACjE,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,UAAU;IADtB,MAAM,CAAC,EAAE,CAAC;GACE,UAAU,CAoCtB"}
1
+ {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAqC,MAAM,EAAc,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG1D,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,UAAmB;QAChC,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE;gBACP,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBACnD,SAAS,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,aAAa,CAAC;iBACxB,CAAC;gBACF,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC;aACnE;YACD,WAAW,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC;YACjD,SAAS,EAAE;gBACT,uBAAuB;gBACvB,eAAe;gBACf,WAAW;gBACX,cAAc;gBACd,YAAY;gBACZ,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,UAAU;gBACV,iBAAiB;aAClB;YACD,OAAO,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC;SAClF,CAAC;IACJ,CAAC;CACF,CAAA;AArCY,UAAU;IADtB,MAAM,CAAC,EAAE,CAAC;GACE,UAAU,CAqCtB"}
@@ -0,0 +1,11 @@
1
+ import { CurrentUserInterface } from '@loopstack/common';
2
+ import type { ApiTokenCreateInterface, ApiTokenCreatedInterface, ApiTokenInterface } from '@loopstack/contracts/api';
3
+ import { ApiTokenService } from '../services/api-token.service.js';
4
+ export declare class ApiTokenController {
5
+ private readonly apiTokenService;
6
+ constructor(apiTokenService: ApiTokenService);
7
+ create(payload: ApiTokenCreateInterface, user: CurrentUserInterface): Promise<ApiTokenCreatedInterface>;
8
+ list(user: CurrentUserInterface): Promise<ApiTokenInterface[]>;
9
+ revoke(id: string, user: CurrentUserInterface): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=api-token.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/api-token.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAEzG,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAYnE,qBACa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAOvD,MAAM,CACyC,OAAO,EAAE,uBAAuB,EACpE,IAAI,EAAE,oBAAoB,GACxC,OAAO,CAAC,wBAAwB,CAAC;IAS9B,IAAI,CAAgB,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS7E,MAAM,CAAc,EAAE,EAAE,MAAM,EAAiB,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhG"}
@@ -0,0 +1,71 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common';
14
+ import { CurrentUser, ZodValidationPipe } from '@loopstack/common';
15
+ import { ApiTokenCreateSchema } from '@loopstack/contracts/api';
16
+ import { ApiTokenService } from '../services/api-token.service.js';
17
+ function toApiToken(entity) {
18
+ return {
19
+ id: entity.id,
20
+ name: entity.name,
21
+ createdAt: entity.createdAt.toISOString(),
22
+ lastUsedAt: entity.lastUsedAt?.toISOString() ?? null,
23
+ expiresAt: entity.expiresAt?.toISOString() ?? null,
24
+ };
25
+ }
26
+ let ApiTokenController = class ApiTokenController {
27
+ apiTokenService;
28
+ constructor(apiTokenService) {
29
+ this.apiTokenService = apiTokenService;
30
+ }
31
+ async create(payload, user) {
32
+ const { entity, token } = await this.apiTokenService.create(user.userId, payload);
33
+ return { ...toApiToken(entity), token };
34
+ }
35
+ async list(user) {
36
+ const tokens = await this.apiTokenService.list(user.userId);
37
+ return tokens.map(toApiToken);
38
+ }
39
+ async revoke(id, user) {
40
+ await this.apiTokenService.revoke(id, user.userId);
41
+ }
42
+ };
43
+ __decorate([
44
+ Post(),
45
+ __param(0, Body(new ZodValidationPipe(ApiTokenCreateSchema))),
46
+ __param(1, CurrentUser()),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", [Object, Object]),
49
+ __metadata("design:returntype", Promise)
50
+ ], ApiTokenController.prototype, "create", null);
51
+ __decorate([
52
+ Get(),
53
+ __param(0, CurrentUser()),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", [Object]),
56
+ __metadata("design:returntype", Promise)
57
+ ], ApiTokenController.prototype, "list", null);
58
+ __decorate([
59
+ Delete(':id'),
60
+ __param(0, Param('id')),
61
+ __param(1, CurrentUser()),
62
+ __metadata("design:type", Function),
63
+ __metadata("design:paramtypes", [String, Object]),
64
+ __metadata("design:returntype", Promise)
65
+ ], ApiTokenController.prototype, "revoke", null);
66
+ ApiTokenController = __decorate([
67
+ Controller('api/v1/auth/tokens'),
68
+ __metadata("design:paramtypes", [ApiTokenService])
69
+ ], ApiTokenController);
70
+ export { ApiTokenController };
71
+ //# sourceMappingURL=api-token.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token.controller.js","sourceRoot":"","sources":["../../src/controllers/api-token.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAkB,WAAW,EAAwB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,SAAS,UAAU,CAAC,MAAsB;IACxC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;QACpD,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;KACnD,CAAC;AACJ,CAAC;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACA;IAA7B,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAO3D,AAAN,KAAK,CAAC,MAAM,CACyC,OAAgC,EACpE,IAA0B;QAEzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IAMK,AAAN,KAAK,CAAC,IAAI,CAAgB,IAA0B;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAMK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU,EAAiB,IAA0B;QAC7E,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAxBO;IADL,IAAI,EAAE;IAEJ,WAAA,IAAI,CAAC,IAAI,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACjD,WAAA,WAAW,EAAE,CAAA;;;;gDAIf;AAMK;IADL,GAAG,EAAE;IACM,WAAA,WAAW,EAAE,CAAA;;;;8CAGxB;AAMK;IADL,MAAM,CAAC,KAAK,CAAC;IACA,WAAA,KAAK,CAAC,IAAI,CAAC,CAAA;IAAc,WAAA,WAAW,EAAE,CAAA;;;;gDAEnD;AA/BU,kBAAkB;IAD9B,UAAU,CAAC,oBAAoB,CAAC;qCAEe,eAAe;GADlD,kBAAkB,CAgC9B"}
@@ -1,25 +1,18 @@
1
1
  import { Request, Response } from 'express';
2
2
  import { CurrentUserInterface, User } from '@loopstack/common';
3
- import { HubLoginRequestDto } from '../dtos/hub-login-request.dto.js';
4
- import { HubLoginResponseDto } from '../dtos/hub-login-response.dto.js';
5
- import { UserResponseDto } from '../dtos/user-response.dto.js';
6
- import { WorkerInfoDto } from '../dtos/worker-info.dto.js';
3
+ import { AuthMessageInterface, AuthUserInterface, HubLoginRequestInterface, HubLoginResponseInterface, WorkerInfoInterface } from '@loopstack/contracts/api';
7
4
  import { AuthService, TokenService } from '../services/index.js';
8
5
  export declare class AuthController {
9
6
  private readonly authService;
10
7
  private readonly tokenService;
11
8
  constructor(authService: AuthService, tokenService: TokenService);
12
9
  private setCookies;
13
- refresh(req: Request, res: Response): Promise<{
14
- message: string;
15
- }>;
16
- logout(res: Response): {
17
- message: string;
18
- };
19
- me(user: CurrentUserInterface): Promise<UserResponseDto>;
20
- getInfo(): WorkerInfoDto;
21
- hubLogin(_hubLoginRequestDto: HubLoginRequestDto, req: Request & {
10
+ refresh(req: Request, res: Response): Promise<AuthMessageInterface>;
11
+ logout(res: Response): AuthMessageInterface;
12
+ me(user: CurrentUserInterface): Promise<AuthUserInterface>;
13
+ getInfo(): WorkerInfoInterface;
14
+ hubLogin(_payload: HubLoginRequestInterface, req: Request & {
22
15
  user: User;
23
- }, res: Response): Promise<HubLoginResponseDto>;
16
+ }, res: Response): Promise<HubLoginResponseInterface>;
24
17
  }
25
18
  //# sourceMappingURL=auth.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/auth.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAe,oBAAoB,EAAU,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY;IAG7C,OAAO,CAAC,UAAU;IAgBZ,OAAO,CAAQ,GAAG,EAAE,OAAO,EAA8B,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAa3G,MAAM,CAA6B,GAAG,EAAE,QAAQ,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAOhE,EAAE,CAAgB,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAM7E,OAAO,IAAI,aAAa;IAQlB,QAAQ,CACJ,mBAAmB,EAAE,kBAAkB,EACxC,GAAG,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,EACR,GAAG,EAAE,QAAQ,GACxC,OAAO,CAAC,mBAAmB,CAAC;CAOhC"}
1
+ {"version":3,"file":"auth.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/auth.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAe,oBAAoB,EAAU,IAAI,EAAqB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EAExB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY;IAG7C,OAAO,CAAC,UAAU;IAgBZ,OAAO,CAAQ,GAAG,EAAE,OAAO,EAA8B,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAa5G,MAAM,CAA6B,GAAG,EAAE,QAAQ,GAAG,oBAAoB;IAOjE,EAAE,CAAgB,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAM/E,OAAO,IAAI,mBAAmB;IAQxB,QAAQ,CACwC,QAAQ,EAAE,wBAAwB,EAC/E,GAAG,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,EACR,GAAG,EAAE,QAAQ,GACxC,OAAO,CAAC,yBAAyB,CAAC;CAOtC"}
@@ -11,9 +11,8 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, Res, UseGuards } from '@nestjs/common';
14
- import { CurrentUser, Public } from '@loopstack/common';
15
- import { HubLoginRequestDto } from '../dtos/hub-login-request.dto.js';
16
- import { WorkerInfoDto } from '../dtos/worker-info.dto.js';
14
+ import { CurrentUser, Public, ZodValidationPipe } from '@loopstack/common';
15
+ import { HubLoginRequestSchema, } from '@loopstack/contracts/api';
17
16
  import { HubAuthGuard } from '../guards/hub-auth.guard.js';
18
17
  import { AuthService, TokenService } from '../services/index.js';
19
18
  let AuthController = class AuthController {
@@ -45,7 +44,7 @@ let AuthController = class AuthController {
45
44
  getInfo() {
46
45
  return this.authService.getWorkerHealthInfo();
47
46
  }
48
- async hubLogin(_hubLoginRequestDto, req, res) {
47
+ async hubLogin(_payload, req, res) {
49
48
  const tokens = await this.authService.login(req.user);
50
49
  this.setCookies(res, tokens);
51
50
  return { id: req.user.id, message: 'Login successful' };
@@ -81,18 +80,18 @@ __decorate([
81
80
  Get('worker/health'),
82
81
  __metadata("design:type", Function),
83
82
  __metadata("design:paramtypes", []),
84
- __metadata("design:returntype", WorkerInfoDto)
83
+ __metadata("design:returntype", Object)
85
84
  ], AuthController.prototype, "getInfo", null);
86
85
  __decorate([
87
86
  Public(),
88
87
  Post('oauth/hub'),
89
88
  HttpCode(HttpStatus.OK),
90
89
  UseGuards(HubAuthGuard),
91
- __param(0, Body()),
90
+ __param(0, Body(new ZodValidationPipe(HubLoginRequestSchema))),
92
91
  __param(1, Req()),
93
92
  __param(2, Res({ passthrough: true })),
94
93
  __metadata("design:type", Function),
95
- __metadata("design:paramtypes", [HubLoginRequestDto, Object, Object]),
94
+ __metadata("design:paramtypes", [Object, Object, Object]),
96
95
  __metadata("design:returntype", Promise)
97
96
  ], AuthController.prototype, "hubLogin", null);
98
97
  AuthController = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/controllers/auth.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/controllers/auth.controller.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
+ export * from './api-token.controller.js';
1
2
  export * from './auth.controller.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
@@ -1,2 +1,3 @@
1
+ export * from './api-token.controller.js';
1
2
  export * from './auth.controller.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
@@ -1,12 +1,18 @@
1
1
  import { ExecutionContext } from '@nestjs/common';
2
2
  import { ConfigService } from '@nestjs/config';
3
3
  import { Reflector } from '@nestjs/core';
4
+ import { UserRepository } from '../repositories/index.js';
5
+ import { ApiTokenService } from '../services/api-token.service.js';
4
6
  declare const JwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
5
7
  export declare class JwtAuthGuard extends JwtAuthGuard_base {
6
8
  private readonly reflector;
7
9
  private readonly configService;
8
- constructor(reflector: Reflector, configService: ConfigService);
10
+ private readonly apiTokenService;
11
+ private readonly userRepository;
12
+ constructor(reflector: Reflector, configService: ConfigService, apiTokenService: ApiTokenService, userRepository: UserRepository);
9
13
  canActivate(context: ExecutionContext): Promise<boolean>;
14
+ private extractBearer;
15
+ private hasCredential;
10
16
  }
11
17
  export {};
12
18
  //# sourceMappingURL=jwt-auth.guard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;AAKzC,qBACa,YAAa,SAAQ,iBAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAKzC,WAAW,CAAC,OAAO,EAAE,gBAAgB;CAgC5C"}
1
+ {"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqC,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;;AAEnE,qBACa,YAAa,SAAQ,iBAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAHd,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc;IAK3C,WAAW,CAAC,OAAO,EAAE,gBAAgB;IA2D3C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAItB"}
@@ -7,19 +7,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { Injectable } from '@nestjs/common';
10
+ import { Injectable, UnauthorizedException } from '@nestjs/common';
11
11
  import { ConfigService } from '@nestjs/config';
12
12
  import { Reflector } from '@nestjs/core';
13
13
  import { AuthGuard } from '@nestjs/passport';
14
- import { IS_PUBLIC_KEY } from '@loopstack/common';
14
+ import { API_TOKEN_PREFIX, IS_PUBLIC_KEY } from '@loopstack/common';
15
15
  import { UserTypeEnum } from '@loopstack/common';
16
+ import { UserRepository } from '../repositories/index.js';
17
+ import { ApiTokenService } from '../services/api-token.service.js';
16
18
  let JwtAuthGuard = class JwtAuthGuard extends AuthGuard('jwt') {
17
19
  reflector;
18
20
  configService;
19
- constructor(reflector, configService) {
21
+ apiTokenService;
22
+ userRepository;
23
+ constructor(reflector, configService, apiTokenService, userRepository) {
20
24
  super();
21
25
  this.reflector = reflector;
22
26
  this.configService = configService;
27
+ this.apiTokenService = apiTokenService;
28
+ this.userRepository = userRepository;
23
29
  }
24
30
  async canActivate(context) {
25
31
  const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [
@@ -29,23 +35,55 @@ let JwtAuthGuard = class JwtAuthGuard extends AuthGuard('jwt') {
29
35
  if (isPublic) {
30
36
  return true;
31
37
  }
38
+ const request = context.switchToHttp().getRequest();
39
+ const clientId = this.configService.get('auth.clientId');
40
+ const enableAuth = this.configService.get('app.enableAuth');
41
+ const bearer = this.extractBearer(request);
42
+ if (bearer?.startsWith(API_TOKEN_PREFIX)) {
43
+ const user = await this.apiTokenService.validate(bearer);
44
+ if (!user) {
45
+ throw new UnauthorizedException('Invalid or expired API token');
46
+ }
47
+ request.user = user;
48
+ return true;
49
+ }
50
+ if (!enableAuth && !this.hasCredential(request, clientId)) {
51
+ const localUser = await this.userRepository.findOrCreateLocalUser();
52
+ request.user = {
53
+ userId: localUser.id,
54
+ type: localUser.type,
55
+ workerId: clientId,
56
+ roles: localUser.roles?.map((role) => role.name) ?? [],
57
+ };
58
+ return true;
59
+ }
32
60
  const result = await super.canActivate(context);
33
61
  if (!result) {
34
62
  return false;
35
63
  }
36
64
  const { user } = context.switchToHttp().getRequest();
37
- const enableAuth = this.configService.get('app.enableAuth');
38
65
  if (!enableAuth) {
39
66
  return user.type === UserTypeEnum.Local;
40
67
  }
41
- const clientId = this.configService.get('auth.clientId');
42
68
  return clientId === user.workerId;
43
69
  }
70
+ extractBearer(request) {
71
+ const header = request.headers.authorization;
72
+ if (!header?.startsWith('Bearer '))
73
+ return undefined;
74
+ return header.slice('Bearer '.length);
75
+ }
76
+ hasCredential(request, clientId) {
77
+ const cookies = request.cookies;
78
+ return Boolean(request.headers.authorization || (clientId && cookies?.[`${clientId}-access`]));
79
+ }
44
80
  };
45
81
  JwtAuthGuard = __decorate([
46
82
  Injectable(),
47
83
  __metadata("design:paramtypes", [Reflector,
48
- ConfigService])
84
+ ConfigService,
85
+ ApiTokenService,
86
+ UserRepository])
49
87
  ], JwtAuthGuard);
50
88
  export { JwtAuthGuard };
51
89
  //# 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,OAAO,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAwB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,SAAS,CAAC,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,aAAa,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;QAED,MAAM,EAAE,IAAI,EAAE,GAAmC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAGrF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC;QAC1C,CAAC;QAOD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC,CAAC;QACjE,OAAO,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;CACF,CAAA;AAxCY,YAAY;IADxB,UAAU,EAAE;qCAGmB,SAAS;QACL,aAAa;GAHpC,YAAY,CAwCxB"}
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class UserRepository {
5
5
  constructor(repository: Repository<User>);
6
6
  findById(id: string): Promise<User | null>;
7
7
  findLocalUser(): Promise<User | null>;
8
+ findOrCreateLocalUser(): Promise<User>;
8
9
  create(userData: Partial<User>): Promise<User>;
9
10
  update(id: string, userData: Partial<User>): Promise<User | null>;
10
11
  getRepository(): Repository<User>;
@@ -1 +1 @@
1
- {"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,qBACa,cAAc;IAGvB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC;IAGhC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAO1C,aAAa,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IASrC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKvE,aAAa;CAGd"}
1
+ {"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,qBACa,cAAc;IAGvB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC;IAGhC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAO1C,aAAa,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAUrC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKvE,aAAa;CAGd"}
@@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  import { Injectable } from '@nestjs/common';
14
14
  import { InjectRepository } from '@nestjs/typeorm';
15
+ import { randomUUID } from 'node:crypto';
15
16
  import { Repository } from 'typeorm';
16
17
  import { User } from '@loopstack/common';
17
18
  import { UserTypeEnum } from '@loopstack/common';
@@ -34,6 +35,17 @@ let UserRepository = class UserRepository {
34
35
  relations: ['roles'],
35
36
  });
36
37
  }
38
+ async findOrCreateLocalUser() {
39
+ const existing = await this.findLocalUser();
40
+ if (existing)
41
+ return existing;
42
+ return this.create({
43
+ id: randomUUID(),
44
+ type: UserTypeEnum.Local,
45
+ isActive: true,
46
+ roles: [],
47
+ });
48
+ }
37
49
  async create(userData) {
38
50
  const user = this.repository.create(userData);
39
51
  return this.repository.save(user);
@@ -1 +1 @@
1
- {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;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,YAAY,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,cAAc;IAD1B,UAAU,EAAE;IAGR,WAAA,gBAAgB,CAAC,IAAI,CAAC,CAAA;qCACH,UAAU;GAHrB,cAAc,CAmC1B"}
1
+ {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;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,YAAY,CAAC,KAAK;aACzB;YACD,SAAS,EAAE,CAAC,OAAO,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,qBAAqB;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,YAAY,CAAC,KAAK;YACxB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,EAAE;SACV,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;AAhDY,cAAc;IAD1B,UAAU,EAAE;IAGR,WAAA,gBAAgB,CAAC,IAAI,CAAC,CAAA;qCACH,UAAU;GAHrB,cAAc,CAgD1B"}
@@ -0,0 +1,18 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { Repository } from 'typeorm';
3
+ import { ApiTokenEntity, CurrentUserInterface } from '@loopstack/common';
4
+ import type { ApiTokenCreateInterface } from '@loopstack/contracts/api';
5
+ export declare class ApiTokenService {
6
+ private readonly apiTokenRepository;
7
+ private readonly configService;
8
+ private readonly logger;
9
+ constructor(apiTokenRepository: Repository<ApiTokenEntity>, configService: ConfigService);
10
+ create(userId: string, payload: ApiTokenCreateInterface): Promise<{
11
+ entity: ApiTokenEntity;
12
+ token: string;
13
+ }>;
14
+ list(userId: string): Promise<ApiTokenEntity[]>;
15
+ revoke(id: string, userId: string): Promise<void>;
16
+ validate(token: string): Promise<CurrentUserInterface | null>;
17
+ }
18
+ //# sourceMappingURL=api-token.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token.service.d.ts","sourceRoot":"","sources":["../../src/services/api-token.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAoB,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AASxE,qBACa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAIxC,kBAAkB,EAAE,UAAU,CAAC,cAAc,CAAC,EAC9C,aAAa,EAAE,aAAa;IAOzC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB5G,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;CAsBpE"}
@@ -0,0 +1,82 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var ApiTokenService_1;
14
+ import { Injectable, Logger, NotFoundException } from '@nestjs/common';
15
+ import { ConfigService } from '@nestjs/config';
16
+ import { InjectRepository } from '@nestjs/typeorm';
17
+ import { createHash, randomBytes } from 'node:crypto';
18
+ import { Repository } from 'typeorm';
19
+ import { API_TOKEN_PREFIX, ApiTokenEntity } from '@loopstack/common';
20
+ const LAST_USED_WRITE_INTERVAL_MS = 60 * 1000;
21
+ function hashToken(token) {
22
+ return createHash('sha256').update(token).digest('hex');
23
+ }
24
+ let ApiTokenService = ApiTokenService_1 = class ApiTokenService {
25
+ apiTokenRepository;
26
+ configService;
27
+ logger = new Logger(ApiTokenService_1.name);
28
+ constructor(apiTokenRepository, configService) {
29
+ this.apiTokenRepository = apiTokenRepository;
30
+ this.configService = configService;
31
+ }
32
+ async create(userId, payload) {
33
+ const token = API_TOKEN_PREFIX + randomBytes(32).toString('base64url');
34
+ const expiresAt = payload.expiresInDays ? new Date(Date.now() + payload.expiresInDays * 24 * 60 * 60 * 1000) : null;
35
+ const entity = await this.apiTokenRepository.save(this.apiTokenRepository.create({
36
+ name: payload.name,
37
+ tokenHash: hashToken(token),
38
+ userId,
39
+ expiresAt,
40
+ lastUsedAt: null,
41
+ }));
42
+ return { entity, token };
43
+ }
44
+ async list(userId) {
45
+ return this.apiTokenRepository.find({ where: { userId }, order: { createdAt: 'DESC' } });
46
+ }
47
+ async revoke(id, userId) {
48
+ const result = await this.apiTokenRepository.delete({ id, userId });
49
+ if (!result.affected) {
50
+ throw new NotFoundException(`API token ${id} not found`);
51
+ }
52
+ }
53
+ async validate(token) {
54
+ const entity = await this.apiTokenRepository.findOne({
55
+ where: { tokenHash: hashToken(token) },
56
+ relations: ['user', 'user.roles'],
57
+ });
58
+ if (!entity || !entity.user?.isActive)
59
+ return null;
60
+ if (entity.expiresAt && entity.expiresAt.getTime() < Date.now())
61
+ return null;
62
+ if (!entity.lastUsedAt || Date.now() - entity.lastUsedAt.getTime() > LAST_USED_WRITE_INTERVAL_MS) {
63
+ this.apiTokenRepository
64
+ .update(entity.id, { lastUsedAt: new Date() })
65
+ .catch((error) => this.logger.warn(`Failed to update lastUsedAt for token ${entity.id}:`, error));
66
+ }
67
+ return {
68
+ userId: entity.user.id,
69
+ type: entity.user.type,
70
+ workerId: this.configService.get('auth.clientId'),
71
+ roles: entity.user.roles?.map((role) => role.name) ?? [],
72
+ };
73
+ }
74
+ };
75
+ ApiTokenService = ApiTokenService_1 = __decorate([
76
+ Injectable(),
77
+ __param(0, InjectRepository(ApiTokenEntity)),
78
+ __metadata("design:paramtypes", [Repository,
79
+ ConfigService])
80
+ ], ApiTokenService);
81
+ export { ApiTokenService };
82
+ //# sourceMappingURL=api-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token.service.js","sourceRoot":"","sources":["../../src/services/api-token.service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
2
  import { User } from '@loopstack/common';
3
+ import { AuthUserInterface, WorkerInfoInterface } from '@loopstack/contracts/api';
3
4
  import { AuthResponseDto } from '../dtos/auth-response.dto.js';
4
- import { UserResponseDto } from '../dtos/user-response.dto.js';
5
- import { WorkerInfoDto } from '../dtos/worker-info.dto.js';
6
5
  import { UserRepository } from '../repositories/index.js';
7
6
  import { TokenService } from './token.service.js';
8
7
  export declare class AuthService {
@@ -12,8 +11,8 @@ export declare class AuthService {
12
11
  constructor(configService: ConfigService, userRepository: UserRepository, tokenService: TokenService);
13
12
  login(user: User): Promise<AuthResponseDto>;
14
13
  refresh(refreshToken: string): Promise<AuthResponseDto>;
15
- mapUserToResponse(user: User): UserResponseDto;
16
- getCurrentUser(userId: string): Promise<UserResponseDto>;
17
- getWorkerHealthInfo(): WorkerInfoDto;
14
+ mapUserToResponse(user: User): AuthUserInterface;
15
+ getCurrentUser(userId: string): Promise<AuthUserInterface>;
16
+ getWorkerHealthInfo(): WorkerInfoInterface;
18
17
  }
19
18
  //# sourceMappingURL=auth.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAuB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBACa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;gBAFH,aAAa,EAAE,aAAa,EACrC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY;IAG9B,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAgB3C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2B7D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe;IAUxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ9D,mBAAmB,IAAI,aAAa;CAcrC"}
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAuB,IAAI,EAAkB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAkB,mBAAmB,EAAoB,MAAM,0BAA0B,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBACa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;gBAFH,aAAa,EAAE,aAAa,EACrC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY;IAG9B,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAgB3C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2B7D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,iBAAiB;IAU1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQhE,mBAAmB,IAAI,mBAAmB;CAQ3C"}
@@ -9,8 +9,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { Injectable, UnauthorizedException } from '@nestjs/common';
11
11
  import { ConfigService } from '@nestjs/config';
12
- import { plainToInstance } from 'class-transformer';
13
- import { WorkerInfoDto } from '../dtos/worker-info.dto.js';
12
+ import { assertResponse } from '@loopstack/common';
13
+ import { AuthUserSchema, WorkerInfoSchema } from '@loopstack/contracts/api';
14
14
  import { UserRepository } from '../repositories/index.js';
15
15
  import { TokenService } from './token.service.js';
16
16
  let AuthService = class AuthService {
@@ -60,13 +60,13 @@ let AuthService = class AuthService {
60
60
  }
61
61
  }
62
62
  mapUserToResponse(user) {
63
- return {
63
+ return assertResponse(AuthUserSchema, {
64
64
  id: user.id,
65
65
  isActive: user.isActive,
66
66
  roles: user.roles?.map((role) => role.name) || [],
67
- createdAt: user.createdAt,
68
- updatedAt: user.updatedAt,
69
- };
67
+ createdAt: user.createdAt.toISOString(),
68
+ updatedAt: user.updatedAt.toISOString(),
69
+ });
70
70
  }
71
71
  async getCurrentUser(userId) {
72
72
  const user = await this.userRepository.findById(userId);
@@ -77,12 +77,10 @@ let AuthService = class AuthService {
77
77
  }
78
78
  getWorkerHealthInfo() {
79
79
  const enableAuth = this.configService.get('app.enableAuth');
80
- return plainToInstance(WorkerInfoDto, {
80
+ return assertResponse(WorkerInfoSchema, {
81
81
  clientId: enableAuth ? this.configService.get('auth.clientId') : 'local',
82
82
  isConfigured: !enableAuth || !!this.configService.get('auth.hub.jwksUri'),
83
- timestamp: new Date(),
84
- }, {
85
- excludeExtraneousValues: true,
83
+ timestamp: new Date().toISOString(),
86
84
  });
87
85
  }
88
86
  };
@@ -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,3 +1,4 @@
1
+ export * from './api-token.service.js';
1
2
  export * from './auth.service.js';
2
3
  export * from './token.service.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './api-token.service.js';
1
2
  export * from './auth.service.js';
2
3
  export * from './token.service.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -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;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;;;;AAE1D,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"}
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,0BAA0B,CAAC;;;;AAE1D,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;YAMjB,iBAAiB;IAoCzB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB5C"}
@@ -36,16 +36,7 @@ let HubStrategy = HubStrategy_1 = class HubStrategy extends PassportStrategy(Str
36
36
  return this.jwks;
37
37
  }
38
38
  async validateLocalUser() {
39
- const existingUser = await this.userRepository.findLocalUser();
40
- if (existingUser) {
41
- return existingUser;
42
- }
43
- const user = await this.userRepository.create({
44
- id: crypto.randomUUID(),
45
- type: UserTypeEnum.Local,
46
- isActive: true,
47
- roles: [],
48
- });
39
+ const user = await this.userRepository.findOrCreateLocalUser();
49
40
  this.logger.log(`Local authentication successful for user ${user.id}`);
50
41
  return user;
51
42
  }
@@ -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.35.0",
5
+ "version": "0.37.0",
6
6
  "license": "MIT",
7
7
  "author": {
8
8
  "name": "Jakob Klippel",
@@ -30,9 +30,9 @@
30
30
  "watch": "nest build --watch"
31
31
  },
32
32
  "dependencies": {
33
- "@loopstack/common": "^0.35.0",
34
- "@loopstack/contracts": "^0.35.0",
35
- "@loopstack/core": "^0.35.0",
33
+ "@loopstack/common": "^0.37.0",
34
+ "@loopstack/contracts": "^0.37.0",
35
+ "@loopstack/core": "^0.37.0",
36
36
  "axios": "^1.15.0",
37
37
  "cookie-parser": "^1.4.7",
38
38
  "jose": "^6.2.2",
@@ -1,5 +0,0 @@
1
- import type { HubLoginRequestInterface } from '@loopstack/contracts/api';
2
- export declare class HubLoginRequestDto implements HubLoginRequestInterface {
3
- idToken: string;
4
- }
5
- //# sourceMappingURL=hub-login-request.dto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-login-request.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,qBAAa,kBAAmB,YAAW,wBAAwB;IAEjE,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1,18 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Expose } from 'class-transformer';
11
- export class HubLoginRequestDto {
12
- idToken;
13
- }
14
- __decorate([
15
- Expose(),
16
- __metadata("design:type", String)
17
- ], HubLoginRequestDto.prototype, "idToken", void 0);
18
- //# sourceMappingURL=hub-login-request.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-login-request.dto.js","sourceRoot":"","sources":["../../src/dtos/hub-login-request.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,OAAO,kBAAkB;IAE7B,OAAO,CAAS;CACjB;AADC;IADC,MAAM,EAAE;;mDACO"}
@@ -1,5 +0,0 @@
1
- export declare class HubLoginResponseDto {
2
- id: string;
3
- message: string;
4
- }
5
- //# sourceMappingURL=hub-login-response.dto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-login-response.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/hub-login-response.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,mBAAmB;IAE9B,EAAE,EAAE,MAAM,CAAC;IAGX,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1,23 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Expose } from 'class-transformer';
11
- export class HubLoginResponseDto {
12
- id;
13
- message;
14
- }
15
- __decorate([
16
- Expose(),
17
- __metadata("design:type", String)
18
- ], HubLoginResponseDto.prototype, "id", void 0);
19
- __decorate([
20
- Expose(),
21
- __metadata("design:type", String)
22
- ], HubLoginResponseDto.prototype, "message", void 0);
23
- //# sourceMappingURL=hub-login-response.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hub-login-response.dto.js","sourceRoot":"","sources":["../../src/dtos/hub-login-response.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,mBAAmB;IAE9B,EAAE,CAAS;IAGX,OAAO,CAAS;CACjB;AAJC;IADC,MAAM,EAAE;;+CACE;AAGX;IADC,MAAM,EAAE;;oDACO"}
@@ -1,8 +0,0 @@
1
- export declare class UserResponseDto {
2
- id: string;
3
- isActive: boolean;
4
- roles: string[];
5
- createdAt: Date;
6
- updatedAt: Date;
7
- }
8
- //# sourceMappingURL=user-response.dto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-response.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/user-response.dto.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,EAAE,EAAG,MAAM,CAAC;IACZ,QAAQ,EAAG,OAAO,CAAC;IACnB,KAAK,EAAG,MAAM,EAAE,CAAC;IACjB,SAAS,EAAG,IAAI,CAAC;IACjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
@@ -1,8 +0,0 @@
1
- export class UserResponseDto {
2
- id;
3
- isActive;
4
- roles;
5
- createdAt;
6
- updatedAt;
7
- }
8
- //# sourceMappingURL=user-response.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-response.dto.js","sourceRoot":"","sources":["../../src/dtos/user-response.dto.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAC1B,EAAE,CAAU;IACZ,QAAQ,CAAW;IACnB,KAAK,CAAY;IACjB,SAAS,CAAQ;IACjB,SAAS,CAAQ;CAClB"}
@@ -1,7 +0,0 @@
1
- import type { WorkerInfoInterface } from '@loopstack/contracts/api';
2
- export declare class WorkerInfoDto implements WorkerInfoInterface {
3
- clientId?: string;
4
- isConfigured: boolean;
5
- timestamp: string;
6
- }
7
- //# sourceMappingURL=worker-info.dto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-info.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/worker-info.dto.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,qBAAa,aAAc,YAAW,mBAAmB;IAEvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,OAAO,CAAC;IAGtB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1,28 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Expose } from 'class-transformer';
11
- export class WorkerInfoDto {
12
- clientId;
13
- isConfigured;
14
- timestamp;
15
- }
16
- __decorate([
17
- Expose(),
18
- __metadata("design:type", String)
19
- ], WorkerInfoDto.prototype, "clientId", void 0);
20
- __decorate([
21
- Expose(),
22
- __metadata("design:type", Boolean)
23
- ], WorkerInfoDto.prototype, "isConfigured", void 0);
24
- __decorate([
25
- Expose(),
26
- __metadata("design:type", String)
27
- ], WorkerInfoDto.prototype, "timestamp", void 0);
28
- //# sourceMappingURL=worker-info.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-info.dto.js","sourceRoot":"","sources":["../../src/dtos/worker-info.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,OAAO,aAAa;IAExB,QAAQ,CAAU;IAGlB,YAAY,CAAU;IAGtB,SAAS,CAAS;CACnB;AAPC;IADC,MAAM,EAAE;;+CACS;AAGlB;IADC,MAAM,EAAE;;mDACa;AAGtB;IADC,MAAM,EAAE;;gDACS"}
@@ -1,12 +0,0 @@
1
- import { OnModuleInit } from '@nestjs/common';
2
- import { ConfigService } from '@nestjs/config';
3
- import { UserRepository } from '../repositories/index.js';
4
- export declare class LocalDevUserSeeder implements OnModuleInit {
5
- private readonly configService;
6
- private readonly userRepository;
7
- private readonly LOCAL_DEV_USER_ID;
8
- constructor(configService: ConfigService, userRepository: UserRepository);
9
- onModuleInit(): Promise<void>;
10
- getLocalDevUserId(): string;
11
- }
12
- //# sourceMappingURL=local-dev-user.seed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-dev-user.seed.d.ts","sourceRoot":"","sources":["../../src/seeds/local-dev-user.seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,qBACa,kBAAmB,YAAW,YAAY;IAInD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;gBAGzD,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAG3C,YAAY;IAkBlB,iBAAiB,IAAI,MAAM;CAG5B"}
@@ -1,45 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Injectable } from '@nestjs/common';
11
- import { ConfigService } from '@nestjs/config';
12
- import { UserRepository } from '../repositories/index.js';
13
- let LocalDevUserSeeder = class LocalDevUserSeeder {
14
- configService;
15
- userRepository;
16
- LOCAL_DEV_USER_ID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
17
- constructor(configService, userRepository) {
18
- this.configService = configService;
19
- this.userRepository = userRepository;
20
- }
21
- async onModuleInit() {
22
- const enableAuth = this.configService.get('app.enableAuth');
23
- if (enableAuth)
24
- return;
25
- const existingUser = await this.userRepository.findById(this.LOCAL_DEV_USER_ID);
26
- if (!existingUser) {
27
- await this.userRepository.create({
28
- id: this.LOCAL_DEV_USER_ID,
29
- isActive: true,
30
- roles: [],
31
- });
32
- console.log('✓ Local dev user created');
33
- }
34
- }
35
- getLocalDevUserId() {
36
- return this.LOCAL_DEV_USER_ID;
37
- }
38
- };
39
- LocalDevUserSeeder = __decorate([
40
- Injectable(),
41
- __metadata("design:paramtypes", [ConfigService,
42
- UserRepository])
43
- ], LocalDevUserSeeder);
44
- export { LocalDevUserSeeder };
45
- //# sourceMappingURL=local-dev-user.seed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-dev-user.seed.js","sourceRoot":"","sources":["../../src/seeds/local-dev-user.seed.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGnD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAIV;IACA;IAJF,iBAAiB,GAAG,sCAAsC,CAAC;IAE5E,YACmB,aAA4B,EAC5B,cAA8B;QAD9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;IAC9C,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;QACrE,IAAI,UAAU;YAAE,OAAO;QAGvB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEhF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC/B,EAAE,EAAE,IAAI,CAAC,iBAAiB;gBAC1B,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE;aACc,CAAC,CAAC;YAE3B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;CACF,CAAA;AA7BY,kBAAkB;IAD9B,UAAU,EAAE;qCAKuB,aAAa;QACZ,cAAc;GALtC,kBAAkB,CA6B9B"}