@azure-rest/core-client
Version:
Core library for interfacing with Azure Rest Clients
49 lines • 2.01 kB
JavaScript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
import { bearerTokenAuthenticationPolicy, createDefaultHttpClient, createPipelineFromOptions, } from "@azure/core-rest-pipeline";
import { isTokenCredential } from "@azure/core-auth";
import { apiVersionPolicy } from "./apiVersionPolicy.js";
import { keyCredentialAuthenticationPolicy } from "./keyCredentialAuthenticationPolicy.js";
let cachedHttpClient;
/**
* Adds a credential policy to the pipeline if a credential is provided. If none is provided, no policy is added.
*/
export function addCredentialPipelinePolicy(pipeline, endpoint, options = {}) {
const { credential, clientOptions } = options;
if (!credential) {
return;
}
if (isTokenCredential(credential)) {
const tokenPolicy = bearerTokenAuthenticationPolicy({
credential,
scopes: clientOptions?.credentials?.scopes ?? `${endpoint}/.default`,
});
pipeline.addPolicy(tokenPolicy);
}
else if (isKeyCredential(credential)) {
if (!clientOptions?.credentials?.apiKeyHeaderName) {
throw new Error(`Missing API Key Header Name`);
}
const keyPolicy = keyCredentialAuthenticationPolicy(credential, clientOptions?.credentials?.apiKeyHeaderName);
pipeline.addPolicy(keyPolicy);
}
}
/**
* Creates a default rest pipeline to re-use accross Rest Level Clients
*/
export function createDefaultPipeline(endpoint, credential, options = {}) {
const pipeline = createPipelineFromOptions(options);
pipeline.addPolicy(apiVersionPolicy(options));
addCredentialPipelinePolicy(pipeline, endpoint, { credential, clientOptions: options });
return pipeline;
}
function isKeyCredential(credential) {
return credential.key !== undefined;
}
export function getCachedDefaultHttpsClient() {
if (!cachedHttpClient) {
cachedHttpClient = createDefaultHttpClient();
}
return cachedHttpClient;
}
//# sourceMappingURL=clientHelpers.js.map