@shin1ohno/sage 0.3.0 → 0.5.5

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 (95) hide show
  1. package/dist/cli/http-server-with-config.d.ts +38 -0
  2. package/dist/cli/http-server-with-config.d.ts.map +1 -0
  3. package/dist/cli/http-server-with-config.js +477 -0
  4. package/dist/cli/http-server-with-config.js.map +1 -0
  5. package/dist/cli/http-server.d.ts +74 -0
  6. package/dist/cli/http-server.d.ts.map +1 -0
  7. package/dist/cli/http-server.js +407 -0
  8. package/dist/cli/http-server.js.map +1 -0
  9. package/dist/cli/jwt-middleware.d.ts +36 -0
  10. package/dist/cli/jwt-middleware.d.ts.map +1 -0
  11. package/dist/cli/jwt-middleware.js +99 -0
  12. package/dist/cli/jwt-middleware.js.map +1 -0
  13. package/dist/cli/main-entry.d.ts +45 -0
  14. package/dist/cli/main-entry.d.ts.map +1 -0
  15. package/dist/cli/main-entry.js +192 -0
  16. package/dist/cli/main-entry.js.map +1 -0
  17. package/dist/cli/mcp-handler.d.ts +56 -0
  18. package/dist/cli/mcp-handler.d.ts.map +1 -0
  19. package/dist/cli/mcp-handler.js +2189 -0
  20. package/dist/cli/mcp-handler.js.map +1 -0
  21. package/dist/cli/parser.d.ts +45 -0
  22. package/dist/cli/parser.d.ts.map +1 -0
  23. package/dist/cli/parser.js +172 -0
  24. package/dist/cli/parser.js.map +1 -0
  25. package/dist/cli/remote-config-loader.d.ts +89 -0
  26. package/dist/cli/remote-config-loader.d.ts.map +1 -0
  27. package/dist/cli/remote-config-loader.js +129 -0
  28. package/dist/cli/remote-config-loader.js.map +1 -0
  29. package/dist/cli/secret-auth.d.ts +47 -0
  30. package/dist/cli/secret-auth.d.ts.map +1 -0
  31. package/dist/cli/secret-auth.js +165 -0
  32. package/dist/cli/secret-auth.js.map +1 -0
  33. package/dist/cli/sse-stream-handler.d.ts +45 -0
  34. package/dist/cli/sse-stream-handler.d.ts.map +1 -0
  35. package/dist/cli/sse-stream-handler.js +125 -0
  36. package/dist/cli/sse-stream-handler.js.map +1 -0
  37. package/dist/index.js +897 -209
  38. package/dist/index.js.map +1 -1
  39. package/dist/integrations/calendar-event-creator.d.ts +152 -0
  40. package/dist/integrations/calendar-event-creator.d.ts.map +1 -0
  41. package/dist/integrations/calendar-event-creator.js +507 -0
  42. package/dist/integrations/calendar-event-creator.js.map +1 -0
  43. package/dist/integrations/calendar-event-deleter.d.ts +137 -0
  44. package/dist/integrations/calendar-event-deleter.d.ts.map +1 -0
  45. package/dist/integrations/calendar-event-deleter.js +378 -0
  46. package/dist/integrations/calendar-event-deleter.js.map +1 -0
  47. package/dist/integrations/calendar-event-response.d.ts +213 -0
  48. package/dist/integrations/calendar-event-response.d.ts.map +1 -0
  49. package/dist/integrations/calendar-event-response.js +560 -0
  50. package/dist/integrations/calendar-event-response.js.map +1 -0
  51. package/dist/integrations/calendar-service.d.ts +66 -1
  52. package/dist/integrations/calendar-service.d.ts.map +1 -1
  53. package/dist/integrations/calendar-service.js +223 -0
  54. package/dist/integrations/calendar-service.js.map +1 -1
  55. package/dist/oauth/client-store.d.ts +36 -0
  56. package/dist/oauth/client-store.d.ts.map +1 -0
  57. package/dist/oauth/client-store.js +119 -0
  58. package/dist/oauth/client-store.js.map +1 -0
  59. package/dist/oauth/code-store.d.ts +48 -0
  60. package/dist/oauth/code-store.d.ts.map +1 -0
  61. package/dist/oauth/code-store.js +89 -0
  62. package/dist/oauth/code-store.js.map +1 -0
  63. package/dist/oauth/index.d.ts +13 -0
  64. package/dist/oauth/index.d.ts.map +1 -0
  65. package/dist/oauth/index.js +21 -0
  66. package/dist/oauth/index.js.map +1 -0
  67. package/dist/oauth/oauth-handler.d.ts +101 -0
  68. package/dist/oauth/oauth-handler.d.ts.map +1 -0
  69. package/dist/oauth/oauth-handler.js +577 -0
  70. package/dist/oauth/oauth-handler.js.map +1 -0
  71. package/dist/oauth/oauth-server.d.ts +165 -0
  72. package/dist/oauth/oauth-server.d.ts.map +1 -0
  73. package/dist/oauth/oauth-server.js +489 -0
  74. package/dist/oauth/oauth-server.js.map +1 -0
  75. package/dist/oauth/pkce.d.ts +48 -0
  76. package/dist/oauth/pkce.d.ts.map +1 -0
  77. package/dist/oauth/pkce.js +106 -0
  78. package/dist/oauth/pkce.js.map +1 -0
  79. package/dist/oauth/refresh-token-store.d.ts +45 -0
  80. package/dist/oauth/refresh-token-store.d.ts.map +1 -0
  81. package/dist/oauth/refresh-token-store.js +98 -0
  82. package/dist/oauth/refresh-token-store.js.map +1 -0
  83. package/dist/oauth/token-service.d.ts +46 -0
  84. package/dist/oauth/token-service.d.ts.map +1 -0
  85. package/dist/oauth/token-service.js +199 -0
  86. package/dist/oauth/token-service.js.map +1 -0
  87. package/dist/oauth/types.d.ts +269 -0
  88. package/dist/oauth/types.d.ts.map +1 -0
  89. package/dist/oauth/types.js +53 -0
  90. package/dist/oauth/types.js.map +1 -0
  91. package/dist/version.d.ts +9 -0
  92. package/dist/version.d.ts.map +1 -0
  93. package/dist/version.js +11 -0
  94. package/dist/version.js.map +1 -0
  95. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ /**
2
+ * HTTP Server with Remote Config Integration
3
+ * Requirements: 15.1, 15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 21-31 (OAuth)
4
+ *
5
+ * Creates an HTTP server with configuration loaded from remote-config.json
6
+ * and integrates JWT-based authentication and OAuth 2.1.
7
+ */
8
+ import { RemoteConfig } from './remote-config-loader.js';
9
+ /**
10
+ * Options for creating the server
11
+ */
12
+ export interface HTTPServerWithConfigOptions {
13
+ /** Path to remote config file (default: ~/.sage/remote-config.json) */
14
+ configPath?: string;
15
+ /** Override port from CLI */
16
+ port?: number;
17
+ /** Override host from CLI */
18
+ host?: string;
19
+ /** Override auth secret from environment */
20
+ authSecret?: string;
21
+ }
22
+ /**
23
+ * HTTP Server with Config interface
24
+ */
25
+ export interface HTTPServerWithConfig {
26
+ start(): Promise<void>;
27
+ stop(): Promise<void>;
28
+ isRunning(): boolean;
29
+ getPort(): number;
30
+ getHost(): string;
31
+ isAuthEnabled(): boolean;
32
+ getConfig(): RemoteConfig;
33
+ }
34
+ /**
35
+ * Create HTTP server with configuration from file
36
+ */
37
+ export declare function createHTTPServerWithConfig(options?: HTTPServerWithConfigOptions): Promise<HTTPServerWithConfig>;
38
+ //# sourceMappingURL=http-server-with-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-with-config.d.ts","sourceRoot":"","sources":["../../src/cli/http-server-with-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAEL,YAAY,EAGb,MAAM,2BAA2B,CAAC;AAMnC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,IAAI,MAAM,CAAC;IAClB,aAAa,IAAI,OAAO,CAAC;IACzB,SAAS,IAAI,YAAY,CAAC;CAC3B;AAyhBD;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC,CAU/B"}
@@ -0,0 +1,477 @@
1
+ /**
2
+ * HTTP Server with Remote Config Integration
3
+ * Requirements: 15.1, 15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 21-31 (OAuth)
4
+ *
5
+ * Creates an HTTP server with configuration loaded from remote-config.json
6
+ * and integrates JWT-based authentication and OAuth 2.1.
7
+ */
8
+ import { createServer } from 'http';
9
+ import { VERSION } from '../version.js';
10
+ import { loadRemoteConfig, DEFAULT_REMOTE_CONFIG_PATH, } from './remote-config-loader.js';
11
+ import { createSecretAuthenticator } from './secret-auth.js';
12
+ import { createMCPHandler } from './mcp-handler.js';
13
+ import { createSSEStreamHandler } from './sse-stream-handler.js';
14
+ import { OAuthServer, OAuthHandler } from '../oauth/index.js';
15
+ /**
16
+ * HTTP Server with Config Implementation
17
+ */
18
+ class HTTPServerWithConfigImpl {
19
+ server = null;
20
+ running = false;
21
+ startTime = null;
22
+ config;
23
+ effectivePort;
24
+ effectiveHost;
25
+ authenticator = null;
26
+ mcpHandler = null;
27
+ sseHandler = null;
28
+ oauthServer = null;
29
+ oauthHandler = null;
30
+ constructor(config, options) {
31
+ this.config = config;
32
+ // Apply priority: CLI > Environment > Config > Default
33
+ this.effectivePort = options.port ?? config.remote.port;
34
+ this.effectiveHost = options.host ?? config.remote.host;
35
+ // Setup authentication based on type
36
+ if (config.remote.auth.type === 'oauth2') {
37
+ // OAuth will be initialized in start()
38
+ // Also setup static token authenticator if enabled
39
+ const oauthConfig = config.remote.auth;
40
+ if (oauthConfig.allowStaticTokens && oauthConfig.staticTokenSecret) {
41
+ this.authenticator = createSecretAuthenticator({
42
+ secret: oauthConfig.staticTokenSecret,
43
+ expiresIn: oauthConfig.accessTokenExpiry ?? '1h',
44
+ });
45
+ }
46
+ }
47
+ else if (config.remote.auth.type === 'jwt') {
48
+ // Setup JWT authenticator from config
49
+ const jwtConfig = config.remote.auth;
50
+ const secret = options.authSecret ?? jwtConfig.secret;
51
+ if (secret) {
52
+ this.authenticator = createSecretAuthenticator({
53
+ secret,
54
+ expiresIn: jwtConfig.expiresIn ?? '24h',
55
+ });
56
+ }
57
+ }
58
+ else if (options.authSecret) {
59
+ // Setup JWT authenticator from CLI option (overrides 'none' type)
60
+ this.authenticator = createSecretAuthenticator({
61
+ secret: options.authSecret,
62
+ expiresIn: '24h',
63
+ });
64
+ // Update auth type to reflect that auth is now enabled
65
+ this.config.remote.auth = {
66
+ type: 'jwt',
67
+ secret: options.authSecret,
68
+ expiresIn: '24h',
69
+ };
70
+ }
71
+ }
72
+ async start() {
73
+ if (this.running) {
74
+ return;
75
+ }
76
+ // Initialize MCP handler
77
+ this.mcpHandler = await createMCPHandler();
78
+ // Initialize SSE handler for Streamable HTTP Transport (Requirement 20)
79
+ this.sseHandler = createSSEStreamHandler();
80
+ // Initialize OAuth if configured (Requirements 21-31)
81
+ if (this.config.remote.auth.type === 'oauth2') {
82
+ const oauthConfig = this.config.remote.auth;
83
+ const issuer = oauthConfig.issuer || `http://${this.effectiveHost}:${this.effectivePort}`;
84
+ // Convert user config to OAuth users
85
+ const users = oauthConfig.users.map((u, i) => ({
86
+ id: `user_${i}`,
87
+ username: u.username,
88
+ passwordHash: u.passwordHash,
89
+ createdAt: Date.now(),
90
+ }));
91
+ this.oauthServer = new OAuthServer({
92
+ issuer,
93
+ accessTokenExpiry: oauthConfig.accessTokenExpiry || '1h',
94
+ refreshTokenExpiry: oauthConfig.refreshTokenExpiry || '30d',
95
+ authorizationCodeExpiry: '10m',
96
+ allowedRedirectUris: oauthConfig.allowedRedirectUris || [],
97
+ users,
98
+ });
99
+ await this.oauthServer.initialize();
100
+ this.oauthHandler = new OAuthHandler(this.oauthServer, {
101
+ issuer,
102
+ accessTokenExpiry: oauthConfig.accessTokenExpiry || '1h',
103
+ refreshTokenExpiry: oauthConfig.refreshTokenExpiry || '30d',
104
+ allowedRedirectUris: oauthConfig.allowedRedirectUris || [],
105
+ users,
106
+ });
107
+ }
108
+ return new Promise((resolve, reject) => {
109
+ try {
110
+ this.server = createServer(this.handleRequest.bind(this));
111
+ this.server.listen(this.effectivePort, this.effectiveHost, () => {
112
+ this.running = true;
113
+ this.startTime = new Date();
114
+ resolve();
115
+ });
116
+ this.server.on('error', reject);
117
+ }
118
+ catch (error) {
119
+ reject(error);
120
+ }
121
+ });
122
+ }
123
+ async stop() {
124
+ if (!this.running || !this.server) {
125
+ return;
126
+ }
127
+ // Cleanup SSE connections
128
+ if (this.sseHandler) {
129
+ this.sseHandler.cleanup();
130
+ }
131
+ return new Promise((resolve) => {
132
+ this.server.close(() => {
133
+ this.running = false;
134
+ this.startTime = null;
135
+ resolve();
136
+ });
137
+ });
138
+ }
139
+ isRunning() {
140
+ return this.running;
141
+ }
142
+ getPort() {
143
+ return this.effectivePort;
144
+ }
145
+ getHost() {
146
+ return this.effectiveHost;
147
+ }
148
+ isAuthEnabled() {
149
+ return ((this.config.remote.auth.type === 'jwt' && this.authenticator !== null) ||
150
+ (this.config.remote.auth.type === 'oauth2' && this.oauthServer !== null));
151
+ }
152
+ isOAuthEnabled() {
153
+ return this.config.remote.auth.type === 'oauth2' && this.oauthServer !== null;
154
+ }
155
+ getConfig() {
156
+ return this.config;
157
+ }
158
+ handleRequest(req, res) {
159
+ const url = req.url || '/';
160
+ const method = req.method || 'GET';
161
+ const origin = req.headers.origin;
162
+ // Add CORS headers
163
+ const corsHeaders = this.getCORSHeaders(origin);
164
+ for (const [key, value] of Object.entries(corsHeaders)) {
165
+ res.setHeader(key, value);
166
+ }
167
+ // Handle preflight
168
+ if (method === 'OPTIONS') {
169
+ res.writeHead(204);
170
+ res.end();
171
+ return;
172
+ }
173
+ // Health check endpoint (no auth required)
174
+ if (url === '/health' && method === 'GET') {
175
+ this.handleHealthCheck(res);
176
+ return;
177
+ }
178
+ // OAuth endpoints (Requirements 21-31)
179
+ if (this.oauthHandler) {
180
+ const path = url.split('?')[0];
181
+ const oauthPaths = [
182
+ '/.well-known/oauth-protected-resource',
183
+ '/.well-known/oauth-authorization-server',
184
+ '/oauth/register',
185
+ '/oauth/authorize',
186
+ '/oauth/login',
187
+ '/oauth/token',
188
+ ];
189
+ if (oauthPaths.includes(path)) {
190
+ this.oauthHandler.handleRequest(req, res).catch(() => {
191
+ res.writeHead(500, { 'Content-Type': 'application/json' });
192
+ res.end(JSON.stringify({ error: 'Internal server error' }));
193
+ });
194
+ return;
195
+ }
196
+ }
197
+ // Auth token endpoint (for JWT mode)
198
+ if (url === '/auth/token' && method === 'POST' && !this.isOAuthEnabled()) {
199
+ this.handleAuthToken(req, res);
200
+ return;
201
+ }
202
+ // MCP SSE endpoint for Streamable HTTP Transport (Requirement 20.1)
203
+ // GET /mcp establishes SSE stream for server->client notifications
204
+ if (url === '/mcp' && method === 'GET') {
205
+ this.handleMCPSSERequest(req, res);
206
+ return;
207
+ }
208
+ // MCP endpoint (auth required if enabled)
209
+ if (url === '/mcp' && method === 'POST') {
210
+ this.handleMCPRequest(req, res);
211
+ return;
212
+ }
213
+ // Root path - show server info
214
+ if ((url === '/' || url === '') && method === 'GET') {
215
+ res.writeHead(200, { 'Content-Type': 'application/json' });
216
+ res.end(JSON.stringify({
217
+ name: 'sage',
218
+ version: VERSION,
219
+ status: 'running',
220
+ endpoints: {
221
+ mcp: '/mcp',
222
+ health: '/health',
223
+ oauth: this.isOAuthEnabled() ? {
224
+ metadata: '/.well-known/oauth-authorization-server',
225
+ authorize: '/oauth/authorize',
226
+ token: '/oauth/token',
227
+ register: '/oauth/register',
228
+ } : undefined,
229
+ },
230
+ }));
231
+ return;
232
+ }
233
+ // 404 for unknown routes
234
+ res.writeHead(404, { 'Content-Type': 'application/json' });
235
+ res.end(JSON.stringify({ error: 'Not found' }));
236
+ }
237
+ getCORSHeaders(origin) {
238
+ const allowedOrigins = this.config.remote.cors.allowedOrigins;
239
+ let allowOrigin = '*';
240
+ if (allowedOrigins.includes('*')) {
241
+ allowOrigin = '*';
242
+ }
243
+ else if (origin && allowedOrigins.includes(origin)) {
244
+ allowOrigin = origin;
245
+ }
246
+ else if (allowedOrigins.length === 1) {
247
+ allowOrigin = allowedOrigins[0];
248
+ }
249
+ return {
250
+ 'Access-Control-Allow-Origin': allowOrigin,
251
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
252
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
253
+ 'Access-Control-Max-Age': '86400',
254
+ };
255
+ }
256
+ handleHealthCheck(res) {
257
+ const uptime = this.startTime ? Date.now() - this.startTime.getTime() : 0;
258
+ const health = {
259
+ status: this.running ? 'ok' : 'error',
260
+ uptime,
261
+ version: VERSION,
262
+ timestamp: new Date().toISOString(),
263
+ authEnabled: this.isAuthEnabled(),
264
+ };
265
+ res.writeHead(200, { 'Content-Type': 'application/json' });
266
+ res.end(JSON.stringify(health));
267
+ }
268
+ handleAuthToken(req, res) {
269
+ // Check if auth is enabled
270
+ if (!this.isAuthEnabled() || !this.authenticator) {
271
+ res.writeHead(400, { 'Content-Type': 'application/json' });
272
+ res.end(JSON.stringify({ error: 'Authentication is disabled' }));
273
+ return;
274
+ }
275
+ // Read request body
276
+ let body = '';
277
+ req.on('data', (chunk) => {
278
+ body += chunk.toString();
279
+ });
280
+ req.on('end', async () => {
281
+ try {
282
+ const parsed = JSON.parse(body);
283
+ const secret = parsed.secret;
284
+ if (!secret) {
285
+ res.writeHead(401, { 'Content-Type': 'application/json' });
286
+ res.end(JSON.stringify({ error: 'Secret is required' }));
287
+ return;
288
+ }
289
+ const result = await this.authenticator.authenticate(secret);
290
+ if (result.success) {
291
+ res.writeHead(200, { 'Content-Type': 'application/json' });
292
+ res.end(JSON.stringify({
293
+ token: result.token,
294
+ expiresIn: result.expiresIn,
295
+ }));
296
+ }
297
+ else {
298
+ res.writeHead(401, { 'Content-Type': 'application/json' });
299
+ res.end(JSON.stringify({ error: result.error || 'Invalid secret' }));
300
+ }
301
+ }
302
+ catch {
303
+ res.writeHead(400, { 'Content-Type': 'application/json' });
304
+ res.end(JSON.stringify({ error: 'Invalid request body' }));
305
+ }
306
+ });
307
+ }
308
+ /**
309
+ * Verify Bearer token (supports both JWT and OAuth, tries both if configured)
310
+ */
311
+ async verifyBearerToken(authHeader) {
312
+ if (!authHeader) {
313
+ return { valid: false, error: 'Authentication required' };
314
+ }
315
+ const parts = authHeader.split(' ');
316
+ if (parts.length !== 2 || parts[0].toLowerCase() !== 'bearer') {
317
+ return { valid: false, error: 'Invalid Authorization header' };
318
+ }
319
+ const token = parts[1];
320
+ // Try OAuth verification first if OAuth is enabled
321
+ if (this.isOAuthEnabled() && this.oauthServer) {
322
+ const result = await this.oauthServer.verifyAccessToken(token);
323
+ if (result.valid) {
324
+ return { valid: true };
325
+ }
326
+ // If OAuth fails and static tokens are enabled, try static token verification
327
+ if (this.authenticator) {
328
+ const staticResult = await this.authenticator.verifyToken(token);
329
+ if (staticResult.valid) {
330
+ return { valid: true };
331
+ }
332
+ }
333
+ // Return the OAuth error if both failed
334
+ return { valid: false, error: result.error };
335
+ }
336
+ // Fall back to JWT verification only
337
+ if (this.authenticator) {
338
+ const result = await this.authenticator.verifyToken(token);
339
+ return { valid: result.valid, error: result.error };
340
+ }
341
+ return { valid: false, error: 'No authentication configured' };
342
+ }
343
+ /**
344
+ * Handle GET /mcp request for SSE stream (Streamable HTTP Transport)
345
+ * Requirement 20.1, 20.10, 31.5 (OAuth Bearer auth for SSE)
346
+ */
347
+ handleMCPSSERequest(req, res) {
348
+ // Requirement 20.10, 31.5: Check authentication if enabled
349
+ if (this.isAuthEnabled()) {
350
+ // Add WWW-Authenticate header for OAuth (Requirement 22.4)
351
+ if (this.isOAuthEnabled() && this.oauthServer) {
352
+ res.setHeader('WWW-Authenticate', this.oauthServer.getWWWAuthenticateHeader());
353
+ }
354
+ this.verifyBearerToken(req.headers.authorization).then((result) => {
355
+ if (!result.valid) {
356
+ res.writeHead(401, { 'Content-Type': 'application/json' });
357
+ res.end(JSON.stringify({ error: result.error || 'Invalid token' }));
358
+ return;
359
+ }
360
+ this.establishSSEConnection(req, res);
361
+ });
362
+ }
363
+ else {
364
+ // Requirement 20.10: authEnabled: false allows access without auth
365
+ this.establishSSEConnection(req, res);
366
+ }
367
+ }
368
+ /**
369
+ * Establish SSE connection
370
+ */
371
+ establishSSEConnection(req, res) {
372
+ if (!this.sseHandler) {
373
+ res.writeHead(500, { 'Content-Type': 'application/json' });
374
+ res.end(JSON.stringify({ error: 'SSE handler not initialized' }));
375
+ return;
376
+ }
377
+ this.sseHandler.handleSSERequest(req, res);
378
+ }
379
+ handleMCPRequest(req, res) {
380
+ // Check authentication if enabled
381
+ if (this.isAuthEnabled()) {
382
+ // Add WWW-Authenticate header for OAuth (Requirement 22.4)
383
+ if (this.isOAuthEnabled() && this.oauthServer) {
384
+ res.setHeader('WWW-Authenticate', this.oauthServer.getWWWAuthenticateHeader());
385
+ }
386
+ this.verifyBearerToken(req.headers.authorization).then((result) => {
387
+ if (!result.valid) {
388
+ res.writeHead(401, { 'Content-Type': 'application/json' });
389
+ res.end(JSON.stringify({
390
+ jsonrpc: '2.0',
391
+ id: null,
392
+ error: {
393
+ code: -32002,
394
+ message: result.error || 'Invalid token',
395
+ },
396
+ }));
397
+ return;
398
+ }
399
+ this.processMCPRequest(req, res);
400
+ });
401
+ }
402
+ else {
403
+ this.processMCPRequest(req, res);
404
+ }
405
+ }
406
+ processMCPRequest(req, res) {
407
+ let body = '';
408
+ req.on('data', (chunk) => {
409
+ body += chunk.toString();
410
+ });
411
+ req.on('end', async () => {
412
+ try {
413
+ const request = this.parseJSONRPCRequest(body);
414
+ // Process request through MCP handler
415
+ if (!this.mcpHandler) {
416
+ throw new Error('MCP handler not initialized');
417
+ }
418
+ const mcpRequest = {
419
+ jsonrpc: '2.0',
420
+ id: request.id,
421
+ method: request.method,
422
+ params: request.params,
423
+ };
424
+ const response = await this.mcpHandler.handleRequest(mcpRequest);
425
+ res.writeHead(200, { 'Content-Type': 'application/json' });
426
+ res.end(JSON.stringify(response));
427
+ }
428
+ catch (error) {
429
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
430
+ res.writeHead(400, { 'Content-Type': 'application/json' });
431
+ res.end(JSON.stringify({
432
+ jsonrpc: '2.0',
433
+ id: null,
434
+ error: {
435
+ code: -32700,
436
+ message: errorMessage,
437
+ },
438
+ }));
439
+ }
440
+ });
441
+ }
442
+ parseJSONRPCRequest(body) {
443
+ let parsed;
444
+ try {
445
+ parsed = JSON.parse(body);
446
+ }
447
+ catch {
448
+ throw new Error('Invalid JSON');
449
+ }
450
+ const request = parsed;
451
+ if (!request.jsonrpc || request.jsonrpc !== '2.0') {
452
+ throw new Error('Invalid JSON-RPC request');
453
+ }
454
+ if (request.method === undefined) {
455
+ throw new Error('Invalid JSON-RPC request: missing method');
456
+ }
457
+ return {
458
+ jsonrpc: '2.0',
459
+ id: request.id ?? null,
460
+ method: request.method,
461
+ params: request.params,
462
+ };
463
+ }
464
+ }
465
+ /**
466
+ * Create HTTP server with configuration from file
467
+ */
468
+ export async function createHTTPServerWithConfig(options = {}) {
469
+ // Load configuration
470
+ const configPath = options.configPath ?? DEFAULT_REMOTE_CONFIG_PATH;
471
+ const config = await loadRemoteConfig(configPath);
472
+ // Create and start server
473
+ const server = new HTTPServerWithConfigImpl(config, options);
474
+ await server.start();
475
+ return server;
476
+ }
477
+ //# sourceMappingURL=http-server-with-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-with-config.js","sourceRoot":"","sources":["../../src/cli/http-server-with-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * HTTP Server Mode for sage
3
+ * Requirements: 14.1, 14.9, 14.10, 13.1
4
+ *
5
+ * Provides HTTP server functionality for Remote MCP access.
6
+ */
7
+ /**
8
+ * HTTP Server Configuration
9
+ */
10
+ export interface HTTPServerConfig {
11
+ /** HTTP server port */
12
+ port: number;
13
+ /** HTTP server host address */
14
+ host: string;
15
+ /** Path to configuration file */
16
+ configPath?: string;
17
+ /** SSL configuration for HTTPS */
18
+ ssl?: {
19
+ cert: string;
20
+ key: string;
21
+ ca?: string;
22
+ };
23
+ /** Authentication configuration */
24
+ auth?: {
25
+ enabled: boolean;
26
+ jwtSecret?: string;
27
+ apiKeys?: string[];
28
+ ipWhitelist?: string[];
29
+ tokenExpiry?: number;
30
+ };
31
+ /** CORS configuration */
32
+ cors?: {
33
+ allowedOrigins?: string[];
34
+ allowedMethods?: string[];
35
+ allowedHeaders?: string[];
36
+ };
37
+ }
38
+ /**
39
+ * Server information
40
+ */
41
+ export interface ServerInfo {
42
+ port: number;
43
+ host: string;
44
+ ssl: boolean;
45
+ authEnabled: boolean;
46
+ startTime?: Date;
47
+ }
48
+ /**
49
+ * Health check response
50
+ */
51
+ export interface HealthCheckResponse {
52
+ status: 'ok' | 'error';
53
+ uptime: number;
54
+ version: string;
55
+ timestamp: string;
56
+ }
57
+ /**
58
+ * HTTP Server Instance interface
59
+ */
60
+ export interface HTTPServerInstance {
61
+ start(): Promise<void>;
62
+ stop(): Promise<void>;
63
+ isRunning(): boolean;
64
+ getPort(): number;
65
+ getHost(): string;
66
+ getServerInfo(): ServerInfo;
67
+ }
68
+ /**
69
+ * Create and start an HTTP server
70
+ * @param config - Server configuration
71
+ * @returns Running HTTP server instance
72
+ */
73
+ export declare function createHTTPServer(config: HTTPServerConfig): Promise<HTTPServerInstance>;
74
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/cli/http-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,mCAAmC;IACnC,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACL,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,IAAI,MAAM,CAAC;IAClB,aAAa,IAAI,UAAU,CAAC;CAC7B;AAsdD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAI5F"}