fastmcp 4.23.11 → 4.23.12

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
@@ -11,7 +11,7 @@
11
11
 
12
12
 
13
13
 
14
- var _chunkX5ITW7FVcjs = require('./chunk-X5ITW7FV.cjs');
14
+ var _chunk4P2GDM7Wcjs = require('./chunk-4P2GDM7W.cjs');
15
15
 
16
16
 
17
17
 
@@ -24,7 +24,7 @@ var _chunkX5ITW7FVcjs = require('./chunk-X5ITW7FV.cjs');
24
24
 
25
25
 
26
26
 
27
- var _chunk4OWHPJELcjs = require('./chunk-4OWHPJEL.cjs');
27
+ var _chunkBV4PWTT6cjs = require('./chunk-BV4PWTT6.cjs');
28
28
  require('./chunk-6TDYSPLC.cjs');
29
29
 
30
30
 
@@ -50,5 +50,5 @@ require('./chunk-6TDYSPLC.cjs');
50
50
 
51
51
 
52
52
 
53
- exports.AuthProvider = _chunk4OWHPJELcjs.AuthProvider; exports.AzureProvider = _chunk4OWHPJELcjs.AzureProvider; exports.DiscoveryDocumentCache = _chunkX5ITW7FVcjs.DiscoveryDocumentCache; exports.FastMCP = _chunkX5ITW7FVcjs.FastMCP; exports.FastMCPError = _chunkX5ITW7FVcjs.FastMCPError; exports.FastMCPSession = _chunkX5ITW7FVcjs.FastMCPSession; exports.GitHubProvider = _chunk4OWHPJELcjs.GitHubProvider; exports.GoogleProvider = _chunk4OWHPJELcjs.GoogleProvider; exports.MEDIA_FETCH_TIMEOUT_MS = _chunkX5ITW7FVcjs.MEDIA_FETCH_TIMEOUT_MS; exports.OAuthProvider = _chunk4OWHPJELcjs.OAuthProvider; exports.ServerState = _chunkX5ITW7FVcjs.ServerState; exports.SessionError = _chunkX5ITW7FVcjs.SessionError; exports.UnexpectedStateError = _chunkX5ITW7FVcjs.UnexpectedStateError; exports.UserError = _chunkX5ITW7FVcjs.UserError; exports.audioContent = _chunkX5ITW7FVcjs.audioContent; exports.getAuthSession = _chunk4OWHPJELcjs.getAuthSession; exports.imageContent = _chunkX5ITW7FVcjs.imageContent; exports.jsonSchemaAdapter = _chunkX5ITW7FVcjs.jsonSchemaAdapter; exports.requireAll = _chunk4OWHPJELcjs.requireAll; exports.requireAny = _chunk4OWHPJELcjs.requireAny; exports.requireAuth = _chunk4OWHPJELcjs.requireAuth; exports.requireRole = _chunk4OWHPJELcjs.requireRole; exports.requireScopes = _chunk4OWHPJELcjs.requireScopes;
53
+ exports.AuthProvider = _chunkBV4PWTT6cjs.AuthProvider; exports.AzureProvider = _chunkBV4PWTT6cjs.AzureProvider; exports.DiscoveryDocumentCache = _chunk4P2GDM7Wcjs.DiscoveryDocumentCache; exports.FastMCP = _chunk4P2GDM7Wcjs.FastMCP; exports.FastMCPError = _chunk4P2GDM7Wcjs.FastMCPError; exports.FastMCPSession = _chunk4P2GDM7Wcjs.FastMCPSession; exports.GitHubProvider = _chunkBV4PWTT6cjs.GitHubProvider; exports.GoogleProvider = _chunkBV4PWTT6cjs.GoogleProvider; exports.MEDIA_FETCH_TIMEOUT_MS = _chunk4P2GDM7Wcjs.MEDIA_FETCH_TIMEOUT_MS; exports.OAuthProvider = _chunkBV4PWTT6cjs.OAuthProvider; exports.ServerState = _chunk4P2GDM7Wcjs.ServerState; exports.SessionError = _chunk4P2GDM7Wcjs.SessionError; exports.UnexpectedStateError = _chunk4P2GDM7Wcjs.UnexpectedStateError; exports.UserError = _chunk4P2GDM7Wcjs.UserError; exports.audioContent = _chunk4P2GDM7Wcjs.audioContent; exports.getAuthSession = _chunkBV4PWTT6cjs.getAuthSession; exports.imageContent = _chunk4P2GDM7Wcjs.imageContent; exports.jsonSchemaAdapter = _chunk4P2GDM7Wcjs.jsonSchemaAdapter; exports.requireAll = _chunkBV4PWTT6cjs.requireAll; exports.requireAny = _chunkBV4PWTT6cjs.requireAny; exports.requireAuth = _chunkBV4PWTT6cjs.requireAuth; exports.requireRole = _chunkBV4PWTT6cjs.requireRole; exports.requireScopes = _chunkBV4PWTT6cjs.requireScopes;
54
54
  //# 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-BcDb5bOz.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-BcDb5bOz.cjs';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-84BWWDBF.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-84BWWDBF.cjs';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
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-BcDb5bOz.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-BcDb5bOz.js';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-84BWWDBF.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-84BWWDBF.js';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
package/dist/FastMCP.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  audioContent,
12
12
  imageContent,
13
13
  jsonSchemaAdapter
14
- } from "./chunk-XUUJOVC7.js";
14
+ } from "./chunk-ULNQF5KG.js";
15
15
  import {
16
16
  AuthProvider,
17
17
  AzureProvider,
@@ -24,7 +24,7 @@ import {
24
24
  requireAuth,
25
25
  requireRole,
26
26
  requireScopes
27
- } from "./chunk-G44SPVP7.js";
27
+ } from "./chunk-CAQLTSJ5.js";
28
28
  import "./chunk-OKKFL2M4.js";
29
29
  export {
30
30
  AuthProvider,
@@ -10,6 +10,11 @@ import { IncomingMessage } from 'node:http';
10
10
  declare const DEFAULT_ACCESS_TOKEN_TTL = 3600;
11
11
  declare const DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = 31536000;
12
12
  declare const DEFAULT_REFRESH_TOKEN_TTL = 2592000;
13
+ /**
14
+ * The token endpoint authentication methods the proxy can verify, and so the
15
+ * only ones a client may register with.
16
+ */
17
+ declare const TOKEN_ENDPOINT_AUTH_METHODS: readonly ["client_secret_basic", "client_secret_post", "none"];
13
18
  declare const DEFAULT_AUTHORIZATION_CODE_TTL = 300;
14
19
  declare const DEFAULT_TRANSACTION_TTL = 600;
15
20
  /**
@@ -368,6 +373,17 @@ interface ProxyDCRClient {
368
373
  * Absent for a Dynamic Client Registration.
369
374
  */
370
375
  source?: "cimd";
376
+ /**
377
+ * How the client authenticates at the token endpoint, as it registered.
378
+ * `"none"` is a public client: it is issued no secret and must use S256
379
+ * PKCE. Either secret method obliges it to authenticate on every token
380
+ * request.
381
+ *
382
+ * Absent on registrations written before this was recorded, when every
383
+ * client was issued a secret whatever it asked for. Those are treated as
384
+ * public clients that may still authenticate with that secret.
385
+ */
386
+ tokenEndpointAuthMethod?: TokenEndpointAuthMethod;
371
387
  }
372
388
  /**
373
389
  * OAuth refresh token request
@@ -379,11 +395,23 @@ interface RefreshRequest {
379
395
  refresh_token: string;
380
396
  scope?: string;
381
397
  }
398
+ /**
399
+ * Token endpoint authentication methods a Dynamic Client Registration may ask
400
+ * for (RFC 7591 §2).
401
+ */
402
+ type TokenEndpointAuthMethod = (typeof TOKEN_ENDPOINT_AUTH_METHODS)[number];
382
403
  /**
383
404
  * Token mapping for JWT swap pattern
384
405
  * Maps JTI to upstream token reference
385
406
  */
386
407
  interface TokenMapping {
408
+ /**
409
+ * Whether the client authenticated with its secret when this token was
410
+ * issued. A refresh token issued that way is only redeemed by a client that
411
+ * authenticates again; otherwise omitting the secret would turn it back into
412
+ * a bearer token.
413
+ */
414
+ clientAuthenticated?: boolean;
387
415
  /** Client ID */
388
416
  clientId: string;
389
417
  /** Creation timestamp */
@@ -581,6 +609,20 @@ declare class OAuthProxy {
581
609
  * RFC 7591 Dynamic Client Registration
582
610
  */
583
611
  registerClient(request: DCRRequest): Promise<DCRResponse>;
612
+ /**
613
+ * RFC 6749 §2.3 / §3.2.1: identify the client behind a token request and,
614
+ * when it presents a secret, authenticate it.
615
+ *
616
+ * A client registered with a secret method must present its secret. A
617
+ * public client must not present one: it was issued none. A registration
618
+ * that predates recorded auth methods may do either — it was issued a
619
+ * secret whatever it asked for — and is treated as unauthenticated when it
620
+ * leaves it out, which the grants then hold it to.
621
+ *
622
+ * Throws `invalid_client` on any failure. Nothing here touches grant state,
623
+ * so a caller that fails cannot spend a code or refresh token.
624
+ */
625
+ private authenticateClient;
584
626
  /**
585
627
  * Calculate access token TTL from upstream tokens
586
628
  */
@@ -669,6 +711,12 @@ declare class OAuthProxy {
669
711
  * GitHub Apps return URL-encoded format, most providers return JSON
670
712
  */
671
713
  private parseTokenResponse;
714
+ /**
715
+ * Storage key for the client binding of a passthrough-mode upstream refresh
716
+ * token. Keyed by its hash: storage keys are not encrypted, and the token
717
+ * itself is a live upstream credential.
718
+ */
719
+ private passthroughRefreshKey;
672
720
  /**
673
721
  * Redirect to upstream OAuth provider
674
722
  */
@@ -698,6 +746,12 @@ declare class OAuthProxy {
698
746
  * `expiresAt`.
699
747
  */
700
748
  private restoreMapping;
749
+ /**
750
+ * Record which client a passthrough-mode upstream refresh token was handed
751
+ * to. It lives as long as the upstream says the token does, or as the
752
+ * configured refresh-token lifetime when it does not say.
753
+ */
754
+ private savePassthroughRefreshBinding;
701
755
  /**
702
756
  * Start periodic cleanup of expired transactions and codes
703
757
  */
@@ -990,4 +1044,4 @@ declare class OAuthProvider<TSession extends OAuthSession = OAuthSession> extend
990
1044
  protected getTokenEndpoint(): string;
991
1045
  }
992
1046
 
993
- export { AuthProvider as A, type DCRClientMetadata as B, type ConsentData as C, DEFAULT_ACCESS_TOKEN_TTL as D, type DCRRequest as E, type DCRResponse as F, GitHubProvider as G, type OAuthError as H, type OAuthProviderConfig as I, type OAuthProxyConfig as J, type ProxyDCRClient as K, type TokenMapping as L, type TokenRequest as M, type TokenResponse as N, type OAuthSession as O, type PKCEPair as P, type RefreshRequest as R, type TokenStorage as T, type UpstreamTokenSet as U, OAuthProxy as a, AzureProvider as b, GoogleProvider as c, OAuthProvider as d, requireAny as e, requireAuth as f, getAuthSession as g, requireRole as h, requireScopes as i, type AuthProviderConfig as j, type AzureProviderConfig as k, type AzureSession as l, type GenericOAuthProviderConfig as m, type GitHubSession as n, type GoogleSession as o, type OAuthTransaction as p, type TokenVerifier as q, requireAll as r, type TokenVerificationResult as s, OAuthProxyError as t, DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH as u, DEFAULT_AUTHORIZATION_CODE_TTL as v, DEFAULT_REFRESH_TOKEN_TTL as w, DEFAULT_TRANSACTION_TTL as x, type AuthorizationParams as y, type ClientCode as z };
1047
+ export { AuthProvider as A, type ClientCode as B, type ConsentData as C, DEFAULT_ACCESS_TOKEN_TTL as D, type DCRClientMetadata as E, type DCRRequest as F, GitHubProvider as G, type DCRResponse as H, type OAuthError as I, type OAuthProviderConfig as J, type OAuthProxyConfig as K, type ProxyDCRClient as L, type TokenEndpointAuthMethod as M, type TokenMapping as N, type OAuthSession as O, type PKCEPair as P, type TokenRequest as Q, type RefreshRequest as R, type TokenResponse as S, type TokenStorage as T, type UpstreamTokenSet as U, OAuthProxy as a, AzureProvider as b, GoogleProvider as c, OAuthProvider as d, requireAny as e, requireAuth as f, getAuthSession as g, requireRole as h, requireScopes as i, type AuthProviderConfig as j, type AzureProviderConfig as k, type AzureSession as l, type GenericOAuthProviderConfig as m, type GitHubSession as n, type GoogleSession as o, type OAuthTransaction as p, type TokenVerifier as q, requireAll as r, type TokenVerificationResult as s, OAuthProxyError as t, DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH as u, DEFAULT_AUTHORIZATION_CODE_TTL as v, DEFAULT_REFRESH_TOKEN_TTL as w, DEFAULT_TRANSACTION_TTL as x, TOKEN_ENDPOINT_AUTH_METHODS as y, type AuthorizationParams as z };
@@ -10,6 +10,11 @@ import { IncomingMessage } from 'node:http';
10
10
  declare const DEFAULT_ACCESS_TOKEN_TTL = 3600;
11
11
  declare const DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = 31536000;
12
12
  declare const DEFAULT_REFRESH_TOKEN_TTL = 2592000;
13
+ /**
14
+ * The token endpoint authentication methods the proxy can verify, and so the
15
+ * only ones a client may register with.
16
+ */
17
+ declare const TOKEN_ENDPOINT_AUTH_METHODS: readonly ["client_secret_basic", "client_secret_post", "none"];
13
18
  declare const DEFAULT_AUTHORIZATION_CODE_TTL = 300;
14
19
  declare const DEFAULT_TRANSACTION_TTL = 600;
15
20
  /**
@@ -368,6 +373,17 @@ interface ProxyDCRClient {
368
373
  * Absent for a Dynamic Client Registration.
369
374
  */
370
375
  source?: "cimd";
376
+ /**
377
+ * How the client authenticates at the token endpoint, as it registered.
378
+ * `"none"` is a public client: it is issued no secret and must use S256
379
+ * PKCE. Either secret method obliges it to authenticate on every token
380
+ * request.
381
+ *
382
+ * Absent on registrations written before this was recorded, when every
383
+ * client was issued a secret whatever it asked for. Those are treated as
384
+ * public clients that may still authenticate with that secret.
385
+ */
386
+ tokenEndpointAuthMethod?: TokenEndpointAuthMethod;
371
387
  }
372
388
  /**
373
389
  * OAuth refresh token request
@@ -379,11 +395,23 @@ interface RefreshRequest {
379
395
  refresh_token: string;
380
396
  scope?: string;
381
397
  }
398
+ /**
399
+ * Token endpoint authentication methods a Dynamic Client Registration may ask
400
+ * for (RFC 7591 §2).
401
+ */
402
+ type TokenEndpointAuthMethod = (typeof TOKEN_ENDPOINT_AUTH_METHODS)[number];
382
403
  /**
383
404
  * Token mapping for JWT swap pattern
384
405
  * Maps JTI to upstream token reference
385
406
  */
386
407
  interface TokenMapping {
408
+ /**
409
+ * Whether the client authenticated with its secret when this token was
410
+ * issued. A refresh token issued that way is only redeemed by a client that
411
+ * authenticates again; otherwise omitting the secret would turn it back into
412
+ * a bearer token.
413
+ */
414
+ clientAuthenticated?: boolean;
387
415
  /** Client ID */
388
416
  clientId: string;
389
417
  /** Creation timestamp */
@@ -581,6 +609,20 @@ declare class OAuthProxy {
581
609
  * RFC 7591 Dynamic Client Registration
582
610
  */
583
611
  registerClient(request: DCRRequest): Promise<DCRResponse>;
612
+ /**
613
+ * RFC 6749 §2.3 / §3.2.1: identify the client behind a token request and,
614
+ * when it presents a secret, authenticate it.
615
+ *
616
+ * A client registered with a secret method must present its secret. A
617
+ * public client must not present one: it was issued none. A registration
618
+ * that predates recorded auth methods may do either — it was issued a
619
+ * secret whatever it asked for — and is treated as unauthenticated when it
620
+ * leaves it out, which the grants then hold it to.
621
+ *
622
+ * Throws `invalid_client` on any failure. Nothing here touches grant state,
623
+ * so a caller that fails cannot spend a code or refresh token.
624
+ */
625
+ private authenticateClient;
584
626
  /**
585
627
  * Calculate access token TTL from upstream tokens
586
628
  */
@@ -669,6 +711,12 @@ declare class OAuthProxy {
669
711
  * GitHub Apps return URL-encoded format, most providers return JSON
670
712
  */
671
713
  private parseTokenResponse;
714
+ /**
715
+ * Storage key for the client binding of a passthrough-mode upstream refresh
716
+ * token. Keyed by its hash: storage keys are not encrypted, and the token
717
+ * itself is a live upstream credential.
718
+ */
719
+ private passthroughRefreshKey;
672
720
  /**
673
721
  * Redirect to upstream OAuth provider
674
722
  */
@@ -698,6 +746,12 @@ declare class OAuthProxy {
698
746
  * `expiresAt`.
699
747
  */
700
748
  private restoreMapping;
749
+ /**
750
+ * Record which client a passthrough-mode upstream refresh token was handed
751
+ * to. It lives as long as the upstream says the token does, or as the
752
+ * configured refresh-token lifetime when it does not say.
753
+ */
754
+ private savePassthroughRefreshBinding;
701
755
  /**
702
756
  * Start periodic cleanup of expired transactions and codes
703
757
  */
@@ -990,4 +1044,4 @@ declare class OAuthProvider<TSession extends OAuthSession = OAuthSession> extend
990
1044
  protected getTokenEndpoint(): string;
991
1045
  }
992
1046
 
993
- export { AuthProvider as A, type DCRClientMetadata as B, type ConsentData as C, DEFAULT_ACCESS_TOKEN_TTL as D, type DCRRequest as E, type DCRResponse as F, GitHubProvider as G, type OAuthError as H, type OAuthProviderConfig as I, type OAuthProxyConfig as J, type ProxyDCRClient as K, type TokenMapping as L, type TokenRequest as M, type TokenResponse as N, type OAuthSession as O, type PKCEPair as P, type RefreshRequest as R, type TokenStorage as T, type UpstreamTokenSet as U, OAuthProxy as a, AzureProvider as b, GoogleProvider as c, OAuthProvider as d, requireAny as e, requireAuth as f, getAuthSession as g, requireRole as h, requireScopes as i, type AuthProviderConfig as j, type AzureProviderConfig as k, type AzureSession as l, type GenericOAuthProviderConfig as m, type GitHubSession as n, type GoogleSession as o, type OAuthTransaction as p, type TokenVerifier as q, requireAll as r, type TokenVerificationResult as s, OAuthProxyError as t, DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH as u, DEFAULT_AUTHORIZATION_CODE_TTL as v, DEFAULT_REFRESH_TOKEN_TTL as w, DEFAULT_TRANSACTION_TTL as x, type AuthorizationParams as y, type ClientCode as z };
1047
+ export { AuthProvider as A, type ClientCode as B, type ConsentData as C, DEFAULT_ACCESS_TOKEN_TTL as D, type DCRClientMetadata as E, type DCRRequest as F, GitHubProvider as G, type DCRResponse as H, type OAuthError as I, type OAuthProviderConfig as J, type OAuthProxyConfig as K, type ProxyDCRClient as L, type TokenEndpointAuthMethod as M, type TokenMapping as N, type OAuthSession as O, type PKCEPair as P, type TokenRequest as Q, type RefreshRequest as R, type TokenResponse as S, type TokenStorage as T, type UpstreamTokenSet as U, OAuthProxy as a, AzureProvider as b, GoogleProvider as c, OAuthProvider as d, requireAny as e, requireAuth as f, getAuthSession as g, requireRole as h, requireScopes as i, type AuthProviderConfig as j, type AzureProviderConfig as k, type AzureSession as l, type GenericOAuthProviderConfig as m, type GitHubSession as n, type GoogleSession as o, type OAuthTransaction as p, type TokenVerifier as q, requireAll as r, type TokenVerificationResult as s, OAuthProxyError as t, DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH as u, DEFAULT_AUTHORIZATION_CODE_TTL as v, DEFAULT_REFRESH_TOKEN_TTL as w, DEFAULT_TRANSACTION_TTL as x, TOKEN_ENDPOINT_AUTH_METHODS as y, type AuthorizationParams as z };
@@ -24,8 +24,8 @@
24
24
 
25
25
 
26
26
 
27
- var _chunk4OWHPJELcjs = require('../chunk-4OWHPJEL.cjs');
28
27
 
28
+ var _chunkBV4PWTT6cjs = require('../chunk-BV4PWTT6.cjs');
29
29
 
30
30
 
31
31
 
@@ -51,5 +51,7 @@ var _chunk4OWHPJELcjs = require('../chunk-4OWHPJEL.cjs');
51
51
 
52
52
 
53
53
 
54
- exports.AuthProvider = _chunk4OWHPJELcjs.AuthProvider; exports.AzureProvider = _chunk4OWHPJELcjs.AzureProvider; exports.ConsentManager = _chunk4OWHPJELcjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunk4OWHPJELcjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunk4OWHPJELcjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunk4OWHPJELcjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunk4OWHPJELcjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunk4OWHPJELcjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunk4OWHPJELcjs.DiskStore; exports.EncryptedTokenStorage = _chunk4OWHPJELcjs.EncryptedTokenStorage; exports.GitHubProvider = _chunk4OWHPJELcjs.GitHubProvider; exports.GoogleProvider = _chunk4OWHPJELcjs.GoogleProvider; exports.JWKSVerifier = _chunk4OWHPJELcjs.JWKSVerifier; exports.JWTIssuer = _chunk4OWHPJELcjs.JWTIssuer; exports.MemoryTokenStorage = _chunk4OWHPJELcjs.MemoryTokenStorage; exports.OAuthProvider = _chunk4OWHPJELcjs.OAuthProvider; exports.OAuthProxy = _chunk4OWHPJELcjs.OAuthProxy; exports.OAuthProxyError = _chunk4OWHPJELcjs.OAuthProxyError; exports.PKCEUtils = _chunk4OWHPJELcjs.PKCEUtils; exports.getAuthSession = _chunk4OWHPJELcjs.getAuthSession; exports.requireAll = _chunk4OWHPJELcjs.requireAll; exports.requireAny = _chunk4OWHPJELcjs.requireAny; exports.requireAuth = _chunk4OWHPJELcjs.requireAuth; exports.requireRole = _chunk4OWHPJELcjs.requireRole; exports.requireScopes = _chunk4OWHPJELcjs.requireScopes;
54
+
55
+
56
+ exports.AuthProvider = _chunkBV4PWTT6cjs.AuthProvider; exports.AzureProvider = _chunkBV4PWTT6cjs.AzureProvider; exports.ConsentManager = _chunkBV4PWTT6cjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunkBV4PWTT6cjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunkBV4PWTT6cjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunkBV4PWTT6cjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunkBV4PWTT6cjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunkBV4PWTT6cjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunkBV4PWTT6cjs.DiskStore; exports.EncryptedTokenStorage = _chunkBV4PWTT6cjs.EncryptedTokenStorage; exports.GitHubProvider = _chunkBV4PWTT6cjs.GitHubProvider; exports.GoogleProvider = _chunkBV4PWTT6cjs.GoogleProvider; exports.JWKSVerifier = _chunkBV4PWTT6cjs.JWKSVerifier; exports.JWTIssuer = _chunkBV4PWTT6cjs.JWTIssuer; exports.MemoryTokenStorage = _chunkBV4PWTT6cjs.MemoryTokenStorage; exports.OAuthProvider = _chunkBV4PWTT6cjs.OAuthProvider; exports.OAuthProxy = _chunkBV4PWTT6cjs.OAuthProxy; exports.OAuthProxyError = _chunkBV4PWTT6cjs.OAuthProxyError; exports.PKCEUtils = _chunkBV4PWTT6cjs.PKCEUtils; exports.TOKEN_ENDPOINT_AUTH_METHODS = _chunkBV4PWTT6cjs.TOKEN_ENDPOINT_AUTH_METHODS; exports.getAuthSession = _chunkBV4PWTT6cjs.getAuthSession; exports.requireAll = _chunkBV4PWTT6cjs.requireAll; exports.requireAny = _chunkBV4PWTT6cjs.requireAny; exports.requireAuth = _chunkBV4PWTT6cjs.requireAuth; exports.requireRole = _chunkBV4PWTT6cjs.requireRole; exports.requireScopes = _chunkBV4PWTT6cjs.requireScopes;
55
57
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/fastmcp/fastmcp/dist/auth/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,ghDAAC","file":"/home/runner/work/fastmcp/fastmcp/dist/auth/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/fastmcp/fastmcp/dist/auth/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qmDAAC","file":"/home/runner/work/fastmcp/fastmcp/dist/auth/index.cjs"}
@@ -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-BcDb5bOz.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-BcDb5bOz.cjs';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-84BWWDBF.cjs';
2
+ export { A as AuthProvider, j as AuthProviderConfig, z as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, B as ClientCode, E as DCRClientMetadata, F as DCRRequest, H 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, I as OAuthError, d as OAuthProvider, J as OAuthProviderConfig, a as OAuthProxy, K as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, L as ProxyDCRClient, R as RefreshRequest, y as TOKEN_ENDPOINT_AUTH_METHODS, M as TokenEndpointAuthMethod, N as TokenMapping, Q as TokenRequest, S 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-84BWWDBF.cjs';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -150,6 +150,14 @@ interface JWTClaims {
150
150
  jti: string;
151
151
  /** Scopes */
152
152
  scope: string[];
153
+ /**
154
+ * Which kind of token this is. Access and refresh tokens share a signing
155
+ * key, audience and claim set, so without this either one verifies as the
156
+ * other: an access token — sent on every request — could be redeemed for a
157
+ * refresh token, and a refresh token presented as a bearer credential.
158
+ * Absent from tokens issued before it existed; those are refused as both.
159
+ */
160
+ token_use?: "access" | "refresh";
153
161
  }
154
162
  /**
155
163
  * JWT Issuer configuration
@@ -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-BcDb5bOz.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-BcDb5bOz.js';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-84BWWDBF.js';
2
+ export { A as AuthProvider, j as AuthProviderConfig, z as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, B as ClientCode, E as DCRClientMetadata, F as DCRRequest, H 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, I as OAuthError, d as OAuthProvider, J as OAuthProviderConfig, a as OAuthProxy, K as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, L as ProxyDCRClient, R as RefreshRequest, y as TOKEN_ENDPOINT_AUTH_METHODS, M as TokenEndpointAuthMethod, N as TokenMapping, Q as TokenRequest, S 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-84BWWDBF.js';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -150,6 +150,14 @@ interface JWTClaims {
150
150
  jti: string;
151
151
  /** Scopes */
152
152
  scope: string[];
153
+ /**
154
+ * Which kind of token this is. Access and refresh tokens share a signing
155
+ * key, audience and claim set, so without this either one verifies as the
156
+ * other: an access token — sent on every request — could be redeemed for a
157
+ * refresh token, and a refresh token presented as a bearer credential.
158
+ * Absent from tokens issued before it existed; those are refused as both.
159
+ */
160
+ token_use?: "access" | "refresh";
153
161
  }
154
162
  /**
155
163
  * JWT Issuer configuration
@@ -18,13 +18,14 @@ import {
18
18
  OAuthProxy,
19
19
  OAuthProxyError,
20
20
  PKCEUtils,
21
+ TOKEN_ENDPOINT_AUTH_METHODS,
21
22
  getAuthSession,
22
23
  requireAll,
23
24
  requireAny,
24
25
  requireAuth,
25
26
  requireRole,
26
27
  requireScopes
27
- } from "../chunk-G44SPVP7.js";
28
+ } from "../chunk-CAQLTSJ5.js";
28
29
  export {
29
30
  AuthProvider,
30
31
  AzureProvider,
@@ -45,6 +46,7 @@ export {
45
46
  OAuthProxy,
46
47
  OAuthProxyError,
47
48
  PKCEUtils,
49
+ TOKEN_ENDPOINT_AUTH_METHODS,
48
50
  getAuthSession,
49
51
  requireAll,
50
52
  requireAny,
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunk4OWHPJELcjs = require('./chunk-4OWHPJEL.cjs');
3
+ var _chunkBV4PWTT6cjs = require('./chunk-BV4PWTT6.cjs');
4
4
 
5
5
 
6
6
 
@@ -141,7 +141,7 @@ var DiscoveryDocumentCache = class {
141
141
  throw error;
142
142
  }
143
143
  if (!res.ok) {
144
- await _chunk4OWHPJELcjs.cancelResponseBody.call(void 0, res);
144
+ await _chunkBV4PWTT6cjs.cancelResponseBody.call(void 0, res);
145
145
  throw new Error(
146
146
  `Failed to fetch discovery document from ${url}: ${res.status} ${res.statusText}`
147
147
  );
@@ -258,7 +258,7 @@ var imageContent = async (input) => {
258
258
  signal: AbortSignal.timeout(timeoutMs)
259
259
  });
260
260
  if (!response.ok) {
261
- await _chunk4OWHPJELcjs.cancelResponseBody.call(void 0, response);
261
+ await _chunkBV4PWTT6cjs.cancelResponseBody.call(void 0, response);
262
262
  throw new Error(
263
263
  `Server responded with status: ${response.status} - ${response.statusText}`
264
264
  );
@@ -340,7 +340,7 @@ var audioContent = async (input) => {
340
340
  signal: AbortSignal.timeout(timeoutMs)
341
341
  });
342
342
  if (!response.ok) {
343
- await _chunk4OWHPJELcjs.cancelResponseBody.call(void 0, response);
343
+ await _chunkBV4PWTT6cjs.cancelResponseBody.call(void 0, response);
344
344
  throw new Error(
345
345
  `Server responded with status: ${response.status} - ${response.statusText}`
346
346
  );
@@ -1914,15 +1914,20 @@ function normalizePath(path) {
1914
1914
  return path.startsWith("/") ? path : `/${path}`;
1915
1915
  }
1916
1916
  function parseBasicAuthHeader(authHeader) {
1917
- const basicMatch = _optionalChain([authHeader, 'optionalAccess', _66 => _66.match, 'call', _67 => _67(/^Basic\s+(.+)$/)]);
1917
+ const basicMatch = _optionalChain([authHeader, 'optionalAccess', _66 => _66.match, 'call', _67 => _67(/^Basic\s+(.*)$/i)]);
1918
1918
  if (!basicMatch) return null;
1919
+ const credentials = Buffer.from(basicMatch[1].trim(), "base64").toString(
1920
+ "utf-8"
1921
+ );
1922
+ const separator = credentials.indexOf(":");
1923
+ if (separator <= 0) return "malformed";
1919
1924
  try {
1920
- const credentials = Buffer.from(basicMatch[1], "base64").toString("utf-8");
1921
- const credMatch = credentials.match(/^([^:]+):(.*)$/);
1922
- if (!credMatch) return null;
1923
- return { clientId: credMatch[1], clientSecret: credMatch[2] };
1925
+ return {
1926
+ clientId: decodeURIComponent(credentials.slice(0, separator)),
1927
+ clientSecret: decodeURIComponent(credentials.slice(separator + 1))
1928
+ };
1924
1929
  } catch (e6) {
1925
- return null;
1930
+ return "malformed";
1926
1931
  }
1927
1932
  }
1928
1933
  function parseBooleanSetting(value, source) {
@@ -1971,6 +1976,10 @@ var OAUTH_CREDENTIAL_RESPONSE_HEADERS = {
1971
1976
  "Content-Type": "application/json",
1972
1977
  Pragma: "no-cache"
1973
1978
  };
1979
+ var OAUTH_INVALID_CLIENT_RESPONSE_HEADERS = {
1980
+ ...OAUTH_CREDENTIAL_RESPONSE_HEADERS,
1981
+ "WWW-Authenticate": 'Basic realm="oauth", charset="UTF-8"'
1982
+ };
1974
1983
  function stripBasePath(path, basePath) {
1975
1984
  if (!basePath) {
1976
1985
  return path;
@@ -3054,8 +3063,37 @@ var FastMCP = class extends FastMCPEventEmitter {
3054
3063
  const basicAuth = parseBasicAuthHeader(
3055
3064
  req.headers.authorization
3056
3065
  );
3057
- const clientId = _optionalChain([basicAuth, 'optionalAccess', _84 => _84.clientId]) || params.get("client_id") || "";
3058
- const clientSecret = _nullishCoalesce(_nullishCoalesce(_optionalChain([basicAuth, 'optionalAccess', _85 => _85.clientSecret]), () => ( params.get("client_secret"))), () => ( void 0));
3066
+ if (basicAuth === "malformed") {
3067
+ throw {
3068
+ toJSON: () => ({
3069
+ error: "invalid_client",
3070
+ error_description: "Malformed Basic Authorization header"
3071
+ })
3072
+ };
3073
+ }
3074
+ if (basicAuth) {
3075
+ if (params.has("client_secret")) {
3076
+ throw {
3077
+ statusCode: 400,
3078
+ toJSON: () => ({
3079
+ error: "invalid_request",
3080
+ error_description: "Send client credentials in the Authorization header or the request body, not both"
3081
+ })
3082
+ };
3083
+ }
3084
+ const bodyClientId = params.get("client_id");
3085
+ if (bodyClientId !== null && bodyClientId !== basicAuth.clientId) {
3086
+ throw {
3087
+ statusCode: 400,
3088
+ toJSON: () => ({
3089
+ error: "invalid_request",
3090
+ error_description: "client_id in the request body does not match the Authorization header"
3091
+ })
3092
+ };
3093
+ }
3094
+ }
3095
+ const clientId = basicAuth ? basicAuth.clientId : params.get("client_id") || "";
3096
+ const clientSecret = basicAuth ? basicAuth.clientSecret : _nullishCoalesce(params.get("client_secret"), () => ( void 0));
3059
3097
  let response;
3060
3098
  if (grantType === "authorization_code") {
3061
3099
  response = await oauthProxy.exchangeAuthorizationCode({
@@ -3082,14 +3120,15 @@ var FastMCP = class extends FastMCPEventEmitter {
3082
3120
  }
3083
3121
  res.writeHead(200, OAUTH_CREDENTIAL_RESPONSE_HEADERS).end(JSON.stringify(response));
3084
3122
  } catch (error) {
3085
- const statusCode = error.statusCode || 400;
3086
- res.writeHead(statusCode, OAUTH_CREDENTIAL_RESPONSE_HEADERS).end(
3087
- JSON.stringify(
3088
- _optionalChain([error, 'access', _86 => _86.toJSON, 'optionalCall', _87 => _87()]) || {
3089
- error: "invalid_request"
3090
- }
3091
- )
3092
- );
3123
+ const body = _optionalChain([error, 'access', _84 => _84.toJSON, 'optionalCall', _85 => _85()]) || {
3124
+ error: "invalid_request"
3125
+ };
3126
+ if (body.error === "invalid_client") {
3127
+ res.writeHead(401, OAUTH_INVALID_CLIENT_RESPONSE_HEADERS).end(JSON.stringify(body));
3128
+ } else {
3129
+ const statusCode = error.statusCode || 400;
3130
+ res.writeHead(statusCode, OAUTH_CREDENTIAL_RESPONSE_HEADERS).end(JSON.stringify(body));
3131
+ }
3093
3132
  }
3094
3133
  resolve();
3095
3134
  });
@@ -3111,7 +3150,7 @@ var FastMCP = class extends FastMCPEventEmitter {
3111
3150
  * regardless (RFC 7235), so no config is needed just to get the header.
3112
3151
  */
3113
3152
  #httpStreamOAuthConfig() {
3114
- const resource = _optionalChain([this, 'access', _88 => _88.#options, 'access', _89 => _89.oauth, 'optionalAccess', _90 => _90.enabled]) ? _optionalChain([this, 'access', _91 => _91.#options, 'access', _92 => _92.oauth, 'access', _93 => _93.protectedResource, 'optionalAccess', _94 => _94.resource]) : void 0;
3153
+ const resource = _optionalChain([this, 'access', _86 => _86.#options, 'access', _87 => _87.oauth, 'optionalAccess', _88 => _88.enabled]) ? _optionalChain([this, 'access', _89 => _89.#options, 'access', _90 => _90.oauth, 'access', _91 => _91.protectedResource, 'optionalAccess', _92 => _92.resource]) : void 0;
3115
3154
  if (!resource) {
3116
3155
  return {};
3117
3156
  }
@@ -3217,24 +3256,24 @@ var FastMCP = class extends FastMCPEventEmitter {
3217
3256
  const envBasePath = process.env.FASTMCP_BASE_PATH;
3218
3257
  const envStateless = process.env.FASTMCP_STATELESS;
3219
3258
  const envHost = process.env.FASTMCP_HOST;
3220
- const transportType = _optionalChain([overrides, 'optionalAccess', _95 => _95.transportType]) || parseTransportSetting(transportArg, "--transport") || parseTransportSetting(envTransport, "FASTMCP_TRANSPORT") || "stdio";
3259
+ const transportType = _optionalChain([overrides, 'optionalAccess', _93 => _93.transportType]) || parseTransportSetting(transportArg, "--transport") || parseTransportSetting(envTransport, "FASTMCP_TRANSPORT") || "stdio";
3221
3260
  if (transportType === "httpStream") {
3222
3261
  const port = parseInt(
3223
- _optionalChain([overrides, 'optionalAccess', _96 => _96.httpStream, 'optionalAccess', _97 => _97.port, 'optionalAccess', _98 => _98.toString, 'call', _99 => _99()]) || portArg || envPort || "8080"
3262
+ _optionalChain([overrides, 'optionalAccess', _94 => _94.httpStream, 'optionalAccess', _95 => _95.port, 'optionalAccess', _96 => _96.toString, 'call', _97 => _97()]) || portArg || envPort || "8080"
3224
3263
  );
3225
- const host = _optionalChain([overrides, 'optionalAccess', _100 => _100.httpStream, 'optionalAccess', _101 => _101.host]) || hostArg || envHost || "localhost";
3226
- const endpoint = _optionalChain([overrides, 'optionalAccess', _102 => _102.httpStream, 'optionalAccess', _103 => _103.endpoint]) || endpointArg || envEndpoint || "/mcp";
3264
+ const host = _optionalChain([overrides, 'optionalAccess', _98 => _98.httpStream, 'optionalAccess', _99 => _99.host]) || hostArg || envHost || "localhost";
3265
+ const endpoint = _optionalChain([overrides, 'optionalAccess', _100 => _100.httpStream, 'optionalAccess', _101 => _101.endpoint]) || endpointArg || envEndpoint || "/mcp";
3227
3266
  const basePath = normalizeBasePath(
3228
- _optionalChain([overrides, 'optionalAccess', _104 => _104.httpStream, 'optionalAccess', _105 => _105.basePath]) || basePathArg || envBasePath
3267
+ _optionalChain([overrides, 'optionalAccess', _102 => _102.httpStream, 'optionalAccess', _103 => _103.basePath]) || basePathArg || envBasePath
3229
3268
  );
3230
- const enableJsonResponse = _optionalChain([overrides, 'optionalAccess', _106 => _106.httpStream, 'optionalAccess', _107 => _107.enableJsonResponse]) || false;
3231
- const stateless = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _108 => _108.httpStream, 'optionalAccess', _109 => _109.stateless]), () => ( // A bare `--stateless` means `--stateless true`.
3269
+ const enableJsonResponse = _optionalChain([overrides, 'optionalAccess', _104 => _104.httpStream, 'optionalAccess', _105 => _105.enableJsonResponse]) || false;
3270
+ const stateless = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _106 => _106.httpStream, 'optionalAccess', _107 => _107.stateless]), () => ( // A bare `--stateless` means `--stateless true`.
3232
3271
  (statelessArg === "" ? true : parseBooleanSetting(statelessArg, "--stateless")))), () => ( parseBooleanSetting(envStateless, "FASTMCP_STATELESS"))), () => ( false));
3233
- const cors = _optionalChain([overrides, 'optionalAccess', _110 => _110.httpStream, 'optionalAccess', _111 => _111.cors]);
3234
- const eventStore = _optionalChain([overrides, 'optionalAccess', _112 => _112.httpStream, 'optionalAccess', _113 => _113.eventStore]);
3235
- const sslCa = _optionalChain([overrides, 'optionalAccess', _114 => _114.httpStream, 'optionalAccess', _115 => _115.sslCa]);
3236
- const sslCert = _optionalChain([overrides, 'optionalAccess', _116 => _116.httpStream, 'optionalAccess', _117 => _117.sslCert]);
3237
- const sslKey = _optionalChain([overrides, 'optionalAccess', _118 => _118.httpStream, 'optionalAccess', _119 => _119.sslKey]);
3272
+ const cors = _optionalChain([overrides, 'optionalAccess', _108 => _108.httpStream, 'optionalAccess', _109 => _109.cors]);
3273
+ const eventStore = _optionalChain([overrides, 'optionalAccess', _110 => _110.httpStream, 'optionalAccess', _111 => _111.eventStore]);
3274
+ const sslCa = _optionalChain([overrides, 'optionalAccess', _112 => _112.httpStream, 'optionalAccess', _113 => _113.sslCa]);
3275
+ const sslCert = _optionalChain([overrides, 'optionalAccess', _114 => _114.httpStream, 'optionalAccess', _115 => _115.sslCert]);
3276
+ const sslKey = _optionalChain([overrides, 'optionalAccess', _116 => _116.httpStream, 'optionalAccess', _117 => _117.sslKey]);
3238
3277
  return {
3239
3278
  httpStream: {
3240
3279
  basePath,
@@ -3326,7 +3365,7 @@ var FastMCP = class extends FastMCPEventEmitter {
3326
3365
  */
3327
3366
  #useEndpointAsResource(endpoint) {
3328
3367
  const oauth = this.#options.oauth;
3329
- if (this.#providerResourceBase === void 0 || !_optionalChain([oauth, 'optionalAccess', _120 => _120.protectedResource]))
3368
+ if (this.#providerResourceBase === void 0 || !_optionalChain([oauth, 'optionalAccess', _118 => _118.protectedResource]))
3330
3369
  return;
3331
3370
  this.#options = {
3332
3371
  ...this.#options,
@@ -3355,4 +3394,4 @@ var FastMCP = class extends FastMCPEventEmitter {
3355
3394
 
3356
3395
 
3357
3396
  exports.DiscoveryDocumentCache = DiscoveryDocumentCache; exports.jsonSchemaAdapter = jsonSchemaAdapter; exports.MEDIA_FETCH_TIMEOUT_MS = MEDIA_FETCH_TIMEOUT_MS; exports.imageContent = imageContent; exports.audioContent = audioContent; exports.FastMCPError = FastMCPError; exports.SessionError = SessionError; exports.UnexpectedStateError = UnexpectedStateError; exports.UserError = UserError; exports.ServerState = ServerState; exports.FastMCPSession = FastMCPSession; exports.FastMCP = FastMCP;
3358
- //# sourceMappingURL=chunk-X5ITW7FV.cjs.map
3397
+ //# sourceMappingURL=chunk-4P2GDM7W.cjs.map