@backstage/integration
Version:
Helpers for managing integrations towards external systems
48 lines (45 loc) • 1.7 kB
JavaScript
import { ClientSecretCredential, DefaultAzureCredential } from '@azure/identity';
class DefaultAzureCredentialsManager {
constructor(configProviders) {
this.configProviders = configProviders;
this.cachedCredentials = /* @__PURE__ */ new Map();
}
cachedCredentials;
/**
* Creates an instance of DefaultAzureCredentialsManager from a Backstage integration registry.
*/
static fromIntegrations(integrations) {
const configProviders = integrations.azureBlobStorage.list().reduce((acc, integration) => {
acc.set(
integration.config.accountName || "default",
integration.config
);
return acc;
}, /* @__PURE__ */ new Map());
return new DefaultAzureCredentialsManager(configProviders);
}
createCredential(config) {
if (config.aadCredential && config.aadCredential.clientId && config.aadCredential.clientSecret && config.aadCredential.tenantId) {
return new ClientSecretCredential(
config.aadCredential.tenantId,
config.aadCredential.clientId,
config.aadCredential.clientSecret
);
}
return new DefaultAzureCredential();
}
async getCredentials(accountName) {
if (this.cachedCredentials.has(accountName)) {
return this.cachedCredentials.get(accountName);
}
const config = this.configProviders.get(accountName);
if (!config) {
throw new Error(`No configuration found for account: ${accountName}`);
}
const credential = this.createCredential(config);
this.cachedCredentials.set(accountName, credential);
return credential;
}
}
export { DefaultAzureCredentialsManager };
//# sourceMappingURL=DefaultAzureCredentialsProvider.esm.js.map