(
serverUrl: string | URL,
provider: OAuthClientProvider,
resourceMetadata?: OAuthProtectedResourceMetadata
)
| 630 | } |
| 631 | |
| 632 | export 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. |
no test coverage detected
searching dependent graphs…