@modelcontextprotocol/sdk 1.15.0 → 1.16.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 +64 -16
- package/dist/cjs/cli.js +5 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/client/auth.d.ts +72 -8
- package/dist/cjs/client/auth.d.ts.map +1 -1
- package/dist/cjs/client/auth.js +273 -87
- package/dist/cjs/client/auth.js.map +1 -1
- package/dist/cjs/client/sse.d.ts.map +1 -1
- package/dist/cjs/client/sse.js +8 -13
- package/dist/cjs/client/sse.js.map +1 -1
- package/dist/cjs/client/stdio.d.ts.map +1 -1
- package/dist/cjs/client/stdio.js +10 -6
- package/dist/cjs/client/stdio.js.map +1 -1
- package/dist/cjs/client/streamableHttp.d.ts.map +1 -1
- package/dist/cjs/client/streamableHttp.js +18 -18
- package/dist/cjs/client/streamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
- package/dist/cjs/examples/server/demoInMemoryOAuthProvider.js +5 -1
- package/dist/cjs/examples/server/demoInMemoryOAuthProvider.js.map +1 -1
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +11 -1
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleSseServer.js +5 -1
- package/dist/cjs/examples/server/simpleSseServer.js.map +1 -1
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +11 -1
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleStreamableHttp.js +13 -3
- package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +11 -1
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +5 -1
- package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
- package/dist/cjs/server/auth/clients.d.ts +1 -1
- package/dist/cjs/server/auth/clients.d.ts.map +1 -1
- package/dist/cjs/server/auth/errors.d.ts +33 -18
- package/dist/cjs/server/auth/errors.d.ts.map +1 -1
- package/dist/cjs/server/auth/errors.js +55 -51
- package/dist/cjs/server/auth/errors.js.map +1 -1
- package/dist/cjs/server/auth/handlers/register.d.ts +7 -1
- package/dist/cjs/server/auth/handlers/register.d.ts.map +1 -1
- package/dist/cjs/server/auth/handlers/register.js +5 -4
- package/dist/cjs/server/auth/handlers/register.js.map +1 -1
- package/dist/cjs/server/auth/middleware/bearerAuth.d.ts.map +1 -1
- package/dist/cjs/server/auth/middleware/bearerAuth.js +5 -2
- package/dist/cjs/server/auth/middleware/bearerAuth.js.map +1 -1
- package/dist/cjs/server/auth/providers/proxyProvider.d.ts +6 -0
- package/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
- package/dist/cjs/server/auth/providers/proxyProvider.js +9 -4
- package/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
- package/dist/cjs/server/auth/router.js +1 -1
- package/dist/cjs/server/auth/router.js.map +1 -1
- package/dist/cjs/server/streamableHttp.d.ts +13 -1
- package/dist/cjs/server/streamableHttp.d.ts.map +1 -1
- package/dist/cjs/server/streamableHttp.js +4 -1
- package/dist/cjs/server/streamableHttp.js.map +1 -1
- package/dist/cjs/shared/auth.d.ts +3 -0
- package/dist/cjs/shared/auth.d.ts.map +1 -1
- package/dist/cjs/shared/auth.js +1 -0
- package/dist/cjs/shared/auth.js.map +1 -1
- package/dist/cjs/shared/protocol.d.ts +8 -0
- package/dist/cjs/shared/protocol.d.ts.map +1 -1
- package/dist/cjs/shared/protocol.js +37 -0
- package/dist/cjs/shared/protocol.js.map +1 -1
- package/dist/esm/cli.js +5 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/client/auth.d.ts +72 -8
- package/dist/esm/client/auth.d.ts.map +1 -1
- package/dist/esm/client/auth.js +267 -82
- package/dist/esm/client/auth.js.map +1 -1
- package/dist/esm/client/sse.d.ts.map +1 -1
- package/dist/esm/client/sse.js +8 -13
- package/dist/esm/client/sse.js.map +1 -1
- package/dist/esm/client/stdio.d.ts.map +1 -1
- package/dist/esm/client/stdio.js +10 -6
- package/dist/esm/client/stdio.js.map +1 -1
- package/dist/esm/client/streamableHttp.d.ts.map +1 -1
- package/dist/esm/client/streamableHttp.js +18 -18
- package/dist/esm/client/streamableHttp.js.map +1 -1
- package/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
- package/dist/esm/examples/server/demoInMemoryOAuthProvider.js +5 -1
- package/dist/esm/examples/server/demoInMemoryOAuthProvider.js.map +1 -1
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js +11 -1
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleSseServer.js +5 -1
- package/dist/esm/examples/server/simpleSseServer.js.map +1 -1
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +11 -1
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleStreamableHttp.js +13 -3
- package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +11 -1
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +5 -1
- package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
- package/dist/esm/server/auth/clients.d.ts +1 -1
- package/dist/esm/server/auth/clients.d.ts.map +1 -1
- package/dist/esm/server/auth/errors.d.ts +33 -18
- package/dist/esm/server/auth/errors.d.ts.map +1 -1
- package/dist/esm/server/auth/errors.js +52 -49
- package/dist/esm/server/auth/errors.js.map +1 -1
- package/dist/esm/server/auth/handlers/register.d.ts +7 -1
- package/dist/esm/server/auth/handlers/register.d.ts.map +1 -1
- package/dist/esm/server/auth/handlers/register.js +5 -4
- package/dist/esm/server/auth/handlers/register.js.map +1 -1
- package/dist/esm/server/auth/middleware/bearerAuth.d.ts.map +1 -1
- package/dist/esm/server/auth/middleware/bearerAuth.js +5 -2
- package/dist/esm/server/auth/middleware/bearerAuth.js.map +1 -1
- package/dist/esm/server/auth/providers/proxyProvider.d.ts +6 -0
- package/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
- package/dist/esm/server/auth/providers/proxyProvider.js +9 -4
- package/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
- package/dist/esm/server/auth/router.js +1 -1
- package/dist/esm/server/auth/router.js.map +1 -1
- package/dist/esm/server/streamableHttp.d.ts +13 -1
- package/dist/esm/server/streamableHttp.d.ts.map +1 -1
- package/dist/esm/server/streamableHttp.js +4 -1
- package/dist/esm/server/streamableHttp.js.map +1 -1
- package/dist/esm/shared/auth.d.ts +3 -0
- package/dist/esm/shared/auth.d.ts.map +1 -1
- package/dist/esm/shared/auth.js +1 -0
- package/dist/esm/shared/auth.js.map +1 -1
- package/dist/esm/shared/protocol.d.ts +8 -0
- package/dist/esm/shared/protocol.d.ts.map +1 -1
- package/dist/esm/shared/protocol.js +37 -0
- package/dist/esm/shared/protocol.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ The Model Context Protocol allows applications to provide context for LLMs in a
|
|
|
45
45
|
npm install @modelcontextprotocol/sdk
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
> ⚠️ MCP requires Node v18.x
|
|
48
|
+
> ⚠️ MCP requires Node.js v18.x or higher to work fine.
|
|
49
49
|
|
|
50
50
|
## Quick Start
|
|
51
51
|
|
|
@@ -570,20 +570,31 @@ app.listen(3000);
|
|
|
570
570
|
```
|
|
571
571
|
|
|
572
572
|
> [!TIP]
|
|
573
|
-
> When using this in a remote environment, make sure to allow the header parameter `mcp-session-id` in CORS. Otherwise, it may result in a `Bad Request: No valid session ID provided` error.
|
|
574
|
-
>
|
|
575
|
-
> For example, in Node.js you can configure it like this:
|
|
576
|
-
>
|
|
577
|
-
> ```ts
|
|
578
|
-
> app.use(
|
|
579
|
-
> cors({
|
|
580
|
-
> origin: ['https://your-remote-domain.com, https://your-other-remote-domain.com'],
|
|
581
|
-
> exposedHeaders: ['mcp-session-id'],
|
|
582
|
-
> allowedHeaders: ['Content-Type', 'mcp-session-id'],
|
|
583
|
-
> })
|
|
584
|
-
> );
|
|
573
|
+
> When using this in a remote environment, make sure to allow the header parameter `mcp-session-id` in CORS. Otherwise, it may result in a `Bad Request: No valid session ID provided` error. Read the following section for examples.
|
|
585
574
|
> ```
|
|
586
575
|
|
|
576
|
+
|
|
577
|
+
#### CORS Configuration for Browser-Based Clients
|
|
578
|
+
|
|
579
|
+
If you'd like your server to be accessible by browser-based MCP clients, you'll need to configure CORS headers. The `Mcp-Session-Id` header must be exposed for browser clients to access it:
|
|
580
|
+
|
|
581
|
+
```typescript
|
|
582
|
+
import cors from 'cors';
|
|
583
|
+
|
|
584
|
+
// Add CORS middleware before your MCP routes
|
|
585
|
+
app.use(cors({
|
|
586
|
+
origin: '*', // Configure appropriately for production, for example:
|
|
587
|
+
// origin: ['https://your-remote-domain.com', 'https://your-other-remote-domain.com'],
|
|
588
|
+
exposedHeaders: ['Mcp-Session-Id'],
|
|
589
|
+
allowedHeaders: ['Content-Type', 'mcp-session-id'],
|
|
590
|
+
}));
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
This configuration is necessary because:
|
|
594
|
+
- The MCP streamable HTTP transport uses the `Mcp-Session-Id` header for session management
|
|
595
|
+
- Browsers restrict access to response headers unless explicitly exposed via CORS
|
|
596
|
+
- Without this configuration, browser-based clients won't be able to read the session ID from initialization responses
|
|
597
|
+
|
|
587
598
|
#### Without Session Management (Stateless)
|
|
588
599
|
|
|
589
600
|
For simpler use cases where session management isn't needed:
|
|
@@ -865,7 +876,7 @@ const putMessageTool = server.tool(
|
|
|
865
876
|
"putMessage",
|
|
866
877
|
{ channel: z.string(), message: z.string() },
|
|
867
878
|
async ({ channel, message }) => ({
|
|
868
|
-
content: [{ type: "text", text: await putMessage(channel,
|
|
879
|
+
content: [{ type: "text", text: await putMessage(channel, message) }]
|
|
869
880
|
})
|
|
870
881
|
);
|
|
871
882
|
// Until we upgrade auth, `putMessage` is disabled (won't show up in listTools)
|
|
@@ -873,7 +884,7 @@ putMessageTool.disable()
|
|
|
873
884
|
|
|
874
885
|
const upgradeAuthTool = server.tool(
|
|
875
886
|
"upgradeAuth",
|
|
876
|
-
{ permission: z.enum(["write
|
|
887
|
+
{ permission: z.enum(["write", "admin"])},
|
|
877
888
|
// Any mutations here will automatically emit `listChanged` notifications
|
|
878
889
|
async ({ permission }) => {
|
|
879
890
|
const { ok, err, previous } = await upgradeAuthAndStoreToken(permission)
|
|
@@ -902,6 +913,43 @@ const transport = new StdioServerTransport();
|
|
|
902
913
|
await server.connect(transport);
|
|
903
914
|
```
|
|
904
915
|
|
|
916
|
+
### Improving Network Efficiency with Notification Debouncing
|
|
917
|
+
|
|
918
|
+
When performing bulk updates that trigger notifications (e.g., enabling or disabling multiple tools in a loop), the SDK can send a large number of messages in a short period. To improve performance and reduce network traffic, you can enable notification debouncing.
|
|
919
|
+
|
|
920
|
+
This feature coalesces multiple, rapid calls for the same notification type into a single message. For example, if you disable five tools in a row, only one `notifications/tools/list_changed` message will be sent instead of five.
|
|
921
|
+
|
|
922
|
+
> [!IMPORTANT]
|
|
923
|
+
> This feature is designed for "simple" notifications that do not carry unique data in their parameters. To prevent silent data loss, debouncing is **automatically bypassed** for any notification that contains a `params` object or a `relatedRequestId`. Such notifications will always be sent immediately.
|
|
924
|
+
|
|
925
|
+
This is an opt-in feature configured during server initialization.
|
|
926
|
+
|
|
927
|
+
```typescript
|
|
928
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
929
|
+
|
|
930
|
+
const server = new McpServer(
|
|
931
|
+
{
|
|
932
|
+
name: "efficient-server",
|
|
933
|
+
version: "1.0.0"
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
// Enable notification debouncing for specific methods
|
|
937
|
+
debouncedNotificationMethods: [
|
|
938
|
+
'notifications/tools/list_changed',
|
|
939
|
+
'notifications/resources/list_changed',
|
|
940
|
+
'notifications/prompts/list_changed'
|
|
941
|
+
]
|
|
942
|
+
}
|
|
943
|
+
);
|
|
944
|
+
|
|
945
|
+
// Now, any rapid changes to tools, resources, or prompts will result
|
|
946
|
+
// in a single, consolidated notification for each type.
|
|
947
|
+
server.registerTool("tool1", ...).disable();
|
|
948
|
+
server.registerTool("tool2", ...).disable();
|
|
949
|
+
server.registerTool("tool3", ...).disable();
|
|
950
|
+
// Only one 'notifications/tools/list_changed' is sent.
|
|
951
|
+
```
|
|
952
|
+
|
|
905
953
|
### Low-Level Server
|
|
906
954
|
|
|
907
955
|
For more control, you can use the low-level Server class directly:
|
|
@@ -1164,7 +1212,7 @@ This setup allows you to:
|
|
|
1164
1212
|
|
|
1165
1213
|
### Backwards Compatibility
|
|
1166
1214
|
|
|
1167
|
-
Clients and servers with StreamableHttp
|
|
1215
|
+
Clients and servers with StreamableHttp transport can maintain [backwards compatibility](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#backwards-compatibility) with the deprecated HTTP+SSE transport (from protocol version 2024-11-05) as follows
|
|
1168
1216
|
|
|
1169
1217
|
#### Client-Side Compatibility
|
|
1170
1218
|
|
package/dist/cjs/cli.js
CHANGED
|
@@ -83,7 +83,11 @@ async function runServer(port) {
|
|
|
83
83
|
}
|
|
84
84
|
await transport.handlePostMessage(req, res);
|
|
85
85
|
});
|
|
86
|
-
app.listen(port, () => {
|
|
86
|
+
app.listen(port, (error) => {
|
|
87
|
+
if (error) {
|
|
88
|
+
console.error('Failed to start server:', error);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
87
91
|
console.log(`Server running on http://localhost:${port}/sse`);
|
|
88
92
|
});
|
|
89
93
|
}
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { OAuthClientMetadata, OAuthClientInformation, OAuthTokens, OAuthMetadata, OAuthClientInformationFull, OAuthProtectedResourceMetadata } from "../shared/auth.js";
|
|
2
|
+
import { OAuthError } from "../server/auth/errors.js";
|
|
3
|
+
import { FetchLike } from "../shared/transport.js";
|
|
2
4
|
/**
|
|
3
5
|
* Implements an end-to-end OAuth client to be used with one MCP server.
|
|
4
6
|
*
|
|
@@ -58,6 +60,25 @@ export interface OAuthClientProvider {
|
|
|
58
60
|
* the authorization result.
|
|
59
61
|
*/
|
|
60
62
|
codeVerifier(): string | Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Adds custom client authentication to OAuth token requests.
|
|
65
|
+
*
|
|
66
|
+
* This optional method allows implementations to customize how client credentials
|
|
67
|
+
* are included in token exchange and refresh requests. When provided, this method
|
|
68
|
+
* is called instead of the default authentication logic, giving full control over
|
|
69
|
+
* the authentication mechanism.
|
|
70
|
+
*
|
|
71
|
+
* Common use cases include:
|
|
72
|
+
* - Supporting authentication methods beyond the standard OAuth 2.0 methods
|
|
73
|
+
* - Adding custom headers for proprietary authentication schemes
|
|
74
|
+
* - Implementing client assertion-based authentication (e.g., JWT bearer tokens)
|
|
75
|
+
*
|
|
76
|
+
* @param headers - The request headers (can be modified to add authentication)
|
|
77
|
+
* @param params - The request body parameters (can be modified to add credentials)
|
|
78
|
+
* @param url - The token endpoint URL being called
|
|
79
|
+
* @param metadata - Optional OAuth metadata for the server, which may include supported authentication methods
|
|
80
|
+
*/
|
|
81
|
+
addClientAuthentication?(headers: Headers, params: URLSearchParams, url: string | URL, metadata?: OAuthMetadata): void | Promise<void>;
|
|
61
82
|
/**
|
|
62
83
|
* If defined, overrides the selection and validation of the
|
|
63
84
|
* RFC 8707 Resource Indicator. If left undefined, default
|
|
@@ -66,22 +87,41 @@ export interface OAuthClientProvider {
|
|
|
66
87
|
* Implementations must verify the returned resource matches the MCP server.
|
|
67
88
|
*/
|
|
68
89
|
validateResourceURL?(serverUrl: string | URL, resource?: string): Promise<URL | undefined>;
|
|
90
|
+
/**
|
|
91
|
+
* If implemented, provides a way for the client to invalidate (e.g. delete) the specified
|
|
92
|
+
* credentials, in the case where the server has indicated that they are no longer valid.
|
|
93
|
+
* This avoids requiring the user to intervene manually.
|
|
94
|
+
*/
|
|
95
|
+
invalidateCredentials?(scope: 'all' | 'client' | 'tokens' | 'verifier'): void | Promise<void>;
|
|
69
96
|
}
|
|
70
97
|
export type AuthResult = "AUTHORIZED" | "REDIRECT";
|
|
71
98
|
export declare class UnauthorizedError extends Error {
|
|
72
99
|
constructor(message?: string);
|
|
73
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Parses an OAuth error response from a string or Response object.
|
|
103
|
+
*
|
|
104
|
+
* If the input is a standard OAuth2.0 error response, it will be parsed according to the spec
|
|
105
|
+
* and an instance of the appropriate OAuthError subclass will be returned.
|
|
106
|
+
* If parsing fails, it falls back to a generic ServerError that includes
|
|
107
|
+
* the response status (if available) and original content.
|
|
108
|
+
*
|
|
109
|
+
* @param input - A Response object or string containing the error response
|
|
110
|
+
* @returns A Promise that resolves to an OAuthError instance
|
|
111
|
+
*/
|
|
112
|
+
export declare function parseErrorResponse(input: Response | string): Promise<OAuthError>;
|
|
74
113
|
/**
|
|
75
114
|
* Orchestrates the full auth flow with a server.
|
|
76
115
|
*
|
|
77
116
|
* This can be used as a single entry point for all authorization functionality,
|
|
78
117
|
* instead of linking together the other lower-level functions in this module.
|
|
79
118
|
*/
|
|
80
|
-
export declare function auth(provider: OAuthClientProvider,
|
|
119
|
+
export declare function auth(provider: OAuthClientProvider, options: {
|
|
81
120
|
serverUrl: string | URL;
|
|
82
121
|
authorizationCode?: string;
|
|
83
122
|
scope?: string;
|
|
84
123
|
resourceMetadataUrl?: URL;
|
|
124
|
+
fetchFn?: FetchLike;
|
|
85
125
|
}): Promise<AuthResult>;
|
|
86
126
|
export declare function selectResourceURL(serverUrl: string | URL, provider: OAuthClientProvider, resourceMetadata?: OAuthProtectedResourceMetadata): Promise<URL | undefined>;
|
|
87
127
|
/**
|
|
@@ -97,16 +137,17 @@ export declare function extractResourceMetadataUrl(res: Response): URL | undefin
|
|
|
97
137
|
export declare function discoverOAuthProtectedResourceMetadata(serverUrl: string | URL, opts?: {
|
|
98
138
|
protocolVersion?: string;
|
|
99
139
|
resourceMetadataUrl?: string | URL;
|
|
100
|
-
}): Promise<OAuthProtectedResourceMetadata>;
|
|
140
|
+
}, fetchFn?: FetchLike): Promise<OAuthProtectedResourceMetadata>;
|
|
101
141
|
/**
|
|
102
142
|
* Looks up RFC 8414 OAuth 2.0 Authorization Server Metadata.
|
|
103
143
|
*
|
|
104
144
|
* If the server returns a 404 for the well-known endpoint, this function will
|
|
105
145
|
* return `undefined`. Any other errors will be thrown as exceptions.
|
|
106
146
|
*/
|
|
107
|
-
export declare function discoverOAuthMetadata(
|
|
147
|
+
export declare function discoverOAuthMetadata(issuer: string | URL, { authorizationServerUrl, protocolVersion, }?: {
|
|
148
|
+
authorizationServerUrl?: string | URL;
|
|
108
149
|
protocolVersion?: string;
|
|
109
|
-
}): Promise<OAuthMetadata | undefined>;
|
|
150
|
+
}, fetchFn?: FetchLike): Promise<OAuthMetadata | undefined>;
|
|
110
151
|
/**
|
|
111
152
|
* Begins the authorization flow with the given server, by generating a PKCE challenge and constructing the authorization URL.
|
|
112
153
|
*/
|
|
@@ -123,29 +164,52 @@ export declare function startAuthorization(authorizationServerUrl: string | URL,
|
|
|
123
164
|
}>;
|
|
124
165
|
/**
|
|
125
166
|
* Exchanges an authorization code for an access token with the given server.
|
|
167
|
+
*
|
|
168
|
+
* Supports multiple client authentication methods as specified in OAuth 2.1:
|
|
169
|
+
* - Automatically selects the best authentication method based on server support
|
|
170
|
+
* - Falls back to appropriate defaults when server metadata is unavailable
|
|
171
|
+
*
|
|
172
|
+
* @param authorizationServerUrl - The authorization server's base URL
|
|
173
|
+
* @param options - Configuration object containing client info, auth code, etc.
|
|
174
|
+
* @returns Promise resolving to OAuth tokens
|
|
175
|
+
* @throws {Error} When token exchange fails or authentication is invalid
|
|
126
176
|
*/
|
|
127
|
-
export declare function exchangeAuthorization(authorizationServerUrl: string | URL, { metadata, clientInformation, authorizationCode, codeVerifier, redirectUri, resource, }: {
|
|
177
|
+
export declare function exchangeAuthorization(authorizationServerUrl: string | URL, { metadata, clientInformation, authorizationCode, codeVerifier, redirectUri, resource, addClientAuthentication, fetchFn, }: {
|
|
128
178
|
metadata?: OAuthMetadata;
|
|
129
179
|
clientInformation: OAuthClientInformation;
|
|
130
180
|
authorizationCode: string;
|
|
131
181
|
codeVerifier: string;
|
|
132
182
|
redirectUri: string | URL;
|
|
133
183
|
resource?: URL;
|
|
184
|
+
addClientAuthentication?: OAuthClientProvider["addClientAuthentication"];
|
|
185
|
+
fetchFn?: FetchLike;
|
|
134
186
|
}): Promise<OAuthTokens>;
|
|
135
187
|
/**
|
|
136
188
|
* Exchange a refresh token for an updated access token.
|
|
189
|
+
*
|
|
190
|
+
* Supports multiple client authentication methods as specified in OAuth 2.1:
|
|
191
|
+
* - Automatically selects the best authentication method based on server support
|
|
192
|
+
* - Preserves the original refresh token if a new one is not returned
|
|
193
|
+
*
|
|
194
|
+
* @param authorizationServerUrl - The authorization server's base URL
|
|
195
|
+
* @param options - Configuration object containing client info, refresh token, etc.
|
|
196
|
+
* @returns Promise resolving to OAuth tokens (preserves original refresh_token if not replaced)
|
|
197
|
+
* @throws {Error} When token refresh fails or authentication is invalid
|
|
137
198
|
*/
|
|
138
|
-
export declare function refreshAuthorization(authorizationServerUrl: string | URL, { metadata, clientInformation, refreshToken, resource, }: {
|
|
199
|
+
export declare function refreshAuthorization(authorizationServerUrl: string | URL, { metadata, clientInformation, refreshToken, resource, addClientAuthentication, fetchFn, }: {
|
|
139
200
|
metadata?: OAuthMetadata;
|
|
140
201
|
clientInformation: OAuthClientInformation;
|
|
141
202
|
refreshToken: string;
|
|
142
203
|
resource?: URL;
|
|
204
|
+
addClientAuthentication?: OAuthClientProvider["addClientAuthentication"];
|
|
205
|
+
fetchFn?: FetchLike;
|
|
143
206
|
}): Promise<OAuthTokens>;
|
|
144
207
|
/**
|
|
145
208
|
* Performs OAuth 2.0 Dynamic Client Registration according to RFC 7591.
|
|
146
209
|
*/
|
|
147
|
-
export declare function registerClient(authorizationServerUrl: string | URL, { metadata, clientMetadata, }: {
|
|
210
|
+
export declare function registerClient(authorizationServerUrl: string | URL, { metadata, clientMetadata, fetchFn, }: {
|
|
148
211
|
metadata?: OAuthMetadata;
|
|
149
212
|
clientMetadata: OAuthClientMetadata;
|
|
213
|
+
fetchFn?: FetchLike;
|
|
150
214
|
}): Promise<OAuthClientInformationFull>;
|
|
151
215
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/client/auth.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/client/auth.ts"],"names":[],"mappings":"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"}
|