@modelcontextprotocol/sdk 1.1.1 → 1.3.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 (157) hide show
  1. package/README.md +358 -58
  2. package/dist/cjs/cli.d.ts.map +1 -0
  3. package/dist/cjs/cli.js +134 -0
  4. package/dist/cjs/cli.js.map +1 -0
  5. package/dist/{client → cjs/client}/index.d.ts +8 -2
  6. package/dist/cjs/client/index.d.ts.map +1 -0
  7. package/dist/cjs/client/index.js +222 -0
  8. package/dist/cjs/client/index.js.map +1 -0
  9. package/dist/cjs/client/sse.d.ts.map +1 -0
  10. package/dist/cjs/client/sse.js +99 -0
  11. package/dist/cjs/client/sse.js.map +1 -0
  12. package/dist/cjs/client/stdio.d.ts.map +1 -0
  13. package/dist/cjs/client/stdio.js +156 -0
  14. package/dist/cjs/client/stdio.js.map +1 -0
  15. package/dist/cjs/client/websocket.d.ts.map +1 -0
  16. package/dist/cjs/client/websocket.js +65 -0
  17. package/dist/cjs/client/websocket.js.map +1 -0
  18. package/dist/cjs/inMemory.d.ts.map +1 -0
  19. package/dist/cjs/inMemory.js +51 -0
  20. package/dist/cjs/inMemory.js.map +1 -0
  21. package/dist/cjs/package.json +1 -0
  22. package/dist/cjs/server/completable.d.ts +22 -0
  23. package/dist/cjs/server/completable.d.ts.map +1 -0
  24. package/dist/cjs/server/completable.js +65 -0
  25. package/dist/cjs/server/completable.js.map +1 -0
  26. package/dist/{server → cjs/server}/index.d.ts +13 -2
  27. package/dist/cjs/server/index.d.ts.map +1 -0
  28. package/dist/cjs/server/index.js +200 -0
  29. package/dist/cjs/server/index.js.map +1 -0
  30. package/dist/cjs/server/mcp.d.ts +150 -0
  31. package/dist/cjs/server/mcp.d.ts.map +1 -0
  32. package/dist/cjs/server/mcp.js +365 -0
  33. package/dist/cjs/server/mcp.js.map +1 -0
  34. package/dist/cjs/server/sse.d.ts.map +1 -0
  35. package/dist/cjs/server/sse.js +123 -0
  36. package/dist/cjs/server/sse.js.map +1 -0
  37. package/dist/cjs/server/stdio.d.ts.map +1 -0
  38. package/dist/cjs/server/stdio.js +85 -0
  39. package/dist/cjs/server/stdio.js.map +1 -0
  40. package/dist/{shared → cjs/shared}/protocol.d.ts +6 -1
  41. package/dist/cjs/shared/protocol.d.ts.map +1 -0
  42. package/dist/cjs/shared/protocol.js +321 -0
  43. package/dist/cjs/shared/protocol.js.map +1 -0
  44. package/dist/cjs/shared/stdio.d.ts.map +1 -0
  45. package/dist/cjs/shared/stdio.js +37 -0
  46. package/dist/cjs/shared/stdio.js.map +1 -0
  47. package/dist/cjs/shared/transport.d.ts.map +1 -0
  48. package/dist/cjs/shared/transport.js +3 -0
  49. package/dist/{shared → cjs/shared}/transport.js.map +1 -1
  50. package/dist/cjs/shared/uriTemplate.d.ts +24 -0
  51. package/dist/cjs/shared/uriTemplate.d.ts.map +1 -0
  52. package/dist/cjs/shared/uriTemplate.js +242 -0
  53. package/dist/cjs/shared/uriTemplate.js.map +1 -0
  54. package/dist/cjs/types.d.ts.map +1 -0
  55. package/dist/cjs/types.js +1002 -0
  56. package/dist/cjs/types.js.map +1 -0
  57. package/dist/esm/cli.d.ts +2 -0
  58. package/dist/esm/cli.d.ts.map +1 -0
  59. package/dist/esm/cli.js.map +1 -0
  60. package/dist/esm/client/index.d.ts +779 -0
  61. package/dist/esm/client/index.d.ts.map +1 -0
  62. package/dist/{client → esm/client}/index.js +14 -2
  63. package/dist/esm/client/index.js.map +1 -0
  64. package/dist/esm/client/sse.d.ts +27 -0
  65. package/dist/esm/client/sse.d.ts.map +1 -0
  66. package/dist/esm/client/sse.js.map +1 -0
  67. package/dist/esm/client/stdio.d.ts +63 -0
  68. package/dist/esm/client/stdio.d.ts.map +1 -0
  69. package/dist/esm/client/stdio.js.map +1 -0
  70. package/dist/esm/client/websocket.d.ts +17 -0
  71. package/dist/esm/client/websocket.d.ts.map +1 -0
  72. package/dist/esm/client/websocket.js.map +1 -0
  73. package/dist/esm/inMemory.d.ts +20 -0
  74. package/dist/esm/inMemory.d.ts.map +1 -0
  75. package/dist/esm/inMemory.js.map +1 -0
  76. package/dist/esm/package.json +1 -0
  77. package/dist/esm/server/completable.d.ts +22 -0
  78. package/dist/esm/server/completable.d.ts.map +1 -0
  79. package/dist/esm/server/completable.js +60 -0
  80. package/dist/esm/server/completable.js.map +1 -0
  81. package/dist/esm/server/index.d.ts +123 -0
  82. package/dist/esm/server/index.d.ts.map +1 -0
  83. package/dist/{server → esm/server}/index.js +16 -2
  84. package/dist/esm/server/index.js.map +1 -0
  85. package/dist/esm/server/mcp.d.ts +150 -0
  86. package/dist/esm/server/mcp.d.ts.map +1 -0
  87. package/dist/esm/server/mcp.js +360 -0
  88. package/dist/esm/server/mcp.js.map +1 -0
  89. package/dist/esm/server/sse.d.ts +46 -0
  90. package/dist/esm/server/sse.d.ts.map +1 -0
  91. package/dist/esm/server/sse.js.map +1 -0
  92. package/dist/esm/server/stdio.d.ts +28 -0
  93. package/dist/esm/server/stdio.d.ts.map +1 -0
  94. package/dist/esm/server/stdio.js.map +1 -0
  95. package/dist/esm/shared/protocol.d.ts +162 -0
  96. package/dist/esm/shared/protocol.d.ts.map +1 -0
  97. package/dist/{shared → esm/shared}/protocol.js +19 -0
  98. package/dist/esm/shared/protocol.js.map +1 -0
  99. package/dist/esm/shared/stdio.d.ts +13 -0
  100. package/dist/esm/shared/stdio.d.ts.map +1 -0
  101. package/dist/esm/shared/stdio.js.map +1 -0
  102. package/dist/esm/shared/transport.d.ts +39 -0
  103. package/dist/esm/shared/transport.d.ts.map +1 -0
  104. package/dist/esm/shared/transport.js.map +1 -0
  105. package/dist/esm/shared/uriTemplate.d.ts +24 -0
  106. package/dist/esm/shared/uriTemplate.d.ts.map +1 -0
  107. package/dist/esm/shared/uriTemplate.js +238 -0
  108. package/dist/esm/shared/uriTemplate.js.map +1 -0
  109. package/dist/esm/types.d.ts +26431 -0
  110. package/dist/esm/types.d.ts.map +1 -0
  111. package/dist/esm/types.js.map +1 -0
  112. package/package.json +12 -6
  113. package/dist/cli.d.ts.map +0 -1
  114. package/dist/cli.js.map +0 -1
  115. package/dist/client/index.d.ts.map +0 -1
  116. package/dist/client/index.js.map +0 -1
  117. package/dist/client/sse.d.ts.map +0 -1
  118. package/dist/client/sse.js.map +0 -1
  119. package/dist/client/stdio.d.ts.map +0 -1
  120. package/dist/client/stdio.js.map +0 -1
  121. package/dist/client/websocket.d.ts.map +0 -1
  122. package/dist/client/websocket.js.map +0 -1
  123. package/dist/inMemory.d.ts.map +0 -1
  124. package/dist/inMemory.js.map +0 -1
  125. package/dist/server/index.d.ts.map +0 -1
  126. package/dist/server/index.js.map +0 -1
  127. package/dist/server/sse.d.ts.map +0 -1
  128. package/dist/server/sse.js.map +0 -1
  129. package/dist/server/stdio.d.ts.map +0 -1
  130. package/dist/server/stdio.js.map +0 -1
  131. package/dist/shared/protocol.d.ts.map +0 -1
  132. package/dist/shared/protocol.js.map +0 -1
  133. package/dist/shared/stdio.d.ts.map +0 -1
  134. package/dist/shared/stdio.js.map +0 -1
  135. package/dist/shared/transport.d.ts.map +0 -1
  136. package/dist/types.d.ts.map +0 -1
  137. package/dist/types.js.map +0 -1
  138. /package/dist/{cli.d.ts → cjs/cli.d.ts} +0 -0
  139. /package/dist/{client → cjs/client}/sse.d.ts +0 -0
  140. /package/dist/{client → cjs/client}/stdio.d.ts +0 -0
  141. /package/dist/{client → cjs/client}/websocket.d.ts +0 -0
  142. /package/dist/{inMemory.d.ts → cjs/inMemory.d.ts} +0 -0
  143. /package/dist/{server → cjs/server}/sse.d.ts +0 -0
  144. /package/dist/{server → cjs/server}/stdio.d.ts +0 -0
  145. /package/dist/{shared → cjs/shared}/stdio.d.ts +0 -0
  146. /package/dist/{shared → cjs/shared}/transport.d.ts +0 -0
  147. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  148. /package/dist/{cli.js → esm/cli.js} +0 -0
  149. /package/dist/{client → esm/client}/sse.js +0 -0
  150. /package/dist/{client → esm/client}/stdio.js +0 -0
  151. /package/dist/{client → esm/client}/websocket.js +0 -0
  152. /package/dist/{inMemory.js → esm/inMemory.js} +0 -0
  153. /package/dist/{server → esm/server}/sse.js +0 -0
  154. /package/dist/{server → esm/server}/stdio.js +0 -0
  155. /package/dist/{shared → esm/shared}/stdio.js +0 -0
  156. /package/dist/{shared → esm/shared}/transport.js +0 -0
  157. /package/dist/{types.js → esm/types.js} +0 -0
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Protocol = exports.DEFAULT_REQUEST_TIMEOUT_MSEC = void 0;
4
+ exports.mergeCapabilities = mergeCapabilities;
5
+ const types_js_1 = require("../types.js");
6
+ /**
7
+ * The default request timeout, in miliseconds.
8
+ */
9
+ exports.DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;
10
+ /**
11
+ * Implements MCP protocol framing on top of a pluggable transport, including
12
+ * features like request/response linking, notifications, and progress.
13
+ */
14
+ class Protocol {
15
+ constructor(_options) {
16
+ this._options = _options;
17
+ this._requestMessageId = 0;
18
+ this._requestHandlers = new Map();
19
+ this._requestHandlerAbortControllers = new Map();
20
+ this._notificationHandlers = new Map();
21
+ this._responseHandlers = new Map();
22
+ this._progressHandlers = new Map();
23
+ this.setNotificationHandler(types_js_1.CancelledNotificationSchema, (notification) => {
24
+ const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);
25
+ controller === null || controller === void 0 ? void 0 : controller.abort(notification.params.reason);
26
+ });
27
+ this.setNotificationHandler(types_js_1.ProgressNotificationSchema, (notification) => {
28
+ this._onprogress(notification);
29
+ });
30
+ this.setRequestHandler(types_js_1.PingRequestSchema,
31
+ // Automatic pong by default.
32
+ (_request) => ({}));
33
+ }
34
+ /**
35
+ * Attaches to the given transport, starts it, and starts listening for messages.
36
+ *
37
+ * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
38
+ */
39
+ async connect(transport) {
40
+ this._transport = transport;
41
+ this._transport.onclose = () => {
42
+ this._onclose();
43
+ };
44
+ this._transport.onerror = (error) => {
45
+ this._onerror(error);
46
+ };
47
+ this._transport.onmessage = (message) => {
48
+ if (!("method" in message)) {
49
+ this._onresponse(message);
50
+ }
51
+ else if ("id" in message) {
52
+ this._onrequest(message);
53
+ }
54
+ else {
55
+ this._onnotification(message);
56
+ }
57
+ };
58
+ await this._transport.start();
59
+ }
60
+ _onclose() {
61
+ var _a;
62
+ const responseHandlers = this._responseHandlers;
63
+ this._responseHandlers = new Map();
64
+ this._progressHandlers.clear();
65
+ this._transport = undefined;
66
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
67
+ const error = new types_js_1.McpError(types_js_1.ErrorCode.ConnectionClosed, "Connection closed");
68
+ for (const handler of responseHandlers.values()) {
69
+ handler(error);
70
+ }
71
+ }
72
+ _onerror(error) {
73
+ var _a;
74
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
75
+ }
76
+ _onnotification(notification) {
77
+ var _a;
78
+ const handler = (_a = this._notificationHandlers.get(notification.method)) !== null && _a !== void 0 ? _a : this.fallbackNotificationHandler;
79
+ // Ignore notifications not being subscribed to.
80
+ if (handler === undefined) {
81
+ return;
82
+ }
83
+ // Starting with Promise.resolve() puts any synchronous errors into the monad as well.
84
+ Promise.resolve()
85
+ .then(() => handler(notification))
86
+ .catch((error) => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));
87
+ }
88
+ _onrequest(request) {
89
+ var _a, _b;
90
+ const handler = (_a = this._requestHandlers.get(request.method)) !== null && _a !== void 0 ? _a : this.fallbackRequestHandler;
91
+ if (handler === undefined) {
92
+ (_b = this._transport) === null || _b === void 0 ? void 0 : _b.send({
93
+ jsonrpc: "2.0",
94
+ id: request.id,
95
+ error: {
96
+ code: types_js_1.ErrorCode.MethodNotFound,
97
+ message: "Method not found",
98
+ },
99
+ }).catch((error) => this._onerror(new Error(`Failed to send an error response: ${error}`)));
100
+ return;
101
+ }
102
+ const abortController = new AbortController();
103
+ this._requestHandlerAbortControllers.set(request.id, abortController);
104
+ // Starting with Promise.resolve() puts any synchronous errors into the monad as well.
105
+ Promise.resolve()
106
+ .then(() => handler(request, { signal: abortController.signal }))
107
+ .then((result) => {
108
+ var _a;
109
+ if (abortController.signal.aborted) {
110
+ return;
111
+ }
112
+ return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
113
+ result,
114
+ jsonrpc: "2.0",
115
+ id: request.id,
116
+ });
117
+ }, (error) => {
118
+ var _a, _b;
119
+ if (abortController.signal.aborted) {
120
+ return;
121
+ }
122
+ return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
123
+ jsonrpc: "2.0",
124
+ id: request.id,
125
+ error: {
126
+ code: Number.isSafeInteger(error["code"])
127
+ ? error["code"]
128
+ : types_js_1.ErrorCode.InternalError,
129
+ message: (_b = error.message) !== null && _b !== void 0 ? _b : "Internal error",
130
+ },
131
+ });
132
+ })
133
+ .catch((error) => this._onerror(new Error(`Failed to send response: ${error}`)))
134
+ .finally(() => {
135
+ this._requestHandlerAbortControllers.delete(request.id);
136
+ });
137
+ }
138
+ _onprogress(notification) {
139
+ const { progressToken, ...params } = notification.params;
140
+ const handler = this._progressHandlers.get(Number(progressToken));
141
+ if (handler === undefined) {
142
+ this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));
143
+ return;
144
+ }
145
+ handler(params);
146
+ }
147
+ _onresponse(response) {
148
+ const messageId = response.id;
149
+ const handler = this._responseHandlers.get(Number(messageId));
150
+ if (handler === undefined) {
151
+ this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));
152
+ return;
153
+ }
154
+ this._responseHandlers.delete(Number(messageId));
155
+ this._progressHandlers.delete(Number(messageId));
156
+ if ("result" in response) {
157
+ handler(response);
158
+ }
159
+ else {
160
+ const error = new types_js_1.McpError(response.error.code, response.error.message, response.error.data);
161
+ handler(error);
162
+ }
163
+ }
164
+ get transport() {
165
+ return this._transport;
166
+ }
167
+ /**
168
+ * Closes the connection.
169
+ */
170
+ async close() {
171
+ var _a;
172
+ await ((_a = this._transport) === null || _a === void 0 ? void 0 : _a.close());
173
+ }
174
+ /**
175
+ * Sends a request and wait for a response.
176
+ *
177
+ * Do not use this method to emit notifications! Use notification() instead.
178
+ */
179
+ request(request, resultSchema, options) {
180
+ return new Promise((resolve, reject) => {
181
+ var _a, _b, _c, _d;
182
+ if (!this._transport) {
183
+ reject(new Error("Not connected"));
184
+ return;
185
+ }
186
+ if (((_a = this._options) === null || _a === void 0 ? void 0 : _a.enforceStrictCapabilities) === true) {
187
+ this.assertCapabilityForMethod(request.method);
188
+ }
189
+ (_b = options === null || options === void 0 ? void 0 : options.signal) === null || _b === void 0 ? void 0 : _b.throwIfAborted();
190
+ const messageId = this._requestMessageId++;
191
+ const jsonrpcRequest = {
192
+ ...request,
193
+ jsonrpc: "2.0",
194
+ id: messageId,
195
+ };
196
+ if (options === null || options === void 0 ? void 0 : options.onprogress) {
197
+ this._progressHandlers.set(messageId, options.onprogress);
198
+ jsonrpcRequest.params = {
199
+ ...request.params,
200
+ _meta: { progressToken: messageId },
201
+ };
202
+ }
203
+ let timeoutId = undefined;
204
+ this._responseHandlers.set(messageId, (response) => {
205
+ var _a;
206
+ if (timeoutId !== undefined) {
207
+ clearTimeout(timeoutId);
208
+ }
209
+ if ((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
210
+ return;
211
+ }
212
+ if (response instanceof Error) {
213
+ return reject(response);
214
+ }
215
+ try {
216
+ const result = resultSchema.parse(response.result);
217
+ resolve(result);
218
+ }
219
+ catch (error) {
220
+ reject(error);
221
+ }
222
+ });
223
+ const cancel = (reason) => {
224
+ var _a;
225
+ this._responseHandlers.delete(messageId);
226
+ this._progressHandlers.delete(messageId);
227
+ (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({
228
+ jsonrpc: "2.0",
229
+ method: "notifications/cancelled",
230
+ params: {
231
+ requestId: messageId,
232
+ reason: String(reason),
233
+ },
234
+ }).catch((error) => this._onerror(new Error(`Failed to send cancellation: ${error}`)));
235
+ reject(reason);
236
+ };
237
+ (_c = options === null || options === void 0 ? void 0 : options.signal) === null || _c === void 0 ? void 0 : _c.addEventListener("abort", () => {
238
+ var _a;
239
+ if (timeoutId !== undefined) {
240
+ clearTimeout(timeoutId);
241
+ }
242
+ cancel((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.reason);
243
+ });
244
+ const timeout = (_d = options === null || options === void 0 ? void 0 : options.timeout) !== null && _d !== void 0 ? _d : exports.DEFAULT_REQUEST_TIMEOUT_MSEC;
245
+ timeoutId = setTimeout(() => cancel(new types_js_1.McpError(types_js_1.ErrorCode.RequestTimeout, "Request timed out", {
246
+ timeout,
247
+ })), timeout);
248
+ this._transport.send(jsonrpcRequest).catch((error) => {
249
+ if (timeoutId !== undefined) {
250
+ clearTimeout(timeoutId);
251
+ }
252
+ reject(error);
253
+ });
254
+ });
255
+ }
256
+ /**
257
+ * Emits a notification, which is a one-way message that does not expect a response.
258
+ */
259
+ async notification(notification) {
260
+ if (!this._transport) {
261
+ throw new Error("Not connected");
262
+ }
263
+ this.assertNotificationCapability(notification.method);
264
+ const jsonrpcNotification = {
265
+ ...notification,
266
+ jsonrpc: "2.0",
267
+ };
268
+ await this._transport.send(jsonrpcNotification);
269
+ }
270
+ /**
271
+ * Registers a handler to invoke when this protocol object receives a request with the given method.
272
+ *
273
+ * Note that this will replace any previous request handler for the same method.
274
+ */
275
+ setRequestHandler(requestSchema, handler) {
276
+ const method = requestSchema.shape.method.value;
277
+ this.assertRequestHandlerCapability(method);
278
+ this._requestHandlers.set(method, (request, extra) => Promise.resolve(handler(requestSchema.parse(request), extra)));
279
+ }
280
+ /**
281
+ * Removes the request handler for the given method.
282
+ */
283
+ removeRequestHandler(method) {
284
+ this._requestHandlers.delete(method);
285
+ }
286
+ /**
287
+ * Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
288
+ */
289
+ assertCanSetRequestHandler(method) {
290
+ if (this._requestHandlers.has(method)) {
291
+ throw new Error(`A request handler for ${method} already exists, which would be overridden`);
292
+ }
293
+ }
294
+ /**
295
+ * Registers a handler to invoke when this protocol object receives a notification with the given method.
296
+ *
297
+ * Note that this will replace any previous notification handler for the same method.
298
+ */
299
+ setNotificationHandler(notificationSchema, handler) {
300
+ this._notificationHandlers.set(notificationSchema.shape.method.value, (notification) => Promise.resolve(handler(notificationSchema.parse(notification))));
301
+ }
302
+ /**
303
+ * Removes the notification handler for the given method.
304
+ */
305
+ removeNotificationHandler(method) {
306
+ this._notificationHandlers.delete(method);
307
+ }
308
+ }
309
+ exports.Protocol = Protocol;
310
+ function mergeCapabilities(base, additional) {
311
+ return Object.entries(additional).reduce((acc, [key, value]) => {
312
+ if (value && typeof value === "object") {
313
+ acc[key] = acc[key] ? { ...acc[key], ...value } : value;
314
+ }
315
+ else {
316
+ acc[key] = value;
317
+ }
318
+ return acc;
319
+ }, { ...base });
320
+ }
321
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/shared/protocol.ts"],"names":[],"mappings":";;;AA0iBA,8CAcC;AAvjBD,0CAkBqB;AAsBrB;;GAEG;AACU,QAAA,4BAA4B,GAAG,KAAK,CAAC;AAkClD;;;GAGG;AACH,MAAsB,QAAQ;IAkD5B,YAAoB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;QA5CtC,sBAAiB,GAAG,CAAC,CAAC;QACtB,qBAAgB,GAMpB,IAAI,GAAG,EAAE,CAAC;QACN,oCAA+B,GACrC,IAAI,GAAG,EAAE,CAAC;QACJ,0BAAqB,GAGzB,IAAI,GAAG,EAAE,CAAC;QACN,sBAAiB,GAGrB,IAAI,GAAG,EAAE,CAAC;QACN,sBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;QA2BnE,IAAI,CAAC,sBAAsB,CAAC,sCAA2B,EAAE,CAAC,YAAY,EAAE,EAAE;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,GAAG,CACzD,YAAY,CAAC,MAAM,CAAC,SAAS,CAC9B,CAAC;YACF,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,CAAC,qCAA0B,EAAE,CAAC,YAAY,EAAE,EAAE;YACvE,IAAI,CAAC,WAAW,CAAC,YAA+C,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CACpB,4BAAiB;QACjB,6BAA6B;QAC7B,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAgB,CAClC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,SAAoB;QAChC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,QAAQ;;QACd,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;QAEjB,MAAM,KAAK,GAAG,IAAI,mBAAQ,CAAC,oBAAS,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;QAC5E,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,KAAY;;QAC3B,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,eAAe,CAAC,YAAiC;;QACvD,MAAM,OAAO,GACX,MAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,mCACnD,IAAI,CAAC,2BAA2B,CAAC;QAEnC,gDAAgD;QAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,sFAAsF;QACtF,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aACjC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,CAAC,QAAQ,CACX,IAAI,KAAK,CAAC,2CAA2C,KAAK,EAAE,CAAC,CAC9D,CACF,CAAC;IACN,CAAC;IAEO,UAAU,CAAC,OAAuB;;QACxC,MAAM,OAAO,GACX,MAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,mCAAI,IAAI,CAAC,sBAAsB,CAAC;QAE3E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAA,IAAI,CAAC,UAAU,0CACX,IAAI,CAAC;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,oBAAS,CAAC,cAAc;oBAC9B,OAAO,EAAE,kBAAkB;iBAC5B;aACF,EACA,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,CAAC,QAAQ,CACX,IAAI,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CACxD,CACF,CAAC;YACJ,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAEtE,sFAAsF;QACtF,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;aAChE,IAAI,CACH,CAAC,MAAM,EAAE,EAAE;;YACT,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,CAAC;gBAC3B,MAAM;gBACN,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;aACf,CAAC,CAAC;QACL,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;;YACR,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,CAAC;gBAC3B,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;wBACf,CAAC,CAAC,oBAAS,CAAC,aAAa;oBAC3B,OAAO,EAAE,MAAA,KAAK,CAAC,OAAO,mCAAI,gBAAgB;iBAC3C;aACF,CAAC,CAAC;QACL,CAAC,CACF;aACA,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC,CAC9D;aACA,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,WAAW,CAAC,YAAkC;QACpD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CACX,IAAI,KAAK,CACP,0DAA0D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CACzF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAEO,WAAW,CAAC,QAAwC;QAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CACX,IAAI,KAAK,CACP,kDAAkD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAC7E,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,mBAAQ,CACxB,QAAQ,CAAC,KAAK,CAAC,IAAI,EACnB,QAAQ,CAAC,KAAK,CAAC,OAAO,EACtB,QAAQ,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;;QACT,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,EAAE,CAAA,CAAC;IACjC,CAAC;IA2BD;;;;OAIG;IACH,OAAO,CACL,OAAqB,EACrB,YAAe,EACf,OAAwB;QAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,yBAAyB,MAAK,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;YAED,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,cAAc,EAAE,CAAC;YAElC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAmB;gBACrC,GAAG,OAAO;gBACV,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,SAAS;aACd,CAAC;YAEF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE,CAAC;gBACxB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC1D,cAAc,CAAC,MAAM,GAAG;oBACtB,GAAG,OAAO,CAAC,MAAM;oBACjB,KAAK,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE;iBACpC,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,GAA8C,SAAS,CAAC;YAErE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;;gBACjD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;gBAED,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,OAAO,EAAE,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;oBAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,CAAC,MAAe,EAAE,EAAE;;gBACjC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAEzC,MAAA,IAAI,CAAC,UAAU,0CACX,IAAI,CAAC;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,yBAAyB;oBACjC,MAAM,EAAE;wBACN,SAAS,EAAE,SAAS;wBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;qBACvB;iBACF,EACA,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC,CAClE,CAAC;gBAEJ,MAAM,CAAC,MAAM,CAAC,CAAC;YACjB,CAAC,CAAC;YAEF,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;;gBAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;gBAED,MAAM,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,MAAM,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,oCAA4B,CAAC;YACjE,SAAS,GAAG,UAAU,CACpB,GAAG,EAAE,CACH,MAAM,CACJ,IAAI,mBAAQ,CAAC,oBAAS,CAAC,cAAc,EAAE,mBAAmB,EAAE;gBAC1D,OAAO;aACR,CAAC,CACH,EACH,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,YAA+B;QAChD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,mBAAmB,GAAwB;YAC/C,GAAG,YAAY;YACf,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAKf,aAAgB,EAChB,OAGuC;QAEvC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACnD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,MAAc;QACvC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,4CAA4C,CAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,sBAAsB,CAKpB,kBAAqB,EACrB,OAA2D;QAE3D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EACrC,CAAC,YAAY,EAAE,EAAE,CACf,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,MAAc;QACtC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AAtdD,4BAsdC;AAED,SAAgB,iBAAiB,CAE/B,IAAO,EAAE,UAAa;IACtB,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,GAAG,IAAI,EAAE,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,WAAW,IAAI,cAAc,GAAG,IAAI;IAepC,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadBuffer = void 0;
4
+ exports.deserializeMessage = deserializeMessage;
5
+ exports.serializeMessage = serializeMessage;
6
+ const types_js_1 = require("../types.js");
7
+ /**
8
+ * Buffers a continuous stdio stream into discrete JSON-RPC messages.
9
+ */
10
+ class ReadBuffer {
11
+ append(chunk) {
12
+ this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
13
+ }
14
+ readMessage() {
15
+ if (!this._buffer) {
16
+ return null;
17
+ }
18
+ const index = this._buffer.indexOf("\n");
19
+ if (index === -1) {
20
+ return null;
21
+ }
22
+ const line = this._buffer.toString("utf8", 0, index);
23
+ this._buffer = this._buffer.subarray(index + 1);
24
+ return deserializeMessage(line);
25
+ }
26
+ clear() {
27
+ this._buffer = undefined;
28
+ }
29
+ }
30
+ exports.ReadBuffer = ReadBuffer;
31
+ function deserializeMessage(line) {
32
+ return types_js_1.JSONRPCMessageSchema.parse(JSON.parse(line));
33
+ }
34
+ function serializeMessage(message) {
35
+ return JSON.stringify(message) + "\n";
36
+ }
37
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":";;;AAgCA,gDAEC;AAED,4CAEC;AAtCD,0CAAmE;AAEnE;;GAEG;AACH,MAAa,UAAU;IAGrB,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,CAAC;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;CACF;AAzBD,gCAyBC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,+BAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAuB;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACxC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/shared/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/shared/transport.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/shared/transport.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ export type Variables = Record<string, string | string[]>;
2
+ export declare class UriTemplate {
3
+ /**
4
+ * Returns true if the given string contains any URI template expressions.
5
+ * A template expression is a sequence of characters enclosed in curly braces,
6
+ * like {foo} or {?bar}.
7
+ */
8
+ static isTemplate(str: string): boolean;
9
+ private static validateLength;
10
+ private readonly template;
11
+ private readonly parts;
12
+ constructor(template: string);
13
+ toString(): string;
14
+ private parse;
15
+ private getOperator;
16
+ private getNames;
17
+ private encodeValue;
18
+ private expandPart;
19
+ expand(variables: Variables): string;
20
+ private escapeRegExp;
21
+ private partToRegExp;
22
+ match(uri: string): Variables | null;
23
+ }
24
+ //# sourceMappingURL=uriTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uriTemplate.d.ts","sourceRoot":"","sources":["../../../src/shared/uriTemplate.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAO1D,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAMvC,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;gBAEU,QAAQ,EAAE,MAAM;IAM5B,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,KAAK;IA4Db,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAwDlB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IA4BpC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAkDpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CA2CrC"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ // Claude-authored implementation of RFC 6570 URI Templates
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.UriTemplate = void 0;
5
+ const MAX_TEMPLATE_LENGTH = 1000000; // 1MB
6
+ const MAX_VARIABLE_LENGTH = 1000000; // 1MB
7
+ const MAX_TEMPLATE_EXPRESSIONS = 10000;
8
+ const MAX_REGEX_LENGTH = 1000000; // 1MB
9
+ class UriTemplate {
10
+ /**
11
+ * Returns true if the given string contains any URI template expressions.
12
+ * A template expression is a sequence of characters enclosed in curly braces,
13
+ * like {foo} or {?bar}.
14
+ */
15
+ static isTemplate(str) {
16
+ // Look for any sequence of characters between curly braces
17
+ // that isn't just whitespace
18
+ return /\{[^}\s]+\}/.test(str);
19
+ }
20
+ static validateLength(str, max, context) {
21
+ if (str.length > max) {
22
+ throw new Error(`${context} exceeds maximum length of ${max} characters (got ${str.length})`);
23
+ }
24
+ }
25
+ constructor(template) {
26
+ UriTemplate.validateLength(template, MAX_TEMPLATE_LENGTH, "Template");
27
+ this.template = template;
28
+ this.parts = this.parse(template);
29
+ }
30
+ toString() {
31
+ return this.template;
32
+ }
33
+ parse(template) {
34
+ const parts = [];
35
+ let currentText = "";
36
+ let i = 0;
37
+ let expressionCount = 0;
38
+ while (i < template.length) {
39
+ if (template[i] === "{") {
40
+ if (currentText) {
41
+ parts.push(currentText);
42
+ currentText = "";
43
+ }
44
+ const end = template.indexOf("}", i);
45
+ if (end === -1)
46
+ throw new Error("Unclosed template expression");
47
+ expressionCount++;
48
+ if (expressionCount > MAX_TEMPLATE_EXPRESSIONS) {
49
+ throw new Error(`Template contains too many expressions (max ${MAX_TEMPLATE_EXPRESSIONS})`);
50
+ }
51
+ const expr = template.slice(i + 1, end);
52
+ const operator = this.getOperator(expr);
53
+ const exploded = expr.includes("*");
54
+ const names = this.getNames(expr);
55
+ const name = names[0];
56
+ // Validate variable name length
57
+ for (const name of names) {
58
+ UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, "Variable name");
59
+ }
60
+ parts.push({ name, operator, names, exploded });
61
+ i = end + 1;
62
+ }
63
+ else {
64
+ currentText += template[i];
65
+ i++;
66
+ }
67
+ }
68
+ if (currentText) {
69
+ parts.push(currentText);
70
+ }
71
+ return parts;
72
+ }
73
+ getOperator(expr) {
74
+ const operators = ["+", "#", ".", "/", "?", "&"];
75
+ return operators.find((op) => expr.startsWith(op)) || "";
76
+ }
77
+ getNames(expr) {
78
+ const operator = this.getOperator(expr);
79
+ return expr
80
+ .slice(operator.length)
81
+ .split(",")
82
+ .map((name) => name.replace("*", "").trim())
83
+ .filter((name) => name.length > 0);
84
+ }
85
+ encodeValue(value, operator) {
86
+ UriTemplate.validateLength(value, MAX_VARIABLE_LENGTH, "Variable value");
87
+ if (operator === "+" || operator === "#") {
88
+ return encodeURI(value);
89
+ }
90
+ return encodeURIComponent(value);
91
+ }
92
+ expandPart(part, variables) {
93
+ if (part.operator === "?" || part.operator === "&") {
94
+ const pairs = part.names
95
+ .map((name) => {
96
+ const value = variables[name];
97
+ if (value === undefined)
98
+ return "";
99
+ const encoded = Array.isArray(value)
100
+ ? value.map((v) => this.encodeValue(v, part.operator)).join(",")
101
+ : this.encodeValue(value.toString(), part.operator);
102
+ return `${name}=${encoded}`;
103
+ })
104
+ .filter((pair) => pair.length > 0);
105
+ if (pairs.length === 0)
106
+ return "";
107
+ const separator = part.operator === "?" ? "?" : "&";
108
+ return separator + pairs.join("&");
109
+ }
110
+ if (part.names.length > 1) {
111
+ const values = part.names
112
+ .map((name) => variables[name])
113
+ .filter((v) => v !== undefined);
114
+ if (values.length === 0)
115
+ return "";
116
+ return values.map((v) => (Array.isArray(v) ? v[0] : v)).join(",");
117
+ }
118
+ const value = variables[part.name];
119
+ if (value === undefined)
120
+ return "";
121
+ const values = Array.isArray(value) ? value : [value];
122
+ const encoded = values.map((v) => this.encodeValue(v, part.operator));
123
+ switch (part.operator) {
124
+ case "":
125
+ return encoded.join(",");
126
+ case "+":
127
+ return encoded.join(",");
128
+ case "#":
129
+ return "#" + encoded.join(",");
130
+ case ".":
131
+ return "." + encoded.join(".");
132
+ case "/":
133
+ return "/" + encoded.join("/");
134
+ default:
135
+ return encoded.join(",");
136
+ }
137
+ }
138
+ expand(variables) {
139
+ let result = "";
140
+ let hasQueryParam = false;
141
+ for (const part of this.parts) {
142
+ if (typeof part === "string") {
143
+ result += part;
144
+ continue;
145
+ }
146
+ const expanded = this.expandPart(part, variables);
147
+ if (!expanded)
148
+ continue;
149
+ // Convert ? to & if we already have a query parameter
150
+ if ((part.operator === "?" || part.operator === "&") && hasQueryParam) {
151
+ result += expanded.replace("?", "&");
152
+ }
153
+ else {
154
+ result += expanded;
155
+ }
156
+ if (part.operator === "?" || part.operator === "&") {
157
+ hasQueryParam = true;
158
+ }
159
+ }
160
+ return result;
161
+ }
162
+ escapeRegExp(str) {
163
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
164
+ }
165
+ partToRegExp(part) {
166
+ const patterns = [];
167
+ // Validate variable name length for matching
168
+ for (const name of part.names) {
169
+ UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, "Variable name");
170
+ }
171
+ if (part.operator === "?" || part.operator === "&") {
172
+ for (let i = 0; i < part.names.length; i++) {
173
+ const name = part.names[i];
174
+ const prefix = i === 0 ? "\\" + part.operator : "&";
175
+ patterns.push({
176
+ pattern: prefix + this.escapeRegExp(name) + "=([^&]+)",
177
+ name,
178
+ });
179
+ }
180
+ return patterns;
181
+ }
182
+ let pattern;
183
+ const name = part.name;
184
+ switch (part.operator) {
185
+ case "":
186
+ pattern = part.exploded ? "([^/]+(?:,[^/]+)*)" : "([^/,]+)";
187
+ break;
188
+ case "+":
189
+ case "#":
190
+ pattern = "(.+)";
191
+ break;
192
+ case ".":
193
+ pattern = "\\.([^/,]+)";
194
+ break;
195
+ case "/":
196
+ pattern = "/" + (part.exploded ? "([^/]+(?:,[^/]+)*)" : "([^/,]+)");
197
+ break;
198
+ default:
199
+ pattern = "([^/]+)";
200
+ }
201
+ patterns.push({ pattern, name });
202
+ return patterns;
203
+ }
204
+ match(uri) {
205
+ UriTemplate.validateLength(uri, MAX_TEMPLATE_LENGTH, "URI");
206
+ let pattern = "^";
207
+ const names = [];
208
+ for (const part of this.parts) {
209
+ if (typeof part === "string") {
210
+ pattern += this.escapeRegExp(part);
211
+ }
212
+ else {
213
+ const patterns = this.partToRegExp(part);
214
+ for (const { pattern: partPattern, name } of patterns) {
215
+ pattern += partPattern;
216
+ names.push({ name, exploded: part.exploded });
217
+ }
218
+ }
219
+ }
220
+ pattern += "$";
221
+ UriTemplate.validateLength(pattern, MAX_REGEX_LENGTH, "Generated regex pattern");
222
+ const regex = new RegExp(pattern);
223
+ const match = uri.match(regex);
224
+ if (!match)
225
+ return null;
226
+ const result = {};
227
+ for (let i = 0; i < names.length; i++) {
228
+ const { name, exploded } = names[i];
229
+ const value = match[i + 1];
230
+ const cleanName = name.replace("*", "");
231
+ if (exploded && value.includes(",")) {
232
+ result[cleanName] = value.split(",");
233
+ }
234
+ else {
235
+ result[cleanName] = value;
236
+ }
237
+ }
238
+ return result;
239
+ }
240
+ }
241
+ exports.UriTemplate = UriTemplate;
242
+ //# sourceMappingURL=uriTemplate.js.map