@blackms/aistack 1.2.0 → 1.3.1

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 (161) hide show
  1. package/README.md +152 -11
  2. package/dist/agents/definitions/adversarial.d.ts +6 -0
  3. package/dist/agents/definitions/adversarial.d.ts.map +1 -0
  4. package/dist/agents/definitions/adversarial.js +34 -0
  5. package/dist/agents/definitions/adversarial.js.map +1 -0
  6. package/dist/agents/definitions/devops.d.ts +6 -0
  7. package/dist/agents/definitions/devops.d.ts.map +1 -0
  8. package/dist/agents/definitions/devops.js +65 -0
  9. package/dist/agents/definitions/devops.js.map +1 -0
  10. package/dist/agents/definitions/documentation.d.ts +6 -0
  11. package/dist/agents/definitions/documentation.d.ts.map +1 -0
  12. package/dist/agents/definitions/documentation.js +72 -0
  13. package/dist/agents/definitions/documentation.js.map +1 -0
  14. package/dist/agents/definitions/index.d.ts +4 -0
  15. package/dist/agents/definitions/index.d.ts.map +1 -1
  16. package/dist/agents/definitions/index.js +4 -0
  17. package/dist/agents/definitions/index.js.map +1 -1
  18. package/dist/agents/definitions/security-auditor.d.ts +6 -0
  19. package/dist/agents/definitions/security-auditor.d.ts.map +1 -0
  20. package/dist/agents/definitions/security-auditor.js +100 -0
  21. package/dist/agents/definitions/security-auditor.js.map +1 -0
  22. package/dist/agents/registry.d.ts.map +1 -1
  23. package/dist/agents/registry.js +5 -1
  24. package/dist/agents/registry.js.map +1 -1
  25. package/dist/agents/spawner.d.ts +26 -1
  26. package/dist/agents/spawner.d.ts.map +1 -1
  27. package/dist/agents/spawner.js +94 -1
  28. package/dist/agents/spawner.js.map +1 -1
  29. package/dist/auth/index.d.ts +6 -0
  30. package/dist/auth/index.d.ts.map +1 -0
  31. package/dist/auth/index.js +6 -0
  32. package/dist/auth/index.js.map +1 -0
  33. package/dist/auth/service.d.ts +79 -0
  34. package/dist/auth/service.d.ts.map +1 -0
  35. package/dist/auth/service.js +383 -0
  36. package/dist/auth/service.js.map +1 -0
  37. package/dist/auth/types.d.ts +48 -0
  38. package/dist/auth/types.d.ts.map +1 -0
  39. package/dist/auth/types.js +10 -0
  40. package/dist/auth/types.js.map +1 -0
  41. package/dist/coordination/index.d.ts +1 -0
  42. package/dist/coordination/index.d.ts.map +1 -1
  43. package/dist/coordination/index.js +1 -0
  44. package/dist/coordination/index.js.map +1 -1
  45. package/dist/coordination/review-loop.d.ts +89 -0
  46. package/dist/coordination/review-loop.d.ts.map +1 -0
  47. package/dist/coordination/review-loop.js +341 -0
  48. package/dist/coordination/review-loop.js.map +1 -0
  49. package/dist/integrations/slack-notifier.d.ts +63 -0
  50. package/dist/integrations/slack-notifier.d.ts.map +1 -0
  51. package/dist/integrations/slack-notifier.js +224 -0
  52. package/dist/integrations/slack-notifier.js.map +1 -0
  53. package/dist/integrations/slack.d.ts +50 -0
  54. package/dist/integrations/slack.d.ts.map +1 -0
  55. package/dist/integrations/slack.js +225 -0
  56. package/dist/integrations/slack.js.map +1 -0
  57. package/dist/mcp/tools/index.d.ts +1 -0
  58. package/dist/mcp/tools/index.d.ts.map +1 -1
  59. package/dist/mcp/tools/index.js +1 -0
  60. package/dist/mcp/tools/index.js.map +1 -1
  61. package/dist/mcp/tools/review-loop-tools.d.ts +210 -0
  62. package/dist/mcp/tools/review-loop-tools.d.ts.map +1 -0
  63. package/dist/mcp/tools/review-loop-tools.js +213 -0
  64. package/dist/mcp/tools/review-loop-tools.js.map +1 -0
  65. package/dist/memory/index.d.ts +75 -0
  66. package/dist/memory/index.d.ts.map +1 -1
  67. package/dist/memory/index.js +101 -0
  68. package/dist/memory/index.js.map +1 -1
  69. package/dist/memory/sqlite-store.d.ts +85 -1
  70. package/dist/memory/sqlite-store.d.ts.map +1 -1
  71. package/dist/memory/sqlite-store.js +647 -15
  72. package/dist/memory/sqlite-store.js.map +1 -1
  73. package/dist/monitoring/health.d.ts +68 -0
  74. package/dist/monitoring/health.d.ts.map +1 -0
  75. package/dist/monitoring/health.js +220 -0
  76. package/dist/monitoring/health.js.map +1 -0
  77. package/dist/monitoring/metrics.d.ts +31 -0
  78. package/dist/monitoring/metrics.d.ts.map +1 -0
  79. package/dist/monitoring/metrics.js +230 -0
  80. package/dist/monitoring/metrics.js.map +1 -0
  81. package/dist/providers/index.d.ts.map +1 -1
  82. package/dist/providers/index.js +132 -94
  83. package/dist/providers/index.js.map +1 -1
  84. package/dist/types.d.ts +69 -1
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/types.js.map +1 -1
  87. package/dist/utils/config.d.ts.map +1 -1
  88. package/dist/utils/config.js +12 -0
  89. package/dist/utils/config.js.map +1 -1
  90. package/dist/utils/index.d.ts +1 -1
  91. package/dist/utils/index.d.ts.map +1 -1
  92. package/dist/utils/index.js +1 -1
  93. package/dist/utils/index.js.map +1 -1
  94. package/dist/utils/logger.d.ts +24 -7
  95. package/dist/utils/logger.d.ts.map +1 -1
  96. package/dist/utils/logger.js +128 -20
  97. package/dist/utils/logger.js.map +1 -1
  98. package/dist/utils/retry.d.ts +49 -0
  99. package/dist/utils/retry.d.ts.map +1 -0
  100. package/dist/utils/retry.js +160 -0
  101. package/dist/utils/retry.js.map +1 -0
  102. package/dist/utils/semaphore.d.ts +75 -0
  103. package/dist/utils/semaphore.d.ts.map +1 -0
  104. package/dist/utils/semaphore.js +185 -0
  105. package/dist/utils/semaphore.js.map +1 -0
  106. package/dist/utils/validation.d.ts +2 -2
  107. package/dist/web/middleware/auth.d.ts +16 -10
  108. package/dist/web/middleware/auth.d.ts.map +1 -1
  109. package/dist/web/middleware/auth.js +152 -12
  110. package/dist/web/middleware/auth.js.map +1 -1
  111. package/dist/web/routes/auth.d.ts +50 -0
  112. package/dist/web/routes/auth.d.ts.map +1 -0
  113. package/dist/web/routes/auth.js +216 -0
  114. package/dist/web/routes/auth.js.map +1 -0
  115. package/dist/web/routes/index.d.ts +2 -0
  116. package/dist/web/routes/index.d.ts.map +1 -1
  117. package/dist/web/routes/index.js +2 -0
  118. package/dist/web/routes/index.js.map +1 -1
  119. package/dist/web/routes/memory.d.ts.map +1 -1
  120. package/dist/web/routes/memory.js +188 -0
  121. package/dist/web/routes/memory.js.map +1 -1
  122. package/dist/web/routes/review-loops.d.ts +12 -0
  123. package/dist/web/routes/review-loops.d.ts.map +1 -0
  124. package/dist/web/routes/review-loops.js +157 -0
  125. package/dist/web/routes/review-loops.js.map +1 -0
  126. package/dist/web/routes/sessions.d.ts.map +1 -1
  127. package/dist/web/routes/sessions.js +14 -0
  128. package/dist/web/routes/sessions.js.map +1 -1
  129. package/dist/web/routes/system.d.ts.map +1 -1
  130. package/dist/web/routes/system.js +34 -23
  131. package/dist/web/routes/system.js.map +1 -1
  132. package/dist/web/routes/workflows.d.ts.map +1 -1
  133. package/dist/web/routes/workflows.js +13 -1
  134. package/dist/web/routes/workflows.js.map +1 -1
  135. package/dist/web/server.d.ts +1 -0
  136. package/dist/web/server.d.ts.map +1 -1
  137. package/dist/web/server.js +30 -2
  138. package/dist/web/server.js.map +1 -1
  139. package/dist/web/utils/request.d.ts +13 -0
  140. package/dist/web/utils/request.d.ts.map +1 -0
  141. package/dist/web/utils/request.js +49 -0
  142. package/dist/web/utils/request.js.map +1 -0
  143. package/dist/web/websocket/handler.d.ts +4 -0
  144. package/dist/web/websocket/handler.d.ts.map +1 -1
  145. package/dist/web/websocket/handler.js +59 -0
  146. package/dist/web/websocket/handler.js.map +1 -1
  147. package/dist/workflows/doc-sync.d.ts.map +1 -1
  148. package/dist/workflows/doc-sync.js +4 -0
  149. package/dist/workflows/doc-sync.js.map +1 -1
  150. package/dist/workflows/full-stack-feature.d.ts +74 -0
  151. package/dist/workflows/full-stack-feature.d.ts.map +1 -0
  152. package/dist/workflows/full-stack-feature.js +273 -0
  153. package/dist/workflows/full-stack-feature.js.map +1 -0
  154. package/dist/workflows/index.d.ts +1 -0
  155. package/dist/workflows/index.d.ts.map +1 -1
  156. package/dist/workflows/index.js +2 -0
  157. package/dist/workflows/index.js.map +1 -1
  158. package/dist/workflows/runner.js.map +1 -1
  159. package/dist/workflows/types.d.ts +6 -5
  160. package/dist/workflows/types.d.ts.map +1 -1
  161. package/package.json +12 -5
@@ -1,23 +1,91 @@
1
1
  /**
2
- * Authentication middleware (placeholder for future implementation)
2
+ * Authentication middleware
3
3
  */
4
+ import { logger } from '../../utils/logger.js';
5
+ const log = logger.child('auth:middleware');
6
+ let authService = null;
7
+ /**
8
+ * Initialize authentication with service
9
+ */
10
+ export function initAuth(service) {
11
+ authService = service;
12
+ }
4
13
  /**
5
14
  * Create authentication middleware
6
- * Currently a no-op that allows all requests
7
- */
8
- export function createAuthMiddleware(_options = {}) {
9
- return function authMiddleware(_req, _res) {
10
- // For now, all requests are authenticated
11
- // In the future, this could check API keys, JWT tokens, etc.
12
- return {
13
- authenticated: true,
14
- };
15
+ */
16
+ export function createAuthMiddleware(options = {}) {
17
+ const { required = true, roles = [] } = options;
18
+ return function authMiddleware(req, res) {
19
+ // If auth is not required, return authenticated context
20
+ if (!required) {
21
+ return {
22
+ authenticated: true,
23
+ };
24
+ }
25
+ // If auth service is not initialized, fail closed in production
26
+ if (!authService) {
27
+ if (process.env.NODE_ENV === 'production') {
28
+ sendUnauthorized(res, 'Authentication service not initialized');
29
+ throw new Error('Authentication required');
30
+ }
31
+ // In development, allow requests if auth is not set up
32
+ log.warn('Auth service not initialized, allowing request in development mode');
33
+ return {
34
+ authenticated: true,
35
+ };
36
+ }
37
+ // Extract token
38
+ const token = getToken(req);
39
+ if (!token) {
40
+ sendUnauthorized(res, 'No authentication token provided');
41
+ throw new Error('Authentication required');
42
+ }
43
+ try {
44
+ // Verify token
45
+ const payload = authService.verifyAccessToken(token);
46
+ // Get user
47
+ const user = authService.getUserById(payload.userId);
48
+ if (!user) {
49
+ sendUnauthorized(res, 'User not found');
50
+ throw new Error('Authentication failed');
51
+ }
52
+ // Check role if specified
53
+ if (roles.length > 0 && !roles.includes(user.role)) {
54
+ sendForbidden(res, 'Insufficient permissions');
55
+ throw new Error('Forbidden');
56
+ }
57
+ // Return auth context (excluding sensitive fields)
58
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
+ const { passwordHash, ...userWithoutPassword } = user;
60
+ return {
61
+ authenticated: true,
62
+ user: userWithoutPassword,
63
+ userId: user.id,
64
+ role: user.role,
65
+ permissions: getRolePermissions(user.role),
66
+ };
67
+ }
68
+ catch (error) {
69
+ if (error instanceof Error) {
70
+ if (error.message === 'Token expired') {
71
+ sendUnauthorized(res, 'Token expired');
72
+ }
73
+ else if (error.message === 'Invalid token') {
74
+ sendUnauthorized(res, 'Invalid token');
75
+ }
76
+ else if (error.message !== 'Authentication required' && error.message !== 'Forbidden') {
77
+ log.error('Authentication error', { error: error.message });
78
+ sendUnauthorized(res, 'Authentication failed');
79
+ }
80
+ }
81
+ throw error;
82
+ }
15
83
  };
16
84
  }
17
85
  /**
18
- * Extract API key from request headers
86
+ * Extract token from request headers
19
87
  */
20
- export function getApiKey(req) {
88
+ function getToken(req) {
21
89
  const authHeader = req.headers.authorization;
22
90
  if (authHeader?.startsWith('Bearer ')) {
23
91
  return authHeader.slice(7);
@@ -28,4 +96,76 @@ export function getApiKey(req) {
28
96
  }
29
97
  return null;
30
98
  }
99
+ /**
100
+ * Get API key from request (legacy support)
101
+ */
102
+ export function getApiKey(req) {
103
+ return getToken(req);
104
+ }
105
+ /**
106
+ * Get role permissions
107
+ */
108
+ function getRolePermissions(role) {
109
+ const permissions = {
110
+ admin: ['*'], // Admin has all permissions
111
+ developer: [
112
+ 'agents:read',
113
+ 'agents:write',
114
+ 'agents:spawn',
115
+ 'memory:read',
116
+ 'memory:write',
117
+ 'workflows:read',
118
+ 'workflows:write',
119
+ 'projects:read',
120
+ 'projects:write',
121
+ 'sessions:read',
122
+ 'sessions:write',
123
+ ],
124
+ viewer: [
125
+ 'agents:read',
126
+ 'memory:read',
127
+ 'workflows:read',
128
+ 'projects:read',
129
+ 'sessions:read',
130
+ ],
131
+ };
132
+ return permissions[role] || [];
133
+ }
134
+ /**
135
+ * Send 401 Unauthorized response
136
+ */
137
+ function sendUnauthorized(res, message) {
138
+ res.writeHead(401, { 'Content-Type': 'application/json' });
139
+ res.end(JSON.stringify({ error: message }));
140
+ }
141
+ /**
142
+ * Send 403 Forbidden response
143
+ */
144
+ function sendForbidden(res, message) {
145
+ res.writeHead(403, { 'Content-Type': 'application/json' });
146
+ res.end(JSON.stringify({ error: message }));
147
+ }
148
+ /**
149
+ * Verify user has permission
150
+ */
151
+ export function hasPermission(context, permission) {
152
+ if (!context.authenticated)
153
+ return false;
154
+ if (!context.permissions)
155
+ return false;
156
+ // Admin wildcard
157
+ if (context.permissions.includes('*'))
158
+ return true;
159
+ // Exact match
160
+ if (context.permissions.includes(permission))
161
+ return true;
162
+ // Wildcard match (e.g., "agents:*" matches "agents:read")
163
+ const parts = permission.split(':');
164
+ if (parts.length === 2) {
165
+ const wildcardPerm = `${parts[0]}:*`;
166
+ if (context.permissions.includes(wildcardPerm))
167
+ return true;
168
+ }
169
+ return false;
170
+ }
31
171
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmC,EAAE;IACxE,OAAO,SAAS,cAAc,CAC5B,IAAqB,EACrB,IAAoB;QAEpB,0CAA0C;QAC1C,6DAA6D;QAC7D,OAAO;YACL,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAoB;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAI,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Authentication routes
3
+ */
4
+ import type { IncomingMessage, ServerResponse } from 'node:http';
5
+ import { AuthService } from '../../auth/service.js';
6
+ export interface AuthRoutes {
7
+ authService: AuthService;
8
+ }
9
+ /**
10
+ * Create authentication routes
11
+ */
12
+ export declare function createAuthRoutes(deps: AuthRoutes): {
13
+ /**
14
+ * POST /api/auth/register - Register new user
15
+ */
16
+ register(req: IncomingMessage, res: ServerResponse): Promise<void>;
17
+ /**
18
+ * POST /api/auth/login - Login user
19
+ */
20
+ login(req: IncomingMessage, res: ServerResponse): Promise<void>;
21
+ /**
22
+ * POST /api/auth/refresh - Refresh access token
23
+ */
24
+ refresh(req: IncomingMessage, res: ServerResponse): Promise<void>;
25
+ /**
26
+ * POST /api/auth/logout - Logout user
27
+ */
28
+ logout(req: IncomingMessage, res: ServerResponse): Promise<void>;
29
+ /**
30
+ * GET /api/auth/me - Get current user
31
+ */
32
+ me(req: IncomingMessage, res: ServerResponse): Promise<void>;
33
+ /**
34
+ * POST /api/auth/change-password - Change password
35
+ */
36
+ changePassword(req: IncomingMessage, res: ServerResponse): Promise<void>;
37
+ /**
38
+ * GET /api/auth/users - List all users (admin only)
39
+ */
40
+ listUsers(req: IncomingMessage, res: ServerResponse): Promise<void>;
41
+ /**
42
+ * PUT /api/auth/users/:userId/role - Update user role (admin only)
43
+ */
44
+ updateUserRole(req: IncomingMessage, res: ServerResponse, userId: string): Promise<void>;
45
+ /**
46
+ * DELETE /api/auth/users/:userId - Delete user (admin only)
47
+ */
48
+ deleteUser(req: IncomingMessage, res: ServerResponse, userId: string): Promise<void>;
49
+ };
50
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/web/routes/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU;IAI7C;;OAEG;kBACiB,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCxE;;OAEG;eACc,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCrE;;OAEG;iBACgB,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvE;;OAEG;gBACe,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtE;;OAEG;YACW,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlE;;OAEG;wBACuB,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B9E;;OAEG;mBACkB,eAAe,OAAO,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAazE;;OAEG;wBAEI,eAAe,OACf,cAAc,UACX,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;oBAEI,eAAe,OACf,cAAc,UACX,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;EAsBnB"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Authentication routes
3
+ */
4
+ import { logger } from '../../utils/logger.js';
5
+ import { parseRequestBody } from '../utils/request.js';
6
+ import { createAuthMiddleware } from '../middleware/auth.js';
7
+ import { UserRole } from '../../auth/types.js';
8
+ const log = logger.child('web:auth');
9
+ /**
10
+ * Create authentication routes
11
+ */
12
+ export function createAuthRoutes(deps) {
13
+ const { authService } = deps;
14
+ return {
15
+ /**
16
+ * POST /api/auth/register - Register new user
17
+ */
18
+ async register(req, res) {
19
+ try {
20
+ const body = await parseRequestBody(req);
21
+ const user = await authService.register({
22
+ email: body.email,
23
+ username: body.username,
24
+ password: body.password,
25
+ }, body.role || UserRole.DEVELOPER);
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ const { passwordHash, ...userWithoutPassword } = user;
28
+ res.writeHead(201, { 'Content-Type': 'application/json' });
29
+ res.end(JSON.stringify({
30
+ user: userWithoutPassword,
31
+ }));
32
+ }
33
+ catch (error) {
34
+ log.error('Registration failed', {
35
+ error: error instanceof Error ? error.message : 'Unknown error',
36
+ });
37
+ res.writeHead(400, { 'Content-Type': 'application/json' });
38
+ res.end(JSON.stringify({
39
+ error: error instanceof Error ? error.message : 'Registration failed',
40
+ }));
41
+ }
42
+ },
43
+ /**
44
+ * POST /api/auth/login - Login user
45
+ */
46
+ async login(req, res) {
47
+ try {
48
+ const body = await parseRequestBody(req);
49
+ const result = await authService.login({
50
+ email: body.email,
51
+ password: body.password,
52
+ });
53
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
+ const { passwordHash, ...userWithoutPassword } = result.user;
55
+ res.writeHead(200, { 'Content-Type': 'application/json' });
56
+ res.end(JSON.stringify({
57
+ user: userWithoutPassword,
58
+ tokens: result.tokens,
59
+ }));
60
+ }
61
+ catch (error) {
62
+ log.error('Login failed', {
63
+ error: error instanceof Error ? error.message : 'Unknown error',
64
+ });
65
+ res.writeHead(401, { 'Content-Type': 'application/json' });
66
+ res.end(JSON.stringify({
67
+ error: error instanceof Error ? error.message : 'Login failed',
68
+ }));
69
+ }
70
+ },
71
+ /**
72
+ * POST /api/auth/refresh - Refresh access token
73
+ */
74
+ async refresh(req, res) {
75
+ try {
76
+ const body = await parseRequestBody(req);
77
+ if (!body.refreshToken) {
78
+ throw new Error('Refresh token is required');
79
+ }
80
+ const tokens = await authService.refreshAccessToken(body.refreshToken);
81
+ res.writeHead(200, { 'Content-Type': 'application/json' });
82
+ res.end(JSON.stringify({ tokens }));
83
+ }
84
+ catch (error) {
85
+ log.error('Token refresh failed', {
86
+ error: error instanceof Error ? error.message : 'Unknown error',
87
+ });
88
+ res.writeHead(401, { 'Content-Type': 'application/json' });
89
+ res.end(JSON.stringify({
90
+ error: error instanceof Error ? error.message : 'Token refresh failed',
91
+ }));
92
+ }
93
+ },
94
+ /**
95
+ * POST /api/auth/logout - Logout user
96
+ */
97
+ async logout(req, res) {
98
+ try {
99
+ const body = await parseRequestBody(req);
100
+ if (body.refreshToken) {
101
+ await authService.logout(body.refreshToken);
102
+ }
103
+ res.writeHead(200, { 'Content-Type': 'application/json' });
104
+ res.end(JSON.stringify({ success: true }));
105
+ }
106
+ catch (error) {
107
+ log.error('Logout failed', {
108
+ error: error instanceof Error ? error.message : 'Unknown error',
109
+ });
110
+ res.writeHead(500, { 'Content-Type': 'application/json' });
111
+ res.end(JSON.stringify({
112
+ error: error instanceof Error ? error.message : 'Logout failed',
113
+ }));
114
+ }
115
+ },
116
+ /**
117
+ * GET /api/auth/me - Get current user
118
+ */
119
+ async me(req, res) {
120
+ try {
121
+ const auth = createAuthMiddleware({ required: true })(req, res);
122
+ res.writeHead(200, { 'Content-Type': 'application/json' });
123
+ res.end(JSON.stringify({
124
+ user: auth.user,
125
+ permissions: auth.permissions,
126
+ }));
127
+ }
128
+ catch {
129
+ // Error already handled by middleware
130
+ }
131
+ },
132
+ /**
133
+ * POST /api/auth/change-password - Change password
134
+ */
135
+ async changePassword(req, res) {
136
+ try {
137
+ const auth = createAuthMiddleware({ required: true })(req, res);
138
+ const body = await parseRequestBody(req);
139
+ if (!auth.userId) {
140
+ throw new Error('Authentication required');
141
+ }
142
+ await authService.changePassword(auth.userId, body.oldPassword, body.newPassword);
143
+ res.writeHead(200, { 'Content-Type': 'application/json' });
144
+ res.end(JSON.stringify({ success: true }));
145
+ }
146
+ catch (error) {
147
+ log.error('Password change failed', {
148
+ error: error instanceof Error ? error.message : 'Unknown error',
149
+ });
150
+ res.writeHead(400, { 'Content-Type': 'application/json' });
151
+ res.end(JSON.stringify({
152
+ error: error instanceof Error ? error.message : 'Password change failed',
153
+ }));
154
+ }
155
+ },
156
+ /**
157
+ * GET /api/auth/users - List all users (admin only)
158
+ */
159
+ async listUsers(req, res) {
160
+ try {
161
+ createAuthMiddleware({ required: true, roles: ['admin'] })(req, res);
162
+ const users = authService.listUsers();
163
+ res.writeHead(200, { 'Content-Type': 'application/json' });
164
+ res.end(JSON.stringify({ users }));
165
+ }
166
+ catch {
167
+ // Error already handled by middleware
168
+ }
169
+ },
170
+ /**
171
+ * PUT /api/auth/users/:userId/role - Update user role (admin only)
172
+ */
173
+ async updateUserRole(req, res, userId) {
174
+ try {
175
+ createAuthMiddleware({ required: true, roles: ['admin'] })(req, res);
176
+ const body = await parseRequestBody(req);
177
+ if (!body.role) {
178
+ throw new Error('Role is required');
179
+ }
180
+ authService.updateUserRole(userId, body.role);
181
+ res.writeHead(200, { 'Content-Type': 'application/json' });
182
+ res.end(JSON.stringify({ success: true }));
183
+ }
184
+ catch (error) {
185
+ log.error('Role update failed', {
186
+ error: error instanceof Error ? error.message : 'Unknown error',
187
+ });
188
+ res.writeHead(400, { 'Content-Type': 'application/json' });
189
+ res.end(JSON.stringify({
190
+ error: error instanceof Error ? error.message : 'Role update failed',
191
+ }));
192
+ }
193
+ },
194
+ /**
195
+ * DELETE /api/auth/users/:userId - Delete user (admin only)
196
+ */
197
+ async deleteUser(req, res, userId) {
198
+ try {
199
+ createAuthMiddleware({ required: true, roles: ['admin'] })(req, res);
200
+ authService.deleteUser(userId);
201
+ res.writeHead(200, { 'Content-Type': 'application/json' });
202
+ res.end(JSON.stringify({ success: true }));
203
+ }
204
+ catch (error) {
205
+ log.error('User deletion failed', {
206
+ error: error instanceof Error ? error.message : 'Unknown error',
207
+ });
208
+ res.writeHead(400, { 'Content-Type': 'application/json' });
209
+ res.end(JSON.stringify({
210
+ error: error instanceof Error ? error.message : 'User deletion failed',
211
+ }));
212
+ }
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/routes/auth.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,10 @@ export { registerMemoryRoutes } from './memory.js';
6
6
  export { registerTaskRoutes } from './tasks.js';
7
7
  export { registerSessionRoutes } from './sessions.js';
8
8
  export { registerWorkflowRoutes } from './workflows.js';
9
+ export { registerReviewLoopRoutes } from './review-loops.js';
9
10
  export { registerSystemRoutes } from './system.js';
10
11
  export { registerProjectRoutes } from './projects.js';
11
12
  export { registerSpecificationRoutes } from './specifications.js';
12
13
  export { registerFilesystemRoutes } from './filesystem.js';
14
+ export { createAuthRoutes } from './auth.js';
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
@@ -6,8 +6,10 @@ export { registerMemoryRoutes } from './memory.js';
6
6
  export { registerTaskRoutes } from './tasks.js';
7
7
  export { registerSessionRoutes } from './sessions.js';
8
8
  export { registerWorkflowRoutes } from './workflows.js';
9
+ export { registerReviewLoopRoutes } from './review-loops.js';
9
10
  export { registerSystemRoutes } from './system.js';
10
11
  export { registerProjectRoutes } from './projects.js';
11
12
  export { registerSpecificationRoutes } from './specifications.js';
12
13
  export { registerFilesystemRoutes } from './filesystem.js';
14
+ export { createAuthRoutes } from './auth.js';
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/web/routes/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAyKnF"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/web/routes/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAuZnF"}