@sonoma-security/mcp-gateway 0.1.4 → 0.1.6

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 (62) hide show
  1. package/README.md +104 -45
  2. package/dist/__tests__/config.test.js +28 -0
  3. package/dist/__tests__/config.test.js.map +1 -1
  4. package/dist/__tests__/ssrf-protection.test.d.ts +2 -0
  5. package/dist/__tests__/ssrf-protection.test.d.ts.map +1 -0
  6. package/dist/__tests__/ssrf-protection.test.js +389 -0
  7. package/dist/__tests__/ssrf-protection.test.js.map +1 -0
  8. package/dist/auth/client.d.ts +2 -0
  9. package/dist/auth/client.d.ts.map +1 -1
  10. package/dist/auth/client.js +17 -15
  11. package/dist/auth/client.js.map +1 -1
  12. package/dist/auth/crypto.d.ts +23 -0
  13. package/dist/auth/crypto.d.ts.map +1 -0
  14. package/dist/auth/crypto.js +78 -0
  15. package/dist/auth/crypto.js.map +1 -0
  16. package/dist/auth/index.d.ts +4 -1
  17. package/dist/auth/index.d.ts.map +1 -1
  18. package/dist/auth/index.js +4 -1
  19. package/dist/auth/index.js.map +1 -1
  20. package/dist/auth/server.d.ts +2 -0
  21. package/dist/auth/server.d.ts.map +1 -1
  22. package/dist/auth/server.js +337 -59
  23. package/dist/auth/server.js.map +1 -1
  24. package/dist/auth/storage.d.ts.map +1 -1
  25. package/dist/auth/storage.js +2 -72
  26. package/dist/auth/storage.js.map +1 -1
  27. package/dist/auth/upstream-oauth-provider.d.ts +41 -0
  28. package/dist/auth/upstream-oauth-provider.d.ts.map +1 -0
  29. package/dist/auth/upstream-oauth-provider.js +88 -0
  30. package/dist/auth/upstream-oauth-provider.js.map +1 -0
  31. package/dist/auth/upstream-oauth.d.ts +31 -0
  32. package/dist/auth/upstream-oauth.d.ts.map +1 -0
  33. package/dist/auth/upstream-oauth.js +79 -0
  34. package/dist/auth/upstream-oauth.js.map +1 -0
  35. package/dist/auth/upstream-token-store.d.ts +27 -0
  36. package/dist/auth/upstream-token-store.d.ts.map +1 -0
  37. package/dist/auth/upstream-token-store.js +103 -0
  38. package/dist/auth/upstream-token-store.js.map +1 -0
  39. package/dist/cli.js +91 -63
  40. package/dist/cli.js.map +1 -1
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +94 -9
  43. package/dist/config.js.map +1 -1
  44. package/dist/gateway.d.ts +23 -1
  45. package/dist/gateway.d.ts.map +1 -1
  46. package/dist/gateway.js +203 -41
  47. package/dist/gateway.js.map +1 -1
  48. package/dist/pattern-matcher.d.ts +47 -0
  49. package/dist/pattern-matcher.d.ts.map +1 -0
  50. package/dist/pattern-matcher.js +98 -0
  51. package/dist/pattern-matcher.js.map +1 -0
  52. package/dist/sonoma-client.d.ts +21 -6
  53. package/dist/sonoma-client.d.ts.map +1 -1
  54. package/dist/sonoma-client.js +45 -5
  55. package/dist/sonoma-client.js.map +1 -1
  56. package/dist/ssrf-protection.d.ts +59 -0
  57. package/dist/ssrf-protection.d.ts.map +1 -0
  58. package/dist/ssrf-protection.js +253 -0
  59. package/dist/ssrf-protection.js.map +1 -0
  60. package/dist/types.d.ts +6 -2
  61. package/dist/types.d.ts.map +1 -1
  62. package/package.json +2 -2
@@ -0,0 +1,88 @@
1
+ /**
2
+ * OAuthClientProvider implementation for upstream MCP servers.
3
+ *
4
+ * Implements the MCP SDK's OAuthClientProvider interface so the SDK's
5
+ * `auth()` orchestrator can handle the full OAuth flow (discovery, DCR,
6
+ * PKCE, authorization, token exchange, refresh) for any upstream server.
7
+ *
8
+ * Design: `redirectToAuthorization()` captures the URL instead of opening
9
+ * the browser directly. The caller (gateway) controls when/how to open it,
10
+ * enabling serial auth flows across multiple servers.
11
+ */
12
+ const CLIENT_NAME = "Sonoma MCP Gateway";
13
+ export class UpstreamOAuthProvider {
14
+ serverUrl;
15
+ store;
16
+ callbackPort;
17
+ _debug;
18
+ /** Captured authorization URL after `redirectToAuthorization` is called */
19
+ pendingAuthorizationUrl;
20
+ constructor(options) {
21
+ this.serverUrl = options.serverUrl;
22
+ this.store = options.store;
23
+ this.callbackPort = options.callbackPort;
24
+ this._debug = options.debug ?? false;
25
+ }
26
+ get redirectUrl() {
27
+ return `http://localhost:${this.callbackPort}/callback`;
28
+ }
29
+ get clientMetadata() {
30
+ return {
31
+ client_name: CLIENT_NAME,
32
+ redirect_uris: [this.redirectUrl],
33
+ grant_types: ["authorization_code", "refresh_token"],
34
+ response_types: ["code"],
35
+ token_endpoint_auth_method: "none",
36
+ };
37
+ }
38
+ async clientInformation() {
39
+ return this.store.getClientInfo(this.serverUrl);
40
+ }
41
+ async saveClientInformation(info) {
42
+ this.store.saveClientInfo(this.serverUrl, info);
43
+ }
44
+ async tokens() {
45
+ return this.store.getTokens(this.serverUrl);
46
+ }
47
+ async saveTokens(tokens) {
48
+ this.store.saveTokens(this.serverUrl, tokens);
49
+ }
50
+ async redirectToAuthorization(authorizationUrl) {
51
+ // Capture the URL; caller will open the browser
52
+ this.pendingAuthorizationUrl = authorizationUrl;
53
+ this.log("Authorization URL captured (caller will open browser)");
54
+ }
55
+ async saveCodeVerifier(verifier) {
56
+ this.store.saveCodeVerifier(this.serverUrl, verifier);
57
+ }
58
+ async codeVerifier() {
59
+ const verifier = this.store.getCodeVerifier(this.serverUrl);
60
+ if (!verifier) {
61
+ throw new Error("No code verifier found for this server");
62
+ }
63
+ return verifier;
64
+ }
65
+ async invalidateCredentials(scope) {
66
+ switch (scope) {
67
+ case "all":
68
+ this.store.clearAll(this.serverUrl);
69
+ break;
70
+ case "client":
71
+ this.store.clearClientInfo(this.serverUrl);
72
+ break;
73
+ case "tokens":
74
+ this.store.clearTokens(this.serverUrl);
75
+ break;
76
+ case "verifier":
77
+ // Code verifier is transient; clearing it is optional
78
+ break;
79
+ }
80
+ }
81
+ log(msg) {
82
+ if (this._debug) {
83
+ // Security: msg is from developer code, not user input
84
+ console.error(`[upstream-oauth] ${msg}`); // nosemgrep: unsafe-formatstring
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=upstream-oauth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-oauth-provider.js","sourceRoot":"","sources":["../../src/auth/upstream-oauth-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * OAuth flow orchestrator for upstream MCP servers.
3
+ *
4
+ * Uses the SDK's `auth()` function to handle discovery, DCR, PKCE,
5
+ * authorization, token exchange, and refresh. Opens the browser for
6
+ * user consent when needed, using a separate callback port from
7
+ * Sonoma's own auth (19843 vs 19842).
8
+ */
9
+ import { UpstreamOAuthProvider } from "./upstream-oauth-provider.js";
10
+ import type { UpstreamTokenStore } from "./upstream-token-store.js";
11
+ export interface AuthenticateUpstreamOptions {
12
+ serverUrl: string;
13
+ serverName: string;
14
+ store: UpstreamTokenStore;
15
+ debug?: boolean;
16
+ }
17
+ /**
18
+ * Authenticate with an upstream MCP server that requires OAuth.
19
+ *
20
+ * Flow:
21
+ * 1. Create an OAuthClientProvider for this server
22
+ * 2. Call `auth()` which checks existing tokens / tries refresh
23
+ * 3. If "AUTHORIZED", tokens are ready
24
+ * 4. If "REDIRECT", open browser for user consent, wait for callback,
25
+ * then complete the auth code exchange
26
+ *
27
+ * Returns the provider (which can be passed to transports for mid-session refresh).
28
+ * Throws if authentication fails.
29
+ */
30
+ export declare function authenticateUpstream(options: AuthenticateUpstreamOptions): Promise<UpstreamOAuthProvider>;
31
+ //# sourceMappingURL=upstream-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-oauth.d.ts","sourceRoot":"","sources":["../../src/auth/upstream-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAMpE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA+DhC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * OAuth flow orchestrator for upstream MCP servers.
3
+ *
4
+ * Uses the SDK's `auth()` function to handle discovery, DCR, PKCE,
5
+ * authorization, token exchange, and refresh. Opens the browser for
6
+ * user consent when needed, using a separate callback port from
7
+ * Sonoma's own auth (19843 vs 19842).
8
+ */
9
+ import { auth } from "@modelcontextprotocol/sdk/client/auth.js";
10
+ import { UpstreamOAuthProvider } from "./upstream-oauth-provider.js";
11
+ import { openBrowser } from "./client.js";
12
+ import { startCallbackServer } from "./server.js";
13
+ const UPSTREAM_CALLBACK_PORT = 19843;
14
+ /**
15
+ * Authenticate with an upstream MCP server that requires OAuth.
16
+ *
17
+ * Flow:
18
+ * 1. Create an OAuthClientProvider for this server
19
+ * 2. Call `auth()` which checks existing tokens / tries refresh
20
+ * 3. If "AUTHORIZED", tokens are ready
21
+ * 4. If "REDIRECT", open browser for user consent, wait for callback,
22
+ * then complete the auth code exchange
23
+ *
24
+ * Returns the provider (which can be passed to transports for mid-session refresh).
25
+ * Throws if authentication fails.
26
+ */
27
+ export async function authenticateUpstream(options) {
28
+ const { serverUrl, serverName, store, debug = false } = options;
29
+ const log = (msg) => {
30
+ if (debug) {
31
+ // Security: msg is from developer code, not user input
32
+ console.error(`[upstream-oauth] ${msg}`); // nosemgrep: unsafe-formatstring
33
+ }
34
+ };
35
+ store.setServerName(serverUrl, serverName);
36
+ const provider = new UpstreamOAuthProvider({
37
+ serverUrl,
38
+ store,
39
+ callbackPort: UPSTREAM_CALLBACK_PORT,
40
+ debug,
41
+ });
42
+ // First auth() call: checks existing tokens, tries refresh, or initiates redirect
43
+ log(`Authenticating with ${serverName} (${serverUrl})...`);
44
+ const result = await auth(provider, { serverUrl });
45
+ if (result === "AUTHORIZED") {
46
+ log(`Already authorized with ${serverName}`);
47
+ return provider;
48
+ }
49
+ // result === "REDIRECT": provider captured the authorization URL
50
+ if (!provider.pendingAuthorizationUrl) {
51
+ throw new Error(`Auth flow returned REDIRECT but no authorization URL was captured for ${serverName}`);
52
+ }
53
+ const authUrl = provider.pendingAuthorizationUrl.toString();
54
+ console.error(`\nOpening browser to authenticate with ${serverName}...`);
55
+ console.error(`If browser doesn't open, visit:\n${authUrl}\n`);
56
+ // Start callback server and open browser
57
+ const callbackPromise = startCallbackServer({
58
+ port: UPSTREAM_CALLBACK_PORT,
59
+ debug,
60
+ serverName,
61
+ });
62
+ await openBrowser(authUrl);
63
+ // Wait for the authorization code
64
+ const callbackResult = await callbackPromise;
65
+ // State validation is handled internally by the MCP SDK's auth() function.
66
+ // The provider's codeVerifier storage implicitly binds the session.
67
+ log(`Received authorization code from ${serverName}`);
68
+ // Second auth() call: exchange the authorization code for tokens
69
+ const exchangeResult = await auth(provider, {
70
+ serverUrl,
71
+ authorizationCode: callbackResult.code,
72
+ });
73
+ if (exchangeResult !== "AUTHORIZED") {
74
+ throw new Error(`Token exchange failed for ${serverName}: unexpected result "${exchangeResult}"`);
75
+ }
76
+ log(`Successfully authenticated with ${serverName}`);
77
+ return provider;
78
+ }
79
+ //# sourceMappingURL=upstream-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-oauth.js","sourceRoot":"","sources":["../../src/auth/upstream-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,sBAAsB,GAAG,KAAK,CAAC;AASrC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAoC;IAEpC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEhE,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,IAAI,KAAK,EAAE,CAAC;YACV,uDAAuD;YACvD,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC,iCAAiC;QAC7E,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;QACzC,SAAS;QACT,KAAK;QACL,YAAY,EAAE,sBAAsB;QACpC,KAAK;KACN,CAAC,CAAC;IAEH,kFAAkF;IAClF,GAAG,CAAC,uBAAuB,UAAU,KAAK,SAAS,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAEnD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,GAAG,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iEAAiE;IACjE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yEAAyE,UAAU,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,0CAA0C,UAAU,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,oCAAoC,OAAO,IAAI,CAAC,CAAC;IAE/D,yCAAyC;IACzC,MAAM,eAAe,GAAG,mBAAmB,CAAC;QAC1C,IAAI,EAAE,sBAAsB;QAC5B,KAAK;QACL,UAAU;KACX,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAE3B,kCAAkC;IAClC,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC;IAC7C,2EAA2E;IAC3E,oEAAoE;IACpE,GAAG,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;IAEtD,iEAAiE;IACjE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;QAC1C,SAAS;QACT,iBAAiB,EAAE,cAAc,CAAC,IAAI;KACvC,CAAC,CAAC;IAEH,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,wBAAwB,cAAc,GAAG,CAAC,CAAC;IACpG,CAAC;IAED,GAAG,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Per-server token storage for upstream MCP servers that require OAuth.
3
+ *
4
+ * Stores credentials in ~/.sonoma/upstream-credentials.json, encrypted with
5
+ * the same AES-256-GCM scheme used for Sonoma gateway credentials.
6
+ * Each server is keyed by its URL origin (e.g., "https://mcp.sentry.dev").
7
+ */
8
+ import type { OAuthTokens, OAuthClientInformationMixed } from "@modelcontextprotocol/sdk/shared/auth.js";
9
+ export declare class UpstreamTokenStore {
10
+ private store;
11
+ private load;
12
+ private save;
13
+ private getServer;
14
+ getTokens(serverUrl: string): OAuthTokens | undefined;
15
+ saveTokens(serverUrl: string, tokens: OAuthTokens): void;
16
+ clearTokens(serverUrl: string): void;
17
+ getClientInfo(serverUrl: string): OAuthClientInformationMixed | undefined;
18
+ saveClientInfo(serverUrl: string, info: OAuthClientInformationMixed): void;
19
+ clearClientInfo(serverUrl: string): void;
20
+ getCodeVerifier(serverUrl: string): string | undefined;
21
+ saveCodeVerifier(serverUrl: string, verifier: string): void;
22
+ setServerName(serverUrl: string, name: string): void;
23
+ clearAll(serverUrl: string): void;
24
+ /** Clear credentials for every upstream server. */
25
+ clearAllServers(): void;
26
+ }
27
+ //# sourceMappingURL=upstream-token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-token-store.d.ts","sourceRoot":"","sources":["../../src/auth/upstream-token-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAsBzG,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAwC;IAErD,OAAO,CAAC,IAAI;IAoBZ,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,SAAS;IASjB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIrD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAOxD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMpC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS;IAIzE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,IAAI;IAM1E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMxC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM3D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMpD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOjC,mDAAmD;IACnD,eAAe,IAAI,IAAI;CAIxB"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Per-server token storage for upstream MCP servers that require OAuth.
3
+ *
4
+ * Stores credentials in ~/.sonoma/upstream-credentials.json, encrypted with
5
+ * the same AES-256-GCM scheme used for Sonoma gateway credentials.
6
+ * Each server is keyed by its URL origin (e.g., "https://mcp.sentry.dev").
7
+ */
8
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { SONOMA_DIR, ensureSonomaDir, encrypt, decrypt } from "./crypto.js";
11
+ const UPSTREAM_CREDENTIALS_PATH = join(SONOMA_DIR, "upstream-credentials.json");
12
+ function getServerKey(serverUrl) {
13
+ const url = new URL(serverUrl);
14
+ return url.origin;
15
+ }
16
+ export class UpstreamTokenStore {
17
+ store = null;
18
+ load() {
19
+ if (this.store)
20
+ return this.store;
21
+ if (!existsSync(UPSTREAM_CREDENTIALS_PATH)) {
22
+ this.store = { servers: {} };
23
+ return this.store;
24
+ }
25
+ try {
26
+ const encryptedData = readFileSync(UPSTREAM_CREDENTIALS_PATH, "utf-8");
27
+ const decrypted = decrypt(encryptedData);
28
+ this.store = JSON.parse(decrypted);
29
+ return this.store;
30
+ }
31
+ catch {
32
+ // If decryption fails (e.g., machine changed), start fresh
33
+ this.store = { servers: {} };
34
+ return this.store;
35
+ }
36
+ }
37
+ save() {
38
+ ensureSonomaDir();
39
+ const data = JSON.stringify(this.load(), null, 2);
40
+ const encrypted = encrypt(data);
41
+ writeFileSync(UPSTREAM_CREDENTIALS_PATH, encrypted, { mode: 0o600 });
42
+ }
43
+ getServer(serverUrl) {
44
+ const store = this.load();
45
+ const key = getServerKey(serverUrl);
46
+ if (!store.servers[key]) {
47
+ store.servers[key] = {};
48
+ }
49
+ return store.servers[key];
50
+ }
51
+ getTokens(serverUrl) {
52
+ return this.getServer(serverUrl).tokens;
53
+ }
54
+ saveTokens(serverUrl, tokens) {
55
+ const server = this.getServer(serverUrl);
56
+ server.tokens = tokens;
57
+ server.lastAuthenticated = Date.now();
58
+ this.save();
59
+ }
60
+ clearTokens(serverUrl) {
61
+ const server = this.getServer(serverUrl);
62
+ delete server.tokens;
63
+ this.save();
64
+ }
65
+ getClientInfo(serverUrl) {
66
+ return this.getServer(serverUrl).clientInfo;
67
+ }
68
+ saveClientInfo(serverUrl, info) {
69
+ const server = this.getServer(serverUrl);
70
+ server.clientInfo = info;
71
+ this.save();
72
+ }
73
+ clearClientInfo(serverUrl) {
74
+ const server = this.getServer(serverUrl);
75
+ delete server.clientInfo;
76
+ this.save();
77
+ }
78
+ getCodeVerifier(serverUrl) {
79
+ return this.getServer(serverUrl).codeVerifier;
80
+ }
81
+ saveCodeVerifier(serverUrl, verifier) {
82
+ const server = this.getServer(serverUrl);
83
+ server.codeVerifier = verifier;
84
+ this.save();
85
+ }
86
+ setServerName(serverUrl, name) {
87
+ const server = this.getServer(serverUrl);
88
+ server.serverName = name;
89
+ this.save();
90
+ }
91
+ clearAll(serverUrl) {
92
+ const store = this.load();
93
+ const key = getServerKey(serverUrl);
94
+ delete store.servers[key];
95
+ this.save();
96
+ }
97
+ /** Clear credentials for every upstream server. */
98
+ clearAllServers() {
99
+ this.store = { servers: {} };
100
+ this.save();
101
+ }
102
+ }
103
+ //# sourceMappingURL=upstream-token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-token-store.js","sourceRoot":"","sources":["../../src/auth/upstream-token-store.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -11,7 +11,7 @@ import { parseArgs } from "node:util";
11
11
  import { readFileSync, existsSync } from "node:fs";
12
12
  import { McpGateway } from "./gateway.js";
13
13
  import { loadConfig, findClaudeDesktopConfig, loadFromParentConfig, autoDetectConfig } from "./config.js";
14
- import { login, logout, getAuthStatus, ensureValidToken } from "./auth/index.js";
14
+ import { login, logout, getAuthStatus, ensureValidToken, loadCredentials, UpstreamTokenStore } from "./auth/index.js";
15
15
  import { SonomaClient } from "./sonoma-client.js";
16
16
  const DEFAULT_SONOMA_ENDPOINT = "https://app.sonoma.dev";
17
17
  const MDM_CONFIG_PATH = "/usr/local/etc/sonoma/config";
@@ -121,6 +121,7 @@ async function main() {
121
121
  login: { type: "boolean" },
122
122
  logout: { type: "boolean" },
123
123
  status: { type: "boolean" },
124
+ reauth: { type: "boolean" },
124
125
  endpoint: { type: "string", short: "e" },
125
126
  },
126
127
  strict: true,
@@ -155,6 +156,12 @@ async function main() {
155
156
  }
156
157
  process.exit(0);
157
158
  }
159
+ // Clear upstream OAuth tokens (forces re-authentication on next connect)
160
+ if (values.reauth) {
161
+ const store = new UpstreamTokenStore();
162
+ store.clearAllServers();
163
+ console.error("Cleared all upstream OAuth credentials. Servers will re-authenticate on connect.");
164
+ }
158
165
  // Gateway mode
159
166
  let config;
160
167
  if (values["mcp-json-path"]) {
@@ -202,10 +209,20 @@ async function main() {
202
209
  gatewayEnabled: mdmConfig.gatewayEnabled,
203
210
  }));
204
211
  }
205
- // Set endpoint priority: CLI flag > MDM gateway endpoint > default
206
- // Note: sonomaEndpoint was set from --endpoint flag, defaults to DEFAULT_SONOMA_ENDPOINT
207
- if (!config.sonomaEndpoint) {
208
- config.sonomaEndpoint = values.endpoint || mdmConfig.gatewayEndpoint || sonomaEndpoint;
212
+ // Set endpoint priority: CLI flag > MDM config > gateway config > stored credentials
213
+ // Stored credentials contain the endpoint from a previous --login, so the user
214
+ // doesn't need to re-specify it on every run.
215
+ // Note: We intentionally don't fall back to DEFAULT_SONOMA_ENDPOINT here.
216
+ // If no endpoint is configured anywhere, the gateway runs in offline mode.
217
+ const storedEndpoint = loadCredentials()?.sonomaEndpoint;
218
+ const originalConfigEndpoint = config.sonomaEndpoint;
219
+ const explicitEndpoint = values.endpoint || mdmConfig.gatewayEndpoint || originalConfigEndpoint || storedEndpoint;
220
+ if (explicitEndpoint) {
221
+ config.sonomaEndpoint = explicitEndpoint;
222
+ }
223
+ if (values.debug) {
224
+ const source = values.endpoint ? "CLI flag" : mdmConfig.gatewayEndpoint ? "MDM config" : originalConfigEndpoint ? "gateway config" : storedEndpoint ? "stored credentials" : "none";
225
+ console.error("[cli] Endpoint:", explicitEndpoint || "(offline mode)", "(source:", source + ")");
209
226
  }
210
227
  // Store org API key in config for gateway
211
228
  if (mdmConfig.apiKey) {
@@ -217,73 +234,83 @@ async function main() {
217
234
  // Determine auth mode from MDM config or policy
218
235
  // Default: user_id (prompt for OAuth login)
219
236
  let requiredAuthMode = mdmConfig.gatewayAuthMode || "user_id";
220
- // Try to ensure we have a valid token (refreshes if expired)
221
- // This handles the case where user has old/expired credentials
222
- const hasValidToken = await ensureValidToken({
223
- sonomaEndpoint: config.sonomaEndpoint,
224
- debug: values.debug,
225
- });
226
- if (values.debug) {
227
- console.error(`[cli] Token validation: ${hasValidToken ? "valid" : "invalid/missing"}`);
228
- }
229
- // Check auth status (now accurate after ensureValidToken)
230
- let authStatus = getAuthStatus(config.sonomaEndpoint);
231
- // Fetch policy to check if admin overrides auth mode
232
- if (config.sonomaEndpoint && config.sonomaApiKey) {
233
- const tempClient = new SonomaClient({
234
- endpoint: config.sonomaEndpoint,
235
- orgApiKey: config.sonomaApiKey,
237
+ // Only attempt authentication if a Sonoma endpoint is explicitly configured
238
+ // This allows the gateway to run in "offline" mode for local testing
239
+ let authStatus = { loggedIn: false, hasRefreshToken: false };
240
+ if (config.sonomaEndpoint) {
241
+ // Try to ensure we have a valid token (refreshes if expired)
242
+ // This handles the case where user has old/expired credentials
243
+ const hasValidToken = await ensureValidToken({
244
+ sonomaEndpoint: config.sonomaEndpoint,
236
245
  debug: values.debug,
237
246
  });
238
- try {
239
- const policy = await tempClient.fetchPolicy();
240
- if (values.debug) {
241
- console.error(`[cli] Policy: mode=${policy.mode}, authMode=${policy.gatewayAuthMode}`);
247
+ if (values.debug) {
248
+ console.error(`[cli] Token validation: ${hasValidToken ? "valid" : "invalid/missing"}`);
249
+ }
250
+ // Check auth status (now accurate after ensureValidToken)
251
+ authStatus = getAuthStatus(config.sonomaEndpoint);
252
+ // Fetch policy to check if admin overrides auth mode
253
+ if (config.sonomaApiKey) {
254
+ const tempClient = new SonomaClient({
255
+ endpoint: config.sonomaEndpoint,
256
+ orgApiKey: config.sonomaApiKey,
257
+ debug: values.debug,
258
+ });
259
+ try {
260
+ const policy = await tempClient.fetchPolicy();
261
+ if (values.debug) {
262
+ console.error(`[cli] Policy: authMode=${policy.gatewayAuthMode}, ${policy.list.length} rules`);
263
+ }
264
+ // Admin-set policy overrides MDM config
265
+ if (policy.gatewayAuthMode) {
266
+ requiredAuthMode = policy.gatewayAuthMode;
267
+ }
242
268
  }
243
- // Admin-set policy overrides MDM config
244
- if (policy.gatewayAuthMode) {
245
- requiredAuthMode = policy.gatewayAuthMode;
269
+ catch (error) {
270
+ if (values.debug) {
271
+ console.error("[cli] Failed to fetch policy:", error);
272
+ }
273
+ // Continue anyway - will use MDM config or default
246
274
  }
247
275
  }
248
- catch (error) {
249
- if (values.debug) {
250
- console.error("[cli] Failed to fetch policy:", error);
251
- }
252
- // Continue anyway - will use MDM config or default
276
+ if (values.debug) {
277
+ console.error(`[cli] Required auth mode: ${requiredAuthMode}`);
253
278
  }
254
- }
255
- if (values.debug) {
256
- console.error(`[cli] Required auth mode: ${requiredAuthMode}`);
257
- }
258
- // Handle authentication based on required mode
259
- if (requiredAuthMode === "user_id" && !authStatus.loggedIn) {
260
- // User mode: require OAuth login
261
- console.error("User authentication required for MCP visibility.");
262
- console.error("Opening browser to login...");
263
- console.error("");
264
- await login({ sonomaEndpoint: config.sonomaEndpoint, debug: values.debug });
265
- authStatus = getAuthStatus();
266
- if (!authStatus.loggedIn) {
267
- console.error("Login required but not completed. Exiting.");
268
- process.exit(1);
279
+ // Handle authentication based on required mode
280
+ if (requiredAuthMode === "user_id" && !authStatus.loggedIn) {
281
+ // User mode: require OAuth login
282
+ console.error("User authentication required for MCP visibility.");
283
+ console.error("Opening browser to login...");
284
+ console.error("");
285
+ await login({ sonomaEndpoint: config.sonomaEndpoint, debug: values.debug });
286
+ authStatus = getAuthStatus();
287
+ if (!authStatus.loggedIn) {
288
+ console.error("Login required but not completed. Exiting.");
289
+ process.exit(1);
290
+ }
269
291
  }
270
- }
271
- else if (requiredAuthMode === "org_key" && !config.sonomaApiKey && !authStatus.loggedIn) {
272
- // Org key mode but no key available - fall back to OAuth
273
- console.error("No API key found. Opening browser to login...");
274
- console.error("");
275
- await login({ sonomaEndpoint: config.sonomaEndpoint, debug: values.debug });
276
- authStatus = getAuthStatus();
277
- }
278
- if (values.debug) {
279
- if (authStatus.loggedIn) {
280
- console.error("[cli] Using OAuth token (user-linked telemetry)");
292
+ else if (requiredAuthMode === "org_key" && !config.sonomaApiKey && !authStatus.loggedIn) {
293
+ // Org key mode but no key available - fall back to OAuth
294
+ console.error("No API key found. Opening browser to login...");
295
+ console.error("");
296
+ await login({ sonomaEndpoint: config.sonomaEndpoint, debug: values.debug });
297
+ authStatus = getAuthStatus();
281
298
  }
282
- else if (config.sonomaApiKey) {
283
- console.error("[cli] Using org API key (device-level telemetry)");
299
+ if (values.debug) {
300
+ if (authStatus.loggedIn) {
301
+ console.error("[cli] Using OAuth token (user-linked telemetry)");
302
+ }
303
+ else if (config.sonomaApiKey) {
304
+ console.error("[cli] Using org API key (device-level telemetry)");
305
+ }
306
+ else {
307
+ console.error("[cli] Warning: No authentication available");
308
+ }
284
309
  }
285
- else {
286
- console.error("[cli] Warning: No authentication available");
310
+ }
311
+ else {
312
+ if (values.debug) {
313
+ console.error("[cli] No Sonoma endpoint configured - running in offline mode");
287
314
  }
288
315
  }
289
316
  const gateway = new McpGateway(config);
@@ -329,6 +356,7 @@ AUTH OPTIONS:
329
356
  --login Authenticate with Sonoma (opens browser)
330
357
  --logout Clear stored credentials
331
358
  --status Show authentication status
359
+ --reauth Clear upstream OAuth tokens and re-authenticate
332
360
  -e, --endpoint <url> Sonoma API endpoint (default: https://app.sonoma.dev)
333
361
 
334
362
  QUICKSTART (zero-config):
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AACzD,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAUvD;;;;;;;;;;;;GAYG;AACH,SAAS,YAAY;IACnB,MAAM,MAAM,GAAc;QACxB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,KAAK;KACtB,CAAC;IAEF,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC9C,yDAAyD;QACzD,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACxC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAClD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,gCAAgC;gBAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAElD,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,uCAAuC;gBACvC,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBAED,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,QAAQ,OAAO,EAAE,CAAC;oBAChB,KAAK,SAAS;wBACZ,IAAI,CAAC,MAAM,CAAC,MAAM;4BAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;wBAC1C,MAAM;oBACR,KAAK,UAAU;wBACb,IAAI,CAAC,MAAM,CAAC,QAAQ;4BAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;wBAC9C,2DAA2D;wBAC3D,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,EAAE,CAAC;4BACrC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;wBAC5E,CAAC;wBACD,MAAM;oBACR,KAAK,iBAAiB;wBACpB,MAAM,CAAC,cAAc,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;wBAC1D,MAAM;oBACR,KAAK,kBAAkB;wBACrB,IAAI,CAAC,MAAM,CAAC,eAAe;4BAAE,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;wBAC5D,MAAM;oBACR,KAAK,mBAAmB;wBACtB,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;4BAC5E,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;wBACjC,CAAC;wBACD,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,OAAO,EAAE;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACrC,gEAAgE;YAChE,2EAA2E;YAC3E,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACnC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACxC,gBAAgB;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;SACzC;QACD,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,IAAI,uBAAuB,CAAC;IAElE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yEAAyE;IACzE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACvC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACpG,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC;IAEX,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5B,sDAAsD;QACtD,iDAAiD;QACjD,OAAO,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,IAAI,cAAc,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC;YAC3F,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;YACrF,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC;YAChD,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM;YAC7B,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,cAAc,EAAE,SAAS,CAAC,cAAc;SACzC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,qFAAqF;IACrF,+EAA+E;IAC/E,8CAA8C;IAC9C,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,cAAc,GAAG,eAAe,EAAE,EAAE,cAAc,CAAC;IACzD,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,eAAe,IAAI,sBAAsB,IAAI,cAAc,CAAC;IAClH,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,cAAc,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC;QACpL,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IACnG,CAAC;IAED,0CAA0C;IAC1C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,4CAA4C;IAC5C,IAAI,gBAAgB,GAA0B,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC;IAErF,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,UAAU,GAKV,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAEhD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,6DAA6D;QAC7D,+DAA+D;QAC/D,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;YAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,2BAA2B,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,0DAA0D;QAC1D,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAElD,qDAAqD;QACrD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC;gBAClC,QAAQ,EAAE,MAAM,CAAC,cAAc;gBAC/B,SAAS,EAAE,MAAM,CAAC,YAAY;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;gBAE9C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACjG,CAAC;gBAED,wCAAwC;gBACxC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC3B,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBACD,mDAAmD;YACrD,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,6BAA6B,gBAAgB,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,+CAA+C;QAC/C,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC3D,iCAAiC;YACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,KAAK,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5E,UAAU,GAAG,aAAa,EAAE,CAAC;YAE7B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1F,yDAAyD;YACzD,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,KAAK,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5E,UAAU,GAAG,aAAa,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAEvC,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,mEAAmE;IACnE,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDf,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAcjE;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAe5D;AAsBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,SAAW,GAAG,aAAa,CAyD9F;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,EAAE,CAyDvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAwBvD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,UAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoD5F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAqFjE;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAmB5D;AA0BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,SAAW,GAAG,aAAa,CAsE9F;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,EAAE,CAyDvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAwBvD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,UAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsD5F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}