@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.
- package/README.md +104 -45
- package/dist/__tests__/config.test.js +28 -0
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/ssrf-protection.test.d.ts +2 -0
- package/dist/__tests__/ssrf-protection.test.d.ts.map +1 -0
- package/dist/__tests__/ssrf-protection.test.js +389 -0
- package/dist/__tests__/ssrf-protection.test.js.map +1 -0
- package/dist/auth/client.d.ts +2 -0
- package/dist/auth/client.d.ts.map +1 -1
- package/dist/auth/client.js +17 -15
- package/dist/auth/client.js.map +1 -1
- package/dist/auth/crypto.d.ts +23 -0
- package/dist/auth/crypto.d.ts.map +1 -0
- package/dist/auth/crypto.js +78 -0
- package/dist/auth/crypto.js.map +1 -0
- package/dist/auth/index.d.ts +4 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/server.d.ts +2 -0
- package/dist/auth/server.d.ts.map +1 -1
- package/dist/auth/server.js +337 -59
- package/dist/auth/server.js.map +1 -1
- package/dist/auth/storage.d.ts.map +1 -1
- package/dist/auth/storage.js +2 -72
- package/dist/auth/storage.js.map +1 -1
- package/dist/auth/upstream-oauth-provider.d.ts +41 -0
- package/dist/auth/upstream-oauth-provider.d.ts.map +1 -0
- package/dist/auth/upstream-oauth-provider.js +88 -0
- package/dist/auth/upstream-oauth-provider.js.map +1 -0
- package/dist/auth/upstream-oauth.d.ts +31 -0
- package/dist/auth/upstream-oauth.d.ts.map +1 -0
- package/dist/auth/upstream-oauth.js +79 -0
- package/dist/auth/upstream-oauth.js.map +1 -0
- package/dist/auth/upstream-token-store.d.ts +27 -0
- package/dist/auth/upstream-token-store.d.ts.map +1 -0
- package/dist/auth/upstream-token-store.js +103 -0
- package/dist/auth/upstream-token-store.js.map +1 -0
- package/dist/cli.js +91 -63
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +94 -9
- package/dist/config.js.map +1 -1
- package/dist/gateway.d.ts +23 -1
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +203 -41
- package/dist/gateway.js.map +1 -1
- package/dist/pattern-matcher.d.ts +47 -0
- package/dist/pattern-matcher.d.ts.map +1 -0
- package/dist/pattern-matcher.js +98 -0
- package/dist/pattern-matcher.js.map +1 -0
- package/dist/sonoma-client.d.ts +21 -6
- package/dist/sonoma-client.d.ts.map +1 -1
- package/dist/sonoma-client.js +45 -5
- package/dist/sonoma-client.js.map +1 -1
- package/dist/ssrf-protection.d.ts +59 -0
- package/dist/ssrf-protection.d.ts.map +1 -0
- package/dist/ssrf-protection.js +253 -0
- package/dist/ssrf-protection.js.map +1 -0
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- 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
|
|
206
|
-
//
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
//
|
|
221
|
-
// This
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
249
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
-
|
|
283
|
-
|
|
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
|
-
|
|
286
|
-
|
|
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":"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"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|