@mcp-native/mcp 0.5.0 → 0.6.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.
@@ -0,0 +1,103 @@
1
+ export declare const MCP_NATIVE_MAX_CONNECTION_ATTEMPTS = 8;
2
+ export declare const MCP_NATIVE_MAX_CONNECTION_TIMEOUT_MS = 120000;
3
+ export declare const MCP_NATIVE_MAX_CONNECTION_BACKOFF_MS = 30000;
4
+ export type McpNativeConnectionErrorKind = "retryable" | "terminal";
5
+ export declare class McpNativeConnectionLifecycleError extends Error {
6
+ readonly code: "cancelled" | "timeout";
7
+ constructor(code: "cancelled" | "timeout");
8
+ }
9
+ export interface McpNativeConnectionErrorClassification {
10
+ readonly kind: McpNativeConnectionErrorKind;
11
+ /** Host-authored, non-sensitive stable code. Raw error messages are never retained or emitted. */
12
+ readonly code: string;
13
+ }
14
+ export type McpNativeHostState = {
15
+ readonly kind: "loading";
16
+ readonly attempt: number;
17
+ } | {
18
+ readonly kind: "ready";
19
+ } | {
20
+ readonly kind: "empty";
21
+ } | {
22
+ readonly kind: "denied";
23
+ readonly code: string;
24
+ } | {
25
+ readonly kind: "disconnected";
26
+ readonly reason: "initial" | "offline" | "shutdown";
27
+ } | {
28
+ readonly kind: "retryable-error";
29
+ readonly code: string;
30
+ readonly attempt: number;
31
+ readonly retryInMs: number;
32
+ } | {
33
+ readonly kind: "terminal-error";
34
+ readonly code: string;
35
+ readonly exhausted: boolean;
36
+ };
37
+ export type McpNativeOperationalEvent = {
38
+ readonly type: "connection-attempt";
39
+ readonly attempt: number;
40
+ readonly timeoutMs: number;
41
+ } | {
42
+ readonly type: "connection-result";
43
+ readonly attempt: number;
44
+ readonly outcome: "connected" | "retryable-error" | "terminal-error" | "cancelled";
45
+ readonly durationMs: number;
46
+ readonly code?: string;
47
+ } | {
48
+ readonly type: "connection-backoff";
49
+ readonly attempt: number;
50
+ readonly delayMs: number;
51
+ } | {
52
+ readonly type: "connection-close";
53
+ readonly reason: "retry" | "offline" | "shutdown";
54
+ readonly outcome: "completed" | "failed" | "timeout";
55
+ } | {
56
+ readonly type: "connection-lost";
57
+ readonly outcome: "retryable-error" | "terminal-error";
58
+ readonly code: string;
59
+ };
60
+ /**
61
+ * Deliberately data-free diagnostics boundary. A host may map these fixed events to structured
62
+ * logs, counters/histograms, and traces without receiving credentials, tokens, server payloads,
63
+ * user payloads, URLs, error messages, or arbitrary labels from this package.
64
+ */
65
+ export interface McpNativeOperationalSink {
66
+ emit(event: McpNativeOperationalEvent): void;
67
+ }
68
+ export interface McpNativeManagedConnection {
69
+ /** Connect through the official SDK. Hosts should stop promptly when `signal` aborts. */
70
+ connect(signal: AbortSignal): void | Promise<void>;
71
+ /** Close the SDK client/transport and release native resources. */
72
+ close(): void | Promise<void>;
73
+ /** Optional one-shot notification for an unexpected post-connect transport close. */
74
+ readonly closed?: Promise<unknown>;
75
+ }
76
+ export interface McpNativeConnectionLifecycleOptions {
77
+ /** A fresh SDK client/transport ownership unit for every connection attempt. */
78
+ readonly createConnection: () => McpNativeManagedConnection;
79
+ /** Maps an opaque failure to a stable, non-sensitive host code and retry decision. */
80
+ readonly classifyError: (error: unknown) => McpNativeConnectionErrorClassification;
81
+ readonly onStateChange?: (state: McpNativeHostState) => void;
82
+ readonly diagnostics?: McpNativeOperationalSink;
83
+ readonly timeoutMs?: number;
84
+ readonly closeTimeoutMs?: number;
85
+ readonly maxAttempts?: number;
86
+ readonly initialBackoffMs?: number;
87
+ readonly maxBackoffMs?: number;
88
+ readonly backoffMultiplier?: number;
89
+ readonly now?: () => number;
90
+ readonly wait?: (milliseconds: number, signal: AbortSignal) => void | Promise<void>;
91
+ readonly initiallyOnline?: boolean;
92
+ }
93
+ export declare class McpNativeConnectionLifecycle {
94
+ #private;
95
+ constructor(options: McpNativeConnectionLifecycleOptions);
96
+ get state(): McpNativeHostState;
97
+ start(): Promise<void>;
98
+ retry(): Promise<void>;
99
+ setOnline(online: boolean): Promise<void>;
100
+ shutdown(): Promise<void>;
101
+ }
102
+ export declare function createMcpNativeConnectionLifecycle(options: McpNativeConnectionLifecycleOptions): McpNativeConnectionLifecycle;
103
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,425 @@
1
+ export const MCP_NATIVE_MAX_CONNECTION_ATTEMPTS = 8;
2
+ export const MCP_NATIVE_MAX_CONNECTION_TIMEOUT_MS = 120_000;
3
+ export const MCP_NATIVE_MAX_CONNECTION_BACKOFF_MS = 30_000;
4
+ export class McpNativeConnectionLifecycleError extends Error {
5
+ code;
6
+ constructor(code) {
7
+ super(code === "timeout" ? "MCP connection attempt timed out" : "MCP connection attempt cancelled");
8
+ this.name = "McpNativeConnectionLifecycleError";
9
+ this.code = code;
10
+ }
11
+ }
12
+ export class McpNativeConnectionLifecycle {
13
+ #options;
14
+ #state;
15
+ #online;
16
+ #shutdown = false;
17
+ #run;
18
+ #abort;
19
+ #connection;
20
+ #generation = 0;
21
+ #transitionTail = Promise.resolve();
22
+ constructor(options) {
23
+ if (options === null ||
24
+ typeof options !== "object" ||
25
+ typeof options.createConnection !== "function" ||
26
+ typeof options.classifyError !== "function" ||
27
+ (options.onStateChange !== undefined && typeof options.onStateChange !== "function") ||
28
+ (options.diagnostics !== undefined &&
29
+ (options.diagnostics === null || typeof options.diagnostics.emit !== "function")) ||
30
+ (options.initiallyOnline !== undefined && typeof options.initiallyOnline !== "boolean")) {
31
+ throw new TypeError("Connection lifecycle requires valid host callbacks");
32
+ }
33
+ const timeoutMs = boundedInteger(options.timeoutMs ?? 15_000, "connection timeout", 1, MCP_NATIVE_MAX_CONNECTION_TIMEOUT_MS);
34
+ const closeTimeoutMs = boundedInteger(options.closeTimeoutMs ?? 5_000, "connection close timeout", 1, MCP_NATIVE_MAX_CONNECTION_TIMEOUT_MS);
35
+ const maxAttempts = boundedInteger(options.maxAttempts ?? 3, "connection attempts", 1, MCP_NATIVE_MAX_CONNECTION_ATTEMPTS);
36
+ const initialBackoffMs = boundedInteger(options.initialBackoffMs ?? 250, "initial connection backoff", 0, MCP_NATIVE_MAX_CONNECTION_BACKOFF_MS);
37
+ const maxBackoffMs = boundedInteger(options.maxBackoffMs ?? 5_000, "maximum connection backoff", initialBackoffMs, MCP_NATIVE_MAX_CONNECTION_BACKOFF_MS);
38
+ const backoffMultiplier = options.backoffMultiplier ?? 2;
39
+ if (!Number.isFinite(backoffMultiplier) || backoffMultiplier < 1 || backoffMultiplier > 10) {
40
+ throw new TypeError("Connection backoff multiplier must be between 1 and 10");
41
+ }
42
+ if (options.now !== undefined && typeof options.now !== "function") {
43
+ throw new TypeError("Connection lifecycle clock must be a function");
44
+ }
45
+ if (options.wait !== undefined && typeof options.wait !== "function") {
46
+ throw new TypeError("Connection lifecycle wait must be a function");
47
+ }
48
+ this.#options = {
49
+ ...options,
50
+ timeoutMs,
51
+ closeTimeoutMs,
52
+ maxAttempts,
53
+ initialBackoffMs,
54
+ maxBackoffMs,
55
+ backoffMultiplier,
56
+ now: options.now ?? Date.now,
57
+ wait: options.wait ?? waitFor,
58
+ };
59
+ this.#online = options.initiallyOnline ?? true;
60
+ this.#state = Object.freeze({
61
+ kind: "disconnected",
62
+ reason: this.#online ? "initial" : "offline",
63
+ });
64
+ }
65
+ get state() {
66
+ return this.#state;
67
+ }
68
+ start() {
69
+ if (this.#shutdown) {
70
+ throw new Error("Connection lifecycle is shut down");
71
+ }
72
+ if (!this.#online) {
73
+ this.#setState({ kind: "disconnected", reason: "offline" });
74
+ return Promise.resolve();
75
+ }
76
+ if (this.#run !== undefined || this.#state.kind === "ready") {
77
+ return this.#run ?? Promise.resolve();
78
+ }
79
+ const generation = ++this.#generation;
80
+ this.#abort = new AbortController();
81
+ const run = this.#connectLoop(generation, this.#abort.signal).finally(() => {
82
+ if (this.#run === run) {
83
+ this.#run = undefined;
84
+ this.#abort = undefined;
85
+ }
86
+ });
87
+ this.#run = run;
88
+ return run;
89
+ }
90
+ async retry() {
91
+ if (this.#state.kind !== "retryable-error" && this.#state.kind !== "terminal-error") {
92
+ return;
93
+ }
94
+ await this.start();
95
+ }
96
+ setOnline(online) {
97
+ if (typeof online !== "boolean") {
98
+ throw new TypeError("Online state must be a boolean");
99
+ }
100
+ let connectionRun;
101
+ const transition = this.#serializeTransition(async () => {
102
+ if (this.#shutdown || this.#online === online)
103
+ return;
104
+ this.#online = online;
105
+ if (online) {
106
+ connectionRun = this.start();
107
+ return;
108
+ }
109
+ const run = this.#run;
110
+ this.#generation += 1;
111
+ this.#abort?.abort();
112
+ await this.#closeCurrent("offline");
113
+ await run;
114
+ this.#setState({ kind: "disconnected", reason: "offline" });
115
+ });
116
+ return transition.then(() => connectionRun);
117
+ }
118
+ shutdown() {
119
+ return this.#serializeTransition(async () => {
120
+ if (this.#shutdown)
121
+ return;
122
+ this.#shutdown = true;
123
+ const run = this.#run;
124
+ this.#generation += 1;
125
+ this.#abort?.abort();
126
+ await this.#closeCurrent("shutdown");
127
+ await run;
128
+ this.#setState({ kind: "disconnected", reason: "shutdown" });
129
+ });
130
+ }
131
+ #serializeTransition(operation) {
132
+ const result = this.#transitionTail.then(operation, operation);
133
+ this.#transitionTail = result.then(() => undefined, () => undefined);
134
+ return result;
135
+ }
136
+ async #connectLoop(generation, signal) {
137
+ for (let attempt = 1; attempt <= this.#options.maxAttempts; attempt += 1) {
138
+ if (!this.#isCurrent(generation, signal))
139
+ return;
140
+ this.#setState({ kind: "loading", attempt });
141
+ this.#emit({ type: "connection-attempt", attempt, timeoutMs: this.#options.timeoutMs });
142
+ const startedAt = readClock(this.#options.now);
143
+ let connection;
144
+ try {
145
+ connection = validateConnection(this.#options.createConnection());
146
+ }
147
+ catch (error) {
148
+ if (!this.#handleFailure(error, attempt, startedAt, attempt < this.#options.maxAttempts) ||
149
+ // eslint-disable-next-line no-await-in-loop -- bounded retries are deliberately sequential
150
+ !(await this.#waitBeforeRetry(attempt, signal))) {
151
+ return;
152
+ }
153
+ continue;
154
+ }
155
+ this.#connection = connection;
156
+ try {
157
+ // eslint-disable-next-line no-await-in-loop -- one owned connection attempt at a time
158
+ await withTimeoutAndAbort(Promise.resolve(connection.connect(signal)), this.#options.timeoutMs, signal);
159
+ if (!this.#isCurrent(generation, signal)) {
160
+ // eslint-disable-next-line no-await-in-loop -- close the current unit before leaving the loop
161
+ await this.#closeCurrent(this.#online ? "retry" : "offline");
162
+ return;
163
+ }
164
+ this.#setState({ kind: "ready" });
165
+ this.#emit({
166
+ type: "connection-result",
167
+ attempt,
168
+ outcome: "connected",
169
+ durationMs: elapsed(readClock(this.#options.now), startedAt),
170
+ });
171
+ if (connection.closed !== undefined) {
172
+ void Promise.resolve(connection.closed).then((reason) => this.#handleUnexpectedClose(connection, reason), (error) => this.#handleUnexpectedClose(connection, error));
173
+ }
174
+ return;
175
+ }
176
+ catch (error) {
177
+ // eslint-disable-next-line no-await-in-loop -- close before a fresh retry unit is created
178
+ await this.#closeCurrent(this.#online ? "retry" : "offline");
179
+ if (!this.#isCurrent(generation, signal)) {
180
+ this.#emit({
181
+ type: "connection-result",
182
+ attempt,
183
+ outcome: "cancelled",
184
+ durationMs: elapsed(readClock(this.#options.now), startedAt),
185
+ });
186
+ return;
187
+ }
188
+ const retry = this.#handleFailure(error, attempt, startedAt, attempt < this.#options.maxAttempts);
189
+ if (!retry)
190
+ return;
191
+ }
192
+ // eslint-disable-next-line no-await-in-loop -- backoff serializes bounded retry attempts
193
+ if (!(await this.#waitBeforeRetry(attempt, signal)))
194
+ return;
195
+ }
196
+ }
197
+ #handleFailure(error, attempt, startedAt, canRetry) {
198
+ const classification = validateClassification(this.#options.classifyError(error));
199
+ const durationMs = elapsed(readClock(this.#options.now), startedAt);
200
+ if (classification.kind === "terminal" || !canRetry) {
201
+ this.#setState({
202
+ kind: "terminal-error",
203
+ code: classification.code,
204
+ exhausted: classification.kind === "retryable",
205
+ });
206
+ this.#emit({
207
+ type: "connection-result",
208
+ attempt,
209
+ outcome: "terminal-error",
210
+ durationMs,
211
+ code: classification.code,
212
+ });
213
+ return false;
214
+ }
215
+ this.#setState({
216
+ kind: "retryable-error",
217
+ code: classification.code,
218
+ attempt,
219
+ retryInMs: 0,
220
+ });
221
+ this.#emit({
222
+ type: "connection-result",
223
+ attempt,
224
+ outcome: "retryable-error",
225
+ durationMs,
226
+ code: classification.code,
227
+ });
228
+ return true;
229
+ }
230
+ async #waitBeforeRetry(attempt, signal) {
231
+ const delayMs = Math.min(this.#options.maxBackoffMs, Math.round(this.#options.initialBackoffMs * this.#options.backoffMultiplier ** (attempt - 1)));
232
+ this.#setState({
233
+ kind: "retryable-error",
234
+ code: (this.#state.kind === "retryable-error" && this.#state.code) || "retryable",
235
+ attempt,
236
+ retryInMs: delayMs,
237
+ });
238
+ this.#emit({ type: "connection-backoff", attempt, delayMs });
239
+ try {
240
+ await this.#options.wait(delayMs, signal);
241
+ return !signal.aborted;
242
+ }
243
+ catch {
244
+ return false;
245
+ }
246
+ }
247
+ async #handleUnexpectedClose(connection, reason) {
248
+ if (this.#connection !== connection || this.#shutdown || !this.#online)
249
+ return;
250
+ this.#connection = undefined;
251
+ const activeRun = this.#run;
252
+ if (activeRun !== undefined)
253
+ await activeRun;
254
+ if (this.#shutdown || !this.#online)
255
+ return;
256
+ let classification;
257
+ try {
258
+ classification = validateClassification(this.#options.classifyError(reason));
259
+ }
260
+ catch {
261
+ this.#setState({
262
+ kind: "terminal-error",
263
+ code: "lifecycle-callback-failed",
264
+ exhausted: false,
265
+ });
266
+ return;
267
+ }
268
+ if (classification.kind === "terminal") {
269
+ this.#setState({ kind: "terminal-error", code: classification.code, exhausted: false });
270
+ this.#emit({
271
+ type: "connection-lost",
272
+ outcome: "terminal-error",
273
+ code: classification.code,
274
+ });
275
+ return;
276
+ }
277
+ this.#setState({
278
+ kind: "retryable-error",
279
+ code: classification.code,
280
+ attempt: 0,
281
+ retryInMs: 0,
282
+ });
283
+ this.#emit({
284
+ type: "connection-lost",
285
+ outcome: "retryable-error",
286
+ code: classification.code,
287
+ });
288
+ try {
289
+ await this.start();
290
+ }
291
+ catch {
292
+ if (!this.#shutdown && this.#online) {
293
+ this.#setState({
294
+ kind: "terminal-error",
295
+ code: "lifecycle-callback-failed",
296
+ exhausted: false,
297
+ });
298
+ }
299
+ }
300
+ }
301
+ #isCurrent(generation, signal) {
302
+ return generation === this.#generation && !signal.aborted && this.#online && !this.#shutdown;
303
+ }
304
+ async #closeCurrent(reason) {
305
+ const connection = this.#connection;
306
+ this.#connection = undefined;
307
+ if (connection === undefined)
308
+ return;
309
+ const outcome = await settleWithin(Promise.resolve().then(() => connection.close()), this.#options.closeTimeoutMs);
310
+ this.#emit({ type: "connection-close", reason, outcome });
311
+ }
312
+ #setState(state) {
313
+ this.#state = Object.freeze(state);
314
+ try {
315
+ this.#options.onStateChange?.(this.#state);
316
+ }
317
+ catch {
318
+ // Host observation must not change connection ownership or retry behavior.
319
+ }
320
+ }
321
+ #emit(event) {
322
+ try {
323
+ this.#options.diagnostics?.emit(Object.freeze(event));
324
+ }
325
+ catch {
326
+ // Instrumentation failures must not alter the operation being observed.
327
+ }
328
+ }
329
+ }
330
+ export function createMcpNativeConnectionLifecycle(options) {
331
+ return new McpNativeConnectionLifecycle(options);
332
+ }
333
+ function validateConnection(value) {
334
+ if (value === null ||
335
+ typeof value !== "object" ||
336
+ typeof value.connect !== "function" ||
337
+ typeof value.close !== "function" ||
338
+ (value.closed !== undefined &&
339
+ (value.closed === null || typeof value.closed.then !== "function"))) {
340
+ throw new TypeError("Connection factory must return connect and close callbacks");
341
+ }
342
+ return value;
343
+ }
344
+ function validateClassification(value) {
345
+ if (value === null ||
346
+ typeof value !== "object" ||
347
+ (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) {
348
+ throw new TypeError("Connection error classifier must return an object");
349
+ }
350
+ const candidate = value;
351
+ if (!Object.hasOwn(candidate, "kind") ||
352
+ !Object.hasOwn(candidate, "code") ||
353
+ (candidate.kind !== "retryable" && candidate.kind !== "terminal") ||
354
+ typeof candidate.code !== "string" ||
355
+ !/^[a-z][a-z0-9._-]{0,63}$/.test(candidate.code) ||
356
+ Object.keys(candidate).some((key) => key !== "kind" && key !== "code")) {
357
+ throw new TypeError("Connection error classifier returned an invalid safe classification");
358
+ }
359
+ return Object.freeze({ kind: candidate.kind, code: candidate.code });
360
+ }
361
+ function boundedInteger(value, label, minimum, maximum) {
362
+ if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
363
+ throw new TypeError(`${label} must be an integer from ${minimum} to ${maximum}`);
364
+ }
365
+ return value;
366
+ }
367
+ function elapsed(now, startedAt) {
368
+ return Math.max(0, Math.round(now - startedAt));
369
+ }
370
+ function readClock(now) {
371
+ const value = now();
372
+ if (!Number.isFinite(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {
373
+ throw new TypeError("Connection lifecycle clock must return a finite non-negative number");
374
+ }
375
+ return value;
376
+ }
377
+ function waitFor(milliseconds, signal) {
378
+ if (signal.aborted)
379
+ return Promise.reject(new Error("Connection wait aborted"));
380
+ return new Promise((resolve, reject) => {
381
+ const onAbort = () => {
382
+ clearTimeout(timer);
383
+ reject(new Error("Connection wait aborted"));
384
+ };
385
+ const timer = setTimeout(() => {
386
+ signal.removeEventListener("abort", onAbort);
387
+ resolve();
388
+ }, milliseconds);
389
+ signal.addEventListener("abort", onAbort, { once: true });
390
+ });
391
+ }
392
+ function withTimeoutAndAbort(operation, timeoutMs, signal) {
393
+ return new Promise((resolve, reject) => {
394
+ let settled = false;
395
+ const finish = (callback) => {
396
+ if (settled)
397
+ return;
398
+ settled = true;
399
+ clearTimeout(timer);
400
+ signal.removeEventListener("abort", onAbort);
401
+ callback();
402
+ };
403
+ const onAbort = () => finish(() => reject(new McpNativeConnectionLifecycleError("cancelled")));
404
+ const timer = setTimeout(() => finish(() => reject(new McpNativeConnectionLifecycleError("timeout"))), timeoutMs);
405
+ signal.addEventListener("abort", onAbort, { once: true });
406
+ if (signal.aborted)
407
+ onAbort();
408
+ void operation.then(() => finish(resolve), (error) => finish(() => reject(error)));
409
+ });
410
+ }
411
+ function settleWithin(operation, timeoutMs) {
412
+ return new Promise((resolve) => {
413
+ let settled = false;
414
+ const finish = (outcome) => {
415
+ if (settled)
416
+ return;
417
+ settled = true;
418
+ clearTimeout(timer);
419
+ resolve(outcome);
420
+ };
421
+ const timer = setTimeout(() => finish("timeout"), timeoutMs);
422
+ void operation.then(() => finish("completed"), () => finish("failed"));
423
+ });
424
+ }
425
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type McpNativeOAuthErrorCode = "authorization-denied" | "callback-mismatch" | "invalid-callback" | "invalid-configuration" | "invalid-storage" | "resource-mismatch" | "reauthorization-denied" | "state-mismatch";
2
+ export declare class McpNativeOAuthError extends Error {
3
+ readonly code: McpNativeOAuthErrorCode;
4
+ constructor(code: McpNativeOAuthErrorCode, message: string, options?: ErrorOptions);
5
+ }
6
+ //# sourceMappingURL=oauth-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-error.d.ts","sourceRoot":"","sources":["../src/oauth-error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAC/B,sBAAsB,GACtB,mBAAmB,GACnB,kBAAkB,GAClB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,wBAAwB,GACxB,gBAAgB,CAAC;AAErB,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IAEvC,YAAY,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIjF;CACF"}
@@ -0,0 +1,9 @@
1
+ export class McpNativeOAuthError extends Error {
2
+ code;
3
+ constructor(code, message, options) {
4
+ super(message, options);
5
+ this.name = "McpNativeOAuthError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ //# sourceMappingURL=oauth-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-error.js","sourceRoot":"","sources":["../src/oauth-error.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAA0B;IAEvC,YAAY,IAA6B,EAAE,OAAe,EAAE,OAAsB;QAChF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,66 @@
1
+ import type { OAuthDiscoveryState, StoredOAuthClientInformation, StoredOAuthTokens, StreamableHTTPClientTransport } from "@modelcontextprotocol/client";
2
+ import type { McpNativeOAuthClientProvider, McpNativeOAuthCredentialScope, McpNativeOAuthPendingAuthorizationRecord, McpNativeOAuthSecureStore } from "./oauth.js";
3
+ type OAuthFinisher = Pick<StreamableHTTPClientTransport, "finishAuth">;
4
+ /**
5
+ * Minimal bridge to an app-owned iOS Keychain / Android Keystore-backed module.
6
+ * Implementations must not use AsyncStorage, plain files, or a remote service.
7
+ */
8
+ export interface McpNativeOAuthSecretBackend {
9
+ readonly read: (service: string) => Promise<string | undefined>;
10
+ readonly write: (service: string, value: string) => Promise<void>;
11
+ readonly remove: (service: string) => Promise<void>;
12
+ }
13
+ export interface McpNativeOAuthPlatformSecureStoreOptions {
14
+ /** App-owned, environment-specific identifier. It must never come from an MCP server. */
15
+ readonly namespace: string;
16
+ readonly backend: McpNativeOAuthSecretBackend;
17
+ }
18
+ /**
19
+ * Bounded reference implementation of the OAuth store contract over a native secret backend.
20
+ * One namespace represents one protected-resource authorization context. State operations are
21
+ * serialized across store objects using the same fixed namespaced service in this JS runtime,
22
+ * and a claimed state keeps the reservation exclusive until it is explicitly cleared.
23
+ */
24
+ export declare class McpNativeOAuthPlatformSecureStore implements McpNativeOAuthSecureStore {
25
+ #private;
26
+ constructor(options: McpNativeOAuthPlatformSecureStoreOptions);
27
+ loadClientInformation(issuer: string): Promise<StoredOAuthClientInformation | undefined>;
28
+ saveClientInformation(issuer: string, information: StoredOAuthClientInformation): Promise<void>;
29
+ loadTokens(issuer?: string): Promise<StoredOAuthTokens | undefined>;
30
+ saveTokens(issuer: string, tokens: StoredOAuthTokens): Promise<void>;
31
+ loadCodeVerifier(): Promise<string | undefined>;
32
+ saveCodeVerifier(verifier: string): Promise<void>;
33
+ loadPendingAuthorization(): Promise<unknown>;
34
+ savePendingAuthorization(record: McpNativeOAuthPendingAuthorizationRecord): Promise<void>;
35
+ reserveOAuthState(owner: object): Promise<void>;
36
+ saveOAuthState(state: string, owner: object): Promise<void>;
37
+ claimOAuthStateForCleanup(owner: object): Promise<void>;
38
+ clearOAuthState(owner: object): Promise<void>;
39
+ consumeOAuthState(state: string, owner: object): Promise<boolean>;
40
+ loadDiscoveryState(): Promise<OAuthDiscoveryState | undefined>;
41
+ saveDiscoveryState(state: OAuthDiscoveryState): Promise<void>;
42
+ invalidate(scope: McpNativeOAuthCredentialScope, issuer?: string): Promise<void>;
43
+ }
44
+ export declare function createMcpNativeOAuthPlatformSecureStore(options: McpNativeOAuthPlatformSecureStoreOptions): McpNativeOAuthPlatformSecureStore;
45
+ export type McpNativeOAuthAuthorizationSessionResult = {
46
+ readonly type: "cancel" | "dismiss";
47
+ } | {
48
+ readonly type: "success";
49
+ readonly url: string;
50
+ };
51
+ export interface McpNativeOAuthAuthorizationSessionOptions {
52
+ readonly redirectUrl: string | URL;
53
+ /** Must invoke an OS authentication session, never an embedded application WebView. */
54
+ readonly open: (authorizationUrl: URL, redirectUrl: URL) => McpNativeOAuthAuthorizationSessionResult | Promise<McpNativeOAuthAuthorizationSessionResult>;
55
+ }
56
+ /** Closed adapter for ASWebAuthenticationSession / Android Custom Tab callback results. */
57
+ export declare class McpNativeOAuthAuthorizationSession {
58
+ #private;
59
+ constructor(options: McpNativeOAuthAuthorizationSessionOptions);
60
+ readonly openAuthorization: (authorizationUrl: URL) => Promise<void>;
61
+ hasPendingCallback(): boolean;
62
+ finishAuthorization(provider: McpNativeOAuthClientProvider, finisher: OAuthFinisher): Promise<void>;
63
+ }
64
+ export declare function createMcpNativeOAuthAuthorizationSession(options: McpNativeOAuthAuthorizationSessionOptions): McpNativeOAuthAuthorizationSession;
65
+ export {};
66
+ //# sourceMappingURL=oauth-native.d.ts.map