@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.
- package/README.md +14 -1
- package/dist/app/assets/index-DHs9MRuO.css +1 -0
- package/dist/app/assets/index-UuO3yMWK.js +253 -0
- package/dist/app/index.html +2 -2
- package/dist/app-server/app-context.d.ts +2 -0
- package/dist/app-server/app-context.d.ts.map +1 -1
- package/dist/app-server/oauth-debugger-domain.d.ts +181 -194
- package/dist/app-server/oauth-debugger-domain.d.ts.map +1 -1
- package/dist/app-server/oauth-debugger-domain.js +149 -33
- package/dist/app-server/oauth-debugger-domain.js.map +1 -1
- package/dist/app-server/oauth-runtime-domain.d.ts +71 -0
- package/dist/app-server/oauth-runtime-domain.d.ts.map +1 -0
- package/dist/app-server/oauth-runtime-domain.js +196 -0
- package/dist/app-server/oauth-runtime-domain.js.map +1 -0
- package/dist/app-server/oauth-runtime-routes.d.ts +20 -0
- package/dist/app-server/oauth-runtime-routes.d.ts.map +1 -0
- package/dist/app-server/oauth-runtime-routes.js +135 -0
- package/dist/app-server/oauth-runtime-routes.js.map +1 -0
- package/dist/app-server/oauth-session-manager.d.ts +51 -0
- package/dist/app-server/oauth-session-manager.d.ts.map +1 -0
- package/dist/app-server/oauth-session-manager.js +338 -0
- package/dist/app-server/oauth-session-manager.js.map +1 -0
- package/dist/app-server/router.d.ts.map +1 -1
- package/dist/app-server/router.js +25 -0
- package/dist/app-server/router.js.map +1 -1
- package/dist/app-server/runs-routes.d.ts +28 -53
- package/dist/app-server/runs-routes.d.ts.map +1 -1
- package/dist/app-server/runs-routes.js +243 -11
- package/dist/app-server/runs-routes.js.map +1 -1
- package/dist/app-server/scenario-assistant-domain.d.ts +133 -139
- package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
- package/dist/app-server/scenario-assistant-domain.js +270 -5
- package/dist/app-server/scenario-assistant-domain.js.map +1 -1
- package/dist/app-server/scenario-assistant.d.ts +11 -25
- package/dist/app-server/scenario-assistant.d.ts.map +1 -1
- package/dist/app-server/scenario-assistant.js +18 -2
- package/dist/app-server/scenario-assistant.js.map +1 -1
- package/dist/app-server/tool-analysis-domain.d.ts +165 -173
- package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
- package/dist/app-server/tool-analysis-domain.js +23 -4
- package/dist/app-server/tool-analysis-domain.js.map +1 -1
- package/dist/app-server/tool-analysis.d.ts +11 -18
- package/dist/app-server/tool-analysis.d.ts.map +1 -1
- package/dist/app-server/tool-analysis.js +26 -2
- package/dist/app-server/tool-analysis.js.map +1 -1
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -1
- package/package.json +4 -4
- package/dist/app/assets/index-2w0pnVLj.js +0 -249
- 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"}
|