mcp-creatio 0.6.4 → 0.6.5
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/README.md +10 -0
- package/dist/server/http/mcp-handlers.d.ts.map +1 -1
- package/dist/server/http/mcp-handlers.js +8 -6
- package/dist/server/http/mcp-handlers.js.map +1 -1
- package/dist/server/mcp/server.d.ts +37 -28
- package/dist/server/mcp/server.d.ts.map +1 -1
- package/dist/server/mcp/server.js +96 -73
- package/dist/server/mcp/server.js.map +1 -1
- package/dist/server/mcp/tenant-tool-registry.d.ts +66 -0
- package/dist/server/mcp/tenant-tool-registry.d.ts.map +1 -0
- package/dist/server/mcp/tenant-tool-registry.js +113 -0
- package/dist/server/mcp/tenant-tool-registry.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -239,6 +239,16 @@ curl -sS http://localhost:3000/mcp \
|
|
|
239
239
|
> the MCP. (Injecting other credential shapes, e.g. cookie/basic per tenant, is intentionally out of
|
|
240
240
|
> scope for now.)
|
|
241
241
|
|
|
242
|
+
> **Per-tenant tool isolation.** A single MCP deployment serving many instances keeps each tenant's
|
|
243
|
+
> tool surface separate, keyed by the effective base URL (`X-Creatio-Base-Url`, else `CREATIO_BASE_URL`).
|
|
244
|
+
> Optional capabilities are **probed per tenant** and the tools they expose (DataForge, Global Search,
|
|
245
|
+
> and any dynamically discovered per-instance tools) are registered only for the tenant they were
|
|
246
|
+
> discovered on. Tenant A's tools or DataForge verdict never leak into tenant B's session, even though
|
|
247
|
+
> both share one process. The
|
|
248
|
+
> per-tenant state is pooled with idle-TTL + LRU eviction, so memory stays bounded as the number of
|
|
249
|
+
> distinct instances grows. Single-tenant modes (everything except `gateway` with an override) all map
|
|
250
|
+
> to one bucket, so their behavior is unchanged.
|
|
251
|
+
|
|
242
252
|
### `client_credentials` / `legacy`
|
|
243
253
|
|
|
244
254
|
```bash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handlers.d.ts","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM;IAIb,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-handlers.d.ts","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM;IAIb,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DzD,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB7E"}
|
|
@@ -19,6 +19,9 @@ class McpHandlers {
|
|
|
19
19
|
async handleMcpPost(req, res) {
|
|
20
20
|
const sessionId = (0, utils_1.getSessionIdFromRequest)(req);
|
|
21
21
|
const bearerUserKey = req.userKey;
|
|
22
|
+
// Gateway multi-tenant routing key — selects which tenant the session server and capability
|
|
23
|
+
// probe bind to (absent in single-tenant modes ⇒ the default tenant).
|
|
24
|
+
const baseUrlOverride = req.baseUrlOverride;
|
|
22
25
|
let transport;
|
|
23
26
|
const remoteIp = (0, utils_1.getClientIp)(req);
|
|
24
27
|
if (sessionId && this._sessionContext.hasSession(sessionId)) {
|
|
@@ -42,9 +45,9 @@ class McpHandlers {
|
|
|
42
45
|
},
|
|
43
46
|
});
|
|
44
47
|
// Each session gets its own McpServer (a single McpServer connects to one transport
|
|
45
|
-
// only). Release it when the transport closes so we
|
|
46
|
-
// late-probed tools into dead sessions.
|
|
47
|
-
const mcp = this._server.createSessionServer();
|
|
48
|
+
// only), bound to the request's tenant. Release it when the transport closes so we
|
|
49
|
+
// don't leak servers or register late-probed tools into dead sessions.
|
|
50
|
+
const mcp = this._server.createSessionServer(baseUrlOverride);
|
|
48
51
|
transport.onclose = () => {
|
|
49
52
|
this._server.releaseSessionServer(mcp);
|
|
50
53
|
if (transport?.sessionId) {
|
|
@@ -65,11 +68,10 @@ class McpHandlers {
|
|
|
65
68
|
const session = this._sessionContext.getSession(sessionId);
|
|
66
69
|
const userKey = bearerUserKey || session?.userKey;
|
|
67
70
|
const bearerToken = req.bearerToken;
|
|
68
|
-
const baseUrlOverride = req.baseUrlOverride;
|
|
69
71
|
await (0, utils_1.runWithContext)({ userKey, sessionId, bearerToken, baseUrlOverride }, async () => {
|
|
70
|
-
// Kick the
|
|
72
|
+
// Kick the per-tenant capability probe from inside the request context so its Creatio
|
|
71
73
|
// calls carry this caller's identity (broker mode has no user otherwise). Non-blocking.
|
|
72
|
-
this._server.ensureCapabilitiesProbed();
|
|
74
|
+
this._server.ensureCapabilitiesProbed(baseUrlOverride);
|
|
73
75
|
return transport.handleRequest(req, res, req.body);
|
|
74
76
|
});
|
|
75
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AAEzC,0FAAmG;AACnG,iEAAyE;AAEzE,oDAA4B;AAC5B,6CAAgD;AAChD,uCAKqB;AAKrB,MAAa,WAAW;IACN,eAAe,GAAG,yBAAc,CAAC,QAAQ,CAAC;IAC1C,OAAO,CAAS;IAEjC,YAAY,MAAc;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,GAAa;QACrD,MAAM,SAAS,GAAG,IAAA,+BAAuB,EAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAI,GAAW,CAAC,OAAO,CAAC;QAC3C,IAAI,SAAoD,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;QAClC,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3D,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;YAC/B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBACpD,aAAG,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,SAAS,IAAI,IAAA,8BAAmB,EAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,SAAS,GAAG,IAAI,iDAA6B,CAAC;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAA,wBAAU,GAAE;gBACtC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC7B,IAAI,SAAS,EAAE,CAAC;wBACf,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CACjD,GAAG,EACH,aAAa,EACb,QAAQ,CACR,CAAC;wBACF,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBACzD,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;wBAC9C,aAAG,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACF,CAAC;aACD,CAAC,CAAC;YACH,oFAAoF;YACpF,mFAAmF;YACnF,
|
|
1
|
+
{"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,39 +13,46 @@ export declare class Server {
|
|
|
13
13
|
private readonly _engines;
|
|
14
14
|
private readonly _descriptors;
|
|
15
15
|
private readonly _handlers;
|
|
16
|
-
private readonly
|
|
17
|
-
private _probeComplete;
|
|
18
|
-
private _probeInFlight;
|
|
19
|
-
private _readonly;
|
|
20
|
-
private _serverName;
|
|
21
|
-
private _serverVersion;
|
|
16
|
+
private readonly _registry;
|
|
22
17
|
private readonly _dataForge;
|
|
23
18
|
private readonly _dataForgePreparer;
|
|
24
19
|
private readonly _globalSearchPreparer;
|
|
25
20
|
private readonly _publishedToolsPreparer;
|
|
26
21
|
private readonly _preparers;
|
|
27
|
-
private
|
|
28
|
-
private
|
|
22
|
+
private _readonly;
|
|
23
|
+
private _serverName;
|
|
24
|
+
private _serverVersion;
|
|
29
25
|
get authProvider(): ICreatioAuthProvider;
|
|
30
26
|
constructor(engines: CreatioEngineManager, config: ServerConfig);
|
|
27
|
+
/** Register the static, tenant-agnostic surface (core/mutating tools + prompts) into a session. */
|
|
31
28
|
private _registerAllInto;
|
|
32
|
-
|
|
29
|
+
/** Record a static tool in the shared maps. Registered into each session by {@link
|
|
30
|
+
* _registerAllInto}; called only at construction, before any session exists. */
|
|
31
|
+
private _registerStaticTool;
|
|
33
32
|
private _normalizeToToolHandler;
|
|
34
33
|
private _registerAsTool;
|
|
35
34
|
private _registerPrompts;
|
|
36
|
-
/**
|
|
35
|
+
/** The tenant bucket key for a request's base-URL override: the normalized override (gateway
|
|
36
|
+
* multi-tenant) or {@link DEFAULT_TENANT_KEY} for every single-tenant mode. Mirrors how the
|
|
37
|
+
* HTTP client resolves the effective base URL, so tools and caches key on the same tenant. */
|
|
38
|
+
private _tenantKey;
|
|
39
|
+
/** The current request's tenant state (resolved from the per-request base-URL override). Falls
|
|
40
|
+
* back to the default tenant when there is no active request context (e.g. stdio, tests). */
|
|
41
|
+
private _currentTenantState;
|
|
42
|
+
/** Adapter exposing handler registration to {@link ToolPreparer}s — scoped to ONE tenant: a
|
|
43
|
+
* discovered tool is recorded in that tenant's state and pushed into its live sessions only. */
|
|
37
44
|
private _toolRegistrar;
|
|
38
45
|
/**
|
|
39
|
-
* Probe each optional-capability preparer that has no verdict yet and let it
|
|
40
|
-
* when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
41
|
-
* never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
42
|
-
* so a later authenticated connect can retry it — which also makes registration
|
|
43
|
-
* already-enabled preparer is skipped, so its tools are never registered twice).
|
|
44
|
-
* {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
45
|
-
* identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
46
|
+
* Probe each optional-capability preparer that has no verdict yet FOR THIS TENANT and let it
|
|
47
|
+
* register its tools when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
48
|
+
* verdict and is never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
49
|
+
* records nothing so a later authenticated connect can retry it — which also makes registration
|
|
50
|
+
* idempotent (an already-enabled preparer is skipped, so its tools are never registered twice).
|
|
51
|
+
* Invoked from {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
52
|
+
* caller's identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
46
53
|
*/
|
|
47
54
|
private _prepareTools;
|
|
48
|
-
/** Whether DataForge was probed as enabled
|
|
55
|
+
/** Whether DataForge was probed as enabled for the given tenant (defaults to the current one). */
|
|
49
56
|
private _isDataForgeReady;
|
|
50
57
|
/** Compile the `read` tool args into a neutral {@link ReadQuery}: structured `filters`
|
|
51
58
|
* become a {@link FilterNode}; a raw `$filter` string and `expand` are carried as
|
|
@@ -65,26 +72,28 @@ export declare class Server {
|
|
|
65
72
|
private _clientToolDefs;
|
|
66
73
|
private _registerClientTools;
|
|
67
74
|
/**
|
|
68
|
-
* Build a fresh {@link McpServer} for one transport/session,
|
|
69
|
-
*
|
|
70
|
-
* late-discovered tools into it. Each session MUST get its own
|
|
71
|
-
* connects to only one transport).
|
|
75
|
+
* Build a fresh {@link McpServer} for one transport/session, registering the static surface plus
|
|
76
|
+
* the calling tenant's already-discovered dynamic tools, and track it under that tenant so the
|
|
77
|
+
* capability probe can later push late-discovered tools into it. Each session MUST get its own
|
|
78
|
+
* server (a single McpServer connects to only one transport). `baseUrlOverride` (gateway
|
|
79
|
+
* `X-Creatio-Base-Url`) selects the tenant; absent ⇒ the single default tenant.
|
|
72
80
|
*/
|
|
73
|
-
createSessionServer(): McpServer;
|
|
81
|
+
createSessionServer(baseUrlOverride?: string): McpServer;
|
|
74
82
|
/**
|
|
75
|
-
* Probe optional capabilities once per
|
|
83
|
+
* Probe optional capabilities once per tenant, WITHOUT blocking the MCP handshake. These do
|
|
76
84
|
* network I/O (DataForge/Global Search probes, and the publishing app's tools/list, which can
|
|
77
85
|
* be slow) — awaiting would delay connect past the client's init timeout. Discovered tools
|
|
78
|
-
* register into
|
|
79
|
-
* notifications/tools/list_changed) and into the
|
|
86
|
+
* register into the tenant's live session servers as they resolve (the SDK emits
|
|
87
|
+
* notifications/tools/list_changed) and into the tenant state for its future sessions.
|
|
80
88
|
*
|
|
81
89
|
* MUST be called from within the per-request context ({@link runWithContext}) so the probe's
|
|
82
90
|
* Creatio calls carry the caller's identity/token — otherwise broker mode resolves no user.
|
|
91
|
+
* `baseUrlOverride` selects the tenant; absent ⇒ the single default tenant.
|
|
83
92
|
*/
|
|
84
|
-
ensureCapabilitiesProbed(): void;
|
|
93
|
+
ensureCapabilitiesProbed(baseUrlOverride?: string): void;
|
|
85
94
|
/** Untrack and close one session's server (call when its transport closes). */
|
|
86
95
|
releaseSessionServer(mcp: McpServer): void;
|
|
87
|
-
/** Close every live session server (process shutdown). */
|
|
96
|
+
/** Close every live session server across all tenants (process shutdown). */
|
|
88
97
|
stopAll(): Promise<void>;
|
|
89
98
|
}
|
|
90
99
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAGpB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAGpB,MAAM,eAAe,CAAC;AAiEvB,MAAM,WAAW,YAAY;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;0FACsF;IACtF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAWD,qBAAa,MAAM;IAGlB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IAEzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAKhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAM5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAI/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA+B;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAW;IAEjC,IAAW,YAAY,IAAI,oBAAoB,CAE9C;gBAEW,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY;IAuB/D,mGAAmG;IACnG,OAAO,CAAC,gBAAgB;IAOxB;qFACiF;IACjF,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,uBAAuB;IAqC/B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,gBAAgB;IAmBxB;;mGAE+F;IAC/F,OAAO,CAAC,UAAU;IAKlB;kGAC8F;IAC9F,OAAO,CAAC,mBAAmB;IAI3B;qGACiG;IACjG,OAAO,CAAC,cAAc;IActB;;;;;;;;OAQG;YACW,aAAa;IAwB3B,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAIzB;;;+FAG2F;YAC7E,KAAK;IAyBnB;;iFAE6E;YAC/D,eAAe;IAY7B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA8IvB,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;OAMG;IACI,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS;IAe/D;;;;;;;;;;OAUG;IACI,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB/D,+EAA+E;IACxE,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IASjD,6EAA6E;IAChE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAWrC"}
|
|
@@ -16,6 +16,7 @@ const filters_1 = require("./filters");
|
|
|
16
16
|
const globalsearch_client_1 = require("./globalsearch/globalsearch-client");
|
|
17
17
|
const globalsearch_tool_preparer_1 = require("./globalsearch/globalsearch-tool-preparer");
|
|
18
18
|
const prompts_data_1 = require("./prompts-data");
|
|
19
|
+
const tenant_tool_registry_1 = require("./tenant-tool-registry");
|
|
19
20
|
const tools_data_1 = require("./tools-data");
|
|
20
21
|
/** Default page size for `read` when the caller omits `top`, so we never dump an
|
|
21
22
|
* unbounded result set into the model. Explicit `top` (incl. `0` for count-only)
|
|
@@ -26,39 +27,36 @@ class Server {
|
|
|
26
27
|
// persistently-failing capability doesn't fire its network probe on every new session connect.
|
|
27
28
|
static PROBE_RETRY_COOLDOWN_MS = 30_000;
|
|
28
29
|
_engines;
|
|
30
|
+
// Static tool surface, shared across every session and tenant: these handlers are user-agnostic
|
|
31
|
+
// (they read identity from the per-request context at call time) and identical for every Creatio
|
|
32
|
+
// instance. Each new session server gets the full set; capability/dynamic tools are NOT here —
|
|
33
|
+
// they live per-tenant in `_registry` so one tenant's verdict/tools never leak to another.
|
|
29
34
|
_descriptors = new Map();
|
|
30
35
|
_handlers = new Map();
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// against concurrent connects each kicking a probe.
|
|
41
|
-
_probeComplete = false;
|
|
42
|
-
_probeInFlight = false;
|
|
43
|
-
_readonly = false;
|
|
44
|
-
_serverName = version_1.NAME;
|
|
45
|
-
_serverVersion = version_1.VERSION;
|
|
46
|
-
// DataForge access layer + optional-capability preparers. `_capabilities`
|
|
47
|
-
// records each preparer's startup verdict so core tools (describe-entity)
|
|
48
|
-
// can route through a capability only when it is actually enabled.
|
|
36
|
+
// Per-tenant capability + dynamic-tool + live-session state, keyed by effective Creatio base URL.
|
|
37
|
+
// One McpServer per live transport/session (a single McpServer connects to only one transport,
|
|
38
|
+
// so a shared singleton would reject a 2nd concurrent connect() with "Already connected"); the
|
|
39
|
+
// registry tracks those session servers per tenant so a late-probed tool is pushed only into the
|
|
40
|
+
// sessions of the tenant it was discovered for.
|
|
41
|
+
_registry;
|
|
42
|
+
// DataForge access layer + optional-capability preparers. The probe verdict is recorded PER
|
|
43
|
+
// TENANT (in `_registry`) so core tools (describe-entity) route through a capability only when it
|
|
44
|
+
// is actually enabled for the calling tenant's instance.
|
|
49
45
|
_dataForge;
|
|
50
46
|
_dataForgePreparer;
|
|
51
47
|
_globalSearchPreparer;
|
|
52
48
|
_publishedToolsPreparer;
|
|
53
49
|
_preparers;
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
_readonly = false;
|
|
51
|
+
_serverName = version_1.NAME;
|
|
52
|
+
_serverVersion = version_1.VERSION;
|
|
56
53
|
get authProvider() {
|
|
57
54
|
return this._engines.authProvider;
|
|
58
55
|
}
|
|
59
56
|
constructor(engines, config) {
|
|
60
57
|
this._engines = engines;
|
|
61
58
|
this._readonly = config.readonlyMode ?? false;
|
|
59
|
+
this._registry = new tenant_tool_registry_1.TenantToolRegistry();
|
|
62
60
|
this._dataForge = new dataforge_client_1.DataForgeClient(engines.configuration, engines.sysSettings);
|
|
63
61
|
this._dataForgePreparer = new dataforge_tool_preparer_1.DataForgeToolPreparer(this._dataForge);
|
|
64
62
|
this._globalSearchPreparer = new globalsearch_tool_preparer_1.GlobalSearchToolPreparer(new globalsearch_client_1.GlobalSearchClient(engines.configuration, engines.sysSettings));
|
|
@@ -72,21 +70,18 @@ class Server {
|
|
|
72
70
|
];
|
|
73
71
|
this._registerClientTools();
|
|
74
72
|
}
|
|
73
|
+
/** Register the static, tenant-agnostic surface (core/mutating tools + prompts) into a session. */
|
|
75
74
|
_registerAllInto(mcp) {
|
|
76
75
|
for (const [name, handler] of this._handlers.entries()) {
|
|
77
|
-
this._registerAsTool(mcp, name, handler);
|
|
76
|
+
this._registerAsTool(mcp, name, this._descriptors.get(name), handler);
|
|
78
77
|
}
|
|
79
78
|
this._registerPrompts(mcp);
|
|
80
79
|
}
|
|
81
|
-
|
|
80
|
+
/** Record a static tool in the shared maps. Registered into each session by {@link
|
|
81
|
+
* _registerAllInto}; called only at construction, before any session exists. */
|
|
82
|
+
_registerStaticTool(name, descriptor, handler) {
|
|
82
83
|
this._handlers.set(name, handler);
|
|
83
84
|
this._descriptors.set(name, descriptor);
|
|
84
|
-
// Late registration (the capability probe runs after sessions may already be connected):
|
|
85
|
-
// push the tool into every live session server so already-connected clients see it — the
|
|
86
|
-
// SDK emits notifications/tools/list_changed. New sessions pick it up from the maps above.
|
|
87
|
-
for (const mcp of this._sessionServers) {
|
|
88
|
-
this._registerAsTool(mcp, name, handler);
|
|
89
|
-
}
|
|
90
85
|
}
|
|
91
86
|
_normalizeToToolHandler(handler) {
|
|
92
87
|
return async (args) => {
|
|
@@ -120,15 +115,15 @@ class Server {
|
|
|
120
115
|
};
|
|
121
116
|
};
|
|
122
117
|
}
|
|
123
|
-
_registerAsTool(mcp, name, handler) {
|
|
118
|
+
_registerAsTool(mcp, name, descriptor, handler) {
|
|
124
119
|
try {
|
|
125
|
-
const
|
|
120
|
+
const toolDescriptor = descriptor ||
|
|
126
121
|
{
|
|
127
122
|
title: name,
|
|
128
123
|
description: `Tool ${name}`,
|
|
129
124
|
inputSchema: {},
|
|
130
125
|
};
|
|
131
|
-
mcp.registerTool(name,
|
|
126
|
+
mcp.registerTool(name, toolDescriptor, async (args) => {
|
|
132
127
|
return this._normalizeToToolHandler(handler)(args);
|
|
133
128
|
});
|
|
134
129
|
log_1.default.info('mcp.tool.register', { tool: name });
|
|
@@ -152,48 +147,69 @@ class Server {
|
|
|
152
147
|
log_1.default.warn('mcp.prompts.register.failed', { error: String(err) });
|
|
153
148
|
}
|
|
154
149
|
}
|
|
155
|
-
/**
|
|
156
|
-
|
|
150
|
+
/** The tenant bucket key for a request's base-URL override: the normalized override (gateway
|
|
151
|
+
* multi-tenant) or {@link DEFAULT_TENANT_KEY} for every single-tenant mode. Mirrors how the
|
|
152
|
+
* HTTP client resolves the effective base URL, so tools and caches key on the same tenant. */
|
|
153
|
+
_tenantKey(baseUrlOverride) {
|
|
154
|
+
const trimmed = baseUrlOverride?.trim();
|
|
155
|
+
return trimmed ? trimmed.replace(/\/$/, '') : tenant_tool_registry_1.DEFAULT_TENANT_KEY;
|
|
156
|
+
}
|
|
157
|
+
/** The current request's tenant state (resolved from the per-request base-URL override). Falls
|
|
158
|
+
* back to the default tenant when there is no active request context (e.g. stdio, tests). */
|
|
159
|
+
_currentTenantState() {
|
|
160
|
+
return this._registry.getState(this._tenantKey((0, utils_1.getBaseUrlOverride)()));
|
|
161
|
+
}
|
|
162
|
+
/** Adapter exposing handler registration to {@link ToolPreparer}s — scoped to ONE tenant: a
|
|
163
|
+
* discovered tool is recorded in that tenant's state and pushed into its live sessions only. */
|
|
164
|
+
_toolRegistrar(state) {
|
|
157
165
|
return {
|
|
158
|
-
register: (name, descriptor, handler) =>
|
|
166
|
+
register: (name, descriptor, handler) => {
|
|
167
|
+
state.dynamicTools.set(name, { descriptor, handler });
|
|
168
|
+
// Late registration (the probe runs after sessions may already be connected): push
|
|
169
|
+
// the tool into the tenant's live session servers so connected clients see it — the
|
|
170
|
+
// SDK emits notifications/tools/list_changed. New sessions pick it up on connect.
|
|
171
|
+
for (const mcp of state.sessionServers) {
|
|
172
|
+
this._registerAsTool(mcp, name, descriptor, handler);
|
|
173
|
+
}
|
|
174
|
+
},
|
|
159
175
|
};
|
|
160
176
|
}
|
|
161
177
|
/**
|
|
162
|
-
* Probe each optional-capability preparer that has no verdict yet and let it
|
|
163
|
-
* when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
164
|
-
* never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
165
|
-
* so a later authenticated connect can retry it — which also makes registration
|
|
166
|
-
* already-enabled preparer is skipped, so its tools are never registered twice).
|
|
167
|
-
* {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
168
|
-
* identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
178
|
+
* Probe each optional-capability preparer that has no verdict yet FOR THIS TENANT and let it
|
|
179
|
+
* register its tools when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
180
|
+
* verdict and is never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
181
|
+
* records nothing so a later authenticated connect can retry it — which also makes registration
|
|
182
|
+
* idempotent (an already-enabled preparer is skipped, so its tools are never registered twice).
|
|
183
|
+
* Invoked from {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
184
|
+
* caller's identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
169
185
|
*/
|
|
170
|
-
async _prepareTools() {
|
|
171
|
-
const registrar = this._toolRegistrar();
|
|
186
|
+
async _prepareTools(state) {
|
|
187
|
+
const registrar = this._toolRegistrar(state);
|
|
172
188
|
const now = Date.now();
|
|
173
189
|
for (const preparer of this._preparers) {
|
|
174
|
-
if (
|
|
190
|
+
if (state.capabilities.has(preparer.name)) {
|
|
175
191
|
continue; // definitive verdict already recorded — don't re-probe or re-register
|
|
176
192
|
}
|
|
177
|
-
if (now < (
|
|
193
|
+
if (now < (state.cooldownUntil.get(preparer.name) ?? 0)) {
|
|
178
194
|
continue; // recently failed — back off rather than re-probe on every connect
|
|
179
195
|
}
|
|
180
196
|
try {
|
|
181
197
|
const enabled = await preparer.prepare(registrar);
|
|
182
|
-
|
|
198
|
+
state.capabilities.set(preparer.name, enabled);
|
|
183
199
|
log_1.default.info('mcp.prepare', { preparer: preparer.name, enabled });
|
|
184
200
|
}
|
|
185
201
|
catch (err) {
|
|
186
202
|
// No verdict — leave unrecorded so a later authenticated connect retries, but not
|
|
187
203
|
// before the cooldown elapses.
|
|
188
|
-
|
|
204
|
+
state.cooldownUntil.set(preparer.name, Date.now() + Server.PROBE_RETRY_COOLDOWN_MS);
|
|
189
205
|
log_1.default.warn('mcp.prepare.failed', { preparer: preparer.name, error: String(err) });
|
|
190
206
|
}
|
|
191
207
|
}
|
|
192
|
-
return this._preparers.every((p) =>
|
|
208
|
+
return this._preparers.every((p) => state.capabilities.has(p.name));
|
|
193
209
|
}
|
|
194
|
-
/** Whether DataForge was probed as enabled
|
|
195
|
-
_isDataForgeReady() {
|
|
196
|
-
return
|
|
210
|
+
/** Whether DataForge was probed as enabled for the given tenant (defaults to the current one). */
|
|
211
|
+
_isDataForgeReady(state = this._currentTenantState()) {
|
|
212
|
+
return state.capabilities.get(this._dataForgePreparer.name) === true;
|
|
197
213
|
}
|
|
198
214
|
/** Compile the `read` tool args into a neutral {@link ReadQuery}: structured `filters`
|
|
199
215
|
* become a {@link FilterNode}; a raw `$filter` string and `expand` are carried as
|
|
@@ -227,7 +243,7 @@ class Server {
|
|
|
227
243
|
* CRUD backend's schema on a per-call miss. The `source` discriminator is part of the
|
|
228
244
|
* public tool contract and reflects where the schema actually came from. */
|
|
229
245
|
async _describeEntity(entitySet) {
|
|
230
|
-
if (this._isDataForgeReady()) {
|
|
246
|
+
if (this._isDataForgeReady(this._currentTenantState())) {
|
|
231
247
|
const dataForge = await this._dataForge.getColumnsOrNull(entitySet);
|
|
232
248
|
if (dataForge !== null) {
|
|
233
249
|
return { source: 'dataforge', entitySet, dataForge };
|
|
@@ -381,52 +397,59 @@ class Server {
|
|
|
381
397
|
const { core, mutating } = this._clientToolDefs();
|
|
382
398
|
const defs = this._readonly ? core : [...core, ...mutating];
|
|
383
399
|
for (const def of defs) {
|
|
384
|
-
this.
|
|
400
|
+
this._registerStaticTool(def.name, def.descriptor, (0, utils_1.withValidation)(def.input, def.run));
|
|
385
401
|
}
|
|
386
402
|
}
|
|
387
403
|
/**
|
|
388
|
-
* Build a fresh {@link McpServer} for one transport/session,
|
|
389
|
-
*
|
|
390
|
-
* late-discovered tools into it. Each session MUST get its own
|
|
391
|
-
* connects to only one transport).
|
|
404
|
+
* Build a fresh {@link McpServer} for one transport/session, registering the static surface plus
|
|
405
|
+
* the calling tenant's already-discovered dynamic tools, and track it under that tenant so the
|
|
406
|
+
* capability probe can later push late-discovered tools into it. Each session MUST get its own
|
|
407
|
+
* server (a single McpServer connects to only one transport). `baseUrlOverride` (gateway
|
|
408
|
+
* `X-Creatio-Base-Url`) selects the tenant; absent ⇒ the single default tenant.
|
|
392
409
|
*/
|
|
393
|
-
createSessionServer() {
|
|
410
|
+
createSessionServer(baseUrlOverride) {
|
|
394
411
|
const mcp = new mcp_js_1.McpServer({ name: this._serverName, version: this._serverVersion });
|
|
395
412
|
this._registerAllInto(mcp);
|
|
396
|
-
this.
|
|
413
|
+
const state = this._registry.getState(this._tenantKey(baseUrlOverride));
|
|
414
|
+
for (const [name, tool] of state.dynamicTools) {
|
|
415
|
+
this._registerAsTool(mcp, name, tool.descriptor, tool.handler);
|
|
416
|
+
}
|
|
417
|
+
state.sessionServers.add(mcp);
|
|
397
418
|
log_1.default.serverStart(this._serverName, this._serverVersion, {
|
|
398
|
-
tools:
|
|
419
|
+
tools: [...this._handlers.keys(), ...state.dynamicTools.keys()],
|
|
399
420
|
prompts: prompts_data_1.ALL_PROMPTS.length,
|
|
400
421
|
});
|
|
401
422
|
return mcp;
|
|
402
423
|
}
|
|
403
424
|
/**
|
|
404
|
-
* Probe optional capabilities once per
|
|
425
|
+
* Probe optional capabilities once per tenant, WITHOUT blocking the MCP handshake. These do
|
|
405
426
|
* network I/O (DataForge/Global Search probes, and the publishing app's tools/list, which can
|
|
406
427
|
* be slow) — awaiting would delay connect past the client's init timeout. Discovered tools
|
|
407
|
-
* register into
|
|
408
|
-
* notifications/tools/list_changed) and into the
|
|
428
|
+
* register into the tenant's live session servers as they resolve (the SDK emits
|
|
429
|
+
* notifications/tools/list_changed) and into the tenant state for its future sessions.
|
|
409
430
|
*
|
|
410
431
|
* MUST be called from within the per-request context ({@link runWithContext}) so the probe's
|
|
411
432
|
* Creatio calls carry the caller's identity/token — otherwise broker mode resolves no user.
|
|
433
|
+
* `baseUrlOverride` selects the tenant; absent ⇒ the single default tenant.
|
|
412
434
|
*/
|
|
413
|
-
ensureCapabilitiesProbed() {
|
|
414
|
-
|
|
435
|
+
ensureCapabilitiesProbed(baseUrlOverride) {
|
|
436
|
+
const state = this._registry.getState(this._tenantKey(baseUrlOverride));
|
|
437
|
+
if (state.probeComplete || state.probeInFlight) {
|
|
415
438
|
return;
|
|
416
439
|
}
|
|
417
|
-
|
|
418
|
-
void this._prepareTools()
|
|
440
|
+
state.probeInFlight = true;
|
|
441
|
+
void this._prepareTools(state)
|
|
419
442
|
.then((complete) => {
|
|
420
|
-
|
|
443
|
+
state.probeComplete = complete;
|
|
421
444
|
})
|
|
422
445
|
.catch((err) => log_1.default.warn('mcp.prepare.error', { error: String(err) }))
|
|
423
446
|
.finally(() => {
|
|
424
|
-
|
|
447
|
+
state.probeInFlight = false;
|
|
425
448
|
});
|
|
426
449
|
}
|
|
427
450
|
/** Untrack and close one session's server (call when its transport closes). */
|
|
428
451
|
releaseSessionServer(mcp) {
|
|
429
|
-
this.
|
|
452
|
+
this._registry.findBySession(mcp)?.sessionServers.delete(mcp);
|
|
430
453
|
try {
|
|
431
454
|
mcp.close();
|
|
432
455
|
}
|
|
@@ -434,9 +457,9 @@ class Server {
|
|
|
434
457
|
log_1.default.warn('mcp.stop.failed', { error: String(err) });
|
|
435
458
|
}
|
|
436
459
|
}
|
|
437
|
-
/** Close every live session server (process shutdown). */
|
|
460
|
+
/** Close every live session server across all tenants (process shutdown). */
|
|
438
461
|
async stopAll() {
|
|
439
|
-
for (const mcp of this.
|
|
462
|
+
for (const mcp of this._registry.allSessionServers()) {
|
|
440
463
|
try {
|
|
441
464
|
mcp.close();
|
|
442
465
|
}
|
|
@@ -444,7 +467,7 @@ class Server {
|
|
|
444
467
|
log_1.default.warn('mcp.stop.failed', { error: String(err) });
|
|
445
468
|
}
|
|
446
469
|
}
|
|
447
|
-
this.
|
|
470
|
+
this._registry.clear();
|
|
448
471
|
log_1.default.serverStop(this._serverName, this._serverVersion);
|
|
449
472
|
}
|
|
450
473
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAoE;AAQpE,oDAA4B;AAC5B,uCAAkF;AAClF,2CAA8C;AAE9C,4DAAiE;AACjE,0EAA8E;AAC9E,mEAA+D;AAC/D,iFAA4E;AAC5E,uCAA0D;AAC1D,4EAAwE;AACxE,0FAAqF;AACrF,iDAA6C;AAE7C,6CAqCsB;AAEtB;;yDAEyD;AACzD,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAoB5B,MAAa,MAAM;IAClB,6FAA6F;IAC7F,+FAA+F;IACvF,MAAM,CAAU,uBAAuB,GAAG,MAAM,CAAC;IAExC,QAAQ,CAAuB;IAC/B,YAAY,GAAG,IAAI,GAAG,EAAe,CAAC;IACtC,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5D,4FAA4F;IAC5F,0FAA0F;IAC1F,4FAA4F;IAC5F,+FAA+F;IAC9E,eAAe,GAAG,IAAI,GAAG,EAAa,CAAC;IACxD,sFAAsF;IACtF,8FAA8F;IAC9F,6FAA6F;IAC7F,+FAA+F;IAC/F,oDAAoD;IAC5C,cAAc,GAAG,KAAK,CAAC;IACvB,cAAc,GAAG,KAAK,CAAC;IACvB,SAAS,GAAG,KAAK,CAAC;IAClB,WAAW,GAAG,cAAI,CAAC;IACnB,cAAc,GAAG,iBAAO,CAAC;IACjC,0EAA0E;IAC1E,0EAA0E;IAC1E,mEAAmE;IAClD,UAAU,CAAkB;IAC5B,kBAAkB,CAAwB;IAC1C,qBAAqB,CAA2B;IAChD,uBAAuB,CAA+B;IACtD,UAAU,CAAiB;IAC3B,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjE,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,YAAY,OAA6B,EAAE,MAAoB;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,kCAAe,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAClF,IAAI,CAAC,kBAAkB,GAAG,IAAI,+CAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,qBAAqB,GAAG,IAAI,qDAAwB,CACxD,IAAI,wCAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAClE,CAAC;QACF,IAAI,CAAC,uBAAuB,GAAG,IAAI,oDAA4B,CAC9D,IAAI,uCAAsB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAC/D,IAAA,eAAO,EAAC,oCAAoC,EAAE,KAAK,CAAC,CACpD,CAAC;QACF,qFAAqF;QACrF,iEAAiE;QACjE,IAAI,CAAC,UAAU,GAAG;YACjB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7D,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnE,IAAI,CAAC,uBAAuB;SAC5B,CAAC;QACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC7B,CAAC;IAEO,gBAAgB,CAAC,GAAc;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,8BAA8B,CAAC,IAAY,EAAE,UAAe,EAAE,OAAoB;QACzF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxC,yFAAyF;QACzF,yFAAyF;QACzF,2FAA2F;QAC3F,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;IAEO,uBAAuB,CAAC,OAAoB;QACnD,OAAO,KAAK,EAAE,IAAS,EAAE,EAAE;YAC1B,sFAAsF;YACtF,uFAAuF;YACvF,qFAAqF;YACrF,6EAA6E;YAC7E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACzD,MAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,oFAAoF;YACpF,kFAAkF;YAClF,6EAA6E;YAC7E,4EAA4E;YAC5E,IACC,MAAM;gBACN,OAAO,MAAM,KAAK,QAAQ;gBAC1B,KAAK,CAAC,OAAO,CAAE,MAAgC,CAAC,OAAO,CAAC,EACvD,CAAC;gBACF,OAAO,MAAM,CAAC;YACf,CAAC;YACD,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,gFAAgF;wBAChF,oEAAoE;wBACpE,+EAA+E;wBAC/E,+BAA+B;wBAC/B,IAAI,EAAE,IAAA,qBAAa,EAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;qBACjF;iBACD;aACD,CAAC;QACH,CAAC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,GAAc,EAAE,IAAY,EAAE,OAAoB;QACzE,IAAI,CAAC;YACJ,MAAM,UAAU,GACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC1B;oBACA,KAAK,EAAE,IAAI;oBACX,WAAW,EAAE,QAAQ,IAAI,EAAE;oBAC3B,WAAW,EAAE,EAAE;iBACP,CAAC;YACX,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;gBACtD,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,aAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;IAEO,gBAAgB,CAAC,GAAc;QACtC,IAAI,CAAC;YACJ,KAAK,MAAM,MAAM,IAAI,0BAAW,EAAE,CAAC;gBAClC,GAAG,CAAC,cAAc,CACjB,MAAM,CAAC,IAAI,EACX;oBACC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC7B,EACD,MAAM,CAAC,QAAQ,CACf,CAAC;gBACF,aAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAED,sEAAsE;IAC9D,cAAc;QACrB,OAAO;YACN,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CACvC,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;SAC/D,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,aAAa;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,sEAAsE;YACjF,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC9D,SAAS,CAAC,mEAAmE;YAC9E,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,aAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,kFAAkF;gBAClF,+BAA+B;gBAC/B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC3B,QAAQ,CAAC,IAAI,EACb,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,uBAAuB,CAC3C,CAAC;gBACF,aAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,0DAA0D;IAClD,iBAAiB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACtE,CAAC;IAED;;;+FAG2F;IACnF,KAAK,CAAC,KAAK,CAAC,IAAS;QAC5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACpF,MAAM,KAAK,GAA8C,EAAE,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,GAAc;YACxB,MAAM;YACN,GAAG,EAAE,GAAG,IAAI,gBAAgB;YAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACjF,CAAC;IAED;;iFAE6E;IACrE,KAAK,CAAC,eAAe,CAAC,SAAiB;QAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;YACtD,CAAC;QACF,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3F,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACK,eAAe;QACtB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,GACjF,IAAI,CAAC,QAAQ,CAAC;QACf,MAAM,IAAI,GAAoB;YAC7B;gBACC,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,yCAA4B;gBACxC,KAAK,EAAE,oCAAuB;gBAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;aACpC;YACD;gBACC,IAAI,EAAE,eAAe;gBACrB,UAAU,EAAE,mCAAsB;gBAClC,KAAK,EAAE,8BAAiB;gBACxB,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3D;YACD;gBACC,IAAI,EAAE,iBAAiB;gBACvB,UAAU,EAAE,qCAAwB;gBACpC,KAAK,EAAE,gCAAmB;gBAC1B,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;aACvD;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,IAAA,gCAAmB,EAAC,IAAI,CAAC,YAAY,CAAC;gBAClD,KAAK,EAAE,IAAA,2BAAc,EAAC,IAAI,CAAC,YAAY,CAAC;gBACxC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;aAC/B;YACD;gBACC,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,uCAA0B;gBACtC,KAAK,EAAE,kCAAqB;gBAC5B,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC;aACtE;SACD,CAAC;QACF,MAAM,QAAQ,GAAoB;YACjC;gBACC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,6BAAgB;gBAC5B,KAAK,EAAE,wBAAW;gBAClB,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACxD;YACD;gBACC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,6BAAgB;gBAC5B,KAAK,EAAE,wBAAW;gBAClB,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAChE;YACD;gBACC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,6BAAgB;gBAC5B,KAAK,EAAE,wBAAW;gBAClB,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aACpD;YACD;gBACC,IAAI,EAAE,iBAAiB;gBACvB,UAAU,EAAE,qCAAwB;gBACpC,KAAK,EAAE,gCAAmB;gBAC1B,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACpC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;aAC/D;YACD;gBACC,IAAI,EAAE,wBAAwB;gBAC9B,UAAU,EAAE,0CAA6B;gBACzC,KAAK,EAAE,qCAAwB;gBAC/B,GAAG,EAAE,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC;aACxE;YACD;gBACC,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,uCAA0B;gBACtC,KAAK,EAAE,kCAAqB;gBAC5B,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CACrC,WAAW,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;aACxD;YACD;gBACC,IAAI,EAAE,+BAA+B;gBACrC,UAAU,EAAE,iDAAoC;gBAChD,KAAK,EAAE,4CAA+B;gBACtC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAC3B,WAAW,CAAC,gBAAgB,CAAC;oBAC5B,GAAI,UAAyC;oBAC7C,EAAE;iBACF,CAAC;aACH;YACD;gBACC,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,0CAA6B;gBACzC,KAAK,EAAE,qCAAwB;gBAC/B,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,CAAC;aACjE;YACD;gBACC,IAAI,EAAE,wBAAwB;gBAC9B,UAAU,EAAE,2CAA8B;gBAC1C,KAAK,EAAE,sCAAyB;gBAChC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CACxC,cAAc,CAAC,oBAAoB,CAAC;oBACnC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnC,IAAI;oBACJ,IAAI;oBACJ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrD,CAAC;aACH;YACD;gBACC,IAAI,EAAE,wBAAwB;gBAC9B,UAAU,EAAE,2CAA8B;gBAC1C,KAAK,EAAE,sCAAyB;gBAChC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC;aAC1D;YACD;gBACC,IAAI,EAAE,6BAA6B;gBACnC,UAAU,EAAE,+CAAkC;gBAC9C,KAAK,EAAE,0CAA6B;gBACpC,GAAG,EAAE,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CACvD,cAAc,CAAC,wBAAwB,CAAC;oBACvC,gBAAgB;oBAChB,YAAY;oBACZ,UAAU;iBACV,CAAC;aACH;YACD;gBACC,IAAI,EAAE,gCAAgC;gBACtC,UAAU,EAAE,kDAAqC;gBACjD,KAAK,EAAE,6CAAgC;gBACvC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAAC;aACjE;YACD;gBACC,IAAI,EAAE,4BAA4B;gBAClC,UAAU,EAAE,+CAAkC;gBAC9C,KAAK,EAAE,0CAA6B;gBACpC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CACrD,aAAa,CAAC,IAAI,CAAC;oBAClB,OAAO;oBACP,MAAM;oBACN,UAAU;oBACV,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzC,CAAC;aACH;SACD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,oBAAoB;QAC3B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,8BAA8B,CAClC,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,UAAU,EACd,IAAA,sBAAc,EAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAClC,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,mBAAmB;QACzB,MAAM,GAAG,GAAG,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;YACtD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,0BAAW,CAAC,MAAM;SAC3B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;;;;;;;;OASG;IACI,wBAAwB;QAC9B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,KAAK,IAAI,CAAC,aAAa,EAAE;aACvB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACrE,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IACxE,oBAAoB,CAAC,GAAc;QACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC;YACJ,GAAG,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAED,0DAA0D;IACnD,KAAK,CAAC,OAAO;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC;gBACJ,GAAG,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,aAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;QACF,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,aAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;;AAldF,wBAmdC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ToolHandler } from './tool-preparer';
|
|
3
|
+
/**
|
|
4
|
+
* Tenant bucket for every single-tenant auth mode (legacy / client-credentials / delegated /
|
|
5
|
+
* broker) and any gateway request that does NOT override the base URL. In those modes there is
|
|
6
|
+
* exactly one Creatio instance, so one shared bucket is correct and the behaviour is identical to
|
|
7
|
+
* the pre-multitenant server. Only a gateway request carrying `X-Creatio-Base-Url` gets its own
|
|
8
|
+
* per-instance bucket — that is where cross-tenant isolation actually matters.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_TENANT_KEY = "__default__";
|
|
11
|
+
/** A capability tool discovered for one tenant: its MCP descriptor + the handler that runs it. */
|
|
12
|
+
export interface DynamicTool {
|
|
13
|
+
descriptor: unknown;
|
|
14
|
+
handler: ToolHandler;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Per-tenant capability + dynamic-tool state — one entry per effective Creatio base URL. Each
|
|
18
|
+
* tenant carries its OWN optional-capability probe verdicts, the tools those capabilities
|
|
19
|
+
* registered, and the live session servers to push late-discovered tools into. Keeping all of this
|
|
20
|
+
* per-tenant is what stops tenant A's capability verdict (DataForge on/off) or A's published tools
|
|
21
|
+
* from leaking to tenant B on a shared multi-tenant (gateway) deployment — the previous design
|
|
22
|
+
* probed once from the first caller and applied that verdict to everyone.
|
|
23
|
+
*/
|
|
24
|
+
export declare class TenantToolState {
|
|
25
|
+
readonly capabilities: Map<string, boolean>;
|
|
26
|
+
readonly cooldownUntil: Map<string, number>;
|
|
27
|
+
readonly dynamicTools: Map<string, DynamicTool>;
|
|
28
|
+
readonly sessionServers: Set<McpServer>;
|
|
29
|
+
probeComplete: boolean;
|
|
30
|
+
probeInFlight: boolean;
|
|
31
|
+
lastAccessMs: number;
|
|
32
|
+
constructor(now: number);
|
|
33
|
+
}
|
|
34
|
+
export interface TenantToolRegistryOptions {
|
|
35
|
+
/** Max distinct tenants retained; idle, session-less tenants are evicted LRU past this. */
|
|
36
|
+
maxTenants?: number;
|
|
37
|
+
/** Idle TTL (ms): a tenant with NO live sessions is dropped after this long untouched. */
|
|
38
|
+
ttlMs?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Holds {@link TenantToolState} per tenant with TTL + LRU eviction — the tool-surface analog of a
|
|
42
|
+
* tenant client pool. A tenant with live session servers is NEVER evicted (its dynamic tools back
|
|
43
|
+
* those live sessions); only idle, session-less tenants are pruned, so memory stays bounded as the
|
|
44
|
+
* number of distinct Creatio instances seen by a gateway deployment grows.
|
|
45
|
+
*/
|
|
46
|
+
export declare class TenantToolRegistry {
|
|
47
|
+
private readonly _maxTenants;
|
|
48
|
+
private readonly _ttlMs;
|
|
49
|
+
private readonly _tenants;
|
|
50
|
+
get size(): number;
|
|
51
|
+
constructor(options?: TenantToolRegistryOptions);
|
|
52
|
+
/** Evict idle, session-less tenants past the TTL, then enforce the LRU cap (still only over
|
|
53
|
+
* session-less tenants — an active tenant whose dynamic tools back a live session is kept). */
|
|
54
|
+
private _prune;
|
|
55
|
+
/** The state for a tenant, creating it on first use. Touches recency, then prunes stale peers —
|
|
56
|
+
* pruning AFTER the insert/touch so the cap is enforced on the resulting set (never left over
|
|
57
|
+
* by one) and the just-accessed tenant is the most-recently-used, so never the one evicted. */
|
|
58
|
+
getState(tenantKey: string, now?: number): TenantToolState;
|
|
59
|
+
/** The tenant state owning a given session server (to release it when its transport closes). */
|
|
60
|
+
findBySession(mcp: McpServer): TenantToolState | undefined;
|
|
61
|
+
/** Every live session server across all tenants (process shutdown). */
|
|
62
|
+
allSessionServers(): McpServer[];
|
|
63
|
+
/** Drop all tenant state (process shutdown). */
|
|
64
|
+
clear(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=tenant-tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-tool-registry.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/tenant-tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD,kGAAkG;AAClG,MAAM,WAAW,WAAW;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC3B,SAAgB,YAAY,uBAA8B;IAC1D,SAAgB,aAAa,sBAA6B;IAC1D,SAAgB,YAAY,2BAAkC;IAC9D,SAAgB,cAAc,iBAAwB;IAC/C,aAAa,UAAS;IACtB,aAAa,UAAS;IACtB,YAAY,EAAE,MAAM,CAAC;gBAEhB,GAAG,EAAE,MAAM;CAGvB;AAED,MAAM,WAAW,yBAAyB;IACzC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAE/D,IAAW,IAAI,IAAI,MAAM,CAExB;gBAEW,OAAO,GAAE,yBAA8B;IAKnD;oGACgG;IAChG,OAAO,CAAC,MAAM;IAsBd;;oGAEgG;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,eAAe;IAa7E,gGAAgG;IACzF,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS;IASjE,uEAAuE;IAChE,iBAAiB,IAAI,SAAS,EAAE;IAUvC,gDAAgD;IACzC,KAAK,IAAI,IAAI;CAGpB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TenantToolRegistry = exports.TenantToolState = exports.DEFAULT_TENANT_KEY = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tenant bucket for every single-tenant auth mode (legacy / client-credentials / delegated /
|
|
6
|
+
* broker) and any gateway request that does NOT override the base URL. In those modes there is
|
|
7
|
+
* exactly one Creatio instance, so one shared bucket is correct and the behaviour is identical to
|
|
8
|
+
* the pre-multitenant server. Only a gateway request carrying `X-Creatio-Base-Url` gets its own
|
|
9
|
+
* per-instance bucket — that is where cross-tenant isolation actually matters.
|
|
10
|
+
*/
|
|
11
|
+
exports.DEFAULT_TENANT_KEY = '__default__';
|
|
12
|
+
/**
|
|
13
|
+
* Per-tenant capability + dynamic-tool state — one entry per effective Creatio base URL. Each
|
|
14
|
+
* tenant carries its OWN optional-capability probe verdicts, the tools those capabilities
|
|
15
|
+
* registered, and the live session servers to push late-discovered tools into. Keeping all of this
|
|
16
|
+
* per-tenant is what stops tenant A's capability verdict (DataForge on/off) or A's published tools
|
|
17
|
+
* from leaking to tenant B on a shared multi-tenant (gateway) deployment — the previous design
|
|
18
|
+
* probed once from the first caller and applied that verdict to everyone.
|
|
19
|
+
*/
|
|
20
|
+
class TenantToolState {
|
|
21
|
+
capabilities = new Map();
|
|
22
|
+
cooldownUntil = new Map();
|
|
23
|
+
dynamicTools = new Map();
|
|
24
|
+
sessionServers = new Set();
|
|
25
|
+
probeComplete = false;
|
|
26
|
+
probeInFlight = false;
|
|
27
|
+
lastAccessMs;
|
|
28
|
+
constructor(now) {
|
|
29
|
+
this.lastAccessMs = now;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.TenantToolState = TenantToolState;
|
|
33
|
+
/**
|
|
34
|
+
* Holds {@link TenantToolState} per tenant with TTL + LRU eviction — the tool-surface analog of a
|
|
35
|
+
* tenant client pool. A tenant with live session servers is NEVER evicted (its dynamic tools back
|
|
36
|
+
* those live sessions); only idle, session-less tenants are pruned, so memory stays bounded as the
|
|
37
|
+
* number of distinct Creatio instances seen by a gateway deployment grows.
|
|
38
|
+
*/
|
|
39
|
+
class TenantToolRegistry {
|
|
40
|
+
_maxTenants;
|
|
41
|
+
_ttlMs;
|
|
42
|
+
_tenants = new Map();
|
|
43
|
+
get size() {
|
|
44
|
+
return this._tenants.size;
|
|
45
|
+
}
|
|
46
|
+
constructor(options = {}) {
|
|
47
|
+
this._maxTenants = options.maxTenants ?? 100;
|
|
48
|
+
this._ttlMs = options.ttlMs ?? 30 * 60_000;
|
|
49
|
+
}
|
|
50
|
+
/** Evict idle, session-less tenants past the TTL, then enforce the LRU cap (still only over
|
|
51
|
+
* session-less tenants — an active tenant whose dynamic tools back a live session is kept). */
|
|
52
|
+
_prune(now) {
|
|
53
|
+
for (const [key, state] of this._tenants) {
|
|
54
|
+
if (state.sessionServers.size === 0 && now - state.lastAccessMs > this._ttlMs) {
|
|
55
|
+
this._tenants.delete(key);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (this._tenants.size <= this._maxTenants) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const evictable = Array.from(this._tenants.entries())
|
|
62
|
+
.filter(([, state]) => state.sessionServers.size === 0)
|
|
63
|
+
.sort((a, b) => a[1].lastAccessMs - b[1].lastAccessMs);
|
|
64
|
+
let over = this._tenants.size - this._maxTenants;
|
|
65
|
+
for (const [key] of evictable) {
|
|
66
|
+
if (over <= 0) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
this._tenants.delete(key);
|
|
70
|
+
over--;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** The state for a tenant, creating it on first use. Touches recency, then prunes stale peers —
|
|
74
|
+
* pruning AFTER the insert/touch so the cap is enforced on the resulting set (never left over
|
|
75
|
+
* by one) and the just-accessed tenant is the most-recently-used, so never the one evicted. */
|
|
76
|
+
getState(tenantKey, now = Date.now()) {
|
|
77
|
+
const existing = this._tenants.get(tenantKey);
|
|
78
|
+
if (existing) {
|
|
79
|
+
existing.lastAccessMs = now;
|
|
80
|
+
this._prune(now);
|
|
81
|
+
return existing;
|
|
82
|
+
}
|
|
83
|
+
const state = new TenantToolState(now);
|
|
84
|
+
this._tenants.set(tenantKey, state);
|
|
85
|
+
this._prune(now);
|
|
86
|
+
return state;
|
|
87
|
+
}
|
|
88
|
+
/** The tenant state owning a given session server (to release it when its transport closes). */
|
|
89
|
+
findBySession(mcp) {
|
|
90
|
+
for (const state of this._tenants.values()) {
|
|
91
|
+
if (state.sessionServers.has(mcp)) {
|
|
92
|
+
return state;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
/** Every live session server across all tenants (process shutdown). */
|
|
98
|
+
allSessionServers() {
|
|
99
|
+
const servers = [];
|
|
100
|
+
for (const state of this._tenants.values()) {
|
|
101
|
+
for (const mcp of state.sessionServers) {
|
|
102
|
+
servers.push(mcp);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return servers;
|
|
106
|
+
}
|
|
107
|
+
/** Drop all tenant state (process shutdown). */
|
|
108
|
+
clear() {
|
|
109
|
+
this._tenants.clear();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.TenantToolRegistry = TenantToolRegistry;
|
|
113
|
+
//# sourceMappingURL=tenant-tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-tool-registry.js","sourceRoot":"","sources":["../../../src/server/mcp/tenant-tool-registry.ts"],"names":[],"mappings":"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"}
|