@inspectr/mcplab 1.6.0 → 1.8.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 (50) hide show
  1. package/README.md +14 -1
  2. package/dist/app/assets/index-DHs9MRuO.css +1 -0
  3. package/dist/app/assets/index-UuO3yMWK.js +253 -0
  4. package/dist/app/index.html +2 -2
  5. package/dist/app-server/app-context.d.ts +2 -0
  6. package/dist/app-server/app-context.d.ts.map +1 -1
  7. package/dist/app-server/oauth-debugger-domain.d.ts +181 -194
  8. package/dist/app-server/oauth-debugger-domain.d.ts.map +1 -1
  9. package/dist/app-server/oauth-debugger-domain.js +149 -33
  10. package/dist/app-server/oauth-debugger-domain.js.map +1 -1
  11. package/dist/app-server/oauth-runtime-domain.d.ts +71 -0
  12. package/dist/app-server/oauth-runtime-domain.d.ts.map +1 -0
  13. package/dist/app-server/oauth-runtime-domain.js +196 -0
  14. package/dist/app-server/oauth-runtime-domain.js.map +1 -0
  15. package/dist/app-server/oauth-runtime-routes.d.ts +20 -0
  16. package/dist/app-server/oauth-runtime-routes.d.ts.map +1 -0
  17. package/dist/app-server/oauth-runtime-routes.js +135 -0
  18. package/dist/app-server/oauth-runtime-routes.js.map +1 -0
  19. package/dist/app-server/oauth-session-manager.d.ts +51 -0
  20. package/dist/app-server/oauth-session-manager.d.ts.map +1 -0
  21. package/dist/app-server/oauth-session-manager.js +338 -0
  22. package/dist/app-server/oauth-session-manager.js.map +1 -0
  23. package/dist/app-server/router.d.ts.map +1 -1
  24. package/dist/app-server/router.js +25 -0
  25. package/dist/app-server/router.js.map +1 -1
  26. package/dist/app-server/runs-routes.d.ts +28 -53
  27. package/dist/app-server/runs-routes.d.ts.map +1 -1
  28. package/dist/app-server/runs-routes.js +243 -11
  29. package/dist/app-server/runs-routes.js.map +1 -1
  30. package/dist/app-server/scenario-assistant-domain.d.ts +133 -139
  31. package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
  32. package/dist/app-server/scenario-assistant-domain.js +270 -5
  33. package/dist/app-server/scenario-assistant-domain.js.map +1 -1
  34. package/dist/app-server/scenario-assistant.d.ts +11 -25
  35. package/dist/app-server/scenario-assistant.d.ts.map +1 -1
  36. package/dist/app-server/scenario-assistant.js +18 -2
  37. package/dist/app-server/scenario-assistant.js.map +1 -1
  38. package/dist/app-server/tool-analysis-domain.d.ts +165 -173
  39. package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
  40. package/dist/app-server/tool-analysis-domain.js +23 -4
  41. package/dist/app-server/tool-analysis-domain.js.map +1 -1
  42. package/dist/app-server/tool-analysis.d.ts +11 -18
  43. package/dist/app-server/tool-analysis.d.ts.map +1 -1
  44. package/dist/app-server/tool-analysis.js +26 -2
  45. package/dist/app-server/tool-analysis.js.map +1 -1
  46. package/dist/cli.js +18 -0
  47. package/dist/cli.js.map +1 -1
  48. package/package.json +4 -4
  49. package/dist/app/assets/index-2w0pnVLj.js +0 -249
  50. package/dist/app/assets/index-C9_UrDPP.css +0 -1
@@ -0,0 +1,196 @@
1
+ import { readLibraries } from './libraries-store.js';
2
+ import { createOAuthDebuggerSession, oauthDebuggerSessionView, startOrResumeOAuthDebuggerSession, stopOAuthDebuggerSession, submitManualCallbackToSession } from './oauth-debugger-domain.js';
3
+ function makeRuntimeSessionId() {
4
+ return `oauthrt-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
5
+ }
6
+ function appBaseUrl(hostHeader) {
7
+ return `http://${hostHeader ?? '127.0.0.1:8787'}`;
8
+ }
9
+ function splitScopes(scope) {
10
+ if (!scope)
11
+ return [];
12
+ return scope
13
+ .split(/\s+/)
14
+ .map((s) => s.trim())
15
+ .filter(Boolean);
16
+ }
17
+ function toRuntimeStatus(debuggerStatus) {
18
+ if (debuggerStatus === 'running')
19
+ return 'configuring';
20
+ return debuggerStatus;
21
+ }
22
+ function getAccessToken(session) {
23
+ if (!session)
24
+ return undefined;
25
+ const tokenResponse = session.context.tokenResponse;
26
+ if (!tokenResponse)
27
+ return undefined;
28
+ const accessToken = tokenResponse.access_token;
29
+ return typeof accessToken === 'string' && accessToken.trim() ? accessToken : undefined;
30
+ }
31
+ export function cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions, now = Date.now(), ttlMs = 30 * 60 * 1000) {
32
+ for (const [id, runtime] of runtimeSessions) {
33
+ const debuggerSession = oauthDebuggerSessions.get(runtime.oauthDebuggerSessionId);
34
+ const updated = debuggerSession?.updatedAt ?? runtime.updatedAt;
35
+ if (now - updated <= ttlMs)
36
+ continue;
37
+ runtimeSessions.delete(id);
38
+ if (debuggerSession) {
39
+ stopOAuthDebuggerSession(debuggerSession);
40
+ oauthDebuggerSessions.delete(runtime.oauthDebuggerSessionId);
41
+ }
42
+ }
43
+ }
44
+ export function oauthRuntimeSessionView(params) {
45
+ const { runtimeSession, oauthDebuggerSessions } = params;
46
+ const debuggerSession = oauthDebuggerSessions.get(runtimeSession.oauthDebuggerSessionId);
47
+ const debuggerView = debuggerSession ? oauthDebuggerSessionView(debuggerSession) : undefined;
48
+ const authorizationUrl = debuggerView?.uiHints.authorizationUrl;
49
+ const status = debuggerSession
50
+ ? toRuntimeStatus(debuggerSession.status)
51
+ : runtimeSession.status === 'completed'
52
+ ? 'completed'
53
+ : 'error';
54
+ const accessToken = getAccessToken(debuggerSession);
55
+ return {
56
+ id: runtimeSession.id,
57
+ serverName: runtimeSession.serverName,
58
+ status,
59
+ createdAt: new Date(runtimeSession.createdAt).toISOString(),
60
+ updatedAt: new Date(debuggerSession?.updatedAt ?? runtimeSession.updatedAt).toISOString(),
61
+ oauthDebuggerSessionId: runtimeSession.oauthDebuggerSessionId,
62
+ authorizationUrl,
63
+ authorizeLaunchUrl: authorizationUrl
64
+ ? `/api/oauth-debugger/sessions/${runtimeSession.oauthDebuggerSessionId}/authorize`
65
+ : undefined,
66
+ callbackUrl: debuggerView?.uiHints.callbackUrl,
67
+ hasAccessToken: Boolean(accessToken),
68
+ lastError: status === 'error'
69
+ ? debuggerSession?.steps.find((step) => step.status === 'failed')?.outcomeSummary ||
70
+ runtimeSession.lastError ||
71
+ 'OAuth flow failed'
72
+ : runtimeSession.lastError
73
+ };
74
+ }
75
+ export async function createOAuthRuntimeSession(params) {
76
+ const libraries = readLibraries(params.librariesDir);
77
+ const serverConfig = libraries.servers[params.serverName];
78
+ if (!serverConfig) {
79
+ throw new Error(`Server '${params.serverName}' not found in libraries`);
80
+ }
81
+ if (serverConfig.auth?.type !== 'oauth_authorization_code') {
82
+ throw new Error(`Server '${params.serverName}' is not configured with oauth_authorization_code auth`);
83
+ }
84
+ const isDcr = serverConfig.auth.mode === 'dcr' || !serverConfig.auth.client_id;
85
+ const config = {
86
+ profile: 'latest',
87
+ target: {
88
+ serverName: params.serverName,
89
+ ...(serverConfig.auth.authorization_url || serverConfig.auth.token_url
90
+ ? {
91
+ overrides: {
92
+ ...(serverConfig.auth.authorization_url
93
+ ? { authorizationEndpoint: serverConfig.auth.authorization_url }
94
+ : {}),
95
+ ...(serverConfig.auth.token_url ? { tokenEndpoint: serverConfig.auth.token_url } : {})
96
+ }
97
+ }
98
+ : {})
99
+ },
100
+ registrationMethod: isDcr ? 'dcr' : 'pre_registered',
101
+ clientConfig: isDcr
102
+ ? { dcr: { metadata: {} } }
103
+ : {
104
+ preRegistered: {
105
+ clientId: serverConfig.auth.client_id,
106
+ clientSecret: serverConfig.auth.client_secret
107
+ }
108
+ },
109
+ runtime: {
110
+ redirectMode: 'local_callback',
111
+ scopes: splitScopes(serverConfig.auth.scope),
112
+ usePkce: true,
113
+ codeChallengeMethod: 'S256'
114
+ },
115
+ display: {
116
+ showSensitiveValues: false
117
+ }
118
+ };
119
+ const debuggerSession = createOAuthDebuggerSession({
120
+ config,
121
+ serverConfig
122
+ });
123
+ params.oauthDebuggerSessions.set(debuggerSession.id, debuggerSession);
124
+ const runtimeSession = {
125
+ id: makeRuntimeSessionId(),
126
+ createdAt: Date.now(),
127
+ updatedAt: Date.now(),
128
+ serverName: params.serverName,
129
+ oauthDebuggerSessionId: debuggerSession.id,
130
+ status: 'configuring'
131
+ };
132
+ params.runtimeSessions.set(runtimeSession.id, runtimeSession);
133
+ void startOrResumeOAuthDebuggerSession({
134
+ session: debuggerSession,
135
+ appBaseUrl: appBaseUrl(params.hostHeader)
136
+ });
137
+ return oauthRuntimeSessionView({
138
+ runtimeSession,
139
+ oauthDebuggerSessions: params.oauthDebuggerSessions
140
+ });
141
+ }
142
+ export async function submitOAuthRuntimeCallback(params) {
143
+ const debuggerSession = params.oauthDebuggerSessions.get(params.runtimeSession.oauthDebuggerSessionId);
144
+ if (!debuggerSession) {
145
+ throw new Error('Associated OAuth debugger session not found');
146
+ }
147
+ submitManualCallbackToSession({
148
+ session: debuggerSession,
149
+ redirectUrl: params.redirectUrl,
150
+ code: params.code,
151
+ state: params.state
152
+ });
153
+ await startOrResumeOAuthDebuggerSession({
154
+ session: debuggerSession,
155
+ appBaseUrl: appBaseUrl(params.hostHeader)
156
+ });
157
+ }
158
+ export function stopOAuthRuntimeSession(params) {
159
+ const debuggerSession = params.oauthDebuggerSessions.get(params.runtimeSession.oauthDebuggerSessionId);
160
+ if (debuggerSession) {
161
+ stopOAuthDebuggerSession(debuggerSession);
162
+ }
163
+ params.runtimeSession.status = 'stopped';
164
+ params.runtimeSession.updatedAt = Date.now();
165
+ }
166
+ export function resolveRuntimeOAuthAuthHeaders(params) {
167
+ const out = {};
168
+ const mapping = params.oauthRuntimeSessionsByServer ?? {};
169
+ for (const serverName of params.requiredServerNames) {
170
+ const runtimeSessionId = mapping[serverName];
171
+ if (!runtimeSessionId) {
172
+ throw new Error(`OAuth login required for server '${serverName}'. Start an OAuth runtime session first.`);
173
+ }
174
+ const runtimeSession = params.runtimeSessions.get(runtimeSessionId);
175
+ if (!runtimeSession || runtimeSession.serverName !== serverName) {
176
+ throw new Error(`OAuth runtime session '${runtimeSessionId}' is invalid for '${serverName}'`);
177
+ }
178
+ if (runtimeSession.status === 'stopped' || runtimeSession.status === 'error') {
179
+ throw new Error(`OAuth runtime session '${runtimeSessionId}' for '${serverName}' is ${runtimeSession.status} and cannot be used for authorization`);
180
+ }
181
+ const debuggerSession = params.oauthDebuggerSessions.get(runtimeSession.oauthDebuggerSessionId);
182
+ const accessToken = getAccessToken(debuggerSession);
183
+ if (!accessToken) {
184
+ throw new Error(`OAuth runtime session '${runtimeSessionId}' for '${serverName}' has no access token yet`);
185
+ }
186
+ out[serverName] = {
187
+ authorization: `Bearer ${accessToken}`
188
+ };
189
+ }
190
+ return out;
191
+ }
192
+ export function getOAuthRuntimeSessionToken(params) {
193
+ const debuggerSession = params.oauthDebuggerSessions.get(params.runtimeSession.oauthDebuggerSessionId);
194
+ return getAccessToken(debuggerSession);
195
+ }
196
+ //# sourceMappingURL=oauth-runtime-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-runtime-domain.js","sourceRoot":"","sources":["../../src/app-server/oauth-runtime-domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AppRouteRequestContext, OAuthDebuggerSessionsMap } from './app-context.js';
3
+ import type { OAuthRuntimeSessionsMap } from './oauth-runtime-domain.js';
4
+ import { type OAuthSessionManager } from './oauth-session-manager.js';
5
+ export interface OAuthRuntimeRouteDeps {
6
+ parseBody: (req: IncomingMessage) => Promise<any>;
7
+ asJson: (res: ServerResponse, status: number, body: unknown) => void;
8
+ }
9
+ export declare function handleOAuthRuntimeRoutes(params: {
10
+ req: IncomingMessage;
11
+ res: ServerResponse;
12
+ pathname: string;
13
+ method: string;
14
+ settings: AppRouteRequestContext['settings'];
15
+ runtimeSessions: OAuthRuntimeSessionsMap;
16
+ oauthDebuggerSessions: OAuthDebuggerSessionsMap;
17
+ oauthSessionManager: OAuthSessionManager;
18
+ deps: OAuthRuntimeRouteDeps;
19
+ }): Promise<boolean>;
20
+ //# sourceMappingURL=oauth-runtime-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-runtime-routes.d.ts","sourceRoot":"","sources":["../../src/app-server/oauth-runtime-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAmC,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAUvG,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACtE;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,GAAG,EAAE,eAAe,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7C,eAAe,EAAE,uBAAuB,CAAC;IACzC,qBAAqB,EAAE,wBAAwB,CAAC;IAChD,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,IAAI,EAAE,qBAAqB,CAAC;CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,CAuJnB"}
@@ -0,0 +1,135 @@
1
+ import { OAuthAuthorizationRequiredError } from './oauth-session-manager.js';
2
+ import { cleanupOAuthRuntimeSessions, createOAuthRuntimeSession, getOAuthRuntimeSessionToken, oauthRuntimeSessionView, stopOAuthRuntimeSession, submitOAuthRuntimeCallback } from './oauth-runtime-domain.js';
3
+ export async function handleOAuthRuntimeRoutes(params) {
4
+ const { req, res, pathname, method, settings, runtimeSessions, oauthDebuggerSessions, oauthSessionManager, deps } = params;
5
+ const { parseBody, asJson } = deps;
6
+ if (pathname === '/api/oauth-runtime/servers/ensure' && method === 'POST') {
7
+ cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions);
8
+ const body = await parseBody(req);
9
+ const serverNames = Array.isArray(body?.serverNames)
10
+ ? body.serverNames.map((v) => String(v).trim()).filter(Boolean)
11
+ : [];
12
+ if (serverNames.length === 0) {
13
+ asJson(res, 400, { error: 'serverNames[] is required' });
14
+ return true;
15
+ }
16
+ try {
17
+ const result = await oauthSessionManager.ensureServersAuthorized(serverNames, req.headers.host);
18
+ asJson(res, 200, result);
19
+ }
20
+ catch (error) {
21
+ if (error instanceof OAuthAuthorizationRequiredError) {
22
+ asJson(res, 401, { error: error.message, oauth: { required: error.details } });
23
+ return true;
24
+ }
25
+ asJson(res, 400, { error: error instanceof Error ? error.message : String(error) });
26
+ }
27
+ return true;
28
+ }
29
+ if (pathname === '/api/oauth-runtime/sessions' && method === 'POST') {
30
+ cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions);
31
+ const body = await parseBody(req);
32
+ const serverName = String(body?.serverName ?? '').trim();
33
+ if (!serverName) {
34
+ asJson(res, 400, { error: 'serverName is required' });
35
+ return true;
36
+ }
37
+ try {
38
+ const session = await createOAuthRuntimeSession({
39
+ serverName,
40
+ hostHeader: req.headers.host,
41
+ librariesDir: settings.librariesDir,
42
+ runtimeSessions,
43
+ oauthDebuggerSessions
44
+ });
45
+ oauthSessionManager.noteRuntimeSession(serverName, session.id);
46
+ asJson(res, 201, { session });
47
+ }
48
+ catch (error) {
49
+ asJson(res, 400, {
50
+ error: error instanceof Error ? error.message : String(error)
51
+ });
52
+ }
53
+ return true;
54
+ }
55
+ if (pathname.startsWith('/api/oauth-runtime/sessions/') &&
56
+ pathname.endsWith('/token') &&
57
+ method === 'GET') {
58
+ const sessionId = pathname.split('/')[4];
59
+ const runtimeSession = runtimeSessions.get(sessionId);
60
+ if (!runtimeSession) {
61
+ asJson(res, 404, { error: 'OAuth runtime session not found' });
62
+ return true;
63
+ }
64
+ const accessToken = getOAuthRuntimeSessionToken({ runtimeSession, oauthDebuggerSessions });
65
+ if (!accessToken) {
66
+ asJson(res, 404, { error: 'No access token available for this session' });
67
+ return true;
68
+ }
69
+ asJson(res, 200, { accessToken });
70
+ return true;
71
+ }
72
+ if (pathname.startsWith('/api/oauth-runtime/sessions/') && method === 'GET') {
73
+ cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions);
74
+ const sessionId = pathname.split('/')[4];
75
+ const runtimeSession = runtimeSessions.get(sessionId);
76
+ if (!runtimeSession) {
77
+ asJson(res, 404, { error: 'OAuth runtime session not found' });
78
+ return true;
79
+ }
80
+ asJson(res, 200, {
81
+ session: oauthRuntimeSessionView({ runtimeSession, oauthDebuggerSessions })
82
+ });
83
+ return true;
84
+ }
85
+ if (pathname.startsWith('/api/oauth-runtime/sessions/') &&
86
+ pathname.endsWith('/callback') &&
87
+ method === 'POST') {
88
+ cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions);
89
+ const sessionId = pathname.split('/')[4];
90
+ const runtimeSession = runtimeSessions.get(sessionId);
91
+ if (!runtimeSession) {
92
+ asJson(res, 404, { error: 'OAuth runtime session not found' });
93
+ return true;
94
+ }
95
+ const body = await parseBody(req);
96
+ try {
97
+ await submitOAuthRuntimeCallback({
98
+ runtimeSession,
99
+ oauthDebuggerSessions,
100
+ redirectUrl: typeof body?.redirectUrl === 'string' ? body.redirectUrl : undefined,
101
+ code: typeof body?.code === 'string' ? body.code : undefined,
102
+ state: typeof body?.state === 'string' ? body.state : undefined,
103
+ hostHeader: req.headers.host
104
+ });
105
+ oauthSessionManager.noteRuntimeSession(runtimeSession.serverName, runtimeSession.id);
106
+ asJson(res, 200, {
107
+ session: oauthRuntimeSessionView({ runtimeSession, oauthDebuggerSessions })
108
+ });
109
+ }
110
+ catch (error) {
111
+ asJson(res, 400, {
112
+ error: error instanceof Error ? error.message : String(error)
113
+ });
114
+ }
115
+ return true;
116
+ }
117
+ if (pathname.startsWith('/api/oauth-runtime/sessions/') &&
118
+ pathname.endsWith('/cancel') &&
119
+ method === 'POST') {
120
+ cleanupOAuthRuntimeSessions(runtimeSessions, oauthDebuggerSessions);
121
+ const sessionId = pathname.split('/')[4];
122
+ const runtimeSession = runtimeSessions.get(sessionId);
123
+ if (!runtimeSession) {
124
+ asJson(res, 404, { error: 'OAuth runtime session not found' });
125
+ return true;
126
+ }
127
+ stopOAuthRuntimeSession({ runtimeSession, oauthDebuggerSessions });
128
+ asJson(res, 200, {
129
+ session: oauthRuntimeSessionView({ runtimeSession, oauthDebuggerSessions })
130
+ });
131
+ return true;
132
+ }
133
+ return false;
134
+ }
135
+ //# sourceMappingURL=oauth-runtime-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-runtime-routes.js","sourceRoot":"","sources":["../../src/app-server/oauth-runtime-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { OAuthDebuggerSessionsMap, OAuthRuntimeSessionsMap } from './app-context.js';
2
+ export interface OAuthEnsureServerResult {
3
+ serverName: string;
4
+ status: 'ready' | 'auth_required' | 'not_oauth';
5
+ debugState?: 'reused' | 'refreshed' | 'auth_required' | 'not_oauth';
6
+ tokenExpiresAt?: string;
7
+ tokenExpiresInSeconds?: number;
8
+ runtimeSessionId?: string;
9
+ authorizationUrl?: string;
10
+ authorizeLaunchUrl?: string;
11
+ message?: string;
12
+ }
13
+ export interface OAuthEnsureServersResponse {
14
+ servers: OAuthEnsureServerResult[];
15
+ allReady: boolean;
16
+ }
17
+ export interface OAuthAuthRequiredDetail {
18
+ serverName: string;
19
+ runtimeSessionId?: string;
20
+ authorizationUrl?: string;
21
+ authorizeLaunchUrl?: string;
22
+ message: string;
23
+ }
24
+ export declare class OAuthAuthorizationRequiredError extends Error {
25
+ readonly details: OAuthAuthRequiredDetail[];
26
+ constructor(details: OAuthAuthRequiredDetail[]);
27
+ }
28
+ export declare class OAuthSessionManager {
29
+ private readonly params;
30
+ private states;
31
+ constructor(params: {
32
+ librariesDir: string;
33
+ runtimeSessions: OAuthRuntimeSessionsMap;
34
+ oauthDebuggerSessions: OAuthDebuggerSessionsMap;
35
+ refreshSkewMs?: number;
36
+ });
37
+ setLibrariesDir(next: string): void;
38
+ private get refreshSkewMs();
39
+ private getServerConfig;
40
+ private getState;
41
+ private updateStateFromTokenPayload;
42
+ private syncStateFromRuntimeSession;
43
+ private tokenExpiredOrNearExpiry;
44
+ refreshIfNeeded(serverName: string): Promise<boolean>;
45
+ private getExistingRuntimeView;
46
+ ensureServerAuthorized(serverName: string, hostHeader?: string): Promise<OAuthEnsureServerResult>;
47
+ ensureServersAuthorized(serverNames: string[], hostHeader?: string): Promise<OAuthEnsureServersResponse>;
48
+ getAuthHeadersForServers(serverNames: string[], hostHeader?: string): Promise<Record<string, Record<string, string>>>;
49
+ noteRuntimeSession(serverName: string, runtimeSessionId: string): void;
50
+ }
51
+ //# sourceMappingURL=oauth-session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-session-manager.d.ts","sourceRoot":"","sources":["../../src/app-server/oauth-session-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAgC1F,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,WAAW,CAAC;IAChD,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE,CAAC;gBAEhC,OAAO,EAAE,uBAAuB,EAAE;CAM/C;AAgCD,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,MAAM,CAAsC;gBAGjC,MAAM,EAAE;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,uBAAuB,CAAC;QACzC,qBAAqB,EAAE,wBAAwB,CAAC;QAChD,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;IAGH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,2BAA2B;IAqCnC,OAAO,CAAC,wBAAwB;IAM1B,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2D3D,OAAO,CAAC,sBAAsB;IAaxB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAsFjG,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAYxG,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EAAE,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAsClD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;CAQvE"}