fastmcp 4.12.2 → 4.12.3

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/dist/FastMCP.cjs CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- var _chunkPOXZCEYEcjs = require('./chunk-POXZCEYE.cjs');
13
+ var _chunk3O5ZKWCCcjs = require('./chunk-3O5ZKWCC.cjs');
14
14
 
15
15
 
16
16
 
@@ -23,7 +23,7 @@ var _chunkPOXZCEYEcjs = require('./chunk-POXZCEYE.cjs');
23
23
 
24
24
 
25
25
 
26
- var _chunkRAIXP3PScjs = require('./chunk-RAIXP3PS.cjs');
26
+ var _chunkENMHHQJFcjs = require('./chunk-ENMHHQJF.cjs');
27
27
 
28
28
 
29
29
 
@@ -47,5 +47,5 @@ var _chunkRAIXP3PScjs = require('./chunk-RAIXP3PS.cjs');
47
47
 
48
48
 
49
49
 
50
- exports.AuthProvider = _chunkRAIXP3PScjs.AuthProvider; exports.AzureProvider = _chunkRAIXP3PScjs.AzureProvider; exports.DiscoveryDocumentCache = _chunkPOXZCEYEcjs.DiscoveryDocumentCache; exports.FastMCP = _chunkPOXZCEYEcjs.FastMCP; exports.FastMCPError = _chunkPOXZCEYEcjs.FastMCPError; exports.FastMCPSession = _chunkPOXZCEYEcjs.FastMCPSession; exports.GitHubProvider = _chunkRAIXP3PScjs.GitHubProvider; exports.GoogleProvider = _chunkRAIXP3PScjs.GoogleProvider; exports.OAuthProvider = _chunkRAIXP3PScjs.OAuthProvider; exports.ServerState = _chunkPOXZCEYEcjs.ServerState; exports.SessionError = _chunkPOXZCEYEcjs.SessionError; exports.UnexpectedStateError = _chunkPOXZCEYEcjs.UnexpectedStateError; exports.UserError = _chunkPOXZCEYEcjs.UserError; exports.audioContent = _chunkPOXZCEYEcjs.audioContent; exports.getAuthSession = _chunkRAIXP3PScjs.getAuthSession; exports.imageContent = _chunkPOXZCEYEcjs.imageContent; exports.jsonSchemaAdapter = _chunkPOXZCEYEcjs.jsonSchemaAdapter; exports.requireAll = _chunkRAIXP3PScjs.requireAll; exports.requireAny = _chunkRAIXP3PScjs.requireAny; exports.requireAuth = _chunkRAIXP3PScjs.requireAuth; exports.requireRole = _chunkRAIXP3PScjs.requireRole; exports.requireScopes = _chunkRAIXP3PScjs.requireScopes;
50
+ exports.AuthProvider = _chunkENMHHQJFcjs.AuthProvider; exports.AzureProvider = _chunkENMHHQJFcjs.AzureProvider; exports.DiscoveryDocumentCache = _chunk3O5ZKWCCcjs.DiscoveryDocumentCache; exports.FastMCP = _chunk3O5ZKWCCcjs.FastMCP; exports.FastMCPError = _chunk3O5ZKWCCcjs.FastMCPError; exports.FastMCPSession = _chunk3O5ZKWCCcjs.FastMCPSession; exports.GitHubProvider = _chunkENMHHQJFcjs.GitHubProvider; exports.GoogleProvider = _chunkENMHHQJFcjs.GoogleProvider; exports.OAuthProvider = _chunkENMHHQJFcjs.OAuthProvider; exports.ServerState = _chunk3O5ZKWCCcjs.ServerState; exports.SessionError = _chunk3O5ZKWCCcjs.SessionError; exports.UnexpectedStateError = _chunk3O5ZKWCCcjs.UnexpectedStateError; exports.UserError = _chunk3O5ZKWCCcjs.UserError; exports.audioContent = _chunk3O5ZKWCCcjs.audioContent; exports.getAuthSession = _chunkENMHHQJFcjs.getAuthSession; exports.imageContent = _chunk3O5ZKWCCcjs.imageContent; exports.jsonSchemaAdapter = _chunk3O5ZKWCCcjs.jsonSchemaAdapter; exports.requireAll = _chunkENMHHQJFcjs.requireAll; exports.requireAny = _chunkENMHHQJFcjs.requireAny; exports.requireAuth = _chunkENMHHQJFcjs.requireAuth; exports.requireRole = _chunkENMHHQJFcjs.requireRole; exports.requireScopes = _chunkENMHHQJFcjs.requireScopes;
51
51
  //# sourceMappingURL=FastMCP.cjs.map
@@ -12,8 +12,8 @@ import { CorsOptions } from 'mcp-proxy';
12
12
  export { CorsOptions } from 'mcp-proxy';
13
13
  import { StrictEventEmitter } from 'strict-event-emitter-types';
14
14
  import { z } from 'zod';
15
- import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-BNqoBTYA.cjs';
16
- export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-BNqoBTYA.cjs';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-B_E71LUD.cjs';
16
+ export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-B_E71LUD.cjs';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
@@ -21,9 +21,11 @@ declare class DiscoveryDocumentCache {
21
21
  get size(): number;
22
22
  /**
23
23
  * @param options - configuration options
24
+ * @param options.timeoutMs - timeout in miliseconds for the upstream fetch
24
25
  * @param options.ttl - time-to-live in miliseconds
25
26
  */
26
27
  constructor(options?: {
28
+ timeoutMs?: number;
27
29
  ttl?: number;
28
30
  });
29
31
  /**
package/dist/FastMCP.d.ts CHANGED
@@ -12,8 +12,8 @@ import { CorsOptions } from 'mcp-proxy';
12
12
  export { CorsOptions } from 'mcp-proxy';
13
13
  import { StrictEventEmitter } from 'strict-event-emitter-types';
14
14
  import { z } from 'zod';
15
- import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-BNqoBTYA.js';
16
- export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-BNqoBTYA.js';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-B_E71LUD.js';
16
+ export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-B_E71LUD.js';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
@@ -21,9 +21,11 @@ declare class DiscoveryDocumentCache {
21
21
  get size(): number;
22
22
  /**
23
23
  * @param options - configuration options
24
+ * @param options.timeoutMs - timeout in miliseconds for the upstream fetch
24
25
  * @param options.ttl - time-to-live in miliseconds
25
26
  */
26
27
  constructor(options?: {
28
+ timeoutMs?: number;
27
29
  ttl?: number;
28
30
  });
29
31
  /**
package/dist/FastMCP.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  audioContent,
11
11
  imageContent,
12
12
  jsonSchemaAdapter
13
- } from "./chunk-5BQXF2VT.js";
13
+ } from "./chunk-5K4GLQMV.js";
14
14
  import {
15
15
  AuthProvider,
16
16
  AzureProvider,
@@ -23,7 +23,7 @@ import {
23
23
  requireAuth,
24
24
  requireRole,
25
25
  requireScopes
26
- } from "./chunk-PNBJIDG6.js";
26
+ } from "./chunk-2ZFQSPXZ.js";
27
27
  export {
28
28
  AuthProvider,
29
29
  AzureProvider,
@@ -260,6 +260,8 @@ interface OAuthProxyConfig {
260
260
  upstreamClientId: string;
261
261
  /** Pre-registered client secret with upstream provider */
262
262
  upstreamClientSecret: string;
263
+ /** Timeout in milliseconds for upstream token/refresh HTTP requests (default: 10000) */
264
+ upstreamRequestTimeoutMs?: number;
263
265
  /** Upstream provider's token endpoint URL */
264
266
  upstreamTokenEndpoint: string;
265
267
  /** Upstream token endpoint authentication method (default: "client_secret_basic") */
@@ -540,6 +542,13 @@ declare class OAuthProxy {
540
542
  * Combines claims from access token and ID token (if present)
541
543
  */
542
544
  private extractUpstreamClaims;
545
+ /**
546
+ * POST to the upstream token endpoint with a bounded wait.
547
+ *
548
+ * Maps an abort of the configured timeout signal to a clean OAuth error
549
+ * instead of letting the raw `TimeoutError`/`AbortError` propagate.
550
+ */
551
+ private fetchUpstream;
543
552
  /**
544
553
  * Generate authorization code for client
545
554
  */
@@ -260,6 +260,8 @@ interface OAuthProxyConfig {
260
260
  upstreamClientId: string;
261
261
  /** Pre-registered client secret with upstream provider */
262
262
  upstreamClientSecret: string;
263
+ /** Timeout in milliseconds for upstream token/refresh HTTP requests (default: 10000) */
264
+ upstreamRequestTimeoutMs?: number;
263
265
  /** Upstream provider's token endpoint URL */
264
266
  upstreamTokenEndpoint: string;
265
267
  /** Upstream token endpoint authentication method (default: "client_secret_basic") */
@@ -540,6 +542,13 @@ declare class OAuthProxy {
540
542
  * Combines claims from access token and ID token (if present)
541
543
  */
542
544
  private extractUpstreamClaims;
545
+ /**
546
+ * POST to the upstream token endpoint with a bounded wait.
547
+ *
548
+ * Maps an abort of the configured timeout signal to a clean OAuth error
549
+ * instead of letting the raw `TimeoutError`/`AbortError` propagate.
550
+ */
551
+ private fetchUpstream;
543
552
  /**
544
553
  * Generate authorization code for client
545
554
  */
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- var _chunkRAIXP3PScjs = require('../chunk-RAIXP3PS.cjs');
27
+ var _chunkENMHHQJFcjs = require('../chunk-ENMHHQJF.cjs');
28
28
 
29
29
 
30
30
 
@@ -51,5 +51,5 @@ var _chunkRAIXP3PScjs = require('../chunk-RAIXP3PS.cjs');
51
51
 
52
52
 
53
53
 
54
- exports.AuthProvider = _chunkRAIXP3PScjs.AuthProvider; exports.AzureProvider = _chunkRAIXP3PScjs.AzureProvider; exports.ConsentManager = _chunkRAIXP3PScjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunkRAIXP3PScjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunkRAIXP3PScjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunkRAIXP3PScjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunkRAIXP3PScjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunkRAIXP3PScjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunkRAIXP3PScjs.DiskStore; exports.EncryptedTokenStorage = _chunkRAIXP3PScjs.EncryptedTokenStorage; exports.GitHubProvider = _chunkRAIXP3PScjs.GitHubProvider; exports.GoogleProvider = _chunkRAIXP3PScjs.GoogleProvider; exports.JWKSVerifier = _chunkRAIXP3PScjs.JWKSVerifier; exports.JWTIssuer = _chunkRAIXP3PScjs.JWTIssuer; exports.MemoryTokenStorage = _chunkRAIXP3PScjs.MemoryTokenStorage; exports.OAuthProvider = _chunkRAIXP3PScjs.OAuthProvider; exports.OAuthProxy = _chunkRAIXP3PScjs.OAuthProxy; exports.OAuthProxyError = _chunkRAIXP3PScjs.OAuthProxyError; exports.PKCEUtils = _chunkRAIXP3PScjs.PKCEUtils; exports.getAuthSession = _chunkRAIXP3PScjs.getAuthSession; exports.requireAll = _chunkRAIXP3PScjs.requireAll; exports.requireAny = _chunkRAIXP3PScjs.requireAny; exports.requireAuth = _chunkRAIXP3PScjs.requireAuth; exports.requireRole = _chunkRAIXP3PScjs.requireRole; exports.requireScopes = _chunkRAIXP3PScjs.requireScopes;
54
+ exports.AuthProvider = _chunkENMHHQJFcjs.AuthProvider; exports.AzureProvider = _chunkENMHHQJFcjs.AzureProvider; exports.ConsentManager = _chunkENMHHQJFcjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunkENMHHQJFcjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunkENMHHQJFcjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunkENMHHQJFcjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunkENMHHQJFcjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunkENMHHQJFcjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunkENMHHQJFcjs.DiskStore; exports.EncryptedTokenStorage = _chunkENMHHQJFcjs.EncryptedTokenStorage; exports.GitHubProvider = _chunkENMHHQJFcjs.GitHubProvider; exports.GoogleProvider = _chunkENMHHQJFcjs.GoogleProvider; exports.JWKSVerifier = _chunkENMHHQJFcjs.JWKSVerifier; exports.JWTIssuer = _chunkENMHHQJFcjs.JWTIssuer; exports.MemoryTokenStorage = _chunkENMHHQJFcjs.MemoryTokenStorage; exports.OAuthProvider = _chunkENMHHQJFcjs.OAuthProvider; exports.OAuthProxy = _chunkENMHHQJFcjs.OAuthProxy; exports.OAuthProxyError = _chunkENMHHQJFcjs.OAuthProxyError; exports.PKCEUtils = _chunkENMHHQJFcjs.PKCEUtils; exports.getAuthSession = _chunkENMHHQJFcjs.getAuthSession; exports.requireAll = _chunkENMHHQJFcjs.requireAll; exports.requireAny = _chunkENMHHQJFcjs.requireAny; exports.requireAuth = _chunkENMHHQJFcjs.requireAuth; exports.requireRole = _chunkENMHHQJFcjs.requireRole; exports.requireScopes = _chunkENMHHQJFcjs.requireScopes;
55
55
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-BNqoBTYA.cjs';
2
- export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-BNqoBTYA.cjs';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-B_E71LUD.cjs';
2
+ export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-B_E71LUD.cjs';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-BNqoBTYA.js';
2
- export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-BNqoBTYA.js';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-B_E71LUD.js';
2
+ export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-B_E71LUD.js';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -24,7 +24,7 @@ import {
24
24
  requireAuth,
25
25
  requireRole,
26
26
  requireScopes
27
- } from "../chunk-PNBJIDG6.js";
27
+ } from "../chunk-2ZFQSPXZ.js";
28
28
  export {
29
29
  AuthProvider,
30
30
  AzureProvider,
@@ -274,6 +274,7 @@ var DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = 31536e3;
274
274
  var DEFAULT_REFRESH_TOKEN_TTL = 2592e3;
275
275
  var DEFAULT_AUTHORIZATION_CODE_TTL = 300;
276
276
  var DEFAULT_TRANSACTION_TTL = 600;
277
+ var DEFAULT_UPSTREAM_REQUEST_TIMEOUT_MS = 1e4;
277
278
 
278
279
  // src/auth/utils/claimsExtractor.ts
279
280
  var ClaimsExtractor = class {
@@ -1151,6 +1152,7 @@ var OAuthProxy = class {
1151
1152
  // Enabled by default for security
1152
1153
  redirectPath: "/oauth/callback",
1153
1154
  transactionTtl: DEFAULT_TRANSACTION_TTL,
1155
+ upstreamRequestTimeoutMs: DEFAULT_UPSTREAM_REQUEST_TIMEOUT_MS,
1154
1156
  upstreamTokenEndpointAuthMethod: "client_secret_basic",
1155
1157
  ...config
1156
1158
  };
@@ -1595,11 +1597,7 @@ var OAuthProxy = class {
1595
1597
  if (useBasicAuth) {
1596
1598
  headers["Authorization"] = this.getBasicAuthHeader();
1597
1599
  }
1598
- const tokenResponse = await fetch(this.config.upstreamTokenEndpoint, {
1599
- body: new URLSearchParams(bodyParams),
1600
- headers,
1601
- method: "POST"
1602
- });
1600
+ const tokenResponse = await this.fetchUpstream(bodyParams, headers);
1603
1601
  if (!tokenResponse.ok) {
1604
1602
  let errorCode = "server_error";
1605
1603
  let errorDescription;
@@ -1668,6 +1666,31 @@ var OAuthProxy = class {
1668
1666
  }
1669
1667
  return Object.keys(allClaims).length > 0 ? allClaims : null;
1670
1668
  }
1669
+ /**
1670
+ * POST to the upstream token endpoint with a bounded wait.
1671
+ *
1672
+ * Maps an abort of the configured timeout signal to a clean OAuth error
1673
+ * instead of letting the raw `TimeoutError`/`AbortError` propagate.
1674
+ */
1675
+ async fetchUpstream(bodyParams, headers) {
1676
+ let tokenResponse;
1677
+ try {
1678
+ tokenResponse = await fetch(this.config.upstreamTokenEndpoint, {
1679
+ body: new URLSearchParams(bodyParams),
1680
+ headers,
1681
+ method: "POST",
1682
+ signal: AbortSignal.timeout(
1683
+ this.config.upstreamRequestTimeoutMs ?? DEFAULT_UPSTREAM_REQUEST_TIMEOUT_MS
1684
+ )
1685
+ });
1686
+ } catch (error) {
1687
+ if (error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError")) {
1688
+ throw new OAuthProxyError("server_error", "Upstream request timed out");
1689
+ }
1690
+ throw error;
1691
+ }
1692
+ return tokenResponse;
1693
+ }
1671
1694
  /**
1672
1695
  * Generate authorization code for client
1673
1696
  */
@@ -1738,11 +1761,7 @@ var OAuthProxy = class {
1738
1761
  if (useBasicAuth) {
1739
1762
  headers["Authorization"] = this.getBasicAuthHeader();
1740
1763
  }
1741
- const tokenResponse = await fetch(this.config.upstreamTokenEndpoint, {
1742
- body: new URLSearchParams(bodyParams),
1743
- headers,
1744
- method: "POST"
1745
- });
1764
+ const tokenResponse = await this.fetchUpstream(bodyParams, headers);
1746
1765
  if (!tokenResponse.ok) {
1747
1766
  let errorCode = "invalid_grant";
1748
1767
  let errorDescription;
@@ -2064,11 +2083,7 @@ var OAuthProxy = class {
2064
2083
  if (useBasicAuth) {
2065
2084
  headers["Authorization"] = this.getBasicAuthHeader();
2066
2085
  }
2067
- const tokenResponse = await fetch(this.config.upstreamTokenEndpoint, {
2068
- body: new URLSearchParams(bodyParams),
2069
- headers,
2070
- method: "POST"
2071
- });
2086
+ const tokenResponse = await this.fetchUpstream(bodyParams, headers);
2072
2087
  if (!tokenResponse.ok) {
2073
2088
  let errorCode = "invalid_grant";
2074
2089
  let errorDescription = "Upstream refresh failed";
@@ -2623,15 +2638,15 @@ var JWKSVerifier = class {
2623
2638
  verifyOptions
2624
2639
  );
2625
2640
  const claims = {
2641
+ ...payload,
2642
+ // Include all other claims
2626
2643
  aud: payload.aud,
2627
2644
  client_id: payload.client_id || payload.sub,
2628
2645
  exp: payload.exp,
2629
2646
  iat: payload.iat,
2630
2647
  iss: payload.iss,
2631
2648
  jti: payload.jti || "",
2632
- scope: this.parseScope(payload.scope),
2633
- ...payload
2634
- // Include all other claims
2649
+ scope: this.parseScope(payload.scope)
2635
2650
  };
2636
2651
  return {
2637
2652
  claims,
@@ -2718,4 +2733,4 @@ export {
2718
2733
  DiskStore,
2719
2734
  JWKSVerifier
2720
2735
  };
2721
- //# sourceMappingURL=chunk-PNBJIDG6.js.map
2736
+ //# sourceMappingURL=chunk-2ZFQSPXZ.js.map