MCPcopy Create free account
hub / github.com/modelcontextprotocol/typescript-sdk / selectResourceURL

Function selectResourceURL

src/client/auth.ts:632–655  ·  view source on GitHub ↗
(
    serverUrl: string | URL,
    provider: OAuthClientProvider,
    resourceMetadata?: OAuthProtectedResourceMetadata
)

Source from the content-addressed store, hash-verified

630}
631
632export async function selectResourceURL(
633 serverUrl: string | URL,
634 provider: OAuthClientProvider,
635 resourceMetadata?: OAuthProtectedResourceMetadata
636): Promise<URL | undefined> {
637 const defaultResource = resourceUrlFromServerUrl(serverUrl);
638
639 // If provider has custom validation, delegate to it
640 if (provider.validateResourceURL) {
641 return await provider.validateResourceURL(defaultResource, resourceMetadata?.resource);
642 }
643
644 // Only include resource parameter when Protected Resource Metadata is present
645 if (!resourceMetadata) {
646 return undefined;
647 }
648
649 // Validate that the metadata's resource is compatible with our request
650 if (!checkResourceAllowed({ requestedResource: defaultResource, configuredResource: resourceMetadata.resource })) {
651 throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`);
652 }
653 // Prefer the resource from metadata since it's what the server is telling us to request
654 return new URL(resourceMetadata.resource);
655}
656
657/**
658 * Extract resource_metadata, scope, and error from WWW-Authenticate header.

Callers 1

authInternalFunction · 0.85

Calls 3

resourceUrlFromServerUrlFunction · 0.85
checkResourceAllowedFunction · 0.85
validateResourceURLMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…