@bowenqt/qiniu-ai-sdk 0.10.0 → 0.13.0
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 +225 -0
- package/dist/ai/agent-graph.d.ts +99 -0
- package/dist/ai/agent-graph.d.ts.map +1 -0
- package/dist/ai/agent-graph.js +321 -0
- package/dist/ai/agent-graph.js.map +1 -0
- package/dist/ai/agent-graph.mjs +317 -0
- package/dist/ai/generate-text.d.ts +51 -0
- package/dist/ai/generate-text.d.ts.map +1 -1
- package/dist/ai/generate-text.js +132 -0
- package/dist/ai/generate-text.js.map +1 -1
- package/dist/ai/generate-text.mjs +131 -0
- package/dist/ai/graph/checkpointer.d.ts +112 -0
- package/dist/ai/graph/checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/checkpointer.js +131 -0
- package/dist/ai/graph/checkpointer.js.map +1 -0
- package/dist/ai/graph/checkpointer.mjs +126 -0
- package/dist/ai/graph/index.d.ts +13 -0
- package/dist/ai/graph/index.d.ts.map +1 -0
- package/dist/ai/graph/index.js +22 -0
- package/dist/ai/graph/index.js.map +1 -0
- package/dist/ai/graph/index.mjs +12 -0
- package/dist/ai/graph/postgres-checkpointer.d.ts +54 -0
- package/dist/ai/graph/postgres-checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/postgres-checkpointer.js +134 -0
- package/dist/ai/graph/postgres-checkpointer.js.map +1 -0
- package/dist/ai/graph/postgres-checkpointer.mjs +130 -0
- package/dist/ai/graph/redis-checkpointer.d.ts +51 -0
- package/dist/ai/graph/redis-checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/redis-checkpointer.js +124 -0
- package/dist/ai/graph/redis-checkpointer.js.map +1 -0
- package/dist/ai/graph/redis-checkpointer.mjs +120 -0
- package/dist/ai/graph/state-graph.d.ts +41 -0
- package/dist/ai/graph/state-graph.d.ts.map +1 -0
- package/dist/ai/graph/state-graph.js +149 -0
- package/dist/ai/graph/state-graph.js.map +1 -0
- package/dist/ai/graph/state-graph.mjs +144 -0
- package/dist/ai/graph/types.d.ts +41 -0
- package/dist/ai/graph/types.d.ts.map +1 -0
- package/dist/ai/graph/types.js +10 -0
- package/dist/ai/graph/types.js.map +1 -0
- package/dist/ai/graph/types.mjs +7 -0
- package/dist/ai/internal-types.d.ts +109 -0
- package/dist/ai/internal-types.d.ts.map +1 -0
- package/dist/ai/internal-types.js +28 -0
- package/dist/ai/internal-types.js.map +1 -0
- package/dist/ai/internal-types.mjs +23 -0
- package/dist/ai/nodes/execute-node.d.ts +27 -0
- package/dist/ai/nodes/execute-node.d.ts.map +1 -0
- package/dist/ai/nodes/execute-node.js +118 -0
- package/dist/ai/nodes/execute-node.js.map +1 -0
- package/dist/ai/nodes/execute-node.mjs +114 -0
- package/dist/ai/nodes/index.d.ts +8 -0
- package/dist/ai/nodes/index.d.ts.map +1 -0
- package/dist/ai/nodes/index.js +16 -0
- package/dist/ai/nodes/index.js.map +1 -0
- package/dist/ai/nodes/index.mjs +7 -0
- package/dist/ai/nodes/memory-node.d.ts +34 -0
- package/dist/ai/nodes/memory-node.d.ts.map +1 -0
- package/dist/ai/nodes/memory-node.js +164 -0
- package/dist/ai/nodes/memory-node.js.map +1 -0
- package/dist/ai/nodes/memory-node.mjs +158 -0
- package/dist/ai/nodes/predict-node.d.ts +42 -0
- package/dist/ai/nodes/predict-node.d.ts.map +1 -0
- package/dist/ai/nodes/predict-node.js +89 -0
- package/dist/ai/nodes/predict-node.js.map +1 -0
- package/dist/ai/nodes/predict-node.mjs +86 -0
- package/dist/ai/nodes/types.d.ts +44 -0
- package/dist/ai/nodes/types.d.ts.map +1 -0
- package/dist/ai/nodes/types.js +6 -0
- package/dist/ai/nodes/types.js.map +1 -0
- package/dist/ai/nodes/types.mjs +5 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +34 -0
- package/dist/lib/otel-tracer.d.ts +47 -0
- package/dist/lib/otel-tracer.d.ts.map +1 -0
- package/dist/lib/otel-tracer.js +79 -0
- package/dist/lib/otel-tracer.js.map +1 -0
- package/dist/lib/otel-tracer.mjs +75 -0
- package/dist/lib/token-estimator.d.ts +62 -0
- package/dist/lib/token-estimator.d.ts.map +1 -0
- package/dist/lib/token-estimator.js +106 -0
- package/dist/lib/token-estimator.js.map +1 -0
- package/dist/lib/token-estimator.mjs +100 -0
- package/dist/lib/tool-registry.d.ts +103 -0
- package/dist/lib/tool-registry.d.ts.map +1 -0
- package/dist/lib/tool-registry.js +159 -0
- package/dist/lib/tool-registry.js.map +1 -0
- package/dist/lib/tool-registry.mjs +154 -0
- package/dist/lib/tracer.d.ts +85 -0
- package/dist/lib/tracer.d.ts.map +1 -0
- package/dist/lib/tracer.js +170 -0
- package/dist/lib/tracer.js.map +1 -0
- package/dist/lib/tracer.mjs +161 -0
- package/dist/lib/types.d.ts +11 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/modules/mcp/adapter.d.ts +23 -0
- package/dist/modules/mcp/adapter.d.ts.map +1 -0
- package/dist/modules/mcp/adapter.js +63 -0
- package/dist/modules/mcp/adapter.js.map +1 -0
- package/dist/modules/mcp/adapter.mjs +58 -0
- package/dist/modules/mcp/client.d.ts +75 -0
- package/dist/modules/mcp/client.d.ts.map +1 -0
- package/dist/modules/mcp/client.js +300 -0
- package/dist/modules/mcp/client.js.map +1 -0
- package/dist/modules/mcp/client.mjs +295 -0
- package/dist/modules/mcp/http-transport.d.ts +51 -0
- package/dist/modules/mcp/http-transport.d.ts.map +1 -0
- package/dist/modules/mcp/http-transport.js +146 -0
- package/dist/modules/mcp/http-transport.js.map +1 -0
- package/dist/modules/mcp/http-transport.mjs +141 -0
- package/dist/modules/mcp/index.d.ts +11 -0
- package/dist/modules/mcp/index.d.ts.map +1 -0
- package/dist/modules/mcp/index.js +34 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/index.mjs +14 -0
- package/dist/modules/mcp/oauth.d.ts +101 -0
- package/dist/modules/mcp/oauth.d.ts.map +1 -0
- package/dist/modules/mcp/oauth.js +347 -0
- package/dist/modules/mcp/oauth.js.map +1 -0
- package/dist/modules/mcp/oauth.mjs +304 -0
- package/dist/modules/mcp/token-store.d.ts +69 -0
- package/dist/modules/mcp/token-store.d.ts.map +1 -0
- package/dist/modules/mcp/token-store.js +174 -0
- package/dist/modules/mcp/token-store.js.map +1 -0
- package/dist/modules/mcp/token-store.mjs +135 -0
- package/dist/modules/mcp/types.d.ts +91 -0
- package/dist/modules/mcp/types.d.ts.map +1 -0
- package/dist/modules/mcp/types.js +14 -0
- package/dist/modules/mcp/types.js.map +1 -0
- package/dist/modules/mcp/types.mjs +11 -0
- package/dist/modules/skills/index.d.ts +7 -0
- package/dist/modules/skills/index.d.ts.map +1 -0
- package/dist/modules/skills/index.js +14 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/index.mjs +6 -0
- package/dist/modules/skills/loader.d.ts +51 -0
- package/dist/modules/skills/loader.d.ts.map +1 -0
- package/dist/modules/skills/loader.js +237 -0
- package/dist/modules/skills/loader.js.map +1 -0
- package/dist/modules/skills/loader.mjs +198 -0
- package/dist/modules/skills/types.d.ts +60 -0
- package/dist/modules/skills/types.d.ts.map +1 -0
- package/dist/modules/skills/types.js +20 -0
- package/dist/modules/skills/types.js.map +1 -0
- package/dist/modules/skills/types.mjs +17 -0
- package/package.json +4 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP module public exports.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_MCP_CONFIG = exports.TokenManager = exports.FileTokenStore = exports.MemoryTokenStore = exports.refreshAccessToken = exports.generateState = exports.generateCodeChallenge = exports.generateCodeVerifier = exports.OAuthError = exports.DeviceCodeFlow = exports.PKCEFlow = exports.MCPHttpTransportError = exports.MCPHttpTransport = exports.getAllMCPToolsAsRegistered = exports.adaptMCPToolsToRegistry = exports.MCPClientError = exports.MCPClient = void 0;
|
|
7
|
+
// Client
|
|
8
|
+
var client_1 = require("./client");
|
|
9
|
+
Object.defineProperty(exports, "MCPClient", { enumerable: true, get: function () { return client_1.MCPClient; } });
|
|
10
|
+
Object.defineProperty(exports, "MCPClientError", { enumerable: true, get: function () { return client_1.MCPClientError; } });
|
|
11
|
+
var adapter_1 = require("./adapter");
|
|
12
|
+
Object.defineProperty(exports, "adaptMCPToolsToRegistry", { enumerable: true, get: function () { return adapter_1.adaptMCPToolsToRegistry; } });
|
|
13
|
+
Object.defineProperty(exports, "getAllMCPToolsAsRegistered", { enumerable: true, get: function () { return adapter_1.getAllMCPToolsAsRegistered; } });
|
|
14
|
+
// HTTP Transport (Phase 3)
|
|
15
|
+
var http_transport_1 = require("./http-transport");
|
|
16
|
+
Object.defineProperty(exports, "MCPHttpTransport", { enumerable: true, get: function () { return http_transport_1.MCPHttpTransport; } });
|
|
17
|
+
Object.defineProperty(exports, "MCPHttpTransportError", { enumerable: true, get: function () { return http_transport_1.MCPHttpTransportError; } });
|
|
18
|
+
// OAuth (Phase 3)
|
|
19
|
+
var oauth_1 = require("./oauth");
|
|
20
|
+
Object.defineProperty(exports, "PKCEFlow", { enumerable: true, get: function () { return oauth_1.PKCEFlow; } });
|
|
21
|
+
Object.defineProperty(exports, "DeviceCodeFlow", { enumerable: true, get: function () { return oauth_1.DeviceCodeFlow; } });
|
|
22
|
+
Object.defineProperty(exports, "OAuthError", { enumerable: true, get: function () { return oauth_1.OAuthError; } });
|
|
23
|
+
Object.defineProperty(exports, "generateCodeVerifier", { enumerable: true, get: function () { return oauth_1.generateCodeVerifier; } });
|
|
24
|
+
Object.defineProperty(exports, "generateCodeChallenge", { enumerable: true, get: function () { return oauth_1.generateCodeChallenge; } });
|
|
25
|
+
Object.defineProperty(exports, "generateState", { enumerable: true, get: function () { return oauth_1.generateState; } });
|
|
26
|
+
Object.defineProperty(exports, "refreshAccessToken", { enumerable: true, get: function () { return oauth_1.refreshAccessToken; } });
|
|
27
|
+
// Token Store (Phase 3)
|
|
28
|
+
var token_store_1 = require("./token-store");
|
|
29
|
+
Object.defineProperty(exports, "MemoryTokenStore", { enumerable: true, get: function () { return token_store_1.MemoryTokenStore; } });
|
|
30
|
+
Object.defineProperty(exports, "FileTokenStore", { enumerable: true, get: function () { return token_store_1.FileTokenStore; } });
|
|
31
|
+
Object.defineProperty(exports, "TokenManager", { enumerable: true, get: function () { return token_store_1.TokenManager; } });
|
|
32
|
+
var types_1 = require("./types");
|
|
33
|
+
Object.defineProperty(exports, "DEFAULT_MCP_CONFIG", { enumerable: true, get: function () { return types_1.DEFAULT_MCP_CONFIG; } });
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/mcp/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,SAAS;AACT,mCAAqD;AAA5C,mGAAA,SAAS,OAAA;AAAE,wGAAA,cAAc,OAAA;AAClC,qCAAgF;AAAvE,kHAAA,uBAAuB,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAE5D,2BAA2B;AAC3B,mDAA+F;AAAtF,kHAAA,gBAAgB,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AAEhD,kBAAkB;AAClB,iCASiB;AARb,iGAAA,QAAQ,OAAA;AACR,uGAAA,cAAc,OAAA;AACd,mGAAA,UAAU,OAAA;AACV,6GAAA,oBAAoB,OAAA;AACpB,8GAAA,qBAAqB,OAAA;AACrB,sGAAA,aAAa,OAAA;AACb,2GAAA,kBAAkB,OAAA;AAItB,wBAAwB;AACxB,6CAMuB;AALnB,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,2GAAA,YAAY,OAAA;AAiBhB,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP module public exports.
|
|
3
|
+
*/
|
|
4
|
+
// Client
|
|
5
|
+
export { MCPClient, MCPClientError } from './client.mjs';
|
|
6
|
+
export { adaptMCPToolsToRegistry, getAllMCPToolsAsRegistered } from './adapter.mjs';
|
|
7
|
+
// HTTP Transport (Phase 3)
|
|
8
|
+
export { MCPHttpTransport, MCPHttpTransportError } from './http-transport.mjs';
|
|
9
|
+
// OAuth (Phase 3)
|
|
10
|
+
export { PKCEFlow, DeviceCodeFlow, OAuthError, generateCodeVerifier, generateCodeChallenge, generateState, refreshAccessToken, } from './oauth.mjs';
|
|
11
|
+
// Token Store (Phase 3)
|
|
12
|
+
export { MemoryTokenStore, FileTokenStore, TokenManager, } from './token-store.mjs';
|
|
13
|
+
export { DEFAULT_MCP_CONFIG } from './types.mjs';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.0 flows for MCP HTTP transport.
|
|
3
|
+
* Implements PKCE (browser) and Device Code (headless) flows.
|
|
4
|
+
*
|
|
5
|
+
* @see https://modelcontextprotocol.io/docs/concepts/authorization
|
|
6
|
+
*/
|
|
7
|
+
import type { MCPOAuthConfig } from './types';
|
|
8
|
+
/** OAuth token response */
|
|
9
|
+
export interface OAuthTokens {
|
|
10
|
+
accessToken: string;
|
|
11
|
+
refreshToken?: string;
|
|
12
|
+
expiresAt?: number;
|
|
13
|
+
tokenType: string;
|
|
14
|
+
scope?: string;
|
|
15
|
+
}
|
|
16
|
+
/** OAuth error */
|
|
17
|
+
export declare class OAuthError extends Error {
|
|
18
|
+
readonly code?: string | undefined;
|
|
19
|
+
readonly description?: string | undefined;
|
|
20
|
+
constructor(message: string, code?: string | undefined, description?: string | undefined);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate PKCE code verifier (43-128 chars).
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateCodeVerifier(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Generate PKCE code challenge (S256).
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateCodeChallenge(verifier: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Generate random state parameter.
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateState(): string;
|
|
34
|
+
/**
|
|
35
|
+
* PKCE Authorization Code Flow.
|
|
36
|
+
* Opens a browser for user authentication and starts a local callback server.
|
|
37
|
+
*/
|
|
38
|
+
export declare class PKCEFlow {
|
|
39
|
+
private readonly config;
|
|
40
|
+
private server;
|
|
41
|
+
private codeVerifier;
|
|
42
|
+
constructor(config: MCPOAuthConfig);
|
|
43
|
+
/**
|
|
44
|
+
* Build authorization URL.
|
|
45
|
+
*/
|
|
46
|
+
buildAuthorizationUrl(redirectUri: string, state: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Start local callback server and wait for authorization code.
|
|
49
|
+
* Returns the authorization code.
|
|
50
|
+
* @param options.port - Port to listen on (default: random)
|
|
51
|
+
* @param options.expectedState - Expected state parameter to validate (required for security)
|
|
52
|
+
* @param options.timeoutMs - Timeout in milliseconds (default: 300000 = 5 minutes)
|
|
53
|
+
*/
|
|
54
|
+
waitForCallback(options: {
|
|
55
|
+
port?: number;
|
|
56
|
+
expectedState: string;
|
|
57
|
+
timeoutMs?: number;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
code: string;
|
|
60
|
+
state: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Exchange authorization code for tokens.
|
|
64
|
+
*/
|
|
65
|
+
exchangeCode(code: string, redirectUri: string): Promise<OAuthTokens>;
|
|
66
|
+
/**
|
|
67
|
+
* Get the local callback server port.
|
|
68
|
+
*/
|
|
69
|
+
getCallbackPort(): number | null;
|
|
70
|
+
/**
|
|
71
|
+
* Stop the callback server.
|
|
72
|
+
*/
|
|
73
|
+
stopServer(): void;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Device Code Flow for headless environments.
|
|
77
|
+
*/
|
|
78
|
+
export declare class DeviceCodeFlow {
|
|
79
|
+
private readonly config;
|
|
80
|
+
constructor(config: MCPOAuthConfig);
|
|
81
|
+
/**
|
|
82
|
+
* Request device code from authorization server.
|
|
83
|
+
*/
|
|
84
|
+
requestDeviceCode(): Promise<{
|
|
85
|
+
deviceCode: string;
|
|
86
|
+
userCode: string;
|
|
87
|
+
verificationUri: string;
|
|
88
|
+
verificationUriComplete?: string;
|
|
89
|
+
expiresIn: number;
|
|
90
|
+
interval: number;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Poll for token after user completes authentication.
|
|
94
|
+
*/
|
|
95
|
+
pollForToken(deviceCode: string, interval: number, expiresIn: number, onPending?: () => void): Promise<OAuthTokens>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Refresh an access token using refresh token.
|
|
99
|
+
*/
|
|
100
|
+
export declare function refreshAccessToken(config: MCPOAuthConfig, refreshToken: string): Promise<OAuthTokens>;
|
|
101
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/modules/mcp/oauth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kBAAkB;AAClB,qBAAa,UAAW,SAAQ,KAAK;aAGb,IAAI,CAAC,EAAE,MAAM;aACb,WAAW,CAAC,EAAE,MAAM;gBAFpC,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,WAAW,CAAC,EAAE,MAAM,YAAA;CAK3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAc;gBAEtB,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAsBjE;;;;;;OAMG;IACG,eAAe,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA+D5C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkD3E;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,UAAU,IAAI,IAAI;CAMrB;AAED;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IA6CF;;OAEG;IACG,YAAY,CACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,WAAW,CAAC;CAiE1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,GACrB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OAuth 2.0 flows for MCP HTTP transport.
|
|
4
|
+
* Implements PKCE (browser) and Device Code (headless) flows.
|
|
5
|
+
*
|
|
6
|
+
* @see https://modelcontextprotocol.io/docs/concepts/authorization
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.DeviceCodeFlow = exports.PKCEFlow = exports.OAuthError = void 0;
|
|
43
|
+
exports.generateCodeVerifier = generateCodeVerifier;
|
|
44
|
+
exports.generateCodeChallenge = generateCodeChallenge;
|
|
45
|
+
exports.generateState = generateState;
|
|
46
|
+
exports.refreshAccessToken = refreshAccessToken;
|
|
47
|
+
const crypto = __importStar(require("node:crypto"));
|
|
48
|
+
const http = __importStar(require("node:http"));
|
|
49
|
+
/** OAuth error */
|
|
50
|
+
class OAuthError extends Error {
|
|
51
|
+
constructor(message, code, description) {
|
|
52
|
+
super(message);
|
|
53
|
+
this.code = code;
|
|
54
|
+
this.description = description;
|
|
55
|
+
this.name = 'OAuthError';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.OAuthError = OAuthError;
|
|
59
|
+
/**
|
|
60
|
+
* Generate PKCE code verifier (43-128 chars).
|
|
61
|
+
*/
|
|
62
|
+
function generateCodeVerifier() {
|
|
63
|
+
return crypto.randomBytes(32).toString('base64url');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate PKCE code challenge (S256).
|
|
67
|
+
*/
|
|
68
|
+
function generateCodeChallenge(verifier) {
|
|
69
|
+
const hash = crypto.createHash('sha256').update(verifier).digest();
|
|
70
|
+
return hash.toString('base64url');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generate random state parameter.
|
|
74
|
+
*/
|
|
75
|
+
function generateState() {
|
|
76
|
+
return crypto.randomBytes(16).toString('hex');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* PKCE Authorization Code Flow.
|
|
80
|
+
* Opens a browser for user authentication and starts a local callback server.
|
|
81
|
+
*/
|
|
82
|
+
class PKCEFlow {
|
|
83
|
+
constructor(config) {
|
|
84
|
+
this.server = null;
|
|
85
|
+
this.codeVerifier = '';
|
|
86
|
+
this.config = config;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Build authorization URL.
|
|
90
|
+
*/
|
|
91
|
+
buildAuthorizationUrl(redirectUri, state) {
|
|
92
|
+
this.codeVerifier = generateCodeVerifier();
|
|
93
|
+
const codeChallenge = generateCodeChallenge(this.codeVerifier);
|
|
94
|
+
const params = new URLSearchParams({
|
|
95
|
+
response_type: 'code',
|
|
96
|
+
client_id: this.config.clientId,
|
|
97
|
+
redirect_uri: redirectUri,
|
|
98
|
+
scope: this.config.scopes.join(' '),
|
|
99
|
+
state,
|
|
100
|
+
code_challenge: codeChallenge,
|
|
101
|
+
code_challenge_method: 'S256',
|
|
102
|
+
});
|
|
103
|
+
const authUrl = this.config.authorizationUrl;
|
|
104
|
+
if (!authUrl) {
|
|
105
|
+
throw new OAuthError('Authorization URL not configured');
|
|
106
|
+
}
|
|
107
|
+
return `${authUrl}?${params.toString()}`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Start local callback server and wait for authorization code.
|
|
111
|
+
* Returns the authorization code.
|
|
112
|
+
* @param options.port - Port to listen on (default: random)
|
|
113
|
+
* @param options.expectedState - Expected state parameter to validate (required for security)
|
|
114
|
+
* @param options.timeoutMs - Timeout in milliseconds (default: 300000 = 5 minutes)
|
|
115
|
+
*/
|
|
116
|
+
async waitForCallback(options) {
|
|
117
|
+
const { port = 0, expectedState, timeoutMs = 300000 } = options;
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
119
|
+
// Setup timeout
|
|
120
|
+
const timeoutId = setTimeout(() => {
|
|
121
|
+
this.stopServer();
|
|
122
|
+
reject(new OAuthError(`Callback timeout after ${timeoutMs}ms`));
|
|
123
|
+
}, timeoutMs);
|
|
124
|
+
this.server = http.createServer((req, res) => {
|
|
125
|
+
const url = new URL(req.url || '', `http://localhost:${port}`);
|
|
126
|
+
const code = url.searchParams.get('code');
|
|
127
|
+
const state = url.searchParams.get('state');
|
|
128
|
+
const error = url.searchParams.get('error');
|
|
129
|
+
const errorDescription = url.searchParams.get('error_description');
|
|
130
|
+
if (error) {
|
|
131
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
132
|
+
res.end(`<h1>Authorization Failed</h1><p>${errorDescription || error}</p>`);
|
|
133
|
+
clearTimeout(timeoutId);
|
|
134
|
+
this.stopServer();
|
|
135
|
+
reject(new OAuthError(`Authorization failed: ${error}`, error, errorDescription || undefined));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (!code || !state) {
|
|
139
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
140
|
+
res.end('<h1>Missing code or state</h1>');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Validate state (CSRF protection)
|
|
144
|
+
if (state !== expectedState) {
|
|
145
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
146
|
+
res.end('<h1>Invalid state parameter</h1>');
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
this.stopServer();
|
|
149
|
+
reject(new OAuthError('State mismatch: possible CSRF attack', 'state_mismatch'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
153
|
+
res.end('<h1>Authorization Successful</h1><p>You can close this window.</p>');
|
|
154
|
+
clearTimeout(timeoutId);
|
|
155
|
+
this.stopServer();
|
|
156
|
+
resolve({ code, state });
|
|
157
|
+
});
|
|
158
|
+
this.server.listen(port, '127.0.0.1', () => {
|
|
159
|
+
const addr = this.server?.address();
|
|
160
|
+
if (typeof addr === 'object' && addr) {
|
|
161
|
+
// Server started on addr.port
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
this.server.on('error', (err) => {
|
|
165
|
+
clearTimeout(timeoutId);
|
|
166
|
+
reject(new OAuthError(`Callback server error: ${err.message}`));
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Exchange authorization code for tokens.
|
|
172
|
+
*/
|
|
173
|
+
async exchangeCode(code, redirectUri) {
|
|
174
|
+
const tokenUrl = this.config.tokenUrl;
|
|
175
|
+
if (!tokenUrl) {
|
|
176
|
+
throw new OAuthError('Token URL not configured');
|
|
177
|
+
}
|
|
178
|
+
const body = new URLSearchParams({
|
|
179
|
+
grant_type: 'authorization_code',
|
|
180
|
+
code,
|
|
181
|
+
redirect_uri: redirectUri,
|
|
182
|
+
client_id: this.config.clientId,
|
|
183
|
+
code_verifier: this.codeVerifier,
|
|
184
|
+
});
|
|
185
|
+
if (this.config.clientSecret) {
|
|
186
|
+
body.set('client_secret', this.config.clientSecret);
|
|
187
|
+
}
|
|
188
|
+
const response = await fetch(tokenUrl, {
|
|
189
|
+
method: 'POST',
|
|
190
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
191
|
+
body: body.toString(),
|
|
192
|
+
});
|
|
193
|
+
if (!response.ok) {
|
|
194
|
+
const error = await response.json().catch(() => ({}));
|
|
195
|
+
throw new OAuthError(`Token exchange failed: ${response.status}`, error.error, error.error_description);
|
|
196
|
+
}
|
|
197
|
+
const data = await response.json();
|
|
198
|
+
return {
|
|
199
|
+
accessToken: data.access_token,
|
|
200
|
+
refreshToken: data.refresh_token,
|
|
201
|
+
expiresAt: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
|
|
202
|
+
tokenType: data.token_type,
|
|
203
|
+
scope: data.scope,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get the local callback server port.
|
|
208
|
+
*/
|
|
209
|
+
getCallbackPort() {
|
|
210
|
+
const addr = this.server?.address();
|
|
211
|
+
if (typeof addr === 'object' && addr) {
|
|
212
|
+
return addr.port;
|
|
213
|
+
}
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Stop the callback server.
|
|
218
|
+
*/
|
|
219
|
+
stopServer() {
|
|
220
|
+
if (this.server) {
|
|
221
|
+
this.server.close();
|
|
222
|
+
this.server = null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.PKCEFlow = PKCEFlow;
|
|
227
|
+
/**
|
|
228
|
+
* Device Code Flow for headless environments.
|
|
229
|
+
*/
|
|
230
|
+
class DeviceCodeFlow {
|
|
231
|
+
constructor(config) {
|
|
232
|
+
this.config = config;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Request device code from authorization server.
|
|
236
|
+
*/
|
|
237
|
+
async requestDeviceCode() {
|
|
238
|
+
const deviceCodeUrl = this.config.deviceCodeUrl;
|
|
239
|
+
if (!deviceCodeUrl) {
|
|
240
|
+
throw new OAuthError('Device code URL not configured');
|
|
241
|
+
}
|
|
242
|
+
const body = new URLSearchParams({
|
|
243
|
+
client_id: this.config.clientId,
|
|
244
|
+
scope: this.config.scopes.join(' '),
|
|
245
|
+
});
|
|
246
|
+
const response = await fetch(deviceCodeUrl, {
|
|
247
|
+
method: 'POST',
|
|
248
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
249
|
+
body: body.toString(),
|
|
250
|
+
});
|
|
251
|
+
if (!response.ok) {
|
|
252
|
+
const error = await response.json().catch(() => ({}));
|
|
253
|
+
throw new OAuthError(`Device code request failed: ${response.status}`, error.error, error.error_description);
|
|
254
|
+
}
|
|
255
|
+
const data = await response.json();
|
|
256
|
+
return {
|
|
257
|
+
deviceCode: data.device_code,
|
|
258
|
+
userCode: data.user_code,
|
|
259
|
+
verificationUri: data.verification_uri,
|
|
260
|
+
verificationUriComplete: data.verification_uri_complete,
|
|
261
|
+
expiresIn: data.expires_in,
|
|
262
|
+
interval: data.interval || 5,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Poll for token after user completes authentication.
|
|
267
|
+
*/
|
|
268
|
+
async pollForToken(deviceCode, interval, expiresIn, onPending) {
|
|
269
|
+
const tokenUrl = this.config.tokenUrl;
|
|
270
|
+
if (!tokenUrl) {
|
|
271
|
+
throw new OAuthError('Token URL not configured');
|
|
272
|
+
}
|
|
273
|
+
const deadline = Date.now() + expiresIn * 1000;
|
|
274
|
+
let currentInterval = interval * 1000;
|
|
275
|
+
while (Date.now() < deadline) {
|
|
276
|
+
await new Promise((resolve) => setTimeout(resolve, currentInterval));
|
|
277
|
+
const body = new URLSearchParams({
|
|
278
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
279
|
+
device_code: deviceCode,
|
|
280
|
+
client_id: this.config.clientId,
|
|
281
|
+
});
|
|
282
|
+
const response = await fetch(tokenUrl, {
|
|
283
|
+
method: 'POST',
|
|
284
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
285
|
+
body: body.toString(),
|
|
286
|
+
});
|
|
287
|
+
const data = await response.json();
|
|
288
|
+
if (data.access_token) {
|
|
289
|
+
return {
|
|
290
|
+
accessToken: data.access_token,
|
|
291
|
+
refreshToken: data.refresh_token,
|
|
292
|
+
expiresAt: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
|
|
293
|
+
tokenType: data.token_type || 'Bearer',
|
|
294
|
+
scope: data.scope,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
if (data.error === 'authorization_pending') {
|
|
298
|
+
onPending?.();
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (data.error === 'slow_down') {
|
|
302
|
+
currentInterval += 5000; // Add 5 seconds
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (data.error) {
|
|
306
|
+
throw new OAuthError(`Device code polling failed: ${data.error}`, data.error, data.error_description);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
throw new OAuthError('Device code expired');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
exports.DeviceCodeFlow = DeviceCodeFlow;
|
|
313
|
+
/**
|
|
314
|
+
* Refresh an access token using refresh token.
|
|
315
|
+
*/
|
|
316
|
+
async function refreshAccessToken(config, refreshToken) {
|
|
317
|
+
const tokenUrl = config.tokenUrl;
|
|
318
|
+
if (!tokenUrl) {
|
|
319
|
+
throw new OAuthError('Token URL not configured');
|
|
320
|
+
}
|
|
321
|
+
const body = new URLSearchParams({
|
|
322
|
+
grant_type: 'refresh_token',
|
|
323
|
+
refresh_token: refreshToken,
|
|
324
|
+
client_id: config.clientId,
|
|
325
|
+
});
|
|
326
|
+
if (config.clientSecret) {
|
|
327
|
+
body.set('client_secret', config.clientSecret);
|
|
328
|
+
}
|
|
329
|
+
const response = await fetch(tokenUrl, {
|
|
330
|
+
method: 'POST',
|
|
331
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
332
|
+
body: body.toString(),
|
|
333
|
+
});
|
|
334
|
+
if (!response.ok) {
|
|
335
|
+
const error = await response.json().catch(() => ({}));
|
|
336
|
+
throw new OAuthError(`Token refresh failed: ${response.status}`, error.error, error.error_description);
|
|
337
|
+
}
|
|
338
|
+
const data = await response.json();
|
|
339
|
+
return {
|
|
340
|
+
accessToken: data.access_token,
|
|
341
|
+
refreshToken: data.refresh_token || refreshToken,
|
|
342
|
+
expiresAt: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
|
|
343
|
+
tokenType: data.token_type,
|
|
344
|
+
scope: data.scope,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/modules/mcp/oauth.ts"],"names":[],"mappings":"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"}
|