// 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 } 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 }; }