@felan-ai/felan 0.8.0 → 0.9.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.
Files changed (56) hide show
  1. package/NOTICE +23 -2
  2. package/README.md +58 -5
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +1 -8
  5. package/dist/application.js.map +1 -1
  6. package/dist/extensions.d.ts +7 -3
  7. package/dist/extensions.d.ts.map +1 -1
  8. package/dist/extensions.js +27 -2
  9. package/dist/extensions.js.map +1 -1
  10. package/dist/mcp/callback-server.d.ts +11 -0
  11. package/dist/mcp/callback-server.d.ts.map +1 -0
  12. package/dist/mcp/callback-server.js +221 -0
  13. package/dist/mcp/callback-server.js.map +1 -0
  14. package/dist/mcp/config.d.ts +20 -0
  15. package/dist/mcp/config.d.ts.map +1 -0
  16. package/dist/mcp/config.js +349 -0
  17. package/dist/mcp/config.js.map +1 -0
  18. package/dist/mcp/index.d.ts +3 -0
  19. package/dist/mcp/index.d.ts.map +1 -0
  20. package/dist/mcp/index.js +22 -0
  21. package/dist/mcp/index.js.map +1 -0
  22. package/dist/mcp/oauth-host.d.ts +41 -0
  23. package/dist/mcp/oauth-host.d.ts.map +1 -0
  24. package/dist/mcp/oauth-host.js +510 -0
  25. package/dist/mcp/oauth-host.js.map +1 -0
  26. package/dist/mcp/oauth-store.d.ts +27 -0
  27. package/dist/mcp/oauth-store.d.ts.map +1 -0
  28. package/dist/mcp/oauth-store.js +138 -0
  29. package/dist/mcp/oauth-store.js.map +1 -0
  30. package/dist/powerline.d.ts +4 -0
  31. package/dist/powerline.d.ts.map +1 -0
  32. package/dist/powerline.js +91 -0
  33. package/dist/powerline.js.map +1 -0
  34. package/dist/runtime.d.ts.map +1 -1
  35. package/dist/runtime.js +1 -1
  36. package/dist/runtime.js.map +1 -1
  37. package/dist/subagents/agent-navigator.d.ts +44 -0
  38. package/dist/subagents/agent-navigator.d.ts.map +1 -0
  39. package/dist/subagents/agent-navigator.js +667 -0
  40. package/dist/subagents/agent-navigator.js.map +1 -0
  41. package/dist/subagents/agent-transcript.d.ts +19 -0
  42. package/dist/subagents/agent-transcript.d.ts.map +1 -0
  43. package/dist/subagents/agent-transcript.js +335 -0
  44. package/dist/subagents/agent-transcript.js.map +1 -0
  45. package/dist/subagents/catalog.d.ts.map +1 -1
  46. package/dist/subagents/catalog.js +2 -1
  47. package/dist/subagents/catalog.js.map +1 -1
  48. package/dist/subagents/host.d.ts +9 -2
  49. package/dist/subagents/host.d.ts.map +1 -1
  50. package/dist/subagents/host.js +40 -8
  51. package/dist/subagents/host.js.map +1 -1
  52. package/package.json +12 -7
  53. package/dist/subagents/presenter.d.ts +0 -11
  54. package/dist/subagents/presenter.d.ts.map +0 -1
  55. package/dist/subagents/presenter.js +0 -34
  56. package/dist/subagents/presenter.js.map +0 -1
@@ -0,0 +1,349 @@
1
+ import { join } from 'node:path';
2
+ import { validateMcpConfig, } from '@felan-ai/ext-mcp';
3
+ const MAX_CONFIG_BYTES = 256 * 1024;
4
+ const MAX_SERVERS = 32;
5
+ const MAX_WARNINGS = 32;
6
+ const ROOT_FIELDS = new Set(['mcpServers', 'settings']);
7
+ const SERVER_FIELDS = new Set([
8
+ 'url',
9
+ 'auth',
10
+ 'httpTransport',
11
+ 'requestTimeoutMs',
12
+ 'oauth',
13
+ ]);
14
+ const PROJECT_SERVER_FIELDS = new Set([
15
+ ...SERVER_FIELDS,
16
+ 'disabled',
17
+ 'type',
18
+ ]);
19
+ const OAUTH_FIELDS = new Set([
20
+ 'grantType',
21
+ 'clientId',
22
+ 'clientSecret',
23
+ 'clientSecretEnv',
24
+ 'scope',
25
+ 'redirectUri',
26
+ 'clientName',
27
+ 'clientUri',
28
+ 'authorizationParams',
29
+ ]);
30
+ const RESERVED_AUTHORIZATION_PARAMS = new Set([
31
+ 'client_id',
32
+ 'code_challenge',
33
+ 'code_challenge_method',
34
+ 'redirect_uri',
35
+ 'resource',
36
+ 'response_type',
37
+ 'scope',
38
+ 'state',
39
+ ]);
40
+ export async function readLocalMcpConfig(runtime, agentDir) {
41
+ const agentConfig = await readAgentConfig(runtime, agentDir);
42
+ const projectConfig = await readProjectConfig(runtime);
43
+ return mergeConfigs(agentConfig, projectConfig);
44
+ }
45
+ async function readAgentConfig(runtime, agentDir) {
46
+ if (!runtime.readAgentFile)
47
+ return emptyConfig();
48
+ const source = join(agentDir, 'mcp.json');
49
+ let content;
50
+ try {
51
+ content = await runtime.readAgentFile('mcp.json');
52
+ }
53
+ catch (error) {
54
+ if (isMissingFile(error))
55
+ return emptyConfig();
56
+ throw new Error(`Failed to read ${source}: ${errorMessage(error)}`, { cause: error });
57
+ }
58
+ ensureConfigSize(content, source);
59
+ let parsed;
60
+ try {
61
+ parsed = JSON.parse(new TextDecoder().decode(content));
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Invalid ${source}: ${errorMessage(error)}`, { cause: error });
65
+ }
66
+ return validateLocalMcpConfig(parsed, source);
67
+ }
68
+ async function readProjectConfig(runtime) {
69
+ const source = join(runtime.cwd, '.mcp.json');
70
+ let content;
71
+ try {
72
+ content = await runtime.readFile('.mcp.json', { maxBytes: MAX_CONFIG_BYTES });
73
+ ensureConfigSize(content, source);
74
+ }
75
+ catch (error) {
76
+ if (isMissingFile(error))
77
+ return emptyConfig();
78
+ return emptyConfigWithWarning('Skipped project MCP config: unable to read the file');
79
+ }
80
+ let parsed;
81
+ try {
82
+ parsed = JSON.parse(new TextDecoder().decode(content));
83
+ }
84
+ catch {
85
+ return emptyConfigWithWarning('Skipped project MCP config: invalid JSON');
86
+ }
87
+ return normalizeProjectMcpConfig(parsed, source);
88
+ }
89
+ export function validateLocalMcpConfig(value, source = 'mcp.json') {
90
+ if (!isRecord(value))
91
+ throw new Error(`${source} must contain a JSON object`);
92
+ rejectUnknownFields(value, ROOT_FIELDS, source);
93
+ if (!isRecord(value.mcpServers))
94
+ throw new Error(`${source}.mcpServers must be an object`);
95
+ const mcpServers = {};
96
+ const oauth = {};
97
+ for (const [name, rawServer] of Object.entries(value.mcpServers)) {
98
+ const serverSource = `${source}.mcpServers.${name}`;
99
+ if (!isRecord(rawServer))
100
+ throw new Error(`${serverSource} must be an object`);
101
+ rejectUnknownFields(rawServer, SERVER_FIELDS, serverSource);
102
+ mcpServers[name] = {
103
+ url: rawServer.url,
104
+ auth: rawServer.auth,
105
+ ...(rawServer.httpTransport === undefined
106
+ ? {}
107
+ : { transport: validateHttpTransport(rawServer.httpTransport, `${serverSource}.httpTransport`) }),
108
+ ...(rawServer.requestTimeoutMs === undefined ? {} : { requestTimeoutMs: rawServer.requestTimeoutMs }),
109
+ };
110
+ if (rawServer.oauth !== undefined) {
111
+ oauth[name] = validateOAuthConfig(rawServer.oauth, `${serverSource}.oauth`);
112
+ }
113
+ }
114
+ return {
115
+ config: validateMcpConfig({
116
+ mcpServers,
117
+ ...(value.settings === undefined ? {} : { settings: value.settings }),
118
+ }, source),
119
+ oauth,
120
+ warnings: [],
121
+ };
122
+ }
123
+ function normalizeProjectMcpConfig(value, source) {
124
+ if (!isRecord(value)) {
125
+ return emptyConfigWithWarning('Skipped project MCP config: root must be an object');
126
+ }
127
+ if (!isRecord(value.mcpServers)) {
128
+ return emptyConfigWithWarning('Skipped project MCP config: mcpServers must be an object');
129
+ }
130
+ const warnings = [];
131
+ const mcpServers = {};
132
+ const oauth = {};
133
+ for (const [name, rawServer] of Object.entries(value.mcpServers)) {
134
+ const reason = unsupportedProjectServerReason(rawServer);
135
+ if (reason !== undefined) {
136
+ addWarning(warnings, `Skipped project MCP server ${boundedServerName(name)}: ${reason}`);
137
+ continue;
138
+ }
139
+ const rawHttpServer = rawServer;
140
+ const inferredTransport = rawHttpServer.type === 'sse'
141
+ ? 'sse'
142
+ : rawHttpServer.type === 'streamable-http' ? 'streamable-http' : undefined;
143
+ const normalizedServer = {
144
+ url: rawHttpServer.url,
145
+ auth: rawHttpServer.auth ?? 'oauth',
146
+ ...(rawHttpServer.httpTransport === undefined && inferredTransport === undefined
147
+ ? {}
148
+ : { httpTransport: rawHttpServer.httpTransport ?? inferredTransport }),
149
+ ...(rawHttpServer.requestTimeoutMs === undefined
150
+ ? {}
151
+ : { requestTimeoutMs: rawHttpServer.requestTimeoutMs }),
152
+ ...(rawHttpServer.oauth === undefined ? {} : { oauth: rawHttpServer.oauth }),
153
+ };
154
+ try {
155
+ const validated = validateLocalMcpConfig({
156
+ mcpServers: { [name]: normalizedServer },
157
+ }, source);
158
+ const server = validated.config.mcpServers[name];
159
+ if (server === undefined)
160
+ continue;
161
+ mcpServers[name] = server;
162
+ const serverOAuth = validated.oauth[name];
163
+ if (serverOAuth !== undefined)
164
+ oauth[name] = serverOAuth;
165
+ }
166
+ catch {
167
+ addWarning(warnings, `Skipped project MCP server ${boundedServerName(name)}: invalid OAuth HTTP configuration`);
168
+ }
169
+ }
170
+ const settings = normalizeProjectSettings(value.settings, warnings);
171
+ return {
172
+ config: {
173
+ mcpServers,
174
+ ...(settings === undefined ? {} : { settings }),
175
+ },
176
+ oauth,
177
+ warnings,
178
+ };
179
+ }
180
+ function unsupportedProjectServerReason(value) {
181
+ if (!isRecord(value))
182
+ return 'server configuration must be an object';
183
+ if (value.disabled === true)
184
+ return 'server is disabled';
185
+ if ('command' in value || 'args' in value)
186
+ return 'stdio transport is unsupported';
187
+ if ('headers' in value)
188
+ return 'custom headers are unsupported';
189
+ if ('socket' in value)
190
+ return 'socket transport is unsupported';
191
+ if (value.type !== undefined
192
+ && value.type !== 'http'
193
+ && value.type !== 'streamable-http'
194
+ && value.type !== 'sse')
195
+ return 'non-HTTP transport is unsupported';
196
+ if (value.auth !== undefined && value.auth !== 'oauth')
197
+ return 'non-OAuth authentication is unsupported';
198
+ if (value.oauth === false)
199
+ return 'OAuth is disabled';
200
+ for (const field of Object.keys(value)) {
201
+ if (!PROJECT_SERVER_FIELDS.has(field))
202
+ return 'server contains unsupported fields';
203
+ }
204
+ return undefined;
205
+ }
206
+ function normalizeProjectSettings(value, warnings) {
207
+ if (value === undefined)
208
+ return undefined;
209
+ if (!isRecord(value)) {
210
+ addWarning(warnings, 'Ignored project MCP settings: settings must be an object');
211
+ return undefined;
212
+ }
213
+ if (value.requestTimeoutMs === undefined)
214
+ return undefined;
215
+ try {
216
+ return validateMcpConfig({
217
+ mcpServers: {},
218
+ settings: { requestTimeoutMs: value.requestTimeoutMs },
219
+ }).settings;
220
+ }
221
+ catch {
222
+ addWarning(warnings, 'Ignored project MCP settings: invalid request timeout');
223
+ return undefined;
224
+ }
225
+ }
226
+ function mergeConfigs(agent, project) {
227
+ const mcpServers = { ...agent.config.mcpServers };
228
+ const oauth = { ...agent.oauth };
229
+ const warnings = [...agent.warnings, ...project.warnings].slice(0, MAX_WARNINGS);
230
+ for (const [name, server] of Object.entries(project.config.mcpServers)) {
231
+ if (!(name in mcpServers) && Object.keys(mcpServers).length >= MAX_SERVERS) {
232
+ addWarning(warnings, 'Skipped project MCP server entry: maximum server count reached');
233
+ continue;
234
+ }
235
+ mcpServers[name] = server;
236
+ delete oauth[name];
237
+ const projectOAuth = project.oauth[name];
238
+ if (projectOAuth !== undefined)
239
+ oauth[name] = projectOAuth;
240
+ }
241
+ const settings = agent.config.settings === undefined && project.config.settings === undefined
242
+ ? undefined
243
+ : { ...agent.config.settings, ...project.config.settings };
244
+ return {
245
+ config: validateMcpConfig({
246
+ mcpServers,
247
+ ...(settings === undefined ? {} : { settings }),
248
+ }),
249
+ oauth,
250
+ warnings,
251
+ };
252
+ }
253
+ function validateOAuthConfig(value, source) {
254
+ if (!isRecord(value))
255
+ throw new Error(`${source} must be an object`);
256
+ rejectUnknownFields(value, OAUTH_FIELDS, source);
257
+ if (value.grantType !== undefined && value.grantType !== 'authorization_code') {
258
+ throw new Error(`${source}.grantType must be "authorization_code"`);
259
+ }
260
+ if (value.clientSecret !== undefined && value.clientSecretEnv !== undefined) {
261
+ throw new Error(`${source} cannot set both clientSecret and clientSecretEnv`);
262
+ }
263
+ if (value.clientId === undefined
264
+ && (value.clientSecret !== undefined || value.clientSecretEnv !== undefined)) {
265
+ throw new Error(`${source} requires clientId when a client secret is configured`);
266
+ }
267
+ if (value.clientSecretEnv !== undefined
268
+ && (typeof value.clientSecretEnv !== 'string'
269
+ || !/^[A-Za-z_][A-Za-z0-9_]*$/u.test(value.clientSecretEnv.trim()))) {
270
+ throw new Error(`${source}.clientSecretEnv must be an environment variable name`);
271
+ }
272
+ const authorizationParams = value.authorizationParams === undefined
273
+ ? undefined
274
+ : validateAuthorizationParams(value.authorizationParams, `${source}.authorizationParams`);
275
+ return {
276
+ ...optionalString(value.clientId, `${source}.clientId`, 'clientId'),
277
+ ...optionalString(value.clientSecret, `${source}.clientSecret`, 'clientSecret'),
278
+ ...optionalString(value.clientSecretEnv, `${source}.clientSecretEnv`, 'clientSecretEnv'),
279
+ ...optionalString(value.scope, `${source}.scope`, 'scope'),
280
+ ...optionalString(value.redirectUri, `${source}.redirectUri`, 'redirectUri'),
281
+ ...optionalString(value.clientName, `${source}.clientName`, 'clientName'),
282
+ ...optionalString(value.clientUri, `${source}.clientUri`, 'clientUri'),
283
+ ...(authorizationParams === undefined ? {} : { authorizationParams }),
284
+ };
285
+ }
286
+ function validateAuthorizationParams(value, source) {
287
+ if (!isRecord(value))
288
+ throw new Error(`${source} must be an object`);
289
+ const result = {};
290
+ for (const [key, item] of Object.entries(value)) {
291
+ if (!key)
292
+ throw new Error(`${source} keys must not be empty`);
293
+ if (RESERVED_AUTHORIZATION_PARAMS.has(key)) {
294
+ throw new Error(`${source}.${key} cannot override an OAuth flow parameter`);
295
+ }
296
+ if (typeof item !== 'string')
297
+ throw new Error(`${source}.${key} must be a string`);
298
+ result[key] = item;
299
+ }
300
+ return result;
301
+ }
302
+ function optionalString(value, source, key) {
303
+ if (value === undefined)
304
+ return {};
305
+ if (typeof value !== 'string' || value.trim().length === 0) {
306
+ throw new Error(`${source} must be a non-empty string`);
307
+ }
308
+ return { [key]: value.trim() };
309
+ }
310
+ function validateHttpTransport(value, source) {
311
+ if (value !== 'streamable-http' && value !== 'sse') {
312
+ throw new Error(`${source} must be streamable-http or sse`);
313
+ }
314
+ return value;
315
+ }
316
+ function emptyConfig() {
317
+ return { config: { mcpServers: {} }, oauth: {}, warnings: [] };
318
+ }
319
+ function emptyConfigWithWarning(warning) {
320
+ return { config: { mcpServers: {} }, oauth: {}, warnings: [warning] };
321
+ }
322
+ function ensureConfigSize(content, source) {
323
+ if (content.byteLength > MAX_CONFIG_BYTES) {
324
+ throw new Error(`${source} exceeds the ${MAX_CONFIG_BYTES}-byte size limit`);
325
+ }
326
+ }
327
+ function addWarning(warnings, warning) {
328
+ if (warnings.length < MAX_WARNINGS)
329
+ warnings.push(warning);
330
+ }
331
+ function boundedServerName(name) {
332
+ return JSON.stringify(name.slice(0, 128));
333
+ }
334
+ function rejectUnknownFields(value, allowed, source) {
335
+ for (const field of Object.keys(value)) {
336
+ if (!allowed.has(field))
337
+ throw new Error(`${source} contains unknown field: ${field}`);
338
+ }
339
+ }
340
+ function isRecord(value) {
341
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
342
+ }
343
+ function isMissingFile(error) {
344
+ return error instanceof Error && 'code' in error && error.code === 'ENOENT';
345
+ }
346
+ function errorMessage(error) {
347
+ return error instanceof Error ? error.message : String(error);
348
+ }
349
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FelanExtension } from '@felan-ai/agent-core';
2
+ export declare function createLocalMcpExtension(): FelanExtension;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,wBAAgB,uBAAuB,IAAI,cAAc,CAexD"}
@@ -0,0 +1,22 @@
1
+ import { createMcpExtension } from '@felan-ai/ext-mcp';
2
+ import { readLocalMcpConfig } from './config.js';
3
+ import { createLocalMcpOAuthHost } from './oauth-host.js';
4
+ export function createLocalMcpExtension() {
5
+ return async (pi) => {
6
+ const local = await readLocalMcpConfig(pi.runtime, pi.agentDir);
7
+ const extension = createMcpExtension({
8
+ config: local.config,
9
+ oauthHost: createLocalMcpOAuthHost(pi.agentDir, local.oauth),
10
+ });
11
+ await extension(pi);
12
+ if (local.warnings.length > 0) {
13
+ pi.on('session_start', (_event, ctx) => {
14
+ if (!ctx.hasUI)
15
+ return;
16
+ for (const warning of local.warnings)
17
+ ctx.ui.notify(warning, 'warning');
18
+ });
19
+ }
20
+ };
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,uBAAuB;IACrC,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,kBAAkB,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,KAAK;oBAAE,OAAO;gBACvB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ;oBAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type AuthOptions, type AuthResult, type FetchLike, type OAuthClientInformationContext, type OAuthClientMetadata, type OAuthClientProvider, type OAuthDiscoveryState, type StoredOAuthClientInformation, type StoredOAuthTokens } from '@modelcontextprotocol/client';
2
+ import type { McpOAuthHost, ResolvedMcpServer } from '@felan-ai/ext-mcp';
3
+ import { reserveOAuthCallback } from './callback-server.js';
4
+ import type { LocalMcpOAuthConfig } from './config.js';
5
+ import { McpOAuthCredentialRepository, type McpOAuthSecretStore } from './oauth-store.js';
6
+ type RunOAuth = (provider: OAuthClientProvider, options: AuthOptions) => Promise<AuthResult>;
7
+ export interface LocalMcpOAuthDependencies {
8
+ readonly secretStore?: McpOAuthSecretStore;
9
+ readonly runOAuth?: RunOAuth;
10
+ readonly openUrl?: (url: string) => Promise<void>;
11
+ readonly reserveCallback?: typeof reserveOAuthCallback;
12
+ readonly callbackTimeoutMs?: number;
13
+ readonly fetchFn?: FetchLike;
14
+ }
15
+ export declare function createLocalMcpOAuthHost(namespace: string, configs: Readonly<Record<string, LocalMcpOAuthConfig>>, dependencies?: LocalMcpOAuthDependencies): McpOAuthHost;
16
+ export declare class LocalOAuthProvider implements OAuthClientProvider {
17
+ #private;
18
+ readonly server: ResolvedMcpServer;
19
+ constructor(server: ResolvedMcpServer, config: LocalMcpOAuthConfig, repository: McpOAuthCredentialRepository, signal: AbortSignal, fetchFn?: FetchLike);
20
+ get redirectUrl(): URL;
21
+ get clientMetadata(): OAuthClientMetadata;
22
+ get currentState(): string;
23
+ get authorizationUrl(): string | undefined;
24
+ state(): string;
25
+ clientInformation(context?: OAuthClientInformationContext): Promise<StoredOAuthClientInformation | undefined>;
26
+ saveClientInformation(information: StoredOAuthClientInformation, context?: OAuthClientInformationContext): Promise<void>;
27
+ tokens(context?: OAuthClientInformationContext): Promise<StoredOAuthTokens | undefined>;
28
+ saveTokens(tokens: StoredOAuthTokens, context?: OAuthClientInformationContext): Promise<void>;
29
+ redirectToAuthorization(url: URL): void;
30
+ saveCodeVerifier(codeVerifier: string): void;
31
+ codeVerifier(): string;
32
+ saveDiscoveryState(state: OAuthDiscoveryState): void;
33
+ discoveryState(): OAuthDiscoveryState | undefined;
34
+ invalidateCredentials(scope: 'all' | 'client' | 'tokens' | 'verifier' | 'discovery'): Promise<void>;
35
+ beginFlow(signal?: AbortSignal): void;
36
+ clearTransientFlow(): void;
37
+ deactivate(): void;
38
+ authOptions(extra?: Partial<AuthOptions>): AuthOptions;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=oauth-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-host.d.ts","sourceRoot":"","sources":["../../src/mcp/oauth-host.ts"],"names":[],"mappings":"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"}