@tronsfey/ucli-server 0.5.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/README.md +423 -0
- package/README.zh.md +404 -0
- package/assets/logo.svg +138 -0
- package/dist/admin-ui/assets/index-BjdBylCY.css +1 -0
- package/dist/admin-ui/assets/index-CDwKIMTJ.js +117 -0
- package/dist/admin-ui/assets/remixicon-B25hvfAs.eot +0 -0
- package/dist/admin-ui/assets/remixicon-BTtOSOPh.svg +9709 -0
- package/dist/admin-ui/assets/remixicon-CZw4FkzQ.woff2 +0 -0
- package/dist/admin-ui/assets/remixicon-S6an_USy.woff +0 -0
- package/dist/admin-ui/assets/remixicon-sqouR8Ox.ttf +0 -0
- package/dist/admin-ui/dist/assets/index-BjdBylCY.css +1 -0
- package/dist/admin-ui/dist/assets/index-CDwKIMTJ.js +117 -0
- package/dist/admin-ui/dist/assets/index-CppEl63e.css +1 -0
- package/dist/admin-ui/dist/assets/index-DBkeGfMQ.js +117 -0
- package/dist/admin-ui/dist/assets/index-ss5EmsBH.js +117 -0
- package/dist/admin-ui/dist/assets/remixicon-B25hvfAs.eot +0 -0
- package/dist/admin-ui/dist/assets/remixicon-BTtOSOPh.svg +9709 -0
- package/dist/admin-ui/dist/assets/remixicon-CZw4FkzQ.woff2 +0 -0
- package/dist/admin-ui/dist/assets/remixicon-S6an_USy.woff +0 -0
- package/dist/admin-ui/dist/assets/remixicon-sqouR8Ox.ttf +0 -0
- package/dist/admin-ui/dist/index.html +14 -0
- package/dist/admin-ui/index.html +14 -0
- package/dist/app.module.d.ts +3 -0
- package/dist/app.module.d.ts.map +1 -0
- package/dist/app.module.js +65 -0
- package/dist/app.module.js.map +1 -0
- package/dist/auth/admin.guard.d.ts +8 -0
- package/dist/auth/admin.guard.d.ts.map +1 -0
- package/dist/auth/admin.guard.js +34 -0
- package/dist/auth/admin.guard.js.map +1 -0
- package/dist/auth/auth.module.d.ts +3 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.module.js +24 -0
- package/dist/auth/auth.module.js.map +1 -0
- package/dist/auth/decorators/jwt-payload.decorator.d.ts +2 -0
- package/dist/auth/decorators/jwt-payload.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/jwt-payload.decorator.js +10 -0
- package/dist/auth/decorators/jwt-payload.decorator.js.map +1 -0
- package/dist/auth/group-token.guard.d.ts +11 -0
- package/dist/auth/group-token.guard.d.ts.map +1 -0
- package/dist/auth/group-token.guard.js +53 -0
- package/dist/auth/group-token.guard.js.map +1 -0
- package/dist/cache/cache.interface.d.ts +8 -0
- package/dist/cache/cache.interface.d.ts.map +1 -0
- package/dist/cache/cache.interface.js +3 -0
- package/dist/cache/cache.interface.js.map +1 -0
- package/dist/cache/cache.module.d.ts +5 -0
- package/dist/cache/cache.module.d.ts.map +1 -0
- package/dist/cache/cache.module.js +56 -0
- package/dist/cache/cache.module.js.map +1 -0
- package/dist/cache/cache.token.d.ts +2 -0
- package/dist/cache/cache.token.d.ts.map +1 -0
- package/dist/cache/cache.token.js +5 -0
- package/dist/cache/cache.token.js.map +1 -0
- package/dist/cache/memory/memory-cache.adapter.d.ts +15 -0
- package/dist/cache/memory/memory-cache.adapter.d.ts.map +1 -0
- package/dist/cache/memory/memory-cache.adapter.js +52 -0
- package/dist/cache/memory/memory-cache.adapter.js.map +1 -0
- package/dist/cache/redis/redis-cache.adapter.d.ts +16 -0
- package/dist/cache/redis/redis-cache.adapter.d.ts.map +1 -0
- package/dist/cache/redis/redis-cache.adapter.js +63 -0
- package/dist/cache/redis/redis-cache.adapter.js.map +1 -0
- package/dist/config/app-config.module.d.ts +3 -0
- package/dist/config/app-config.module.d.ts.map +1 -0
- package/dist/config/app-config.module.js +100 -0
- package/dist/config/app-config.module.js.map +1 -0
- package/dist/config/app-config.service.d.ts +29 -0
- package/dist/config/app-config.service.d.ts.map +1 -0
- package/dist/config/app-config.service.js +66 -0
- package/dist/config/app-config.service.js.map +1 -0
- package/dist/crypto/crypto.module.d.ts +3 -0
- package/dist/crypto/crypto.module.d.ts.map +1 -0
- package/dist/crypto/crypto.module.js +22 -0
- package/dist/crypto/crypto.module.js.map +1 -0
- package/dist/crypto/encryption.service.d.ts +9 -0
- package/dist/crypto/encryption.service.d.ts.map +1 -0
- package/dist/crypto/encryption.service.js +59 -0
- package/dist/crypto/encryption.service.js.map +1 -0
- package/dist/crypto/jwt.service.d.ts +28 -0
- package/dist/crypto/jwt.service.d.ts.map +1 -0
- package/dist/crypto/jwt.service.js +72 -0
- package/dist/crypto/jwt.service.js.map +1 -0
- package/dist/groups/dto/create-group.dto.d.ts +5 -0
- package/dist/groups/dto/create-group.dto.d.ts.map +1 -0
- package/dist/groups/dto/create-group.dto.js +34 -0
- package/dist/groups/dto/create-group.dto.js.map +1 -0
- package/dist/groups/groups.controller.d.ts +9 -0
- package/dist/groups/groups.controller.d.ts.map +1 -0
- package/dist/groups/groups.controller.js +60 -0
- package/dist/groups/groups.controller.js.map +1 -0
- package/dist/groups/groups.module.d.ts +3 -0
- package/dist/groups/groups.module.d.ts.map +1 -0
- package/dist/groups/groups.module.js +25 -0
- package/dist/groups/groups.module.js.map +1 -0
- package/dist/groups/groups.service.d.ts +9 -0
- package/dist/groups/groups.service.d.ts.map +1 -0
- package/dist/groups/groups.service.js +45 -0
- package/dist/groups/groups.service.js.map +1 -0
- package/dist/health/health.controller.d.ts +13 -0
- package/dist/health/health.controller.d.ts.map +1 -0
- package/dist/health/health.controller.js +68 -0
- package/dist/health/health.controller.js.map +1 -0
- package/dist/health/health.module.d.ts +3 -0
- package/dist/health/health.module.d.ts.map +1 -0
- package/dist/health/health.module.js +22 -0
- package/dist/health/health.module.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +109 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/admin-mcp.controller.d.ts +13 -0
- package/dist/mcp/admin-mcp.controller.d.ts.map +1 -0
- package/dist/mcp/admin-mcp.controller.js +105 -0
- package/dist/mcp/admin-mcp.controller.js.map +1 -0
- package/dist/mcp/client-mcp.controller.d.ts +9 -0
- package/dist/mcp/client-mcp.controller.d.ts.map +1 -0
- package/dist/mcp/client-mcp.controller.js +63 -0
- package/dist/mcp/client-mcp.controller.js.map +1 -0
- package/dist/mcp/dto/create-mcp.dto.d.ts +11 -0
- package/dist/mcp/dto/create-mcp.dto.d.ts.map +1 -0
- package/dist/mcp/dto/create-mcp.dto.js +74 -0
- package/dist/mcp/dto/create-mcp.dto.js.map +1 -0
- package/dist/mcp/dto/update-mcp.dto.d.ts +11 -0
- package/dist/mcp/dto/update-mcp.dto.d.ts.map +1 -0
- package/dist/mcp/dto/update-mcp.dto.js +71 -0
- package/dist/mcp/dto/update-mcp.dto.js.map +1 -0
- package/dist/mcp/mcp.module.d.ts +3 -0
- package/dist/mcp/mcp.module.d.ts.map +1 -0
- package/dist/mcp/mcp.module.js +26 -0
- package/dist/mcp/mcp.module.js.map +1 -0
- package/dist/mcp/mcp.service.d.ts +16 -0
- package/dist/mcp/mcp.service.d.ts.map +1 -0
- package/dist/mcp/mcp.service.js +78 -0
- package/dist/mcp/mcp.service.js.map +1 -0
- package/dist/metrics/metrics.controller.d.ts +12 -0
- package/dist/metrics/metrics.controller.d.ts.map +1 -0
- package/dist/metrics/metrics.controller.js +71 -0
- package/dist/metrics/metrics.controller.js.map +1 -0
- package/dist/metrics/metrics.module.d.ts +3 -0
- package/dist/metrics/metrics.module.d.ts.map +1 -0
- package/dist/metrics/metrics.module.js +20 -0
- package/dist/metrics/metrics.module.js.map +1 -0
- package/dist/oas/admin-oas.controller.d.ts +12 -0
- package/dist/oas/admin-oas.controller.d.ts.map +1 -0
- package/dist/oas/admin-oas.controller.js +96 -0
- package/dist/oas/admin-oas.controller.js.map +1 -0
- package/dist/oas/client-oas.controller.d.ts +9 -0
- package/dist/oas/client-oas.controller.d.ts.map +1 -0
- package/dist/oas/client-oas.controller.js +63 -0
- package/dist/oas/client-oas.controller.js.map +1 -0
- package/dist/oas/dto/create-oas.dto.d.ts +12 -0
- package/dist/oas/dto/create-oas.dto.d.ts.map +1 -0
- package/dist/oas/dto/create-oas.dto.js +82 -0
- package/dist/oas/dto/create-oas.dto.js.map +1 -0
- package/dist/oas/dto/update-oas.dto.d.ts +12 -0
- package/dist/oas/dto/update-oas.dto.d.ts.map +1 -0
- package/dist/oas/dto/update-oas.dto.js +77 -0
- package/dist/oas/dto/update-oas.dto.js.map +1 -0
- package/dist/oas/oas.module.d.ts +3 -0
- package/dist/oas/oas.module.d.ts.map +1 -0
- package/dist/oas/oas.module.js +26 -0
- package/dist/oas/oas.module.js.map +1 -0
- package/dist/oas/oas.service.d.ts +16 -0
- package/dist/oas/oas.service.d.ts.map +1 -0
- package/dist/oas/oas.service.js +79 -0
- package/dist/oas/oas.service.js.map +1 -0
- package/dist/otel/otel.d.ts +25 -0
- package/dist/otel/otel.d.ts.map +1 -0
- package/dist/otel/otel.js +61 -0
- package/dist/otel/otel.js.map +1 -0
- package/dist/storage/interfaces/repos.interface.d.ts +158 -0
- package/dist/storage/interfaces/repos.interface.d.ts.map +1 -0
- package/dist/storage/interfaces/repos.interface.js +4 -0
- package/dist/storage/interfaces/repos.interface.js.map +1 -0
- package/dist/storage/memory/memory-group.repo.d.ts +9 -0
- package/dist/storage/memory/memory-group.repo.d.ts.map +1 -0
- package/dist/storage/memory/memory-group.repo.js +33 -0
- package/dist/storage/memory/memory-group.repo.js.map +1 -0
- package/dist/storage/memory/memory-mcp.repo.d.ts +13 -0
- package/dist/storage/memory/memory-mcp.repo.d.ts.map +1 -0
- package/dist/storage/memory/memory-mcp.repo.js +65 -0
- package/dist/storage/memory/memory-mcp.repo.js.map +1 -0
- package/dist/storage/memory/memory-oas.repo.d.ts +13 -0
- package/dist/storage/memory/memory-oas.repo.d.ts.map +1 -0
- package/dist/storage/memory/memory-oas.repo.js +55 -0
- package/dist/storage/memory/memory-oas.repo.js.map +1 -0
- package/dist/storage/memory/memory-token.repo.d.ts +11 -0
- package/dist/storage/memory/memory-token.repo.d.ts.map +1 -0
- package/dist/storage/memory/memory-token.repo.js +39 -0
- package/dist/storage/memory/memory-token.repo.js.map +1 -0
- package/dist/storage/storage.module.d.ts +5 -0
- package/dist/storage/storage.module.d.ts.map +1 -0
- package/dist/storage/storage.module.js +84 -0
- package/dist/storage/storage.module.js.map +1 -0
- package/dist/storage/storage.tokens.d.ts +5 -0
- package/dist/storage/storage.tokens.d.ts.map +1 -0
- package/dist/storage/storage.tokens.js +8 -0
- package/dist/storage/storage.tokens.js.map +1 -0
- package/dist/storage/typeorm/entities/group.entity.d.ts +12 -0
- package/dist/storage/typeorm/entities/group.entity.d.ts.map +1 -0
- package/dist/storage/typeorm/entities/group.entity.js +57 -0
- package/dist/storage/typeorm/entities/group.entity.js.map +1 -0
- package/dist/storage/typeorm/entities/mcp-entry.entity.d.ts +16 -0
- package/dist/storage/typeorm/entities/mcp-entry.entity.d.ts.map +1 -0
- package/dist/storage/typeorm/entities/mcp-entry.entity.js +82 -0
- package/dist/storage/typeorm/entities/mcp-entry.entity.js.map +1 -0
- package/dist/storage/typeorm/entities/oas-entry.entity.d.ts +17 -0
- package/dist/storage/typeorm/entities/oas-entry.entity.d.ts.map +1 -0
- package/dist/storage/typeorm/entities/oas-entry.entity.js +87 -0
- package/dist/storage/typeorm/entities/oas-entry.entity.js.map +1 -0
- package/dist/storage/typeorm/entities/token.entity.d.ts +13 -0
- package/dist/storage/typeorm/entities/token.entity.d.ts.map +1 -0
- package/dist/storage/typeorm/entities/token.entity.js +68 -0
- package/dist/storage/typeorm/entities/token.entity.js.map +1 -0
- package/dist/storage/typeorm/typeorm-group.repo.d.ts +12 -0
- package/dist/storage/typeorm/typeorm-group.repo.d.ts.map +1 -0
- package/dist/storage/typeorm/typeorm-group.repo.js +50 -0
- package/dist/storage/typeorm/typeorm-group.repo.js.map +1 -0
- package/dist/storage/typeorm/typeorm-mcp.repo.d.ts +15 -0
- package/dist/storage/typeorm/typeorm-mcp.repo.d.ts.map +1 -0
- package/dist/storage/typeorm/typeorm-mcp.repo.js +88 -0
- package/dist/storage/typeorm/typeorm-mcp.repo.js.map +1 -0
- package/dist/storage/typeorm/typeorm-oas.repo.d.ts +15 -0
- package/dist/storage/typeorm/typeorm-oas.repo.d.ts.map +1 -0
- package/dist/storage/typeorm/typeorm-oas.repo.js +92 -0
- package/dist/storage/typeorm/typeorm-oas.repo.js.map +1 -0
- package/dist/storage/typeorm/typeorm-token.repo.d.ts +13 -0
- package/dist/storage/typeorm/typeorm-token.repo.d.ts.map +1 -0
- package/dist/storage/typeorm/typeorm-token.repo.js +56 -0
- package/dist/storage/typeorm/typeorm-token.repo.js.map +1 -0
- package/dist/tokens/dto/issue-token.dto.d.ts +6 -0
- package/dist/tokens/dto/issue-token.dto.d.ts.map +1 -0
- package/dist/tokens/dto/issue-token.dto.js +41 -0
- package/dist/tokens/dto/issue-token.dto.js.map +1 -0
- package/dist/tokens/tokens.controller.d.ts +12 -0
- package/dist/tokens/tokens.controller.d.ts.map +1 -0
- package/dist/tokens/tokens.controller.js +89 -0
- package/dist/tokens/tokens.controller.js.map +1 -0
- package/dist/tokens/tokens.module.d.ts +3 -0
- package/dist/tokens/tokens.module.d.ts.map +1 -0
- package/dist/tokens/tokens.module.js +27 -0
- package/dist/tokens/tokens.module.js.map +1 -0
- package/dist/tokens/tokens.service.d.ts +25 -0
- package/dist/tokens/tokens.service.d.ts.map +1 -0
- package/dist/tokens/tokens.service.js +69 -0
- package/dist/tokens/tokens.service.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GroupsService } from '../groups/groups.service';
|
|
2
|
+
import { TokensService } from './tokens.service';
|
|
3
|
+
import { IssueTokenDto } from './dto/issue-token.dto';
|
|
4
|
+
export declare class TokensController {
|
|
5
|
+
private readonly tokensService;
|
|
6
|
+
private readonly groupsService;
|
|
7
|
+
constructor(tokensService: TokensService, groupsService: GroupsService);
|
|
8
|
+
list(groupId: string): Promise<import("../storage/interfaces/repos.interface").Token[]>;
|
|
9
|
+
issue(groupId: string, dto: IssueTokenDto): Promise<import("./tokens.service").IssueTokenResult>;
|
|
10
|
+
revoke(id: string): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=tokens.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.controller.d.ts","sourceRoot":"","sources":["../../src/tokens/tokens.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,qBAIa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa;IAOzC,IAAI,CAAmB,OAAO,EAAE,MAAM;IAUtC,KAAK,CAAmB,OAAO,EAAE,MAAM,EAAU,GAAG,EAAE,aAAa;IAgBnE,MAAM,CAAc,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TokensController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
18
|
+
const admin_guard_1 = require("../auth/admin.guard");
|
|
19
|
+
const groups_service_1 = require("../groups/groups.service");
|
|
20
|
+
const tokens_service_1 = require("./tokens.service");
|
|
21
|
+
const issue_token_dto_1 = require("./dto/issue-token.dto");
|
|
22
|
+
let TokensController = class TokensController {
|
|
23
|
+
tokensService;
|
|
24
|
+
groupsService;
|
|
25
|
+
constructor(tokensService, groupsService) {
|
|
26
|
+
this.tokensService = tokensService;
|
|
27
|
+
this.groupsService = groupsService;
|
|
28
|
+
}
|
|
29
|
+
async list(groupId) {
|
|
30
|
+
await this.groupsService.findById(groupId); // 404 if group missing
|
|
31
|
+
return this.tokensService.listByGroup(groupId);
|
|
32
|
+
}
|
|
33
|
+
async issue(groupId, dto) {
|
|
34
|
+
const group = await this.groupsService.findById(groupId);
|
|
35
|
+
return this.tokensService.issue({
|
|
36
|
+
groupId: group.id,
|
|
37
|
+
groupName: group.name,
|
|
38
|
+
name: dto.name,
|
|
39
|
+
scopes: dto.scopes,
|
|
40
|
+
ttlSec: dto.ttlSec,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async revoke(id) {
|
|
44
|
+
await this.tokensService.revoke(id);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.TokensController = TokensController;
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, common_1.Get)('groups/:groupId/tokens'),
|
|
50
|
+
(0, swagger_1.ApiOperation)({ summary: 'List tokens for a group (metadata only — JWTs not stored)' }),
|
|
51
|
+
(0, swagger_1.ApiResponse)({ status: 200, description: 'Token list' }),
|
|
52
|
+
(0, swagger_1.ApiResponse)({ status: 404, description: 'Group not found' }),
|
|
53
|
+
__param(0, (0, common_1.Param)('groupId')),
|
|
54
|
+
__metadata("design:type", Function),
|
|
55
|
+
__metadata("design:paramtypes", [String]),
|
|
56
|
+
__metadata("design:returntype", Promise)
|
|
57
|
+
], TokensController.prototype, "list", null);
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, common_1.Post)('groups/:groupId/tokens'),
|
|
60
|
+
(0, common_1.HttpCode)(201),
|
|
61
|
+
(0, swagger_1.ApiOperation)({ summary: 'Issue a JWT token for a group' }),
|
|
62
|
+
(0, swagger_1.ApiResponse)({ status: 201, description: 'Token issued successfully' }),
|
|
63
|
+
(0, swagger_1.ApiResponse)({ status: 404, description: 'Group not found' }),
|
|
64
|
+
__param(0, (0, common_1.Param)('groupId')),
|
|
65
|
+
__param(1, (0, common_1.Body)()),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", [String, issue_token_dto_1.IssueTokenDto]),
|
|
68
|
+
__metadata("design:returntype", Promise)
|
|
69
|
+
], TokensController.prototype, "issue", null);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, common_1.Delete)('tokens/:id'),
|
|
72
|
+
(0, common_1.HttpCode)(204),
|
|
73
|
+
(0, swagger_1.ApiOperation)({ summary: 'Revoke a token by ID' }),
|
|
74
|
+
(0, swagger_1.ApiResponse)({ status: 204, description: 'Token revoked' }),
|
|
75
|
+
(0, swagger_1.ApiResponse)({ status: 404, description: 'Token not found' }),
|
|
76
|
+
__param(0, (0, common_1.Param)('id')),
|
|
77
|
+
__metadata("design:type", Function),
|
|
78
|
+
__metadata("design:paramtypes", [String]),
|
|
79
|
+
__metadata("design:returntype", Promise)
|
|
80
|
+
], TokensController.prototype, "revoke", null);
|
|
81
|
+
exports.TokensController = TokensController = __decorate([
|
|
82
|
+
(0, swagger_1.ApiTags)('Admin / Tokens'),
|
|
83
|
+
(0, swagger_1.ApiSecurity)('AdminSecret'),
|
|
84
|
+
(0, common_1.Controller)('admin'),
|
|
85
|
+
(0, common_1.UseGuards)(admin_guard_1.AdminGuard),
|
|
86
|
+
__metadata("design:paramtypes", [tokens_service_1.TokensService,
|
|
87
|
+
groups_service_1.GroupsService])
|
|
88
|
+
], TokensController);
|
|
89
|
+
//# sourceMappingURL=tokens.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.controller.js","sourceRoot":"","sources":["../../src/tokens/tokens.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.module.d.ts","sourceRoot":"","sources":["../../src/tokens/tokens.module.ts"],"names":[],"mappings":"AAOA,qBAMa,YAAY;CAAG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TokensModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const auth_module_1 = require("../auth/auth.module");
|
|
12
|
+
const crypto_module_1 = require("../crypto/crypto.module");
|
|
13
|
+
const groups_module_1 = require("../groups/groups.module");
|
|
14
|
+
const tokens_controller_1 = require("./tokens.controller");
|
|
15
|
+
const tokens_service_1 = require("./tokens.service");
|
|
16
|
+
let TokensModule = class TokensModule {
|
|
17
|
+
};
|
|
18
|
+
exports.TokensModule = TokensModule;
|
|
19
|
+
exports.TokensModule = TokensModule = __decorate([
|
|
20
|
+
(0, common_1.Module)({
|
|
21
|
+
imports: [auth_module_1.AuthModule, crypto_module_1.CryptoModule, groups_module_1.GroupsModule],
|
|
22
|
+
controllers: [tokens_controller_1.TokensController],
|
|
23
|
+
providers: [tokens_service_1.TokensService],
|
|
24
|
+
exports: [tokens_service_1.TokensService],
|
|
25
|
+
})
|
|
26
|
+
], TokensModule);
|
|
27
|
+
//# sourceMappingURL=tokens.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.module.js","sourceRoot":"","sources":["../../src/tokens/tokens.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAuC;AACvC,qDAAgD;AAChD,2DAAsD;AACtD,2DAAsD;AACtD,2DAAsD;AACtD,qDAAgD;AAQzC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IANxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,wBAAU,EAAE,4BAAY,EAAE,4BAAY,CAAC;QACjD,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AppConfigService } from '../config/app-config.service';
|
|
2
|
+
import { JwtService } from '../crypto/jwt.service';
|
|
3
|
+
import type { ICacheAdapter } from '../cache/cache.interface';
|
|
4
|
+
import type { ITokenRepo, Token } from '../storage/interfaces/repos.interface';
|
|
5
|
+
export interface IssueTokenResult {
|
|
6
|
+
token: Token;
|
|
7
|
+
jwt: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class TokensService {
|
|
10
|
+
private readonly tokenRepo;
|
|
11
|
+
private readonly cache;
|
|
12
|
+
private readonly jwtService;
|
|
13
|
+
private readonly appConfig;
|
|
14
|
+
constructor(tokenRepo: ITokenRepo, cache: ICacheAdapter, jwtService: JwtService, appConfig: AppConfigService);
|
|
15
|
+
issue(opts: {
|
|
16
|
+
groupId: string;
|
|
17
|
+
groupName: string;
|
|
18
|
+
name: string;
|
|
19
|
+
scopes?: string[];
|
|
20
|
+
ttlSec?: number;
|
|
21
|
+
}): Promise<IssueTokenResult>;
|
|
22
|
+
listByGroup(groupId: string): Promise<Token[]>;
|
|
23
|
+
revoke(tokenId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=tokens.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.service.d.ts","sourceRoot":"","sources":["../../src/tokens/tokens.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAA;AAI9E,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAE/D,qBACa,aAAa;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHW,SAAS,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,EAC3C,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB;IAGxC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAahI,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAI9C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAW7C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TokensService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const node_crypto_1 = require("node:crypto");
|
|
18
|
+
const app_config_service_1 = require("../config/app-config.service");
|
|
19
|
+
const jwt_service_1 = require("../crypto/jwt.service");
|
|
20
|
+
const cache_token_1 = require("../cache/cache.token");
|
|
21
|
+
const storage_tokens_1 = require("../storage/storage.tokens");
|
|
22
|
+
const BLACKLIST_PREFIX = 'jti:blacklist:';
|
|
23
|
+
let TokensService = class TokensService {
|
|
24
|
+
tokenRepo;
|
|
25
|
+
cache;
|
|
26
|
+
jwtService;
|
|
27
|
+
appConfig;
|
|
28
|
+
constructor(tokenRepo, cache, jwtService, appConfig) {
|
|
29
|
+
this.tokenRepo = tokenRepo;
|
|
30
|
+
this.cache = cache;
|
|
31
|
+
this.jwtService = jwtService;
|
|
32
|
+
this.appConfig = appConfig;
|
|
33
|
+
}
|
|
34
|
+
async issue(opts) {
|
|
35
|
+
const jti = (0, node_crypto_1.randomUUID)();
|
|
36
|
+
const scopes = opts.scopes ?? ['oas:read'];
|
|
37
|
+
const ttl = opts.ttlSec ?? this.appConfig.jwtDefaultTtl;
|
|
38
|
+
const expiresAt = ttl > 0 ? new Date(Date.now() + ttl * 1000) : null;
|
|
39
|
+
const [token, jwt] = await Promise.all([
|
|
40
|
+
this.tokenRepo.create({ groupId: opts.groupId, name: opts.name, jti, scopes, expiresAt }),
|
|
41
|
+
this.jwtService.sign({ groupId: opts.groupId, groupName: opts.groupName, jti, scopes, expiresAt }),
|
|
42
|
+
]);
|
|
43
|
+
return { token, jwt };
|
|
44
|
+
}
|
|
45
|
+
async listByGroup(groupId) {
|
|
46
|
+
return this.tokenRepo.findByGroup(groupId);
|
|
47
|
+
}
|
|
48
|
+
async revoke(tokenId) {
|
|
49
|
+
const token = await this.tokenRepo.findById(tokenId);
|
|
50
|
+
if (!token)
|
|
51
|
+
throw new common_1.NotFoundException(`Token not found: ${tokenId}`);
|
|
52
|
+
if (token.revokedAt)
|
|
53
|
+
return;
|
|
54
|
+
await this.tokenRepo.revoke(tokenId, new Date());
|
|
55
|
+
const ttlSec = token.expiresAt
|
|
56
|
+
? Math.max(1, Math.floor((token.expiresAt.getTime() - Date.now()) / 1000))
|
|
57
|
+
: 60 * 60 * 24 * 365;
|
|
58
|
+
await this.cache.set(`${BLACKLIST_PREFIX}${token.jti}`, true, ttlSec);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.TokensService = TokensService;
|
|
62
|
+
exports.TokensService = TokensService = __decorate([
|
|
63
|
+
(0, common_1.Injectable)(),
|
|
64
|
+
__param(0, (0, common_1.Inject)(storage_tokens_1.TOKEN_REPO)),
|
|
65
|
+
__param(1, (0, common_1.Inject)(cache_token_1.CACHE_ADAPTER)),
|
|
66
|
+
__metadata("design:paramtypes", [Object, Object, jwt_service_1.JwtService,
|
|
67
|
+
app_config_service_1.AppConfigService])
|
|
68
|
+
], TokensService);
|
|
69
|
+
//# sourceMappingURL=tokens.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.service.js","sourceRoot":"","sources":["../../src/tokens/tokens.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tronsfey/ucli-server",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "ucli server — centralized OpenAPI and MCP management server with multi-database support",
|
|
5
|
+
"keywords": ["openapi", "oas", "gateway", "nestjs", "jwt", "api-management"],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"engines": { "node": ">=18" },
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**",
|
|
13
|
+
"assets/**",
|
|
14
|
+
"README.md",
|
|
15
|
+
"README.zh.md"
|
|
16
|
+
],
|
|
17
|
+
"bin": {
|
|
18
|
+
"ucli-server": "./dist/main.js"
|
|
19
|
+
},
|
|
20
|
+
"main": "./dist/main.js",
|
|
21
|
+
"types": "./dist/main.d.ts",
|
|
22
|
+
"scripts": {
|
|
23
|
+
"dev": "ts-node-dev --respawn --transpile-only src/main.ts",
|
|
24
|
+
"build": "tsc -p tsconfig.json",
|
|
25
|
+
"build:full": "pnpm --filter @tronsfey/ucli-admin build && cp -r ../admin/dist ./dist/admin-ui && tsc -p tsconfig.json",
|
|
26
|
+
"prepack": "pnpm --filter @tronsfey/ucli-admin build && mkdir -p dist && cp -r ../admin/dist ./dist/admin-ui",
|
|
27
|
+
"start": "node dist/main.js",
|
|
28
|
+
"start:prod": "NODE_ENV=production node dist/main.js",
|
|
29
|
+
"test": "jest --config jest.config.js",
|
|
30
|
+
"test:e2e": "jest --config jest-e2e.config.js",
|
|
31
|
+
"test:coverage": "jest --config jest.config.js --coverage",
|
|
32
|
+
"lint": "tsc --noEmit",
|
|
33
|
+
"clean": "rm -rf dist"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@nestjs/common": "^11.0.1",
|
|
37
|
+
"@nestjs/config": "^4.0.2",
|
|
38
|
+
"@nestjs/core": "^11.0.1",
|
|
39
|
+
"@nestjs/platform-express": "^11.0.1",
|
|
40
|
+
"@nestjs/swagger": "^8.1.0",
|
|
41
|
+
"@nestjs/terminus": "^11.0.0",
|
|
42
|
+
"@nestjs/throttler": "^6.4.0",
|
|
43
|
+
"@nestjs/typeorm": "^11.0.0",
|
|
44
|
+
"@opentelemetry/auto-instrumentations-node": "^0.71.0",
|
|
45
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.213.0",
|
|
46
|
+
"@opentelemetry/resources": "^2.6.0",
|
|
47
|
+
"@opentelemetry/sdk-node": "^0.213.0",
|
|
48
|
+
"@opentelemetry/semantic-conventions": "^1.40.0",
|
|
49
|
+
"class-transformer": "^0.5.1",
|
|
50
|
+
"class-validator": "^0.14.1",
|
|
51
|
+
"helmet": "^8.0.0",
|
|
52
|
+
"ioredis": "^5.6.0",
|
|
53
|
+
"joi": "^17.13.3",
|
|
54
|
+
"jose": "^5.10.0",
|
|
55
|
+
"mysql2": "^3.14.0",
|
|
56
|
+
"nestjs-pino": "^4.3.0",
|
|
57
|
+
"pg": "^8.13.3",
|
|
58
|
+
"pino": "^9.7.0",
|
|
59
|
+
"pino-http": "^10.4.0",
|
|
60
|
+
"pino-pretty": "^13.0.0",
|
|
61
|
+
"prom-client": "^15.1.3",
|
|
62
|
+
"reflect-metadata": "^0.2.2",
|
|
63
|
+
"rxjs": "^7.8.2",
|
|
64
|
+
"typeorm": "^0.3.21",
|
|
65
|
+
"uuid": "^11.1.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@nestjs/testing": "^11.0.1",
|
|
69
|
+
"@types/express": "^5.0.1",
|
|
70
|
+
"@types/jest": "^29.5.14",
|
|
71
|
+
"@types/node": "^22.14.0",
|
|
72
|
+
"@types/supertest": "^6.0.3",
|
|
73
|
+
"@types/uuid": "^10.0.0",
|
|
74
|
+
"jest": "^29.7.0",
|
|
75
|
+
"supertest": "^7.1.0",
|
|
76
|
+
"ts-jest": "^29.3.2",
|
|
77
|
+
"ts-node": "^10.9.2",
|
|
78
|
+
"ts-node-dev": "^2.0.0",
|
|
79
|
+
"typescript": "^5.7.3"
|
|
80
|
+
}
|
|
81
|
+
}
|