@modelcontextprotocol/sdk 1.1.0 → 1.2.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.
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +134 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +210 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/sse.d.ts.map +1 -0
- package/dist/cjs/client/sse.js +99 -0
- package/dist/cjs/client/sse.js.map +1 -0
- package/dist/cjs/client/stdio.d.ts.map +1 -0
- package/dist/cjs/client/stdio.js +156 -0
- package/dist/cjs/client/stdio.js.map +1 -0
- package/dist/cjs/client/websocket.d.ts.map +1 -0
- package/dist/cjs/client/websocket.js +65 -0
- package/dist/cjs/client/websocket.js.map +1 -0
- package/dist/cjs/inMemory.d.ts.map +1 -0
- package/dist/cjs/inMemory.js +51 -0
- package/dist/cjs/inMemory.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{server → cjs/server}/index.d.ts +5 -0
- package/dist/cjs/server/index.d.ts.map +1 -0
- package/dist/cjs/server/index.js +188 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/sse.d.ts.map +1 -0
- package/dist/cjs/server/sse.js +123 -0
- package/dist/cjs/server/sse.js.map +1 -0
- package/dist/cjs/server/stdio.d.ts.map +1 -0
- package/dist/cjs/server/stdio.js +85 -0
- package/dist/cjs/server/stdio.js.map +1 -0
- package/dist/cjs/shared/protocol.d.ts.map +1 -0
- package/dist/cjs/shared/protocol.js +301 -0
- package/dist/cjs/shared/protocol.js.map +1 -0
- package/dist/cjs/shared/stdio.d.ts.map +1 -0
- package/dist/cjs/shared/stdio.js +37 -0
- package/dist/cjs/shared/stdio.js.map +1 -0
- package/dist/cjs/shared/transport.d.ts.map +1 -0
- package/dist/cjs/shared/transport.js +3 -0
- package/dist/{shared → cjs/shared}/transport.js.map +1 -1
- package/dist/{types.d.ts → cjs/types.d.ts} +84 -78
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +1002 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/cli.d.ts +2 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/client/index.d.ts +773 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/sse.d.ts +27 -0
- package/dist/esm/client/sse.d.ts.map +1 -0
- package/dist/esm/client/sse.js.map +1 -0
- package/dist/esm/client/stdio.d.ts +63 -0
- package/dist/esm/client/stdio.d.ts.map +1 -0
- package/dist/esm/client/stdio.js.map +1 -0
- package/dist/esm/client/websocket.d.ts +17 -0
- package/dist/esm/client/websocket.d.ts.map +1 -0
- package/dist/esm/client/websocket.js.map +1 -0
- package/dist/esm/inMemory.d.ts +20 -0
- package/dist/esm/inMemory.d.ts.map +1 -0
- package/dist/esm/inMemory.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/server/index.d.ts +117 -0
- package/dist/esm/server/index.d.ts.map +1 -0
- package/dist/{server → esm/server}/index.js +2 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/sse.d.ts +46 -0
- package/dist/esm/server/sse.d.ts.map +1 -0
- package/dist/esm/server/sse.js.map +1 -0
- package/dist/esm/server/stdio.d.ts +28 -0
- package/dist/esm/server/stdio.d.ts.map +1 -0
- package/dist/{server → esm/server}/stdio.js +9 -0
- package/dist/esm/server/stdio.js.map +1 -0
- package/dist/esm/shared/protocol.d.ts +157 -0
- package/dist/esm/shared/protocol.d.ts.map +1 -0
- package/dist/esm/shared/protocol.js.map +1 -0
- package/dist/esm/shared/stdio.d.ts +13 -0
- package/dist/esm/shared/stdio.d.ts.map +1 -0
- package/dist/esm/shared/stdio.js.map +1 -0
- package/dist/esm/shared/transport.d.ts +39 -0
- package/dist/esm/shared/transport.d.ts.map +1 -0
- package/dist/esm/shared/transport.js.map +1 -0
- package/dist/esm/types.d.ts +26431 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +10 -5
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/sse.d.ts.map +0 -1
- package/dist/client/sse.js.map +0 -1
- package/dist/client/stdio.d.ts.map +0 -1
- package/dist/client/stdio.js.map +0 -1
- package/dist/client/websocket.d.ts.map +0 -1
- package/dist/client/websocket.js.map +0 -1
- package/dist/inMemory.d.ts.map +0 -1
- package/dist/inMemory.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/sse.d.ts.map +0 -1
- package/dist/server/sse.js.map +0 -1
- package/dist/server/stdio.d.ts.map +0 -1
- package/dist/server/stdio.js.map +0 -1
- package/dist/shared/protocol.d.ts.map +0 -1
- package/dist/shared/protocol.js.map +0 -1
- package/dist/shared/stdio.d.ts.map +0 -1
- package/dist/shared/stdio.js.map +0 -1
- package/dist/shared/transport.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{cli.d.ts → cjs/cli.d.ts} +0 -0
- /package/dist/{client → cjs/client}/index.d.ts +0 -0
- /package/dist/{client → cjs/client}/sse.d.ts +0 -0
- /package/dist/{client → cjs/client}/stdio.d.ts +0 -0
- /package/dist/{client → cjs/client}/websocket.d.ts +0 -0
- /package/dist/{inMemory.d.ts → cjs/inMemory.d.ts} +0 -0
- /package/dist/{server → cjs/server}/sse.d.ts +0 -0
- /package/dist/{server → cjs/server}/stdio.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/protocol.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/stdio.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/transport.d.ts +0 -0
- /package/dist/{cli.js → esm/cli.js} +0 -0
- /package/dist/{client → esm/client}/index.js +0 -0
- /package/dist/{client → esm/client}/sse.js +0 -0
- /package/dist/{client → esm/client}/stdio.js +0 -0
- /package/dist/{client → esm/client}/websocket.js +0 -0
- /package/dist/{inMemory.js → esm/inMemory.js} +0 -0
- /package/dist/{server → esm/server}/sse.js +0 -0
- /package/dist/{shared → esm/shared}/protocol.js +0 -0
- /package/dist/{shared → esm/shared}/stdio.js +0 -0
- /package/dist/{shared → esm/shared}/transport.js +0 -0
- /package/dist/{types.js → esm/types.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cjs/cli.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
const eventsource_1 = __importDefault(require("eventsource"));
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
global.EventSource = eventsource_1.default;
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
global.WebSocket = ws_1.default;
|
|
12
|
+
const express_1 = __importDefault(require("express"));
|
|
13
|
+
const index_js_1 = require("./client/index.js");
|
|
14
|
+
const sse_js_1 = require("./client/sse.js");
|
|
15
|
+
const stdio_js_1 = require("./client/stdio.js");
|
|
16
|
+
const websocket_js_1 = require("./client/websocket.js");
|
|
17
|
+
const index_js_2 = require("./server/index.js");
|
|
18
|
+
const sse_js_2 = require("./server/sse.js");
|
|
19
|
+
const stdio_js_2 = require("./server/stdio.js");
|
|
20
|
+
const types_js_1 = require("./types.js");
|
|
21
|
+
async function runClient(url_or_command, args) {
|
|
22
|
+
const client = new index_js_1.Client({
|
|
23
|
+
name: "mcp-typescript test client",
|
|
24
|
+
version: "0.1.0",
|
|
25
|
+
}, {
|
|
26
|
+
capabilities: {
|
|
27
|
+
sampling: {},
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
let clientTransport;
|
|
31
|
+
let url = undefined;
|
|
32
|
+
try {
|
|
33
|
+
url = new URL(url_or_command);
|
|
34
|
+
}
|
|
35
|
+
catch (_a) {
|
|
36
|
+
// Ignore
|
|
37
|
+
}
|
|
38
|
+
if ((url === null || url === void 0 ? void 0 : url.protocol) === "http:" || (url === null || url === void 0 ? void 0 : url.protocol) === "https:") {
|
|
39
|
+
clientTransport = new sse_js_1.SSEClientTransport(new URL(url_or_command));
|
|
40
|
+
}
|
|
41
|
+
else if ((url === null || url === void 0 ? void 0 : url.protocol) === "ws:" || (url === null || url === void 0 ? void 0 : url.protocol) === "wss:") {
|
|
42
|
+
clientTransport = new websocket_js_1.WebSocketClientTransport(new URL(url_or_command));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
clientTransport = new stdio_js_1.StdioClientTransport({
|
|
46
|
+
command: url_or_command,
|
|
47
|
+
args,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
console.log("Connected to server.");
|
|
51
|
+
await client.connect(clientTransport);
|
|
52
|
+
console.log("Initialized.");
|
|
53
|
+
await client.request({ method: "resources/list" }, types_js_1.ListResourcesResultSchema);
|
|
54
|
+
await client.close();
|
|
55
|
+
console.log("Closed.");
|
|
56
|
+
}
|
|
57
|
+
async function runServer(port) {
|
|
58
|
+
if (port !== null) {
|
|
59
|
+
const app = (0, express_1.default)();
|
|
60
|
+
let servers = [];
|
|
61
|
+
app.get("/sse", async (req, res) => {
|
|
62
|
+
console.log("Got new SSE connection");
|
|
63
|
+
const transport = new sse_js_2.SSEServerTransport("/message", res);
|
|
64
|
+
const server = new index_js_2.Server({
|
|
65
|
+
name: "mcp-typescript test server",
|
|
66
|
+
version: "0.1.0",
|
|
67
|
+
}, {
|
|
68
|
+
capabilities: {},
|
|
69
|
+
});
|
|
70
|
+
servers.push(server);
|
|
71
|
+
server.onclose = () => {
|
|
72
|
+
console.log("SSE connection closed");
|
|
73
|
+
servers = servers.filter((s) => s !== server);
|
|
74
|
+
};
|
|
75
|
+
await server.connect(transport);
|
|
76
|
+
});
|
|
77
|
+
app.post("/message", async (req, res) => {
|
|
78
|
+
console.log("Received message");
|
|
79
|
+
const sessionId = req.query.sessionId;
|
|
80
|
+
const transport = servers
|
|
81
|
+
.map((s) => s.transport)
|
|
82
|
+
.find((t) => t.sessionId === sessionId);
|
|
83
|
+
if (!transport) {
|
|
84
|
+
res.status(404).send("Session not found");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
await transport.handlePostMessage(req, res);
|
|
88
|
+
});
|
|
89
|
+
app.listen(port, () => {
|
|
90
|
+
console.log(`Server running on http://localhost:${port}/sse`);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const server = new index_js_2.Server({
|
|
95
|
+
name: "mcp-typescript test server",
|
|
96
|
+
version: "0.1.0",
|
|
97
|
+
}, {
|
|
98
|
+
capabilities: {
|
|
99
|
+
prompts: {},
|
|
100
|
+
resources: {},
|
|
101
|
+
tools: {},
|
|
102
|
+
logging: {},
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
const transport = new stdio_js_2.StdioServerTransport();
|
|
106
|
+
await server.connect(transport);
|
|
107
|
+
console.log("Server running on stdio");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const args = process.argv.slice(2);
|
|
111
|
+
const command = args[0];
|
|
112
|
+
switch (command) {
|
|
113
|
+
case "client":
|
|
114
|
+
if (args.length < 2) {
|
|
115
|
+
console.error("Usage: client <server_url_or_command> [args...]");
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
runClient(args[1], args.slice(2)).catch((error) => {
|
|
119
|
+
console.error(error);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
case "server": {
|
|
124
|
+
const port = args[1] ? parseInt(args[1]) : null;
|
|
125
|
+
runServer(port).catch((error) => {
|
|
126
|
+
console.error(error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
default:
|
|
132
|
+
console.error("Unrecognized command:", command);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
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
|
+
super(options);
|
|
37
|
+
this._clientInfo = _clientInfo;
|
|
38
|
+
this._capabilities = options.capabilities;
|
|
39
|
+
}
|
|
40
|
+
assertCapability(capability, method) {
|
|
41
|
+
var _a;
|
|
42
|
+
if (!((_a = this._serverCapabilities) === null || _a === void 0 ? void 0 : _a[capability])) {
|
|
43
|
+
throw new Error(`Server does not support ${capability} (required for ${method})`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async connect(transport) {
|
|
47
|
+
await super.connect(transport);
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.request({
|
|
50
|
+
method: "initialize",
|
|
51
|
+
params: {
|
|
52
|
+
protocolVersion: types_js_1.LATEST_PROTOCOL_VERSION,
|
|
53
|
+
capabilities: this._capabilities,
|
|
54
|
+
clientInfo: this._clientInfo,
|
|
55
|
+
},
|
|
56
|
+
}, types_js_1.InitializeResultSchema);
|
|
57
|
+
if (result === undefined) {
|
|
58
|
+
throw new Error(`Server sent invalid initialize result: ${result}`);
|
|
59
|
+
}
|
|
60
|
+
if (!types_js_1.SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {
|
|
61
|
+
throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);
|
|
62
|
+
}
|
|
63
|
+
this._serverCapabilities = result.capabilities;
|
|
64
|
+
this._serverVersion = result.serverInfo;
|
|
65
|
+
await this.notification({
|
|
66
|
+
method: "notifications/initialized",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
// Disconnect if initialization fails.
|
|
71
|
+
void this.close();
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* After initialization has completed, this will be populated with the server's reported capabilities.
|
|
77
|
+
*/
|
|
78
|
+
getServerCapabilities() {
|
|
79
|
+
return this._serverCapabilities;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* After initialization has completed, this will be populated with information about the server's name and version.
|
|
83
|
+
*/
|
|
84
|
+
getServerVersion() {
|
|
85
|
+
return this._serverVersion;
|
|
86
|
+
}
|
|
87
|
+
assertCapabilityForMethod(method) {
|
|
88
|
+
var _a, _b, _c, _d, _e;
|
|
89
|
+
switch (method) {
|
|
90
|
+
case "logging/setLevel":
|
|
91
|
+
if (!((_a = this._serverCapabilities) === null || _a === void 0 ? void 0 : _a.logging)) {
|
|
92
|
+
throw new Error(`Server does not support logging (required for ${method})`);
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case "prompts/get":
|
|
96
|
+
case "prompts/list":
|
|
97
|
+
if (!((_b = this._serverCapabilities) === null || _b === void 0 ? void 0 : _b.prompts)) {
|
|
98
|
+
throw new Error(`Server does not support prompts (required for ${method})`);
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case "resources/list":
|
|
102
|
+
case "resources/templates/list":
|
|
103
|
+
case "resources/read":
|
|
104
|
+
case "resources/subscribe":
|
|
105
|
+
case "resources/unsubscribe":
|
|
106
|
+
if (!((_c = this._serverCapabilities) === null || _c === void 0 ? void 0 : _c.resources)) {
|
|
107
|
+
throw new Error(`Server does not support resources (required for ${method})`);
|
|
108
|
+
}
|
|
109
|
+
if (method === "resources/subscribe" &&
|
|
110
|
+
!this._serverCapabilities.resources.subscribe) {
|
|
111
|
+
throw new Error(`Server does not support resource subscriptions (required for ${method})`);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case "tools/call":
|
|
115
|
+
case "tools/list":
|
|
116
|
+
if (!((_d = this._serverCapabilities) === null || _d === void 0 ? void 0 : _d.tools)) {
|
|
117
|
+
throw new Error(`Server does not support tools (required for ${method})`);
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
case "completion/complete":
|
|
121
|
+
if (!((_e = this._serverCapabilities) === null || _e === void 0 ? void 0 : _e.prompts)) {
|
|
122
|
+
throw new Error(`Server does not support prompts (required for ${method})`);
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
case "initialize":
|
|
126
|
+
// No specific capability required for initialize
|
|
127
|
+
break;
|
|
128
|
+
case "ping":
|
|
129
|
+
// No specific capability required for ping
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
assertNotificationCapability(method) {
|
|
134
|
+
var _a;
|
|
135
|
+
switch (method) {
|
|
136
|
+
case "notifications/roots/list_changed":
|
|
137
|
+
if (!((_a = this._capabilities.roots) === null || _a === void 0 ? void 0 : _a.listChanged)) {
|
|
138
|
+
throw new Error(`Client does not support roots list changed notifications (required for ${method})`);
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
case "notifications/initialized":
|
|
142
|
+
// No specific capability required for initialized
|
|
143
|
+
break;
|
|
144
|
+
case "notifications/cancelled":
|
|
145
|
+
// Cancellation notifications are always allowed
|
|
146
|
+
break;
|
|
147
|
+
case "notifications/progress":
|
|
148
|
+
// Progress notifications are always allowed
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
assertRequestHandlerCapability(method) {
|
|
153
|
+
switch (method) {
|
|
154
|
+
case "sampling/createMessage":
|
|
155
|
+
if (!this._capabilities.sampling) {
|
|
156
|
+
throw new Error(`Client does not support sampling capability (required for ${method})`);
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
case "roots/list":
|
|
160
|
+
if (!this._capabilities.roots) {
|
|
161
|
+
throw new Error(`Client does not support roots capability (required for ${method})`);
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
case "ping":
|
|
165
|
+
// No specific capability required for ping
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async ping(options) {
|
|
170
|
+
return this.request({ method: "ping" }, types_js_1.EmptyResultSchema, options);
|
|
171
|
+
}
|
|
172
|
+
async complete(params, options) {
|
|
173
|
+
return this.request({ method: "completion/complete", params }, types_js_1.CompleteResultSchema, options);
|
|
174
|
+
}
|
|
175
|
+
async setLoggingLevel(level, options) {
|
|
176
|
+
return this.request({ method: "logging/setLevel", params: { level } }, types_js_1.EmptyResultSchema, options);
|
|
177
|
+
}
|
|
178
|
+
async getPrompt(params, options) {
|
|
179
|
+
return this.request({ method: "prompts/get", params }, types_js_1.GetPromptResultSchema, options);
|
|
180
|
+
}
|
|
181
|
+
async listPrompts(params, options) {
|
|
182
|
+
return this.request({ method: "prompts/list", params }, types_js_1.ListPromptsResultSchema, options);
|
|
183
|
+
}
|
|
184
|
+
async listResources(params, options) {
|
|
185
|
+
return this.request({ method: "resources/list", params }, types_js_1.ListResourcesResultSchema, options);
|
|
186
|
+
}
|
|
187
|
+
async listResourceTemplates(params, options) {
|
|
188
|
+
return this.request({ method: "resources/templates/list", params }, types_js_1.ListResourceTemplatesResultSchema, options);
|
|
189
|
+
}
|
|
190
|
+
async readResource(params, options) {
|
|
191
|
+
return this.request({ method: "resources/read", params }, types_js_1.ReadResourceResultSchema, options);
|
|
192
|
+
}
|
|
193
|
+
async subscribeResource(params, options) {
|
|
194
|
+
return this.request({ method: "resources/subscribe", params }, types_js_1.EmptyResultSchema, options);
|
|
195
|
+
}
|
|
196
|
+
async unsubscribeResource(params, options) {
|
|
197
|
+
return this.request({ method: "resources/unsubscribe", params }, types_js_1.EmptyResultSchema, options);
|
|
198
|
+
}
|
|
199
|
+
async callTool(params, resultSchema = types_js_1.CallToolResultSchema, options) {
|
|
200
|
+
return this.request({ method: "tools/call", params }, resultSchema, options);
|
|
201
|
+
}
|
|
202
|
+
async listTools(params, options) {
|
|
203
|
+
return this.request({ method: "tools/list", params }, types_js_1.ListToolsResultSchema, options);
|
|
204
|
+
}
|
|
205
|
+
async sendRootsListChanged() {
|
|
206
|
+
return this.notification({ method: "notifications/roots/list_changed" });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.Client = Client;
|
|
210
|
+
//# 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":";;;;;;AAyDA,sDAkBC;AA3ED,2DAAiE;AACjE,gEAAmC;AACnC,iDAAkE;AA+BlE;;GAEG;AACU,QAAA,0BAA0B,GACrC,sBAAO,CAAC,QAAQ,KAAK,OAAO;IAC1B,CAAC,CAAC;QACE,SAAS;QACT,WAAW;QACX,UAAU;QACV,cAAc;QACd,MAAM;QACN,wBAAwB;QACxB,aAAa;QACb,YAAY;QACZ,MAAM;QACN,UAAU;QACV,aAAa;KACd;IACH,CAAC,CAAC,0DAA0D;QAC1D,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,kCAA0B,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,sBAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,SAAS;QACX,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAa,oBAAoB;IAU/B,YAAY,MAA6B;QARjC,qBAAgB,GAAoB,IAAI,eAAe,EAAE,CAAC;QAC1D,gBAAW,GAAe,IAAI,qBAAU,EAAE,CAAC;QAQjD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAK,EACnB,IAAI,CAAC,aAAa,CAAC,OAAO,EAC1B,MAAA,IAAI,CAAC,aAAa,CAAC,IAAI,mCAAI,EAAE,EAC7B;gBACE,GAAG,EAAE,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,mCAAI,qBAAqB,EAAE;gBACtD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAA,IAAI,CAAC,aAAa,CAAC,MAAM,mCAAI,SAAS,CAAC;gBAC/D,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;gBACpC,WAAW,EAAE,sBAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,EAAE;aAC1D,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,mCAAmC;oBACnC,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;oBACjB,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAClC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,0CAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBACzC,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,0CAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAC1C,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAI,MAAM;;QACR,OAAO,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,mCAAI,IAAI,CAAC;IACvC,CAAC;IAEO,iBAAiB;;QACvB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM;gBACR,CAAC;gBAED,MAAA,IAAI,CAAC,SAAS,qDAAG,OAAO,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAc,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,OAAuB;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;;YAC7B,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAA,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,IAAI,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApHD,oDAoHC;AAED,SAAS,UAAU;IACjB,OAAO,MAAM,IAAI,sBAAO,CAAC;AAC3B,CAAC"}
|