@mcp-z/client 1.0.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/AGENTS.md +159 -0
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/cjs/auth/capability-discovery.d.cts +25 -0
- package/dist/cjs/auth/capability-discovery.d.ts +25 -0
- package/dist/cjs/auth/capability-discovery.js +280 -0
- package/dist/cjs/auth/capability-discovery.js.map +1 -0
- package/dist/cjs/auth/index.d.cts +9 -0
- package/dist/cjs/auth/index.d.ts +9 -0
- package/dist/cjs/auth/index.js +28 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/interactive-oauth-flow.d.cts +58 -0
- package/dist/cjs/auth/interactive-oauth-flow.d.ts +58 -0
- package/dist/cjs/auth/interactive-oauth-flow.js +537 -0
- package/dist/cjs/auth/interactive-oauth-flow.js.map +1 -0
- package/dist/cjs/auth/oauth-callback-listener.d.cts +56 -0
- package/dist/cjs/auth/oauth-callback-listener.d.ts +56 -0
- package/dist/cjs/auth/oauth-callback-listener.js +333 -0
- package/dist/cjs/auth/oauth-callback-listener.js.map +1 -0
- package/dist/cjs/auth/pkce.d.cts +17 -0
- package/dist/cjs/auth/pkce.d.ts +17 -0
- package/dist/cjs/auth/pkce.js +192 -0
- package/dist/cjs/auth/pkce.js.map +1 -0
- package/dist/cjs/auth/rfc9728-discovery.d.cts +34 -0
- package/dist/cjs/auth/rfc9728-discovery.d.ts +34 -0
- package/dist/cjs/auth/rfc9728-discovery.js +436 -0
- package/dist/cjs/auth/rfc9728-discovery.js.map +1 -0
- package/dist/cjs/auth/types.d.cts +137 -0
- package/dist/cjs/auth/types.d.ts +137 -0
- package/dist/cjs/auth/types.js +9 -0
- package/dist/cjs/auth/types.js.map +1 -0
- package/dist/cjs/client-helpers.d.cts +55 -0
- package/dist/cjs/client-helpers.d.ts +55 -0
- package/dist/cjs/client-helpers.js +128 -0
- package/dist/cjs/client-helpers.js.map +1 -0
- package/dist/cjs/config/server-loader.d.cts +27 -0
- package/dist/cjs/config/server-loader.d.ts +27 -0
- package/dist/cjs/config/server-loader.js +111 -0
- package/dist/cjs/config/server-loader.js.map +1 -0
- package/dist/cjs/config/validate-config.d.cts +15 -0
- package/dist/cjs/config/validate-config.d.ts +15 -0
- package/dist/cjs/config/validate-config.js +128 -0
- package/dist/cjs/config/validate-config.js.map +1 -0
- package/dist/cjs/connection/connect-client.d.cts +59 -0
- package/dist/cjs/connection/connect-client.d.ts +59 -0
- package/dist/cjs/connection/connect-client.js +536 -0
- package/dist/cjs/connection/connect-client.js.map +1 -0
- package/dist/cjs/connection/existing-process-transport.d.cts +40 -0
- package/dist/cjs/connection/existing-process-transport.d.ts +40 -0
- package/dist/cjs/connection/existing-process-transport.js +274 -0
- package/dist/cjs/connection/existing-process-transport.js.map +1 -0
- package/dist/cjs/connection/types.d.cts +61 -0
- package/dist/cjs/connection/types.d.ts +61 -0
- package/dist/cjs/connection/types.js +53 -0
- package/dist/cjs/connection/types.js.map +1 -0
- package/dist/cjs/connection/wait-for-http-ready.d.cts +15 -0
- package/dist/cjs/connection/wait-for-http-ready.d.ts +15 -0
- package/dist/cjs/connection/wait-for-http-ready.js +232 -0
- package/dist/cjs/connection/wait-for-http-ready.js.map +1 -0
- package/dist/cjs/dcr/dcr-authenticator.d.cts +73 -0
- package/dist/cjs/dcr/dcr-authenticator.d.ts +73 -0
- package/dist/cjs/dcr/dcr-authenticator.js +655 -0
- package/dist/cjs/dcr/dcr-authenticator.js.map +1 -0
- package/dist/cjs/dcr/dynamic-client-registrar.d.cts +28 -0
- package/dist/cjs/dcr/dynamic-client-registrar.d.ts +28 -0
- package/dist/cjs/dcr/dynamic-client-registrar.js +245 -0
- package/dist/cjs/dcr/dynamic-client-registrar.js.map +1 -0
- package/dist/cjs/dcr/index.d.cts +8 -0
- package/dist/cjs/dcr/index.d.ts +8 -0
- package/dist/cjs/dcr/index.js +24 -0
- package/dist/cjs/dcr/index.js.map +1 -0
- package/dist/cjs/index.d.cts +21 -0
- package/dist/cjs/index.d.ts +21 -0
- package/dist/cjs/index.js +94 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/monkey-patches.d.cts +6 -0
- package/dist/cjs/monkey-patches.d.ts +6 -0
- package/dist/cjs/monkey-patches.js +236 -0
- package/dist/cjs/monkey-patches.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/response-wrappers.d.cts +41 -0
- package/dist/cjs/response-wrappers.d.ts +41 -0
- package/dist/cjs/response-wrappers.js +443 -0
- package/dist/cjs/response-wrappers.js.map +1 -0
- package/dist/cjs/search/index.d.cts +6 -0
- package/dist/cjs/search/index.d.ts +6 -0
- package/dist/cjs/search/index.js +25 -0
- package/dist/cjs/search/index.js.map +1 -0
- package/dist/cjs/search/search.d.cts +22 -0
- package/dist/cjs/search/search.d.ts +22 -0
- package/dist/cjs/search/search.js +630 -0
- package/dist/cjs/search/search.js.map +1 -0
- package/dist/cjs/search/types.d.cts +122 -0
- package/dist/cjs/search/types.d.ts +122 -0
- package/dist/cjs/search/types.js +10 -0
- package/dist/cjs/search/types.js.map +1 -0
- package/dist/cjs/spawn/spawn-server.d.cts +83 -0
- package/dist/cjs/spawn/spawn-server.d.ts +83 -0
- package/dist/cjs/spawn/spawn-server.js +410 -0
- package/dist/cjs/spawn/spawn-server.js.map +1 -0
- package/dist/cjs/spawn/spawn-servers.d.cts +151 -0
- package/dist/cjs/spawn/spawn-servers.d.ts +151 -0
- package/dist/cjs/spawn/spawn-servers.js +911 -0
- package/dist/cjs/spawn/spawn-servers.js.map +1 -0
- package/dist/cjs/types.d.cts +11 -0
- package/dist/cjs/types.d.ts +11 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/logger.d.cts +24 -0
- package/dist/cjs/utils/logger.d.ts +24 -0
- package/dist/cjs/utils/logger.js +80 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/path-utils.d.cts +45 -0
- package/dist/cjs/utils/path-utils.d.ts +45 -0
- package/dist/cjs/utils/path-utils.js +158 -0
- package/dist/cjs/utils/path-utils.js.map +1 -0
- package/dist/cjs/utils/sanitizer.d.cts +30 -0
- package/dist/cjs/utils/sanitizer.d.ts +30 -0
- package/dist/cjs/utils/sanitizer.js +124 -0
- package/dist/cjs/utils/sanitizer.js.map +1 -0
- package/dist/esm/auth/capability-discovery.d.ts +25 -0
- package/dist/esm/auth/capability-discovery.js +110 -0
- package/dist/esm/auth/capability-discovery.js.map +1 -0
- package/dist/esm/auth/index.d.ts +9 -0
- package/dist/esm/auth/index.js +6 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/interactive-oauth-flow.d.ts +58 -0
- package/dist/esm/auth/interactive-oauth-flow.js +217 -0
- package/dist/esm/auth/interactive-oauth-flow.js.map +1 -0
- package/dist/esm/auth/oauth-callback-listener.d.ts +56 -0
- package/dist/esm/auth/oauth-callback-listener.js +166 -0
- package/dist/esm/auth/oauth-callback-listener.js.map +1 -0
- package/dist/esm/auth/pkce.d.ts +17 -0
- package/dist/esm/auth/pkce.js +41 -0
- package/dist/esm/auth/pkce.js.map +1 -0
- package/dist/esm/auth/rfc9728-discovery.d.ts +34 -0
- package/dist/esm/auth/rfc9728-discovery.js +157 -0
- package/dist/esm/auth/rfc9728-discovery.js.map +1 -0
- package/dist/esm/auth/types.d.ts +137 -0
- package/dist/esm/auth/types.js +7 -0
- package/dist/esm/auth/types.js.map +1 -0
- package/dist/esm/client-helpers.d.ts +55 -0
- package/dist/esm/client-helpers.js +81 -0
- package/dist/esm/client-helpers.js.map +1 -0
- package/dist/esm/config/server-loader.d.ts +27 -0
- package/dist/esm/config/server-loader.js +49 -0
- package/dist/esm/config/server-loader.js.map +1 -0
- package/dist/esm/config/validate-config.d.ts +15 -0
- package/dist/esm/config/validate-config.js +76 -0
- package/dist/esm/config/validate-config.js.map +1 -0
- package/dist/esm/connection/connect-client.d.ts +59 -0
- package/dist/esm/connection/connect-client.js +272 -0
- package/dist/esm/connection/connect-client.js.map +1 -0
- package/dist/esm/connection/existing-process-transport.d.ts +40 -0
- package/dist/esm/connection/existing-process-transport.js +103 -0
- package/dist/esm/connection/existing-process-transport.js.map +1 -0
- package/dist/esm/connection/types.d.ts +61 -0
- package/dist/esm/connection/types.js +34 -0
- package/dist/esm/connection/types.js.map +1 -0
- package/dist/esm/connection/wait-for-http-ready.d.ts +15 -0
- package/dist/esm/connection/wait-for-http-ready.js +43 -0
- package/dist/esm/connection/wait-for-http-ready.js.map +1 -0
- package/dist/esm/dcr/dcr-authenticator.d.ts +73 -0
- package/dist/esm/dcr/dcr-authenticator.js +235 -0
- package/dist/esm/dcr/dcr-authenticator.js.map +1 -0
- package/dist/esm/dcr/dynamic-client-registrar.d.ts +28 -0
- package/dist/esm/dcr/dynamic-client-registrar.js +66 -0
- package/dist/esm/dcr/dynamic-client-registrar.js.map +1 -0
- package/dist/esm/dcr/index.d.ts +8 -0
- package/dist/esm/dcr/index.js +5 -0
- package/dist/esm/dcr/index.js.map +1 -0
- package/dist/esm/index.d.ts +21 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/monkey-patches.d.ts +6 -0
- package/dist/esm/monkey-patches.js +32 -0
- package/dist/esm/monkey-patches.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/response-wrappers.d.ts +41 -0
- package/dist/esm/response-wrappers.js +201 -0
- package/dist/esm/response-wrappers.js.map +1 -0
- package/dist/esm/search/index.d.ts +6 -0
- package/dist/esm/search/index.js +3 -0
- package/dist/esm/search/index.js.map +1 -0
- package/dist/esm/search/search.d.ts +22 -0
- package/dist/esm/search/search.js +236 -0
- package/dist/esm/search/search.js.map +1 -0
- package/dist/esm/search/types.d.ts +122 -0
- package/dist/esm/search/types.js +8 -0
- package/dist/esm/search/types.js.map +1 -0
- package/dist/esm/spawn/spawn-server.d.ts +83 -0
- package/dist/esm/spawn/spawn-server.js +145 -0
- package/dist/esm/spawn/spawn-server.js.map +1 -0
- package/dist/esm/spawn/spawn-servers.d.ts +151 -0
- package/dist/esm/spawn/spawn-servers.js +406 -0
- package/dist/esm/spawn/spawn-servers.js.map +1 -0
- package/dist/esm/types.d.ts +11 -0
- package/dist/esm/types.js +9 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/logger.d.ts +24 -0
- package/dist/esm/utils/logger.js +59 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/path-utils.d.ts +45 -0
- package/dist/esm/utils/path-utils.js +89 -0
- package/dist/esm/utils/path-utils.js.map +1 -0
- package/dist/esm/utils/sanitizer.d.ts +30 -0
- package/dist/esm/utils/sanitizer.js +43 -0
- package/dist/esm/utils/sanitizer.js.map +1 -0
- package/package.json +92 -0
- package/schemas/servers.d.ts +90 -0
- package/schemas/servers.schema.json +104 -0
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level multi-server registry management.
|
|
3
|
+
* Starts multiple servers from a servers configuration object.
|
|
4
|
+
* Supports stdio, http, and ws transports.
|
|
5
|
+
* Implements Claude Code-compatible configuration with start extension support.
|
|
6
|
+
*/ "use strict";
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
Object.defineProperty(exports, "createServerRegistry", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return createServerRegistry;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
|
|
17
|
+
var _process = /*#__PURE__*/ _interop_require_wildcard(require("process"));
|
|
18
|
+
var _clienthelpersts = require("../client-helpers.js");
|
|
19
|
+
var _validateconfigts = require("../config/validate-config.js");
|
|
20
|
+
var _connectclientts = require("../connection/connect-client.js");
|
|
21
|
+
var _indexts = require("../search/index.js");
|
|
22
|
+
var _loggerts = require("../utils/logger.js");
|
|
23
|
+
var _spawnserverts = require("./spawn-server.js");
|
|
24
|
+
function _array_like_to_array(arr, len) {
|
|
25
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
26
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
27
|
+
return arr2;
|
|
28
|
+
}
|
|
29
|
+
function _array_with_holes(arr) {
|
|
30
|
+
if (Array.isArray(arr)) return arr;
|
|
31
|
+
}
|
|
32
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
33
|
+
try {
|
|
34
|
+
var info = gen[key](arg);
|
|
35
|
+
var value = info.value;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
reject(error);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (info.done) {
|
|
41
|
+
resolve(value);
|
|
42
|
+
} else {
|
|
43
|
+
Promise.resolve(value).then(_next, _throw);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function _async_to_generator(fn) {
|
|
47
|
+
return function() {
|
|
48
|
+
var self = this, args = arguments;
|
|
49
|
+
return new Promise(function(resolve, reject) {
|
|
50
|
+
var gen = fn.apply(self, args);
|
|
51
|
+
function _next(value) {
|
|
52
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
53
|
+
}
|
|
54
|
+
function _throw(err) {
|
|
55
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
56
|
+
}
|
|
57
|
+
_next(undefined);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function _define_property(obj, key, value) {
|
|
62
|
+
if (key in obj) {
|
|
63
|
+
Object.defineProperty(obj, key, {
|
|
64
|
+
value: value,
|
|
65
|
+
enumerable: true,
|
|
66
|
+
configurable: true,
|
|
67
|
+
writable: true
|
|
68
|
+
});
|
|
69
|
+
} else {
|
|
70
|
+
obj[key] = value;
|
|
71
|
+
}
|
|
72
|
+
return obj;
|
|
73
|
+
}
|
|
74
|
+
function _instanceof(left, right) {
|
|
75
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
76
|
+
return !!right[Symbol.hasInstance](left);
|
|
77
|
+
} else {
|
|
78
|
+
return left instanceof right;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
82
|
+
if (typeof WeakMap !== "function") return null;
|
|
83
|
+
var cacheBabelInterop = new WeakMap();
|
|
84
|
+
var cacheNodeInterop = new WeakMap();
|
|
85
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
86
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
87
|
+
})(nodeInterop);
|
|
88
|
+
}
|
|
89
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
90
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
91
|
+
return obj;
|
|
92
|
+
}
|
|
93
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
94
|
+
return {
|
|
95
|
+
default: obj
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
99
|
+
if (cache && cache.has(obj)) {
|
|
100
|
+
return cache.get(obj);
|
|
101
|
+
}
|
|
102
|
+
var newObj = {
|
|
103
|
+
__proto__: null
|
|
104
|
+
};
|
|
105
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
106
|
+
for(var key in obj){
|
|
107
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
108
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
109
|
+
if (desc && (desc.get || desc.set)) {
|
|
110
|
+
Object.defineProperty(newObj, key, desc);
|
|
111
|
+
} else {
|
|
112
|
+
newObj[key] = obj[key];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
newObj.default = obj;
|
|
117
|
+
if (cache) {
|
|
118
|
+
cache.set(obj, newObj);
|
|
119
|
+
}
|
|
120
|
+
return newObj;
|
|
121
|
+
}
|
|
122
|
+
function _iterable_to_array_limit(arr, i) {
|
|
123
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
124
|
+
if (_i == null) return;
|
|
125
|
+
var _arr = [];
|
|
126
|
+
var _n = true;
|
|
127
|
+
var _d = false;
|
|
128
|
+
var _s, _e;
|
|
129
|
+
try {
|
|
130
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
131
|
+
_arr.push(_s.value);
|
|
132
|
+
if (i && _arr.length === i) break;
|
|
133
|
+
}
|
|
134
|
+
} catch (err) {
|
|
135
|
+
_d = true;
|
|
136
|
+
_e = err;
|
|
137
|
+
} finally{
|
|
138
|
+
try {
|
|
139
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
140
|
+
} finally{
|
|
141
|
+
if (_d) throw _e;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return _arr;
|
|
145
|
+
}
|
|
146
|
+
function _non_iterable_rest() {
|
|
147
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
148
|
+
}
|
|
149
|
+
function _object_spread(target) {
|
|
150
|
+
for(var i = 1; i < arguments.length; i++){
|
|
151
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
152
|
+
var ownKeys = Object.keys(source);
|
|
153
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
154
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
155
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
ownKeys.forEach(function(key) {
|
|
159
|
+
_define_property(target, key, source[key]);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return target;
|
|
163
|
+
}
|
|
164
|
+
function ownKeys(object, enumerableOnly) {
|
|
165
|
+
var keys = Object.keys(object);
|
|
166
|
+
if (Object.getOwnPropertySymbols) {
|
|
167
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
168
|
+
if (enumerableOnly) {
|
|
169
|
+
symbols = symbols.filter(function(sym) {
|
|
170
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
keys.push.apply(keys, symbols);
|
|
174
|
+
}
|
|
175
|
+
return keys;
|
|
176
|
+
}
|
|
177
|
+
function _object_spread_props(target, source) {
|
|
178
|
+
source = source != null ? source : {};
|
|
179
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
180
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
181
|
+
} else {
|
|
182
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
183
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return target;
|
|
187
|
+
}
|
|
188
|
+
function _sliced_to_array(arr, i) {
|
|
189
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
190
|
+
}
|
|
191
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
192
|
+
if (!o) return;
|
|
193
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
194
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
195
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
196
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
197
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
198
|
+
}
|
|
199
|
+
function _ts_generator(thisArg, body) {
|
|
200
|
+
var f, y, t, _ = {
|
|
201
|
+
label: 0,
|
|
202
|
+
sent: function() {
|
|
203
|
+
if (t[0] & 1) throw t[1];
|
|
204
|
+
return t[1];
|
|
205
|
+
},
|
|
206
|
+
trys: [],
|
|
207
|
+
ops: []
|
|
208
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
209
|
+
return d(g, "next", {
|
|
210
|
+
value: verb(0)
|
|
211
|
+
}), d(g, "throw", {
|
|
212
|
+
value: verb(1)
|
|
213
|
+
}), d(g, "return", {
|
|
214
|
+
value: verb(2)
|
|
215
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
216
|
+
value: function() {
|
|
217
|
+
return this;
|
|
218
|
+
}
|
|
219
|
+
}), g;
|
|
220
|
+
function verb(n) {
|
|
221
|
+
return function(v) {
|
|
222
|
+
return step([
|
|
223
|
+
n,
|
|
224
|
+
v
|
|
225
|
+
]);
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function step(op) {
|
|
229
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
230
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
231
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
232
|
+
if (y = 0, t) op = [
|
|
233
|
+
op[0] & 2,
|
|
234
|
+
t.value
|
|
235
|
+
];
|
|
236
|
+
switch(op[0]){
|
|
237
|
+
case 0:
|
|
238
|
+
case 1:
|
|
239
|
+
t = op;
|
|
240
|
+
break;
|
|
241
|
+
case 4:
|
|
242
|
+
_.label++;
|
|
243
|
+
return {
|
|
244
|
+
value: op[1],
|
|
245
|
+
done: false
|
|
246
|
+
};
|
|
247
|
+
case 5:
|
|
248
|
+
_.label++;
|
|
249
|
+
y = op[1];
|
|
250
|
+
op = [
|
|
251
|
+
0
|
|
252
|
+
];
|
|
253
|
+
continue;
|
|
254
|
+
case 7:
|
|
255
|
+
op = _.ops.pop();
|
|
256
|
+
_.trys.pop();
|
|
257
|
+
continue;
|
|
258
|
+
default:
|
|
259
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
260
|
+
_ = 0;
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
264
|
+
_.label = op[1];
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
268
|
+
_.label = t[1];
|
|
269
|
+
t = op;
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
if (t && _.label < t[2]) {
|
|
273
|
+
_.label = t[2];
|
|
274
|
+
_.ops.push(op);
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
if (t[2]) _.ops.pop();
|
|
278
|
+
_.trys.pop();
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
op = body.call(thisArg, _);
|
|
282
|
+
} catch (e) {
|
|
283
|
+
op = [
|
|
284
|
+
6,
|
|
285
|
+
e
|
|
286
|
+
];
|
|
287
|
+
y = 0;
|
|
288
|
+
} finally{
|
|
289
|
+
f = t = 0;
|
|
290
|
+
}
|
|
291
|
+
if (op[0] & 5) throw op[1];
|
|
292
|
+
return {
|
|
293
|
+
value: op[0] ? op[1] : void 0,
|
|
294
|
+
done: true
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Infer transport type: explicit type > URL protocol > default 'stdio'
|
|
300
|
+
*/ function inferTransportType(config) {
|
|
301
|
+
if (config.type) {
|
|
302
|
+
return config.type;
|
|
303
|
+
}
|
|
304
|
+
if (config.url) {
|
|
305
|
+
var url = new URL(config.url);
|
|
306
|
+
if (url.protocol === 'http:' || url.protocol === 'https:') {
|
|
307
|
+
return 'http';
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return 'stdio';
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Helper to filter undefined values from environment
|
|
314
|
+
*/ function filterEnv(env) {
|
|
315
|
+
var filtered = {};
|
|
316
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
317
|
+
try {
|
|
318
|
+
for(var _iterator = Object.entries(env)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
319
|
+
var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
|
|
320
|
+
if (value !== undefined) {
|
|
321
|
+
filtered[key] = value;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
} catch (err) {
|
|
325
|
+
_didIteratorError = true;
|
|
326
|
+
_iteratorError = err;
|
|
327
|
+
} finally{
|
|
328
|
+
try {
|
|
329
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
330
|
+
_iterator.return();
|
|
331
|
+
}
|
|
332
|
+
} finally{
|
|
333
|
+
if (_didIteratorError) {
|
|
334
|
+
throw _iteratorError;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return filtered;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Determine spawn behavior based on dialects and config structure.
|
|
342
|
+
*
|
|
343
|
+
* Dialects:
|
|
344
|
+
* - ['servers'] (default): Claude Code compatible - ignores start blocks, stdio only
|
|
345
|
+
* - ['start']: Only spawn servers with start blocks (HTTP server testing)
|
|
346
|
+
* - ['servers', 'start']: Spawn both start blocks and stdio servers (full MCP-Z extension support)
|
|
347
|
+
*
|
|
348
|
+
* Environment merging (when baseEnv provided):
|
|
349
|
+
* - HTTP servers (start block): { ...baseEnv, ...entry.start.env }
|
|
350
|
+
* - Stdio servers: { ...baseEnv, ...entry.env }
|
|
351
|
+
*
|
|
352
|
+
* When baseEnv is not provided, process.env is used as the base.
|
|
353
|
+
*/ function getSpawnConfig(entry, dialects, baseEnv) {
|
|
354
|
+
var transportType = inferTransportType(entry);
|
|
355
|
+
var hasServers = dialects.includes('servers');
|
|
356
|
+
var hasStart = dialects.includes('start');
|
|
357
|
+
// If only 'servers' dialect: Claude Code compatible (ignore start blocks, stdio only)
|
|
358
|
+
if (hasServers && !hasStart) {
|
|
359
|
+
if (transportType === 'stdio' && entry.command) {
|
|
360
|
+
return {
|
|
361
|
+
shouldSpawn: true,
|
|
362
|
+
command: entry.command,
|
|
363
|
+
args: entry.args || [],
|
|
364
|
+
env: filterEnv(_object_spread({}, baseEnv, entry.env))
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
shouldSpawn: false
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
// If only 'start' dialect: Only spawn servers with start blocks
|
|
372
|
+
if (hasStart && !hasServers) {
|
|
373
|
+
if (entry.start) {
|
|
374
|
+
return {
|
|
375
|
+
shouldSpawn: true,
|
|
376
|
+
command: entry.start.command,
|
|
377
|
+
args: entry.start.args || [],
|
|
378
|
+
env: filterEnv(_object_spread({}, baseEnv, entry.start.env))
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
shouldSpawn: false
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
// Both dialects: Spawn both start blocks and stdio servers
|
|
386
|
+
// Priority: start blocks first, then stdio
|
|
387
|
+
if (entry.start) {
|
|
388
|
+
return {
|
|
389
|
+
shouldSpawn: true,
|
|
390
|
+
command: entry.start.command,
|
|
391
|
+
args: entry.start.args || [],
|
|
392
|
+
env: filterEnv(_object_spread({}, baseEnv, entry.start.env))
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
if (transportType === 'stdio' && entry.command) {
|
|
396
|
+
return {
|
|
397
|
+
shouldSpawn: true,
|
|
398
|
+
command: entry.command,
|
|
399
|
+
args: entry.args || [],
|
|
400
|
+
env: filterEnv(_object_spread({}, baseEnv, entry.env))
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
return {
|
|
404
|
+
shouldSpawn: false
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function createServerRegistry(serversConfig, options) {
|
|
408
|
+
var _ref, _ref1, _ref2;
|
|
409
|
+
var cwd = (_ref = options === null || options === void 0 ? void 0 : options.cwd) !== null && _ref !== void 0 ? _ref : _process.cwd();
|
|
410
|
+
var dialects = (_ref1 = options === null || options === void 0 ? void 0 : options.dialects) !== null && _ref1 !== void 0 ? _ref1 : [
|
|
411
|
+
'servers'
|
|
412
|
+
];
|
|
413
|
+
// Determine base environment:
|
|
414
|
+
// - If options.env provided, use it (process.env NOT included)
|
|
415
|
+
// - If options.env omitted, use process.env as base
|
|
416
|
+
var baseEnv = (_ref2 = options === null || options === void 0 ? void 0 : options.env) !== null && _ref2 !== void 0 ? _ref2 : _process.env;
|
|
417
|
+
// Validate working directory exists (fail fast for configuration errors)
|
|
418
|
+
if (!_fs.existsSync(cwd)) {
|
|
419
|
+
throw new Error("Cannot start servers: working directory '".concat(cwd, "' does not exist"));
|
|
420
|
+
}
|
|
421
|
+
// Validate configuration (fail fast with clear errors)
|
|
422
|
+
var validation = (0, _validateconfigts.validateServers)(serversConfig);
|
|
423
|
+
if (!validation.valid) {
|
|
424
|
+
var _ref3;
|
|
425
|
+
var _validation_errors;
|
|
426
|
+
throw new Error("Invalid servers configuration:\n".concat((_ref3 = (_validation_errors = validation.errors) === null || _validation_errors === void 0 ? void 0 : _validation_errors.join('\n')) !== null && _ref3 !== void 0 ? _ref3 : 'Unknown validation error'));
|
|
427
|
+
}
|
|
428
|
+
// Log validation warnings (non-blocking)
|
|
429
|
+
if (validation.warnings && validation.warnings.length > 0) {
|
|
430
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
431
|
+
try {
|
|
432
|
+
for(var _iterator = validation.warnings[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
433
|
+
var warning = _step.value;
|
|
434
|
+
_loggerts.logger.warn(warning);
|
|
435
|
+
}
|
|
436
|
+
} catch (err) {
|
|
437
|
+
_didIteratorError = true;
|
|
438
|
+
_iteratorError = err;
|
|
439
|
+
} finally{
|
|
440
|
+
try {
|
|
441
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
442
|
+
_iterator.return();
|
|
443
|
+
}
|
|
444
|
+
} finally{
|
|
445
|
+
if (_didIteratorError) {
|
|
446
|
+
throw _iteratorError;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
var servers = new Map();
|
|
452
|
+
var clients = new Set();
|
|
453
|
+
var sharedStdioClients = new Map();
|
|
454
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
455
|
+
try {
|
|
456
|
+
// Start each server in the configuration
|
|
457
|
+
for(var _iterator1 = Object.entries(serversConfig)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
458
|
+
var _step_value = _sliced_to_array(_step1.value, 2), name = _step_value[0], entry = _step_value[1];
|
|
459
|
+
// Infer transport type from config
|
|
460
|
+
var transportType = inferTransportType(entry);
|
|
461
|
+
// Determine spawn behavior based on dialects
|
|
462
|
+
var spawnConfig = getSpawnConfig(entry, dialects, baseEnv);
|
|
463
|
+
// Check if we should spawn this server
|
|
464
|
+
if (!spawnConfig.shouldSpawn) {
|
|
465
|
+
// External server - just log, no spawn needed
|
|
466
|
+
if (entry.url) {
|
|
467
|
+
_loggerts.logger.info("[".concat(name, "] external ").concat(transportType, " server (url: ").concat(entry.url, ")"));
|
|
468
|
+
} else {
|
|
469
|
+
_loggerts.logger.warn("[".concat(name, "] skipping: no spawn configuration (missing start or command) and no url for external server"));
|
|
470
|
+
}
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
try {
|
|
474
|
+
// Validate spawn config
|
|
475
|
+
if (!spawnConfig.command) {
|
|
476
|
+
throw new Error('Server "'.concat(name, '" missing command field'));
|
|
477
|
+
}
|
|
478
|
+
// All servers use the same working directory (cwd from options)
|
|
479
|
+
var resolvedCwd = cwd;
|
|
480
|
+
// Start the server
|
|
481
|
+
_loggerts.logger.info("[".concat(name, "] starting ").concat(transportType, " server (").concat(spawnConfig.command, " ").concat((spawnConfig.args || []).join(' '), ")"));
|
|
482
|
+
// stdio servers need 'pipe' for MCP communication over stdin/stdout
|
|
483
|
+
// network servers use 'inherit' so we see their logs
|
|
484
|
+
var stdio = transportType === 'stdio' ? 'pipe' : 'inherit';
|
|
485
|
+
var handle = (0, _spawnserverts.spawnProcess)(_object_spread_props(_object_spread(_object_spread_props(_object_spread({
|
|
486
|
+
name: name,
|
|
487
|
+
command: spawnConfig.command
|
|
488
|
+
}, spawnConfig.args !== undefined && {
|
|
489
|
+
args: spawnConfig.args
|
|
490
|
+
}), {
|
|
491
|
+
cwd: resolvedCwd
|
|
492
|
+
}), spawnConfig.env && Object.keys(spawnConfig.env).length > 0 && {
|
|
493
|
+
env: spawnConfig.env
|
|
494
|
+
}), {
|
|
495
|
+
stdio: stdio
|
|
496
|
+
}));
|
|
497
|
+
// Add server to registry (starting is fast, readiness is lazy)
|
|
498
|
+
servers.set(name, handle);
|
|
499
|
+
_loggerts.logger.info("[".concat(name, "] started successfully"));
|
|
500
|
+
} catch (e) {
|
|
501
|
+
_loggerts.logger.info("[".concat(name, "] start ERROR: ").concat(_instanceof(e, Error) ? e.message : String(e)));
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
} catch (err) {
|
|
505
|
+
_didIteratorError1 = true;
|
|
506
|
+
_iteratorError1 = err;
|
|
507
|
+
} finally{
|
|
508
|
+
try {
|
|
509
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
510
|
+
_iterator1.return();
|
|
511
|
+
}
|
|
512
|
+
} finally{
|
|
513
|
+
if (_didIteratorError1) {
|
|
514
|
+
throw _iteratorError1;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
// Create connect function that tracks clients
|
|
519
|
+
var connect = function(name, options) {
|
|
520
|
+
return _async_to_generator(function() {
|
|
521
|
+
var serverEntry, available, transportType, entry, released, lease, registryLike, rawClient, decorated;
|
|
522
|
+
return _ts_generator(this, function(_state) {
|
|
523
|
+
switch(_state.label){
|
|
524
|
+
case 0:
|
|
525
|
+
serverEntry = serversConfig[name];
|
|
526
|
+
if (!serverEntry) {
|
|
527
|
+
available = Object.keys(serversConfig).join(', ');
|
|
528
|
+
throw new Error("Server '".concat(name, "' not found in config. Available servers: ").concat(available || 'none'));
|
|
529
|
+
}
|
|
530
|
+
transportType = inferTransportType(serverEntry);
|
|
531
|
+
if (!(transportType === 'stdio')) return [
|
|
532
|
+
3,
|
|
533
|
+
3
|
|
534
|
+
];
|
|
535
|
+
// Stdio is a single logical connection; reuse one client and lease references.
|
|
536
|
+
entry = sharedStdioClients.get(name);
|
|
537
|
+
if (!entry) {
|
|
538
|
+
entry = {
|
|
539
|
+
refs: 0
|
|
540
|
+
};
|
|
541
|
+
sharedStdioClients.set(name, entry);
|
|
542
|
+
}
|
|
543
|
+
if (!!entry.client) return [
|
|
544
|
+
3,
|
|
545
|
+
2
|
|
546
|
+
];
|
|
547
|
+
if (!entry.connecting) {
|
|
548
|
+
entry.connecting = (function() {
|
|
549
|
+
return _async_to_generator(function() {
|
|
550
|
+
var registryLike, rawClient, decorated;
|
|
551
|
+
return _ts_generator(this, function(_state) {
|
|
552
|
+
switch(_state.label){
|
|
553
|
+
case 0:
|
|
554
|
+
// Pass minimal RegistryLike object to connectMcpClient
|
|
555
|
+
registryLike = {
|
|
556
|
+
config: serversConfig,
|
|
557
|
+
servers: servers
|
|
558
|
+
};
|
|
559
|
+
return [
|
|
560
|
+
4,
|
|
561
|
+
(0, _connectclientts.connectMcpClient)(registryLike, name, options)
|
|
562
|
+
];
|
|
563
|
+
case 1:
|
|
564
|
+
rawClient = _state.sent();
|
|
565
|
+
decorated = (0, _clienthelpersts.decorateClient)(rawClient, {
|
|
566
|
+
serverName: name
|
|
567
|
+
});
|
|
568
|
+
entry.client = decorated;
|
|
569
|
+
entry.connecting = undefined;
|
|
570
|
+
return [
|
|
571
|
+
2,
|
|
572
|
+
decorated
|
|
573
|
+
];
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
})();
|
|
577
|
+
})().catch(function(error) {
|
|
578
|
+
sharedStdioClients.delete(name);
|
|
579
|
+
throw error;
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
return [
|
|
583
|
+
4,
|
|
584
|
+
entry.connecting
|
|
585
|
+
];
|
|
586
|
+
case 1:
|
|
587
|
+
_state.sent();
|
|
588
|
+
_state.label = 2;
|
|
589
|
+
case 2:
|
|
590
|
+
if (!entry.client) {
|
|
591
|
+
throw new Error("Failed to connect to stdio server '".concat(name, "'"));
|
|
592
|
+
}
|
|
593
|
+
entry.refs += 1;
|
|
594
|
+
released = false;
|
|
595
|
+
lease = new Proxy(entry.client, {
|
|
596
|
+
get: function get(target, prop) {
|
|
597
|
+
if (prop === 'close') {
|
|
598
|
+
return function() {
|
|
599
|
+
return _async_to_generator(function() {
|
|
600
|
+
return _ts_generator(this, function(_state) {
|
|
601
|
+
switch(_state.label){
|
|
602
|
+
case 0:
|
|
603
|
+
if (released) return [
|
|
604
|
+
2
|
|
605
|
+
];
|
|
606
|
+
released = true;
|
|
607
|
+
clients.delete(lease);
|
|
608
|
+
entry.refs = Math.max(0, entry.refs - 1);
|
|
609
|
+
if (!(entry.refs === 0)) return [
|
|
610
|
+
3,
|
|
611
|
+
2
|
|
612
|
+
];
|
|
613
|
+
sharedStdioClients.delete(name);
|
|
614
|
+
return [
|
|
615
|
+
4,
|
|
616
|
+
target.close()
|
|
617
|
+
];
|
|
618
|
+
case 1:
|
|
619
|
+
_state.sent();
|
|
620
|
+
_state.label = 2;
|
|
621
|
+
case 2:
|
|
622
|
+
return [
|
|
623
|
+
2
|
|
624
|
+
];
|
|
625
|
+
}
|
|
626
|
+
});
|
|
627
|
+
})();
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
var value = Reflect.get(target, prop, target);
|
|
631
|
+
if (typeof value === 'function') {
|
|
632
|
+
return value.bind(target);
|
|
633
|
+
}
|
|
634
|
+
return value;
|
|
635
|
+
}
|
|
636
|
+
});
|
|
637
|
+
clients.add(lease);
|
|
638
|
+
return [
|
|
639
|
+
2,
|
|
640
|
+
lease
|
|
641
|
+
];
|
|
642
|
+
case 3:
|
|
643
|
+
// Pass minimal RegistryLike object to connectMcpClient
|
|
644
|
+
registryLike = {
|
|
645
|
+
config: serversConfig,
|
|
646
|
+
servers: servers
|
|
647
|
+
};
|
|
648
|
+
return [
|
|
649
|
+
4,
|
|
650
|
+
(0, _connectclientts.connectMcpClient)(registryLike, name, options)
|
|
651
|
+
];
|
|
652
|
+
case 4:
|
|
653
|
+
rawClient = _state.sent();
|
|
654
|
+
decorated = (0, _clienthelpersts.decorateClient)(rawClient, {
|
|
655
|
+
serverName: name
|
|
656
|
+
});
|
|
657
|
+
clients.add(decorated);
|
|
658
|
+
return [
|
|
659
|
+
2,
|
|
660
|
+
decorated
|
|
661
|
+
];
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
})();
|
|
665
|
+
};
|
|
666
|
+
// Create close function that stops all clients and servers
|
|
667
|
+
var close = function() {
|
|
668
|
+
var signal = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 'SIGINT', opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
669
|
+
return _async_to_generator(function() {
|
|
670
|
+
var clientClosePromises, closeResults, timedOut, killedCount;
|
|
671
|
+
return _ts_generator(this, function(_state) {
|
|
672
|
+
switch(_state.label){
|
|
673
|
+
case 0:
|
|
674
|
+
_loggerts.logger.info("[registry] closing (".concat(signal, ")"));
|
|
675
|
+
// First, close all tracked clients
|
|
676
|
+
clientClosePromises = Array.from(clients).map(function(client) {
|
|
677
|
+
return _async_to_generator(function() {
|
|
678
|
+
var unused;
|
|
679
|
+
return _ts_generator(this, function(_state) {
|
|
680
|
+
switch(_state.label){
|
|
681
|
+
case 0:
|
|
682
|
+
_state.trys.push([
|
|
683
|
+
0,
|
|
684
|
+
2,
|
|
685
|
+
,
|
|
686
|
+
3
|
|
687
|
+
]);
|
|
688
|
+
return [
|
|
689
|
+
4,
|
|
690
|
+
client.close()
|
|
691
|
+
];
|
|
692
|
+
case 1:
|
|
693
|
+
_state.sent();
|
|
694
|
+
return [
|
|
695
|
+
3,
|
|
696
|
+
3
|
|
697
|
+
];
|
|
698
|
+
case 2:
|
|
699
|
+
unused = _state.sent();
|
|
700
|
+
return [
|
|
701
|
+
3,
|
|
702
|
+
3
|
|
703
|
+
];
|
|
704
|
+
case 3:
|
|
705
|
+
return [
|
|
706
|
+
2
|
|
707
|
+
];
|
|
708
|
+
}
|
|
709
|
+
});
|
|
710
|
+
})();
|
|
711
|
+
});
|
|
712
|
+
return [
|
|
713
|
+
4,
|
|
714
|
+
Promise.all(clientClosePromises)
|
|
715
|
+
];
|
|
716
|
+
case 1:
|
|
717
|
+
_state.sent();
|
|
718
|
+
clients.clear();
|
|
719
|
+
// Then close all server processes
|
|
720
|
+
if (servers.size === 0) {
|
|
721
|
+
return [
|
|
722
|
+
2,
|
|
723
|
+
{
|
|
724
|
+
timedOut: false,
|
|
725
|
+
killedCount: 0
|
|
726
|
+
}
|
|
727
|
+
];
|
|
728
|
+
}
|
|
729
|
+
return [
|
|
730
|
+
4,
|
|
731
|
+
Promise.all(Array.from(servers.values()).map(function(server) {
|
|
732
|
+
return server.close(signal, opts);
|
|
733
|
+
}))
|
|
734
|
+
];
|
|
735
|
+
case 2:
|
|
736
|
+
closeResults = _state.sent();
|
|
737
|
+
// Check if any timed out and count how many were force-killed
|
|
738
|
+
timedOut = closeResults.some(function(result) {
|
|
739
|
+
return result.timedOut;
|
|
740
|
+
});
|
|
741
|
+
killedCount = closeResults.filter(function(result) {
|
|
742
|
+
return result.killed;
|
|
743
|
+
}).length;
|
|
744
|
+
return [
|
|
745
|
+
2,
|
|
746
|
+
{
|
|
747
|
+
timedOut: timedOut,
|
|
748
|
+
killedCount: killedCount
|
|
749
|
+
}
|
|
750
|
+
];
|
|
751
|
+
}
|
|
752
|
+
});
|
|
753
|
+
})();
|
|
754
|
+
};
|
|
755
|
+
var searchFromRegistry = function(query) {
|
|
756
|
+
var _$options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
757
|
+
return _async_to_generator(function() {
|
|
758
|
+
var _options_servers, requestedServers, unknownServers, capabilityClients, failures, ensureClient, failureDetails, index;
|
|
759
|
+
return _ts_generator(this, function(_state) {
|
|
760
|
+
switch(_state.label){
|
|
761
|
+
case 0:
|
|
762
|
+
requestedServers = (_options_servers = _$options.servers) !== null && _options_servers !== void 0 ? _options_servers : Object.keys(serversConfig);
|
|
763
|
+
if (requestedServers.length === 0) {
|
|
764
|
+
throw new Error('Cannot search capabilities: registry has no configured servers');
|
|
765
|
+
}
|
|
766
|
+
unknownServers = requestedServers.filter(function(name) {
|
|
767
|
+
return !(name in serversConfig);
|
|
768
|
+
});
|
|
769
|
+
if (unknownServers.length > 0) {
|
|
770
|
+
throw new Error("Cannot search capabilities: unknown server(s) [".concat(unknownServers.join(', '), "]"));
|
|
771
|
+
}
|
|
772
|
+
capabilityClients = new Map();
|
|
773
|
+
failures = [];
|
|
774
|
+
ensureClient = function(serverName) {
|
|
775
|
+
return _async_to_generator(function() {
|
|
776
|
+
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, client;
|
|
777
|
+
return _ts_generator(this, function(_state) {
|
|
778
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
779
|
+
try {
|
|
780
|
+
for(_iterator = clients[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
781
|
+
client = _step.value;
|
|
782
|
+
if (client.serverName === serverName) {
|
|
783
|
+
return [
|
|
784
|
+
2,
|
|
785
|
+
client
|
|
786
|
+
];
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
} catch (err) {
|
|
790
|
+
_didIteratorError = true;
|
|
791
|
+
_iteratorError = err;
|
|
792
|
+
} finally{
|
|
793
|
+
try {
|
|
794
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
795
|
+
_iterator.return();
|
|
796
|
+
}
|
|
797
|
+
} finally{
|
|
798
|
+
if (_didIteratorError) {
|
|
799
|
+
throw _iteratorError;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
return [
|
|
804
|
+
2,
|
|
805
|
+
connect(serverName)
|
|
806
|
+
];
|
|
807
|
+
});
|
|
808
|
+
})();
|
|
809
|
+
};
|
|
810
|
+
return [
|
|
811
|
+
4,
|
|
812
|
+
Promise.all(requestedServers.map(function(serverName) {
|
|
813
|
+
return _async_to_generator(function() {
|
|
814
|
+
var managed, error;
|
|
815
|
+
return _ts_generator(this, function(_state) {
|
|
816
|
+
switch(_state.label){
|
|
817
|
+
case 0:
|
|
818
|
+
_state.trys.push([
|
|
819
|
+
0,
|
|
820
|
+
2,
|
|
821
|
+
,
|
|
822
|
+
3
|
|
823
|
+
]);
|
|
824
|
+
return [
|
|
825
|
+
4,
|
|
826
|
+
ensureClient(serverName)
|
|
827
|
+
];
|
|
828
|
+
case 1:
|
|
829
|
+
managed = _state.sent();
|
|
830
|
+
capabilityClients.set(serverName, managed.nativeClient);
|
|
831
|
+
return [
|
|
832
|
+
3,
|
|
833
|
+
3
|
|
834
|
+
];
|
|
835
|
+
case 2:
|
|
836
|
+
error = _state.sent();
|
|
837
|
+
failures.push({
|
|
838
|
+
server: serverName,
|
|
839
|
+
reason: _instanceof(error, Error) ? error.message : String(error)
|
|
840
|
+
});
|
|
841
|
+
return [
|
|
842
|
+
3,
|
|
843
|
+
3
|
|
844
|
+
];
|
|
845
|
+
case 3:
|
|
846
|
+
return [
|
|
847
|
+
2
|
|
848
|
+
];
|
|
849
|
+
}
|
|
850
|
+
});
|
|
851
|
+
})();
|
|
852
|
+
}))
|
|
853
|
+
];
|
|
854
|
+
case 1:
|
|
855
|
+
_state.sent();
|
|
856
|
+
if (capabilityClients.size === 0) {
|
|
857
|
+
failureDetails = failures.length > 0 ? " Connection failures: ".concat(failures.map(function(f) {
|
|
858
|
+
return "".concat(f.server, " (").concat(f.reason, ")");
|
|
859
|
+
}).join('; ')) : '';
|
|
860
|
+
throw new Error("Cannot search capabilities: unable to connect to any requested servers.".concat(failureDetails));
|
|
861
|
+
}
|
|
862
|
+
if (failures.length > 0) {
|
|
863
|
+
throw new Error("Cannot search capabilities: failed to connect to server(s) [".concat(failures.map(function(f) {
|
|
864
|
+
return f.server;
|
|
865
|
+
}).join(', '), "]. Reasons: ").concat(failures.map(function(f) {
|
|
866
|
+
return "".concat(f.server, ": ").concat(f.reason);
|
|
867
|
+
}).join('; ')));
|
|
868
|
+
}
|
|
869
|
+
return [
|
|
870
|
+
4,
|
|
871
|
+
(0, _indexts.buildCapabilityIndex)(capabilityClients)
|
|
872
|
+
];
|
|
873
|
+
case 2:
|
|
874
|
+
index = _state.sent();
|
|
875
|
+
return [
|
|
876
|
+
2,
|
|
877
|
+
(0, _indexts.searchCapabilities)(index, query, _$options)
|
|
878
|
+
];
|
|
879
|
+
}
|
|
880
|
+
});
|
|
881
|
+
})();
|
|
882
|
+
};
|
|
883
|
+
// Async dispose for `await using` pattern
|
|
884
|
+
var asyncDispose = function() {
|
|
885
|
+
return _async_to_generator(function() {
|
|
886
|
+
return _ts_generator(this, function(_state) {
|
|
887
|
+
switch(_state.label){
|
|
888
|
+
case 0:
|
|
889
|
+
return [
|
|
890
|
+
4,
|
|
891
|
+
close()
|
|
892
|
+
];
|
|
893
|
+
case 1:
|
|
894
|
+
_state.sent();
|
|
895
|
+
return [
|
|
896
|
+
2
|
|
897
|
+
];
|
|
898
|
+
}
|
|
899
|
+
});
|
|
900
|
+
})();
|
|
901
|
+
};
|
|
902
|
+
return _define_property({
|
|
903
|
+
config: serversConfig,
|
|
904
|
+
servers: servers,
|
|
905
|
+
clients: clients,
|
|
906
|
+
connect: connect,
|
|
907
|
+
close: close,
|
|
908
|
+
searchCapabilities: searchFromRegistry
|
|
909
|
+
}, Symbol.asyncDispose, asyncDispose);
|
|
910
|
+
}
|
|
911
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|