@kepler.gl/mcp 0.0.0-stage → 3.3.0-alpha.19

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 (73) hide show
  1. package/dist/cjs/commands/add-column-command.js +192 -0
  2. package/dist/cjs/commands/basemap-command.js +80 -0
  3. package/dist/cjs/commands/boundary-command.js +81 -0
  4. package/dist/cjs/commands/command-wrappers.js +122 -0
  5. package/dist/cjs/commands/dataset-context-command.js +87 -0
  6. package/dist/cjs/commands/index.js +230 -0
  7. package/dist/cjs/commands/layer-creation-command.js +534 -0
  8. package/dist/cjs/commands/layer-style-command.js +136 -0
  9. package/dist/cjs/commands/load-data-command.js +270 -0
  10. package/dist/cjs/commands/save-data-command.js +118 -0
  11. package/dist/cjs/commands/split-view-command.js +261 -0
  12. package/dist/cjs/commands/table-command.js +199 -0
  13. package/dist/cjs/commands/time-filter-command.js +289 -0
  14. package/dist/cjs/commands/toggle-time-filter-command.js +155 -0
  15. package/dist/cjs/commands/types.js +6 -0
  16. package/dist/cjs/commands/utils.js +536 -0
  17. package/dist/cjs/commands/view-mode-command.js +94 -0
  18. package/dist/cjs/index.js +39 -0
  19. package/dist/cjs/map-contract.js +6 -0
  20. package/dist/cjs/server/bridge-server.js +435 -0
  21. package/dist/cjs/server/index.js +31 -0
  22. package/dist/cjs/server/stdio.js +201 -0
  23. package/dist/cjs/types.js +30 -0
  24. package/dist/commands/add-column-command.d.ts +4 -0
  25. package/dist/commands/basemap-command.d.ts +4 -0
  26. package/dist/commands/boundary-command.d.ts +4 -0
  27. package/dist/commands/command-wrappers.d.ts +52 -0
  28. package/dist/commands/dataset-context-command.d.ts +4 -0
  29. package/dist/commands/index.d.ts +31 -0
  30. package/dist/commands/layer-creation-command.d.ts +8 -0
  31. package/dist/commands/layer-style-command.d.ts +4 -0
  32. package/dist/commands/load-data-command.d.ts +4 -0
  33. package/dist/commands/save-data-command.d.ts +4 -0
  34. package/dist/commands/split-view-command.d.ts +4 -0
  35. package/dist/commands/table-command.d.ts +4 -0
  36. package/dist/commands/time-filter-command.d.ts +13 -0
  37. package/dist/commands/toggle-time-filter-command.d.ts +4 -0
  38. package/dist/commands/types.d.ts +132 -0
  39. package/dist/commands/utils.d.ts +138 -0
  40. package/dist/commands/view-mode-command.d.ts +4 -0
  41. package/dist/esm/commands/add-column-command.js +185 -0
  42. package/dist/esm/commands/basemap-command.js +72 -0
  43. package/dist/esm/commands/boundary-command.js +73 -0
  44. package/dist/esm/commands/command-wrappers.js +114 -0
  45. package/dist/esm/commands/dataset-context-command.js +79 -0
  46. package/dist/esm/commands/index.js +51 -0
  47. package/dist/esm/commands/layer-creation-command.js +527 -0
  48. package/dist/esm/commands/layer-style-command.js +130 -0
  49. package/dist/esm/commands/load-data-command.js +264 -0
  50. package/dist/esm/commands/save-data-command.js +112 -0
  51. package/dist/esm/commands/split-view-command.js +255 -0
  52. package/dist/esm/commands/table-command.js +194 -0
  53. package/dist/esm/commands/time-filter-command.js +280 -0
  54. package/dist/esm/commands/toggle-time-filter-command.js +147 -0
  55. package/dist/esm/commands/types.js +3 -0
  56. package/dist/esm/commands/utils.js +521 -0
  57. package/dist/esm/commands/view-mode-command.js +86 -0
  58. package/dist/esm/index.js +20 -0
  59. package/dist/esm/map-contract.js +3 -0
  60. package/dist/esm/server/bridge-server.js +428 -0
  61. package/dist/esm/server/index.js +13 -0
  62. package/dist/esm/server/stdio.js +198 -0
  63. package/dist/esm/types.js +24 -0
  64. package/dist/index.d.ts +15 -0
  65. package/dist/map-contract.d.ts +31 -0
  66. package/dist/server/bridge-server.d.ts +53 -0
  67. package/dist/server/index.d.ts +9 -0
  68. package/dist/server/stdio.d.ts +2 -0
  69. package/dist/types.d.ts +24 -0
  70. package/package.json +84 -4
  71. package/skill/kepler/SKILL.md +438 -0
  72. package/skill/kepler/skill.yaml +4 -0
  73. package/README.md +0 -3
@@ -0,0 +1,435 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.KeplerMcpBridge = void 0;
8
+ exports.formatResult = formatResult;
9
+ exports.getMapTools = getMapTools;
10
+ exports.toToolName = toToolName;
11
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
18
+ var _nodeCrypto = require("node:crypto");
19
+ var _nodeHttp = require("node:http");
20
+ var _ws = require("ws");
21
+ var _zod = require("zod");
22
+ var _commands = require("../commands");
23
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT
26
+ // Copyright contributors to the kepler.gl project
27
+ /**
28
+ * The bridge between an MCP client and a kepler.gl page.
29
+ *
30
+ * Browsers cannot listen on a port, so the page is a WebSocket CLIENT that
31
+ * connects OUT to `ws://127.0.0.1:<port>/ws?token=...` (the reverse-connect
32
+ * pattern). This server holds that socket, advertises the `map.*` tools to the
33
+ * MCP client, and forwards each call to the page, where the command registry
34
+ * executes against the live map.
35
+ *
36
+ * The tool list comes from the package itself (`getKeplerCommands`), so tools
37
+ * exist before a page connects; a call without a page returns a clear error.
38
+ * Once a page says `hello` its own catalog replaces the static one, because a
39
+ * page may not serve every command (the demo app omits the DuckDB-backed ones).
40
+ */
41
+ var DEFAULT_PORT = 8765;
42
+ var DEFAULT_HOST = '127.0.0.1';
43
+ var DEFAULT_CALL_TIMEOUT_MS = 60000;
44
+ /** MCP tool names are commonly restricted to [A-Za-z0-9_-]; `map.add-layer` → `map_add_layer`. */
45
+ function toToolName(commandId) {
46
+ return commandId.replace(/\./g, '_');
47
+ }
48
+ function toInputSchema(command) {
49
+ if (command.inputSchema) {
50
+ try {
51
+ var schema = _zod.z.toJSONSchema(command.inputSchema);
52
+ if (schema) return schema;
53
+ } catch (_unused) {
54
+ // Not every command ships a zod schema; fall back to a free-form object.
55
+ }
56
+ }
57
+ return {
58
+ type: 'object'
59
+ };
60
+ }
61
+
62
+ /** The map surface as declared by this package, independent of any page. */
63
+ function getMapTools() {
64
+ var commands = (0, _commands.getKeplerCommands)({});
65
+ return Object.values(commands).map(function (command) {
66
+ return {
67
+ name: toToolName(command.id),
68
+ commandId: command.id,
69
+ description: command.description || command.name,
70
+ inputSchema: toInputSchema(command)
71
+ };
72
+ });
73
+ }
74
+ function toolsFromDescriptors(descriptors) {
75
+ return descriptors.filter(function (descriptor) {
76
+ return descriptor && descriptor.id;
77
+ }).map(function (descriptor) {
78
+ return {
79
+ name: toToolName(descriptor.id),
80
+ commandId: descriptor.id,
81
+ description: descriptor.description || descriptor.name || descriptor.id,
82
+ inputSchema: descriptor.inputSchema || {
83
+ type: 'object'
84
+ }
85
+ };
86
+ });
87
+ }
88
+
89
+ /** RoomCommandResult → the text an MCP client shows for a tool call. */
90
+ function formatResult(result) {
91
+ var _ref, _result$data;
92
+ if (result && (0, _typeof2["default"])(result) === 'object' && result.success === false) {
93
+ var _result$error;
94
+ return {
95
+ text: "\u2717 ".concat(result.commandId, ": ").concat((_result$error = result.error) !== null && _result$error !== void 0 ? _result$error : 'failed'),
96
+ isError: true
97
+ };
98
+ }
99
+ if (result && (0, _typeof2["default"])(result) === 'object' && result.error) {
100
+ return {
101
+ text: "\u2717 ".concat(result.commandId, ": ").concat(result.error),
102
+ isError: true
103
+ };
104
+ }
105
+ var data = result === null || result === void 0 ? void 0 : result.data;
106
+ if (data && typeof data.details === 'string') return {
107
+ text: data.details,
108
+ isError: false
109
+ };
110
+ return {
111
+ text: JSON.stringify((_ref = (_result$data = result === null || result === void 0 ? void 0 : result.data) !== null && _result$data !== void 0 ? _result$data : result) !== null && _ref !== void 0 ? _ref : null, null, 2),
112
+ isError: false
113
+ };
114
+ }
115
+ var KeplerMcpBridge = exports.KeplerMcpBridge = /*#__PURE__*/function () {
116
+ function KeplerMcpBridge() {
117
+ var _options$port, _options$host, _options$mapUrl, _options$callTimeoutM;
118
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
119
+ (0, _classCallCheck2["default"])(this, KeplerMcpBridge);
120
+ (0, _defineProperty2["default"])(this, "options", void 0);
121
+ (0, _defineProperty2["default"])(this, "staticTools", void 0);
122
+ (0, _defineProperty2["default"])(this, "pageTools", null);
123
+ (0, _defineProperty2["default"])(this, "socket", null);
124
+ (0, _defineProperty2["default"])(this, "wss", null);
125
+ (0, _defineProperty2["default"])(this, "httpServer", null);
126
+ (0, _defineProperty2["default"])(this, "pending", new Map());
127
+ (0, _defineProperty2["default"])(this, "token", '');
128
+ (0, _defineProperty2["default"])(this, "pageUrl", '');
129
+ this.options = {
130
+ port: (_options$port = options.port) !== null && _options$port !== void 0 ? _options$port : DEFAULT_PORT,
131
+ host: (_options$host = options.host) !== null && _options$host !== void 0 ? _options$host : DEFAULT_HOST,
132
+ mapUrl: (_options$mapUrl = options.mapUrl) !== null && _options$mapUrl !== void 0 ? _options$mapUrl : 'http://localhost:8080',
133
+ callTimeoutMs: (_options$callTimeoutM = options.callTimeoutMs) !== null && _options$callTimeoutM !== void 0 ? _options$callTimeoutM : DEFAULT_CALL_TIMEOUT_MS
134
+ };
135
+ this.staticTools = getMapTools();
136
+ }
137
+
138
+ /** Tools the MCP client can call right now. */
139
+ return (0, _createClass2["default"])(KeplerMcpBridge, [{
140
+ key: "getTools",
141
+ value: function getTools() {
142
+ var _this$pageTools;
143
+ return (_this$pageTools = this.pageTools) !== null && _this$pageTools !== void 0 ? _this$pageTools : this.staticTools;
144
+ }
145
+ }, {
146
+ key: "connected",
147
+ get: function get() {
148
+ var _this$socket;
149
+ return ((_this$socket = this.socket) === null || _this$socket === void 0 ? void 0 : _this$socket.readyState) === _ws.WebSocket.OPEN;
150
+ }
151
+ }, {
152
+ key: "start",
153
+ value: function () {
154
+ var _start = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
155
+ var _this = this;
156
+ var httpServer, wss, address, port, mapUrl;
157
+ return _regenerator["default"].wrap(function _callee$(_context) {
158
+ while (1) switch (_context.prev = _context.next) {
159
+ case 0:
160
+ if (!this.wss) {
161
+ _context.next = 2;
162
+ break;
163
+ }
164
+ throw new Error('The kepler.gl bridge is already running.');
165
+ case 2:
166
+ this.token = (0, _nodeCrypto.randomUUID)().replace(/-/g, '');
167
+
168
+ // A plain HTTP GET on `/` redirects to the map page carrying the token, so
169
+ // the user can open `http://127.0.0.1:<port>/` even when the MCP client
170
+ // never shows the server's stderr. Only `/ws` upgrades to a WebSocket.
171
+ httpServer = (0, _nodeHttp.createServer)(function (request, response) {
172
+ var _request$url;
173
+ if (request.url === '/' || (_request$url = request.url) !== null && _request$url !== void 0 && _request$url.startsWith('/?')) {
174
+ response.writeHead(302, {
175
+ Location: _this.pageUrl
176
+ });
177
+ response.end();
178
+ return;
179
+ }
180
+ response.writeHead(404, {
181
+ 'content-type': 'text/plain'
182
+ });
183
+ response.end('kepler-mcp: the map page connects at /ws');
184
+ });
185
+ this.httpServer = httpServer;
186
+ wss = new _ws.WebSocketServer({
187
+ server: httpServer,
188
+ path: '/ws'
189
+ });
190
+ this.wss = wss;
191
+ wss.on('connection', function (socket, request) {
192
+ return _this.handleConnection(socket, request.url);
193
+ });
194
+ _context.next = 10;
195
+ return new Promise(function (resolve, reject) {
196
+ httpServer.once('error', reject);
197
+ httpServer.listen(_this.options.port, _this.options.host, function () {
198
+ return resolve();
199
+ });
200
+ });
201
+ case 10:
202
+ address = httpServer.address();
203
+ port = (0, _typeof2["default"])(address) === 'object' && address ? address.port : this.options.port;
204
+ mapUrl = this.options.mapUrl.replace(/\/$/, '');
205
+ this.pageUrl = "".concat(mapUrl).concat(mapUrl.includes('?') ? '&' : '?', "mcp=").concat(encodeURIComponent(this.token));
206
+ return _context.abrupt("return", {
207
+ host: this.options.host,
208
+ port: port,
209
+ token: this.token,
210
+ pageUrl: this.pageUrl
211
+ });
212
+ case 15:
213
+ case "end":
214
+ return _context.stop();
215
+ }
216
+ }, _callee, this);
217
+ }));
218
+ function start() {
219
+ return _start.apply(this, arguments);
220
+ }
221
+ return start;
222
+ }()
223
+ }, {
224
+ key: "callTool",
225
+ value: function () {
226
+ var _callTool = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(name) {
227
+ var _this$getTools$find,
228
+ _this2 = this;
229
+ var input,
230
+ tool,
231
+ socket,
232
+ callId,
233
+ reply,
234
+ _args2 = arguments;
235
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
236
+ while (1) switch (_context2.prev = _context2.next) {
237
+ case 0:
238
+ input = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
239
+ tool = (_this$getTools$find = this.getTools().find(function (candidate) {
240
+ return candidate.name === name;
241
+ })) !== null && _this$getTools$find !== void 0 ? _this$getTools$find : this.staticTools.find(function (candidate) {
242
+ return candidate.name === name;
243
+ });
244
+ if (tool) {
245
+ _context2.next = 4;
246
+ break;
247
+ }
248
+ throw new Error("Unknown map tool \"".concat(name, "\". Available: ").concat(this.getTools().map(function (candidate) {
249
+ return candidate.name;
250
+ }).join(', '), "."));
251
+ case 4:
252
+ socket = this.socket;
253
+ if (!(!socket || socket.readyState !== _ws.WebSocket.OPEN)) {
254
+ _context2.next = 7;
255
+ break;
256
+ }
257
+ throw new Error('No kepler.gl map page is connected. Open the page URL printed at startup ' + '(it carries ?mcp=<token>), then call the tool again.');
258
+ case 7:
259
+ callId = (0, _nodeCrypto.randomUUID)();
260
+ reply = new Promise(function (resolve, reject) {
261
+ var timer = setTimeout(function () {
262
+ _this2.pending["delete"](callId);
263
+ reject(new Error("Timed out after ".concat(_this2.options.callTimeoutMs, " ms waiting for the map page.")));
264
+ }, _this2.options.callTimeoutMs);
265
+ _this2.pending.set(callId, {
266
+ resolve: resolve,
267
+ reject: reject,
268
+ timer: timer
269
+ });
270
+ });
271
+ socket.send(JSON.stringify({
272
+ type: 'call',
273
+ callId: callId,
274
+ tool: tool.commandId,
275
+ input: input
276
+ }));
277
+ return _context2.abrupt("return", reply);
278
+ case 11:
279
+ case "end":
280
+ return _context2.stop();
281
+ }
282
+ }, _callee2, this);
283
+ }));
284
+ function callTool(_x) {
285
+ return _callTool.apply(this, arguments);
286
+ }
287
+ return callTool;
288
+ }()
289
+ }, {
290
+ key: "close",
291
+ value: function () {
292
+ var _close = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
293
+ var _this$socket2;
294
+ var wss, httpServer, _iterator, _step, client;
295
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
296
+ while (1) switch (_context3.prev = _context3.next) {
297
+ case 0:
298
+ this.rejectPending('The bridge was closed.');
299
+ this.pageTools = null;
300
+ (_this$socket2 = this.socket) === null || _this$socket2 === void 0 || _this$socket2.close(1000, 'bridge closed');
301
+ this.socket = null;
302
+ wss = this.wss;
303
+ httpServer = this.httpServer;
304
+ this.wss = null;
305
+ this.httpServer = null;
306
+ if (wss) {
307
+ _context3.next = 10;
308
+ break;
309
+ }
310
+ return _context3.abrupt("return");
311
+ case 10:
312
+ // close() only stops listening and waits for clients; terminate them so
313
+ // shutdown (and tests) do not hang on a page that never closes its socket.
314
+ _iterator = _createForOfIteratorHelper(wss.clients);
315
+ try {
316
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
317
+ client = _step.value;
318
+ client.terminate();
319
+ }
320
+ } catch (err) {
321
+ _iterator.e(err);
322
+ } finally {
323
+ _iterator.f();
324
+ }
325
+ _context3.next = 14;
326
+ return new Promise(function (resolve) {
327
+ return wss.close(function () {
328
+ return resolve();
329
+ });
330
+ });
331
+ case 14:
332
+ if (!httpServer) {
333
+ _context3.next = 17;
334
+ break;
335
+ }
336
+ _context3.next = 17;
337
+ return new Promise(function (resolve) {
338
+ return httpServer.close(function () {
339
+ return resolve();
340
+ });
341
+ });
342
+ case 17:
343
+ case "end":
344
+ return _context3.stop();
345
+ }
346
+ }, _callee3, this);
347
+ }));
348
+ function close() {
349
+ return _close.apply(this, arguments);
350
+ }
351
+ return close;
352
+ }()
353
+ }, {
354
+ key: "handleConnection",
355
+ value: function handleConnection(socket, requestUrl) {
356
+ var _this$socket3,
357
+ _this3 = this;
358
+ var token = null;
359
+ try {
360
+ token = new URL(requestUrl !== null && requestUrl !== void 0 ? requestUrl : '/ws', 'http://127.0.0.1').searchParams.get('token');
361
+ } catch (_unused2) {
362
+ token = null;
363
+ }
364
+ // The token is the only thing keeping other local pages/processes from
365
+ // driving the map; reject a mismatch before accepting any message.
366
+ if (token !== this.token) {
367
+ socket.close(1008, 'invalid token');
368
+ return;
369
+ }
370
+
371
+ // One map page at a time: a second tab takes over so calls never race
372
+ // between two live maps.
373
+ (_this$socket3 = this.socket) === null || _this$socket3 === void 0 || _this$socket3.close(1000, 'replaced by a newer connection');
374
+ this.socket = socket;
375
+ this.pageTools = null;
376
+ socket.on('message', function (data) {
377
+ return _this3.handleMessage(data);
378
+ });
379
+ socket.on('close', function () {
380
+ if (_this3.socket === socket) {
381
+ _this3.socket = null;
382
+ _this3.pageTools = null;
383
+ _this3.rejectPending('The kepler.gl page disconnected.');
384
+ }
385
+ });
386
+ // Errors are followed by close; the close handler resets state.
387
+ socket.on('error', function () {
388
+ return undefined;
389
+ });
390
+ }
391
+ }, {
392
+ key: "handleMessage",
393
+ value: function handleMessage(raw) {
394
+ var _message, _message2;
395
+ var message;
396
+ try {
397
+ message = JSON.parse(String(raw));
398
+ } catch (_unused3) {
399
+ return;
400
+ }
401
+ if (((_message = message) === null || _message === void 0 ? void 0 : _message.type) === 'hello' && Array.isArray(message.commands)) {
402
+ this.pageTools = toolsFromDescriptors(message.commands);
403
+ return;
404
+ }
405
+ if (((_message2 = message) === null || _message2 === void 0 ? void 0 : _message2.type) === 'result' && typeof message.callId === 'string') {
406
+ var pendingCall = this.pending.get(message.callId);
407
+ if (!pendingCall) return;
408
+ clearTimeout(pendingCall.timer);
409
+ this.pending["delete"](message.callId);
410
+ pendingCall.resolve(message.result);
411
+ }
412
+ }
413
+ }, {
414
+ key: "rejectPending",
415
+ value: function rejectPending(reason) {
416
+ var _iterator2 = _createForOfIteratorHelper(this.pending),
417
+ _step2;
418
+ try {
419
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
420
+ var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
421
+ callId = _step2$value[0],
422
+ pendingCall = _step2$value[1];
423
+ clearTimeout(pendingCall.timer);
424
+ this.pending["delete"](callId);
425
+ pendingCall.reject(new Error(reason));
426
+ }
427
+ } catch (err) {
428
+ _iterator2.e(err);
429
+ } finally {
430
+ _iterator2.f();
431
+ }
432
+ }
433
+ }]);
434
+ }();
435
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZUNyeXB0byIsInJlcXVpcmUiLCJfbm9kZUh0dHAiLCJfd3MiLCJfem9kIiwiX2NvbW1hbmRzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJERUZBVUxUX1BPUlQiLCJERUZBVUxUX0hPU1QiLCJERUZBVUxUX0NBTExfVElNRU9VVF9NUyIsInRvVG9vbE5hbWUiLCJjb21tYW5kSWQiLCJyZXBsYWNlIiwidG9JbnB1dFNjaGVtYSIsImNvbW1hbmQiLCJpbnB1dFNjaGVtYSIsInNjaGVtYSIsInoiLCJ0b0pTT05TY2hlbWEiLCJfdW51c2VkIiwidHlwZSIsImdldE1hcFRvb2xzIiwiY29tbWFuZHMiLCJnZXRLZXBsZXJDb21tYW5kcyIsIk9iamVjdCIsInZhbHVlcyIsIm1hcCIsImlkIiwiZGVzY3JpcHRpb24iLCJ0b29sc0Zyb21EZXNjcmlwdG9ycyIsImRlc2NyaXB0b3JzIiwiZmlsdGVyIiwiZGVzY3JpcHRvciIsImZvcm1hdFJlc3VsdCIsInJlc3VsdCIsIl9yZWYiLCJfcmVzdWx0JGRhdGEiLCJfdHlwZW9mMiIsInN1Y2Nlc3MiLCJfcmVzdWx0JGVycm9yIiwidGV4dCIsImNvbmNhdCIsImVycm9yIiwiaXNFcnJvciIsImRhdGEiLCJkZXRhaWxzIiwiSlNPTiIsInN0cmluZ2lmeSIsIktlcGxlck1jcEJyaWRnZSIsImV4cG9ydHMiLCJfb3B0aW9ucyRwb3J0IiwiX29wdGlvbnMkaG9zdCIsIl9vcHRpb25zJG1hcFVybCIsIl9vcHRpb25zJGNhbGxUaW1lb3V0TSIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIk1hcCIsInBvcnQiLCJob3N0IiwibWFwVXJsIiwiY2FsbFRpbWVvdXRNcyIsInN0YXRpY1Rvb2xzIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldFRvb2xzIiwiX3RoaXMkcGFnZVRvb2xzIiwicGFnZVRvb2xzIiwiZ2V0IiwiX3RoaXMkc29ja2V0Iiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIldlYlNvY2tldCIsIk9QRU4iLCJfc3RhcnQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl90aGlzIiwiaHR0cFNlcnZlciIsIndzcyIsImFkZHJlc3MiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJFcnJvciIsInRva2VuIiwicmFuZG9tVVVJRCIsImNyZWF0ZVNlcnZlciIsInJlcXVlc3QiLCJyZXNwb25zZSIsIl9yZXF1ZXN0JHVybCIsInVybCIsInN0YXJ0c1dpdGgiLCJ3cml0ZUhlYWQiLCJMb2NhdGlvbiIsInBhZ2VVcmwiLCJlbmQiLCJXZWJTb2NrZXRTZXJ2ZXIiLCJzZXJ2ZXIiLCJwYXRoIiwib24iLCJoYW5kbGVDb25uZWN0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwibGlzdGVuIiwiaW5jbHVkZXMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhYnJ1cHQiLCJzdG9wIiwic3RhcnQiLCJhcHBseSIsIl9jYWxsVG9vbCIsIl9jYWxsZWUyIiwiX3RoaXMkZ2V0VG9vbHMkZmluZCIsIl90aGlzMiIsImlucHV0IiwidG9vbCIsImNhbGxJZCIsInJlcGx5IiwiX2FyZ3MyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiZmluZCIsImNhbmRpZGF0ZSIsImpvaW4iLCJ0aW1lciIsInNldFRpbWVvdXQiLCJwZW5kaW5nIiwic2V0Iiwic2VuZCIsImNhbGxUb29sIiwiX3giLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl90aGlzJHNvY2tldDIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNsaWVudCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInJlamVjdFBlbmRpbmciLCJjbG9zZSIsImNsaWVudHMiLCJ0ZXJtaW5hdGUiLCJlcnIiLCJyZXF1ZXN0VXJsIiwiX3RoaXMkc29ja2V0MyIsIl90aGlzMyIsIlVSTCIsInNlYXJjaFBhcmFtcyIsIl91bnVzZWQyIiwiaGFuZGxlTWVzc2FnZSIsInJhdyIsIl9tZXNzYWdlIiwiX21lc3NhZ2UyIiwibWVzc2FnZSIsInBhcnNlIiwiU3RyaW5nIiwiX3VudXNlZDMiLCJwZW5kaW5nQ2FsbCIsImNsZWFyVGltZW91dCIsInJlYXNvbiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJfc2xpY2VkVG9BcnJheTIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL2JyaWRnZS1zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyoqXG4gKiBUaGUgYnJpZGdlIGJldHdlZW4gYW4gTUNQIGNsaWVudCBhbmQgYSBrZXBsZXIuZ2wgcGFnZS5cbiAqXG4gKiBCcm93c2VycyBjYW5ub3QgbGlzdGVuIG9uIGEgcG9ydCwgc28gdGhlIHBhZ2UgaXMgYSBXZWJTb2NrZXQgQ0xJRU5UIHRoYXRcbiAqIGNvbm5lY3RzIE9VVCB0byBgd3M6Ly8xMjcuMC4wLjE6PHBvcnQ+L3dzP3Rva2VuPS4uLmAgKHRoZSByZXZlcnNlLWNvbm5lY3RcbiAqIHBhdHRlcm4pLiBUaGlzIHNlcnZlciBob2xkcyB0aGF0IHNvY2tldCwgYWR2ZXJ0aXNlcyB0aGUgYG1hcC4qYCB0b29scyB0byB0aGVcbiAqIE1DUCBjbGllbnQsIGFuZCBmb3J3YXJkcyBlYWNoIGNhbGwgdG8gdGhlIHBhZ2UsIHdoZXJlIHRoZSBjb21tYW5kIHJlZ2lzdHJ5XG4gKiBleGVjdXRlcyBhZ2FpbnN0IHRoZSBsaXZlIG1hcC5cbiAqXG4gKiBUaGUgdG9vbCBsaXN0IGNvbWVzIGZyb20gdGhlIHBhY2thZ2UgaXRzZWxmIChgZ2V0S2VwbGVyQ29tbWFuZHNgKSwgc28gdG9vbHNcbiAqIGV4aXN0IGJlZm9yZSBhIHBhZ2UgY29ubmVjdHM7IGEgY2FsbCB3aXRob3V0IGEgcGFnZSByZXR1cm5zIGEgY2xlYXIgZXJyb3IuXG4gKiBPbmNlIGEgcGFnZSBzYXlzIGBoZWxsb2AgaXRzIG93biBjYXRhbG9nIHJlcGxhY2VzIHRoZSBzdGF0aWMgb25lLCBiZWNhdXNlIGFcbiAqIHBhZ2UgbWF5IG5vdCBzZXJ2ZSBldmVyeSBjb21tYW5kICh0aGUgZGVtbyBhcHAgb21pdHMgdGhlIER1Y2tEQi1iYWNrZWQgb25lcykuXG4gKi9cblxuaW1wb3J0IHtyYW5kb21VVUlEfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge2NyZWF0ZVNlcnZlcn0gZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB0eXBlIHtTZXJ2ZXIgYXMgSHR0cFNlcnZlcn0gZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB7V2ViU29ja2V0LCBXZWJTb2NrZXRTZXJ2ZXJ9IGZyb20gJ3dzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7Z2V0S2VwbGVyQ29tbWFuZHN9IGZyb20gJy4uL2NvbW1hbmRzJztcbmltcG9ydCB0eXBlIHtLZXBsZXJDb250ZXh0LCBSb29tQ29tbWFuZFJlc3VsdCwgVG9vbERlc2NyaXB0b3J9IGZyb20gJy4uL2NvbW1hbmRzL3R5cGVzJztcblxuY29uc3QgREVGQVVMVF9QT1JUID0gODc2NTtcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgREVGQVVMVF9DQUxMX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbmV4cG9ydCB0eXBlIE1hcFRvb2wgPSB7XG4gIC8qKiBNQ1AgdG9vbCBuYW1lLCBlLmcuIGBtYXBfYWRkX2xheWVyYCAoZG90cyBhcmUgbm90IGFsbG93ZWQgaW4gdG9vbCBuYW1lcykuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBgbWFwLipgIGNvbW1hbmQgaWQgdGhlIGNhbGwgaXMgZm9yd2FyZGVkIHRvLiAqL1xuICBjb21tYW5kSWQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgS2VwbGVyTWNwQnJpZGdlT3B0aW9ucyA9IHtcbiAgcG9ydD86IG51bWJlcjtcbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIEJhc2UgVVJMIG9mIHRoZSBtYXAgcGFnZSwgcHJpbnRlZCB3aXRoIHRoZSB0b2tlbi4gKi9cbiAgbWFwVXJsPzogc3RyaW5nO1xuICBjYWxsVGltZW91dE1zPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgS2VwbGVyTWNwQnJpZGdlU3RhcnQgPSB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogV2hhdCBhIGh1bWFuIHNob3VsZCBvcGVuOiBgPG1hcFVybD4/bWNwPTx0b2tlbj5gLiAqL1xuICBwYWdlVXJsOiBzdHJpbmc7XG59O1xuXG50eXBlIFBlbmRpbmdDYWxsID0ge1xuICByZXNvbHZlOiAocmVzdWx0OiBSb29tQ29tbWFuZFJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG59O1xuXG4vKiogTUNQIHRvb2wgbmFtZXMgYXJlIGNvbW1vbmx5IHJlc3RyaWN0ZWQgdG8gW0EtWmEtejAtOV8tXTsgYG1hcC5hZGQtbGF5ZXJgIOKGkiBgbWFwX2FkZF9sYXllcmAuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Ub29sTmFtZShjb21tYW5kSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kSWQucmVwbGFjZSgvXFwuL2csICdfJyk7XG59XG5cbmZ1bmN0aW9uIHRvSW5wdXRTY2hlbWEoY29tbWFuZDoge2lucHV0U2NoZW1hPzogdW5rbm93bn0pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChjb21tYW5kLmlucHV0U2NoZW1hKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHoudG9KU09OU2NoZW1hKGNvbW1hbmQuaW5wdXRTY2hlbWEgYXMgei5ab2RUeXBlKTtcbiAgICAgIGlmIChzY2hlbWEpIHJldHVybiBzY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBOb3QgZXZlcnkgY29tbWFuZCBzaGlwcyBhIHpvZCBzY2hlbWE7IGZhbGwgYmFjayB0byBhIGZyZWUtZm9ybSBvYmplY3QuXG4gICAgfVxuICB9XG4gIHJldHVybiB7dHlwZTogJ29iamVjdCd9O1xufVxuXG4vKiogVGhlIG1hcCBzdXJmYWNlIGFzIGRlY2xhcmVkIGJ5IHRoaXMgcGFja2FnZSwgaW5kZXBlbmRlbnQgb2YgYW55IHBhZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFwVG9vbHMoKTogTWFwVG9vbFtdIHtcbiAgY29uc3QgY29tbWFuZHMgPSBnZXRLZXBsZXJDb21tYW5kcyh7fSBhcyBLZXBsZXJDb250ZXh0KTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY29tbWFuZHMpLm1hcChjb21tYW5kID0+ICh7XG4gICAgbmFtZTogdG9Ub29sTmFtZShjb21tYW5kLmlkKSxcbiAgICBjb21tYW5kSWQ6IGNvbW1hbmQuaWQsXG4gICAgZGVzY3JpcHRpb246IGNvbW1hbmQuZGVzY3JpcHRpb24gfHwgY29tbWFuZC5uYW1lLFxuICAgIGlucHV0U2NoZW1hOiB0b0lucHV0U2NoZW1hKGNvbW1hbmQpXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gdG9vbHNGcm9tRGVzY3JpcHRvcnMoZGVzY3JpcHRvcnM6IFRvb2xEZXNjcmlwdG9yW10pOiBNYXBUb29sW10ge1xuICByZXR1cm4gZGVzY3JpcHRvcnNcbiAgICAuZmlsdGVyKGRlc2NyaXB0b3IgPT4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmlkKVxuICAgIC5tYXAoZGVzY3JpcHRvciA9PiAoe1xuICAgICAgbmFtZTogdG9Ub29sTmFtZShkZXNjcmlwdG9yLmlkKSxcbiAgICAgIGNvbW1hbmRJZDogZGVzY3JpcHRvci5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdG9yLmRlc2NyaXB0aW9uIHx8IGRlc2NyaXB0b3IubmFtZSB8fCBkZXNjcmlwdG9yLmlkLFxuICAgICAgaW5wdXRTY2hlbWE6IChkZXNjcmlwdG9yLmlucHV0U2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB8fCB7dHlwZTogJ29iamVjdCd9XG4gICAgfSkpO1xufVxuXG4vKiogUm9vbUNvbW1hbmRSZXN1bHQg4oaSIHRoZSB0ZXh0IGFuIE1DUCBjbGllbnQgc2hvd3MgZm9yIGEgdG9vbCBjYWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3VsdChyZXN1bHQ6IFJvb21Db21tYW5kUmVzdWx0KToge3RleHQ6IHN0cmluZzsgaXNFcnJvcjogYm9vbGVhbn0ge1xuICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgIHJldHVybiB7dGV4dDogYOKclyAke3Jlc3VsdC5jb21tYW5kSWR9OiAke3Jlc3VsdC5lcnJvciA/PyAnZmFpbGVkJ31gLCBpc0Vycm9yOiB0cnVlfTtcbiAgfVxuICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5lcnJvcikge1xuICAgIHJldHVybiB7dGV4dDogYOKclyAke3Jlc3VsdC5jb21tYW5kSWR9OiAke3Jlc3VsdC5lcnJvcn1gLCBpc0Vycm9yOiB0cnVlfTtcbiAgfVxuICBjb25zdCBkYXRhID0gcmVzdWx0Py5kYXRhIGFzIHtkZXRhaWxzPzogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEuZGV0YWlscyA9PT0gJ3N0cmluZycpIHJldHVybiB7dGV4dDogZGF0YS5kZXRhaWxzLCBpc0Vycm9yOiBmYWxzZX07XG4gIHJldHVybiB7dGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0Py5kYXRhID8/IHJlc3VsdCA/PyBudWxsLCBudWxsLCAyKSwgaXNFcnJvcjogZmFsc2V9O1xufVxuXG5leHBvcnQgY2xhc3MgS2VwbGVyTWNwQnJpZGdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxLZXBsZXJNY3BCcmlkZ2VPcHRpb25zPjtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0aWNUb29sczogTWFwVG9vbFtdO1xuICBwcml2YXRlIHBhZ2VUb29sczogTWFwVG9vbFtdIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ja2V0OiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB3c3M6IFdlYlNvY2tldFNlcnZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGh0dHBTZXJ2ZXI6IEh0dHBTZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nID0gbmV3IE1hcDxzdHJpbmcsIFBlbmRpbmdDYWxsPigpO1xuICBwcml2YXRlIHRva2VuID0gJyc7XG4gIHByaXZhdGUgcGFnZVVybCA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEtlcGxlck1jcEJyaWRnZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIHBvcnQ6IG9wdGlvbnMucG9ydCA/PyBERUZBVUxUX1BPUlQsXG4gICAgICBob3N0OiBvcHRpb25zLmhvc3QgPz8gREVGQVVMVF9IT1NULFxuICAgICAgbWFwVXJsOiBvcHRpb25zLm1hcFVybCA/PyAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJyxcbiAgICAgIGNhbGxUaW1lb3V0TXM6IG9wdGlvbnMuY2FsbFRpbWVvdXRNcyA/PyBERUZBVUxUX0NBTExfVElNRU9VVF9NU1xuICAgIH07XG4gICAgdGhpcy5zdGF0aWNUb29scyA9IGdldE1hcFRvb2xzKCk7XG4gIH1cblxuICAvKiogVG9vbHMgdGhlIE1DUCBjbGllbnQgY2FuIGNhbGwgcmlnaHQgbm93LiAqL1xuICBnZXRUb29scygpOiBNYXBUb29sW10ge1xuICAgIHJldHVybiB0aGlzLnBhZ2VUb29scyA/PyB0aGlzLnN0YXRpY1Rvb2xzO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTxLZXBsZXJNY3BCcmlkZ2VTdGFydD4ge1xuICAgIGlmICh0aGlzLndzcykgdGhyb3cgbmV3IEVycm9yKCdUaGUga2VwbGVyLmdsIGJyaWRnZSBpcyBhbHJlYWR5IHJ1bm5pbmcuJyk7XG5cbiAgICB0aGlzLnRva2VuID0gcmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpO1xuXG4gICAgLy8gQSBwbGFpbiBIVFRQIEdFVCBvbiBgL2AgcmVkaXJlY3RzIHRvIHRoZSBtYXAgcGFnZSBjYXJyeWluZyB0aGUgdG9rZW4sIHNvXG4gICAgLy8gdGhlIHVzZXIgY2FuIG9wZW4gYGh0dHA6Ly8xMjcuMC4wLjE6PHBvcnQ+L2AgZXZlbiB3aGVuIHRoZSBNQ1AgY2xpZW50XG4gICAgLy8gbmV2ZXIgc2hvd3MgdGhlIHNlcnZlcidzIHN0ZGVyci4gT25seSBgL3dzYCB1cGdyYWRlcyB0byBhIFdlYlNvY2tldC5cbiAgICBjb25zdCBodHRwU2VydmVyID0gY3JlYXRlU2VydmVyKChyZXF1ZXN0LCByZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QudXJsID09PSAnLycgfHwgcmVxdWVzdC51cmw/LnN0YXJ0c1dpdGgoJy8/JykpIHtcbiAgICAgICAgcmVzcG9uc2Uud3JpdGVIZWFkKDMwMiwge0xvY2F0aW9uOiB0aGlzLnBhZ2VVcmx9KTtcbiAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLndyaXRlSGVhZCg0MDQsIHsnY29udGVudC10eXBlJzogJ3RleHQvcGxhaW4nfSk7XG4gICAgICByZXNwb25zZS5lbmQoJ2tlcGxlci1tY3A6IHRoZSBtYXAgcGFnZSBjb25uZWN0cyBhdCAvd3MnKTtcbiAgICB9KTtcbiAgICB0aGlzLmh0dHBTZXJ2ZXIgPSBodHRwU2VydmVyO1xuXG4gICAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7c2VydmVyOiBodHRwU2VydmVyLCBwYXRoOiAnL3dzJ30pO1xuICAgIHRoaXMud3NzID0gd3NzO1xuICAgIHdzcy5vbignY29ubmVjdGlvbicsIChzb2NrZXQsIHJlcXVlc3QpID0+IHRoaXMuaGFuZGxlQ29ubmVjdGlvbihzb2NrZXQsIHJlcXVlc3QudXJsKSk7XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBodHRwU2VydmVyLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIGh0dHBTZXJ2ZXIubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCB0aGlzLm9wdGlvbnMuaG9zdCwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFkZHJlc3MgPSBodHRwU2VydmVyLmFkZHJlc3MoKTtcbiAgICBjb25zdCBwb3J0ID0gdHlwZW9mIGFkZHJlc3MgPT09ICdvYmplY3QnICYmIGFkZHJlc3MgPyBhZGRyZXNzLnBvcnQgOiB0aGlzLm9wdGlvbnMucG9ydDtcbiAgICBjb25zdCBtYXBVcmwgPSB0aGlzLm9wdGlvbnMubWFwVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgdGhpcy5wYWdlVXJsID0gYCR7bWFwVXJsfSR7bWFwVXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9bWNwPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgdGhpcy50b2tlblxuICAgICl9YDtcbiAgICByZXR1cm4ge2hvc3Q6IHRoaXMub3B0aW9ucy5ob3N0LCBwb3J0LCB0b2tlbjogdGhpcy50b2tlbiwgcGFnZVVybDogdGhpcy5wYWdlVXJsfTtcbiAgfVxuXG4gIGFzeW5jIGNhbGxUb29sKG5hbWU6IHN0cmluZywgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQcm9taXNlPFJvb21Db21tYW5kUmVzdWx0PiB7XG4gICAgY29uc3QgdG9vbCA9XG4gICAgICB0aGlzLmdldFRvb2xzKCkuZmluZChjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLm5hbWUgPT09IG5hbWUpID8/XG4gICAgICB0aGlzLnN0YXRpY1Rvb2xzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAoIXRvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gbWFwIHRvb2wgXCIke25hbWV9XCIuIEF2YWlsYWJsZTogJHt0aGlzLmdldFRvb2xzKClcbiAgICAgICAgICAubWFwKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUubmFtZSlcbiAgICAgICAgICAuam9pbignLCAnKX0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc29ja2V0ID0gdGhpcy5zb2NrZXQ7XG4gICAgaWYgKCFzb2NrZXQgfHwgc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdObyBrZXBsZXIuZ2wgbWFwIHBhZ2UgaXMgY29ubmVjdGVkLiBPcGVuIHRoZSBwYWdlIFVSTCBwcmludGVkIGF0IHN0YXJ0dXAgJyArXG4gICAgICAgICAgJyhpdCBjYXJyaWVzID9tY3A9PHRva2VuPiksIHRoZW4gY2FsbCB0aGUgdG9vbCBhZ2Fpbi4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxJZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCByZXBseSA9IG5ldyBQcm9taXNlPFJvb21Db21tYW5kUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmcuZGVsZXRlKGNhbGxJZCk7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoYFRpbWVkIG91dCBhZnRlciAke3RoaXMub3B0aW9ucy5jYWxsVGltZW91dE1zfSBtcyB3YWl0aW5nIGZvciB0aGUgbWFwIHBhZ2UuYClcbiAgICAgICAgKTtcbiAgICAgIH0sIHRoaXMub3B0aW9ucy5jYWxsVGltZW91dE1zKTtcbiAgICAgIHRoaXMucGVuZGluZy5zZXQoY2FsbElkLCB7cmVzb2x2ZSwgcmVqZWN0LCB0aW1lcn0pO1xuICAgIH0pO1xuXG4gICAgc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3R5cGU6ICdjYWxsJywgY2FsbElkLCB0b29sOiB0b29sLmNvbW1hbmRJZCwgaW5wdXR9KSk7XG4gICAgcmV0dXJuIHJlcGx5O1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWplY3RQZW5kaW5nKCdUaGUgYnJpZGdlIHdhcyBjbG9zZWQuJyk7XG4gICAgdGhpcy5wYWdlVG9vbHMgPSBudWxsO1xuICAgIHRoaXMuc29ja2V0Py5jbG9zZSgxMDAwLCAnYnJpZGdlIGNsb3NlZCcpO1xuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICBjb25zdCB3c3MgPSB0aGlzLndzcztcbiAgICBjb25zdCBodHRwU2VydmVyID0gdGhpcy5odHRwU2VydmVyO1xuICAgIHRoaXMud3NzID0gbnVsbDtcbiAgICB0aGlzLmh0dHBTZXJ2ZXIgPSBudWxsO1xuICAgIGlmICghd3NzKSByZXR1cm47XG4gICAgLy8gY2xvc2UoKSBvbmx5IHN0b3BzIGxpc3RlbmluZyBhbmQgd2FpdHMgZm9yIGNsaWVudHM7IHRlcm1pbmF0ZSB0aGVtIHNvXG4gICAgLy8gc2h1dGRvd24gKGFuZCB0ZXN0cykgZG8gbm90IGhhbmcgb24gYSBwYWdlIHRoYXQgbmV2ZXIgY2xvc2VzIGl0cyBzb2NrZXQuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2Ygd3NzLmNsaWVudHMpIGNsaWVudC50ZXJtaW5hdGUoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHdzcy5jbG9zZSgoKSA9PiByZXNvbHZlKCkpKTtcbiAgICBpZiAoaHR0cFNlcnZlcikge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBodHRwU2VydmVyLmNsb3NlKCgpID0+IHJlc29sdmUoKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29ubmVjdGlvbihzb2NrZXQ6IFdlYlNvY2tldCwgcmVxdWVzdFVybDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBuZXcgVVJMKHJlcXVlc3RVcmwgPz8gJy93cycsICdodHRwOi8vMTI3LjAuMC4xJykuc2VhcmNoUGFyYW1zLmdldCgndG9rZW4nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRva2VuID0gbnVsbDtcbiAgICB9XG4gICAgLy8gVGhlIHRva2VuIGlzIHRoZSBvbmx5IHRoaW5nIGtlZXBpbmcgb3RoZXIgbG9jYWwgcGFnZXMvcHJvY2Vzc2VzIGZyb21cbiAgICAvLyBkcml2aW5nIHRoZSBtYXA7IHJlamVjdCBhIG1pc21hdGNoIGJlZm9yZSBhY2NlcHRpbmcgYW55IG1lc3NhZ2UuXG4gICAgaWYgKHRva2VuICE9PSB0aGlzLnRva2VuKSB7XG4gICAgICBzb2NrZXQuY2xvc2UoMTAwOCwgJ2ludmFsaWQgdG9rZW4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPbmUgbWFwIHBhZ2UgYXQgYSB0aW1lOiBhIHNlY29uZCB0YWIgdGFrZXMgb3ZlciBzbyBjYWxscyBuZXZlciByYWNlXG4gICAgLy8gYmV0d2VlbiB0d28gbGl2ZSBtYXBzLlxuICAgIHRoaXMuc29ja2V0Py5jbG9zZSgxMDAwLCAncmVwbGFjZWQgYnkgYSBuZXdlciBjb25uZWN0aW9uJyk7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgdGhpcy5wYWdlVG9vbHMgPSBudWxsO1xuXG4gICAgc29ja2V0Lm9uKCdtZXNzYWdlJywgZGF0YSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UoZGF0YSkpO1xuICAgIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zb2NrZXQgPT09IHNvY2tldCkge1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMucGFnZVRvb2xzID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWplY3RQZW5kaW5nKCdUaGUga2VwbGVyLmdsIHBhZ2UgZGlzY29ubmVjdGVkLicpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEVycm9ycyBhcmUgZm9sbG93ZWQgYnkgY2xvc2U7IHRoZSBjbG9zZSBoYW5kbGVyIHJlc2V0cyBzdGF0ZS5cbiAgICBzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTWVzc2FnZShyYXc6IHVua25vd24pOiB2b2lkIHtcbiAgICBsZXQgbWVzc2FnZTogYW55O1xuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShTdHJpbmcocmF3KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtZXNzYWdlPy50eXBlID09PSAnaGVsbG8nICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb21tYW5kcykpIHtcbiAgICAgIHRoaXMucGFnZVRvb2xzID0gdG9vbHNGcm9tRGVzY3JpcHRvcnMobWVzc2FnZS5jb21tYW5kcyBhcyBUb29sRGVzY3JpcHRvcltdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2U/LnR5cGUgPT09ICdyZXN1bHQnICYmIHR5cGVvZiBtZXNzYWdlLmNhbGxJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBlbmRpbmdDYWxsID0gdGhpcy5wZW5kaW5nLmdldChtZXNzYWdlLmNhbGxJZCk7XG4gICAgICBpZiAoIXBlbmRpbmdDYWxsKSByZXR1cm47XG4gICAgICBjbGVhclRpbWVvdXQocGVuZGluZ0NhbGwudGltZXIpO1xuICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShtZXNzYWdlLmNhbGxJZCk7XG4gICAgICBwZW5kaW5nQ2FsbC5yZXNvbHZlKG1lc3NhZ2UucmVzdWx0IGFzIFJvb21Db21tYW5kUmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlamVjdFBlbmRpbmcocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtjYWxsSWQsIHBlbmRpbmdDYWxsXSBvZiB0aGlzLnBlbmRpbmcpIHtcbiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nQ2FsbC50aW1lcik7XG4gICAgICB0aGlzLnBlbmRpbmcuZGVsZXRlKGNhbGxJZCk7XG4gICAgICBwZW5kaW5nQ2FsbC5yZWplY3QobmV3IEVycm9yKHJlYXNvbikpO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxHQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxJQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFBOEMsU0FBQUssMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FB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
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "KeplerMcpBridge", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _bridgeServer.KeplerMcpBridge;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "formatResult", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _bridgeServer.formatResult;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "getMapTools", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _bridgeServer.getMapTools;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "toToolName", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _bridgeServer.toToolName;
28
+ }
29
+ });
30
+ var _bridgeServer = require("./bridge-server");
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnJpZGdlU2VydmVyIiwicmVxdWlyZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyoqXG4gKiBTZXJ2ZXItc2lkZSBlbnRyeSBwb2ludCBvZiBgQGtlcGxlci5nbC9tY3BgLlxuICpcbiAqIEJyb3dzZXIgYnVuZGxlcyBtdXN0IG5vdCBpbXBvcnQgdGhpcyBtb2R1bGU6IGl0IHB1bGxzIGluIGB3c2AgYW5kIE5vZGUgQVBJcy5cbiAqIFRoZSBtYXAgY29udHJhY3RzIGFuZCBjb21tYW5kcyBzdGF5IGluIHRoZSBwYWNrYWdlIHJvb3Q7IHRoaXMgc3VicGF0aCBpcyBmb3JcbiAqIHRoZSBzdGRpbyBNQ1Agc2VydmVyIChga2VwbGVyLW1jcGApIGFuZCBmb3IgdGVzdHMuXG4gKi9cblxuZXhwb3J0IHtLZXBsZXJNY3BCcmlkZ2UsIGZvcm1hdFJlc3VsdCwgZ2V0TWFwVG9vbHMsIHRvVG9vbE5hbWV9IGZyb20gJy4vYnJpZGdlLXNlcnZlcic7XG5leHBvcnQgdHlwZSB7S2VwbGVyTWNwQnJpZGdlT3B0aW9ucywgS2VwbGVyTWNwQnJpZGdlU3RhcnQsIE1hcFRvb2x9IGZyb20gJy4vYnJpZGdlLXNlcnZlcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsSUFBQUEsYUFBQSxHQUFBQyxPQUFBIiwiaWdub3JlTGlzdCI6W119