diff --git a/change/change-14f1e6d4-2a6d-446d-bf38-f3aec810f8a2.json b/change/change-14f1e6d4-2a6d-446d-bf38-f3aec810f8a2.json new file mode 100644 index 0000000..1dfa1ed --- /dev/null +++ b/change/change-14f1e6d4-2a6d-446d-bf38-f3aec810f8a2.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "type": "minor", + "comment": "Expose functionality as a library", + "packageName": "azureauth", + "email": "dannyvv@microsoft.com", + "dependentChangeType": "patch" + } + ] +} \ No newline at end of file diff --git a/change/change-44c62a72-3c87-4839-9edf-303ecac8725f.json b/change/change-44c62a72-3c87-4839-9edf-303ecac8725f.json new file mode 100644 index 0000000..c628916 --- /dev/null +++ b/change/change-44c62a72-3c87-4839-9edf-303ecac8725f.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "type": "minor", + "comment": "Expose functionality as a library", + "packageName": "ado-npm-auth", + "email": "dannyvv@microsoft.com", + "dependentChangeType": "patch" + } + ] +} \ No newline at end of file diff --git a/packages/ado-npm-auth/package.json b/packages/ado-npm-auth/package.json index 1dde7ed..e400137 100644 --- a/packages/ado-npm-auth/package.json +++ b/packages/ado-npm-auth/package.json @@ -6,12 +6,14 @@ "license": "MIT", "type": "module", "main": "./dist/index.js", + "typings": "./lib/index.d.ts", "bin": { "ado-npm-auth": "./bin/index.js" }, "files": [ "dist/index.js", "dist/ado-npm-auth.cjs", + "lib/*.d.ts", "bin", "static", "LICENCSE.txt", diff --git a/packages/ado-npm-auth/src/azureauth/ado.ts b/packages/ado-npm-auth/src/azureauth/ado.ts index 53467a7..cc8840f 100644 --- a/packages/ado-npm-auth/src/azureauth/ado.ts +++ b/packages/ado-npm-auth/src/azureauth/ado.ts @@ -34,6 +34,7 @@ export type AdoPatResponse = { */ export const adoPat = async ( options: AdoPatOptions, + azureAuthLocation?: string, ): Promise => { if (!isSupportedPlatformAndArchitecture()) { throw new Error( @@ -41,7 +42,12 @@ export const adoPat = async ( ); } - const { command: authCommand, env } = azureAuthCommand(); + const { command: authCommand, env } = azureAuthLocation + ? { + command: [azureAuthLocation], + env: process.env, + } + : azureAuthCommand(); const command = [ ...authCommand, @@ -75,8 +81,10 @@ export const adoPat = async ( try { result = spawnSync(command[0], command.slice(1), { encoding: "utf-8" }); - if (result.error) { - throw new Error(result.error.message); + if (result.status === 0 || (result.stderr && !result.stdout)) { + throw new Error( + `Azure Auth failed with exit code ${result.status}: ${result.stderr}`, + ); } } catch (error: any) { throw new Error( @@ -87,7 +95,7 @@ export const adoPat = async ( try { result = await exec(command.join(" "), { env }); - if (result.stderr) { + if (result.stderr && !result.stdout) { throw new Error(result.stderr); } } catch (error: any) { @@ -108,7 +116,7 @@ export const adoPat = async ( return result.stdout; } catch (error: any) { if (!(await isAzureAuthInstalled())) { - throw new Error(`AzureAuth is not installed.`); + throw new Error(`AzureAuth is not installed: ${error}`); } throw new Error(error.message); diff --git a/packages/ado-npm-auth/src/cli.ts b/packages/ado-npm-auth/src/cli.ts index 8e2ea51..b37a2ab 100644 --- a/packages/ado-npm-auth/src/cli.ts +++ b/packages/ado-npm-auth/src/cli.ts @@ -85,7 +85,7 @@ export const run = async (args: Args): Promise => { (feed) => feed.fileProvider, ); for (const [fileProvider, updatedFeeds] of invalidFeedsByProvider) { - await fileProvider.writeWorspaceRegistries( + await fileProvider.writeWorkspaceRegistries( updatedFeeds.map((updatedFeed) => updatedFeed.feed), ); } diff --git a/packages/ado-npm-auth/src/fileProvider.ts b/packages/ado-npm-auth/src/fileProvider.ts index d15d52a..8d0f63d 100644 --- a/packages/ado-npm-auth/src/fileProvider.ts +++ b/packages/ado-npm-auth/src/fileProvider.ts @@ -108,5 +108,7 @@ export abstract class FileProvider { abstract prepUserFile(): Promise; abstract getUserFeeds(): Promise>; abstract getWorkspaceRegistries(): Promise; - abstract writeWorspaceRegistries(feedsToPatch: Iterable): Promise; + abstract writeWorkspaceRegistries( + feedsToPatch: Iterable, + ): Promise; } diff --git a/packages/ado-npm-auth/src/index.ts b/packages/ado-npm-auth/src/index.ts index e69de29..69fdda4 100644 --- a/packages/ado-npm-auth/src/index.ts +++ b/packages/ado-npm-auth/src/index.ts @@ -0,0 +1,5 @@ +export * from "./yarnrc/yarnrcFileProvider.js"; +export * from "./npmrc/npmrcFileProvider.js"; +export * from "./fileProvider.js"; + +export * from "./npmrc/generate-npmrc-pat.js"; diff --git a/packages/ado-npm-auth/src/npmrc/generate-npmrc-pat.ts b/packages/ado-npm-auth/src/npmrc/generate-npmrc-pat.ts index b3cc980..91b976c 100644 --- a/packages/ado-npm-auth/src/npmrc/generate-npmrc-pat.ts +++ b/packages/ado-npm-auth/src/npmrc/generate-npmrc-pat.ts @@ -9,16 +9,20 @@ import { toBase64 } from "../utils/encoding.js"; export const generateNpmrcPat = async ( organization: string, encode = false, + azureAuthLocation?: string, ): Promise => { const name = `${hostname()}-${organization}`; - const pat = await adoPat({ - promptHint: `${name} .npmrc PAT`, - organization, - displayName: `${name}-npmrc-pat`, - scope: ["vso.packaging"], - timeout: "30", - output: "json", - }); + const pat = await adoPat( + { + promptHint: `${name} .npmrc PAT`, + organization, + displayName: `${name}-npmrc-pat`, + scope: ["vso.packaging"], + timeout: "30", + output: "json", + }, + azureAuthLocation, + ); const rawToken = (pat as AdoPatResponse).token; diff --git a/packages/ado-npm-auth/src/npmrc/npmrcFileProvider.ts b/packages/ado-npm-auth/src/npmrc/npmrcFileProvider.ts index b91b57d..04d2f7f 100644 --- a/packages/ado-npm-auth/src/npmrc/npmrcFileProvider.ts +++ b/packages/ado-npm-auth/src/npmrc/npmrcFileProvider.ts @@ -140,7 +140,7 @@ export class NpmrcFileProvider extends FileProvider { return `//${registry}:${field}=`; } - override async writeWorspaceRegistries( + override async writeWorkspaceRegistries( feedsToPatch: Iterable, ): Promise { const newLinesByRegistryAndField = new Map(); diff --git a/packages/ado-npm-auth/src/yarnrc/yarnrcFileProvider.ts b/packages/ado-npm-auth/src/yarnrc/yarnrcFileProvider.ts index b32d729..a9ed565 100644 --- a/packages/ado-npm-auth/src/yarnrc/yarnrcFileProvider.ts +++ b/packages/ado-npm-auth/src/yarnrc/yarnrcFileProvider.ts @@ -66,7 +66,7 @@ export class YarnRcFileProvider extends FileProvider { return registries; } - override async writeWorspaceRegistries( + override async writeWorkspaceRegistries( feedsToPatch: Iterable, ): Promise { const yarnrc = (await this.paseYarnRc(this.userFilePath)) || {}; diff --git a/packages/node-azureauth/scripts/azureauth.cjs b/packages/node-azureauth/scripts/azureauth.cjs old mode 100644 new mode 100755