56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
// SPDX-License-Identifier: MIT
|
|
|
|
/**
|
|
* A DevOps helpers module.
|
|
*/
|
|
|
|
import { loginInteractive } from "../azure/index.js";
|
|
import * as azdev from "azure-devops-node-api";
|
|
|
|
const AZURE_DEVOPS_SCOPES = ["https://app.vssps.visualstudio.com/.default"];
|
|
|
|
/**
|
|
* Get Azure DevOps API token.
|
|
*
|
|
* @param { string } tenantId - The Azure AD tenant ID
|
|
* @param { string } clientId - The Azure AD client ID
|
|
* @returns { Promise<string> } Azure DevOps API access token
|
|
*/
|
|
|
|
export async function getDevOpsApiToken(tenantId, clientId) {
|
|
const result = await loginInteractive({
|
|
tenantId,
|
|
clientId,
|
|
scopes: AZURE_DEVOPS_SCOPES,
|
|
});
|
|
|
|
const accessToken = result?.accessToken;
|
|
|
|
if(!accessToken) {
|
|
throw new Error("Failed to obtain Azure DevOps API token");
|
|
}
|
|
|
|
return accessToken;
|
|
}
|
|
|
|
/**
|
|
* Get Azure DevOps clients - Core and Git.
|
|
*
|
|
* @param { string } orgUrl - The Azure DevOps organization URL
|
|
* @param { string } tenantId - The Azure AD tenant ID
|
|
* @param { string } clientId - The Azure AD client ID
|
|
* @returns { Promise<{ coreClient: Object, gitClient: Object }> }
|
|
*/
|
|
|
|
export async function getDevOpsClients(orgUrl, tenantId, clientId) {
|
|
const accessToken = await getDevOpsApiToken(tenantId, clientId);
|
|
|
|
const authHandler = azdev.getBearerHandler(accessToken);
|
|
const connection = new azdev.WebApi(orgUrl, authHandler);
|
|
|
|
const coreClient = await connection.getCoreApi();
|
|
const gitClient = await connection.getGitApi();
|
|
|
|
return { coreClient, gitClient };
|
|
}
|