@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,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Client = void 0;
4
+ const protocol_js_1 = require("../shared/protocol.js");
5
+ const types_js_1 = require("../types.js");
6
+ /**
7
+ * An MCP client on top of a pluggable transport.
8
+ *
9
+ * The client will automatically begin the initialization flow with the server when connect() is called.
10
+ *
11
+ * To use with custom types, extend the base Request/Notification/Result types and pass them as type parameters:
12
+ *
13
+ * ```typescript
14
+ * // Custom schemas
15
+ * const CustomRequestSchema = RequestSchema.extend({...})
16
+ * const CustomNotificationSchema = NotificationSchema.extend({...})
17
+ * const CustomResultSchema = ResultSchema.extend({...})
18
+ *
19
+ * // Type aliases
20
+ * type CustomRequest = z.infer<typeof CustomRequestSchema>
21
+ * type CustomNotification = z.infer<typeof CustomNotificationSchema>
22
+ * type CustomResult = z.infer<typeof CustomResultSchema>
23
+ *
24
+ * // Create typed client
25
+ * const client = new Client<CustomRequest, CustomNotification, CustomResult>({
26
+ * name: "CustomClient",
27
+ * version: "1.0.0"
28
+ * })
29
+ * ```
30
+ */
31
+ class Client extends protocol_js_1.Protocol {
32
+ /**
33
+ * Initializes this client with the given name and version information.
34
+ */
35
+ constructor(_clientInfo, options) {
36
+ var _a;
37
+ super(options);
38
+ this._clientInfo = _clientInfo;
39
+ this._capabilities = (_a = options === null || options === void 0 ? void 0 : options.capabilities) !== null && _a !== void 0 ? _a : {};
40
+ }
41
+ /**
42
+ * Registers new capabilities. This can only be called before connecting to a transport.
43
+ *
44
+ * The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).
45
+ */
46
+ registerCapabilities(capabilities) {
47
+ if (this.transport) {
48
+ throw new Error("Cannot register capabilities after connecting to transport");
49
+ }
50
+ this._capabilities = (0, protocol_js_1.mergeCapabilities)(this._capabilities, capabilities);
51
+ }
52
+ assertCapability(capability, method) {
53
+ var _a;
54
+ if (!((_a = this._serverCapabilities) === null || _a === void 0 ? void 0 : _a[capability])) {
55
+ throw new Error(`Server does not support ${capability} (required for ${method})`);
56
+ }
57
+ }
58
+ async connect(transport) {
59
+ await super.connect(transport);
60
+ try {
61
+ const result = await this.request({
62
+ method: "initialize",
63
+ params: {
64
+ protocolVersion: types_js_1.LATEST_PROTOCOL_VERSION,
65
+ capabilities: this._capabilities,
66
+ clientInfo: this._clientInfo,
67
+ },
68
+ }, types_js_1.InitializeResultSchema);
69
+ if (result === undefined) {
70
+ throw new Error(`Server sent invalid initialize result: ${result}`);
71
+ }
72
+ if (!types_js_1.SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {
73
+ throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);
74
+ }
75
+ this._serverCapabilities = result.capabilities;
76
+ this._serverVersion = result.serverInfo;
77
+ await this.notification({
78
+ method: "notifications/initialized",
79
+ });
80
+ }
81
+ catch (error) {
82
+ // Disconnect if initialization fails.
83
+ void this.close();
84
+ throw error;
85
+ }
86
+ }
87
+ /**
88
+ * After initialization has completed, this will be populated with the server's reported capabilities.
89
+ */
90
+ getServerCapabilities() {
91
+ return this._serverCapabilities;
92
+ }
93
+ /**
94
+ * After initialization has completed, this will be populated with information about the server's name and version.
95
+ */
96
+ getServerVersion() {
97
+ return this._serverVersion;
98
+ }
99
+ assertCapabilityForMethod(method) {
100
+ var _a, _b, _c, _d, _e;
101
+ switch (method) {
102
+ case "logging/setLevel":
103
+ if (!((_a = this._serverCapabilities) === null || _a === void 0 ? void 0 : _a.logging)) {
104
+ throw new Error(`Server does not support logging (required for ${method})`);
105
+ }
106
+ break;
107
+ case "prompts/get":
108
+ case "prompts/list":
109
+ if (!((_b = this._serverCapabilities) === null || _b === void 0 ? void 0 : _b.prompts)) {
110
+ throw new Error(`Server does not support prompts (required for ${method})`);
111
+ }
112
+ break;
113
+ case "resources/list":
114
+ case "resources/templates/list":
115
+ case "resources/read":
116
+ case "resources/subscribe":
117
+ case "resources/unsubscribe":
118
+ if (!((_c = this._serverCapabilities) === null || _c === void 0 ? void 0 : _c.resources)) {
119
+ throw new Error(`Server does not support resources (required for ${method})`);
120
+ }
121
+ if (method === "resources/subscribe" &&
122
+ !this._serverCapabilities.resources.subscribe) {
123
+ throw new Error(`Server does not support resource subscriptions (required for ${method})`);
124
+ }
125
+ break;
126
+ case "tools/call":
127
+ case "tools/list":
128
+ if (!((_d = this._serverCapabilities) === null || _d === void 0 ? void 0 : _d.tools)) {
129
+ throw new Error(`Server does not support tools (required for ${method})`);
130
+ }
131
+ break;
132
+ case "completion/complete":
133
+ if (!((_e = this._serverCapabilities) === null || _e === void 0 ? void 0 : _e.prompts)) {
134
+ throw new Error(`Server does not support prompts (required for ${method})`);
135
+ }
136
+ break;
137
+ case "initialize":
138
+ // No specific capability required for initialize
139
+ break;
140
+ case "ping":
141
+ // No specific capability required for ping
142
+ break;
143
+ }
144
+ }
145
+ assertNotificationCapability(method) {
146
+ var _a;
147
+ switch (method) {
148
+ case "notifications/roots/list_changed":
149
+ if (!((_a = this._capabilities.roots) === null || _a === void 0 ? void 0 : _a.listChanged)) {
150
+ throw new Error(`Client does not support roots list changed notifications (required for ${method})`);
151
+ }
152
+ break;
153
+ case "notifications/initialized":
154
+ // No specific capability required for initialized
155
+ break;
156
+ case "notifications/cancelled":
157
+ // Cancellation notifications are always allowed
158
+ break;
159
+ case "notifications/progress":
160
+ // Progress notifications are always allowed
161
+ break;
162
+ }
163
+ }
164
+ assertRequestHandlerCapability(method) {
165
+ switch (method) {
166
+ case "sampling/createMessage":
167
+ if (!this._capabilities.sampling) {
168
+ throw new Error(`Client does not support sampling capability (required for ${method})`);
169
+ }
170
+ break;
171
+ case "roots/list":
172
+ if (!this._capabilities.roots) {
173
+ throw new Error(`Client does not support roots capability (required for ${method})`);
174
+ }
175
+ break;
176
+ case "ping":
177
+ // No specific capability required for ping
178
+ break;
179
+ }
180
+ }
181
+ async ping(options) {
182
+ return this.request({ method: "ping" }, types_js_1.EmptyResultSchema, options);
183
+ }
184
+ async complete(params, options) {
185
+ return this.request({ method: "completion/complete", params }, types_js_1.CompleteResultSchema, options);
186
+ }
187
+ async setLoggingLevel(level, options) {
188
+ return this.request({ method: "logging/setLevel", params: { level } }, types_js_1.EmptyResultSchema, options);
189
+ }
190
+ async getPrompt(params, options) {
191
+ return this.request({ method: "prompts/get", params }, types_js_1.GetPromptResultSchema, options);
192
+ }
193
+ async listPrompts(params, options) {
194
+ return this.request({ method: "prompts/list", params }, types_js_1.ListPromptsResultSchema, options);
195
+ }
196
+ async listResources(params, options) {
197
+ return this.request({ method: "resources/list", params }, types_js_1.ListResourcesResultSchema, options);
198
+ }
199
+ async listResourceTemplates(params, options) {
200
+ return this.request({ method: "resources/templates/list", params }, types_js_1.ListResourceTemplatesResultSchema, options);
201
+ }
202
+ async readResource(params, options) {
203
+ return this.request({ method: "resources/read", params }, types_js_1.ReadResourceResultSchema, options);
204
+ }
205
+ async subscribeResource(params, options) {
206
+ return this.request({ method: "resources/subscribe", params }, types_js_1.EmptyResultSchema, options);
207
+ }
208
+ async unsubscribeResource(params, options) {
209
+ return this.request({ method: "resources/unsubscribe", params }, types_js_1.EmptyResultSchema, options);
210
+ }
211
+ async callTool(params, resultSchema = types_js_1.CallToolResultSchema, options) {
212
+ return this.request({ method: "tools/call", params }, resultSchema, options);
213
+ }
214
+ async listTools(params, options) {
215
+ return this.request({ method: "tools/list", params }, types_js_1.ListToolsResultSchema, options);
216
+ }
217
+ async sendRootsListChanged() {
218
+ return this.notification({ method: "notifications/roots/list_changed" });
219
+ }
220
+ }
221
+ exports.Client = Client;
222
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/client/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,SAAS,CAAC,CAAM;IACxB,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,YAAY,CAAC,CAAc;IAEnC,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;gBAElC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,eAAe,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE;IAM7F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BnD"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SSEClientTransport = void 0;
4
+ const types_js_1 = require("../types.js");
5
+ /**
6
+ * Client transport for SSE: this will connect to a server using Server-Sent Events for receiving
7
+ * messages and make separate POST requests for sending messages.
8
+ *
9
+ * This uses the EventSource API in browsers. You can install the `eventsource` package for Node.js.
10
+ */
11
+ class SSEClientTransport {
12
+ constructor(url, opts) {
13
+ this._url = url;
14
+ this._eventSourceInit = opts === null || opts === void 0 ? void 0 : opts.eventSourceInit;
15
+ this._requestInit = opts === null || opts === void 0 ? void 0 : opts.requestInit;
16
+ }
17
+ start() {
18
+ if (this._eventSource) {
19
+ throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");
20
+ }
21
+ return new Promise((resolve, reject) => {
22
+ this._eventSource = new EventSource(this._url.href, this._eventSourceInit);
23
+ this._abortController = new AbortController();
24
+ this._eventSource.onerror = (event) => {
25
+ var _a;
26
+ const error = new Error(`SSE error: ${JSON.stringify(event)}`);
27
+ reject(error);
28
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
29
+ };
30
+ this._eventSource.onopen = () => {
31
+ // The connection is open, but we need to wait for the endpoint to be received.
32
+ };
33
+ this._eventSource.addEventListener("endpoint", (event) => {
34
+ var _a;
35
+ const messageEvent = event;
36
+ try {
37
+ this._endpoint = new URL(messageEvent.data, this._url);
38
+ if (this._endpoint.origin !== this._url.origin) {
39
+ throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`);
40
+ }
41
+ }
42
+ catch (error) {
43
+ reject(error);
44
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
45
+ void this.close();
46
+ return;
47
+ }
48
+ resolve();
49
+ });
50
+ this._eventSource.onmessage = (event) => {
51
+ var _a, _b;
52
+ const messageEvent = event;
53
+ let message;
54
+ try {
55
+ message = types_js_1.JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data));
56
+ }
57
+ catch (error) {
58
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
59
+ return;
60
+ }
61
+ (_b = this.onmessage) === null || _b === void 0 ? void 0 : _b.call(this, message);
62
+ };
63
+ });
64
+ }
65
+ async close() {
66
+ var _a, _b, _c;
67
+ (_a = this._abortController) === null || _a === void 0 ? void 0 : _a.abort();
68
+ (_b = this._eventSource) === null || _b === void 0 ? void 0 : _b.close();
69
+ (_c = this.onclose) === null || _c === void 0 ? void 0 : _c.call(this);
70
+ }
71
+ async send(message) {
72
+ var _a, _b, _c;
73
+ if (!this._endpoint) {
74
+ throw new Error("Not connected");
75
+ }
76
+ try {
77
+ const headers = new Headers((_a = this._requestInit) === null || _a === void 0 ? void 0 : _a.headers);
78
+ headers.set("content-type", "application/json");
79
+ const init = {
80
+ ...this._requestInit,
81
+ method: "POST",
82
+ headers,
83
+ body: JSON.stringify(message),
84
+ signal: (_b = this._abortController) === null || _b === void 0 ? void 0 : _b.signal
85
+ };
86
+ const response = await fetch(this._endpoint, init);
87
+ if (!response.ok) {
88
+ const text = await response.text().catch(() => null);
89
+ throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text}`);
90
+ }
91
+ }
92
+ catch (error) {
93
+ (_c = this.onerror) === null || _c === void 0 ? void 0 : _c.call(this, error);
94
+ throw error;
95
+ }
96
+ }
97
+ }
98
+ exports.SSEClientTransport = SSEClientTransport;
99
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/client/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAS,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG;IAClC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAgBmB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB9D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,WAAW,CAAgC;IACnD,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;gBAElC,MAAM,EAAE,qBAAqB;IAIzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD5B;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAc7C"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StdioClientTransport = exports.DEFAULT_INHERITED_ENV_VARS = void 0;
7
+ exports.getDefaultEnvironment = getDefaultEnvironment;
8
+ const node_child_process_1 = require("node:child_process");
9
+ const node_process_1 = __importDefault(require("node:process"));
10
+ const stdio_js_1 = require("../shared/stdio.js");
11
+ /**
12
+ * Environment variables to inherit by default, if an environment is not explicitly given.
13
+ */
14
+ exports.DEFAULT_INHERITED_ENV_VARS = node_process_1.default.platform === "win32"
15
+ ? [
16
+ "APPDATA",
17
+ "HOMEDRIVE",
18
+ "HOMEPATH",
19
+ "LOCALAPPDATA",
20
+ "PATH",
21
+ "PROCESSOR_ARCHITECTURE",
22
+ "SYSTEMDRIVE",
23
+ "SYSTEMROOT",
24
+ "TEMP",
25
+ "USERNAME",
26
+ "USERPROFILE",
27
+ ]
28
+ : /* list inspired by the default env inheritance of sudo */
29
+ ["HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER"];
30
+ /**
31
+ * Returns a default environment object including only environment variables deemed safe to inherit.
32
+ */
33
+ function getDefaultEnvironment() {
34
+ const env = {};
35
+ for (const key of exports.DEFAULT_INHERITED_ENV_VARS) {
36
+ const value = node_process_1.default.env[key];
37
+ if (value === undefined) {
38
+ continue;
39
+ }
40
+ if (value.startsWith("()")) {
41
+ // Skip functions, which are a security risk.
42
+ continue;
43
+ }
44
+ env[key] = value;
45
+ }
46
+ return env;
47
+ }
48
+ /**
49
+ * Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.
50
+ *
51
+ * This transport is only available in Node.js environments.
52
+ */
53
+ class StdioClientTransport {
54
+ constructor(server) {
55
+ this._abortController = new AbortController();
56
+ this._readBuffer = new stdio_js_1.ReadBuffer();
57
+ this._serverParams = server;
58
+ }
59
+ /**
60
+ * Starts the server process and prepares to communicate with it.
61
+ */
62
+ async start() {
63
+ if (this._process) {
64
+ throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");
65
+ }
66
+ return new Promise((resolve, reject) => {
67
+ var _a, _b, _c, _d, _e, _f;
68
+ this._process = (0, node_child_process_1.spawn)(this._serverParams.command, (_a = this._serverParams.args) !== null && _a !== void 0 ? _a : [], {
69
+ env: (_b = this._serverParams.env) !== null && _b !== void 0 ? _b : getDefaultEnvironment(),
70
+ stdio: ["pipe", "pipe", (_c = this._serverParams.stderr) !== null && _c !== void 0 ? _c : "inherit"],
71
+ shell: false,
72
+ signal: this._abortController.signal,
73
+ windowsHide: node_process_1.default.platform === "win32" && isElectron(),
74
+ });
75
+ this._process.on("error", (error) => {
76
+ var _a, _b;
77
+ if (error.name === "AbortError") {
78
+ // Expected when close() is called.
79
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
80
+ return;
81
+ }
82
+ reject(error);
83
+ (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
84
+ });
85
+ this._process.on("spawn", () => {
86
+ resolve();
87
+ });
88
+ this._process.on("close", (_code) => {
89
+ var _a;
90
+ this._process = undefined;
91
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
92
+ });
93
+ (_d = this._process.stdin) === null || _d === void 0 ? void 0 : _d.on("error", (error) => {
94
+ var _a;
95
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
96
+ });
97
+ (_e = this._process.stdout) === null || _e === void 0 ? void 0 : _e.on("data", (chunk) => {
98
+ this._readBuffer.append(chunk);
99
+ this.processReadBuffer();
100
+ });
101
+ (_f = this._process.stdout) === null || _f === void 0 ? void 0 : _f.on("error", (error) => {
102
+ var _a;
103
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
104
+ });
105
+ });
106
+ }
107
+ /**
108
+ * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
109
+ *
110
+ * This is only available after the process has been started.
111
+ */
112
+ get stderr() {
113
+ var _a, _b;
114
+ return (_b = (_a = this._process) === null || _a === void 0 ? void 0 : _a.stderr) !== null && _b !== void 0 ? _b : null;
115
+ }
116
+ processReadBuffer() {
117
+ var _a, _b;
118
+ while (true) {
119
+ try {
120
+ const message = this._readBuffer.readMessage();
121
+ if (message === null) {
122
+ break;
123
+ }
124
+ (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
125
+ }
126
+ catch (error) {
127
+ (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
128
+ }
129
+ }
130
+ }
131
+ async close() {
132
+ this._abortController.abort();
133
+ this._process = undefined;
134
+ this._readBuffer.clear();
135
+ }
136
+ send(message) {
137
+ return new Promise((resolve) => {
138
+ var _a;
139
+ if (!((_a = this._process) === null || _a === void 0 ? void 0 : _a.stdin)) {
140
+ throw new Error("Not connected");
141
+ }
142
+ const json = (0, stdio_js_1.serializeMessage)(message);
143
+ if (this._process.stdin.write(json)) {
144
+ resolve();
145
+ }
146
+ else {
147
+ this._process.stdin.once("drain", resolve);
148
+ }
149
+ });
150
+ }
151
+ }
152
+ exports.StdioClientTransport = StdioClientTransport;
153
+ function isElectron() {
154
+ return "type" in node_process_1.default;
155
+ }
156
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/client/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAInE;;GAEG;AACH,qBAAa,wBAAyB,YAAW,SAAS;IACxD,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAM;IAElB,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;gBAElC,GAAG,EAAE,GAAG;IAIpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyChB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAW7C"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketClientTransport = void 0;
4
+ const types_js_1 = require("../types.js");
5
+ const SUBPROTOCOL = "mcp";
6
+ /**
7
+ * Client transport for WebSocket: this will connect to a server over the WebSocket protocol.
8
+ */
9
+ class WebSocketClientTransport {
10
+ constructor(url) {
11
+ this._url = url;
12
+ }
13
+ start() {
14
+ if (this._socket) {
15
+ throw new Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");
16
+ }
17
+ return new Promise((resolve, reject) => {
18
+ this._socket = new WebSocket(this._url, SUBPROTOCOL);
19
+ this._socket.onerror = (event) => {
20
+ var _a;
21
+ const error = "error" in event
22
+ ? event.error
23
+ : new Error(`WebSocket error: ${JSON.stringify(event)}`);
24
+ reject(error);
25
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
26
+ };
27
+ this._socket.onopen = () => {
28
+ resolve();
29
+ };
30
+ this._socket.onclose = () => {
31
+ var _a;
32
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
33
+ };
34
+ this._socket.onmessage = (event) => {
35
+ var _a, _b;
36
+ let message;
37
+ try {
38
+ message = types_js_1.JSONRPCMessageSchema.parse(JSON.parse(event.data));
39
+ }
40
+ catch (error) {
41
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
42
+ return;
43
+ }
44
+ (_b = this.onmessage) === null || _b === void 0 ? void 0 : _b.call(this, message);
45
+ };
46
+ });
47
+ }
48
+ async close() {
49
+ var _a;
50
+ (_a = this._socket) === null || _a === void 0 ? void 0 : _a.close();
51
+ }
52
+ send(message) {
53
+ return new Promise((resolve, reject) => {
54
+ var _a;
55
+ if (!this._socket) {
56
+ reject(new Error("Not connected"));
57
+ return;
58
+ }
59
+ (_a = this._socket) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify(message));
60
+ resolve();
61
+ });
62
+ }
63
+ }
64
+ exports.WebSocketClientTransport = WebSocketClientTransport;
65
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/client/websocket.ts"],"names":[],"mappings":";;;AACA,0CAAmE;AAEnE,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAa,wBAAwB;IAQnC,YAAY,GAAQ;QAClB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAErD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;;gBAC/B,MAAM,KAAK,GACT,OAAO,IAAI,KAAK;oBACd,CAAC,CAAE,KAAK,CAAC,KAAe;oBACxB,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7D,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;;gBAC1B,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;YACnB,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;;gBAC/C,IAAI,OAAuB,CAAC;gBAC5B,IAAI,CAAC;oBACH,OAAO,GAAG,+BAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAc,CAAC,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,MAAA,IAAI,CAAC,SAAS,qDAAG,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,OAAuB;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApED,4DAoEC"}
@@ -0,0 +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;IAE9C;;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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryTransport = void 0;
4
+ /**
5
+ * In-memory transport for creating clients and servers that talk to each other within the same process.
6
+ */
7
+ class InMemoryTransport {
8
+ constructor() {
9
+ this._messageQueue = [];
10
+ }
11
+ /**
12
+ * 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.
13
+ */
14
+ static createLinkedPair() {
15
+ const clientTransport = new InMemoryTransport();
16
+ const serverTransport = new InMemoryTransport();
17
+ clientTransport._otherTransport = serverTransport;
18
+ serverTransport._otherTransport = clientTransport;
19
+ return [clientTransport, serverTransport];
20
+ }
21
+ async start() {
22
+ var _a;
23
+ // Process any messages that were queued before start was called
24
+ while (this._messageQueue.length > 0) {
25
+ const message = this._messageQueue.shift();
26
+ if (message) {
27
+ (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
28
+ }
29
+ }
30
+ }
31
+ async close() {
32
+ var _a;
33
+ const other = this._otherTransport;
34
+ this._otherTransport = undefined;
35
+ await (other === null || other === void 0 ? void 0 : other.close());
36
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
37
+ }
38
+ async send(message) {
39
+ if (!this._otherTransport) {
40
+ throw new Error("Not connected");
41
+ }
42
+ if (this._otherTransport.onmessage) {
43
+ this._otherTransport.onmessage(message);
44
+ }
45
+ else {
46
+ this._otherTransport._messageQueue.push(message);
47
+ }
48
+ }
49
+ }
50
+ exports.InMemoryTransport = InMemoryTransport;
51
+ //# sourceMappingURL=inMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../src/inMemory.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QAEU,kBAAa,GAAqB,EAAE,CAAC;IA6C/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;AA/CD,8CA+CC"}
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}