@memo-code/memo 0.8.5 → 0.8.6

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 (97) hide show
  1. package/dist/web/server/main.cjs +145360 -0
  2. package/package.json +2 -1
  3. package/dist/web/server/app.controller.d.ts +0 -6
  4. package/dist/web/server/app.controller.js +0 -33
  5. package/dist/web/server/app.module.d.ts +0 -4
  6. package/dist/web/server/app.module.js +0 -61
  7. package/dist/web/server/auth/access-token.guard.d.ts +0 -9
  8. package/dist/web/server/auth/access-token.guard.js +0 -53
  9. package/dist/web/server/auth/auth.controller.d.ts +0 -18
  10. package/dist/web/server/auth/auth.controller.js +0 -75
  11. package/dist/web/server/auth/auth.module.d.ts +0 -2
  12. package/dist/web/server/auth/auth.module.js +0 -24
  13. package/dist/web/server/auth/auth.service.d.ts +0 -15
  14. package/dist/web/server/auth/auth.service.js +0 -146
  15. package/dist/web/server/auth/auth.types.d.ts +0 -26
  16. package/dist/web/server/auth/auth.types.js +0 -2
  17. package/dist/web/server/auth/public.decorator.d.ts +0 -2
  18. package/dist/web/server/auth/public.decorator.js +0 -7
  19. package/dist/web/server/chat/chat.controller.d.ts +0 -30
  20. package/dist/web/server/chat/chat.controller.js +0 -150
  21. package/dist/web/server/chat/chat.module.d.ts +0 -2
  22. package/dist/web/server/chat/chat.module.js +0 -26
  23. package/dist/web/server/chat/chat.service.d.ts +0 -61
  24. package/dist/web/server/chat/chat.service.js +0 -847
  25. package/dist/web/server/chat/chat.types.d.ts +0 -38
  26. package/dist/web/server/chat/chat.types.js +0 -2
  27. package/dist/web/server/common/constants.d.ts +0 -1
  28. package/dist/web/server/common/constants.js +0 -4
  29. package/dist/web/server/common/filters/api-error.filter.d.ts +0 -7
  30. package/dist/web/server/common/filters/api-error.filter.js +0 -95
  31. package/dist/web/server/common/interceptors/api-response.interceptor.d.ts +0 -15
  32. package/dist/web/server/common/interceptors/api-response.interceptor.js +0 -51
  33. package/dist/web/server/common/middleware/request-logging.middleware.d.ts +0 -7
  34. package/dist/web/server/common/middleware/request-logging.middleware.js +0 -42
  35. package/dist/web/server/config/memo-config.service.d.ts +0 -7
  36. package/dist/web/server/config/memo-config.service.js +0 -106
  37. package/dist/web/server/config/memo-config.types.d.ts +0 -6
  38. package/dist/web/server/config/memo-config.types.js +0 -2
  39. package/dist/web/server/config/server-config.module.d.ts +0 -2
  40. package/dist/web/server/config/server-config.module.js +0 -22
  41. package/dist/web/server/config/server-config.service.d.ts +0 -14
  42. package/dist/web/server/config/server-config.service.js +0 -326
  43. package/dist/web/server/config/server-config.service.test.d.ts +0 -1
  44. package/dist/web/server/config/server-config.service.test.js +0 -193
  45. package/dist/web/server/config/server-config.types.d.ts +0 -27
  46. package/dist/web/server/config/server-config.types.js +0 -2
  47. package/dist/web/server/main.d.ts +0 -1
  48. package/dist/web/server/main.js +0 -19
  49. package/dist/web/server/mcp/mcp.controller.d.ts +0 -38
  50. package/dist/web/server/mcp/mcp.controller.js +0 -126
  51. package/dist/web/server/mcp/mcp.module.d.ts +0 -2
  52. package/dist/web/server/mcp/mcp.module.js +0 -22
  53. package/dist/web/server/mcp/mcp.service.d.ts +0 -25
  54. package/dist/web/server/mcp/mcp.service.js +0 -56
  55. package/dist/web/server/server.d.ts +0 -18
  56. package/dist/web/server/server.js +0 -142
  57. package/dist/web/server/sessions/sessions.controller.d.ts +0 -8
  58. package/dist/web/server/sessions/sessions.controller.js +0 -59
  59. package/dist/web/server/sessions/sessions.module.d.ts +0 -2
  60. package/dist/web/server/sessions/sessions.module.js +0 -24
  61. package/dist/web/server/sessions/sessions.service.d.ts +0 -22
  62. package/dist/web/server/sessions/sessions.service.js +0 -217
  63. package/dist/web/server/sessions/sessions.types.d.ts +0 -18
  64. package/dist/web/server/sessions/sessions.types.js +0 -2
  65. package/dist/web/server/skills/skills.controller.d.ts +0 -31
  66. package/dist/web/server/skills/skills.controller.js +0 -86
  67. package/dist/web/server/skills/skills.module.d.ts +0 -2
  68. package/dist/web/server/skills/skills.module.js +0 -24
  69. package/dist/web/server/skills/skills.service.d.ts +0 -38
  70. package/dist/web/server/skills/skills.service.js +0 -97
  71. package/dist/web/server/stream/stream.module.d.ts +0 -2
  72. package/dist/web/server/stream/stream.module.js +0 -20
  73. package/dist/web/server/stream/stream.service.d.ts +0 -26
  74. package/dist/web/server/stream/stream.service.js +0 -166
  75. package/dist/web/server/tsconfig.build.tsbuildinfo +0 -1
  76. package/dist/web/server/workspaces/workspaces.module.d.ts +0 -2
  77. package/dist/web/server/workspaces/workspaces.module.js +0 -20
  78. package/dist/web/server/workspaces/workspaces.service.d.ts +0 -38
  79. package/dist/web/server/workspaces/workspaces.service.js +0 -378
  80. package/dist/web/server/workspaces/workspaces.types.d.ts +0 -1
  81. package/dist/web/server/workspaces/workspaces.types.js +0 -2
  82. package/dist/web/server/workspaces/workspaces.utils.d.ts +0 -1
  83. package/dist/web/server/workspaces/workspaces.utils.js +0 -9
  84. package/dist/web/server/ws/rpc-router.service.d.ts +0 -20
  85. package/dist/web/server/ws/rpc-router.service.js +0 -275
  86. package/dist/web/server/ws/session-runtime-registry.service.d.ts +0 -37
  87. package/dist/web/server/ws/session-runtime-registry.service.js +0 -118
  88. package/dist/web/server/ws/ws-event-bus.service.d.ts +0 -5
  89. package/dist/web/server/ws/ws-event-bus.service.js +0 -27
  90. package/dist/web/server/ws/ws-gateway.module.d.ts +0 -2
  91. package/dist/web/server/ws/ws-gateway.module.js +0 -42
  92. package/dist/web/server/ws/ws-gateway.service.d.ts +0 -42
  93. package/dist/web/server/ws/ws-gateway.service.js +0 -473
  94. package/dist/web/server/ws/ws.errors.d.ts +0 -8
  95. package/dist/web/server/ws/ws.errors.js +0 -16
  96. package/dist/web/server/ws/ws.types.d.ts +0 -34
  97. package/dist/web/server/ws/ws.types.js +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memo-code/memo",
3
- "version": "0.8.5",
3
+ "version": "0.8.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "A lightweight coding agent that runs in your terminal",
@@ -22,6 +22,7 @@
22
22
  "@types/node": "^22.10.2",
23
23
  "@types/react": "^19.2.14",
24
24
  "@vitest/coverage-v8": "^2.1.9",
25
+ "esbuild": "^0.27.2",
25
26
  "prettier": "^3.3.3",
26
27
  "tsup": "^8.3.5",
27
28
  "tsx": "^4.19.2",
@@ -1,6 +0,0 @@
1
- export declare class AppController {
2
- healthz(): {
3
- status: string;
4
- service: string;
5
- };
6
- }
@@ -1,33 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AppController = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const public_decorator_1 = require("./auth/public.decorator");
15
- let AppController = class AppController {
16
- healthz() {
17
- return {
18
- status: 'ok',
19
- service: 'memo-web-server',
20
- };
21
- }
22
- };
23
- exports.AppController = AppController;
24
- __decorate([
25
- (0, public_decorator_1.Public)(),
26
- (0, common_1.Get)('healthz'),
27
- __metadata("design:type", Function),
28
- __metadata("design:paramtypes", []),
29
- __metadata("design:returntype", void 0)
30
- ], AppController.prototype, "healthz", null);
31
- exports.AppController = AppController = __decorate([
32
- (0, common_1.Controller)()
33
- ], AppController);
@@ -1,4 +0,0 @@
1
- import { MiddlewareConsumer, type NestModule } from '@nestjs/common';
2
- export declare class AppModule implements NestModule {
3
- configure(consumer: MiddlewareConsumer): void;
4
- }
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.AppModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const core_1 = require("@nestjs/core");
12
- const access_token_guard_1 = require("./auth/access-token.guard");
13
- const auth_module_1 = require("./auth/auth.module");
14
- const app_controller_1 = require("./app.controller");
15
- const api_error_filter_1 = require("./common/filters/api-error.filter");
16
- const api_response_interceptor_1 = require("./common/interceptors/api-response.interceptor");
17
- const request_logging_middleware_1 = require("./common/middleware/request-logging.middleware");
18
- const server_config_module_1 = require("./config/server-config.module");
19
- const chat_module_1 = require("./chat/chat.module");
20
- const mcp_module_1 = require("./mcp/mcp.module");
21
- const sessions_module_1 = require("./sessions/sessions.module");
22
- const skills_module_1 = require("./skills/skills.module");
23
- const stream_module_1 = require("./stream/stream.module");
24
- const ws_gateway_module_1 = require("./ws/ws-gateway.module");
25
- const workspaces_module_1 = require("./workspaces/workspaces.module");
26
- let AppModule = class AppModule {
27
- configure(consumer) {
28
- consumer.apply(request_logging_middleware_1.RequestLoggingMiddleware).forRoutes('*');
29
- }
30
- };
31
- exports.AppModule = AppModule;
32
- exports.AppModule = AppModule = __decorate([
33
- (0, common_1.Module)({
34
- imports: [
35
- server_config_module_1.ServerConfigModule,
36
- workspaces_module_1.WorkspacesModule,
37
- auth_module_1.AuthModule,
38
- sessions_module_1.SessionsModule,
39
- stream_module_1.StreamModule,
40
- chat_module_1.ChatModule,
41
- mcp_module_1.McpModule,
42
- skills_module_1.SkillsModule,
43
- ws_gateway_module_1.WsGatewayModule,
44
- ],
45
- controllers: [app_controller_1.AppController],
46
- providers: [
47
- {
48
- provide: core_1.APP_GUARD,
49
- useClass: access_token_guard_1.AccessTokenGuard,
50
- },
51
- {
52
- provide: core_1.APP_INTERCEPTOR,
53
- useClass: api_response_interceptor_1.ApiResponseInterceptor,
54
- },
55
- {
56
- provide: core_1.APP_FILTER,
57
- useClass: api_error_filter_1.ApiErrorFilter,
58
- },
59
- ],
60
- })
61
- ], AppModule);
@@ -1,9 +0,0 @@
1
- import { CanActivate, ExecutionContext } from '@nestjs/common';
2
- import { Reflector } from '@nestjs/core';
3
- import { AuthService } from './auth.service';
4
- export declare class AccessTokenGuard implements CanActivate {
5
- private readonly reflector;
6
- private readonly authService;
7
- constructor(reflector: Reflector, authService: AuthService);
8
- canActivate(context: ExecutionContext): Promise<boolean>;
9
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AccessTokenGuard = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const core_1 = require("@nestjs/core");
15
- const public_decorator_1 = require("./public.decorator");
16
- const auth_service_1 = require("./auth.service");
17
- function extractBearerToken(authorization) {
18
- if (!authorization) {
19
- throw new common_1.UnauthorizedException('Missing Authorization header');
20
- }
21
- const [scheme, token] = authorization.split(' ');
22
- if (scheme !== 'Bearer' || !token) {
23
- throw new common_1.UnauthorizedException('Invalid Authorization header');
24
- }
25
- return token.trim();
26
- }
27
- let AccessTokenGuard = class AccessTokenGuard {
28
- reflector;
29
- authService;
30
- constructor(reflector, authService) {
31
- this.reflector = reflector;
32
- this.authService = authService;
33
- }
34
- async canActivate(context) {
35
- const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_ROUTE, [context.getHandler(), context.getClass()]);
36
- if (isPublic)
37
- return true;
38
- const request = context.switchToHttp().getRequest();
39
- const token = extractBearerToken(request.headers.authorization);
40
- const payload = await this.authService.verifyAccessToken(token);
41
- request.user = {
42
- username: payload.sub,
43
- tokenId: payload.jti,
44
- };
45
- return true;
46
- }
47
- };
48
- exports.AccessTokenGuard = AccessTokenGuard;
49
- exports.AccessTokenGuard = AccessTokenGuard = __decorate([
50
- (0, common_1.Injectable)(),
51
- __metadata("design:paramtypes", [core_1.Reflector,
52
- auth_service_1.AuthService])
53
- ], AccessTokenGuard);
@@ -1,18 +0,0 @@
1
- import { AuthService } from './auth.service';
2
- type LoginBody = {
3
- username?: unknown;
4
- password?: unknown;
5
- };
6
- type RefreshBody = {
7
- refreshToken?: unknown;
8
- };
9
- export declare class AuthController {
10
- private readonly authService;
11
- constructor(authService: AuthService);
12
- login(body: LoginBody): Promise<import("./auth.types").AuthTokenPair>;
13
- refresh(body: RefreshBody): Promise<import("./auth.types").AuthTokenPair>;
14
- logout(body: RefreshBody): Promise<{
15
- loggedOut: boolean;
16
- }>;
17
- }
18
- export {};
@@ -1,75 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __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.AuthController = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const public_decorator_1 = require("./public.decorator");
18
- const auth_service_1 = require("./auth.service");
19
- function requiredString(value, field) {
20
- if (typeof value !== 'string') {
21
- throw new common_1.BadRequestException(`${field} is required`);
22
- }
23
- const trimmed = value.trim();
24
- if (!trimmed) {
25
- throw new common_1.BadRequestException(`${field} is required`);
26
- }
27
- return trimmed;
28
- }
29
- let AuthController = class AuthController {
30
- authService;
31
- constructor(authService) {
32
- this.authService = authService;
33
- }
34
- async login(body) {
35
- const username = requiredString(body.username, 'username');
36
- const password = requiredString(body.password, 'password');
37
- return this.authService.login(username, password);
38
- }
39
- async refresh(body) {
40
- const refreshToken = requiredString(body.refreshToken, 'refreshToken');
41
- return this.authService.refresh(refreshToken);
42
- }
43
- async logout(body) {
44
- const refreshToken = requiredString(body.refreshToken, 'refreshToken');
45
- await this.authService.revokeRefreshToken(refreshToken);
46
- return { loggedOut: true };
47
- }
48
- };
49
- exports.AuthController = AuthController;
50
- __decorate([
51
- (0, common_1.Post)('login'),
52
- __param(0, (0, common_1.Body)()),
53
- __metadata("design:type", Function),
54
- __metadata("design:paramtypes", [Object]),
55
- __metadata("design:returntype", Promise)
56
- ], AuthController.prototype, "login", null);
57
- __decorate([
58
- (0, common_1.Post)('refresh'),
59
- __param(0, (0, common_1.Body)()),
60
- __metadata("design:type", Function),
61
- __metadata("design:paramtypes", [Object]),
62
- __metadata("design:returntype", Promise)
63
- ], AuthController.prototype, "refresh", null);
64
- __decorate([
65
- (0, common_1.Post)('logout'),
66
- __param(0, (0, common_1.Body)()),
67
- __metadata("design:type", Function),
68
- __metadata("design:paramtypes", [Object]),
69
- __metadata("design:returntype", Promise)
70
- ], AuthController.prototype, "logout", null);
71
- exports.AuthController = AuthController = __decorate([
72
- (0, public_decorator_1.Public)(),
73
- (0, common_1.Controller)('api/auth'),
74
- __metadata("design:paramtypes", [auth_service_1.AuthService])
75
- ], AuthController);
@@ -1,2 +0,0 @@
1
- export declare class AuthModule {
2
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.AuthModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const jwt_1 = require("@nestjs/jwt");
12
- const auth_controller_1 = require("./auth.controller");
13
- const auth_service_1 = require("./auth.service");
14
- let AuthModule = class AuthModule {
15
- };
16
- exports.AuthModule = AuthModule;
17
- exports.AuthModule = AuthModule = __decorate([
18
- (0, common_1.Module)({
19
- imports: [jwt_1.JwtModule.register({})],
20
- controllers: [auth_controller_1.AuthController],
21
- providers: [auth_service_1.AuthService],
22
- exports: [auth_service_1.AuthService],
23
- })
24
- ], AuthModule);
@@ -1,15 +0,0 @@
1
- import { JwtService } from '@nestjs/jwt';
2
- import { ServerConfigService } from '../config/server-config.service';
3
- import type { AccessTokenPayload, AuthTokenPair } from './auth.types';
4
- export declare class AuthService {
5
- private readonly jwtService;
6
- private readonly serverConfigService;
7
- private readonly refreshTokenStore;
8
- constructor(jwtService: JwtService, serverConfigService: ServerConfigService);
9
- login(username: string, password: string): Promise<AuthTokenPair>;
10
- refresh(refreshToken: string): Promise<AuthTokenPair>;
11
- revokeRefreshToken(refreshToken: string): Promise<void>;
12
- verifyAccessToken(accessToken: string): Promise<AccessTokenPayload>;
13
- private issueTokenPair;
14
- private pruneExpiredRefreshTokens;
15
- }
@@ -1,146 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AuthService = void 0;
13
- const node_crypto_1 = require("node:crypto");
14
- const common_1 = require("@nestjs/common");
15
- const jwt_1 = require("@nestjs/jwt");
16
- const server_config_service_1 = require("../config/server-config.service");
17
- function secureEqual(expected, actual) {
18
- const expectedBuffer = Buffer.from(expected);
19
- const actualBuffer = Buffer.from(actual);
20
- if (expectedBuffer.length !== actualBuffer.length)
21
- return false;
22
- return (0, node_crypto_1.timingSafeEqual)(expectedBuffer, actualBuffer);
23
- }
24
- let AuthService = class AuthService {
25
- jwtService;
26
- serverConfigService;
27
- refreshTokenStore = new Map();
28
- constructor(jwtService, serverConfigService) {
29
- this.jwtService = jwtService;
30
- this.serverConfigService = serverConfigService;
31
- }
32
- async login(username, password) {
33
- const config = await this.serverConfigService.load();
34
- const auth = config.auth;
35
- if (!secureEqual(auth.username, username) ||
36
- !secureEqual(auth.password, password)) {
37
- throw new common_1.UnauthorizedException('Invalid username or password');
38
- }
39
- return this.issueTokenPair(auth.username, auth);
40
- }
41
- async refresh(refreshToken) {
42
- const config = await this.serverConfigService.load();
43
- const auth = config.auth;
44
- this.pruneExpiredRefreshTokens();
45
- let payload;
46
- try {
47
- payload = this.jwtService.verify(refreshToken, {
48
- secret: auth.refreshTokenSecret,
49
- });
50
- }
51
- catch {
52
- throw new common_1.UnauthorizedException('Invalid refresh token');
53
- }
54
- if (payload.type !== 'refresh' || !payload.sub || !payload.jti) {
55
- throw new common_1.UnauthorizedException('Invalid refresh token');
56
- }
57
- const record = this.refreshTokenStore.get(payload.jti);
58
- if (!record ||
59
- record.username !== payload.sub ||
60
- record.expiresAt <= Date.now()) {
61
- this.refreshTokenStore.delete(payload.jti);
62
- throw new common_1.UnauthorizedException('Refresh token expired or revoked');
63
- }
64
- this.refreshTokenStore.delete(payload.jti);
65
- return this.issueTokenPair(payload.sub, auth);
66
- }
67
- async revokeRefreshToken(refreshToken) {
68
- const config = await this.serverConfigService.load();
69
- let payload = null;
70
- try {
71
- payload = this.jwtService.verify(refreshToken, {
72
- secret: config.auth.refreshTokenSecret,
73
- });
74
- }
75
- catch {
76
- return;
77
- }
78
- if (payload?.jti) {
79
- this.refreshTokenStore.delete(payload.jti);
80
- }
81
- }
82
- async verifyAccessToken(accessToken) {
83
- const config = await this.serverConfigService.load();
84
- let payload;
85
- try {
86
- payload = this.jwtService.verify(accessToken, {
87
- secret: config.auth.accessTokenSecret,
88
- });
89
- }
90
- catch {
91
- throw new common_1.UnauthorizedException('Invalid access token');
92
- }
93
- if (payload.type !== 'access' || !payload.sub || !payload.jti) {
94
- throw new common_1.UnauthorizedException('Invalid access token');
95
- }
96
- return payload;
97
- }
98
- issueTokenPair(username, auth) {
99
- this.pruneExpiredRefreshTokens();
100
- const accessJti = (0, node_crypto_1.randomUUID)();
101
- const refreshJti = (0, node_crypto_1.randomUUID)();
102
- const now = Date.now();
103
- const refreshExpiresAt = now + auth.refreshTokenTtlSeconds * 1000;
104
- const accessToken = this.jwtService.sign({
105
- sub: username,
106
- type: 'access',
107
- jti: accessJti,
108
- }, {
109
- secret: auth.accessTokenSecret,
110
- expiresIn: auth.accessTokenTtlSeconds,
111
- });
112
- const refreshToken = this.jwtService.sign({
113
- sub: username,
114
- type: 'refresh',
115
- jti: refreshJti,
116
- }, {
117
- secret: auth.refreshTokenSecret,
118
- expiresIn: auth.refreshTokenTtlSeconds,
119
- });
120
- this.refreshTokenStore.set(refreshJti, {
121
- username,
122
- expiresAt: refreshExpiresAt,
123
- });
124
- return {
125
- tokenType: 'Bearer',
126
- accessToken,
127
- refreshToken,
128
- accessTokenExpiresIn: auth.accessTokenTtlSeconds,
129
- refreshTokenExpiresIn: auth.refreshTokenTtlSeconds,
130
- };
131
- }
132
- pruneExpiredRefreshTokens() {
133
- const now = Date.now();
134
- for (const [jti, record] of this.refreshTokenStore.entries()) {
135
- if (record.expiresAt <= now) {
136
- this.refreshTokenStore.delete(jti);
137
- }
138
- }
139
- }
140
- };
141
- exports.AuthService = AuthService;
142
- exports.AuthService = AuthService = __decorate([
143
- (0, common_1.Injectable)(),
144
- __metadata("design:paramtypes", [jwt_1.JwtService,
145
- server_config_service_1.ServerConfigService])
146
- ], AuthService);
@@ -1,26 +0,0 @@
1
- import type { Request } from 'express';
2
- export type AccessTokenPayload = {
3
- sub: string;
4
- type: 'access';
5
- jti: string;
6
- };
7
- export type RefreshTokenPayload = {
8
- sub: string;
9
- type: 'refresh';
10
- jti: string;
11
- };
12
- export type AuthTokenPair = {
13
- tokenType: 'Bearer';
14
- accessToken: string;
15
- refreshToken: string;
16
- accessTokenExpiresIn: number;
17
- refreshTokenExpiresIn: number;
18
- };
19
- export type RequestUser = {
20
- username: string;
21
- tokenId: string;
22
- };
23
- export type AuthenticatedRequest = Request & {
24
- requestId?: string;
25
- user?: RequestUser;
26
- };
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- export declare const IS_PUBLIC_ROUTE = "isPublicRoute";
2
- export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Public = exports.IS_PUBLIC_ROUTE = void 0;
4
- const common_1 = require("@nestjs/common");
5
- exports.IS_PUBLIC_ROUTE = 'isPublicRoute';
6
- const Public = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_ROUTE, true);
7
- exports.Public = Public;
@@ -1,30 +0,0 @@
1
- import { ChatService } from './chat.service';
2
- type SubmitInputBody = {
3
- input?: unknown;
4
- };
5
- type ApprovalBody = {
6
- decision?: unknown;
7
- };
8
- export declare class ChatController {
9
- private readonly chatService;
10
- constructor(chatService: ChatService);
11
- createSession(body: Record<string, unknown>): Promise<import("@memo-code/core", { with: { "resolution-mode": "import" } }).LiveSessionState>;
12
- listProviders(): Promise<import("./chat.types").ChatProviderRecord[]>;
13
- listRuntimes(query: Record<string, unknown>): Promise<import("./chat.types").ChatRuntimeListResponse>;
14
- getSession(sessionId: string): Promise<import("@memo-code/core", { with: { "resolution-mode": "import" } }).LiveSessionState>;
15
- deleteSession(sessionId: string): Promise<{
16
- closed: true;
17
- }>;
18
- submitInput(sessionId: string, body: SubmitInputBody): Promise<import("./chat.types").SessionInputResult>;
19
- cancel(sessionId: string): Promise<{
20
- cancelled: boolean;
21
- }>;
22
- compact(sessionId: string): Promise<{
23
- compacted: boolean;
24
- keptMessages: number;
25
- }>;
26
- approvalDecision(sessionId: string, fingerprint: string, body: ApprovalBody): Promise<{
27
- recorded: boolean;
28
- }>;
29
- }
30
- export {};