@modelcontextprotocol/sdk 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +339 -38
  2. package/dist/cjs/client/auth.d.ts +2 -1
  3. package/dist/cjs/client/auth.d.ts.map +1 -1
  4. package/dist/cjs/client/auth.js +3 -1
  5. package/dist/cjs/client/auth.js.map +1 -1
  6. package/dist/cjs/client/index.d.ts +49 -1
  7. package/dist/cjs/client/index.d.ts.map +1 -1
  8. package/dist/cjs/client/index.js +9 -4
  9. package/dist/cjs/client/index.js.map +1 -1
  10. package/dist/cjs/client/streamableHttp.d.ts +124 -0
  11. package/dist/cjs/client/streamableHttp.d.ts.map +1 -0
  12. package/dist/cjs/client/streamableHttp.js +353 -0
  13. package/dist/cjs/client/streamableHttp.js.map +1 -0
  14. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts +2 -0
  15. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  16. package/dist/cjs/examples/client/simpleStreamableHttp.js +448 -0
  17. package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -0
  18. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  19. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  20. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js +168 -0
  21. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  22. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  23. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  24. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +139 -0
  25. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  26. package/dist/cjs/examples/server/simpleSseServer.d.ts +2 -0
  27. package/dist/cjs/examples/server/simpleSseServer.d.ts.map +1 -0
  28. package/dist/cjs/examples/server/simpleSseServer.js +148 -0
  29. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -0
  30. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts +2 -0
  31. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  32. package/dist/cjs/examples/server/simpleStreamableHttp.js +250 -0
  33. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -0
  34. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  35. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  36. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +229 -0
  37. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  38. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  39. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  40. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +112 -0
  41. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  42. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts +31 -0
  43. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  44. package/dist/cjs/examples/shared/inMemoryEventStore.js +69 -0
  45. package/dist/cjs/examples/shared/inMemoryEventStore.js.map +1 -0
  46. package/dist/cjs/inMemory.d.ts +13 -3
  47. package/dist/cjs/inMemory.d.ts.map +1 -1
  48. package/dist/cjs/inMemory.js +9 -7
  49. package/dist/cjs/inMemory.js.map +1 -1
  50. package/dist/cjs/server/auth/handlers/token.d.ts.map +1 -1
  51. package/dist/cjs/server/auth/handlers/token.js +10 -5
  52. package/dist/cjs/server/auth/handlers/token.js.map +1 -1
  53. package/dist/cjs/server/auth/provider.d.ts +9 -1
  54. package/dist/cjs/server/auth/provider.d.ts.map +1 -1
  55. package/dist/cjs/server/auth/providers/proxyProvider.d.ts +43 -0
  56. package/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -0
  57. package/dist/cjs/server/auth/providers/proxyProvider.js +145 -0
  58. package/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -0
  59. package/dist/cjs/server/auth/router.d.ts +6 -0
  60. package/dist/cjs/server/auth/router.d.ts.map +1 -1
  61. package/dist/cjs/server/auth/router.js +5 -4
  62. package/dist/cjs/server/auth/router.js.map +1 -1
  63. package/dist/cjs/server/auth/types.d.ts +5 -0
  64. package/dist/cjs/server/auth/types.d.ts.map +1 -1
  65. package/dist/cjs/server/index.d.ts +12 -0
  66. package/dist/cjs/server/index.d.ts.map +1 -1
  67. package/dist/cjs/server/mcp.d.ts +100 -19
  68. package/dist/cjs/server/mcp.d.ts.map +1 -1
  69. package/dist/cjs/server/mcp.js +154 -12
  70. package/dist/cjs/server/mcp.js.map +1 -1
  71. package/dist/cjs/server/sse.d.ts +10 -3
  72. package/dist/cjs/server/sse.d.ts.map +1 -1
  73. package/dist/cjs/server/sse.js +14 -5
  74. package/dist/cjs/server/sse.js.map +1 -1
  75. package/dist/cjs/server/streamableHttp.d.ts +146 -0
  76. package/dist/cjs/server/streamableHttp.d.ts.map +1 -0
  77. package/dist/cjs/server/streamableHttp.js +538 -0
  78. package/dist/cjs/server/streamableHttp.js.map +1 -0
  79. package/dist/cjs/shared/protocol.d.ts +31 -5
  80. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  81. package/dist/cjs/shared/protocol.js +29 -19
  82. package/dist/cjs/shared/protocol.js.map +1 -1
  83. package/dist/cjs/shared/stdio.js +1 -1
  84. package/dist/cjs/shared/stdio.js.map +1 -1
  85. package/dist/cjs/shared/transport.d.ts +32 -3
  86. package/dist/cjs/shared/transport.d.ts.map +1 -1
  87. package/dist/cjs/shared/uriTemplate.d.ts +1 -0
  88. package/dist/cjs/shared/uriTemplate.d.ts.map +1 -1
  89. package/dist/cjs/shared/uriTemplate.js +3 -0
  90. package/dist/cjs/shared/uriTemplate.js.map +1 -1
  91. package/dist/cjs/types.d.ts +1990 -35
  92. package/dist/cjs/types.d.ts.map +1 -1
  93. package/dist/cjs/types.js +38 -4
  94. package/dist/cjs/types.js.map +1 -1
  95. package/dist/esm/client/auth.d.ts +2 -1
  96. package/dist/esm/client/auth.d.ts.map +1 -1
  97. package/dist/esm/client/auth.js +3 -1
  98. package/dist/esm/client/auth.js.map +1 -1
  99. package/dist/esm/client/index.d.ts +49 -1
  100. package/dist/esm/client/index.d.ts.map +1 -1
  101. package/dist/esm/client/index.js +9 -4
  102. package/dist/esm/client/index.js.map +1 -1
  103. package/dist/esm/client/streamableHttp.d.ts +124 -0
  104. package/dist/esm/client/streamableHttp.d.ts.map +1 -0
  105. package/dist/esm/client/streamableHttp.js +348 -0
  106. package/dist/esm/client/streamableHttp.js.map +1 -0
  107. package/dist/esm/examples/client/simpleStreamableHttp.d.ts +2 -0
  108. package/dist/esm/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  109. package/dist/esm/examples/client/simpleStreamableHttp.js +446 -0
  110. package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -0
  111. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  112. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  113. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js +166 -0
  114. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  115. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  116. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  117. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +134 -0
  118. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  119. package/dist/esm/examples/server/simpleSseServer.d.ts +2 -0
  120. package/dist/esm/examples/server/simpleSseServer.d.ts.map +1 -0
  121. package/dist/esm/examples/server/simpleSseServer.js +143 -0
  122. package/dist/esm/examples/server/simpleSseServer.js.map +1 -0
  123. package/dist/esm/examples/server/simpleStreamableHttp.d.ts +2 -0
  124. package/dist/esm/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  125. package/dist/esm/examples/server/simpleStreamableHttp.js +245 -0
  126. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -0
  127. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  128. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  129. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +224 -0
  130. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  131. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  132. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  133. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +107 -0
  134. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  135. package/dist/esm/examples/shared/inMemoryEventStore.d.ts +31 -0
  136. package/dist/esm/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  137. package/dist/esm/examples/shared/inMemoryEventStore.js +65 -0
  138. package/dist/esm/examples/shared/inMemoryEventStore.js.map +1 -0
  139. package/dist/esm/inMemory.d.ts +13 -3
  140. package/dist/esm/inMemory.d.ts.map +1 -1
  141. package/dist/esm/inMemory.js +9 -7
  142. package/dist/esm/inMemory.js.map +1 -1
  143. package/dist/esm/server/auth/handlers/token.d.ts.map +1 -1
  144. package/dist/esm/server/auth/handlers/token.js +10 -5
  145. package/dist/esm/server/auth/handlers/token.js.map +1 -1
  146. package/dist/esm/server/auth/provider.d.ts +9 -1
  147. package/dist/esm/server/auth/provider.d.ts.map +1 -1
  148. package/dist/esm/server/auth/providers/proxyProvider.d.ts +43 -0
  149. package/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -0
  150. package/dist/esm/server/auth/providers/proxyProvider.js +141 -0
  151. package/dist/esm/server/auth/providers/proxyProvider.js.map +1 -0
  152. package/dist/esm/server/auth/router.d.ts +6 -0
  153. package/dist/esm/server/auth/router.d.ts.map +1 -1
  154. package/dist/esm/server/auth/router.js +5 -4
  155. package/dist/esm/server/auth/router.js.map +1 -1
  156. package/dist/esm/server/auth/types.d.ts +5 -0
  157. package/dist/esm/server/auth/types.d.ts.map +1 -1
  158. package/dist/esm/server/index.d.ts +12 -0
  159. package/dist/esm/server/index.d.ts.map +1 -1
  160. package/dist/esm/server/mcp.d.ts +100 -19
  161. package/dist/esm/server/mcp.d.ts.map +1 -1
  162. package/dist/esm/server/mcp.js +154 -12
  163. package/dist/esm/server/mcp.js.map +1 -1
  164. package/dist/esm/server/sse.d.ts +10 -3
  165. package/dist/esm/server/sse.d.ts.map +1 -1
  166. package/dist/esm/server/sse.js +14 -5
  167. package/dist/esm/server/sse.js.map +1 -1
  168. package/dist/esm/server/streamableHttp.d.ts +146 -0
  169. package/dist/esm/server/streamableHttp.d.ts.map +1 -0
  170. package/dist/esm/server/streamableHttp.js +531 -0
  171. package/dist/esm/server/streamableHttp.js.map +1 -0
  172. package/dist/esm/shared/protocol.d.ts +31 -5
  173. package/dist/esm/shared/protocol.d.ts.map +1 -1
  174. package/dist/esm/shared/protocol.js +30 -20
  175. package/dist/esm/shared/protocol.js.map +1 -1
  176. package/dist/esm/shared/stdio.js +1 -1
  177. package/dist/esm/shared/stdio.js.map +1 -1
  178. package/dist/esm/shared/transport.d.ts +32 -3
  179. package/dist/esm/shared/transport.d.ts.map +1 -1
  180. package/dist/esm/shared/uriTemplate.d.ts +1 -0
  181. package/dist/esm/shared/uriTemplate.d.ts.map +1 -1
  182. package/dist/esm/shared/uriTemplate.js +3 -0
  183. package/dist/esm/shared/uriTemplate.js.map +1 -1
  184. package/dist/esm/types.d.ts +1990 -35
  185. package/dist/esm/types.d.ts.map +1 -1
  186. package/dist/esm/types.js +30 -2
  187. package/dist/esm/types.js.map +1 -1
  188. package/package.json +2 -2
@@ -0,0 +1,224 @@
1
+ import express from 'express';
2
+ import { randomUUID } from "node:crypto";
3
+ import { McpServer } from '../../server/mcp.js';
4
+ import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
5
+ import { SSEServerTransport } from '../../server/sse.js';
6
+ import { z } from 'zod';
7
+ import { isInitializeRequest } from '../../types.js';
8
+ import { InMemoryEventStore } from '../shared/inMemoryEventStore.js';
9
+ /**
10
+ * This example server demonstrates backwards compatibility with both:
11
+ * 1. The deprecated HTTP+SSE transport (protocol version 2024-11-05)
12
+ * 2. The Streamable HTTP transport (protocol version 2025-03-26)
13
+ *
14
+ * It maintains a single MCP server instance but exposes two transport options:
15
+ * - /mcp: The new Streamable HTTP endpoint (supports GET/POST/DELETE)
16
+ * - /sse: The deprecated SSE endpoint for older clients (GET to establish stream)
17
+ * - /messages: The deprecated POST endpoint for older clients (POST to send messages)
18
+ */
19
+ const server = new McpServer({
20
+ name: 'backwards-compatible-server',
21
+ version: '1.0.0',
22
+ }, { capabilities: { logging: {} } });
23
+ // Register a simple tool that sends notifications over time
24
+ server.tool('start-notification-stream', 'Starts sending periodic notifications for testing resumability', {
25
+ interval: z.number().describe('Interval in milliseconds between notifications').default(100),
26
+ count: z.number().describe('Number of notifications to send (0 for 100)').default(50),
27
+ }, async ({ interval, count }, { sendNotification }) => {
28
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
29
+ let counter = 0;
30
+ while (count === 0 || counter < count) {
31
+ counter++;
32
+ try {
33
+ await sendNotification({
34
+ method: "notifications/message",
35
+ params: {
36
+ level: "info",
37
+ data: `Periodic notification #${counter} at ${new Date().toISOString()}`
38
+ }
39
+ });
40
+ }
41
+ catch (error) {
42
+ console.error("Error sending notification:", error);
43
+ }
44
+ // Wait for the specified interval
45
+ await sleep(interval);
46
+ }
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: `Started sending periodic notifications every ${interval}ms`,
52
+ }
53
+ ],
54
+ };
55
+ });
56
+ // Create Express application
57
+ const app = express();
58
+ app.use(express.json());
59
+ // Store transports by session ID
60
+ const transports = {};
61
+ //=============================================================================
62
+ // STREAMABLE HTTP TRANSPORT (PROTOCOL VERSION 2025-03-26)
63
+ //=============================================================================
64
+ // Handle all MCP Streamable HTTP requests (GET, POST, DELETE) on a single endpoint
65
+ app.all('/mcp', async (req, res) => {
66
+ console.log(`Received ${req.method} request to /mcp`);
67
+ try {
68
+ // Check for existing session ID
69
+ const sessionId = req.headers['mcp-session-id'];
70
+ let transport;
71
+ if (sessionId && transports[sessionId]) {
72
+ // Check if the transport is of the correct type
73
+ const existingTransport = transports[sessionId];
74
+ if (existingTransport instanceof StreamableHTTPServerTransport) {
75
+ // Reuse existing transport
76
+ transport = existingTransport;
77
+ }
78
+ else {
79
+ // Transport exists but is not a StreamableHTTPServerTransport (could be SSEServerTransport)
80
+ res.status(400).json({
81
+ jsonrpc: '2.0',
82
+ error: {
83
+ code: -32000,
84
+ message: 'Bad Request: Session exists but uses a different transport protocol',
85
+ },
86
+ id: null,
87
+ });
88
+ return;
89
+ }
90
+ }
91
+ else if (!sessionId && req.method === 'POST' && isInitializeRequest(req.body)) {
92
+ const eventStore = new InMemoryEventStore();
93
+ transport = new StreamableHTTPServerTransport({
94
+ sessionIdGenerator: () => randomUUID(),
95
+ eventStore, // Enable resumability
96
+ onsessioninitialized: (sessionId) => {
97
+ // Store the transport by session ID when session is initialized
98
+ console.log(`StreamableHTTP session initialized with ID: ${sessionId}`);
99
+ transports[sessionId] = transport;
100
+ }
101
+ });
102
+ // Set up onclose handler to clean up transport when closed
103
+ transport.onclose = () => {
104
+ const sid = transport.sessionId;
105
+ if (sid && transports[sid]) {
106
+ console.log(`Transport closed for session ${sid}, removing from transports map`);
107
+ delete transports[sid];
108
+ }
109
+ };
110
+ // Connect the transport to the MCP server
111
+ await server.connect(transport);
112
+ }
113
+ else {
114
+ // Invalid request - no session ID or not initialization request
115
+ res.status(400).json({
116
+ jsonrpc: '2.0',
117
+ error: {
118
+ code: -32000,
119
+ message: 'Bad Request: No valid session ID provided',
120
+ },
121
+ id: null,
122
+ });
123
+ return;
124
+ }
125
+ // Handle the request with the transport
126
+ await transport.handleRequest(req, res, req.body);
127
+ }
128
+ catch (error) {
129
+ console.error('Error handling MCP request:', error);
130
+ if (!res.headersSent) {
131
+ res.status(500).json({
132
+ jsonrpc: '2.0',
133
+ error: {
134
+ code: -32603,
135
+ message: 'Internal server error',
136
+ },
137
+ id: null,
138
+ });
139
+ }
140
+ }
141
+ });
142
+ //=============================================================================
143
+ // DEPRECATED HTTP+SSE TRANSPORT (PROTOCOL VERSION 2024-11-05)
144
+ //=============================================================================
145
+ app.get('/sse', async (req, res) => {
146
+ console.log('Received GET request to /sse (deprecated SSE transport)');
147
+ const transport = new SSEServerTransport('/messages', res);
148
+ transports[transport.sessionId] = transport;
149
+ res.on("close", () => {
150
+ delete transports[transport.sessionId];
151
+ });
152
+ await server.connect(transport);
153
+ });
154
+ app.post("/messages", async (req, res) => {
155
+ const sessionId = req.query.sessionId;
156
+ let transport;
157
+ const existingTransport = transports[sessionId];
158
+ if (existingTransport instanceof SSEServerTransport) {
159
+ // Reuse existing transport
160
+ transport = existingTransport;
161
+ }
162
+ else {
163
+ // Transport exists but is not a SSEServerTransport (could be StreamableHTTPServerTransport)
164
+ res.status(400).json({
165
+ jsonrpc: '2.0',
166
+ error: {
167
+ code: -32000,
168
+ message: 'Bad Request: Session exists but uses a different transport protocol',
169
+ },
170
+ id: null,
171
+ });
172
+ return;
173
+ }
174
+ if (transport) {
175
+ await transport.handlePostMessage(req, res);
176
+ }
177
+ else {
178
+ res.status(400).send('No transport found for sessionId');
179
+ }
180
+ });
181
+ // Start the server
182
+ const PORT = 3000;
183
+ app.listen(PORT, () => {
184
+ console.log(`Backwards compatible MCP server listening on port ${PORT}`);
185
+ console.log(`
186
+ ==============================================
187
+ SUPPORTED TRANSPORT OPTIONS:
188
+
189
+ 1. Streamable Http(Protocol version: 2025-03-26)
190
+ Endpoint: /mcp
191
+ Methods: GET, POST, DELETE
192
+ Usage:
193
+ - Initialize with POST to /mcp
194
+ - Establish SSE stream with GET to /mcp
195
+ - Send requests with POST to /mcp
196
+ - Terminate session with DELETE to /mcp
197
+
198
+ 2. Http + SSE (Protocol version: 2024-11-05)
199
+ Endpoints: /sse (GET) and /messages (POST)
200
+ Usage:
201
+ - Establish SSE stream with GET to /sse
202
+ - Send requests with POST to /messages?sessionId=<id>
203
+ ==============================================
204
+ `);
205
+ });
206
+ // Handle server shutdown
207
+ process.on('SIGINT', async () => {
208
+ console.log('Shutting down server...');
209
+ // Close all active transports to properly clean up resources
210
+ for (const sessionId in transports) {
211
+ try {
212
+ console.log(`Closing transport for session ${sessionId}`);
213
+ await transports[sessionId].close();
214
+ delete transports[sessionId];
215
+ }
216
+ catch (error) {
217
+ console.error(`Error closing transport for session ${sessionId}:`, error);
218
+ }
219
+ }
220
+ await server.close();
221
+ console.log('Server shutdown complete');
222
+ process.exit(0);
223
+ });
224
+ //# sourceMappingURL=sseAndStreamableHttpCompatibleServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sseAndStreamableHttpCompatibleServer.js","sourceRoot":"","sources":["../../../../src/examples/server/sseAndStreamableHttpCompatibleServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=standaloneSseWithGetStreamableHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standaloneSseWithGetStreamableHttp.d.ts","sourceRoot":"","sources":["../../../../src/examples/server/standaloneSseWithGetStreamableHttp.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ import express from 'express';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { McpServer } from '../../server/mcp.js';
4
+ import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
5
+ import { isInitializeRequest } from '../../types.js';
6
+ // Create an MCP server with implementation details
7
+ const server = new McpServer({
8
+ name: 'resource-list-changed-notification-server',
9
+ version: '1.0.0',
10
+ });
11
+ // Store transports by session ID to send notifications
12
+ const transports = {};
13
+ const addResource = (name, content) => {
14
+ const uri = `https://mcp-example.com/dynamic/${encodeURIComponent(name)}`;
15
+ server.resource(name, uri, { mimeType: 'text/plain', description: `Dynamic resource: ${name}` }, async () => {
16
+ return {
17
+ contents: [{ uri, text: content }],
18
+ };
19
+ });
20
+ };
21
+ addResource('example-resource', 'Initial content for example-resource');
22
+ const resourceChangeInterval = setInterval(() => {
23
+ const name = randomUUID();
24
+ addResource(name, `Content for ${name}`);
25
+ }, 5000); // Change resources every 5 seconds for testing
26
+ const app = express();
27
+ app.use(express.json());
28
+ app.post('/mcp', async (req, res) => {
29
+ console.log('Received MCP request:', req.body);
30
+ try {
31
+ // Check for existing session ID
32
+ const sessionId = req.headers['mcp-session-id'];
33
+ let transport;
34
+ if (sessionId && transports[sessionId]) {
35
+ // Reuse existing transport
36
+ transport = transports[sessionId];
37
+ }
38
+ else if (!sessionId && isInitializeRequest(req.body)) {
39
+ // New initialization request
40
+ transport = new StreamableHTTPServerTransport({
41
+ sessionIdGenerator: () => randomUUID(),
42
+ onsessioninitialized: (sessionId) => {
43
+ // Store the transport by session ID when session is initialized
44
+ // This avoids race conditions where requests might come in before the session is stored
45
+ console.log(`Session initialized with ID: ${sessionId}`);
46
+ transports[sessionId] = transport;
47
+ }
48
+ });
49
+ // Connect the transport to the MCP server
50
+ await server.connect(transport);
51
+ // Handle the request - the onsessioninitialized callback will store the transport
52
+ await transport.handleRequest(req, res, req.body);
53
+ return; // Already handled
54
+ }
55
+ else {
56
+ // Invalid request - no session ID or not initialization request
57
+ res.status(400).json({
58
+ jsonrpc: '2.0',
59
+ error: {
60
+ code: -32000,
61
+ message: 'Bad Request: No valid session ID provided',
62
+ },
63
+ id: null,
64
+ });
65
+ return;
66
+ }
67
+ // Handle the request with existing transport
68
+ await transport.handleRequest(req, res, req.body);
69
+ }
70
+ catch (error) {
71
+ console.error('Error handling MCP request:', error);
72
+ if (!res.headersSent) {
73
+ res.status(500).json({
74
+ jsonrpc: '2.0',
75
+ error: {
76
+ code: -32603,
77
+ message: 'Internal server error',
78
+ },
79
+ id: null,
80
+ });
81
+ }
82
+ }
83
+ });
84
+ // Handle GET requests for SSE streams (now using built-in support from StreamableHTTP)
85
+ app.get('/mcp', async (req, res) => {
86
+ const sessionId = req.headers['mcp-session-id'];
87
+ if (!sessionId || !transports[sessionId]) {
88
+ res.status(400).send('Invalid or missing session ID');
89
+ return;
90
+ }
91
+ console.log(`Establishing SSE stream for session ${sessionId}`);
92
+ const transport = transports[sessionId];
93
+ await transport.handleRequest(req, res);
94
+ });
95
+ // Start the server
96
+ const PORT = 3000;
97
+ app.listen(PORT, () => {
98
+ console.log(`Server listening on port ${PORT}`);
99
+ });
100
+ // Handle server shutdown
101
+ process.on('SIGINT', async () => {
102
+ console.log('Shutting down server...');
103
+ clearInterval(resourceChangeInterval);
104
+ await server.close();
105
+ process.exit(0);
106
+ });
107
+ //# sourceMappingURL=standaloneSseWithGetStreamableHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standaloneSseWithGetStreamableHttp.js","sourceRoot":"","sources":["../../../../src/examples/server/standaloneSseWithGetStreamableHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { JSONRPCMessage } from '../../types.js';
2
+ import { EventStore } from '../../server/streamableHttp.js';
3
+ /**
4
+ * Simple in-memory implementation of the EventStore interface for resumability
5
+ * This is primarily intended for examples and testing, not for production use
6
+ * where a persistent storage solution would be more appropriate.
7
+ */
8
+ export declare class InMemoryEventStore implements EventStore {
9
+ private events;
10
+ /**
11
+ * Generates a unique event ID for a given stream ID
12
+ */
13
+ private generateEventId;
14
+ /**
15
+ * Extracts the stream ID from an event ID
16
+ */
17
+ private getStreamIdFromEventId;
18
+ /**
19
+ * Stores an event with a generated event ID
20
+ * Implements EventStore.storeEvent
21
+ */
22
+ storeEvent(streamId: string, message: JSONRPCMessage): Promise<string>;
23
+ /**
24
+ * Replays events that occurred after a specific event ID
25
+ * Implements EventStore.replayEventsAfter
26
+ */
27
+ replayEventsAfter(lastEventId: string, { send }: {
28
+ send: (eventId: string, message: JSONRPCMessage) => Promise<void>;
29
+ }): Promise<string>;
30
+ }
31
+ //# sourceMappingURL=inMemoryEventStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemoryEventStore.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared/inMemoryEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,MAAM,CAAyE;IAEvF;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5E;;;OAGG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EACzC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAC9E,OAAO,CAAC,MAAM,CAAC;CAkCnB"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Simple in-memory implementation of the EventStore interface for resumability
3
+ * This is primarily intended for examples and testing, not for production use
4
+ * where a persistent storage solution would be more appropriate.
5
+ */
6
+ export class InMemoryEventStore {
7
+ constructor() {
8
+ this.events = new Map();
9
+ }
10
+ /**
11
+ * Generates a unique event ID for a given stream ID
12
+ */
13
+ generateEventId(streamId) {
14
+ return `${streamId}_${Date.now()}_${Math.random().toString(36).substring(2, 10)}`;
15
+ }
16
+ /**
17
+ * Extracts the stream ID from an event ID
18
+ */
19
+ getStreamIdFromEventId(eventId) {
20
+ const parts = eventId.split('_');
21
+ return parts.length > 0 ? parts[0] : '';
22
+ }
23
+ /**
24
+ * Stores an event with a generated event ID
25
+ * Implements EventStore.storeEvent
26
+ */
27
+ async storeEvent(streamId, message) {
28
+ const eventId = this.generateEventId(streamId);
29
+ this.events.set(eventId, { streamId, message });
30
+ return eventId;
31
+ }
32
+ /**
33
+ * Replays events that occurred after a specific event ID
34
+ * Implements EventStore.replayEventsAfter
35
+ */
36
+ async replayEventsAfter(lastEventId, { send }) {
37
+ if (!lastEventId || !this.events.has(lastEventId)) {
38
+ return '';
39
+ }
40
+ // Extract the stream ID from the event ID
41
+ const streamId = this.getStreamIdFromEventId(lastEventId);
42
+ if (!streamId) {
43
+ return '';
44
+ }
45
+ let foundLastEvent = false;
46
+ // Sort events by eventId for chronological ordering
47
+ const sortedEvents = [...this.events.entries()].sort((a, b) => a[0].localeCompare(b[0]));
48
+ for (const [eventId, { streamId: eventStreamId, message }] of sortedEvents) {
49
+ // Only include events from the same stream
50
+ if (eventStreamId !== streamId) {
51
+ continue;
52
+ }
53
+ // Start sending events after we find the lastEventId
54
+ if (eventId === lastEventId) {
55
+ foundLastEvent = true;
56
+ continue;
57
+ }
58
+ if (foundLastEvent) {
59
+ await send(eventId, message);
60
+ }
61
+ }
62
+ return streamId;
63
+ }
64
+ }
65
+ //# sourceMappingURL=inMemoryEventStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemoryEventStore.js","sourceRoot":"","sources":["../../../../src/examples/shared/inMemoryEventStore.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAA/B;QACU,WAAM,GAA+D,IAAI,GAAG,EAAE,CAAC;IAmEzF,CAAC;IAjEC;;OAEG;IACK,eAAe,CAAC,QAAgB;QACtC,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAAe;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,OAAuB;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EACzC,EAAE,IAAI,EAAyE;QAE/E,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,oDAAoD;QACpD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzF,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;YAC3E,2CAA2C;YAC3C,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,qDAAqD;YACrD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,cAAc,GAAG,IAAI,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -1,5 +1,6 @@
1
1
  import { Transport } from "./shared/transport.js";
2
- import { JSONRPCMessage } from "./types.js";
2
+ import { JSONRPCMessage, RequestId } from "./types.js";
3
+ import { AuthInfo } from "./server/auth/types.js";
3
4
  /**
4
5
  * In-memory transport for creating clients and servers that talk to each other within the same process.
5
6
  */
@@ -8,7 +9,9 @@ export declare class InMemoryTransport implements Transport {
8
9
  private _messageQueue;
9
10
  onclose?: () => void;
10
11
  onerror?: (error: Error) => void;
11
- onmessage?: (message: JSONRPCMessage) => void;
12
+ onmessage?: (message: JSONRPCMessage, extra?: {
13
+ authInfo?: AuthInfo;
14
+ }) => void;
12
15
  sessionId?: string;
13
16
  /**
14
17
  * Creates a pair of linked in-memory transports that can communicate with each other. One should be passed to a Client and one to a Server.
@@ -16,6 +19,13 @@ export declare class InMemoryTransport implements Transport {
16
19
  static createLinkedPair(): [InMemoryTransport, InMemoryTransport];
17
20
  start(): Promise<void>;
18
21
  close(): Promise<void>;
19
- send(message: JSONRPCMessage): Promise<void>;
22
+ /**
23
+ * Sends a message with optional auth info.
24
+ * This is useful for testing authentication scenarios.
25
+ */
26
+ send(message: JSONRPCMessage, options?: {
27
+ relatedRequestId?: RequestId;
28
+ authInfo?: AuthInfo;
29
+ }): Promise<void>;
20
30
  }
21
31
  //# sourceMappingURL=inMemory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inMemory.d.ts","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,aAAa,CAAwB;IAE7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnD"}
1
+ {"version":3,"file":"inMemory.d.ts","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAOlD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAWpH"}
@@ -19,10 +19,8 @@ export class InMemoryTransport {
19
19
  var _a;
20
20
  // Process any messages that were queued before start was called
21
21
  while (this._messageQueue.length > 0) {
22
- const message = this._messageQueue.shift();
23
- if (message) {
24
- (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
25
- }
22
+ const queuedMessage = this._messageQueue.shift();
23
+ (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, queuedMessage.message, queuedMessage.extra);
26
24
  }
27
25
  }
28
26
  async close() {
@@ -32,15 +30,19 @@ export class InMemoryTransport {
32
30
  await (other === null || other === void 0 ? void 0 : other.close());
33
31
  (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
34
32
  }
35
- async send(message) {
33
+ /**
34
+ * Sends a message with optional auth info.
35
+ * This is useful for testing authentication scenarios.
36
+ */
37
+ async send(message, options) {
36
38
  if (!this._otherTransport) {
37
39
  throw new Error("Not connected");
38
40
  }
39
41
  if (this._otherTransport.onmessage) {
40
- this._otherTransport.onmessage(message);
42
+ this._otherTransport.onmessage(message, { authInfo: options === null || options === void 0 ? void 0 : options.authInfo });
41
43
  }
42
44
  else {
43
- this._otherTransport._messageQueue.push(message);
45
+ this._otherTransport._messageQueue.push({ message, extra: { authInfo: options === null || options === void 0 ? void 0 : options.authInfo } });
44
46
  }
45
47
  }
46
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QAEU,kBAAa,GAAqB,EAAE,CAAC;IA8C/C,CAAC;IAvCC;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,gEAAgE;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAA,IAAI,CAAC,SAAS,qDAAG,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,MAAM,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA,CAAC;QACrB,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QAEU,kBAAa,GAAoB,EAAE,CAAC;IAgD9C,CAAC;IAzCC;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,gEAAgE;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;YAClD,MAAA,IAAI,CAAC,SAAS,qDAAG,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,MAAM,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA,CAAC;QACrB,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAuB,EAAE,OAA+D;QACjG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../../src/server/auth/handlers/token.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,OAAO,EAAa,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAW5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;CAC/C,CAAC;AAgBF,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,mBAAmB,GAAG,cAAc,CAkG1G"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../../src/server/auth/handlers/token.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,OAAO,EAAa,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAW5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;CAC/C,CAAC;AAgBF,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,mBAAmB,GAAG,cAAc,CAwG1G"}
@@ -58,12 +58,17 @@ export function tokenHandler({ provider, rateLimit: rateLimitConfig }) {
58
58
  throw new InvalidRequestError(parseResult.error.message);
59
59
  }
60
60
  const { code, code_verifier } = parseResult.data;
61
- // Verify PKCE challenge
62
- const codeChallenge = await provider.challengeForAuthorizationCode(client, code);
63
- if (!(await verifyChallenge(code_verifier, codeChallenge))) {
64
- throw new InvalidGrantError("code_verifier does not match the challenge");
61
+ const skipLocalPkceValidation = provider.skipLocalPkceValidation;
62
+ // Perform local PKCE validation unless explicitly skipped
63
+ // (e.g. to validate code_verifier in upstream server)
64
+ if (!skipLocalPkceValidation) {
65
+ const codeChallenge = await provider.challengeForAuthorizationCode(client, code);
66
+ if (!(await verifyChallenge(code_verifier, codeChallenge))) {
67
+ throw new InvalidGrantError("code_verifier does not match the challenge");
68
+ }
65
69
  }
66
- const tokens = await provider.exchangeAuthorizationCode(client, code);
70
+ // Passes the code_verifier to the provider if PKCE validation didn't occur locally
71
+ const tokens = await provider.exchangeAuthorizationCode(client, code, skipLocalPkceValidation ? code_verifier : undefined);
67
72
  res.status(200).json(tokens);
68
73
  break;
69
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../../src/server/auth/handlers/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../../src/server/auth/handlers/token.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export interface OAuthServerProvider {
31
31
  /**
32
32
  * Exchanges an authorization code for an access token.
33
33
  */
34
- exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string): Promise<OAuthTokens>;
34
+ exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string, codeVerifier?: string): Promise<OAuthTokens>;
35
35
  /**
36
36
  * Exchanges a refresh token for an access token.
37
37
  */
@@ -46,5 +46,13 @@ export interface OAuthServerProvider {
46
46
  * If the given token is invalid or already revoked, this method should do nothing.
47
47
  */
48
48
  revokeToken?(client: OAuthClientInformationFull, request: OAuthTokenRevocationRequest): Promise<void>;
49
+ /**
50
+ * Whether to skip local PKCE validation.
51
+ *
52
+ * If true, the server will not perform PKCE validation locally and will pass the code_verifier to the upstream server.
53
+ *
54
+ * NOTE: This should only be true if the upstream server is performing the actual PKCE validation.
55
+ */
56
+ skipLocalPkceValidation?: boolean;
49
57
  }
50
58
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/server/auth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,YAAY,IAAI,2BAA2B,CAAC;IAEhD;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzG;;OAEG;IACH,6BAA6B,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9G;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/G;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAExH;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD;;;;OAIG;IACH,WAAW,CAAC,CAAC,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvG"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/server/auth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,YAAY,IAAI,2BAA2B,CAAC;IAEhD;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzG;;OAEG;IACH,6BAA6B,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9G;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtI;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAExH;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD;;;;OAIG;IACH,WAAW,CAAC,CAAC,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtG;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC"}