@nestr/mcp 0.1.8
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/LICENSE +21 -0
- package/README.md +228 -0
- package/build/api/client.d.ts +211 -0
- package/build/api/client.d.ts.map +1 -0
- package/build/api/client.js +279 -0
- package/build/api/client.js.map +1 -0
- package/build/http.d.ts +25 -0
- package/build/http.d.ts.map +1 -0
- package/build/http.js +810 -0
- package/build/http.js.map +1 -0
- package/build/index.d.ts +15 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +62 -0
- package/build/index.js.map +1 -0
- package/build/oauth/config.d.ts +70 -0
- package/build/oauth/config.d.ts.map +1 -0
- package/build/oauth/config.js +86 -0
- package/build/oauth/config.js.map +1 -0
- package/build/oauth/flow.d.ts +113 -0
- package/build/oauth/flow.d.ts.map +1 -0
- package/build/oauth/flow.js +233 -0
- package/build/oauth/flow.js.map +1 -0
- package/build/oauth/storage.d.ts +65 -0
- package/build/oauth/storage.d.ts.map +1 -0
- package/build/oauth/storage.js +222 -0
- package/build/oauth/storage.js.map +1 -0
- package/build/server.d.ts +11 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +383 -0
- package/build/server.js.map +1 -0
- package/build/tools/index.d.ts +1049 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +711 -0
- package/build/tools/index.js.map +1 -0
- package/package.json +58 -0
- package/web/index.html +595 -0
- package/web/styles.css +700 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nestr MCP Server - stdio entry point
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx @nestr/mcp
|
|
6
|
+
*
|
|
7
|
+
* Authentication (one of the following):
|
|
8
|
+
* NESTR_API_KEY - Your Nestr API key (get from workspace settings)
|
|
9
|
+
* NESTR_OAUTH_TOKEN - OAuth Bearer token from Nestr OAuth flow
|
|
10
|
+
*
|
|
11
|
+
* Optional environment variables:
|
|
12
|
+
* NESTR_API_BASE - API base URL (default: https://app.nestr.io/api)
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nestr MCP Server - stdio entry point
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx @nestr/mcp
|
|
6
|
+
*
|
|
7
|
+
* Authentication (one of the following):
|
|
8
|
+
* NESTR_API_KEY - Your Nestr API key (get from workspace settings)
|
|
9
|
+
* NESTR_OAUTH_TOKEN - OAuth Bearer token from Nestr OAuth flow
|
|
10
|
+
*
|
|
11
|
+
* Optional environment variables:
|
|
12
|
+
* NESTR_API_BASE - API base URL (default: https://app.nestr.io/api)
|
|
13
|
+
*/
|
|
14
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
15
|
+
import { createServer } from "./server.js";
|
|
16
|
+
async function main() {
|
|
17
|
+
// Validate authentication is present
|
|
18
|
+
if (!process.env.NESTR_API_KEY && !process.env.NESTR_OAUTH_TOKEN) {
|
|
19
|
+
console.error("Error: Authentication required.");
|
|
20
|
+
console.error("");
|
|
21
|
+
console.error("Option 1: OAuth Token (Recommended)");
|
|
22
|
+
console.error(" OAuth respects your user-specific permissions in Nestr.");
|
|
23
|
+
console.error(" Use an OAuth Bearer token from the Nestr OAuth flow.");
|
|
24
|
+
console.error("");
|
|
25
|
+
console.error(" Then set: export NESTR_OAUTH_TOKEN=your-oauth-token");
|
|
26
|
+
console.error("");
|
|
27
|
+
console.error("Option 2: API Key");
|
|
28
|
+
console.error(" API keys have full workspace access (ignores user permissions).");
|
|
29
|
+
console.error(" 1. Go to your Nestr workspace");
|
|
30
|
+
console.error(" 2. Click Settings (gear icon)");
|
|
31
|
+
console.error(" 3. Go to Integrations tab");
|
|
32
|
+
console.error(" 4. Find 'Workspace API access' and click Configure");
|
|
33
|
+
console.error(" 5. Create a new API key");
|
|
34
|
+
console.error("");
|
|
35
|
+
console.error(" Then set: export NESTR_API_KEY=your-api-key");
|
|
36
|
+
console.error("");
|
|
37
|
+
console.error("Or configure in your MCP client (e.g., Claude Desktop):");
|
|
38
|
+
console.error(JSON.stringify({
|
|
39
|
+
mcpServers: {
|
|
40
|
+
nestr: {
|
|
41
|
+
command: "npx",
|
|
42
|
+
args: ["-y", "@nestr/mcp"],
|
|
43
|
+
env: {
|
|
44
|
+
NESTR_OAUTH_TOKEN: "your-oauth-token"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, null, 2));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const server = createServer();
|
|
52
|
+
const transport = new StdioServerTransport();
|
|
53
|
+
await server.connect(transport);
|
|
54
|
+
// Log to stderr so it doesn't interfere with MCP protocol on stdout
|
|
55
|
+
console.error("Nestr MCP server running on stdio");
|
|
56
|
+
console.error("Connected to:", process.env.NESTR_API_BASE || "https://app.nestr.io/api");
|
|
57
|
+
}
|
|
58
|
+
main().catch((error) => {
|
|
59
|
+
console.error("Fatal error:", error);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,qCAAqC;IACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;oBAC1B,GAAG,EAAE;wBACH,iBAAiB,EAAE,kBAAkB;qBACtC;iBACF;aACF;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,oEAAoE;IACpE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,0BAA0B,CAAC,CAAC;AAC3F,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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Configuration for Nestr MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP Authorization Specification using Nestr as the authorization server.
|
|
5
|
+
* See: https://modelcontextprotocol.io/specification/draft/basic/authorization
|
|
6
|
+
*/
|
|
7
|
+
export interface OAuthConfig {
|
|
8
|
+
authorizationEndpoint: string;
|
|
9
|
+
tokenEndpoint: string;
|
|
10
|
+
resourceIdentifier: string;
|
|
11
|
+
clientId?: string;
|
|
12
|
+
clientSecret?: string;
|
|
13
|
+
scopes: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get OAuth configuration from environment
|
|
17
|
+
*
|
|
18
|
+
* For local development, set:
|
|
19
|
+
* NESTR_API_BASE=http://localhost:4001/api
|
|
20
|
+
* NESTR_OAUTH_CLIENT_ID=your-local-client-id
|
|
21
|
+
*/
|
|
22
|
+
export declare function getOAuthConfig(): OAuthConfig;
|
|
23
|
+
/**
|
|
24
|
+
* OAuth Protected Resource Metadata (RFC 9728)
|
|
25
|
+
*
|
|
26
|
+
* This is returned at /.well-known/oauth-protected-resource
|
|
27
|
+
* to inform MCP clients how to authenticate.
|
|
28
|
+
*/
|
|
29
|
+
export interface ProtectedResourceMetadata {
|
|
30
|
+
resource: string;
|
|
31
|
+
authorization_servers: string[];
|
|
32
|
+
bearer_methods_supported?: string[];
|
|
33
|
+
scopes_supported?: string[];
|
|
34
|
+
resource_documentation?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate Protected Resource Metadata for this MCP server
|
|
38
|
+
*
|
|
39
|
+
* Note: We return a placeholder for authorization_servers. The actual
|
|
40
|
+
* MCP server URL is filled in dynamically by the HTTP handler based
|
|
41
|
+
* on the request's host header.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getProtectedResourceMetadata(mcpServerBaseUrl?: string): ProtectedResourceMetadata;
|
|
44
|
+
/**
|
|
45
|
+
* Authorization Server Metadata (RFC 8414)
|
|
46
|
+
*
|
|
47
|
+
* Describes our OAuth server capabilities.
|
|
48
|
+
* We act as an authorization server, proxying to Nestr.
|
|
49
|
+
*/
|
|
50
|
+
export interface AuthorizationServerMetadata {
|
|
51
|
+
issuer: string;
|
|
52
|
+
authorization_endpoint: string;
|
|
53
|
+
token_endpoint: string;
|
|
54
|
+
registration_endpoint?: string;
|
|
55
|
+
response_types_supported: string[];
|
|
56
|
+
grant_types_supported: string[];
|
|
57
|
+
code_challenge_methods_supported: string[];
|
|
58
|
+
scopes_supported: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get authorization server metadata
|
|
62
|
+
*
|
|
63
|
+
* When mcpServerBaseUrl is provided, returns metadata for our MCP server
|
|
64
|
+
* acting as an authorization server (proxying to Nestr).
|
|
65
|
+
*
|
|
66
|
+
* PKCE Support: We advertise S256 support because we handle PKCE verification
|
|
67
|
+
* in our proxy layer, even though Nestr doesn't support PKCE natively.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getAuthorizationServerMetadata(mcpServerBaseUrl?: string): AuthorizationServerMetadata;
|
|
70
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/oauth/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAE1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IAGtB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAiB5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAcjG;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gCAAgC,EAAE,MAAM,EAAE,CAAC;IAC3C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,2BAA2B,CA4BrG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Configuration for Nestr MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP Authorization Specification using Nestr as the authorization server.
|
|
5
|
+
* See: https://modelcontextprotocol.io/specification/draft/basic/authorization
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get OAuth configuration from environment
|
|
9
|
+
*
|
|
10
|
+
* For local development, set:
|
|
11
|
+
* NESTR_API_BASE=http://localhost:4001/api
|
|
12
|
+
* NESTR_OAUTH_CLIENT_ID=your-local-client-id
|
|
13
|
+
*/
|
|
14
|
+
export function getOAuthConfig() {
|
|
15
|
+
const baseUrl = process.env.NESTR_API_BASE || "https://app.nestr.io/api";
|
|
16
|
+
const nestrBase = baseUrl.replace(/\/api$/, "");
|
|
17
|
+
// MCP resource identifier - the canonical URL of this MCP server
|
|
18
|
+
const resourceIdentifier = process.env.MCP_RESOURCE_URL || "https://mcp.nestr.io/mcp";
|
|
19
|
+
return {
|
|
20
|
+
// /dialog/oauth is the UI page, /oauth/token is the backend token endpoint
|
|
21
|
+
// Note: /oauth/* may need to be whitelisted in Cloudflare to avoid bot challenge
|
|
22
|
+
authorizationEndpoint: `${nestrBase}/dialog/oauth`,
|
|
23
|
+
tokenEndpoint: `${nestrBase}/oauth/token`,
|
|
24
|
+
resourceIdentifier,
|
|
25
|
+
clientId: process.env.NESTR_OAUTH_CLIENT_ID,
|
|
26
|
+
clientSecret: process.env.NESTR_OAUTH_CLIENT_SECRET,
|
|
27
|
+
scopes: ["user", "nest"],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate Protected Resource Metadata for this MCP server
|
|
32
|
+
*
|
|
33
|
+
* Note: We return a placeholder for authorization_servers. The actual
|
|
34
|
+
* MCP server URL is filled in dynamically by the HTTP handler based
|
|
35
|
+
* on the request's host header.
|
|
36
|
+
*/
|
|
37
|
+
export function getProtectedResourceMetadata(mcpServerBaseUrl) {
|
|
38
|
+
const config = getOAuthConfig();
|
|
39
|
+
// If we have the MCP server's base URL, use it as the authorization server
|
|
40
|
+
// (we proxy OAuth requests to Nestr). Otherwise, fall back to Nestr directly.
|
|
41
|
+
const authServer = mcpServerBaseUrl || config.authorizationEndpoint.replace(/\/dialog\/oauth$/, "");
|
|
42
|
+
return {
|
|
43
|
+
resource: config.resourceIdentifier,
|
|
44
|
+
authorization_servers: [authServer],
|
|
45
|
+
bearer_methods_supported: ["header"],
|
|
46
|
+
scopes_supported: config.scopes,
|
|
47
|
+
resource_documentation: "https://mcp.nestr.io",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get authorization server metadata
|
|
52
|
+
*
|
|
53
|
+
* When mcpServerBaseUrl is provided, returns metadata for our MCP server
|
|
54
|
+
* acting as an authorization server (proxying to Nestr).
|
|
55
|
+
*
|
|
56
|
+
* PKCE Support: We advertise S256 support because we handle PKCE verification
|
|
57
|
+
* in our proxy layer, even though Nestr doesn't support PKCE natively.
|
|
58
|
+
*/
|
|
59
|
+
export function getAuthorizationServerMetadata(mcpServerBaseUrl) {
|
|
60
|
+
const config = getOAuthConfig();
|
|
61
|
+
if (mcpServerBaseUrl) {
|
|
62
|
+
// Our MCP server acts as the authorization server
|
|
63
|
+
return {
|
|
64
|
+
issuer: mcpServerBaseUrl,
|
|
65
|
+
authorization_endpoint: `${mcpServerBaseUrl}/oauth/authorize`,
|
|
66
|
+
token_endpoint: `${mcpServerBaseUrl}/oauth/token`,
|
|
67
|
+
registration_endpoint: `${mcpServerBaseUrl}/oauth/register`,
|
|
68
|
+
response_types_supported: ["code"],
|
|
69
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
70
|
+
code_challenge_methods_supported: ["S256"], // We handle PKCE in our proxy
|
|
71
|
+
scopes_supported: config.scopes,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// Fall back to Nestr directly (no PKCE, no registration)
|
|
75
|
+
const nestrBase = config.authorizationEndpoint.replace(/\/dialog\/oauth$/, "");
|
|
76
|
+
return {
|
|
77
|
+
issuer: nestrBase,
|
|
78
|
+
authorization_endpoint: config.authorizationEndpoint,
|
|
79
|
+
token_endpoint: config.tokenEndpoint,
|
|
80
|
+
response_types_supported: ["code"],
|
|
81
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
82
|
+
code_challenge_methods_supported: [],
|
|
83
|
+
scopes_supported: config.scopes,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/oauth/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,0BAA0B,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhD,iEAAiE;IACjE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAEtF,OAAO;QACL,2EAA2E;QAC3E,iFAAiF;QACjF,qBAAqB,EAAE,GAAG,SAAS,eAAe;QAClD,aAAa,EAAE,GAAG,SAAS,cAAc;QACzC,kBAAkB;QAClB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QAC3C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACnD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;AACJ,CAAC;AAgBD;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,gBAAyB;IACpE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,gBAAgB,IAAI,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEpG,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,kBAAkB;QACnC,qBAAqB,EAAE,CAAC,UAAU,CAAC;QACnC,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM;QAC/B,sBAAsB,EAAE,sBAAsB;KAC/C,CAAC;AACJ,CAAC;AAmBD;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAAC,gBAAyB;IACtE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,gBAAgB,EAAE,CAAC;QACrB,kDAAkD;QAClD,OAAO;YACL,MAAM,EAAE,gBAAgB;YACxB,sBAAsB,EAAE,GAAG,gBAAgB,kBAAkB;YAC7D,cAAc,EAAE,GAAG,gBAAgB,cAAc;YACjD,qBAAqB,EAAE,GAAG,gBAAgB,iBAAiB;YAC3D,wBAAwB,EAAE,CAAC,MAAM,CAAC;YAClC,qBAAqB,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;YAC9D,gCAAgC,EAAE,CAAC,MAAM,CAAC,EAAE,8BAA8B;YAC1E,gBAAgB,EAAE,MAAM,CAAC,MAAM;SAChC,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,sBAAsB,EAAE,MAAM,CAAC,qBAAqB;QACpD,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,wBAAwB,EAAE,CAAC,MAAM,CAAC;QAClC,qBAAqB,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;QAC9D,gCAAgC,EAAE,EAAE;QACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Authorization Code Flow with PKCE
|
|
3
|
+
*
|
|
4
|
+
* Handles the OAuth flow where the MCP server acts as the OAuth client
|
|
5
|
+
* and users authenticate directly with Nestr.
|
|
6
|
+
*
|
|
7
|
+
* PKCE Support:
|
|
8
|
+
* - MCP clients send PKCE parameters (code_challenge) to this server
|
|
9
|
+
* - We verify the code_verifier against the stored code_challenge
|
|
10
|
+
* - We proxy to Nestr WITHOUT PKCE (Nestr doesn't support it)
|
|
11
|
+
* - This provides PKCE security from the MCP client's perspective
|
|
12
|
+
*/
|
|
13
|
+
import { type PendingAuthWithPKCE } from "./storage.js";
|
|
14
|
+
/**
|
|
15
|
+
* Pending OAuth authorization request
|
|
16
|
+
* @deprecated Use PendingAuthWithPKCE from storage.ts
|
|
17
|
+
*/
|
|
18
|
+
export interface PendingAuth {
|
|
19
|
+
state: string;
|
|
20
|
+
redirectUri: string;
|
|
21
|
+
createdAt: number;
|
|
22
|
+
finalRedirect?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* OAuth token response from Nestr
|
|
26
|
+
*/
|
|
27
|
+
export interface TokenResponse {
|
|
28
|
+
access_token: string;
|
|
29
|
+
refresh_token?: string;
|
|
30
|
+
token_type: string;
|
|
31
|
+
expires_in: number;
|
|
32
|
+
scope?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Stored OAuth session after successful authentication
|
|
36
|
+
*/
|
|
37
|
+
export interface OAuthSession {
|
|
38
|
+
accessToken: string;
|
|
39
|
+
refreshToken?: string;
|
|
40
|
+
expiresAt: number;
|
|
41
|
+
scope?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate PKCE code verifier (43-128 characters)
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateCodeVerifier(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Generate PKCE code challenge from verifier (S256 method)
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateCodeChallenge(verifier: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate OAuth state parameter
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateState(): string;
|
|
55
|
+
/**
|
|
56
|
+
* Parameters for creating an authorization request
|
|
57
|
+
*/
|
|
58
|
+
export interface AuthorizationRequestParams {
|
|
59
|
+
clientId: string;
|
|
60
|
+
redirectUri: string;
|
|
61
|
+
scope?: string;
|
|
62
|
+
state?: string;
|
|
63
|
+
codeChallenge?: string;
|
|
64
|
+
codeChallengeMethod?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a new pending auth request and return the authorization URL
|
|
68
|
+
*
|
|
69
|
+
* Supports PKCE: We store the code_challenge and verify it when the client
|
|
70
|
+
* exchanges the code. Nestr doesn't support PKCE, so we handle it in our proxy.
|
|
71
|
+
*/
|
|
72
|
+
export declare function createAuthorizationRequest(redirectUri: string, finalRedirect?: string): {
|
|
73
|
+
authUrl: string;
|
|
74
|
+
state: string;
|
|
75
|
+
};
|
|
76
|
+
export declare function createAuthorizationRequest(params: AuthorizationRequestParams): {
|
|
77
|
+
authUrl: string;
|
|
78
|
+
state: string;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Get and remove a pending auth request
|
|
82
|
+
*/
|
|
83
|
+
export declare function getPendingAuth(state: string): PendingAuthWithPKCE | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Verify PKCE code_verifier against stored code_challenge
|
|
86
|
+
*
|
|
87
|
+
* @param codeVerifier - The code_verifier from the token request
|
|
88
|
+
* @param codeChallenge - The stored code_challenge from the auth request
|
|
89
|
+
* @param method - The code_challenge_method (only S256 is supported)
|
|
90
|
+
* @returns true if verification passes
|
|
91
|
+
*/
|
|
92
|
+
export declare function verifyPKCE(codeVerifier: string, codeChallenge: string, method?: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Exchange authorization code for tokens
|
|
95
|
+
*/
|
|
96
|
+
export declare function exchangeCodeForTokens(code: string, redirectUri: string): Promise<TokenResponse>;
|
|
97
|
+
/**
|
|
98
|
+
* Refresh an access token using refresh token
|
|
99
|
+
*/
|
|
100
|
+
export declare function refreshAccessToken(refreshToken: string): Promise<TokenResponse>;
|
|
101
|
+
/**
|
|
102
|
+
* Store an OAuth session
|
|
103
|
+
*/
|
|
104
|
+
export declare function storeOAuthSession(sessionId: string, tokens: TokenResponse): void;
|
|
105
|
+
/**
|
|
106
|
+
* Get an OAuth session, refreshing if needed
|
|
107
|
+
*/
|
|
108
|
+
export declare function getOAuthSession(sessionId: string): Promise<OAuthSession | undefined>;
|
|
109
|
+
/**
|
|
110
|
+
* Remove an OAuth session
|
|
111
|
+
*/
|
|
112
|
+
export declare function removeOAuthSession(sessionId: string): void;
|
|
113
|
+
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/oauth/flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAeD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,GACjC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA0EtC;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAE7E;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,MAAe,GACtB,OAAO,CAST;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA4BnC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE1D"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Authorization Code Flow with PKCE
|
|
3
|
+
*
|
|
4
|
+
* Handles the OAuth flow where the MCP server acts as the OAuth client
|
|
5
|
+
* and users authenticate directly with Nestr.
|
|
6
|
+
*
|
|
7
|
+
* PKCE Support:
|
|
8
|
+
* - MCP clients send PKCE parameters (code_challenge) to this server
|
|
9
|
+
* - We verify the code_verifier against the stored code_challenge
|
|
10
|
+
* - We proxy to Nestr WITHOUT PKCE (Nestr doesn't support it)
|
|
11
|
+
* - This provides PKCE security from the MCP client's perspective
|
|
12
|
+
*/
|
|
13
|
+
import { randomBytes, createHash } from "node:crypto";
|
|
14
|
+
import { getOAuthConfig } from "./config.js";
|
|
15
|
+
import { storePendingAuth as storePendingAuthToDisk, consumePendingAuth as consumePendingAuthFromDisk, } from "./storage.js";
|
|
16
|
+
// In-memory storage for OAuth sessions (keyed by session ID)
|
|
17
|
+
const oauthSessions = new Map();
|
|
18
|
+
// Buffer time before token expiration to trigger refresh (60 seconds)
|
|
19
|
+
const TOKEN_EXPIRY_BUFFER_MS = 60 * 1000;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a cryptographically secure random string
|
|
22
|
+
*/
|
|
23
|
+
function generateRandomString(length) {
|
|
24
|
+
return randomBytes(length).toString("base64url").slice(0, length);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate PKCE code verifier (43-128 characters)
|
|
28
|
+
*/
|
|
29
|
+
export function generateCodeVerifier() {
|
|
30
|
+
return generateRandomString(64);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate PKCE code challenge from verifier (S256 method)
|
|
34
|
+
*/
|
|
35
|
+
export function generateCodeChallenge(verifier) {
|
|
36
|
+
return createHash("sha256").update(verifier).digest("base64url");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate OAuth state parameter
|
|
40
|
+
*/
|
|
41
|
+
export function generateState() {
|
|
42
|
+
return generateRandomString(32);
|
|
43
|
+
}
|
|
44
|
+
export function createAuthorizationRequest(redirectUriOrParams, finalRedirect) {
|
|
45
|
+
const config = getOAuthConfig();
|
|
46
|
+
// Handle legacy signature (redirectUri, finalRedirect)
|
|
47
|
+
if (typeof redirectUriOrParams === "string") {
|
|
48
|
+
if (!config.clientId) {
|
|
49
|
+
throw new Error("NESTR_OAUTH_CLIENT_ID environment variable is required for OAuth flow");
|
|
50
|
+
}
|
|
51
|
+
const state = generateState();
|
|
52
|
+
// Store pending auth with disk persistence
|
|
53
|
+
storePendingAuthToDisk({
|
|
54
|
+
state,
|
|
55
|
+
redirectUri: redirectUriOrParams,
|
|
56
|
+
clientId: config.clientId,
|
|
57
|
+
createdAt: Date.now(),
|
|
58
|
+
});
|
|
59
|
+
// Build authorization URL (without PKCE - Nestr doesn't support it)
|
|
60
|
+
const urlParams = new URLSearchParams({
|
|
61
|
+
response_type: "code",
|
|
62
|
+
client_id: config.clientId,
|
|
63
|
+
redirect_uri: redirectUriOrParams,
|
|
64
|
+
state,
|
|
65
|
+
scope: config.scopes.join(" "),
|
|
66
|
+
});
|
|
67
|
+
const authUrl = `${config.authorizationEndpoint}?${urlParams}`;
|
|
68
|
+
return { authUrl, state };
|
|
69
|
+
}
|
|
70
|
+
// New signature with full params (for dynamic client registration)
|
|
71
|
+
const params = redirectUriOrParams;
|
|
72
|
+
const state = params.state || generateState();
|
|
73
|
+
// Store pending auth with PKCE info
|
|
74
|
+
// redirectUri here is the MCP CLIENT's redirect_uri (where we redirect with the code)
|
|
75
|
+
storePendingAuthToDisk({
|
|
76
|
+
state,
|
|
77
|
+
redirectUri: params.redirectUri, // MCP client's callback URL
|
|
78
|
+
clientId: params.clientId,
|
|
79
|
+
codeChallenge: params.codeChallenge,
|
|
80
|
+
codeChallengeMethod: params.codeChallengeMethod,
|
|
81
|
+
createdAt: Date.now(),
|
|
82
|
+
scope: params.scope,
|
|
83
|
+
});
|
|
84
|
+
// Build authorization URL for Nestr (without PKCE - we handle it ourselves)
|
|
85
|
+
// Use our configured client_id to talk to Nestr
|
|
86
|
+
// IMPORTANT: We tell Nestr to redirect back to OUR callback, not the MCP client's
|
|
87
|
+
const nestrClientId = config.clientId || params.clientId;
|
|
88
|
+
// We need our own callback URL to be passed here, not the MCP client's
|
|
89
|
+
// The caller should pass ourCallbackUrl in a separate field if needed
|
|
90
|
+
// For now, we construct it - this will be overridden by http.ts
|
|
91
|
+
const urlParams = new URLSearchParams({
|
|
92
|
+
response_type: "code",
|
|
93
|
+
client_id: nestrClientId,
|
|
94
|
+
redirect_uri: params.redirectUri, // Will be overridden by caller with our callback URL
|
|
95
|
+
state,
|
|
96
|
+
scope: params.scope || config.scopes.join(" "),
|
|
97
|
+
});
|
|
98
|
+
const authUrl = `${config.authorizationEndpoint}?${urlParams}`;
|
|
99
|
+
return { authUrl, state };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get and remove a pending auth request
|
|
103
|
+
*/
|
|
104
|
+
export function getPendingAuth(state) {
|
|
105
|
+
return consumePendingAuthFromDisk(state);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Verify PKCE code_verifier against stored code_challenge
|
|
109
|
+
*
|
|
110
|
+
* @param codeVerifier - The code_verifier from the token request
|
|
111
|
+
* @param codeChallenge - The stored code_challenge from the auth request
|
|
112
|
+
* @param method - The code_challenge_method (only S256 is supported)
|
|
113
|
+
* @returns true if verification passes
|
|
114
|
+
*/
|
|
115
|
+
export function verifyPKCE(codeVerifier, codeChallenge, method = "S256") {
|
|
116
|
+
if (method !== "S256") {
|
|
117
|
+
// Only S256 is supported per OAuth 2.1
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Generate challenge from verifier and compare
|
|
121
|
+
const computedChallenge = generateCodeChallenge(codeVerifier);
|
|
122
|
+
return computedChallenge === codeChallenge;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Exchange authorization code for tokens
|
|
126
|
+
*/
|
|
127
|
+
export async function exchangeCodeForTokens(code, redirectUri) {
|
|
128
|
+
const config = getOAuthConfig();
|
|
129
|
+
if (!config.clientId) {
|
|
130
|
+
throw new Error("NESTR_OAUTH_CLIENT_ID is required");
|
|
131
|
+
}
|
|
132
|
+
const body = {
|
|
133
|
+
grant_type: "authorization_code",
|
|
134
|
+
code,
|
|
135
|
+
redirect_uri: redirectUri,
|
|
136
|
+
client_id: config.clientId,
|
|
137
|
+
};
|
|
138
|
+
// Add client secret (required by Nestr)
|
|
139
|
+
if (config.clientSecret) {
|
|
140
|
+
body.client_secret = config.clientSecret;
|
|
141
|
+
}
|
|
142
|
+
const response = await fetch(config.tokenEndpoint, {
|
|
143
|
+
method: "POST",
|
|
144
|
+
headers: {
|
|
145
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
146
|
+
},
|
|
147
|
+
body: new URLSearchParams(body),
|
|
148
|
+
});
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
const errorText = await response.text();
|
|
151
|
+
throw new Error(`Token exchange failed: ${response.status} - ${errorText}`);
|
|
152
|
+
}
|
|
153
|
+
return response.json();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Refresh an access token using refresh token
|
|
157
|
+
*/
|
|
158
|
+
export async function refreshAccessToken(refreshToken) {
|
|
159
|
+
const config = getOAuthConfig();
|
|
160
|
+
if (!config.clientId) {
|
|
161
|
+
throw new Error("NESTR_OAUTH_CLIENT_ID is required");
|
|
162
|
+
}
|
|
163
|
+
const body = {
|
|
164
|
+
grant_type: "refresh_token",
|
|
165
|
+
refresh_token: refreshToken,
|
|
166
|
+
client_id: config.clientId,
|
|
167
|
+
};
|
|
168
|
+
if (config.clientSecret) {
|
|
169
|
+
body.client_secret = config.clientSecret;
|
|
170
|
+
}
|
|
171
|
+
const response = await fetch(config.tokenEndpoint, {
|
|
172
|
+
method: "POST",
|
|
173
|
+
headers: {
|
|
174
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
175
|
+
},
|
|
176
|
+
body: new URLSearchParams(body),
|
|
177
|
+
});
|
|
178
|
+
if (!response.ok) {
|
|
179
|
+
const errorText = await response.text();
|
|
180
|
+
throw new Error(`Token refresh failed: ${response.status} - ${errorText}`);
|
|
181
|
+
}
|
|
182
|
+
return response.json();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Store an OAuth session
|
|
186
|
+
*/
|
|
187
|
+
export function storeOAuthSession(sessionId, tokens) {
|
|
188
|
+
oauthSessions.set(sessionId, {
|
|
189
|
+
accessToken: tokens.access_token,
|
|
190
|
+
refreshToken: tokens.refresh_token,
|
|
191
|
+
expiresAt: Date.now() + tokens.expires_in * 1000,
|
|
192
|
+
scope: tokens.scope,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get an OAuth session, refreshing if needed
|
|
197
|
+
*/
|
|
198
|
+
export async function getOAuthSession(sessionId) {
|
|
199
|
+
const session = oauthSessions.get(sessionId);
|
|
200
|
+
if (!session) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
// Check if token is expired (with buffer to allow for refresh)
|
|
204
|
+
if (Date.now() >= session.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {
|
|
205
|
+
// Try to refresh
|
|
206
|
+
if (session.refreshToken) {
|
|
207
|
+
try {
|
|
208
|
+
const tokens = await refreshAccessToken(session.refreshToken);
|
|
209
|
+
storeOAuthSession(sessionId, tokens);
|
|
210
|
+
return oauthSessions.get(sessionId);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Refresh failed, remove session
|
|
214
|
+
oauthSessions.delete(sessionId);
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// No refresh token, session expired
|
|
220
|
+
oauthSessions.delete(sessionId);
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return session;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Remove an OAuth session
|
|
228
|
+
*/
|
|
229
|
+
export function removeOAuthSession(sessionId) {
|
|
230
|
+
oauthSessions.delete(sessionId);
|
|
231
|
+
}
|
|
232
|
+
// Cleanup is now handled by storage.ts
|
|
233
|
+
//# sourceMappingURL=flow.js.map
|