@adcp/client 3.8.1 → 3.10.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/bin/adcp.js +527 -11
- package/dist/lib/agents/index.generated.d.ts +9 -1
- package/dist/lib/agents/index.generated.d.ts.map +1 -1
- package/dist/lib/agents/index.generated.js +12 -0
- package/dist/lib/agents/index.generated.js.map +1 -1
- package/dist/lib/auth/index.d.ts +1 -0
- package/dist/lib/auth/index.d.ts.map +1 -1
- package/dist/lib/auth/index.js +16 -0
- package/dist/lib/auth/index.js.map +1 -1
- package/dist/lib/auth/oauth/CLIFlowHandler.d.ts +61 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.d.ts.map +1 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.js +287 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.js.map +1 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.d.ts +126 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.d.ts.map +1 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.js +236 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.js.map +1 -0
- package/dist/lib/auth/oauth/discovery.d.ts +96 -0
- package/dist/lib/auth/oauth/discovery.d.ts.map +1 -0
- package/dist/lib/auth/oauth/discovery.js +104 -0
- package/dist/lib/auth/oauth/discovery.js.map +1 -0
- package/dist/lib/auth/oauth/index.d.ts +105 -0
- package/dist/lib/auth/oauth/index.d.ts.map +1 -0
- package/dist/lib/auth/oauth/index.js +173 -0
- package/dist/lib/auth/oauth/index.js.map +1 -0
- package/dist/lib/auth/oauth/types.d.ts +114 -0
- package/dist/lib/auth/oauth/types.d.ts.map +1 -0
- package/dist/lib/auth/oauth/types.js +104 -0
- package/dist/lib/auth/oauth/types.js.map +1 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +21 -9
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/index.d.ts +2 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +11 -3
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/protocols/index.d.ts +2 -1
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +4 -1
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/mcp.d.ts +80 -0
- package/dist/lib/protocols/mcp.d.ts.map +1 -1
- package/dist/lib/protocols/mcp.js +158 -0
- package/dist/lib/protocols/mcp.js.map +1 -1
- package/dist/lib/testing/agent-tester.d.ts +1 -1
- package/dist/lib/testing/agent-tester.d.ts.map +1 -1
- package/dist/lib/testing/agent-tester.js +39 -1
- package/dist/lib/testing/agent-tester.js.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +11 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/scenarios/capabilities.d.ts +27 -0
- package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/capabilities.js +250 -0
- package/dist/lib/testing/scenarios/capabilities.js.map +1 -0
- package/dist/lib/testing/scenarios/governance.d.ts +35 -0
- package/dist/lib/testing/scenarios/governance.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/governance.js +428 -0
- package/dist/lib/testing/scenarios/governance.js.map +1 -0
- package/dist/lib/testing/scenarios/index.d.ts +3 -0
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/index.js +15 -1
- package/dist/lib/testing/scenarios/index.js.map +1 -1
- package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts +34 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.js +318 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.js.map +1 -0
- package/dist/lib/testing/types.d.ts +9 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/adcp.d.ts +47 -1
- package/dist/lib/types/adcp.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +393 -164
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +2 -2
- package/dist/lib/types/core.generated.js.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +1275 -845
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +300 -198
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +461 -167
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/tools.generated.js +1 -1
- package/dist/lib/types/tools.generated.js.map +1 -1
- package/dist/lib/version.d.ts +5 -5
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +5 -5
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPOAuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/MCPOAuthProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACZ,MAAM,SAAS,CAAC;AAIjB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;gBAE1C,MAAM,EAAE,mBAAmB;IAOvC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,EAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACrD,gBAAgB;IAoBnB,IAAI,WAAW,IAAI,MAAM,GAAG,GAAG,CAE9B;IAED,IAAI,cAAc,IAAI,mBAAmB,CAExC;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAOtE;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOhD;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD;;OAEG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAUrC;;OAEG;IACG,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3F;;OAEG;YACW,YAAY;IAM1B;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;OAGG;IACH,cAAc,IAAI,OAAO;IAgBzB;;;OAGG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;;OAGG;IACH,QAAQ,IAAI,WAAW;IAIvB;;;OAGG;IACH,UAAU,IAAI,MAAM;CAGrB"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP OAuth Provider
|
|
4
|
+
*
|
|
5
|
+
* Implements the MCP SDK's OAuthClientProvider interface
|
|
6
|
+
* using AgentConfig for token storage.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MCPOAuthProvider = void 0;
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
const crypto_1 = require("crypto");
|
|
12
|
+
/**
|
|
13
|
+
* MCP OAuth Client Provider
|
|
14
|
+
*
|
|
15
|
+
* This provider stores OAuth tokens directly in the AgentConfig,
|
|
16
|
+
* using the same structure as static auth tokens.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const agent: AgentConfig = {
|
|
21
|
+
* id: 'my-agent',
|
|
22
|
+
* name: 'My Agent',
|
|
23
|
+
* agent_uri: 'https://agent.example.com/mcp',
|
|
24
|
+
* protocol: 'mcp',
|
|
25
|
+
* // OAuth tokens stored here after auth flow
|
|
26
|
+
* oauth_tokens: { access_token: '...', refresh_token: '...' }
|
|
27
|
+
* };
|
|
28
|
+
*
|
|
29
|
+
* const provider = new MCPOAuthProvider({
|
|
30
|
+
* agent,
|
|
31
|
+
* flowHandler: new CLIFlowHandler(),
|
|
32
|
+
* storage: myConfigStorage // Optional: persists tokens
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* const transport = new StreamableHTTPClientTransport(url, {
|
|
36
|
+
* authProvider: provider
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
class MCPOAuthProvider {
|
|
41
|
+
agent;
|
|
42
|
+
storage;
|
|
43
|
+
flowHandler;
|
|
44
|
+
_clientMetadata;
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.agent = config.agent;
|
|
47
|
+
this.storage = config.storage;
|
|
48
|
+
this.flowHandler = config.flowHandler;
|
|
49
|
+
this._clientMetadata = config.clientMetadata;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a provider for CLI usage
|
|
53
|
+
*/
|
|
54
|
+
static forCLI(agent, flowHandler, storage, clientMetadataOverrides) {
|
|
55
|
+
// Build complete client metadata with required fields
|
|
56
|
+
const clientMetadata = {
|
|
57
|
+
...types_1.DEFAULT_CLIENT_METADATA,
|
|
58
|
+
redirect_uris: [flowHandler.getRedirectUrl().toString()],
|
|
59
|
+
...clientMetadataOverrides,
|
|
60
|
+
};
|
|
61
|
+
return new MCPOAuthProvider({
|
|
62
|
+
agent,
|
|
63
|
+
flowHandler,
|
|
64
|
+
storage,
|
|
65
|
+
clientMetadata,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ========================================
|
|
69
|
+
// OAuthClientProvider interface
|
|
70
|
+
// ========================================
|
|
71
|
+
get redirectUrl() {
|
|
72
|
+
return this.flowHandler.getRedirectUrl();
|
|
73
|
+
}
|
|
74
|
+
get clientMetadata() {
|
|
75
|
+
return this._clientMetadata;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate OAuth state parameter
|
|
79
|
+
*/
|
|
80
|
+
async state() {
|
|
81
|
+
return (0, crypto_1.randomBytes)(32).toString('base64url');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Load client information from agent config
|
|
85
|
+
*/
|
|
86
|
+
async clientInformation() {
|
|
87
|
+
if (this.agent.oauth_client) {
|
|
88
|
+
return (0, types_1.toMCPClientInfo)(this.agent.oauth_client);
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Save client information after dynamic registration
|
|
94
|
+
*/
|
|
95
|
+
async saveClientInformation(clientInfo) {
|
|
96
|
+
this.agent.oauth_client = (0, types_1.fromMCPClientInfo)(clientInfo);
|
|
97
|
+
await this.persistAgent();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Load existing tokens from agent config
|
|
101
|
+
*/
|
|
102
|
+
async tokens() {
|
|
103
|
+
if (this.agent.oauth_tokens) {
|
|
104
|
+
return (0, types_1.toMCPTokens)(this.agent.oauth_tokens);
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Save tokens after authorization
|
|
110
|
+
* Also cleans up the temporary code verifier
|
|
111
|
+
*/
|
|
112
|
+
async saveTokens(tokens) {
|
|
113
|
+
this.agent.oauth_tokens = (0, types_1.fromMCPTokens)(tokens);
|
|
114
|
+
// Clean up temporary code verifier after successful token exchange
|
|
115
|
+
delete this.agent.oauth_code_verifier;
|
|
116
|
+
await this.persistAgent();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Redirect user to authorization URL
|
|
120
|
+
*/
|
|
121
|
+
async redirectToAuthorization(authorizationUrl) {
|
|
122
|
+
await this.flowHandler.redirectToAuthorization(authorizationUrl);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Save PKCE code verifier
|
|
126
|
+
*/
|
|
127
|
+
async saveCodeVerifier(codeVerifier) {
|
|
128
|
+
this.agent.oauth_code_verifier = codeVerifier;
|
|
129
|
+
await this.persistAgent();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Load PKCE code verifier
|
|
133
|
+
* The MCP SDK calls saveCodeVerifier() before authorization and
|
|
134
|
+
* retrieves it here during token exchange.
|
|
135
|
+
*/
|
|
136
|
+
async codeVerifier() {
|
|
137
|
+
if (!this.agent.oauth_code_verifier) {
|
|
138
|
+
throw new Error('No PKCE code verifier found. The OAuth flow may have been interrupted or ' +
|
|
139
|
+
'the agent config was modified. Please try authenticating again.');
|
|
140
|
+
}
|
|
141
|
+
return this.agent.oauth_code_verifier;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Invalidate credentials when server indicates they're invalid
|
|
145
|
+
*/
|
|
146
|
+
async invalidateCredentials(scope) {
|
|
147
|
+
switch (scope) {
|
|
148
|
+
case 'all':
|
|
149
|
+
delete this.agent.oauth_tokens;
|
|
150
|
+
delete this.agent.oauth_client;
|
|
151
|
+
delete this.agent.oauth_code_verifier;
|
|
152
|
+
break;
|
|
153
|
+
case 'tokens':
|
|
154
|
+
delete this.agent.oauth_tokens;
|
|
155
|
+
break;
|
|
156
|
+
case 'client':
|
|
157
|
+
delete this.agent.oauth_client;
|
|
158
|
+
break;
|
|
159
|
+
case 'verifier':
|
|
160
|
+
delete this.agent.oauth_code_verifier;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
await this.persistAgent();
|
|
164
|
+
}
|
|
165
|
+
// ========================================
|
|
166
|
+
// Additional methods
|
|
167
|
+
// ========================================
|
|
168
|
+
/**
|
|
169
|
+
* Persist agent config to storage if configured
|
|
170
|
+
*/
|
|
171
|
+
async persistAgent() {
|
|
172
|
+
if (this.storage) {
|
|
173
|
+
await this.storage.saveAgent(this.agent);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Wait for the OAuth callback
|
|
178
|
+
* Call this after UnauthorizedError is thrown
|
|
179
|
+
*/
|
|
180
|
+
async waitForCallback() {
|
|
181
|
+
return this.flowHandler.waitForCallback();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Clean up resources
|
|
185
|
+
*/
|
|
186
|
+
async cleanup() {
|
|
187
|
+
await this.flowHandler.cleanup();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Check if we have valid, non-expired OAuth tokens
|
|
191
|
+
* @returns true if access_token exists and hasn't expired (with 5 minute buffer)
|
|
192
|
+
*/
|
|
193
|
+
hasValidTokens() {
|
|
194
|
+
const tokens = this.agent.oauth_tokens;
|
|
195
|
+
if (!tokens?.access_token)
|
|
196
|
+
return false;
|
|
197
|
+
// Check expiration if available
|
|
198
|
+
if (tokens.expires_at) {
|
|
199
|
+
const expiresAt = new Date(tokens.expires_at);
|
|
200
|
+
// Consider expired if within 5 minutes of expiration
|
|
201
|
+
if (expiresAt.getTime() - Date.now() < 5 * 60 * 1000) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Check if we have a refresh token available for token refresh
|
|
209
|
+
* @returns true if refresh_token is present
|
|
210
|
+
*/
|
|
211
|
+
hasRefreshToken() {
|
|
212
|
+
return !!this.agent.oauth_tokens?.refresh_token;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Clear all OAuth data for this agent
|
|
216
|
+
*/
|
|
217
|
+
async clearAuth() {
|
|
218
|
+
await this.invalidateCredentials('all');
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get the agent config this provider manages
|
|
222
|
+
* @returns The AgentConfig with OAuth tokens populated after successful auth
|
|
223
|
+
*/
|
|
224
|
+
getAgent() {
|
|
225
|
+
return this.agent;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get the agent identifier
|
|
229
|
+
* @returns The agent's unique ID
|
|
230
|
+
*/
|
|
231
|
+
getAgentId() {
|
|
232
|
+
return this.agent.id;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.MCPOAuthProvider = MCPOAuthProvider;
|
|
236
|
+
//# sourceMappingURL=MCPOAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPOAuthProvider.js","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/MCPOAuthProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Discovery utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions to discover OAuth capabilities of MCP servers.
|
|
5
|
+
* MCP servers expose OAuth metadata at /.well-known/oauth-authorization-server
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OAuth Authorization Server Metadata
|
|
9
|
+
* @see https://datatracker.ietf.org/doc/html/rfc8414
|
|
10
|
+
*/
|
|
11
|
+
export interface OAuthMetadata {
|
|
12
|
+
/** URL of the authorization endpoint */
|
|
13
|
+
authorization_endpoint: string;
|
|
14
|
+
/** URL of the token endpoint */
|
|
15
|
+
token_endpoint: string;
|
|
16
|
+
/** URL of the dynamic client registration endpoint (optional) */
|
|
17
|
+
registration_endpoint?: string;
|
|
18
|
+
/** Issuer identifier */
|
|
19
|
+
issuer?: string;
|
|
20
|
+
/** PKCE code challenge methods supported */
|
|
21
|
+
code_challenge_methods_supported?: string[];
|
|
22
|
+
/** Response types supported */
|
|
23
|
+
response_types_supported?: string[];
|
|
24
|
+
/** Grant types supported */
|
|
25
|
+
grant_types_supported?: string[];
|
|
26
|
+
/** Token endpoint auth methods supported */
|
|
27
|
+
token_endpoint_auth_methods_supported?: string[];
|
|
28
|
+
/** Scopes supported */
|
|
29
|
+
scopes_supported?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Options for OAuth discovery
|
|
33
|
+
*/
|
|
34
|
+
export interface DiscoveryOptions {
|
|
35
|
+
/** Timeout in milliseconds (default: 5000) */
|
|
36
|
+
timeout?: number;
|
|
37
|
+
/** Custom fetch function (for testing or custom HTTP handling) */
|
|
38
|
+
fetch?: typeof fetch;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Discover OAuth metadata from an MCP server
|
|
42
|
+
*
|
|
43
|
+
* Fetches the OAuth Authorization Server Metadata from the well-known endpoint.
|
|
44
|
+
* Returns null if the server doesn't support OAuth or the metadata isn't available.
|
|
45
|
+
*
|
|
46
|
+
* @param agentUrl - The MCP server URL
|
|
47
|
+
* @param options - Discovery options
|
|
48
|
+
* @returns OAuth metadata or null if not available
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const metadata = await discoverOAuthMetadata('https://agent.example.com/mcp');
|
|
53
|
+
* if (metadata) {
|
|
54
|
+
* console.log('Authorization URL:', metadata.authorization_endpoint);
|
|
55
|
+
* console.log('Supports dynamic registration:', !!metadata.registration_endpoint);
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function discoverOAuthMetadata(agentUrl: string, options?: DiscoveryOptions): Promise<OAuthMetadata | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Check if an MCP server supports OAuth authentication
|
|
62
|
+
*
|
|
63
|
+
* This is a simple boolean check - use discoverOAuthMetadata() if you need
|
|
64
|
+
* the actual endpoints.
|
|
65
|
+
*
|
|
66
|
+
* @param agentUrl - The MCP server URL
|
|
67
|
+
* @param options - Discovery options
|
|
68
|
+
* @returns true if the server supports OAuth
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* if (await supportsOAuth('https://agent.example.com/mcp')) {
|
|
73
|
+
* console.log('Agent requires OAuth authentication');
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function supportsOAuth(agentUrl: string, options?: DiscoveryOptions): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Check if an MCP server supports dynamic client registration
|
|
80
|
+
*
|
|
81
|
+
* Servers that support dynamic registration allow clients to register
|
|
82
|
+
* automatically without pre-configured credentials.
|
|
83
|
+
*
|
|
84
|
+
* @param agentUrl - The MCP server URL
|
|
85
|
+
* @param options - Discovery options
|
|
86
|
+
* @returns true if the server supports dynamic client registration
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* if (await supportsDynamicRegistration('https://agent.example.com/mcp')) {
|
|
91
|
+
* console.log('Agent supports automatic client registration');
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function supportsDynamicRegistration(agentUrl: string, options?: DiscoveryOptions): Promise<boolean>;
|
|
96
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5C,+BAA+B;IAC/B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,4BAA4B;IAC5B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,4CAA4C;IAC5C,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;IACjD,uBAAuB;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpH"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OAuth Discovery utilities
|
|
4
|
+
*
|
|
5
|
+
* Functions to discover OAuth capabilities of MCP servers.
|
|
6
|
+
* MCP servers expose OAuth metadata at /.well-known/oauth-authorization-server
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.discoverOAuthMetadata = discoverOAuthMetadata;
|
|
10
|
+
exports.supportsOAuth = supportsOAuth;
|
|
11
|
+
exports.supportsDynamicRegistration = supportsDynamicRegistration;
|
|
12
|
+
/**
|
|
13
|
+
* Discover OAuth metadata from an MCP server
|
|
14
|
+
*
|
|
15
|
+
* Fetches the OAuth Authorization Server Metadata from the well-known endpoint.
|
|
16
|
+
* Returns null if the server doesn't support OAuth or the metadata isn't available.
|
|
17
|
+
*
|
|
18
|
+
* @param agentUrl - The MCP server URL
|
|
19
|
+
* @param options - Discovery options
|
|
20
|
+
* @returns OAuth metadata or null if not available
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const metadata = await discoverOAuthMetadata('https://agent.example.com/mcp');
|
|
25
|
+
* if (metadata) {
|
|
26
|
+
* console.log('Authorization URL:', metadata.authorization_endpoint);
|
|
27
|
+
* console.log('Supports dynamic registration:', !!metadata.registration_endpoint);
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
async function discoverOAuthMetadata(agentUrl, options = {}) {
|
|
32
|
+
const { timeout = 5000, fetch: customFetch = fetch } = options;
|
|
33
|
+
try {
|
|
34
|
+
const baseUrl = new URL(agentUrl);
|
|
35
|
+
const metadataUrl = new URL('/.well-known/oauth-authorization-server', baseUrl.origin);
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
38
|
+
try {
|
|
39
|
+
const response = await customFetch(metadataUrl.toString(), {
|
|
40
|
+
headers: { Accept: 'application/json' },
|
|
41
|
+
signal: controller.signal,
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const metadata = (await response.json());
|
|
47
|
+
// Validate required fields
|
|
48
|
+
if (!metadata.authorization_endpoint || !metadata.token_endpoint) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return metadata;
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
clearTimeout(timeoutId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Network error, timeout, or invalid URL - agent doesn't support OAuth
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if an MCP server supports OAuth authentication
|
|
64
|
+
*
|
|
65
|
+
* This is a simple boolean check - use discoverOAuthMetadata() if you need
|
|
66
|
+
* the actual endpoints.
|
|
67
|
+
*
|
|
68
|
+
* @param agentUrl - The MCP server URL
|
|
69
|
+
* @param options - Discovery options
|
|
70
|
+
* @returns true if the server supports OAuth
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* if (await supportsOAuth('https://agent.example.com/mcp')) {
|
|
75
|
+
* console.log('Agent requires OAuth authentication');
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async function supportsOAuth(agentUrl, options = {}) {
|
|
80
|
+
const metadata = await discoverOAuthMetadata(agentUrl, options);
|
|
81
|
+
return metadata !== null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if an MCP server supports dynamic client registration
|
|
85
|
+
*
|
|
86
|
+
* Servers that support dynamic registration allow clients to register
|
|
87
|
+
* automatically without pre-configured credentials.
|
|
88
|
+
*
|
|
89
|
+
* @param agentUrl - The MCP server URL
|
|
90
|
+
* @param options - Discovery options
|
|
91
|
+
* @returns true if the server supports dynamic client registration
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* if (await supportsDynamicRegistration('https://agent.example.com/mcp')) {
|
|
96
|
+
* console.log('Agent supports automatic client registration');
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
async function supportsDynamicRegistration(agentUrl, options = {}) {
|
|
101
|
+
const metadata = await discoverOAuthMetadata(agentUrl, options);
|
|
102
|
+
return metadata?.registration_endpoint !== undefined;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/discovery.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwDH,sDAsCC;AAmBD,sCAGC;AAmBD,kEAGC;AArGD;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,UAA4B,EAAE;IAE9B,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,yCAAyC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE;gBACzD,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;YAE1D,2BAA2B;YAC3B,IAAI,CAAC,QAAQ,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,UAA4B,EAAE;IAClF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,2BAA2B,CAAC,QAAgB,EAAE,UAA4B,EAAE;IAChG,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,QAAQ,EAAE,qBAAqB,KAAK,SAAS,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth module for MCP authentication
|
|
3
|
+
*
|
|
4
|
+
* OAuth tokens are stored directly in AgentConfig, same as static auth tokens.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { MCPOAuthProvider, CLIFlowHandler } from '@adcp/client';
|
|
9
|
+
*
|
|
10
|
+
* // Agent config - tokens will be stored here
|
|
11
|
+
* const agent: AgentConfig = {
|
|
12
|
+
* id: 'my-agent',
|
|
13
|
+
* name: 'My Agent',
|
|
14
|
+
* agent_uri: 'https://agent.example.com/mcp',
|
|
15
|
+
* protocol: 'mcp',
|
|
16
|
+
* // After OAuth flow completes:
|
|
17
|
+
* // oauth_tokens: { access_token: '...', refresh_token: '...' }
|
|
18
|
+
* };
|
|
19
|
+
*
|
|
20
|
+
* // Create provider with CLI flow handler
|
|
21
|
+
* const provider = new MCPOAuthProvider({
|
|
22
|
+
* agent,
|
|
23
|
+
* flowHandler: new CLIFlowHandler(),
|
|
24
|
+
* storage: myConfigStorage // Optional: persists tokens to file/db
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Use with MCP transport
|
|
28
|
+
* const transport = new StreamableHTTPClientTransport(url, {
|
|
29
|
+
* authProvider: provider
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export type { OAuthFlowHandler, OAuthProviderConfig, OAuthConfigStorage, OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens, AgentConfig, AgentOAuthTokens, AgentOAuthClient, } from './types';
|
|
34
|
+
export { DEFAULT_CLIENT_METADATA, OAuthError, OAuthCancelledError, OAuthTimeoutError, toMCPTokens, fromMCPTokens, toMCPClientInfo, fromMCPClientInfo, } from './types';
|
|
35
|
+
export { CLIFlowHandler, type CLIFlowHandlerConfig } from './CLIFlowHandler';
|
|
36
|
+
export { MCPOAuthProvider } from './MCPOAuthProvider';
|
|
37
|
+
import { MCPOAuthProvider } from './MCPOAuthProvider';
|
|
38
|
+
import type { OAuthClientMetadata, OAuthConfigStorage, AgentConfig } from './types';
|
|
39
|
+
/**
|
|
40
|
+
* Create an OAuth provider for CLI usage
|
|
41
|
+
*
|
|
42
|
+
* @param agent Agent configuration (tokens stored here)
|
|
43
|
+
* @param options Optional configuration
|
|
44
|
+
* @returns Configured OAuth provider
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const agent: AgentConfig = {
|
|
49
|
+
* id: 'my-agent',
|
|
50
|
+
* name: 'My Agent',
|
|
51
|
+
* agent_uri: 'https://agent.example.com/mcp',
|
|
52
|
+
* protocol: 'mcp'
|
|
53
|
+
* };
|
|
54
|
+
*
|
|
55
|
+
* const provider = createCLIOAuthProvider(agent);
|
|
56
|
+
*
|
|
57
|
+
* const transport = new StreamableHTTPClientTransport(url, {
|
|
58
|
+
* authProvider: provider
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* try {
|
|
62
|
+
* await client.connect(transport);
|
|
63
|
+
* } catch (error) {
|
|
64
|
+
* if (error instanceof UnauthorizedError) {
|
|
65
|
+
* const code = await provider.waitForCallback();
|
|
66
|
+
* await transport.finishAuth(code);
|
|
67
|
+
* await client.connect(transport);
|
|
68
|
+
* }
|
|
69
|
+
* }
|
|
70
|
+
*
|
|
71
|
+
* // After successful auth, agent.oauth_tokens is populated
|
|
72
|
+
* console.log(agent.oauth_tokens);
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function createCLIOAuthProvider(agent: AgentConfig, options?: {
|
|
76
|
+
/** Callback port (default: 8766) */
|
|
77
|
+
callbackPort?: number;
|
|
78
|
+
/** Auth timeout in ms (default: 300000 = 5 min) */
|
|
79
|
+
timeout?: number;
|
|
80
|
+
/** Custom client metadata overrides */
|
|
81
|
+
clientMetadata?: Partial<OAuthClientMetadata>;
|
|
82
|
+
/** Suppress console output */
|
|
83
|
+
quiet?: boolean;
|
|
84
|
+
/** Storage for persisting agent config */
|
|
85
|
+
storage?: OAuthConfigStorage;
|
|
86
|
+
}): MCPOAuthProvider;
|
|
87
|
+
/**
|
|
88
|
+
* Check if an error indicates OAuth is required
|
|
89
|
+
*/
|
|
90
|
+
export declare function isOAuthRequired(error: unknown): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Check if an agent has valid OAuth tokens
|
|
93
|
+
*/
|
|
94
|
+
export declare function hasValidOAuthTokens(agent: AgentConfig): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Clear OAuth tokens from an agent config
|
|
97
|
+
*/
|
|
98
|
+
export declare function clearOAuthTokens(agent: AgentConfig): void;
|
|
99
|
+
/**
|
|
100
|
+
* Get the effective auth token for an agent
|
|
101
|
+
* Returns OAuth access_token if available, otherwise static auth_token
|
|
102
|
+
*/
|
|
103
|
+
export declare function getEffectiveAuthToken(agent: AgentConfig): string | undefined;
|
|
104
|
+
export { discoverOAuthMetadata, supportsOAuth, supportsDynamicRegistration, type OAuthMetadata, type DiscoveryOptions, } from './discovery';
|
|
105
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;IACR,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9C,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,GACA,gBAAgB,CAqBlB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAa/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIzD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAO5E;AAGD,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC"}
|