Skip to content

Commit eabf706

Browse files
committed
feat: support overriding UA provider
1 parent fd93114 commit eabf706

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

src/client/middleware.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { auth, extractResourceMetadataUrl, OAuthClientProvider, UnauthorizedError } from './auth.js';
22
import { FetchLike } from '../shared/transport.js';
3-
import { createUserAgentProvider } from '../shared/userAgent.js';
3+
import { createUserAgentProvider, UserAgentProvider } from '../shared/userAgent.js';
44

55
/**
66
* Middleware function that wraps and enhances fetch functionality.
@@ -32,12 +32,13 @@ export type Middleware = (next: FetchLike) => FetchLike;
3232
*
3333
* @param provider - OAuth client provider for authentication
3434
* @param baseUrl - Base URL for OAuth server discovery (defaults to request URL domain)
35+
* @param userAgentProvider - User agent provider for the connection.
3536
* @returns A fetch middleware function
3637
*/
3738
export const withOAuth =
38-
(provider: OAuthClientProvider, baseUrl?: string | URL): Middleware =>
39+
(provider: OAuthClientProvider, baseUrl?: string | URL, userAgentProvider?: UserAgentProvider): Middleware =>
3940
next => {
40-
const userAgentProvider = createUserAgentProvider();
41+
const uaProvider = userAgentProvider ?? createUserAgentProvider();
4142
return async (input, init) => {
4243
const makeRequest = async (): Promise<Response> => {
4344
const headers = new Headers(init?.headers);
@@ -65,7 +66,7 @@ export const withOAuth =
6566
serverUrl,
6667
resourceMetadataUrl,
6768
fetchFn: next,
68-
userAgentProvider
69+
userAgentProvider: uaProvider
6970
});
7071

7172
if (result === 'REDIRECT') {

src/client/sse.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ export type SSEClientTransportOptions = {
5353
* Custom fetch implementation used for all network requests.
5454
*/
5555
fetch?: FetchLike;
56+
57+
/**
58+
* User agent provider for the connection.
59+
*/
60+
userAgentProvider?: UserAgentProvider;
5661
};
5762

5863
/**
@@ -83,7 +88,7 @@ export class SSEClientTransport implements Transport {
8388
this._requestInit = opts?.requestInit;
8489
this._authProvider = opts?.authProvider;
8590
this._fetch = opts?.fetch;
86-
this._userAgentProvider = createUserAgentProvider();
91+
this._userAgentProvider = opts?.userAgentProvider ?? createUserAgentProvider();
8792
}
8893

8994
private async _authThenStart(): Promise<void> {

src/client/streamableHttp.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ export type StreamableHTTPClientTransportOptions = {
115115
* When not provided and connecting to a server that supports session IDs, the server will generate a new session ID.
116116
*/
117117
sessionId?: string;
118+
119+
/**
120+
* User agent provider for the connection.
121+
*/
122+
userAgentProvider?: UserAgentProvider;
118123
};
119124

120125
/**
@@ -147,7 +152,7 @@ export class StreamableHTTPClientTransport implements Transport {
147152
this._fetch = opts?.fetch;
148153
this._sessionId = opts?.sessionId;
149154
this._reconnectionOptions = opts?.reconnectionOptions ?? DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS;
150-
this._userAgentProvider = createUserAgentProvider();
155+
this._userAgentProvider = opts?.userAgentProvider ?? createUserAgentProvider();
151156
}
152157

153158
private async _authThenStart(): Promise<void> {

0 commit comments

Comments
 (0)