@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.
- package/dist/auth.module.d.ts.map +1 -1
- package/dist/auth.module.js +7 -6
- package/dist/auth.module.js.map +1 -1
- package/dist/controllers/api-token.controller.d.ts +11 -0
- package/dist/controllers/api-token.controller.d.ts.map +1 -0
- package/dist/controllers/api-token.controller.js +71 -0
- package/dist/controllers/api-token.controller.js.map +1 -0
- package/dist/controllers/auth.controller.d.ts +7 -14
- package/dist/controllers/auth.controller.d.ts.map +1 -1
- package/dist/controllers/auth.controller.js +6 -7
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/index.d.ts +1 -0
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +1 -0
- package/dist/controllers/index.js.map +1 -1
- package/dist/guards/jwt-auth.guard.d.ts +7 -1
- package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
- package/dist/guards/jwt-auth.guard.js +44 -6
- package/dist/guards/jwt-auth.guard.js.map +1 -1
- package/dist/repositories/user.repository.d.ts +1 -0
- package/dist/repositories/user.repository.d.ts.map +1 -1
- package/dist/repositories/user.repository.js +12 -0
- package/dist/repositories/user.repository.js.map +1 -1
- package/dist/services/api-token.service.d.ts +18 -0
- package/dist/services/api-token.service.d.ts.map +1 -0
- package/dist/services/api-token.service.js +82 -0
- package/dist/services/api-token.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +4 -5
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +8 -10
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/strategies/hub.strategy.d.ts.map +1 -1
- package/dist/strategies/hub.strategy.js +1 -10
- package/dist/strategies/hub.strategy.js.map +1 -1
- package/package.json +4 -4
- package/dist/dtos/hub-login-request.dto.d.ts +0 -5
- package/dist/dtos/hub-login-request.dto.d.ts.map +0 -1
- package/dist/dtos/hub-login-request.dto.js +0 -18
- package/dist/dtos/hub-login-request.dto.js.map +0 -1
- package/dist/dtos/hub-login-response.dto.d.ts +0 -5
- package/dist/dtos/hub-login-response.dto.d.ts.map +0 -1
- package/dist/dtos/hub-login-response.dto.js +0 -23
- package/dist/dtos/hub-login-response.dto.js.map +0 -1
- package/dist/dtos/user-response.dto.d.ts +0 -8
- package/dist/dtos/user-response.dto.d.ts.map +0 -1
- package/dist/dtos/user-response.dto.js +0 -8
- package/dist/dtos/user-response.dto.js.map +0 -1
- package/dist/dtos/worker-info.dto.d.ts +0 -7
- package/dist/dtos/worker-info.dto.d.ts.map +0 -1
- package/dist/dtos/worker-info.dto.js +0 -28
- package/dist/dtos/worker-info.dto.js.map +0 -1
- package/dist/seeds/local-dev-user.seed.d.ts +0 -12
- package/dist/seeds/local-dev-user.seed.d.ts.map +0 -1
- package/dist/seeds/local-dev-user.seed.js +0 -45
- 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;
|
|
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"}
|
package/dist/auth.module.js
CHANGED
|
@@ -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
|
};
|
package/dist/auth.module.js.map
CHANGED
|
@@ -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/
|
|
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 {
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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<
|
|
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,
|
|
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 {
|
|
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(
|
|
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",
|
|
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", [
|
|
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":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExG,OAAO,EAAE,WAAW,EAAwB,MAAM,EAAQ,
|
|
1
|
+
{"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/controllers/auth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 +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
|
-
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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":"
|
|
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;
|
|
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):
|
|
16
|
-
getCurrentUser(userId: string): Promise<
|
|
17
|
-
getWorkerHealthInfo():
|
|
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;
|
|
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 {
|
|
13
|
-
import {
|
|
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
|
|
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":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/services/index.js
CHANGED
|
@@ -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;
|
|
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
|
|
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":";;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAmB,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGnD,IAAM,WAAW,mBAAjB,MAAM,WAAY,SAAQ,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAK7C;IACA;IALF,MAAM,GAAG,IAAI,MAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,GAA2B,IAAI,CAAC;IAE5C,YACmB,aAA4B,EAC5B,cAA8B;QAE/C,KAAK,EAAE,CAAC;QAHS,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;IAGjD,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,kBAAkB,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,
|
|
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.
|
|
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.
|
|
34
|
-
"@loopstack/contracts": "^0.
|
|
35
|
-
"@loopstack/core": "^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 +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 +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 +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 +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 +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"}
|