@sonoma-security/mcp-gateway 0.1.11 → 0.1.13

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 (63) hide show
  1. package/dist/__tests__/plugin-discovery.test.d.ts +12 -0
  2. package/dist/__tests__/plugin-discovery.test.d.ts.map +1 -0
  3. package/dist/__tests__/plugin-discovery.test.js +367 -0
  4. package/dist/__tests__/plugin-discovery.test.js.map +1 -0
  5. package/dist/__tests__/tool-blocking.test.d.ts +2 -0
  6. package/dist/__tests__/tool-blocking.test.d.ts.map +1 -0
  7. package/dist/__tests__/tool-blocking.test.js +256 -0
  8. package/dist/__tests__/tool-blocking.test.js.map +1 -0
  9. package/dist/auth/client.d.ts.map +1 -1
  10. package/dist/auth/client.js +49 -6
  11. package/dist/auth/client.js.map +1 -1
  12. package/dist/auth/keychain.d.ts +34 -0
  13. package/dist/auth/keychain.d.ts.map +1 -0
  14. package/dist/auth/keychain.js +305 -0
  15. package/dist/auth/keychain.js.map +1 -0
  16. package/dist/auth/server.d.ts +15 -3
  17. package/dist/auth/server.d.ts.map +1 -1
  18. package/dist/auth/server.js +110 -23
  19. package/dist/auth/server.js.map +1 -1
  20. package/dist/auth/storage.d.ts +5 -6
  21. package/dist/auth/storage.d.ts.map +1 -1
  22. package/dist/auth/storage.js +72 -21
  23. package/dist/auth/storage.js.map +1 -1
  24. package/dist/auth/upstream-oauth.d.ts +2 -0
  25. package/dist/auth/upstream-oauth.d.ts.map +1 -1
  26. package/dist/auth/upstream-oauth.js +58 -8
  27. package/dist/auth/upstream-oauth.js.map +1 -1
  28. package/dist/auth/upstream-token-store.d.ts +18 -6
  29. package/dist/auth/upstream-token-store.d.ts.map +1 -1
  30. package/dist/auth/upstream-token-store.js +127 -35
  31. package/dist/auth/upstream-token-store.js.map +1 -1
  32. package/dist/cli.js +16 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +17 -7
  36. package/dist/config.js.map +1 -1
  37. package/dist/gateway.d.ts +17 -0
  38. package/dist/gateway.d.ts.map +1 -1
  39. package/dist/gateway.js +302 -66
  40. package/dist/gateway.js.map +1 -1
  41. package/dist/http-proxy.d.ts +76 -0
  42. package/dist/http-proxy.d.ts.map +1 -0
  43. package/dist/http-proxy.js +316 -0
  44. package/dist/http-proxy.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/pattern-matcher.d.ts +25 -0
  50. package/dist/pattern-matcher.d.ts.map +1 -1
  51. package/dist/pattern-matcher.js +65 -0
  52. package/dist/pattern-matcher.js.map +1 -1
  53. package/dist/prompt-guard.d.ts +24 -0
  54. package/dist/prompt-guard.d.ts.map +1 -0
  55. package/dist/prompt-guard.js +161 -0
  56. package/dist/prompt-guard.js.map +1 -0
  57. package/dist/sonoma-client.d.ts +28 -1
  58. package/dist/sonoma-client.d.ts.map +1 -1
  59. package/dist/sonoma-client.js +67 -43
  60. package/dist/sonoma-client.js.map +1 -1
  61. package/dist/types.d.ts +6 -0
  62. package/dist/types.d.ts.map +1 -1
  63. package/package.json +1 -1
package/dist/gateway.js CHANGED
@@ -19,8 +19,10 @@ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
19
19
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
20
20
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
21
21
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
22
+ import { HttpProxyServer } from "./http-proxy.js";
22
23
  import { SonomaClient } from "./sonoma-client.js";
23
- import { matchesToolPattern, getPatternSpecificity } from "./pattern-matcher.js";
24
+ import { isToolBlockedByPolicy } from "./pattern-matcher.js";
25
+ import { evaluatePromptGuards } from "./prompt-guard.js";
24
26
  import { UpstreamTokenStore, authenticateUpstream } from "./auth/index.js";
25
27
  // Timeout configuration
26
28
  const CONNECT_TIMEOUT_MS = 10_000; // 10 seconds
@@ -42,6 +44,16 @@ export class McpGateway {
42
44
  upstreamTokenStore;
43
45
  started = false;
44
46
  clientName = null;
47
+ httpProxy = null;
48
+ // Servers that need OAuth but haven't completed it yet.
49
+ // Keyed by server name, stores config + callback port for retry.
50
+ pendingAuth = new Map();
51
+ pendingAuthRetryInterval = null;
52
+ // Resolves when initial upstream connections are done (success or fail).
53
+ // The tools/list handler waits on this so the first call returns actual tools
54
+ // instead of an empty list (Claude Code doesn't honor tools/list_changed).
55
+ upstreamsReady = Promise.resolve();
56
+ resolveUpstreamsReady = null;
45
57
  constructor(config) {
46
58
  this.config = config;
47
59
  this.debug = config.debug ?? false;
@@ -85,58 +97,29 @@ export class McpGateway {
85
97
  */
86
98
  isToolBlocked(serverName, toolName) {
87
99
  if (!this.policy) {
100
+ this.log(`isToolBlocked: no policy loaded, allowing ${serverName}.${toolName}`);
88
101
  return false;
89
102
  }
90
- // Get server identifiers to check
91
103
  const upstream = this.upstreams.get(serverName);
92
104
  const packageName = upstream?.config.packageName;
93
- // Build set of identifiers: packageName (preferred) or server name
94
- const serverIdentifiers = new Set();
95
- if (packageName)
96
- serverIdentifiers.add(packageName);
97
- serverIdentifiers.add(serverName);
98
- // Find all matching rules (server-level and tool-level)
99
- const matchingRules = this.policy.list.filter((rule) => {
100
- // Check if server identifier matches (or rule is global with "*")
101
- const serverMatches = serverIdentifiers.has(rule.identifier) || rule.identifier === "*";
102
- if (!serverMatches)
103
- return false;
104
- // Check tool pattern match
105
- if (!rule.toolPattern) {
106
- // Server-level rule - applies to all tools on this server
107
- return true;
105
+ const url = upstream?.config.url;
106
+ // Resolve additional identifiers from the policy's alias map.
107
+ // e.g. if the server URL is "https://mcp.slack.com/mcp", aliases
108
+ // might include "slack-mcp-server" (the canonical package name).
109
+ const extraIdentifiers = [];
110
+ if (this.policy.identifierAliases) {
111
+ const sources = [serverName, packageName, url].filter(Boolean);
112
+ for (const src of sources) {
113
+ const aliases = this.policy.identifierAliases[src];
114
+ if (aliases)
115
+ extraIdentifiers.push(...aliases);
108
116
  }
109
- // Tool-level rule - check if pattern matches the tool name
110
- return matchesToolPattern(toolName, rule.toolPattern);
111
- });
112
- // No matching rules = not blocked (unlisted servers are allowed)
113
- if (matchingRules.length === 0) {
114
- return false;
115
117
  }
116
- // Sort rules by priority (higher first), then by pattern specificity (more specific first)
117
- const sortedRules = [...matchingRules].sort((a, b) => {
118
- // First sort by explicit priority (higher wins)
119
- if (a.priority !== b.priority)
120
- return b.priority - a.priority;
121
- // Then by pattern specificity (more specific wins)
122
- const specA = getPatternSpecificity(a.toolPattern);
123
- const specB = getPatternSpecificity(b.toolPattern);
124
- return specB - specA;
125
- });
126
- // Get the highest priority rule
127
- const topRule = sortedRules[0];
128
- // Find if there's a deny rule at the same priority level
129
- const topPriority = topRule.priority;
130
- const topSpecificity = getPatternSpecificity(topRule.toolPattern);
131
- const denyAtTopLevel = sortedRules.find((r) => r.status === "blocked" &&
132
- r.priority === topPriority &&
133
- getPatternSpecificity(r.toolPattern) === topSpecificity);
134
- // Block if any matching rule says "blocked" (deny wins at same priority)
135
- if (denyAtTopLevel) {
136
- this.log(`Tool blocked by policy: ${serverName}.${toolName} (pattern: ${denyAtTopLevel.toolPattern ?? "server-level"})`);
137
- return true;
118
+ const blocked = isToolBlockedByPolicy(this.policy.list, serverName, toolName, packageName, url, extraIdentifiers);
119
+ if (blocked) {
120
+ this.log(`Tool blocked by policy: ${serverName}.${toolName}`);
138
121
  }
139
- return false;
122
+ return blocked;
140
123
  }
141
124
  /**
142
125
  * Check if an upstream server's OAuth session has exceeded the org-configured lifetime.
@@ -159,6 +142,26 @@ export class McpGateway {
159
142
  setupHandlers() {
160
143
  // Handle tools/list - aggregate tools from all upstreams
161
144
  this.server.setRequestHandler(ListToolsRequestSchema, async () => {
145
+ // When the HTTP proxy is active, tools are accessed via proxy URLs
146
+ // (e.g., localhost:19880/proxy/slack/mcp) through plugin .mcp.json
147
+ // entries. Don't expose them again via stdio to avoid duplicates.
148
+ if (this.config.httpProxyPort) {
149
+ this.log("tools/list: HTTP proxy active, returning empty list (tools served via proxy)");
150
+ return { tools: [] };
151
+ }
152
+ // Wait for upstream connections to complete before returning tools.
153
+ // Claude Code calls tools/list immediately during the handshake (before
154
+ // upstreams connect) and does NOT call it again when tools/list_changed
155
+ // fires. By blocking here, the first call returns actual tools.
156
+ if (this.upstreams.size === 0 && this.resolveUpstreamsReady) {
157
+ this.log("tools/list: waiting for upstreams to connect...");
158
+ const UPSTREAM_WAIT_MS = 15_000;
159
+ await Promise.race([
160
+ this.upstreamsReady,
161
+ new Promise((r) => setTimeout(r, UPSTREAM_WAIT_MS)),
162
+ ]);
163
+ this.log(`tools/list: done waiting, ${this.upstreams.size} upstreams ready`);
164
+ }
162
165
  const allTools = [];
163
166
  for (const [serverName, upstream] of this.upstreams) {
164
167
  for (const tool of upstream.tools) {
@@ -179,6 +182,16 @@ export class McpGateway {
179
182
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
180
183
  const { name, arguments: args } = request.params;
181
184
  const startTime = Date.now();
185
+ // Wait for upstream connections before processing tool calls.
186
+ // Same gate as tools/list: prevents "Unknown server" errors when
187
+ // the client calls a tool before upstreams finish connecting.
188
+ if (this.upstreams.size === 0 && this.resolveUpstreamsReady) {
189
+ const UPSTREAM_WAIT_MS = 15_000;
190
+ await Promise.race([
191
+ this.upstreamsReady,
192
+ new Promise((r) => setTimeout(r, UPSTREAM_WAIT_MS)),
193
+ ]);
194
+ }
182
195
  // Parse namespaced tool name
183
196
  const separatorIndex = name.indexOf("__");
184
197
  if (separatorIndex === -1) {
@@ -196,6 +209,19 @@ export class McpGateway {
196
209
  const toolName = name.slice(separatorIndex + 2);
197
210
  const upstream = this.upstreams.get(serverName);
198
211
  if (!upstream) {
212
+ // Check if server is pending OAuth authentication
213
+ const pending = this.pendingAuth.get(serverName);
214
+ if (pending) {
215
+ return {
216
+ isError: true,
217
+ content: [
218
+ {
219
+ type: "text",
220
+ text: `Server ${serverName} requires OAuth authentication. The user needs to complete the authorization flow in their browser. The gateway will automatically connect once authentication is complete.`,
221
+ },
222
+ ],
223
+ };
224
+ }
199
225
  return {
200
226
  isError: true,
201
227
  content: [
@@ -239,6 +265,37 @@ export class McpGateway {
239
265
  ],
240
266
  };
241
267
  }
268
+ // Evaluate prompt guards before forwarding
269
+ if (this.policy?.promptGuards && this.policy.promptGuards.length > 0) {
270
+ const content = args ? JSON.stringify(args) : "";
271
+ const guardEval = evaluatePromptGuards(this.policy.promptGuards, content);
272
+ // Record warn/log events (non-blocking)
273
+ for (const result of guardEval.results) {
274
+ if (result.action !== "block") {
275
+ this.log(`Prompt guard ${result.action}: ${result.reason}`);
276
+ }
277
+ }
278
+ if (guardEval.blocked) {
279
+ const event = {
280
+ serverName,
281
+ toolName,
282
+ timestamp: new Date().toISOString(),
283
+ durationMs: Date.now() - startTime,
284
+ status: "blocked",
285
+ argumentKeys: args ? Object.keys(args) : [],
286
+ };
287
+ this.recordEvent(event);
288
+ return {
289
+ isError: true,
290
+ content: [
291
+ {
292
+ type: "text",
293
+ text: `Tool call blocked by prompt guard: ${guardEval.blockReason}`,
294
+ },
295
+ ],
296
+ };
297
+ }
298
+ }
242
299
  // Check if OAuth session has expired per org policy
243
300
  if (this.isSessionExpired(serverName)) {
244
301
  this.log(`Session expired for ${serverName}, clearing tokens to trigger re-auth`);
@@ -278,6 +335,17 @@ export class McpGateway {
278
335
  }
279
336
  catch (error) {
280
337
  const errorMessage = error instanceof Error ? error.message : String(error);
338
+ // Detect stale transport (connection dropped but flag not yet updated)
339
+ const isTransportDead = errorMessage.includes("No active transport") ||
340
+ errorMessage.includes("not connected");
341
+ if (isTransportDead) {
342
+ const up = this.upstreams.get(serverName);
343
+ if (up && up.connected) {
344
+ up.connected = false;
345
+ this.log(`Transport dead for ${serverName}, triggering reconnect`);
346
+ this.scheduleReconnect(serverName);
347
+ }
348
+ }
281
349
  this.recordEvent({
282
350
  serverName,
283
351
  toolName,
@@ -287,12 +355,15 @@ export class McpGateway {
287
355
  errorMessage,
288
356
  argumentKeys: args ? Object.keys(args) : [],
289
357
  });
358
+ const userMessage = isTransportDead
359
+ ? `Server ${serverName} lost connection (reconnecting...)`
360
+ : `Error calling ${serverName}.${toolName}: ${errorMessage}`;
290
361
  return {
291
362
  isError: true,
292
363
  content: [
293
364
  {
294
365
  type: "text",
295
- text: `Error calling ${serverName}.${toolName}: ${errorMessage}`,
366
+ text: userMessage,
296
367
  },
297
368
  ],
298
369
  };
@@ -347,7 +418,7 @@ export class McpGateway {
347
418
  * Connect to an upstream MCP server.
348
419
  * For URL-based servers, tries StreamableHTTP first, then falls back to SSE.
349
420
  */
350
- async connectUpstream(config, existingConnection) {
421
+ async connectUpstream(config, existingConnection, callbackPort) {
351
422
  const label = config.url ?? config.command ?? config.name;
352
423
  this.log(`Connecting to upstream: ${config.name} (${label})`);
353
424
  const serverName = config.name;
@@ -406,15 +477,22 @@ export class McpGateway {
406
477
  if (!hasAuthHeader) {
407
478
  // Try OAuth pre-auth for HTTP servers (discovers if server needs OAuth)
408
479
  // On reconnects, skip browser auth to avoid opening multiple consent tabs
480
+ // Use a timeout so OAuth doesn't block startup indefinitely (unless explicitly triggered)
481
+ const OAUTH_TIMEOUT_MS = 60_000; // 60 seconds for browser auth
409
482
  try {
410
- authProvider = await authenticateUpstream({
483
+ const authPromise = authenticateUpstream({
411
484
  serverUrl: config.url,
412
485
  serverName: config.name,
413
486
  store: this.upstreamTokenStore,
414
487
  debug: this.debug,
415
488
  skipBrowserAuth: isReconnect,
416
489
  oauth: config.oauth,
490
+ ...(callbackPort ? { callbackPort } : {}),
491
+ });
492
+ const timeoutPromise = new Promise((_, reject) => {
493
+ setTimeout(() => reject(new Error(`OAuth timeout after ${OAUTH_TIMEOUT_MS}ms for ${config.name}`)), OAUTH_TIMEOUT_MS);
417
494
  });
495
+ authProvider = await Promise.race([authPromise, timeoutPromise]);
418
496
  this.log(` ${config.name}: OAuth pre-auth succeeded`);
419
497
  }
420
498
  catch (err) {
@@ -556,6 +634,15 @@ export class McpGateway {
556
634
  }
557
635
  this.started = true;
558
636
  this.log("Starting MCP Gateway...");
637
+ // Start HTTP proxy server FIRST so the port is listening before the AI
638
+ // client even finishes the STDIO handshake. Claude Code starts plugins
639
+ // (e.g., Slack via localhost:19880) concurrently with the gateway process.
640
+ // If the proxy port isn't ready, plugins get "connection refused" and are
641
+ // marked as "failed". The proxy's waitForUpstream() handles the case where
642
+ // requests arrive before upstream connections are established.
643
+ if (this.config.httpProxyPort) {
644
+ await this.startHttpProxy(this.config.httpProxyPort);
645
+ }
559
646
  // Fetch initial policy from Sonoma
560
647
  if (this.sonomaClient) {
561
648
  await this.refreshPolicy();
@@ -571,19 +658,80 @@ export class McpGateway {
571
658
  const flushIntervalMs = Number.isNaN(parsedFlushMs) ? 30000 : parsedFlushMs;
572
659
  this.sonomaClient.startTelemetryFlush(flushIntervalMs);
573
660
  }
574
- // Connect to all upstream servers
575
- for (const serverConfig of this.config.servers) {
576
- try {
577
- const upstream = await this.connectUpstream(serverConfig);
661
+ // Set up the "upstreams ready" gate BEFORE connecting the transport.
662
+ // Claude Code calls tools/list immediately during the MCP handshake and
663
+ // does NOT call it again when tools/list_changed fires. The tools/list
664
+ // handler blocks on this gate so the first response includes actual tools.
665
+ this.upstreamsReady = new Promise((resolve) => {
666
+ this.resolveUpstreamsReady = resolve;
667
+ });
668
+ // Start the server (stdio transport to AI client) FIRST so the MCP
669
+ // handshake completes immediately. Without this, the AI client times out
670
+ // waiting for the handshake while the gateway blocks on OAuth flows,
671
+ // kills the process, and spawns a new one (causing duplicate browser tabs).
672
+ const transport = new StdioServerTransport();
673
+ await this.server.connect(transport);
674
+ this.log("Transport connected");
675
+ // Detect AI client name from the MCP initialize handshake.
676
+ // The client may not have sent initialize yet (connect() just starts
677
+ // the transport). We don't block here; the tools/list handler waits
678
+ // for upstreams independently.
679
+ const clientVersion = this.server.getClientVersion();
680
+ if (clientVersion?.name) {
681
+ this.clientName = clientVersion.name;
682
+ this.log(`Detected AI client: ${this.clientName} (${clientVersion.version ?? "unknown"})`);
683
+ }
684
+ this.log("Gateway transport ready - connecting to upstream servers...");
685
+ // Connect to all upstream servers in parallel. Each server that needs
686
+ // OAuth gets its own callback port (19843, 19844, ...) so auth flows
687
+ // don't block each other.
688
+ const UPSTREAM_BASE_PORT = 19843;
689
+ const connectPromises = this.config.servers.map((serverConfig, index) => {
690
+ const callbackPort = UPSTREAM_BASE_PORT + index;
691
+ return this.connectUpstream(serverConfig, undefined, callbackPort)
692
+ .then(async (upstream) => {
578
693
  this.upstreams.set(serverConfig.name, upstream);
579
- }
580
- catch (error) {
694
+ // Clear from pending if it was there from a previous attempt
695
+ this.pendingAuth.delete(serverConfig.name);
696
+ this.log(` ${serverConfig.name}: connected (${upstream.tools.length} tools)`);
697
+ try {
698
+ await this.server.sendToolListChanged();
699
+ this.log(` ${serverConfig.name}: notified client of tool list change`);
700
+ }
701
+ catch (err) {
702
+ this.log(` ${serverConfig.name}: failed to notify tool list change: ${err}`);
703
+ }
704
+ })
705
+ .catch((error) => {
706
+ // Connection failed (likely OAuth timeout or auth error).
707
+ // Track as pending so we can retry and inform users on tool calls.
708
+ if (serverConfig.url && serverConfig.oauth) {
709
+ this.pendingAuth.set(serverConfig.name, { config: serverConfig, callbackPort });
710
+ this.log(` ${serverConfig.name}: pending OAuth authentication`);
711
+ }
581
712
  // Security: serverConfig.name is from config, not user input
582
713
  console.error(`Failed to connect to ${serverConfig.name}:`, error); // nosemgrep: unsafe-formatstring
583
- // Continue with other servers
584
- }
714
+ });
715
+ });
716
+ await Promise.allSettled(connectPromises);
717
+ // Signal that upstream connections are done (tools/list handler can proceed)
718
+ if (this.resolveUpstreamsReady) {
719
+ this.resolveUpstreamsReady();
720
+ this.resolveUpstreamsReady = null;
585
721
  }
586
722
  this.log(`Connected to ${this.upstreams.size}/${this.config.servers.length} upstreams`);
723
+ // Send a final tool list changed notification after all upstreams are connected.
724
+ // This ensures the client gets the complete tool list even if individual
725
+ // notifications were missed during parallel connection.
726
+ if (this.upstreams.size > 0) {
727
+ try {
728
+ await this.server.sendToolListChanged();
729
+ this.log("Sent final tool list changed notification");
730
+ }
731
+ catch (err) {
732
+ this.log(`Failed to send final tool list notification: ${err}`);
733
+ }
734
+ }
587
735
  // Report discovered tools to Sonoma
588
736
  if (this.sonomaClient) {
589
737
  const serversWithTools = Array.from(this.upstreams.entries()).map(([serverName, upstream]) => ({
@@ -600,22 +748,110 @@ export class McpGateway {
600
748
  this.log(`Failed to report tools: ${err}`);
601
749
  });
602
750
  }
603
- // Start the server (stdio transport to AI client)
604
- const transport = new StdioServerTransport();
605
- await this.server.connect(transport);
606
- // Detect AI client name from the MCP initialize handshake
607
- const clientVersion = this.server.getClientVersion();
608
- if (clientVersion?.name) {
609
- this.clientName = clientVersion.name;
610
- this.log(`Detected AI client: ${this.clientName} (${clientVersion.version ?? "unknown"})`);
751
+ this.log(`Gateway ready - ${this.upstreams.size} connected, ${this.pendingAuth.size} pending auth`);
752
+ // Start background retry for servers pending OAuth authentication.
753
+ // Retries every 30s with skipBrowserAuth=true (only succeeds if user
754
+ // completed OAuth via another path, e.g. standalone --login or manual URL).
755
+ if (this.pendingAuth.size > 0) {
756
+ this.startPendingAuthRetry();
757
+ }
758
+ }
759
+ /**
760
+ * Periodically retry connecting servers that are pending OAuth.
761
+ * Uses skipBrowserAuth=true so it won't open new browser tabs;
762
+ * it only succeeds if the user already completed auth elsewhere.
763
+ */
764
+ startPendingAuthRetry() {
765
+ const RETRY_INTERVAL_MS = 30_000; // 30 seconds
766
+ this.pendingAuthRetryInterval = setInterval(async () => {
767
+ if (this.pendingAuth.size === 0) {
768
+ if (this.pendingAuthRetryInterval) {
769
+ clearInterval(this.pendingAuthRetryInterval);
770
+ this.pendingAuthRetryInterval = null;
771
+ }
772
+ return;
773
+ }
774
+ for (const [name, { config, callbackPort }] of this.pendingAuth) {
775
+ try {
776
+ const upstream = await this.connectUpstream(config, undefined, callbackPort);
777
+ this.upstreams.set(name, upstream);
778
+ this.pendingAuth.delete(name);
779
+ this.log(`Pending auth resolved: ${name} (${upstream.tools.length} tools)`);
780
+ this.server.sendToolListChanged().catch(() => { });
781
+ }
782
+ catch {
783
+ // Still can't connect, will retry next interval
784
+ }
785
+ }
786
+ }, RETRY_INTERVAL_MS);
787
+ }
788
+ /**
789
+ * Start the HTTP proxy server for transparent per-server proxying.
790
+ * Plugins can connect to http://localhost:{port}/proxy/{serverName}/mcp
791
+ * to use tools through the gateway while keeping skills active.
792
+ */
793
+ async startHttpProxy(port) {
794
+ const callbacks = {
795
+ getUpstreams: () => {
796
+ const result = new Map();
797
+ for (const [name, upstream] of this.upstreams) {
798
+ result.set(name, {
799
+ name,
800
+ client: upstream.client,
801
+ connected: upstream.connected,
802
+ });
803
+ }
804
+ return result;
805
+ },
806
+ isToolBlocked: (serverName, toolName) => {
807
+ return this.isToolBlocked(serverName, toolName);
808
+ },
809
+ recordToolCall: (event) => {
810
+ this.recordEvent({
811
+ ...event,
812
+ timestamp: new Date().toISOString(),
813
+ });
814
+ },
815
+ getPendingAuthServers: () => {
816
+ return new Set(this.pendingAuth.keys());
817
+ },
818
+ getUpstreamUrl: (serverName) => {
819
+ const upstream = this.upstreams.get(serverName);
820
+ if (upstream?.config.url)
821
+ return upstream.config.url;
822
+ const pending = this.pendingAuth.get(serverName);
823
+ if (pending?.config.url)
824
+ return pending.config.url;
825
+ // Fall back to the config (available from startup, before connections)
826
+ const serverConfig = this.config.servers.find((s) => s.name === serverName);
827
+ return serverConfig?.url ?? undefined;
828
+ },
829
+ log: (message) => {
830
+ this.log(message);
831
+ },
832
+ };
833
+ this.httpProxy = new HttpProxyServer(port, callbacks);
834
+ await this.httpProxy.start();
835
+ // Log available proxy URLs
836
+ for (const [name] of this.upstreams) {
837
+ this.log(`HTTP proxy: ${this.httpProxy.getProxyUrl(name)}`);
611
838
  }
612
- this.log("Gateway ready - listening for requests");
613
839
  }
614
840
  /**
615
841
  * Stop the gateway and disconnect from all upstreams
616
842
  */
617
843
  async stop() {
618
844
  this.log("Stopping gateway...");
845
+ // Stop HTTP proxy server
846
+ if (this.httpProxy) {
847
+ await this.httpProxy.stop();
848
+ this.httpProxy = null;
849
+ }
850
+ // Stop pending auth retry
851
+ if (this.pendingAuthRetryInterval) {
852
+ clearInterval(this.pendingAuthRetryInterval);
853
+ this.pendingAuthRetryInterval = null;
854
+ }
619
855
  // Stop policy refresh
620
856
  if (this.policyRefreshInterval) {
621
857
  clearInterval(this.policyRefreshInterval);
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAW5C,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAc3E,wBAAwB;AACxB,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,aAAa;AAChD,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,aAAa;AAElD,0BAA0B;AAC1B,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,0BAA0B,GAAG,KAAK,CAAC,CAAC,WAAW;AACrD,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,aAAa;AAEpD,MAAM,OAAO,UAAU;IACb,MAAM,CAAgB;IACtB,MAAM,CAAS;IACf,SAAS,GAAoC,IAAI,GAAG,EAAE,CAAC;IACvD,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,GAAoB,EAAE,CAAC;IAC7B,KAAK,CAAU;IACf,YAAY,GAAwB,IAAI,CAAC;IACzC,MAAM,GAA0B,IAAI,CAAC;IACrC,qBAAqB,GAA0C,IAAI,CAAC;IACpE,kBAAkB,CAAqB;IACvC,OAAO,GAAG,KAAK,CAAC;IAChB,UAAU,GAAkB,IAAI,CAAC;IAEzC,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEnD,gDAAgD;QAChD,wEAAwE;QACxE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;gBACnC,QAAQ,EAAE,MAAM,CAAC,cAAc;gBAC/B,SAAS,EAAE,MAAM,CAAC,YAAY;gBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;aAC7B;SACF,CACF,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,GAAG,CAAC,OAAe,EAAE,GAAG,IAAe;QAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,2DAA2D;YAC3D,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,iCAAiC;QACnF,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACK,aAAa,CAAC,UAAkB,EAAE,QAAgB;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC;QAEjD,mEAAmE;QACnE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,IAAI,WAAW;YAAE,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAElC,wDAAwD;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACrD,kEAAkE;YAClE,MAAM,aAAa,GACjB,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC;YACpE,IAAI,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YAEjC,2BAA2B;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,0DAA0D;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,2DAA2D;YAC3D,OAAO,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,iEAAiE;QACjE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2FAA2F;QAC3F,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnD,gDAAgD;YAChD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC9D,mDAAmD;YACnD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE/B,yDAAyD;QACzD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;QACrC,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,SAAS;YACtB,CAAC,CAAC,QAAQ,KAAK,WAAW;YAC1B,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,cAAc,CAC1D,CAAC;QAEF,yEAAyE;QACzE,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CACN,2BAA2B,UAAU,IAAI,QAAQ,cAAc,cAAc,CAAC,WAAW,IAAI,cAAc,GAAG,CAC/G,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,UAAkB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnF,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,6BAA6B,IAAI,KAAK,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;QACtC,OAAO,OAAO,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,yDAAyD;QACzD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAC3B,sBAAsB,EACtB,KAAK,IAA8B,EAAE;YACnC,MAAM,QAAQ,GAAW,EAAE,CAAC;YAE5B,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAClC,gEAAgE;oBAChE,MAAM,cAAc,GAAS;wBAC3B,GAAG,IAAI;wBACP,IAAI,EAAE,GAAG,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE;wBACnC,WAAW,EAAE,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE;qBACzD,CAAC;oBACF,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,CAAC;YACnF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC,CACF,CAAC;QAEF,sDAAsD;QACtD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAC3B,qBAAqB,EACrB,KAAK,EAAE,OAAO,EAA2B,EAAE;YACzC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,6BAA6B;YAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6BAA6B,IAAI,iCAAiC;yBACzE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mBAAmB,UAAU,EAAE;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,UAAU,oCAAoC;yBAC/D;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAkB;oBAC3B,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,MAAM,EAAE,SAAS;oBACjB,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC5C,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAExB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,QAAQ,UAAU,IAAI,QAAQ,oCAAoC;yBACzE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,uBAAuB,UAAU,sCAAsC,CAAC,CAAC;gBAClF,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBACxB,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,uBAAuB,UAAU,uCAAuC;yBAC/E;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,yBAAyB,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC;YAE5D,IAAI,CAAC;gBACH,yBAAyB;gBACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC3C,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACnD,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,oBAAoB,IAAI,CAAC,CAAC,EAC5E,oBAAoB,CACrB,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;gBAE9D,IAAI,CAAC,WAAW,CAAC;oBACf,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,MAAM,EAAE,SAAS;oBACjB,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC5C,CAAC,CAAC;gBAEH,OAAO,MAAwB,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAE5E,IAAI,CAAC,WAAW,CAAC;oBACf,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,MAAM,EAAE,OAAO;oBACf,YAAY;oBACZ,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC5C,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE;yBACjE;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAuB;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,8BAA8B,CAAC,CAAC;QACvE,CAAC;QAED,6EAA6E;QAC7E,IAAI,GAAuC,CAAC;QAC5C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,GAAG,GAAG,EAA4B,CAAC;YACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,oBAAoB,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAuB;QAChD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAc,EACd,SAA4B,EAC5B,IAAY;QAEZ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,kBAAkB,OAAO,IAAI,EAAE,CAAC,CAAC,EACpF,kBAAkB,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAC3B,MAAuB,EACvB,kBAAuC;QAEvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAE/B,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,IAAI,MAAM,CACR;YACE,IAAI,EAAE,kBAAkB,UAAU,EAAE;YACpC,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE;gBACX,KAAK,EAAE;oBACL,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC1B,IAAI,KAAK,EAAE,CAAC;4BACV,IAAI,CAAC,GAAG,CAAC,gCAAgC,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACzE,OAAO;wBACT,CAAC;wBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBAChD,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;4BAC7B,IAAI,CAAC,GAAG,CAAC,sBAAsB,UAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;wBAC/E,CAAC;wBACD,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BAC9C,IAAI,CAAC,GAAG,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAC;wBAClE,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF;aACF;SACF,CACF,CAAC;QAEJ,IAAI,MAAc,CAAC;QACnB,IAAI,SAA4B,CAAC;QAEjC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAElD,+EAA+E;YAC/E,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;oBACtD,MAAM,eAAe,GAAI,WAAW,EAAE,OAAkC,IAAI,EAAE,CAAC;oBAC/E,WAAW,GAAG;wBACZ,GAAG,WAAW;wBACd,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,cAAc,EAAE;qBACnD,CAAC;oBACF,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,4BAA4B,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,wCAAwC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC7G,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,0DAA0D;YAC1D,MAAM,aAAa,GAAG,CAAC,CAAE,WAAW,EAAE,OAA8C,EAAE,aAAa,CAAC;YACpG,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC;YACzC,IAAI,YAA+C,CAAC;YAEpD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,wEAAwE;gBACxE,0EAA0E;gBAC1E,IAAI,CAAC;oBACH,YAAY,GAAG,MAAM,oBAAoB,CAAC;wBACxC,SAAS,EAAE,MAAM,CAAC,GAAG;wBACrB,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,KAAK,EAAE,IAAI,CAAC,kBAAkB;wBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,eAAe,EAAE,WAAW;wBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC,CAAC;oBACH,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,4BAA4B,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,mEAAmE;oBACnE,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,0DAA0D,CAAC,CAAC;YACvF,CAAC;YAED,6CAA6C;YAC7C,IAAI,CAAC;gBACH,MAAM,GAAG,UAAU,EAAE,CAAC;gBACtB,SAAS,GAAG,IAAI,6BAA6B,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;gBAClF,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,gCAAgC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,qCAAqC,CAAC,CAAC;gBAChE,MAAM,GAAG,UAAU,EAAE,CAAC;gBACtB,SAAS,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,UAAU,EAAE,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QAED,0CAA0C;QAC1C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAElD,4FAA4F;gBAC5F,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBAC9C,IAAI,CAAC,GAAG,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC;QAEF,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACxD,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,kBAAkB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1F,kBAAkB,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QAEtC,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAE9D,OAAO;YACL,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK;YACL,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,IAAI,CAAC;SAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,UAAkB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAEvC,IAAI,QAAQ,CAAC,iBAAiB,IAAI,sBAAsB,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,sCAAsC,UAAU,aAAa,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,2DAA2D;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACpE,sBAAsB,CACvB,CAAC;QACF,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAE7B,IAAI,CAAC,GAAG,CAAC,4BAA4B,UAAU,OAAO,KAAK,eAAe,QAAQ,CAAC,iBAAiB,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAEnI,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1E,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,gCAAgC;gBACnE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;gBAEzC,sDAAsD;gBACtD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,MAAM,YAAY,GAChB,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;oBACvC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5D,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,oBAAoB,UAAU,kBAAkB,CAAC,CAAC;oBAC3D,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBAC9C,IAAI,CAAC,GAAG,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,wBAAwB,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAoB;QACtC,gDAAgD;QAChD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAEjG,gDAAgD;QAChD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEpC,mCAAmC;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE3B,kDAAkD;YAClD,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC5C,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAElB,iCAAiC;YACjC,wDAAwD;YACxD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;YACrF,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5E,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,6DAA6D;gBAC7D,OAAO,CAAC,KAAK,CAAC,wBAAwB,YAAY,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,iCAAiC;gBACrG,8BAA8B;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QAExF,oCAAoC;QACpC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,UAAU;gBAC3D,UAAU;gBACV,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,WAAW,EAAE,IAAI,CAAC,WAAkD;iBACrE,CAAC,CAAC;aACJ,CAAC,CACH,CAAC;YACF,wCAAwC;YACxC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5D,IAAI,CAAC,GAAG,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kDAAkD;QAClD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAErC,0DAA0D;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACrD,IAAI,aAAa,EAAE,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAEhC,sBAAsB;QACtB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC1C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kFAAkF;gBAClF,oEAAoE;gBACpE,oFAAoF;gBACpF,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}