@platf/bridge 0.0.15 → 0.0.17

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 (40) hide show
  1. package/dist/gateways/statefulBridge.d.ts +10 -7
  2. package/dist/gateways/statefulBridge.js +79 -139
  3. package/dist/gateways/statefulBridge.js.map +1 -1
  4. package/dist/gateways/statelessBridge.d.ts +10 -7
  5. package/dist/gateways/statelessBridge.js +85 -166
  6. package/dist/gateways/statelessBridge.js.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/childProcess.d.ts +37 -0
  9. package/dist/lib/childProcess.js +80 -0
  10. package/dist/lib/childProcess.js.map +1 -0
  11. package/dist/lib/config.d.ts +6 -0
  12. package/dist/lib/config.js +7 -0
  13. package/dist/lib/config.js.map +1 -0
  14. package/dist/lib/discoveryRoutes.d.ts +2 -0
  15. package/dist/lib/discoveryRoutes.js +9 -65
  16. package/dist/lib/discoveryRoutes.js.map +1 -1
  17. package/dist/lib/express.d.ts +33 -0
  18. package/dist/lib/express.js +65 -0
  19. package/dist/lib/express.js.map +1 -0
  20. package/dist/lib/getLogger.d.ts +2 -2
  21. package/dist/lib/getLogger.js.map +1 -1
  22. package/dist/lib/mcpMessages.d.ts +10 -0
  23. package/dist/lib/mcpMessages.js +35 -0
  24. package/dist/lib/mcpMessages.js.map +1 -0
  25. package/dist/lib/oauthProxy.d.ts +14 -0
  26. package/dist/lib/oauthProxy.js +80 -0
  27. package/dist/lib/oauthProxy.js.map +1 -0
  28. package/dist/types.d.ts +3 -0
  29. package/package.json +1 -1
  30. package/src/gateways/statefulBridge.ts +87 -167
  31. package/src/gateways/statelessBridge.ts +100 -218
  32. package/src/index.ts +2 -2
  33. package/src/lib/childProcess.ts +120 -0
  34. package/src/lib/config.ts +9 -0
  35. package/src/lib/discoveryRoutes.ts +9 -68
  36. package/src/lib/express.ts +82 -0
  37. package/src/lib/getLogger.ts +4 -3
  38. package/src/lib/mcpMessages.ts +42 -0
  39. package/src/lib/oauthProxy.ts +86 -0
  40. package/src/types.ts +4 -0
@@ -1,36 +1,3 @@
1
- import express from 'express';
2
- import cors from 'cors';
3
- import { spawn } from 'child_process';
4
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
- import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
- import { isInitializeRequest, } from '@modelcontextprotocol/sdk/types.js';
7
- import { onSignals } from '../lib/onSignals.js';
8
- import { serializeCorsOrigin } from '../lib/cors.js';
9
- import { createAuthMiddleware } from '../lib/authMiddleware.js';
10
- import { createDiscoveryRouter } from '../lib/discoveryRoutes.js';
11
- const VERSION = '1.0.0';
12
- const setResponseHeaders = (res, headers) => Object.entries(headers).forEach(([key, value]) => res.setHeader(key, value));
13
- /** Create a synthetic MCP initialize request */
14
- const createInitializeRequest = (id, protocolVersion) => ({
15
- jsonrpc: '2.0',
16
- id,
17
- method: 'initialize',
18
- params: {
19
- protocolVersion,
20
- capabilities: {
21
- roots: { listChanged: true },
22
- sampling: {},
23
- },
24
- clientInfo: {
25
- name: 'platf-bridge',
26
- version: VERSION,
27
- },
28
- },
29
- });
30
- const createInitializedNotification = () => ({
31
- jsonrpc: '2.0',
32
- method: 'notifications/initialized',
33
- });
34
1
  /**
35
2
  * Stateless stdio-to-Streamable HTTP bridge.
36
3
  *
@@ -39,169 +6,127 @@ const createInitializedNotification = () => ({
39
6
  * and proxies JSON-RPC messages between the HTTP transport and the
40
7
  * child's stdin/stdout.
41
8
  */
9
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
10
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
11
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
12
+ import { createApp } from '../lib/express.js';
13
+ import { onSignals } from '../lib/onSignals.js';
14
+ import { spawnManagedChild } from '../lib/childProcess.js';
15
+ import { createInitializeRequest, createInitializedNotification, generateAutoInitId } from '../lib/mcpMessages.js';
16
+ import { VERSION, SERVER_NAME } from '../lib/config.js';
17
+ /**
18
+ * Start the stateless bridge server.
19
+ */
42
20
  export async function startStatelessBridge(args) {
43
- const { stdioCmd, port, path, logger, corsOrigin, healthEndpoints, headers, protocolVersion, auth, } = args;
44
- logger.info(`[stateless] Starting platf-bridge`);
45
- logger.info(` - Headers: ${Object.keys(headers).length ? JSON.stringify(headers) : '(none)'}`);
21
+ const { stdioCmd, port, path, logger, corsOrigin, healthEndpoints, headers, protocolVersion, auth } = args;
22
+ logger.info(`[stateless] Starting ${SERVER_NAME}`);
46
23
  logger.info(` - port: ${port}`);
47
24
  logger.info(` - stdio: ${stdioCmd}`);
48
25
  logger.info(` - path: ${path}`);
49
26
  logger.info(` - protocolVersion: ${protocolVersion}`);
50
- logger.info(` - CORS: ${corsOrigin ? `enabled (${serializeCorsOrigin(corsOrigin)})` : 'disabled'}`);
51
- logger.info(` - Health endpoints: ${healthEndpoints.length ? healthEndpoints.join(', ') : '(none)'}`);
27
+ logger.info(` - Headers: ${Object.keys(headers).length ? JSON.stringify(headers) : '(none)'}`);
52
28
  onSignals({ logger });
53
- const app = express();
54
- app.set('trust proxy', true);
55
- app.use(express.json());
56
- if (corsOrigin) {
57
- app.use(cors({ origin: corsOrigin }));
58
- }
59
- for (const ep of healthEndpoints) {
60
- app.get(ep, (_req, res) => {
61
- setResponseHeaders(res, headers);
62
- res.send('ok');
63
- });
64
- }
65
- // --- OAuth discovery & auth middleware (when auth is enabled) ---
66
- if (auth) {
67
- app.use(createDiscoveryRouter(auth, logger));
68
- app.use(path, createAuthMiddleware(auth, logger));
69
- logger.info(` - Auth: enabled (issuer=${auth.issuer})`);
70
- }
29
+ const app = createApp({
30
+ logger,
31
+ corsOrigin,
32
+ healthEndpoints,
33
+ headers,
34
+ auth,
35
+ mcpPath: path,
36
+ });
37
+ // POST handler — spawn child, proxy messages
71
38
  app.post(path, async (req, res) => {
72
39
  try {
73
- const server = new Server({ name: 'platf-bridge', version: VERSION }, { capabilities: {} });
74
- const transport = new StreamableHTTPServerTransport({
75
- sessionIdGenerator: undefined,
76
- });
40
+ const server = new Server({ name: SERVER_NAME, version: VERSION }, { capabilities: {} });
41
+ const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
77
42
  await server.connect(transport);
78
- const child = spawn(stdioCmd, { shell: true });
79
- const pendingRequestIds = new Set();
80
- let stderrOutput = '';
81
- child.on('exit', (code, signal) => {
82
- logger.error(`Child exited: code=${code}, signal=${signal}`);
83
- // Include queued original message's ID if it was never sent to the child
84
- if (pendingOriginalMessage && 'id' in pendingOriginalMessage && pendingOriginalMessage.id !== undefined) {
85
- pendingRequestIds.add(pendingOriginalMessage.id);
86
- pendingOriginalMessage = null;
87
- }
88
- // Remove auto-init ID — the client doesn't expect a response for it
89
- if (isAutoInitializing && initializeRequestId !== null) {
90
- pendingRequestIds.delete(initializeRequestId);
91
- }
92
- // Send JSON-RPC error responses for all pending client requests
93
- for (const id of pendingRequestIds) {
94
- const detail = stderrOutput.trim().slice(0, 1000);
95
- const message = detail
96
- ? `Child process exited (code=${code}): ${detail}`
97
- : `Child process exited unexpectedly (code=${code}, signal=${signal})`;
98
- try {
99
- transport.send({
100
- jsonrpc: '2.0',
101
- error: { code: -32603, message },
102
- id,
103
- });
104
- }
105
- catch (e) {
106
- logger.error(`Failed to send error response for request ${id}`, e);
107
- }
108
- }
109
- pendingRequestIds.clear();
110
- transport.close();
111
- });
112
- // --- Auto-initialization state ---
43
+ // Auto-initialization state
113
44
  let isInitialized = false;
114
45
  let initializeRequestId = null;
115
46
  let isAutoInitializing = false;
116
47
  let pendingOriginalMessage = null;
117
- let buffer = '';
118
- child.stdout.on('data', (chunk) => {
119
- buffer += chunk.toString('utf8');
120
- const lines = buffer.split(/\r?\n/);
121
- buffer = lines.pop() ?? '';
122
- for (const line of lines) {
123
- if (!line.trim())
124
- continue;
125
- try {
126
- const jsonMsg = JSON.parse(line);
127
- if ('id' in jsonMsg && jsonMsg.id !== undefined) {
128
- pendingRequestIds.delete(jsonMsg.id);
129
- }
130
- logger.info('Child → HTTP:', line);
131
- // Handle initialize response (auto or client-initiated)
132
- if (initializeRequestId && jsonMsg.id === initializeRequestId) {
133
- logger.info('Initialize response received');
134
- isInitialized = true;
135
- if (isAutoInitializing) {
136
- // Send initialized notification then the queued original message
137
- const notification = createInitializedNotification();
138
- logger.info(`HTTP → Child (initialized): ${JSON.stringify(notification)}`);
139
- child.stdin.write(JSON.stringify(notification) + '\n');
140
- if (pendingOriginalMessage) {
141
- logger.info(`HTTP → Child (original): ${JSON.stringify(pendingOriginalMessage)}`);
142
- child.stdin.write(JSON.stringify(pendingOriginalMessage) + '\n');
143
- pendingOriginalMessage = null;
144
- }
145
- isAutoInitializing = false;
146
- initializeRequestId = null;
147
- return; // don't forward auto-init response to client
48
+ const managedChild = spawnManagedChild(stdioCmd, logger, {
49
+ onMessage: (msg) => {
50
+ // Handle initialize response (auto or client-initiated)
51
+ if (initializeRequestId && 'id' in msg && msg.id === initializeRequestId) {
52
+ logger.info('[stateless] Initialize response received');
53
+ isInitialized = true;
54
+ if (isAutoInitializing) {
55
+ // Send initialized notification then the queued original message
56
+ managedChild.send(createInitializedNotification());
57
+ if (pendingOriginalMessage) {
58
+ managedChild.send(pendingOriginalMessage);
59
+ pendingOriginalMessage = null;
148
60
  }
61
+ isAutoInitializing = false;
149
62
  initializeRequestId = null;
63
+ return; // don't forward auto-init response to client
150
64
  }
151
- try {
152
- transport.send(jsonMsg);
153
- }
154
- catch (e) {
155
- logger.error('Failed to send to HTTP transport', e);
156
- }
65
+ initializeRequestId = null;
157
66
  }
158
- catch {
159
- logger.error(`Child non-JSON: ${line}`);
67
+ transport.send(msg).catch((e) => {
68
+ logger.error('[stateless] Failed to send to HTTP transport', e);
69
+ });
70
+ },
71
+ onExit: (code, signal, stderrOutput) => {
72
+ // Include queued original message's ID if never sent
73
+ if (pendingOriginalMessage && 'id' in pendingOriginalMessage && pendingOriginalMessage.id !== undefined) {
74
+ managedChild.trackRequest(pendingOriginalMessage.id);
75
+ pendingOriginalMessage = null;
160
76
  }
161
- }
162
- });
163
- child.stderr.on('data', (chunk) => {
164
- const text = chunk.toString('utf8');
165
- stderrOutput += text;
166
- logger.error(`Child stderr: ${text}`);
77
+ // Remove auto-init ID — client doesn't expect a response for it
78
+ if (isAutoInitializing && initializeRequestId !== null) {
79
+ managedChild.completeRequest(initializeRequestId);
80
+ }
81
+ // Send error responses for all pending requests
82
+ for (const id of managedChild.getPendingRequests()) {
83
+ const detail = stderrOutput.trim().slice(0, 1000);
84
+ const message = detail
85
+ ? `Child process exited (code=${code}): ${detail}`
86
+ : `Child process exited unexpectedly (code=${code}, signal=${signal})`;
87
+ transport.send({
88
+ jsonrpc: '2.0',
89
+ error: { code: -32603, message },
90
+ id,
91
+ }).catch(() => { });
92
+ }
93
+ transport.close();
94
+ },
167
95
  });
168
96
  transport.onmessage = (msg) => {
169
- logger.info(`HTTP → Child: ${JSON.stringify(msg)}`);
170
97
  // Track client request IDs for error reporting on child exit
171
98
  if ('id' in msg && msg.id !== undefined) {
172
- pendingRequestIds.add(msg.id);
99
+ managedChild.trackRequest(msg.id);
173
100
  }
174
- // Auto-initialize if the first message is not an initialize request
101
+ // Auto-initialize if first message is not an initialize request
175
102
  if (!isInitialized && !isInitializeRequest(msg)) {
176
103
  pendingOriginalMessage = msg;
177
- initializeRequestId = `init_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
104
+ initializeRequestId = generateAutoInitId();
178
105
  isAutoInitializing = true;
179
- logger.info('Non-initialize message detected, sending auto-initialize first');
180
- const initReq = createInitializeRequest(initializeRequestId, protocolVersion);
181
- logger.info(`HTTP → Child (auto-init): ${JSON.stringify(initReq)}`);
182
- child.stdin.write(JSON.stringify(initReq) + '\n');
106
+ logger.info('[stateless] Non-initialize message detected, sending auto-initialize first');
107
+ managedChild.send(createInitializeRequest(initializeRequestId, protocolVersion));
183
108
  return;
184
109
  }
185
110
  // Track client-initiated initialize
186
111
  if (isInitializeRequest(msg) && 'id' in msg && msg.id !== undefined) {
187
112
  initializeRequestId = msg.id;
188
113
  isAutoInitializing = false;
189
- logger.info(`Tracking initialize request ID: ${msg.id}`);
114
+ logger.info(`[stateless] Tracking initialize request ID: ${msg.id}`);
190
115
  }
191
- child.stdin.write(JSON.stringify(msg) + '\n');
116
+ managedChild.send(msg);
192
117
  };
193
118
  transport.onclose = () => {
194
- logger.info('HTTP connection closed');
195
- child.kill();
119
+ logger.info('[stateless] HTTP connection closed');
120
+ managedChild.kill();
196
121
  };
197
122
  transport.onerror = (err) => {
198
- logger.error('HTTP transport error:', err);
199
- child.kill();
123
+ logger.error('[stateless] HTTP transport error:', err);
124
+ managedChild.kill();
200
125
  };
201
126
  await transport.handleRequest(req, res, req.body);
202
127
  }
203
128
  catch (error) {
204
- logger.error('Error handling MCP request:', error);
129
+ logger.error('[stateless] Error handling MCP request:', error);
205
130
  if (!res.headersSent) {
206
131
  res.status(500).json({
207
132
  jsonrpc: '2.0',
@@ -211,22 +136,16 @@ export async function startStatelessBridge(args) {
211
136
  }
212
137
  }
213
138
  });
214
- app.get(path, (_req, res) => {
215
- logger.info('Received GET method not allowed in stateless mode');
216
- res.writeHead(405).end(JSON.stringify({
217
- jsonrpc: '2.0',
218
- error: { code: -32000, message: 'Method not allowed.' },
219
- id: null,
220
- }));
221
- });
222
- app.delete(path, (_req, res) => {
223
- logger.info('Received DELETE — method not allowed in stateless mode');
139
+ // GET/DELETE not allowed in stateless mode
140
+ const methodNotAllowed = (_req, res) => {
224
141
  res.writeHead(405).end(JSON.stringify({
225
142
  jsonrpc: '2.0',
226
143
  error: { code: -32000, message: 'Method not allowed.' },
227
144
  id: null,
228
145
  }));
229
- });
146
+ };
147
+ app.get(path, methodNotAllowed);
148
+ app.delete(path, methodNotAllowed);
230
149
  app.listen(port, () => {
231
150
  logger.info(`Listening on port ${port}`);
232
151
  logger.info(`Streamable HTTP endpoint: http://localhost:${port}${path}`);
@@ -1 +1 @@
1
- {"version":3,"file":"statelessBridge.js","sourceRoot":"","sources":["../../src/gateways/statelessBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statelessBridge.js","sourceRoot":"","sources":["../../src/gateways/statelessBridge.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Child process management for stdio-based MCP servers.
3
+ *
4
+ * Handles spawning child processes, parsing JSON-RPC messages from stdout,
5
+ * and writing messages to stdin.
6
+ */
7
+ import { type ChildProcess } from 'child_process';
8
+ import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
9
+ import type { Logger } from '../types.js';
10
+ export interface ChildProcessCallbacks {
11
+ /** Called when a JSON-RPC message is received from the child */
12
+ onMessage: (msg: JSONRPCMessage) => void;
13
+ /** Called when the child process exits */
14
+ onExit: (code: number | null, signal: string | null, stderrOutput: string) => void;
15
+ /** Called when there's an error spawning or communicating with the child */
16
+ onError?: (err: Error) => void;
17
+ }
18
+ export interface ManagedChildProcess {
19
+ /** The underlying child process */
20
+ child: ChildProcess;
21
+ /** Send a JSON-RPC message to the child's stdin */
22
+ send: (msg: JSONRPCMessage) => boolean;
23
+ /** Kill the child process */
24
+ kill: () => void;
25
+ /** Track a request ID as pending (for error reporting on exit) */
26
+ trackRequest: (id: string | number) => void;
27
+ /** Mark a request ID as completed */
28
+ completeRequest: (id: string | number) => void;
29
+ /** Get all pending request IDs */
30
+ getPendingRequests: () => Set<string | number>;
31
+ }
32
+ /**
33
+ * Spawn a child process and set up JSON-RPC message handling.
34
+ *
35
+ * The child is expected to speak JSON-RPC over stdio (one message per line).
36
+ */
37
+ export declare function spawnManagedChild(command: string, logger: Logger, callbacks: ChildProcessCallbacks): ManagedChildProcess;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Child process management for stdio-based MCP servers.
3
+ *
4
+ * Handles spawning child processes, parsing JSON-RPC messages from stdout,
5
+ * and writing messages to stdin.
6
+ */
7
+ import { spawn } from 'child_process';
8
+ /**
9
+ * Spawn a child process and set up JSON-RPC message handling.
10
+ *
11
+ * The child is expected to speak JSON-RPC over stdio (one message per line).
12
+ */
13
+ export function spawnManagedChild(command, logger, callbacks) {
14
+ const pendingRequestIds = new Set();
15
+ let stderrOutput = '';
16
+ let buffer = '';
17
+ const child = spawn(command, { shell: true, stdio: ['pipe', 'pipe', 'pipe'] });
18
+ logger.info(`[child] Spawned process, pid=${child.pid}`);
19
+ child.on('spawn', () => {
20
+ logger.info(`[child] spawn event fired, pid=${child.pid}`);
21
+ });
22
+ child.on('error', (err) => {
23
+ logger.error(`[child] error event: ${err.message}`);
24
+ callbacks.onError?.(err);
25
+ });
26
+ child.on('exit', (code, signal) => {
27
+ logger.info(`[child] exited: code=${code}, signal=${signal}`);
28
+ callbacks.onExit(code, signal, stderrOutput);
29
+ });
30
+ child.stdout.on('data', (chunk) => {
31
+ const chunkStr = chunk.toString('utf8');
32
+ logger.info(`[child] stdout received ${chunk.length} bytes`);
33
+ buffer += chunkStr;
34
+ const lines = buffer.split(/\r?\n/);
35
+ buffer = lines.pop() ?? '';
36
+ for (const line of lines) {
37
+ if (!line.trim())
38
+ continue;
39
+ try {
40
+ const jsonMsg = JSON.parse(line);
41
+ // Auto-complete request tracking for responses
42
+ if ('id' in jsonMsg && jsonMsg.id !== undefined) {
43
+ pendingRequestIds.delete(jsonMsg.id);
44
+ }
45
+ logger.info(`[child] → message: ${line.slice(0, 200)}${line.length > 200 ? '...' : ''}`);
46
+ callbacks.onMessage(jsonMsg);
47
+ }
48
+ catch {
49
+ logger.error(`[child] non-JSON output: ${line}`);
50
+ }
51
+ }
52
+ });
53
+ child.stderr.on('data', (chunk) => {
54
+ const text = chunk.toString('utf8');
55
+ stderrOutput += text;
56
+ logger.error(`[child] stderr: ${text}`);
57
+ });
58
+ child.stdin.on('error', (err) => {
59
+ logger.error(`[child] stdin error: ${err.message}`);
60
+ });
61
+ return {
62
+ child,
63
+ send: (msg) => {
64
+ const payload = JSON.stringify(msg) + '\n';
65
+ logger.info(`[child] ← message: ${JSON.stringify(msg).slice(0, 200)}`);
66
+ return child.stdin.write(payload);
67
+ },
68
+ kill: () => {
69
+ child.kill();
70
+ },
71
+ trackRequest: (id) => {
72
+ pendingRequestIds.add(id);
73
+ },
74
+ completeRequest: (id) => {
75
+ pendingRequestIds.delete(id);
76
+ },
77
+ getPendingRequests: () => pendingRequestIds,
78
+ };
79
+ }
80
+ //# sourceMappingURL=childProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childProcess.js","sourceRoot":"","sources":["../../src/lib/childProcess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Shared configuration constants */
2
+ export declare const VERSION = "1.0.0";
3
+ /** Default MCP protocol version for auto-initialization */
4
+ export declare const DEFAULT_PROTOCOL_VERSION = "2025-03-26";
5
+ /** Bridge server name used in MCP handshakes */
6
+ export declare const SERVER_NAME = "platf-bridge";
@@ -0,0 +1,7 @@
1
+ /** Shared configuration constants */
2
+ export const VERSION = '1.0.0';
3
+ /** Default MCP protocol version for auto-initialization */
4
+ export const DEFAULT_PROTOCOL_VERSION = '2025-03-26';
5
+ /** Bridge server name used in MCP handshakes */
6
+ export const SERVER_NAME = 'platf-bridge';
7
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAE9B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAA;AAEpD,gDAAgD;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAA"}
@@ -6,6 +6,8 @@
6
6
  * - GET /.well-known/oauth-authorization-server[/*] (RFC 8414 — proxied from issuer)
7
7
  * - POST /oauth/register (Pseudo-DCR — RFC 7591)
8
8
  *
9
+ * OAuth proxy routes (/oauth/authorize, /oauth/token, /jwks) are in oauthProxy.ts.
10
+ *
9
11
  * These endpoints are unauthenticated — they must be accessible to
10
12
  * any client performing OAuth discovery before obtaining a token.
11
13
  */
@@ -6,6 +6,8 @@
6
6
  * - GET /.well-known/oauth-authorization-server[/*] (RFC 8414 — proxied from issuer)
7
7
  * - POST /oauth/register (Pseudo-DCR — RFC 7591)
8
8
  *
9
+ * OAuth proxy routes (/oauth/authorize, /oauth/token, /jwks) are in oauthProxy.ts.
10
+ *
9
11
  * These endpoints are unauthenticated — they must be accessible to
10
12
  * any client performing OAuth discovery before obtaining a token.
11
13
  */
@@ -78,10 +80,15 @@ export function createDiscoveryRouter(auth, logger) {
78
80
  return res.status(502).json({ error: 'upstream_error' });
79
81
  }
80
82
  const metadata = (await upstream.json());
81
- // Patch registration_endpoint to point to our pseudo-DCR
83
+ // Patch all OAuth endpoints to point to our proxy
82
84
  const scheme = req.protocol;
83
85
  const host = req.get('host');
84
- metadata.registration_endpoint = `${scheme}://${host}/oauth/register`;
86
+ const bridgeOrigin = `${scheme}://${host}`;
87
+ metadata.issuer = bridgeOrigin;
88
+ metadata.authorization_endpoint = `${bridgeOrigin}/oauth/authorize`;
89
+ metadata.token_endpoint = `${bridgeOrigin}/oauth/token`;
90
+ metadata.registration_endpoint = `${bridgeOrigin}/oauth/register`;
91
+ metadata.jwks_uri = `${bridgeOrigin}/jwks`;
85
92
  res.json(metadata);
86
93
  }
87
94
  catch (err) {
@@ -109,69 +116,6 @@ export function createDiscoveryRouter(auth, logger) {
109
116
  redirect_uris: Array.isArray(body.redirect_uris) ? body.redirect_uris : [],
110
117
  });
111
118
  });
112
- /**
113
- * OAuth Authorization Endpoint — Redirect to upstream
114
- *
115
- * Since the bridge advertises itself as the authorization_server,
116
- * clients will attempt to call /oauth/authorize here. We redirect
117
- * to the upstream auth server, preserving all query parameters.
118
- */
119
- router.get('/oauth/authorize', (req, res) => {
120
- const upstreamUrl = new URL(`${auth.issuer}/oauth/authorize`);
121
- // Copy all query params to upstream
122
- for (const [key, value] of Object.entries(req.query)) {
123
- if (typeof value === 'string') {
124
- upstreamUrl.searchParams.set(key, value);
125
- }
126
- }
127
- logger.info(`[discovery] Redirecting /oauth/authorize to ${upstreamUrl.toString().slice(0, 100)}...`);
128
- res.redirect(upstreamUrl.toString());
129
- });
130
- /**
131
- * OAuth Token Endpoint — Proxy to upstream
132
- *
133
- * Proxies token exchange requests to the upstream auth server.
134
- */
135
- router.post('/oauth/token', async (req, res) => {
136
- try {
137
- const upstreamUrl = `${auth.issuer}/oauth/token`;
138
- logger.info('[discovery] Proxying /oauth/token to upstream');
139
- const upstreamRes = await fetch(upstreamUrl, {
140
- method: 'POST',
141
- headers: {
142
- 'Content-Type': req.get('Content-Type') || 'application/x-www-form-urlencoded',
143
- },
144
- body: req.get('Content-Type')?.includes('application/json')
145
- ? JSON.stringify(req.body)
146
- : new URLSearchParams(req.body).toString(),
147
- });
148
- const data = await upstreamRes.text();
149
- res.status(upstreamRes.status);
150
- res.set('Content-Type', upstreamRes.headers.get('Content-Type') || 'application/json');
151
- res.send(data);
152
- }
153
- catch (err) {
154
- logger.error('[discovery] Error proxying /oauth/token:', err.message ?? err);
155
- res.status(502).json({ error: 'upstream_error' });
156
- }
157
- });
158
- /**
159
- * JWKS Endpoint — Proxy to upstream
160
- *
161
- * Proxies JSON Web Key Set requests for token verification.
162
- */
163
- router.get('/jwks', async (req, res) => {
164
- try {
165
- const upstreamUrl = `${auth.issuer}/jwks`;
166
- const upstreamRes = await fetch(upstreamUrl);
167
- const data = await upstreamRes.json();
168
- res.json(data);
169
- }
170
- catch (err) {
171
- logger.error('[discovery] Error proxying /jwks:', err.message ?? err);
172
- res.status(502).json({ error: 'upstream_error' });
173
- }
174
- });
175
119
  return router;
176
120
  }
177
121
  //# sourceMappingURL=discoveryRoutes.js.map