mcp-creatio 0.6.3 → 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.
Files changed (70) hide show
  1. package/README.md +65 -0
  2. package/dist/cli.js +6 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/creatio/engines/engine-manager.d.ts +3 -0
  5. package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
  6. package/dist/creatio/engines/engine-manager.js +5 -0
  7. package/dist/creatio/engines/engine-manager.js.map +1 -1
  8. package/dist/creatio/provider-context.d.ts +3 -0
  9. package/dist/creatio/provider-context.d.ts.map +1 -1
  10. package/dist/creatio/services/client-cache-hash-client.d.ts +22 -0
  11. package/dist/creatio/services/client-cache-hash-client.d.ts.map +1 -0
  12. package/dist/creatio/services/client-cache-hash-client.js +56 -0
  13. package/dist/creatio/services/client-cache-hash-client.js.map +1 -0
  14. package/dist/creatio/services/creatio-service-context.d.ts +5 -0
  15. package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
  16. package/dist/creatio/services/creatio-service-context.js +15 -1
  17. package/dist/creatio/services/creatio-service-context.js.map +1 -1
  18. package/dist/creatio/services/crud-provider-factory.d.ts +4 -0
  19. package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -1
  20. package/dist/creatio/services/crud-provider-factory.js +1 -1
  21. package/dist/creatio/services/crud-provider-factory.js.map +1 -1
  22. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +2 -0
  23. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -1
  24. package/dist/creatio/services/dataservice/data-service-crud-provider.js +3 -1
  25. package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -1
  26. package/dist/creatio/services/dataservice/data-service-schema.d.ts +3 -1
  27. package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -1
  28. package/dist/creatio/services/dataservice/data-service-schema.js +13 -4
  29. package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -1
  30. package/dist/creatio/services/dataservice/data-service-transport.d.ts +3 -0
  31. package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -1
  32. package/dist/creatio/services/dataservice/data-service-transport.js +5 -0
  33. package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -1
  34. package/dist/creatio/services/index.d.ts +2 -0
  35. package/dist/creatio/services/index.d.ts.map +1 -1
  36. package/dist/creatio/services/index.js +2 -0
  37. package/dist/creatio/services/index.js.map +1 -1
  38. package/dist/creatio/services/odata/metadata-store.d.ts +10 -1
  39. package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -1
  40. package/dist/creatio/services/odata/metadata-store.js +35 -4
  41. package/dist/creatio/services/odata/metadata-store.js.map +1 -1
  42. package/dist/creatio/services/schema-freshness-gate.d.ts +26 -0
  43. package/dist/creatio/services/schema-freshness-gate.d.ts.map +1 -0
  44. package/dist/creatio/services/schema-freshness-gate.js +58 -0
  45. package/dist/creatio/services/schema-freshness-gate.js.map +1 -0
  46. package/dist/index.js +6 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/log.d.ts.map +1 -1
  49. package/dist/log.js +4 -1
  50. package/dist/log.js.map +1 -1
  51. package/dist/server/http/mcp-handlers.d.ts.map +1 -1
  52. package/dist/server/http/mcp-handlers.js +8 -6
  53. package/dist/server/http/mcp-handlers.js.map +1 -1
  54. package/dist/server/mcp/server.d.ts +37 -28
  55. package/dist/server/mcp/server.d.ts.map +1 -1
  56. package/dist/server/mcp/server.js +106 -75
  57. package/dist/server/mcp/server.js.map +1 -1
  58. package/dist/server/mcp/tenant-tool-registry.d.ts +66 -0
  59. package/dist/server/mcp/tenant-tool-registry.d.ts.map +1 -0
  60. package/dist/server/mcp/tenant-tool-registry.js +113 -0
  61. package/dist/server/mcp/tenant-tool-registry.js.map +1 -0
  62. package/dist/utils/index.d.ts +1 -0
  63. package/dist/utils/index.d.ts.map +1 -1
  64. package/dist/utils/index.js +1 -0
  65. package/dist/utils/index.js.map +1 -1
  66. package/dist/utils/redact.d.ts +25 -0
  67. package/dist/utils/redact.d.ts.map +1 -0
  68. package/dist/utils/redact.js +64 -0
  69. package/dist/utils/redact.js.map +1 -0
  70. package/package.json +1 -1
@@ -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
- // One McpServer per live transport/session. A single McpServer can be connected to only one
32
- // transport, so a shared singleton would reject the second concurrent session's connect()
33
- // ("Already connected to a transport"). The handler/descriptor maps below are user-agnostic
34
- // (they read identity from the per-request context at call time) and so are shared across all.
35
- _sessionServers = new Set();
36
- // The optional-capability probe runs until every preparer yields a DEFINITIVE verdict
37
- // (enabled/disabled). Capabilities are instance-level, so one good round serves all sessions.
38
- // A round where a Creatio-backed probe only errored (e.g. the first caller's identity wasn't
39
- // usable yet) is NOT memoized a later authenticated connect retries. `_probeInFlight` guards
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
- _capabilities = new Map();
55
- _probeCooldownUntil = new Map();
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,25 +70,28 @@ 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
- _registerHandlerWithDescriptor(name, descriptor, handler) {
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) => {
93
- const result = await handler(args);
88
+ // Outward boundary to the LLM client: scrub any credential that leaked into the error
89
+ // message (AGENTS invariant #7) while preserving the Error type/stack, then rethrow so
90
+ // the MCP layer relays it (we never silently swallow — invariant #4). `.catch` keeps
91
+ // `result` typed exactly as the handler's return (the callback only throws).
92
+ const result = await handler(args).catch((err) => {
93
+ throw (0, utils_1.redactError)(err);
94
+ });
94
95
  // Pass through only a genuine MCP envelope (`content` is an array of blocks) — e.g.
95
96
  // the published-tools proxy returns an upstream tools/call result already shaped.
96
97
  // Raw domain data (incl. server payloads that happen to have a scalar/object
@@ -106,21 +107,23 @@ class Server {
106
107
  type: 'text',
107
108
  // Compact (not pretty-printed): this is a machine/LLM transport, so the 2-space
108
109
  // indentation only inflated byte/token size and serialization cost.
109
- text: typeof result === 'string' ? result : JSON.stringify(result),
110
+ // Scrubbed at this outward edge so a token that slipped into a result field is
111
+ // never relayed to the client.
112
+ text: (0, utils_1.redactSecrets)(typeof result === 'string' ? result : JSON.stringify(result)),
110
113
  },
111
114
  ],
112
115
  };
113
116
  };
114
117
  }
115
- _registerAsTool(mcp, name, handler) {
118
+ _registerAsTool(mcp, name, descriptor, handler) {
116
119
  try {
117
- const descriptor = this._descriptors.get(name) ||
120
+ const toolDescriptor = descriptor ||
118
121
  {
119
122
  title: name,
120
123
  description: `Tool ${name}`,
121
124
  inputSchema: {},
122
125
  };
123
- mcp.registerTool(name, descriptor, async (args) => {
126
+ mcp.registerTool(name, toolDescriptor, async (args) => {
124
127
  return this._normalizeToToolHandler(handler)(args);
125
128
  });
126
129
  log_1.default.info('mcp.tool.register', { tool: name });
@@ -144,48 +147,69 @@ class Server {
144
147
  log_1.default.warn('mcp.prompts.register.failed', { error: String(err) });
145
148
  }
146
149
  }
147
- /** Adapter exposing handler registration to {@link ToolPreparer}s. */
148
- _toolRegistrar() {
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) {
149
165
  return {
150
- register: (name, descriptor, handler) => this._registerHandlerWithDescriptor(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
+ },
151
175
  };
152
176
  }
153
177
  /**
154
- * Probe each optional-capability preparer that has no verdict yet and let it register its tools
155
- * when available. A preparer that returns cleanly (true/false) gets a recorded verdict and is
156
- * never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet) records nothing
157
- * so a later authenticated connect can retry it — which also makes registration idempotent (an
158
- * already-enabled preparer is skipped, so its tools are never registered twice). Invoked from
159
- * {@link ensureCapabilitiesProbed} within a request context so probe calls carry the caller's
160
- * 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).
161
185
  */
162
- async _prepareTools() {
163
- const registrar = this._toolRegistrar();
186
+ async _prepareTools(state) {
187
+ const registrar = this._toolRegistrar(state);
164
188
  const now = Date.now();
165
189
  for (const preparer of this._preparers) {
166
- if (this._capabilities.has(preparer.name)) {
190
+ if (state.capabilities.has(preparer.name)) {
167
191
  continue; // definitive verdict already recorded — don't re-probe or re-register
168
192
  }
169
- if (now < (this._probeCooldownUntil.get(preparer.name) ?? 0)) {
193
+ if (now < (state.cooldownUntil.get(preparer.name) ?? 0)) {
170
194
  continue; // recently failed — back off rather than re-probe on every connect
171
195
  }
172
196
  try {
173
197
  const enabled = await preparer.prepare(registrar);
174
- this._capabilities.set(preparer.name, enabled);
198
+ state.capabilities.set(preparer.name, enabled);
175
199
  log_1.default.info('mcp.prepare', { preparer: preparer.name, enabled });
176
200
  }
177
201
  catch (err) {
178
202
  // No verdict — leave unrecorded so a later authenticated connect retries, but not
179
203
  // before the cooldown elapses.
180
- this._probeCooldownUntil.set(preparer.name, Date.now() + Server.PROBE_RETRY_COOLDOWN_MS);
204
+ state.cooldownUntil.set(preparer.name, Date.now() + Server.PROBE_RETRY_COOLDOWN_MS);
181
205
  log_1.default.warn('mcp.prepare.failed', { preparer: preparer.name, error: String(err) });
182
206
  }
183
207
  }
184
- return this._preparers.every((p) => this._capabilities.has(p.name));
208
+ return this._preparers.every((p) => state.capabilities.has(p.name));
185
209
  }
186
- /** Whether DataForge was probed as enabled at startup. */
187
- _isDataForgeReady() {
188
- return this._capabilities.get(this._dataForgePreparer.name) === true;
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;
189
213
  }
190
214
  /** Compile the `read` tool args into a neutral {@link ReadQuery}: structured `filters`
191
215
  * become a {@link FilterNode}; a raw `$filter` string and `expand` are carried as
@@ -219,7 +243,7 @@ class Server {
219
243
  * CRUD backend's schema on a per-call miss. The `source` discriminator is part of the
220
244
  * public tool contract and reflects where the schema actually came from. */
221
245
  async _describeEntity(entitySet) {
222
- if (this._isDataForgeReady()) {
246
+ if (this._isDataForgeReady(this._currentTenantState())) {
223
247
  const dataForge = await this._dataForge.getColumnsOrNull(entitySet);
224
248
  if (dataForge !== null) {
225
249
  return { source: 'dataforge', entitySet, dataForge };
@@ -373,52 +397,59 @@ class Server {
373
397
  const { core, mutating } = this._clientToolDefs();
374
398
  const defs = this._readonly ? core : [...core, ...mutating];
375
399
  for (const def of defs) {
376
- this._registerHandlerWithDescriptor(def.name, def.descriptor, (0, utils_1.withValidation)(def.input, def.run));
400
+ this._registerStaticTool(def.name, def.descriptor, (0, utils_1.withValidation)(def.input, def.run));
377
401
  }
378
402
  }
379
403
  /**
380
- * Build a fresh {@link McpServer} for one transport/session, with the full known tool +
381
- * prompt surface registered, and track it so the capability probe can later push
382
- * late-discovered tools into it. Each session MUST get its own server (a single McpServer
383
- * 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.
384
409
  */
385
- createSessionServer() {
410
+ createSessionServer(baseUrlOverride) {
386
411
  const mcp = new mcp_js_1.McpServer({ name: this._serverName, version: this._serverVersion });
387
412
  this._registerAllInto(mcp);
388
- this._sessionServers.add(mcp);
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);
389
418
  log_1.default.serverStart(this._serverName, this._serverVersion, {
390
- tools: Array.from(this._handlers.keys()),
419
+ tools: [...this._handlers.keys(), ...state.dynamicTools.keys()],
391
420
  prompts: prompts_data_1.ALL_PROMPTS.length,
392
421
  });
393
422
  return mcp;
394
423
  }
395
424
  /**
396
- * Probe optional capabilities once per process, WITHOUT blocking the MCP handshake. These do
425
+ * Probe optional capabilities once per tenant, WITHOUT blocking the MCP handshake. These do
397
426
  * network I/O (DataForge/Global Search probes, and the publishing app's tools/list, which can
398
427
  * be slow) — awaiting would delay connect past the client's init timeout. Discovered tools
399
- * register into every live session server as they resolve (the SDK emits
400
- * notifications/tools/list_changed) and into the maps for future sessions.
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.
401
430
  *
402
431
  * MUST be called from within the per-request context ({@link runWithContext}) so the probe's
403
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.
404
434
  */
405
- ensureCapabilitiesProbed() {
406
- if (this._probeComplete || this._probeInFlight) {
435
+ ensureCapabilitiesProbed(baseUrlOverride) {
436
+ const state = this._registry.getState(this._tenantKey(baseUrlOverride));
437
+ if (state.probeComplete || state.probeInFlight) {
407
438
  return;
408
439
  }
409
- this._probeInFlight = true;
410
- void this._prepareTools()
440
+ state.probeInFlight = true;
441
+ void this._prepareTools(state)
411
442
  .then((complete) => {
412
- this._probeComplete = complete;
443
+ state.probeComplete = complete;
413
444
  })
414
445
  .catch((err) => log_1.default.warn('mcp.prepare.error', { error: String(err) }))
415
446
  .finally(() => {
416
- this._probeInFlight = false;
447
+ state.probeInFlight = false;
417
448
  });
418
449
  }
419
450
  /** Untrack and close one session's server (call when its transport closes). */
420
451
  releaseSessionServer(mcp) {
421
- this._sessionServers.delete(mcp);
452
+ this._registry.findBySession(mcp)?.sessionServers.delete(mcp);
422
453
  try {
423
454
  mcp.close();
424
455
  }
@@ -426,9 +457,9 @@ class Server {
426
457
  log_1.default.warn('mcp.stop.failed', { error: String(err) });
427
458
  }
428
459
  }
429
- /** Close every live session server (process shutdown). */
460
+ /** Close every live session server across all tenants (process shutdown). */
430
461
  async stopAll() {
431
- for (const mcp of this._sessionServers) {
462
+ for (const mcp of this._registry.allSessionServers()) {
432
463
  try {
433
464
  mcp.close();
434
465
  }
@@ -436,7 +467,7 @@ class Server {
436
467
  log_1.default.warn('mcp.stop.failed', { error: String(err) });
437
468
  }
438
469
  }
439
- this._sessionServers.clear();
470
+ this._registry.clear();
440
471
  log_1.default.serverStop(this._serverName, this._serverVersion);
441
472
  }
442
473
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAoE;AAQpE,oDAA4B;AAC5B,uCAMqB;AACrB,2CAA8C;AAE9C,4DAAiE;AACjE,0EAA8E;AAC9E,mEAA+D;AAC/D,iFAA4E;AAC5E,uCAA0D;AAC1D,4EAAwE;AACxE,0FAAqF;AACrF,iDAA6C;AAC7C,iEAAiG;AAEjG,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;IAChD,gGAAgG;IAChG,iGAAiG;IACjG,+FAA+F;IAC/F,2FAA2F;IAC1E,YAAY,GAAG,IAAI,GAAG,EAAe,CAAC;IACtC,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5D,kGAAkG;IAClG,+FAA+F;IAC/F,+FAA+F;IAC/F,iGAAiG;IACjG,gDAAgD;IAC/B,SAAS,CAAqB;IAC/C,4FAA4F;IAC5F,kGAAkG;IAClG,yDAAyD;IACxC,UAAU,CAAkB;IAC5B,kBAAkB,CAAwB;IAC1C,qBAAqB,CAA2B;IAChD,uBAAuB,CAA+B;IACtD,UAAU,CAAiB;IACpC,SAAS,GAAG,KAAK,CAAC;IAClB,WAAW,GAAG,cAAI,CAAC;IACnB,cAAc,GAAG,iBAAO,CAAC;IAEjC,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,SAAS,GAAG,IAAI,yCAAkB,EAAE,CAAC;QAC1C,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;IAED,mGAAmG;IAC3F,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,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;qFACiF;IACzE,mBAAmB,CAAC,IAAY,EAAE,UAAe,EAAE,OAAoB;QAC9E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,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,EAClB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAC5D;qBACD;iBACD;aACD,CAAC;QACH,CAAC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,GAAc,EAAE,IAAY,EAAE,UAAe,EAAE,OAAoB;QAC1F,IAAI,CAAC;YACJ,MAAM,cAAc,GACnB,UAAU;gBACT;oBACA,KAAK,EAAE,IAAI;oBACX,WAAW,EAAE,QAAQ,IAAI,EAAE;oBAC3B,WAAW,EAAE,EAAE;iBACP,CAAC;YACX,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;gBAC1D,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;;mGAE+F;IACvF,UAAU,CAAC,eAAwB;QAC1C,MAAM,OAAO,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAkB,CAAC;IAClE,CAAC;IAED;kGAC8F;IACtF,mBAAmB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAA,0BAAkB,GAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;qGACiG;IACzF,cAAc,CAAC,KAAsB;QAC5C,OAAO;YACN,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;gBACvC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBACtD,mFAAmF;gBACnF,oFAAoF;gBACpF,kFAAkF;gBAClF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACxC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,aAAa,CAAC,KAAsB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,sEAAsE;YACjF,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzD,SAAS,CAAC,mEAAmE;YAC9E,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAClD,KAAK,CAAC,YAAY,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,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACpF,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,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,kGAAkG;IAC1F,iBAAiB,CAAC,QAAyB,IAAI,CAAC,mBAAmB,EAAE;QAC5E,OAAO,KAAK,CAAC,YAAY,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,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACxD,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,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,IAAA,sBAAc,EAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACI,mBAAmB,CAAC,eAAwB;QAClD,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,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;YACtD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC/D,OAAO,EAAE,0BAAW,CAAC,MAAM;SAC3B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;;;;;;;;;OAUG;IACI,wBAAwB,CAAC,eAAwB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QACxE,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QACD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;aAC5B,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClB,KAAK,CAAC,aAAa,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,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IACxE,oBAAoB,CAAC,GAAc;QACzC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9D,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,6EAA6E;IACtE,KAAK,CAAC,OAAO;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACtD,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,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,aAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;;AApeF,wBAqeC"}
@@ -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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"}
@@ -3,4 +3,5 @@ export * from './mcp';
3
3
  export * from './network';
4
4
  export * from './pkce';
5
5
  export * from './context';
6
+ export * from './redact';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -19,4 +19,5 @@ __exportStar(require("./mcp"), exports);
19
19
  __exportStar(require("./network"), exports);
20
20
  __exportStar(require("./pkce"), exports);
21
21
  __exportStar(require("./context"), exports);
22
+ __exportStar(require("./redact"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,4CAA0B;AAC1B,yCAAuB;AACvB,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,4CAA0B;AAC1B,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB"}