@felan-ai/felan 0.7.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 (60) hide show
  1. package/NOTICE +23 -2
  2. package/README.md +73 -15
  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 +9 -3
  7. package/dist/extensions.d.ts.map +1 -1
  8. package/dist/extensions.js +34 -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-factory.d.ts +1 -0
  35. package/dist/runtime-factory.d.ts.map +1 -1
  36. package/dist/runtime-factory.js +1 -0
  37. package/dist/runtime-factory.js.map +1 -1
  38. package/dist/runtime.d.ts.map +1 -1
  39. package/dist/runtime.js +1 -1
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/subagents/agent-navigator.d.ts +44 -0
  42. package/dist/subagents/agent-navigator.d.ts.map +1 -0
  43. package/dist/subagents/agent-navigator.js +667 -0
  44. package/dist/subagents/agent-navigator.js.map +1 -0
  45. package/dist/subagents/agent-transcript.d.ts +19 -0
  46. package/dist/subagents/agent-transcript.d.ts.map +1 -0
  47. package/dist/subagents/agent-transcript.js +335 -0
  48. package/dist/subagents/agent-transcript.js.map +1 -0
  49. package/dist/subagents/catalog.d.ts.map +1 -1
  50. package/dist/subagents/catalog.js +2 -1
  51. package/dist/subagents/catalog.js.map +1 -1
  52. package/dist/subagents/host.d.ts +9 -2
  53. package/dist/subagents/host.d.ts.map +1 -1
  54. package/dist/subagents/host.js +40 -8
  55. package/dist/subagents/host.js.map +1 -1
  56. package/package.json +12 -6
  57. package/dist/subagents/presenter.d.ts +0 -11
  58. package/dist/subagents/presenter.d.ts.map +0 -1
  59. package/dist/subagents/presenter.js +0 -34
  60. package/dist/subagents/presenter.js.map +0 -1
@@ -0,0 +1,510 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { auth, } from '@modelcontextprotocol/client';
3
+ import { reserveOAuthCallback, } from './callback-server.js';
4
+ import { KeyringMcpOAuthSecretStore, McpOAuthCredentialRepository, } from './oauth-store.js';
5
+ const DEFAULT_REDIRECT_URI = 'http://127.0.0.1:3118/callback';
6
+ const DEFAULT_CLIENT_NAME = 'Felan';
7
+ const DEFAULT_CLIENT_URI = 'https://github.com/felan-ai/felan';
8
+ const DEFAULT_OAUTH_REQUEST_TIMEOUT_MS = 30_000;
9
+ export function createLocalMcpOAuthHost(namespace, configs, dependencies = {}) {
10
+ const repository = new McpOAuthCredentialRepository(namespace, dependencies.secretStore ?? new KeyringMcpOAuthSecretStore());
11
+ return {
12
+ async createSession(context) {
13
+ return new LocalMcpOAuthSession(context, configs, repository, dependencies);
14
+ },
15
+ };
16
+ }
17
+ class LocalMcpOAuthSession {
18
+ #context;
19
+ #configs;
20
+ #repository;
21
+ #dependencies;
22
+ #controller = new AbortController();
23
+ #providers = new Map();
24
+ #authentications = new Map();
25
+ #closed = false;
26
+ constructor(context, configs, repository, dependencies) {
27
+ this.#context = context;
28
+ this.#configs = configs;
29
+ this.#repository = repository;
30
+ this.#dependencies = dependencies;
31
+ }
32
+ async providerFor(server, signal) {
33
+ this.#assertOpen();
34
+ combineSignals(this.#context.signal, this.#controller.signal, signal).throwIfAborted();
35
+ let provider = this.#providers.get(server.name);
36
+ if (!provider) {
37
+ provider = new LocalOAuthProvider(server, this.#configs[server.name] ?? {}, this.#repository, combineSignals(this.#context.signal, this.#controller.signal), this.#dependencies.fetchFn);
38
+ this.#providers.set(server.name, provider);
39
+ }
40
+ else if (provider.server.url !== server.url) {
41
+ throw new Error(`MCP server URL changed during the OAuth session: ${server.name}`);
42
+ }
43
+ return provider;
44
+ }
45
+ async authenticate(server, context) {
46
+ this.#assertOpen();
47
+ if (!context.extensionContext.hasUI || context.extensionContext.mode !== 'tui') {
48
+ return {
49
+ status: 'unavailable',
50
+ message: `OAuth authentication for ${server.name} requires the local Felan TUI. Authenticate from a root TUI session and retry.`,
51
+ };
52
+ }
53
+ const existing = this.#authentications.get(server.name);
54
+ if (existing)
55
+ return existing.promise;
56
+ const controller = new AbortController();
57
+ const operation = this.#authenticateInteractive(server, {
58
+ ...context,
59
+ signal: combineSignals(context.signal, controller.signal),
60
+ }).finally(() => {
61
+ if (this.#authentications.get(server.name)?.promise === operation) {
62
+ this.#authentications.delete(server.name);
63
+ }
64
+ });
65
+ this.#authentications.set(server.name, { controller, promise: operation });
66
+ return operation;
67
+ }
68
+ async logout(server, signal) {
69
+ this.#assertOpen();
70
+ const combined = combineSignals(this.#context.signal, this.#controller.signal, signal);
71
+ const active = this.#authentications.get(server.name);
72
+ if (active) {
73
+ active.controller.abort(new Error(`OAuth authentication for ${server.name} was cancelled by logout`));
74
+ await active.promise.catch(() => { });
75
+ }
76
+ combined.throwIfAborted();
77
+ await this.#repository.remove(server, combined);
78
+ this.#providers.get(server.name)?.clearTransientFlow();
79
+ }
80
+ async close() {
81
+ if (this.#closed)
82
+ return;
83
+ this.#closed = true;
84
+ this.#controller.abort(new Error('Local MCP OAuth session closed'));
85
+ await Promise.allSettled([...this.#authentications.values()].map(({ promise }) => promise));
86
+ for (const provider of this.#providers.values())
87
+ provider.deactivate();
88
+ this.#providers.clear();
89
+ }
90
+ async #authenticateInteractive(server, context) {
91
+ const signal = combineSignals(this.#context.signal, this.#controller.signal, context.signal);
92
+ const provider = await this.providerFor(server, signal);
93
+ provider.beginFlow(signal);
94
+ let callback;
95
+ try {
96
+ callback = await (this.#dependencies.reserveCallback ?? reserveOAuthCallback)(provider.redirectUrl.toString(), provider.currentState, signal, this.#dependencies.callbackTimeoutMs);
97
+ const runOAuth = this.#dependencies.runOAuth ?? auth;
98
+ const initial = await runOAuth(provider, provider.authOptions());
99
+ signal.throwIfAborted();
100
+ if (initial === 'AUTHORIZED')
101
+ return { status: 'authenticated' };
102
+ const authorizationUrl = provider.authorizationUrl;
103
+ if (!authorizationUrl)
104
+ throw new Error('OAuth provider did not supply an authorization URL');
105
+ context.extensionContext.ui.notify?.(`Opening OAuth authorization for ${server.name} in your browser`, 'info');
106
+ await (this.#dependencies.openUrl ?? openInBrowser)(authorizationUrl);
107
+ const result = await callback.wait();
108
+ signal.throwIfAborted();
109
+ const completed = await runOAuth(provider, provider.authOptions({
110
+ authorizationCode: result.code,
111
+ ...(result.iss === undefined ? {} : { iss: result.iss }),
112
+ }));
113
+ if (completed !== 'AUTHORIZED')
114
+ throw new Error('OAuth token exchange did not complete');
115
+ return { status: 'authenticated' };
116
+ }
117
+ catch (error) {
118
+ if (signal.aborted) {
119
+ return { status: 'cancelled', message: `OAuth authentication for ${server.name} was cancelled.` };
120
+ }
121
+ if (error instanceof Error && /denied|cancelled/iu.test(error.message)) {
122
+ return { status: 'cancelled', message: `OAuth authentication for ${server.name} was cancelled.` };
123
+ }
124
+ throw error;
125
+ }
126
+ finally {
127
+ callback?.release();
128
+ provider.clearTransientFlow();
129
+ }
130
+ }
131
+ #assertOpen() {
132
+ if (this.#closed)
133
+ throw new Error('Local MCP OAuth session is closed');
134
+ }
135
+ }
136
+ export class LocalOAuthProvider {
137
+ server;
138
+ #config;
139
+ #repository;
140
+ #signal;
141
+ #redirectUrl;
142
+ #oauthProfile;
143
+ #fetchFn;
144
+ #active = true;
145
+ #state = generateState();
146
+ #codeVerifier;
147
+ #authorizationUrl;
148
+ #discoveryState;
149
+ #flowSignal;
150
+ #activeClientId;
151
+ constructor(server, config, repository, signal, fetchFn = fetch) {
152
+ this.server = server;
153
+ this.#config = config;
154
+ this.#repository = repository;
155
+ this.#signal = signal;
156
+ this.#redirectUrl = validateRedirectUrl(config.redirectUri ?? DEFAULT_REDIRECT_URI);
157
+ this.#oauthProfile = oauthProfile(config, this.#redirectUrl);
158
+ this.#fetchFn = fetchFn;
159
+ }
160
+ get redirectUrl() {
161
+ return new URL(this.#redirectUrl);
162
+ }
163
+ get clientMetadata() {
164
+ return {
165
+ redirect_uris: [this.#redirectUrl.toString()],
166
+ client_name: this.#config.clientName ?? DEFAULT_CLIENT_NAME,
167
+ client_uri: this.#config.clientUri ?? DEFAULT_CLIENT_URI,
168
+ grant_types: ['authorization_code', 'refresh_token'],
169
+ response_types: ['code'],
170
+ token_endpoint_auth_method: this.#hasClientSecret ? 'client_secret_post' : 'none',
171
+ ...(this.#config.scope === undefined ? {} : { scope: this.#config.scope }),
172
+ };
173
+ }
174
+ get currentState() {
175
+ return this.#state;
176
+ }
177
+ get authorizationUrl() {
178
+ return this.#authorizationUrl;
179
+ }
180
+ state() {
181
+ this.#assertActive();
182
+ return this.#state;
183
+ }
184
+ async clientInformation(context) {
185
+ this.#assertActive();
186
+ if (this.#config.clientId) {
187
+ const information = {
188
+ client_id: this.#config.clientId,
189
+ ...(this.#clientSecret === undefined ? {} : { client_secret: this.#clientSecret }),
190
+ ...(context?.issuer === undefined ? {} : { issuer: context.issuer }),
191
+ };
192
+ await this.#repository.update(this.server, (current) => ({
193
+ version: 1,
194
+ serverUrl: this.server.url,
195
+ oauthProfile: this.#oauthProfile,
196
+ clientInformation: {
197
+ client_id: information.client_id,
198
+ ...(information.issuer === undefined ? {} : { issuer: information.issuer }),
199
+ },
200
+ ...(canReuseConfiguredTokens(current, information.client_id, context?.issuer, this.#oauthProfile)
201
+ ? { tokens: current.tokens }
202
+ : {}),
203
+ }), this.#signal);
204
+ this.#activeClientId = information.client_id;
205
+ return information;
206
+ }
207
+ const stored = await this.#repository.read(this.server, this.#signal);
208
+ if (stored?.oauthProfile !== this.#oauthProfile) {
209
+ this.#activeClientId = undefined;
210
+ return undefined;
211
+ }
212
+ assertIssuer(stored?.clientInformation?.issuer, context?.issuer, this.server.name);
213
+ if (stored?.clientInformation && !hasCurrentRedirectUri(stored.clientInformation, this.#redirectUrl)) {
214
+ await this.#repository.remove(this.server, this.#signal);
215
+ this.#activeClientId = undefined;
216
+ return undefined;
217
+ }
218
+ this.#activeClientId = stored?.clientInformation?.client_id;
219
+ return stored?.clientInformation;
220
+ }
221
+ async saveClientInformation(information, context) {
222
+ this.#assertActive();
223
+ assertIssuer(information.issuer, context?.issuer, this.server.name);
224
+ const storedInformation = this.#config.clientId
225
+ ? {
226
+ client_id: this.#config.clientId,
227
+ ...(information.issuer === undefined ? {} : { issuer: information.issuer }),
228
+ }
229
+ : 'redirect_uris' in information && Array.isArray(information.redirect_uris)
230
+ ? information
231
+ : { ...information, redirect_uris: [this.#redirectUrl.toString()] };
232
+ if (!this.#config.clientId && !hasCurrentRedirectUri(storedInformation, this.#redirectUrl)) {
233
+ throw new Error(`OAuth dynamic client registration returned a mismatched redirect URI for ${this.server.name}`);
234
+ }
235
+ await this.#repository.update(this.server, (current) => ({
236
+ version: 1,
237
+ serverUrl: this.server.url,
238
+ oauthProfile: this.#oauthProfile,
239
+ ...(canReuseClientTokens(current, storedInformation, this.#oauthProfile)
240
+ ? { tokens: current.tokens }
241
+ : {}),
242
+ clientInformation: storedInformation,
243
+ }), this.#signal);
244
+ this.#activeClientId = storedInformation.client_id;
245
+ }
246
+ async tokens(context) {
247
+ this.#assertActive();
248
+ const stored = await this.#repository.read(this.server, this.#signal);
249
+ if (stored?.oauthProfile !== this.#oauthProfile) {
250
+ this.#activeClientId = undefined;
251
+ return undefined;
252
+ }
253
+ assertIssuer(stored?.tokens?.issuer, context?.issuer, this.server.name);
254
+ assertIssuer(stored?.clientInformation?.issuer, context?.issuer, this.server.name);
255
+ if (!stored?.tokens)
256
+ return undefined;
257
+ if (this.#config.clientId) {
258
+ if (stored.clientInformation?.client_id !== this.#config.clientId)
259
+ return undefined;
260
+ this.#activeClientId = this.#config.clientId;
261
+ return stored.tokens;
262
+ }
263
+ if (!stored.clientInformation || !hasCurrentRedirectUri(stored.clientInformation, this.#redirectUrl)) {
264
+ return undefined;
265
+ }
266
+ this.#activeClientId = stored.clientInformation.client_id;
267
+ return stored.tokens;
268
+ }
269
+ async saveTokens(tokens, context) {
270
+ this.#assertActive();
271
+ assertIssuer(tokens.issuer, context?.issuer, this.server.name);
272
+ await this.#repository.update(this.server, (current) => {
273
+ const expectedClientId = this.#config.clientId ?? this.#activeClientId;
274
+ if (expectedClientId === undefined
275
+ || current?.oauthProfile !== this.#oauthProfile
276
+ || current.clientInformation?.client_id !== expectedClientId) {
277
+ throw new Error(`OAuth client configuration changed concurrently for ${this.server.name}; retry authentication`);
278
+ }
279
+ return {
280
+ version: 1,
281
+ serverUrl: this.server.url,
282
+ oauthProfile: this.#oauthProfile,
283
+ ...(this.#config.clientId
284
+ ? {
285
+ clientInformation: {
286
+ client_id: this.#config.clientId,
287
+ ...(tokens.issuer === undefined ? {} : { issuer: tokens.issuer }),
288
+ },
289
+ }
290
+ : { clientInformation: current.clientInformation }),
291
+ tokens,
292
+ };
293
+ }, this.#signal);
294
+ }
295
+ redirectToAuthorization(url) {
296
+ this.#assertActive();
297
+ const authorizationUrl = validateAuthorizationUrl(url);
298
+ for (const [key, value] of Object.entries(this.#config.authorizationParams ?? {})) {
299
+ if (authorizationUrl.searchParams.has(key)) {
300
+ throw new Error(`OAuth authorization parameter ${key} is already set by the authorization server`);
301
+ }
302
+ authorizationUrl.searchParams.set(key, value);
303
+ }
304
+ this.#authorizationUrl = authorizationUrl.toString();
305
+ }
306
+ saveCodeVerifier(codeVerifier) {
307
+ this.#assertActive();
308
+ this.#codeVerifier = codeVerifier;
309
+ }
310
+ codeVerifier() {
311
+ this.#assertActive();
312
+ if (!this.#codeVerifier)
313
+ throw new Error('OAuth PKCE code verifier is unavailable');
314
+ return this.#codeVerifier;
315
+ }
316
+ saveDiscoveryState(state) {
317
+ this.#assertActive();
318
+ this.#discoveryState = structuredClone(state);
319
+ }
320
+ discoveryState() {
321
+ this.#assertActive();
322
+ return this.#discoveryState === undefined
323
+ ? undefined
324
+ : structuredClone(this.#discoveryState);
325
+ }
326
+ async invalidateCredentials(scope) {
327
+ this.#assertActive();
328
+ if (scope === 'verifier') {
329
+ this.#codeVerifier = undefined;
330
+ return;
331
+ }
332
+ if (scope === 'discovery') {
333
+ this.#discoveryState = undefined;
334
+ return;
335
+ }
336
+ if (scope === 'all') {
337
+ await this.#repository.remove(this.server, this.#signal);
338
+ this.#activeClientId = undefined;
339
+ this.clearTransientFlow();
340
+ return;
341
+ }
342
+ if (scope === 'client')
343
+ this.#activeClientId = undefined;
344
+ await this.#repository.update(this.server, (current) => withoutCredential(current, scope), this.#signal);
345
+ }
346
+ beginFlow(signal) {
347
+ this.#assertActive();
348
+ this.#flowSignal = signal;
349
+ this.#state = generateState();
350
+ this.#codeVerifier = undefined;
351
+ this.#authorizationUrl = undefined;
352
+ this.#discoveryState = undefined;
353
+ }
354
+ clearTransientFlow() {
355
+ this.#flowSignal = undefined;
356
+ this.#codeVerifier = undefined;
357
+ this.#authorizationUrl = undefined;
358
+ this.#discoveryState = undefined;
359
+ }
360
+ deactivate() {
361
+ this.#active = false;
362
+ this.clearTransientFlow();
363
+ }
364
+ authOptions(extra = {}) {
365
+ return {
366
+ serverUrl: this.server.url,
367
+ ...(this.#config.scope === undefined ? {} : { scope: this.#config.scope }),
368
+ fetchFn: this.#boundedFetch(),
369
+ ...extra,
370
+ };
371
+ }
372
+ get #hasClientSecret() {
373
+ return this.#config.clientSecret !== undefined || this.#config.clientSecretEnv !== undefined;
374
+ }
375
+ get #clientSecret() {
376
+ if (this.#config.clientSecret !== undefined)
377
+ return this.#config.clientSecret;
378
+ if (this.#config.clientSecretEnv === undefined)
379
+ return undefined;
380
+ const value = process.env[this.#config.clientSecretEnv];
381
+ if (!value)
382
+ throw new Error(`OAuth client secret environment variable is unavailable for ${this.server.name}`);
383
+ return value;
384
+ }
385
+ #assertActive() {
386
+ if (!this.#active)
387
+ throw new Error('OAuth provider is no longer active');
388
+ this.#signal.throwIfAborted();
389
+ }
390
+ #boundedFetch() {
391
+ return (input, init) => {
392
+ const timeout = AbortSignal.timeout(this.server.requestTimeoutMs ?? DEFAULT_OAUTH_REQUEST_TIMEOUT_MS);
393
+ const initSignal = init?.signal ?? undefined;
394
+ const signal = combineSignals(this.#signal, ...(this.#flowSignal === undefined ? [] : [this.#flowSignal]), ...(initSignal === undefined ? [] : [initSignal]), timeout);
395
+ return this.#fetchFn(input, { ...init, signal });
396
+ };
397
+ }
398
+ }
399
+ function withoutCredential(current, scope) {
400
+ if (!current)
401
+ return undefined;
402
+ if (scope === 'client' && current.tokens) {
403
+ return {
404
+ version: 1,
405
+ serverUrl: current.serverUrl,
406
+ oauthProfile: current.oauthProfile,
407
+ tokens: current.tokens,
408
+ };
409
+ }
410
+ if (scope === 'tokens' && current.clientInformation) {
411
+ return {
412
+ version: 1,
413
+ serverUrl: current.serverUrl,
414
+ oauthProfile: current.oauthProfile,
415
+ clientInformation: current.clientInformation,
416
+ };
417
+ }
418
+ return undefined;
419
+ }
420
+ function canReuseConfiguredTokens(current, clientId, issuer, oauthProfileValue) {
421
+ if (!current?.tokens
422
+ || current.clientInformation?.client_id !== clientId
423
+ || current.oauthProfile !== oauthProfileValue)
424
+ return false;
425
+ if (issuer === undefined)
426
+ return true;
427
+ const boundIssuers = [current.clientInformation.issuer, current.tokens.issuer]
428
+ .filter((value) => value !== undefined);
429
+ return boundIssuers.every((value) => issuersMatch(value, issuer));
430
+ }
431
+ function canReuseClientTokens(current, information, oauthProfileValue) {
432
+ if (!current?.tokens
433
+ || current.clientInformation?.client_id !== information.client_id
434
+ || current.oauthProfile !== oauthProfileValue)
435
+ return false;
436
+ const requestedIssuer = information.issuer;
437
+ if (requestedIssuer === undefined)
438
+ return true;
439
+ return [current.clientInformation.issuer, current.tokens.issuer]
440
+ .filter((value) => value !== undefined)
441
+ .every((value) => issuersMatch(value, requestedIssuer));
442
+ }
443
+ function hasCurrentRedirectUri(information, redirectUrl) {
444
+ return 'redirect_uris' in information
445
+ && Array.isArray(information.redirect_uris)
446
+ && information.redirect_uris.includes(redirectUrl.toString());
447
+ }
448
+ function assertIssuer(stored, requested, serverName) {
449
+ if (stored === undefined || requested === undefined || issuersMatch(stored, requested))
450
+ return;
451
+ throw new Error(`OAuth authorization server changed for ${serverName}; log out before authenticating again`);
452
+ }
453
+ function issuersMatch(first, second) {
454
+ return first === second;
455
+ }
456
+ function oauthProfile(config, redirectUrl) {
457
+ return JSON.stringify({
458
+ redirectUri: redirectUrl.toString(),
459
+ ...(config.scope === undefined ? {} : { scope: config.scope }),
460
+ clientName: config.clientName ?? DEFAULT_CLIENT_NAME,
461
+ clientUri: config.clientUri ?? DEFAULT_CLIENT_URI,
462
+ ...(config.authorizationParams === undefined
463
+ ? {}
464
+ : {
465
+ authorizationParams: Object.entries(config.authorizationParams)
466
+ .sort(([left], [right]) => left.localeCompare(right)),
467
+ }),
468
+ });
469
+ }
470
+ function validateRedirectUrl(value) {
471
+ let url;
472
+ try {
473
+ url = new URL(value);
474
+ }
475
+ catch (error) {
476
+ throw new Error('OAuth redirectUri must be an absolute URL', { cause: error });
477
+ }
478
+ const hostname = url.hostname.toLowerCase();
479
+ if (url.protocol !== 'http:'
480
+ || !['localhost', '127.0.0.1', '[::1]', '::1'].includes(hostname)
481
+ || !url.port
482
+ || url.username
483
+ || url.password
484
+ || url.search
485
+ || url.hash) {
486
+ throw new Error('OAuth redirectUri must be an HTTP loopback URL with an explicit port and no credentials, query, or fragment');
487
+ }
488
+ return url;
489
+ }
490
+ function validateAuthorizationUrl(value) {
491
+ const url = new URL(value);
492
+ const loopback = ['localhost', '127.0.0.1', '[::1]', '::1'].includes(url.hostname.toLowerCase());
493
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && loopback)) {
494
+ throw new Error('OAuth authorization URL must use HTTPS');
495
+ }
496
+ if (url.username || url.password)
497
+ throw new Error('OAuth authorization URL must not contain credentials');
498
+ return url;
499
+ }
500
+ function generateState() {
501
+ return randomBytes(32).toString('base64url');
502
+ }
503
+ function combineSignals(...signals) {
504
+ return signals.length === 1 ? signals[0] : AbortSignal.any(signals);
505
+ }
506
+ async function openInBrowser(url) {
507
+ const { default: open } = await import('open');
508
+ await open(url);
509
+ }
510
+ //# sourceMappingURL=oauth-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-host.js","sourceRoot":"","sources":["../../src/mcp/oauth-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { StoredOAuthClientInformation, StoredOAuthTokens } from '@modelcontextprotocol/client';
2
+ import type { ResolvedMcpServer } from '@felan-ai/ext-mcp';
3
+ export interface StoredMcpOAuthCredentials {
4
+ readonly version: 1;
5
+ readonly serverUrl: string;
6
+ readonly oauthProfile: string;
7
+ readonly clientInformation?: StoredOAuthClientInformation;
8
+ readonly tokens?: StoredOAuthTokens;
9
+ }
10
+ export interface McpOAuthSecretStore {
11
+ read(account: string, signal?: AbortSignal): Promise<string | null | undefined>;
12
+ write(account: string, value: string, signal?: AbortSignal): Promise<void>;
13
+ remove(account: string, signal?: AbortSignal): Promise<void>;
14
+ }
15
+ export declare class KeyringMcpOAuthSecretStore implements McpOAuthSecretStore {
16
+ read(account: string, signal?: AbortSignal): Promise<string | undefined>;
17
+ write(account: string, value: string, signal?: AbortSignal): Promise<void>;
18
+ remove(account: string, signal?: AbortSignal): Promise<void>;
19
+ }
20
+ export declare class McpOAuthCredentialRepository {
21
+ #private;
22
+ constructor(namespace: string, store?: McpOAuthSecretStore);
23
+ read(server: ResolvedMcpServer, signal?: AbortSignal): Promise<StoredMcpOAuthCredentials | undefined>;
24
+ update(server: ResolvedMcpServer, update: (current: StoredMcpOAuthCredentials | undefined) => StoredMcpOAuthCredentials | undefined | Promise<StoredMcpOAuthCredentials | undefined>, signal?: AbortSignal): Promise<void>;
25
+ remove(server: ResolvedMcpServer, signal?: AbortSignal): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=oauth-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-store.d.ts","sourceRoot":"","sources":["../../src/mcp/oauth-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAChF,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,qBAAa,0BAA2B,YAAW,mBAAmB;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASxE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAQnE;AAED,qBAAa,4BAA4B;;gBAI3B,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,mBAAsD;IAKtF,IAAI,CACR,MAAM,EAAE,iBAAiB,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAS3C,MAAM,CACV,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,CACN,OAAO,EAAE,yBAAyB,GAAG,SAAS,KAC3C,yBAAyB,GAAG,SAAS,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,EAC3F,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAiBV,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA8B7E"}