@microsoft/ado-npm-auth-lib 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +3 -0
- package/lib/.tsbuildinfo +1 -0
- package/lib/ado/make-ado-request.d.ts +15 -0
- package/lib/ado/make-ado-request.d.ts.map +1 -0
- package/lib/ado/make-ado-request.js +37 -0
- package/lib/ado/make-ado-request.js.map +1 -0
- package/lib/args.d.ts +9 -0
- package/lib/args.d.ts.map +1 -0
- package/lib/args.js +38 -0
- package/lib/args.js.map +1 -0
- package/lib/azureauth/ado.d.ts +26 -0
- package/lib/azureauth/ado.d.ts.map +1 -0
- package/lib/azureauth/ado.js +85 -0
- package/lib/azureauth/ado.js.map +1 -0
- package/lib/azureauth/ado.test.d.ts +2 -0
- package/lib/azureauth/ado.test.d.ts.map +1 -0
- package/lib/azureauth/ado.test.js +154 -0
- package/lib/azureauth/ado.test.js.map +1 -0
- package/lib/azureauth/azureauth-command.d.ts +11 -0
- package/lib/azureauth/azureauth-command.d.ts.map +1 -0
- package/lib/azureauth/azureauth-command.js +30 -0
- package/lib/azureauth/azureauth-command.js.map +1 -0
- package/lib/azureauth/is-azureauth-installed.d.ts +7 -0
- package/lib/azureauth/is-azureauth-installed.d.ts.map +1 -0
- package/lib/azureauth/is-azureauth-installed.js +28 -0
- package/lib/azureauth/is-azureauth-installed.js.map +1 -0
- package/lib/azureauth/is-azureauth-installed.test.d.ts +2 -0
- package/lib/azureauth/is-azureauth-installed.test.d.ts.map +1 -0
- package/lib/azureauth/is-azureauth-installed.test.js +54 -0
- package/lib/azureauth/is-azureauth-installed.test.js.map +1 -0
- package/lib/azureauth/is-supported-platform-and-architecture.d.ts +6 -0
- package/lib/azureauth/is-supported-platform-and-architecture.d.ts.map +1 -0
- package/lib/azureauth/is-supported-platform-and-architecture.js +16 -0
- package/lib/azureauth/is-supported-platform-and-architecture.js.map +1 -0
- package/lib/cli.d.ts +4 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +125 -0
- package/lib/cli.js.map +1 -0
- package/lib/fileProvider.d.ts +35 -0
- package/lib/fileProvider.d.ts.map +1 -0
- package/lib/fileProvider.js +79 -0
- package/lib/fileProvider.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/index.js.map +1 -0
- package/lib/npmrc/generate-npmrc-pat.d.ts +6 -0
- package/lib/npmrc/generate-npmrc-pat.d.ts.map +1 -0
- package/lib/npmrc/generate-npmrc-pat.js +49 -0
- package/lib/npmrc/generate-npmrc-pat.js.map +1 -0
- package/lib/npmrc/npmrcFileProvider.d.ts +13 -0
- package/lib/npmrc/npmrcFileProvider.d.ts.map +1 -0
- package/lib/npmrc/npmrcFileProvider.js +149 -0
- package/lib/npmrc/npmrcFileProvider.js.map +1 -0
- package/lib/npmrc/nugetCredentialProvider.d.ts +7 -0
- package/lib/npmrc/nugetCredentialProvider.d.ts.map +1 -0
- package/lib/npmrc/nugetCredentialProvider.js +76 -0
- package/lib/npmrc/nugetCredentialProvider.js.map +1 -0
- package/lib/telemetry/index.d.ts +20 -0
- package/lib/telemetry/index.d.ts.map +1 -0
- package/lib/telemetry/index.js +20 -0
- package/lib/telemetry/index.js.map +1 -0
- package/lib/utils/encoding.d.ts +13 -0
- package/lib/utils/encoding.d.ts.map +1 -0
- package/lib/utils/encoding.js +15 -0
- package/lib/utils/encoding.js.map +1 -0
- package/lib/utils/exec.d.ts +18 -0
- package/lib/utils/exec.d.ts.map +1 -0
- package/lib/utils/exec.js +46 -0
- package/lib/utils/exec.js.map +1 -0
- package/lib/utils/fileUtils.d.ts +2 -0
- package/lib/utils/fileUtils.d.ts.map +1 -0
- package/lib/utils/fileUtils.js +16 -0
- package/lib/utils/fileUtils.js.map +1 -0
- package/lib/utils/get-feed-without-protocol.d.ts +5 -0
- package/lib/utils/get-feed-without-protocol.d.ts.map +1 -0
- package/lib/utils/get-feed-without-protocol.js +11 -0
- package/lib/utils/get-feed-without-protocol.js.map +1 -0
- package/lib/utils/get-feed-without-protocol.test.d.ts +2 -0
- package/lib/utils/get-feed-without-protocol.test.d.ts.map +1 -0
- package/lib/utils/get-feed-without-protocol.test.js +31 -0
- package/lib/utils/get-feed-without-protocol.test.js.map +1 -0
- package/lib/utils/get-organization-from-feed-url.d.ts +8 -0
- package/lib/utils/get-organization-from-feed-url.d.ts.map +1 -0
- package/lib/utils/get-organization-from-feed-url.js +81 -0
- package/lib/utils/get-organization-from-feed-url.js.map +1 -0
- package/lib/utils/get-organization-from-feed-url.test.d.ts +2 -0
- package/lib/utils/get-organization-from-feed-url.test.d.ts.map +1 -0
- package/lib/utils/get-organization-from-feed-url.test.js +19 -0
- package/lib/utils/get-organization-from-feed-url.test.js.map +1 -0
- package/lib/utils/is-codespaces.d.ts +6 -0
- package/lib/utils/is-codespaces.d.ts.map +1 -0
- package/lib/utils/is-codespaces.js +10 -0
- package/lib/utils/is-codespaces.js.map +1 -0
- package/lib/utils/is-wsl.d.ts +6 -0
- package/lib/utils/is-wsl.d.ts.map +1 -0
- package/lib/utils/is-wsl.js +9 -0
- package/lib/utils/is-wsl.js.map +1 -0
- package/lib/utils/partition.d.ts +2 -0
- package/lib/utils/partition.d.ts.map +1 -0
- package/lib/utils/partition.js +15 -0
- package/lib/utils/partition.js.map +1 -0
- package/lib/utils/request.d.ts +15 -0
- package/lib/utils/request.d.ts.map +1 -0
- package/lib/utils/request.js +135 -0
- package/lib/utils/request.js.map +1 -0
- package/lib/yarnrc/yarnrcFileProvider.d.ts +27 -0
- package/lib/yarnrc/yarnrcFileProvider.d.ts.map +1 -0
- package/lib/yarnrc/yarnrcFileProvider.js +96 -0
- package/lib/yarnrc/yarnrcFileProvider.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { YarnRcFileProvider } from "./yarnrc/yarnrcFileProvider.js";
|
|
2
|
+
export { NpmrcFileProvider } from "./npmrc/npmrcFileProvider.js";
|
|
3
|
+
export { defaultUser, defaultEmail, FileProvider } from "./fileProvider.js";
|
|
4
|
+
export { generateNpmrcPat } from "./npmrc/generate-npmrc-pat.js";
|
|
5
|
+
export { getOrganizationFromFeedUrl } from "./utils/get-organization-from-feed-url.js";
|
|
6
|
+
export { partition } from "./utils/partition.js";
|
|
7
|
+
export { logTelemetry } from "./telemetry/index.js";
|
|
8
|
+
export { main } from "./cli.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a valid ADO PAT, scoped for vso.packaging in the given ado organization, 30 minute timeout
|
|
3
|
+
* @returns { string } a valid ADO PAT
|
|
4
|
+
*/
|
|
5
|
+
export declare const generateNpmrcPat: (organization: string, feed: string, encode?: boolean, azureAuthLocation?: string) => Promise<string>;
|
|
6
|
+
//# sourceMappingURL=generate-npmrc-pat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-npmrc-pat.d.ts","sourceRoot":"","sources":["../../src/npmrc/generate-npmrc-pat.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,MAAM,MAAM,EACZ,gBAAc,EACd,oBAAoB,MAAM,KACzB,OAAO,CAAC,MAAM,CAchB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { hostname, platform } from "node:os";
|
|
2
|
+
import { adoPat } from "../azureauth/ado.js";
|
|
3
|
+
import { toBase64 } from "../utils/encoding.js";
|
|
4
|
+
import { credentialProviderPat } from "./nugetCredentialProvider.js";
|
|
5
|
+
/**
|
|
6
|
+
* Generates a valid ADO PAT, scoped for vso.packaging in the given ado organization, 30 minute timeout
|
|
7
|
+
* @returns { string } a valid ADO PAT
|
|
8
|
+
*/
|
|
9
|
+
export const generateNpmrcPat = async (organization, feed, encode = false, azureAuthLocation) => {
|
|
10
|
+
const name = `${hostname()}-${organization}`;
|
|
11
|
+
const rawToken = await getRawToken(name, organization, feed, azureAuthLocation);
|
|
12
|
+
if (encode) {
|
|
13
|
+
return toBase64(rawToken);
|
|
14
|
+
}
|
|
15
|
+
return rawToken;
|
|
16
|
+
};
|
|
17
|
+
async function getRawToken(name, organization, feed, azureAuthLocation) {
|
|
18
|
+
/**
|
|
19
|
+
* Use vso.packaging_write to include "Collaborator" (Feed and Upstream Reader) permissions.
|
|
20
|
+
* vso.packaging only provides "Reader" access (view/download packages).
|
|
21
|
+
* vso.packaging_write provides "Contributor" access (publish/promote/deprecate) which includes
|
|
22
|
+
* Collaborator permissions (save packages from upstream sources).
|
|
23
|
+
* Reference: https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth#available-scopes
|
|
24
|
+
*
|
|
25
|
+
* I filed feedback on VSO to add this: https://developercommunity.visualstudio.com/t/the-scope-for-vsopackaging-SHOULD-inclu/10998135
|
|
26
|
+
*/
|
|
27
|
+
const patScope = "vso.packaging_write";
|
|
28
|
+
switch (platform()) {
|
|
29
|
+
case "win32":
|
|
30
|
+
case "darwin": {
|
|
31
|
+
const pat = await adoPat({
|
|
32
|
+
promptHint: `Authenticate to ${organization} to generate a temporary token for npm`,
|
|
33
|
+
organization,
|
|
34
|
+
displayName: name,
|
|
35
|
+
scope: [patScope],
|
|
36
|
+
timeout: "30",
|
|
37
|
+
output: "json",
|
|
38
|
+
}, azureAuthLocation);
|
|
39
|
+
return pat.token;
|
|
40
|
+
}
|
|
41
|
+
case "linux": {
|
|
42
|
+
const cpPat = await credentialProviderPat(feed);
|
|
43
|
+
return cpPat.Password;
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`Platform ${platform()} is not supported for ADO authentication`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=generate-npmrc-pat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-npmrc-pat.js","sourceRoot":"","sources":["../../src/npmrc/generate-npmrc-pat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,YAAoB,EACpB,IAAY,EACZ,MAAM,GAAG,KAAK,EACd,iBAA0B,EACT,EAAE;IACnB,MAAM,IAAI,GAAG,GAAG,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,IAAI,EACJ,YAAY,EACZ,IAAI,EACJ,iBAAiB,CAClB,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,YAAoB,EACpB,IAAY,EACZ,iBAA0B;IAE1B;;;;;;;;OAQG;IACH,MAAM,QAAQ,GAAG,qBAAqB,CAAC;IAEvC,QAAQ,QAAQ,EAAE,EAAE,CAAC;QACnB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB;gBACE,UAAU,EAAE,mBAAmB,YAAY,wCAAwC;gBACnF,YAAY;gBACZ,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,QAAQ,CAAC;gBACjB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;aACf,EACD,iBAAiB,CAClB,CAAC;YACF,OAAQ,GAAsB,CAAC,KAAK,CAAC;QACvC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CACb,YAAY,QAAQ,EAAE,0CAA0C,CACjE,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Feed } from "../fileProvider.js";
|
|
2
|
+
import { FileProvider } from "../fileProvider.js";
|
|
3
|
+
export declare class NpmrcFileProvider extends FileProvider {
|
|
4
|
+
constructor(configFile?: string);
|
|
5
|
+
prepUserFile(): Promise<void>;
|
|
6
|
+
getWorkspaceRegistries(): Promise<string[]>;
|
|
7
|
+
getUserFeeds(): Promise<Map<string, Feed>>;
|
|
8
|
+
patchUserNpmRcFile(newLinesByRegistryAndField: Map<string, string>): Promise<string[]>;
|
|
9
|
+
toRegistryAndFunctionKey(registry: string, field: string): string;
|
|
10
|
+
writeWorkspaceRegistries(feedsToPatch: Iterable<Feed>): Promise<void>;
|
|
11
|
+
processNpmRcFile(npmrcFilePath: string, handleFeedConfig: (line: string, registry: string, field: string, value: string) => string | void, handleOtherLine?: (line: string) => string | void): Promise<string[]>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=npmrcFileProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npmrcFileProvider.d.ts","sourceRoot":"","sources":["../../src/npmrc/npmrcFileProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA6B,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAS7E,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,UAAU,CAAC,EAAE,MAAM;IAIhB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA4C3C,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IA+BnD,kBAAkB,CACtB,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BpB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlD,wBAAwB,CACrC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4BV,gBAAgB,CACpB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,IAAI,EAClB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAChD,OAAO,CAAC,MAAM,EAAE,CAAC;CA6BrB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Config from "@npmcli/config";
|
|
2
|
+
import { defaultEmail, defaultUser, FileProvider } from "../fileProvider.js";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import { EOL } from "node:os";
|
|
5
|
+
import { getOrganizationFromFeedUrl } from "../utils/get-organization-from-feed-url.js";
|
|
6
|
+
import { getFeedWithoutProtocol } from "../utils/get-feed-without-protocol.js";
|
|
7
|
+
import { fromBase64, toBase64 } from "../utils/encoding.js";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { writeFileLazy } from "../utils/fileUtils.js";
|
|
10
|
+
export class NpmrcFileProvider extends FileProvider {
|
|
11
|
+
constructor(configFile) {
|
|
12
|
+
super("NpmRc", ".npmrc", configFile);
|
|
13
|
+
}
|
|
14
|
+
async prepUserFile() {
|
|
15
|
+
try {
|
|
16
|
+
const npmrcContent = await fs.readFile(this.userFilePath, "utf-8");
|
|
17
|
+
// remove the entry for registries in the user-level .npmrc
|
|
18
|
+
const updatedNpmrcContent = npmrcContent
|
|
19
|
+
.split(EOL)
|
|
20
|
+
.filter((line) => !line.includes("registry="))
|
|
21
|
+
.join(EOL);
|
|
22
|
+
await writeFileLazy(this.userFilePath, updatedNpmrcContent);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// user npmrc does not exist so make an empty one
|
|
26
|
+
await writeFileLazy(this.userFilePath, "");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async getWorkspaceRegistries() {
|
|
30
|
+
var _a;
|
|
31
|
+
let config;
|
|
32
|
+
try {
|
|
33
|
+
config = new Config({
|
|
34
|
+
npmPath: this.workspaceFilePath,
|
|
35
|
+
argv: [
|
|
36
|
+
"<dummy_node>", // pnpm code always slices the first two arv arguments
|
|
37
|
+
"<dummy_pnpm_js>", // pnpm code always slices the first two arv arguments
|
|
38
|
+
// This is to ensure that the parser picks up the selected .npmrc file
|
|
39
|
+
// as the built-in logic for finding the .npmrc file is not resiliant
|
|
40
|
+
// for repo's that are of mixed languages i.e. js + cpp + C# etc.
|
|
41
|
+
// The assumption is that the .npmrc file is next to a node_modules or package.json
|
|
42
|
+
// file which in large mono-repo's at is not always the case.
|
|
43
|
+
`--prefix=${path.dirname(this.workspaceFilePath)}`,
|
|
44
|
+
],
|
|
45
|
+
shorthands: {},
|
|
46
|
+
definitions: {}, // needed so we can access random feed names
|
|
47
|
+
});
|
|
48
|
+
await config.load();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof TypeError && error.message.includes("Invalid URL")) {
|
|
52
|
+
throw new Error("Registry URL missing or invalid");
|
|
53
|
+
}
|
|
54
|
+
throw new Error("Error loading .npmrc");
|
|
55
|
+
}
|
|
56
|
+
// @npmcli/config does not have a normal way to display all keys
|
|
57
|
+
// so we use this ugly access instead
|
|
58
|
+
const projectNpmrcKeys = Object.keys((((_a = config.data) === null || _a === void 0 ? void 0 : _a.get("project")) || {})["data"] || {});
|
|
59
|
+
// find any and all keys which are a registry
|
|
60
|
+
const registries = projectNpmrcKeys.filter((key) => key.includes("registry"));
|
|
61
|
+
return registries
|
|
62
|
+
.map((registry) => config.get(registry, "project"))
|
|
63
|
+
.map((feed) => getFeedWithoutProtocol(feed));
|
|
64
|
+
}
|
|
65
|
+
async getUserFeeds() {
|
|
66
|
+
const result = new Map();
|
|
67
|
+
await this.processNpmRcFile(this.userFilePath, (_, registry, field, value) => {
|
|
68
|
+
let feed = result.get(registry);
|
|
69
|
+
if (!feed) {
|
|
70
|
+
feed = {
|
|
71
|
+
registry: registry,
|
|
72
|
+
adoOrganization: getOrganizationFromFeedUrl(registry),
|
|
73
|
+
};
|
|
74
|
+
result.set(feed.registry, feed);
|
|
75
|
+
}
|
|
76
|
+
switch (field) {
|
|
77
|
+
case "_password":
|
|
78
|
+
feed.authToken = fromBase64(value).trim();
|
|
79
|
+
break;
|
|
80
|
+
case "username":
|
|
81
|
+
feed.userName = value;
|
|
82
|
+
break;
|
|
83
|
+
case "email":
|
|
84
|
+
feed.email = value;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
async patchUserNpmRcFile(newLinesByRegistryAndField) {
|
|
91
|
+
const linesToAdd = new Set(newLinesByRegistryAndField.values());
|
|
92
|
+
const npmrcLines = await this.processNpmRcFile(this.userFilePath, (line, registry, field, _value) => {
|
|
93
|
+
const newLine = newLinesByRegistryAndField.get(this.toRegistryAndFunctionKey(registry, field));
|
|
94
|
+
if (newLine !== undefined) {
|
|
95
|
+
linesToAdd.delete(newLine);
|
|
96
|
+
return newLine;
|
|
97
|
+
}
|
|
98
|
+
return line;
|
|
99
|
+
}, (line) => line);
|
|
100
|
+
for (const lineToAdd of linesToAdd) {
|
|
101
|
+
npmrcLines.push(lineToAdd);
|
|
102
|
+
}
|
|
103
|
+
return npmrcLines;
|
|
104
|
+
}
|
|
105
|
+
toRegistryAndFunctionKey(registry, field) {
|
|
106
|
+
return `//${registry}:${field}=`;
|
|
107
|
+
}
|
|
108
|
+
async writeWorkspaceRegistries(feedsToPatch) {
|
|
109
|
+
const newLinesByRegistryAndField = new Map();
|
|
110
|
+
// Build a map with registry and feed with the updated line for value.
|
|
111
|
+
for (const feedToPatch of feedsToPatch) {
|
|
112
|
+
newLinesByRegistryAndField.set(this.toRegistryAndFunctionKey(feedToPatch.registry, "username"), `//${feedToPatch.registry}:username=${feedToPatch.userName || defaultUser}`);
|
|
113
|
+
newLinesByRegistryAndField.set(this.toRegistryAndFunctionKey(feedToPatch.registry, "email"), `//${feedToPatch.registry}:email=${feedToPatch.email || defaultEmail}`);
|
|
114
|
+
newLinesByRegistryAndField.set(this.toRegistryAndFunctionKey(feedToPatch.registry, "_password"), `//${feedToPatch.registry}:_password=${toBase64(feedToPatch.authToken)}`);
|
|
115
|
+
}
|
|
116
|
+
const npmrcLines = await this.patchUserNpmRcFile(newLinesByRegistryAndField);
|
|
117
|
+
await fs.writeFile(this.userFilePath, npmrcLines.join(EOL), {
|
|
118
|
+
encoding: "utf-8",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async processNpmRcFile(npmrcFilePath, handleFeedConfig, handleOtherLine) {
|
|
122
|
+
const npmrc = await fs.readFile(npmrcFilePath, {
|
|
123
|
+
encoding: "utf8",
|
|
124
|
+
});
|
|
125
|
+
const npmrcLines = npmrc.split("\n").map((line) => line.trim());
|
|
126
|
+
const resultLines = [];
|
|
127
|
+
for (const line of npmrcLines) {
|
|
128
|
+
const slashColonIndex = line.indexOf("/:");
|
|
129
|
+
if (line.startsWith("//") && slashColonIndex >= 2) {
|
|
130
|
+
const registry = line.substring(2, slashColonIndex + 1);
|
|
131
|
+
const remainder = line.substring(slashColonIndex + 2);
|
|
132
|
+
const field = remainder.substring(0, remainder.indexOf("="));
|
|
133
|
+
const value = remainder.substring(remainder.indexOf("=") + 1);
|
|
134
|
+
const newLine = handleFeedConfig(line, registry, field, value);
|
|
135
|
+
if (newLine) {
|
|
136
|
+
resultLines.push(newLine);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else if (handleOtherLine) {
|
|
140
|
+
const newLine = handleOtherLine(line);
|
|
141
|
+
if (newLine) {
|
|
142
|
+
resultLines.push(newLine);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return resultLines;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=npmrcFileProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npmrcFileProvider.js","sourceRoot":"","sources":["../../src/npmrc/npmrcFileProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nugetCredentialProvider.d.ts","sourceRoot":"","sources":["../../src/npmrc/nugetCredentialProvider.ts"],"names":[],"mappings":"AAcA,KAAK,0BAA0B,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,CAAC,CAIrC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { downloadFile } from "../utils/request.js";
|
|
5
|
+
import { execProcess } from "../utils/exec.js";
|
|
6
|
+
const CredentialProviderVersion = "1.4.1";
|
|
7
|
+
const OutputDir = path.resolve("..", ".bin", "CredentialProvider.Microsoft", "v" + CredentialProviderVersion);
|
|
8
|
+
export async function credentialProviderPat(registry) {
|
|
9
|
+
const nugetFeedUrl = toNugetUrl(registry);
|
|
10
|
+
const toolPath = await getCredentialProvider();
|
|
11
|
+
return await invokeCredentialProvider(toolPath, nugetFeedUrl);
|
|
12
|
+
}
|
|
13
|
+
function toNugetUrl(registry) {
|
|
14
|
+
if (!registry.endsWith("/npm/registry/")) {
|
|
15
|
+
throw new Error(`Registry URL ${registry} is not a valid Azure Artifacts npm registry URL. Expected it to end with '/npm/registry/'`);
|
|
16
|
+
}
|
|
17
|
+
return ("https://" + registry.replace("/npm/registry/", "/nuget/v3/index.json"));
|
|
18
|
+
}
|
|
19
|
+
async function invokeCredentialProvider(toolPath, nugetFeedUrl) {
|
|
20
|
+
let response = "";
|
|
21
|
+
await execProcess(toolPath, ["-U", nugetFeedUrl, "-I", "-F", "Json"], {
|
|
22
|
+
stdio: "pipe",
|
|
23
|
+
processStdOut: (data) => {
|
|
24
|
+
response += data;
|
|
25
|
+
},
|
|
26
|
+
processStdErr: (data) => {
|
|
27
|
+
console.error(data);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
try {
|
|
31
|
+
const value = JSON.parse(response);
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new Error(`Failed to parse CredentialProvider output: ${response}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function tryFileExists(executable) {
|
|
39
|
+
if (fs.existsSync(executable)) {
|
|
40
|
+
return executable;
|
|
41
|
+
}
|
|
42
|
+
else if (fs.existsSync(executable + ".exe")) {
|
|
43
|
+
return executable + ".exe";
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
async function getCredentialProvider() {
|
|
48
|
+
let toolPath = tryFileExists(path.join(os.homedir(), ".nuget", "plugins", "netcore", "CredentialProvider.Microsoft", "CredentialProvider.Microsoft"));
|
|
49
|
+
if (toolPath) {
|
|
50
|
+
return toolPath;
|
|
51
|
+
}
|
|
52
|
+
const downloadedFilePath = path.join(OutputDir, "plugins", "netcore", "CredentialProvider.Microsoft", "CredentialProvider.Microsoft");
|
|
53
|
+
toolPath = tryFileExists(downloadedFilePath);
|
|
54
|
+
if (toolPath) {
|
|
55
|
+
return toolPath;
|
|
56
|
+
}
|
|
57
|
+
await downloadCredentialProvider();
|
|
58
|
+
toolPath = tryFileExists(downloadedFilePath);
|
|
59
|
+
if (toolPath) {
|
|
60
|
+
fs.chmodSync(toolPath, 0o755);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw new Error(`CredentialProvider was not found at expected path after download: ${toolPath}`);
|
|
64
|
+
}
|
|
65
|
+
return toolPath;
|
|
66
|
+
}
|
|
67
|
+
async function downloadCredentialProvider() {
|
|
68
|
+
const downloadUrl = `https://github.com/microsoft/artifacts-credprovider/releases/download/v${CredentialProviderVersion}/Microsoft.Net8.${os.platform()}-${os.arch()}.NuGet.CredentialProvider.tar.gz`;
|
|
69
|
+
const downloadPath = path.join(OutputDir, "CredentialProvider.Microsoft.tar.gz");
|
|
70
|
+
console.log(`🌐 Downloading ${downloadUrl}`);
|
|
71
|
+
await downloadFile(downloadUrl, downloadPath);
|
|
72
|
+
await execProcess("tar", ["-xzf", downloadPath, "-C", OutputDir], {
|
|
73
|
+
stdio: "inherit",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=nugetCredentialProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nugetCredentialProvider.js","sourceRoot":"","sources":["../../src/npmrc/nugetCredentialProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type TelemetryProperties = {
|
|
2
|
+
success: boolean;
|
|
3
|
+
automaticSuccess: boolean;
|
|
4
|
+
platform: string;
|
|
5
|
+
arch: string;
|
|
6
|
+
error: string;
|
|
7
|
+
};
|
|
8
|
+
export type TelemetryClient = {
|
|
9
|
+
LogEvent: (eventName: string, properties: Map<string, string>) => void;
|
|
10
|
+
flush(): void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Logs an node-azure-auth event to telemetry.
|
|
14
|
+
*/
|
|
15
|
+
export declare const logTelemetry: (inputProperties: {
|
|
16
|
+
success?: boolean;
|
|
17
|
+
automaticSuccess?: boolean;
|
|
18
|
+
error?: string;
|
|
19
|
+
}, flush?: boolean, client?: TelemetryClient) => void;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACvE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,iBAAiB;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,QAAQ,OAAO,EACf,SAAS,eAAe,SAmBzB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { platform, arch } from "node:os";
|
|
2
|
+
import { isWsl } from "../utils/is-wsl.js";
|
|
3
|
+
/**
|
|
4
|
+
* Logs an node-azure-auth event to telemetry.
|
|
5
|
+
*/
|
|
6
|
+
export const logTelemetry = (inputProperties, flush, client) => {
|
|
7
|
+
const outputProperties = new Map();
|
|
8
|
+
outputProperties.set("success", inputProperties.success ? "true" : "false");
|
|
9
|
+
outputProperties.set("automaticSuccess", inputProperties.automaticSuccess ? "true" : "false");
|
|
10
|
+
outputProperties.set("error", inputProperties.error || "");
|
|
11
|
+
outputProperties.set("platform", isWsl() ? "wsl" : platform());
|
|
12
|
+
outputProperties.set("arch", arch());
|
|
13
|
+
if (client) {
|
|
14
|
+
client.LogEvent("node-azure-auth", outputProperties);
|
|
15
|
+
if (flush) {
|
|
16
|
+
client.flush();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAe3C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,eAIC,EACD,KAAe,EACf,MAAwB,EACxB,EAAE;IACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5E,gBAAgB,CAAC,GAAG,CAClB,kBAAkB,EAClB,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACpD,CAAC;IACF,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3D,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAErD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a base64 encoded string from a string
|
|
3
|
+
* @param {string} input
|
|
4
|
+
* @returns {string}
|
|
5
|
+
*/
|
|
6
|
+
export declare function toBase64(input: string | undefined): string;
|
|
7
|
+
/**
|
|
8
|
+
* Decode a base64 encoded string
|
|
9
|
+
* @param {string} base64string
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare const fromBase64: (base64string: string) => string;
|
|
13
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,cAAc,MAAM,WACO,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a base64 encoded string from a string
|
|
3
|
+
* @param {string} input
|
|
4
|
+
* @returns {string}
|
|
5
|
+
*/
|
|
6
|
+
export function toBase64(input) {
|
|
7
|
+
return Buffer.from(input || "").toString("base64");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Decode a base64 encoded string
|
|
11
|
+
* @param {string} base64string
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export const fromBase64 = (base64string) => Buffer.from(base64string, "base64").toString("utf8");
|
|
15
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAE,EAAE,CACjD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { exec as _exec } from "node:child_process";
|
|
2
|
+
export declare const exec: typeof _exec.__promisify__;
|
|
3
|
+
/**
|
|
4
|
+
* Executes a command as a child process.
|
|
5
|
+
* @param tool The command to run.
|
|
6
|
+
* @param args The arguments to pass to the command.
|
|
7
|
+
* @param options Options for the child process.
|
|
8
|
+
* @returns A promise that resolves when the process exits.
|
|
9
|
+
*/
|
|
10
|
+
export declare function execProcess(tool: string, args: string[], options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
env?: Record<string, string>;
|
|
13
|
+
stdio?: "pipe" | "inherit" | "ignore";
|
|
14
|
+
shell?: boolean | string;
|
|
15
|
+
processStdOut?: (data: string) => void;
|
|
16
|
+
processStdErr?: (data: string) => void;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAS,MAAM,oBAAoB,CAAC;AAG1D,eAAO,MAAM,IAAI,4BAAmB,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GACA,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { exec as _exec, spawn } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
export const exec = promisify(_exec);
|
|
4
|
+
/**
|
|
5
|
+
* Executes a command as a child process.
|
|
6
|
+
* @param tool The command to run.
|
|
7
|
+
* @param args The arguments to pass to the command.
|
|
8
|
+
* @param options Options for the child process.
|
|
9
|
+
* @returns A promise that resolves when the process exits.
|
|
10
|
+
*/
|
|
11
|
+
export function execProcess(tool, args, options) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
var _a, _b, _c, _d;
|
|
14
|
+
const cwd = (options === null || options === void 0 ? void 0 : options.cwd) || process.cwd();
|
|
15
|
+
console.log(`🚀 Launching [${tool} ${args.join(" ")}] in ${cwd}`);
|
|
16
|
+
const result = spawn(tool, args, {
|
|
17
|
+
cwd: cwd,
|
|
18
|
+
env: (options === null || options === void 0 ? void 0 : options.env) || process.env,
|
|
19
|
+
stdio: (options === null || options === void 0 ? void 0 : options.stdio) || "inherit",
|
|
20
|
+
shell: (options === null || options === void 0 ? void 0 : options.shell) || false,
|
|
21
|
+
});
|
|
22
|
+
if ((options === null || options === void 0 ? void 0 : options.stdio) === "pipe") {
|
|
23
|
+
(_a = result.stdout) === null || _a === void 0 ? void 0 : _a.setEncoding("utf8");
|
|
24
|
+
(_b = result.stdout) === null || _b === void 0 ? void 0 : _b.on("data", function (data) {
|
|
25
|
+
var _a;
|
|
26
|
+
const strData = data.toString("utf8");
|
|
27
|
+
(_a = options === null || options === void 0 ? void 0 : options.processStdOut) === null || _a === void 0 ? void 0 : _a.call(options, strData);
|
|
28
|
+
});
|
|
29
|
+
(_c = result.stderr) === null || _c === void 0 ? void 0 : _c.setEncoding("utf8");
|
|
30
|
+
(_d = result.stderr) === null || _d === void 0 ? void 0 : _d.on("data", function (data) {
|
|
31
|
+
var _a;
|
|
32
|
+
const strData = data.toString("utf8");
|
|
33
|
+
(_a = options === null || options === void 0 ? void 0 : options.processStdErr) === null || _a === void 0 ? void 0 : _a.call(options, strData);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
result.on("exit", (code) => {
|
|
37
|
+
if (code == 0) {
|
|
38
|
+
resolve();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
reject(new Error(`Process ${tool} exited with code ${code}`));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,IAAc,EACd,OAOC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;QACrC,MAAM,GAAG,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,KAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;YAC/B,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,KAAI,OAAO,CAAC,GAAG;YAChC,KAAK,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,KAAI,SAAS;YAClC,KAAK,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,KAAI,KAAK;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,MAAM,EAAE,CAAC;YAC9B,MAAA,MAAM,CAAC,MAAM,0CAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YACnC,MAAA,MAAM,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,UAAU,IAAY;;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,wDAAG,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,MAAA,MAAM,CAAC,MAAM,0CAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YACnC,MAAA,MAAM,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,UAAU,IAAY;;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,wDAAG,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
export async function writeFileLazy(path, content) {
|
|
3
|
+
try {
|
|
4
|
+
const existingContent = await fs.readFile(path, { encoding: "utf-8" });
|
|
5
|
+
if (existingContent === content) {
|
|
6
|
+
// File already up to date, no need to write out content
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
// no-op, proceed to write file as file doesn't exist
|
|
12
|
+
}
|
|
13
|
+
await fs.writeFile(path, content, { encoding: "utf-8" });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=fileUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;YAChC,wDAAwD;YACxD,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,OAAO;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-feed-without-protocol.d.ts","sourceRoot":"","sources":["../../src/utils/get-feed-without-protocol.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,MAMrD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Given the feed url, get the name of the feed without the protocol ("https") at the beginning
|
|
3
|
+
*/
|
|
4
|
+
export const getFeedWithoutProtocol = (feed) => {
|
|
5
|
+
const feedUrl = new URL(feed);
|
|
6
|
+
const protocol = feedUrl.protocol; // will be something like "http:"
|
|
7
|
+
const protocolLength = protocol.length + 2; // we want to strip out the protocol, colon, and double slash
|
|
8
|
+
const feedWithoutProtocol = feedUrl.toString().slice(protocolLength);
|
|
9
|
+
return feedWithoutProtocol;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=get-feed-without-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-feed-without-protocol.js","sourceRoot":"","sources":["../../src/utils/get-feed-without-protocol.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,iCAAiC;IACpE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,6DAA6D;IACzG,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-feed-without-protocol.test.d.ts","sourceRoot":"","sources":["../../src/utils/get-feed-without-protocol.test.ts"],"names":[],"mappings":""}
|