@noodleseed/one 0.96.3 → 0.97.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 +2 -1
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +7 -1
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-local-authoring.js +2 -2
- package/dist/commands/catalog-data-local-authoring.js.map +1 -1
- package/dist/deploy.d.ts +5 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +1 -1
- package/dist/deploy.js.map +1 -1
- package/dist/dev.d.ts +13 -0
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +116 -7
- package/dist/dev.js.map +1 -1
- package/dist/devtools-auth-routes.d.ts +4 -0
- package/dist/devtools-auth-routes.d.ts.map +1 -0
- package/dist/devtools-auth-routes.js +205 -0
- package/dist/devtools-auth-routes.js.map +1 -0
- package/dist/devtools-auth-session-helpers.d.ts +6 -0
- package/dist/devtools-auth-session-helpers.d.ts.map +1 -0
- package/dist/devtools-auth-session-helpers.js +19 -0
- package/dist/devtools-auth-session-helpers.js.map +1 -0
- package/dist/devtools-auth-session.d.ts +35 -0
- package/dist/devtools-auth-session.d.ts.map +1 -0
- package/dist/devtools-auth-session.js +433 -0
- package/dist/devtools-auth-session.js.map +1 -0
- package/dist/devtools-auth-types.d.ts +51 -0
- package/dist/devtools-auth-types.d.ts.map +1 -0
- package/dist/devtools-auth-types.js +16 -0
- package/dist/devtools-auth-types.js.map +1 -0
- package/dist/devtools-auth-ui.d.ts +6 -0
- package/dist/devtools-auth-ui.d.ts.map +1 -0
- package/dist/devtools-auth-ui.js +127 -0
- package/dist/devtools-auth-ui.js.map +1 -0
- package/dist/devtools-delegated-credential.d.ts +10 -0
- package/dist/devtools-delegated-credential.d.ts.map +1 -0
- package/dist/devtools-delegated-credential.js +32 -0
- package/dist/devtools-delegated-credential.js.map +1 -0
- package/dist/devtools-firebase-auth.d.ts +55 -0
- package/dist/devtools-firebase-auth.d.ts.map +1 -0
- package/dist/devtools-firebase-auth.js +237 -0
- package/dist/devtools-firebase-auth.js.map +1 -0
- package/dist/devtools-harness.d.ts +5 -0
- package/dist/devtools-harness.d.ts.map +1 -1
- package/dist/devtools-harness.js +60 -21
- package/dist/devtools-harness.js.map +1 -1
- package/dist/devtools-microsoft-auth.d.ts +42 -0
- package/dist/devtools-microsoft-auth.d.ts.map +1 -0
- package/dist/devtools-microsoft-auth.js +362 -0
- package/dist/devtools-microsoft-auth.js.map +1 -0
- package/dist/devtools-microsoft-errors.d.ts +7 -0
- package/dist/devtools-microsoft-errors.d.ts.map +1 -0
- package/dist/devtools-microsoft-errors.js +60 -0
- package/dist/devtools-microsoft-errors.js.map +1 -0
- package/dist/devtools-preview.d.ts +15 -13
- package/dist/devtools-preview.d.ts.map +1 -1
- package/dist/devtools-preview.js +101 -179
- package/dist/devtools-preview.js.map +1 -1
- package/dist/devtools-rpc-forwarder.d.ts +37 -0
- package/dist/devtools-rpc-forwarder.d.ts.map +1 -0
- package/dist/devtools-rpc-forwarder.js +251 -0
- package/dist/devtools-rpc-forwarder.js.map +1 -0
- package/dist/devtools-tool-safety.d.ts +20 -0
- package/dist/devtools-tool-safety.d.ts.map +1 -0
- package/dist/devtools-tool-safety.js +43 -0
- package/dist/devtools-tool-safety.js.map +1 -0
- package/dist/preview-session.d.ts.map +1 -1
- package/dist/preview-session.js +5 -0
- package/dist/preview-session.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/auth/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/index.js +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts +56 -0
- package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js +367 -0
- package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js +71 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js +43 -31
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +1 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js +107 -0
- package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js +48 -28
- package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +49 -18
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { CLIENT_CAPABILITIES_META_KEY, CLIENT_INFO_META_KEY, PROTOCOL_VERSION_META_KEY, } from '@modelcontextprotocol/client';
|
|
2
|
+
import { DevtoolsAuthRequiredError } from './devtools-auth-session.js';
|
|
3
|
+
const MODERN_PROTOCOL_VERSION = '2026-07-28';
|
|
4
|
+
const LEGACY_PROTOCOL_VERSION = '2025-11-25';
|
|
5
|
+
const DISCOVERY_TIMEOUT_MS = 5_000;
|
|
6
|
+
/** Build the credential-owning MCP forwarder used by every Devtools host surface. */
|
|
7
|
+
export function createDevtoolsRpcForwarder(options) {
|
|
8
|
+
const protocolCache = new Map();
|
|
9
|
+
const explicitProtocol = options.protocolVersion === undefined
|
|
10
|
+
? undefined
|
|
11
|
+
: {
|
|
12
|
+
era: options.protocolVersion === MODERN_PROTOCOL_VERSION
|
|
13
|
+
? 'modern'
|
|
14
|
+
: 'legacy',
|
|
15
|
+
version: options.protocolVersion,
|
|
16
|
+
};
|
|
17
|
+
const resolveProtocol = (bearer) => explicitProtocol === undefined
|
|
18
|
+
? automaticProtocol(protocolCache, options.mcpUrl, bearer)
|
|
19
|
+
: Promise.resolve(explicitProtocol);
|
|
20
|
+
return async (body) => {
|
|
21
|
+
const start = Date.now();
|
|
22
|
+
const name = toolName(body);
|
|
23
|
+
try {
|
|
24
|
+
const authSession = options.authSession();
|
|
25
|
+
let accessToken;
|
|
26
|
+
if (authSession !== undefined) {
|
|
27
|
+
try {
|
|
28
|
+
accessToken = await authSession.accessToken();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof DevtoolsAuthRequiredError) {
|
|
32
|
+
return authRequiredResult(body, start, name, error.message, options.record);
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const protocol = await resolveProtocol(accessToken);
|
|
38
|
+
const send = (bearer) => {
|
|
39
|
+
const headers = new Headers({
|
|
40
|
+
'content-type': 'application/json',
|
|
41
|
+
accept: 'application/json, text/event-stream',
|
|
42
|
+
'mcp-protocol-version': protocol.version,
|
|
43
|
+
});
|
|
44
|
+
const requestBody = protocol.era === 'modern' ? modernRequest(body, protocol.version) : body;
|
|
45
|
+
if (bearer !== undefined)
|
|
46
|
+
headers.set('authorization', `Bearer ${bearer}`);
|
|
47
|
+
if (protocol.era === 'modern')
|
|
48
|
+
setModernRoutingHeaders(headers, body, name);
|
|
49
|
+
return fetch(options.mcpUrl, {
|
|
50
|
+
method: 'POST',
|
|
51
|
+
headers,
|
|
52
|
+
body: JSON.stringify({ jsonrpc: '2.0', ...requestBody }),
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
let response = await send(accessToken);
|
|
56
|
+
if (response.status === 401 && authSession !== undefined) {
|
|
57
|
+
await response.body?.cancel();
|
|
58
|
+
try {
|
|
59
|
+
accessToken = await authSession.accessToken({ forceRefresh: true });
|
|
60
|
+
response = await send(accessToken);
|
|
61
|
+
if (response.status === 401)
|
|
62
|
+
authSession.clear();
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof DevtoolsAuthRequiredError) {
|
|
66
|
+
return authRequiredResult(body, start, name, error.message, options.record);
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
authSession?.noteBearerChallenge(response.status, response.headers.get('www-authenticate'));
|
|
72
|
+
const json = parseRpcBody(await response.text());
|
|
73
|
+
const status = json?.error ? 'error' : 'ok';
|
|
74
|
+
options.record({
|
|
75
|
+
time: start,
|
|
76
|
+
method: body.method,
|
|
77
|
+
...(name !== undefined ? { name } : {}),
|
|
78
|
+
status,
|
|
79
|
+
durationMs: Date.now() - start,
|
|
80
|
+
summary: json?.error?.message ?? summarize(body.method, json?.result),
|
|
81
|
+
...(body.params !== undefined ? { request: capForLog(body.params) } : {}),
|
|
82
|
+
...(json !== undefined ? { response: capForLog(json.error ?? json.result) } : {}),
|
|
83
|
+
});
|
|
84
|
+
return { httpStatus: response.status, json };
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
options.record({
|
|
88
|
+
time: start,
|
|
89
|
+
method: body.method,
|
|
90
|
+
...(name !== undefined ? { name } : {}),
|
|
91
|
+
status: 'error',
|
|
92
|
+
durationMs: Date.now() - start,
|
|
93
|
+
summary: error instanceof Error ? error.message : String(error),
|
|
94
|
+
...(body.params !== undefined ? { request: capForLog(body.params) } : {}),
|
|
95
|
+
});
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function automaticProtocol(cache, endpoint, bearer) {
|
|
101
|
+
const origin = new URL(endpoint).origin;
|
|
102
|
+
const key = `${origin}\u0000${bearer === undefined ? 'anonymous' : 'authenticated'}`;
|
|
103
|
+
let pending = cache.get(key);
|
|
104
|
+
if (pending === undefined) {
|
|
105
|
+
pending = discoverProtocol(endpoint, bearer);
|
|
106
|
+
cache.set(key, pending);
|
|
107
|
+
void pending.then((protocol) => {
|
|
108
|
+
if (protocol.retryable === true && cache.get(key) === pending)
|
|
109
|
+
cache.delete(key);
|
|
110
|
+
}, () => {
|
|
111
|
+
if (cache.get(key) === pending)
|
|
112
|
+
cache.delete(key);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return pending;
|
|
116
|
+
}
|
|
117
|
+
async function discoverProtocol(endpoint, bearer) {
|
|
118
|
+
const method = 'server/discover';
|
|
119
|
+
const headers = new Headers({
|
|
120
|
+
accept: 'application/json, text/event-stream',
|
|
121
|
+
'content-type': 'application/json',
|
|
122
|
+
'mcp-method': method,
|
|
123
|
+
'mcp-protocol-version': MODERN_PROTOCOL_VERSION,
|
|
124
|
+
});
|
|
125
|
+
if (bearer !== undefined)
|
|
126
|
+
headers.set('authorization', `Bearer ${bearer}`);
|
|
127
|
+
try {
|
|
128
|
+
const response = await fetch(endpoint, {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers,
|
|
131
|
+
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS),
|
|
132
|
+
body: JSON.stringify(modernRequest({ jsonrpc: '2.0', id: 'noodle-devtools-discover', method, params: {} })),
|
|
133
|
+
});
|
|
134
|
+
const json = parseRpcBody(await response.text());
|
|
135
|
+
const versions = json?.result?.supportedVersions;
|
|
136
|
+
if (response.ok && Array.isArray(versions)) {
|
|
137
|
+
return versions.includes(MODERN_PROTOCOL_VERSION)
|
|
138
|
+
? { era: 'modern', version: MODERN_PROTOCOL_VERSION }
|
|
139
|
+
: { era: 'legacy', version: LEGACY_PROTOCOL_VERSION };
|
|
140
|
+
}
|
|
141
|
+
if (response.status === 401 || response.status === 403) {
|
|
142
|
+
return { era: 'legacy', version: LEGACY_PROTOCOL_VERSION, retryable: true };
|
|
143
|
+
}
|
|
144
|
+
if (response.status === 404 || json?.error?.code === -32601) {
|
|
145
|
+
return { era: 'legacy', version: LEGACY_PROTOCOL_VERSION };
|
|
146
|
+
}
|
|
147
|
+
return { era: 'legacy', version: LEGACY_PROTOCOL_VERSION, retryable: true };
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return { era: 'legacy', version: LEGACY_PROTOCOL_VERSION, retryable: true };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function setModernRoutingHeaders(headers, body, name) {
|
|
154
|
+
headers.set('mcp-method', body.method);
|
|
155
|
+
if (name !== undefined)
|
|
156
|
+
headers.set('mcp-name', name);
|
|
157
|
+
else if (body.method === 'resources/read' && typeof body.params?.uri === 'string') {
|
|
158
|
+
headers.set('mcp-name', body.params.uri);
|
|
159
|
+
}
|
|
160
|
+
else if (body.method === 'prompts/get' && typeof body.params?.name === 'string') {
|
|
161
|
+
headers.set('mcp-name', body.params.name);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function modernRequest(body, version = MODERN_PROTOCOL_VERSION) {
|
|
165
|
+
const existingMeta = body.params?._meta !== null &&
|
|
166
|
+
typeof body.params?._meta === 'object' &&
|
|
167
|
+
!Array.isArray(body.params._meta)
|
|
168
|
+
? body.params._meta
|
|
169
|
+
: {};
|
|
170
|
+
return {
|
|
171
|
+
...body,
|
|
172
|
+
params: {
|
|
173
|
+
...body.params,
|
|
174
|
+
_meta: {
|
|
175
|
+
...existingMeta,
|
|
176
|
+
[PROTOCOL_VERSION_META_KEY]: version,
|
|
177
|
+
[CLIENT_INFO_META_KEY]: { name: 'noodle-devtools', version: '1.0.0' },
|
|
178
|
+
[CLIENT_CAPABILITIES_META_KEY]: {},
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function authRequiredResult(body, start, name, message, record) {
|
|
184
|
+
const json = {
|
|
185
|
+
error: { code: -32001, message },
|
|
186
|
+
};
|
|
187
|
+
record({
|
|
188
|
+
time: start,
|
|
189
|
+
method: body.method,
|
|
190
|
+
...(name !== undefined ? { name } : {}),
|
|
191
|
+
status: 'error',
|
|
192
|
+
durationMs: Date.now() - start,
|
|
193
|
+
summary: message,
|
|
194
|
+
...(body.params !== undefined ? { request: capForLog(body.params) } : {}),
|
|
195
|
+
response: json.error,
|
|
196
|
+
});
|
|
197
|
+
return { httpStatus: 401, json };
|
|
198
|
+
}
|
|
199
|
+
/** One JSON-RPC value from a dev-endpoint response body (JSON, or an SSE `data:` fallback). */
|
|
200
|
+
function parseRpcBody(text) {
|
|
201
|
+
try {
|
|
202
|
+
return JSON.parse(text);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
for (const line of text.split(/\r?\n/u)) {
|
|
206
|
+
const trimmed = line.trim();
|
|
207
|
+
if (!trimmed.startsWith('data:'))
|
|
208
|
+
continue;
|
|
209
|
+
try {
|
|
210
|
+
return JSON.parse(trimmed.slice(5).trim());
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Keep scanning.
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function capForLog(value, max = 20_000) {
|
|
220
|
+
if (value === undefined)
|
|
221
|
+
return undefined;
|
|
222
|
+
try {
|
|
223
|
+
const serialized = JSON.stringify(value);
|
|
224
|
+
if (serialized.length > max) {
|
|
225
|
+
return `${serialized.slice(0, max)}… (truncated ${serialized.length - max} chars)`;
|
|
226
|
+
}
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return '[unserializable]';
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function summarize(method, result) {
|
|
234
|
+
if (result === undefined)
|
|
235
|
+
return method;
|
|
236
|
+
if (method === 'tools/list') {
|
|
237
|
+
return `${Array.isArray(result.tools) ? result.tools.length : 0} tool(s)`;
|
|
238
|
+
}
|
|
239
|
+
if (method === 'tools/call')
|
|
240
|
+
return result.isError ? 'tool error' : 'ok';
|
|
241
|
+
if (method === 'resources/read') {
|
|
242
|
+
return `${Array.isArray(result.contents) ? result.contents.length : 0} content block(s)`;
|
|
243
|
+
}
|
|
244
|
+
return 'ok';
|
|
245
|
+
}
|
|
246
|
+
function toolName(body) {
|
|
247
|
+
return body.method === 'tools/call' && typeof body.params?.name === 'string'
|
|
248
|
+
? body.params.name
|
|
249
|
+
: undefined;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=devtools-rpc-forwarder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-rpc-forwarder.js","sourceRoot":"","sources":["../src/devtools-rpc-forwarder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface DevtoolsToolLike {
|
|
2
|
+
readonly annotations?: {
|
|
3
|
+
readonly readOnlyHint?: boolean;
|
|
4
|
+
readonly destructiveHint?: boolean;
|
|
5
|
+
readonly openWorldHint?: boolean;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface WidgetToolCallMessage {
|
|
9
|
+
readonly requestId: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly arguments: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Only tools that explicitly opt into every safety hint may be exposed to the playground's automatic
|
|
15
|
+
* model loop. Missing hints are intentionally unsafe-by-default.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isAutoSafeTool(tool: DevtoolsToolLike): boolean;
|
|
18
|
+
/** Validate the narrow postMessage contract accepted from an untrusted widget frame. */
|
|
19
|
+
export declare function parseWidgetToolCallMessage(value: unknown): WidgetToolCallMessage | undefined;
|
|
20
|
+
//# sourceMappingURL=devtools-tool-safety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-tool-safety.d.ts","sourceRoot":"","sources":["../src/devtools-tool-safety.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAO9D;AAED,wFAAwF;AACxF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CA6B5F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Only tools that explicitly opt into every safety hint may be exposed to the playground's automatic
|
|
3
|
+
* model loop. Missing hints are intentionally unsafe-by-default.
|
|
4
|
+
*/
|
|
5
|
+
export function isAutoSafeTool(tool) {
|
|
6
|
+
const annotations = tool.annotations;
|
|
7
|
+
return (annotations?.readOnlyHint === true &&
|
|
8
|
+
annotations.destructiveHint === false &&
|
|
9
|
+
annotations.openWorldHint === false);
|
|
10
|
+
}
|
|
11
|
+
/** Validate the narrow postMessage contract accepted from an untrusted widget frame. */
|
|
12
|
+
export function parseWidgetToolCallMessage(value) {
|
|
13
|
+
const isRecord = (candidate) => {
|
|
14
|
+
if (candidate === null || typeof candidate !== 'object' || Array.isArray(candidate))
|
|
15
|
+
return false;
|
|
16
|
+
const prototype = Object.getPrototypeOf(candidate);
|
|
17
|
+
return prototype === Object.prototype || prototype === null;
|
|
18
|
+
};
|
|
19
|
+
if (!isRecord(value) || value.type !== 'noodle:tool-call')
|
|
20
|
+
return undefined;
|
|
21
|
+
if (typeof value.requestId !== 'string' ||
|
|
22
|
+
value.requestId.length < 1 ||
|
|
23
|
+
value.requestId.length > 128 ||
|
|
24
|
+
typeof value.name !== 'string' ||
|
|
25
|
+
value.name.length < 1 ||
|
|
26
|
+
value.name.length > 256 ||
|
|
27
|
+
!isRecord(value.arguments)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
if (JSON.stringify(value.arguments).length > 65_536)
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
requestId: value.requestId,
|
|
39
|
+
name: value.name,
|
|
40
|
+
arguments: value.arguments,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=devtools-tool-safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-tool-safety.js","sourceRoot":"","sources":["../src/devtools-tool-safety.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,OAAO,CACL,WAAW,EAAE,YAAY,KAAK,IAAI;QAClC,WAAW,CAAC,eAAe,KAAK,KAAK;QACrC,WAAW,CAAC,aAAa,KAAK,KAAK,CACpC,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,QAAQ,GAAG,CAAC,SAAkB,EAAwC,EAAE;QAC5E,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACjF,OAAO,KAAK,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;IAC9D,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC5E,IACE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC1B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG;QACvB,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,MAAM;YAAE,OAAO,SAAS,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-session.d.ts","sourceRoot":"","sources":["../src/preview-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AACnG,KAAK,mBAAmB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,KAAK,SAAS,CAAC;AAE3F;;;;;GAKG;AAEH,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,4GAA4G;IAC5G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6FAA6F;IAC7F,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,wGAAwG;IACxG,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,yGAAyG;IACzG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"preview-session.d.ts","sourceRoot":"","sources":["../src/preview-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AACnG,KAAK,mBAAmB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,KAAK,SAAS,CAAC;AAE3F;;;;;GAKG;AAEH,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,4GAA4G;IAC5G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6FAA6F;IAC7F,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,wGAAwG;IACxG,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,yGAAyG;IACzG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA2F9F;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,MAAM,EAAE,CAsDV"}
|
package/dist/preview-session.js
CHANGED
|
@@ -11,6 +11,8 @@ export async function startPreviewSession(opts) {
|
|
|
11
11
|
const log = opts.log ?? ((message) => console.log(message));
|
|
12
12
|
// OPENAI_* playground credentials come from a git-ignored .env.local (dev tooling, not an app secret).
|
|
13
13
|
const loadedEnv = loadDevtoolsEnv(process.cwd());
|
|
14
|
+
const customerAuth = opts.handle.customerAuth();
|
|
15
|
+
const delegatedCredentialSink = opts.handle.delegatedCredentialSink();
|
|
14
16
|
const preview = await startPreview({
|
|
15
17
|
mcpUrl: opts.handle.url,
|
|
16
18
|
theme: opts.theme,
|
|
@@ -18,6 +20,8 @@ export async function startPreviewSession(opts) {
|
|
|
18
20
|
...(opts.port !== undefined ? { port: opts.port } : {}),
|
|
19
21
|
...(opts.model !== undefined ? { openaiModel: opts.model } : {}),
|
|
20
22
|
...(opts.design !== undefined ? { design: opts.design } : {}),
|
|
23
|
+
...(customerAuth !== undefined ? { customerAuth } : {}),
|
|
24
|
+
...(delegatedCredentialSink === undefined ? {} : { delegatedCredentialSink }),
|
|
21
25
|
});
|
|
22
26
|
// Watch the whole source tree, recompile/re-bundle via dev.reload(), then push a browser reload so the
|
|
23
27
|
// iframe + tool list refresh. Debounced (fs.watch fires multiple events per save); best-effort.
|
|
@@ -40,6 +44,7 @@ export async function startPreviewSession(opts) {
|
|
|
40
44
|
.then((r) => {
|
|
41
45
|
if (r.ok) {
|
|
42
46
|
log('↻ reloaded');
|
|
47
|
+
preview.updateCustomerAuth(opts.handle.customerAuth());
|
|
43
48
|
preview.signalReload();
|
|
44
49
|
}
|
|
45
50
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-session.js","sourceRoot":"","sources":["../src/preview-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAA0B,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAIL,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAY,MAAM,eAAe,CAAC;AAwCjG;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA2B;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,uGAAuG;IACvG,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"preview-session.js","sourceRoot":"","sources":["../src/preview-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
export { type AuthorizationClaimMap, canonicalizeAuthorizationClaimValues, MAX_AUTHORIZATION_CLAIM_VALUES, MAX_ROLE_LENGTH, MAX_SCOPE_LENGTH, projectCustomerRoutingClaims, projectMappedAuthorizationClaim, projectNoodleRoles, projectStandardScopes, } from './claims.js';
|
|
11
11
|
export { type DiscoveredIssuerMetadata, discoverIssuerMetadata, type IssuerMetadataCandidate, type IssuerMetadataKind, issuerMetadataCandidates, } from './discovery.js';
|
|
12
12
|
export { type AccessTokenClaims, mintAccessToken } from './jwt-issuer.js';
|
|
13
|
+
export { type BearerChallenge, canonicalScopes, McpOAuthClient, type McpOAuthClientOptions, type McpOAuthClientRegistration, type McpOAuthDiscovery, type McpOAuthPendingAuthorization, type McpOAuthTokens, parseBearerChallenge, } from './mcp-oauth-client.js';
|
|
13
14
|
export { type ProtectedResourceMetadata, protectedResourceMetadata, protectedResourceMetadataUrl, } from './metadata.js';
|
|
14
15
|
export { createStaticSigningKeyProvider, type SigningKey, type SigningKeyProvider, type StaticSigningKeyOptions, } from './signer.js';
|
|
15
16
|
export { createJwtVerifier, type JwtVerifierConfig, type TokenVerifier, type VerifiedIdentity, type VerifiedTokenEnvelope, } from './verify.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,qBAAqB,EAC1B,oCAAoC,EACpC,8BAA8B,EAC9B,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,+BAA+B,EAC/B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,wBAAwB,EAC7B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,KAAK,yBAAyB,EAC9B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,8BAA8B,EAC9B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,qBAAqB,EAC1B,oCAAoC,EACpC,8BAA8B,EAC9B,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,+BAA+B,EAC/B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,wBAAwB,EAC7B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,yBAAyB,EAC9B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,8BAA8B,EAC9B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
export { canonicalizeAuthorizationClaimValues, MAX_AUTHORIZATION_CLAIM_VALUES, MAX_ROLE_LENGTH, MAX_SCOPE_LENGTH, projectCustomerRoutingClaims, projectMappedAuthorizationClaim, projectNoodleRoles, projectStandardScopes, } from './claims.js';
|
|
11
11
|
export { discoverIssuerMetadata, issuerMetadataCandidates, } from './discovery.js';
|
|
12
12
|
export { mintAccessToken } from './jwt-issuer.js';
|
|
13
|
+
export { canonicalScopes, McpOAuthClient, parseBearerChallenge, } from './mcp-oauth-client.js';
|
|
13
14
|
export { protectedResourceMetadata, protectedResourceMetadataUrl, } from './metadata.js';
|
|
14
15
|
export { createStaticSigningKeyProvider, } from './signer.js';
|
|
15
16
|
export { createJwtVerifier, } from './verify.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,oCAAoC,EACpC,8BAA8B,EAC9B,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,+BAA+B,EAC/B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,sBAAsB,EAGtB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAEL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,8BAA8B,GAI/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,GAKlB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,oCAAoC,EACpC,8BAA8B,EAC9B,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,+BAA+B,EAC/B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,sBAAsB,EAGtB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAEL,eAAe,EACf,cAAc,EAMd,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,8BAA8B,GAI/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,GAKlB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface McpOAuthClientOptions {
|
|
2
|
+
readonly resource: string;
|
|
3
|
+
readonly issuer: string;
|
|
4
|
+
readonly redirectUri: string;
|
|
5
|
+
readonly fetchFn?: typeof fetch;
|
|
6
|
+
readonly clientName?: string;
|
|
7
|
+
/** Test/self-host seam. Production authorization servers must use HTTPS. */
|
|
8
|
+
readonly allowInsecureLocalhost?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface McpOAuthDiscovery {
|
|
11
|
+
readonly resource: string;
|
|
12
|
+
readonly issuer: string;
|
|
13
|
+
readonly authorizationEndpoint: string;
|
|
14
|
+
readonly tokenEndpoint: string;
|
|
15
|
+
readonly registrationEndpoint: string;
|
|
16
|
+
readonly scopes: readonly string[];
|
|
17
|
+
readonly authorizationResponseIssuerRequired: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface McpOAuthClientRegistration {
|
|
20
|
+
readonly clientId: string;
|
|
21
|
+
readonly tokenEndpointAuthMethod: 'none';
|
|
22
|
+
}
|
|
23
|
+
export interface McpOAuthPendingAuthorization {
|
|
24
|
+
readonly authorizationUrl: string;
|
|
25
|
+
readonly state: string;
|
|
26
|
+
readonly codeVerifier: string;
|
|
27
|
+
readonly scopes: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
export interface McpOAuthTokens {
|
|
30
|
+
readonly accessToken: string;
|
|
31
|
+
readonly refreshToken?: string;
|
|
32
|
+
readonly tokenType: 'Bearer';
|
|
33
|
+
readonly expiresAt?: number;
|
|
34
|
+
readonly scope: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
export interface BearerChallenge {
|
|
37
|
+
readonly error?: string;
|
|
38
|
+
readonly scopes: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Express-free MCP OAuth client primitives. The caller owns session storage; this class keeps only immutable
|
|
42
|
+
* resource/client configuration and never persists credentials.
|
|
43
|
+
*/
|
|
44
|
+
export declare class McpOAuthClient {
|
|
45
|
+
#private;
|
|
46
|
+
constructor(options: McpOAuthClientOptions);
|
|
47
|
+
discover(): Promise<McpOAuthDiscovery>;
|
|
48
|
+
register(discovery: McpOAuthDiscovery, scopes?: readonly string[]): Promise<McpOAuthClientRegistration>;
|
|
49
|
+
beginAuthorization(discovery: McpOAuthDiscovery, registration: McpOAuthClientRegistration, scopes?: readonly string[]): McpOAuthPendingAuthorization;
|
|
50
|
+
exchangeCallback(discovery: McpOAuthDiscovery, registration: McpOAuthClientRegistration, pending: McpOAuthPendingAuthorization, callbackUrl: string): Promise<McpOAuthTokens>;
|
|
51
|
+
refresh(discovery: McpOAuthDiscovery, registration: McpOAuthClientRegistration, current: McpOAuthTokens): Promise<McpOAuthTokens>;
|
|
52
|
+
}
|
|
53
|
+
/** Parse only the challenge fields needed for reauthorization; ignore realms and metadata URLs. */
|
|
54
|
+
export declare function parseBearerChallenge(header: string | null): BearerChallenge | undefined;
|
|
55
|
+
export declare function canonicalScopes(scopes: readonly string[]): readonly string[];
|
|
56
|
+
//# sourceMappingURL=mcp-oauth-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-oauth-client.d.ts","sourceRoot":"","sources":["../src/mcp-oauth-client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,mCAAmC,EAAE,OAAO,CAAC;CACvD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AASD;;;GAGG;AACH,qBAAa,cAAc;;gBAQb,OAAO,EAAE,qBAAqB;IASpC,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA2DtC,QAAQ,CACZ,SAAS,EAAE,iBAAiB,EAC5B,MAAM,GAAE,SAAS,MAAM,EAAqB,GAC3C,OAAO,CAAC,0BAA0B,CAAC;IA8BtC,kBAAkB,CAChB,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,0BAA0B,EACxC,MAAM,GAAE,SAAS,MAAM,EAAqB,GAC3C,4BAA4B;IA4BzB,gBAAgB,CACpB,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,0BAA0B,EACxC,OAAO,EAAE,4BAA4B,EACrC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;IAwCpB,OAAO,CACX,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,0BAA0B,EACxC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC;CA+I3B;AAED,mGAAmG;AACnG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,GAAG,SAAS,CAevF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAE5E"}
|