@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.
Files changed (112) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +3 -0
  3. package/lib/.tsbuildinfo +1 -0
  4. package/lib/ado/make-ado-request.d.ts +15 -0
  5. package/lib/ado/make-ado-request.d.ts.map +1 -0
  6. package/lib/ado/make-ado-request.js +37 -0
  7. package/lib/ado/make-ado-request.js.map +1 -0
  8. package/lib/args.d.ts +9 -0
  9. package/lib/args.d.ts.map +1 -0
  10. package/lib/args.js +38 -0
  11. package/lib/args.js.map +1 -0
  12. package/lib/azureauth/ado.d.ts +26 -0
  13. package/lib/azureauth/ado.d.ts.map +1 -0
  14. package/lib/azureauth/ado.js +85 -0
  15. package/lib/azureauth/ado.js.map +1 -0
  16. package/lib/azureauth/ado.test.d.ts +2 -0
  17. package/lib/azureauth/ado.test.d.ts.map +1 -0
  18. package/lib/azureauth/ado.test.js +154 -0
  19. package/lib/azureauth/ado.test.js.map +1 -0
  20. package/lib/azureauth/azureauth-command.d.ts +11 -0
  21. package/lib/azureauth/azureauth-command.d.ts.map +1 -0
  22. package/lib/azureauth/azureauth-command.js +30 -0
  23. package/lib/azureauth/azureauth-command.js.map +1 -0
  24. package/lib/azureauth/is-azureauth-installed.d.ts +7 -0
  25. package/lib/azureauth/is-azureauth-installed.d.ts.map +1 -0
  26. package/lib/azureauth/is-azureauth-installed.js +28 -0
  27. package/lib/azureauth/is-azureauth-installed.js.map +1 -0
  28. package/lib/azureauth/is-azureauth-installed.test.d.ts +2 -0
  29. package/lib/azureauth/is-azureauth-installed.test.d.ts.map +1 -0
  30. package/lib/azureauth/is-azureauth-installed.test.js +54 -0
  31. package/lib/azureauth/is-azureauth-installed.test.js.map +1 -0
  32. package/lib/azureauth/is-supported-platform-and-architecture.d.ts +6 -0
  33. package/lib/azureauth/is-supported-platform-and-architecture.d.ts.map +1 -0
  34. package/lib/azureauth/is-supported-platform-and-architecture.js +16 -0
  35. package/lib/azureauth/is-supported-platform-and-architecture.js.map +1 -0
  36. package/lib/cli.d.ts +4 -0
  37. package/lib/cli.d.ts.map +1 -0
  38. package/lib/cli.js +125 -0
  39. package/lib/cli.js.map +1 -0
  40. package/lib/fileProvider.d.ts +35 -0
  41. package/lib/fileProvider.d.ts.map +1 -0
  42. package/lib/fileProvider.js +79 -0
  43. package/lib/fileProvider.js.map +1 -0
  44. package/lib/index.d.ts +10 -0
  45. package/lib/index.d.ts.map +1 -0
  46. package/lib/index.js +9 -0
  47. package/lib/index.js.map +1 -0
  48. package/lib/npmrc/generate-npmrc-pat.d.ts +6 -0
  49. package/lib/npmrc/generate-npmrc-pat.d.ts.map +1 -0
  50. package/lib/npmrc/generate-npmrc-pat.js +49 -0
  51. package/lib/npmrc/generate-npmrc-pat.js.map +1 -0
  52. package/lib/npmrc/npmrcFileProvider.d.ts +13 -0
  53. package/lib/npmrc/npmrcFileProvider.d.ts.map +1 -0
  54. package/lib/npmrc/npmrcFileProvider.js +149 -0
  55. package/lib/npmrc/npmrcFileProvider.js.map +1 -0
  56. package/lib/npmrc/nugetCredentialProvider.d.ts +7 -0
  57. package/lib/npmrc/nugetCredentialProvider.d.ts.map +1 -0
  58. package/lib/npmrc/nugetCredentialProvider.js +76 -0
  59. package/lib/npmrc/nugetCredentialProvider.js.map +1 -0
  60. package/lib/telemetry/index.d.ts +20 -0
  61. package/lib/telemetry/index.d.ts.map +1 -0
  62. package/lib/telemetry/index.js +20 -0
  63. package/lib/telemetry/index.js.map +1 -0
  64. package/lib/utils/encoding.d.ts +13 -0
  65. package/lib/utils/encoding.d.ts.map +1 -0
  66. package/lib/utils/encoding.js +15 -0
  67. package/lib/utils/encoding.js.map +1 -0
  68. package/lib/utils/exec.d.ts +18 -0
  69. package/lib/utils/exec.d.ts.map +1 -0
  70. package/lib/utils/exec.js +46 -0
  71. package/lib/utils/exec.js.map +1 -0
  72. package/lib/utils/fileUtils.d.ts +2 -0
  73. package/lib/utils/fileUtils.d.ts.map +1 -0
  74. package/lib/utils/fileUtils.js +16 -0
  75. package/lib/utils/fileUtils.js.map +1 -0
  76. package/lib/utils/get-feed-without-protocol.d.ts +5 -0
  77. package/lib/utils/get-feed-without-protocol.d.ts.map +1 -0
  78. package/lib/utils/get-feed-without-protocol.js +11 -0
  79. package/lib/utils/get-feed-without-protocol.js.map +1 -0
  80. package/lib/utils/get-feed-without-protocol.test.d.ts +2 -0
  81. package/lib/utils/get-feed-without-protocol.test.d.ts.map +1 -0
  82. package/lib/utils/get-feed-without-protocol.test.js +31 -0
  83. package/lib/utils/get-feed-without-protocol.test.js.map +1 -0
  84. package/lib/utils/get-organization-from-feed-url.d.ts +8 -0
  85. package/lib/utils/get-organization-from-feed-url.d.ts.map +1 -0
  86. package/lib/utils/get-organization-from-feed-url.js +81 -0
  87. package/lib/utils/get-organization-from-feed-url.js.map +1 -0
  88. package/lib/utils/get-organization-from-feed-url.test.d.ts +2 -0
  89. package/lib/utils/get-organization-from-feed-url.test.d.ts.map +1 -0
  90. package/lib/utils/get-organization-from-feed-url.test.js +19 -0
  91. package/lib/utils/get-organization-from-feed-url.test.js.map +1 -0
  92. package/lib/utils/is-codespaces.d.ts +6 -0
  93. package/lib/utils/is-codespaces.d.ts.map +1 -0
  94. package/lib/utils/is-codespaces.js +10 -0
  95. package/lib/utils/is-codespaces.js.map +1 -0
  96. package/lib/utils/is-wsl.d.ts +6 -0
  97. package/lib/utils/is-wsl.d.ts.map +1 -0
  98. package/lib/utils/is-wsl.js +9 -0
  99. package/lib/utils/is-wsl.js.map +1 -0
  100. package/lib/utils/partition.d.ts +2 -0
  101. package/lib/utils/partition.d.ts.map +1 -0
  102. package/lib/utils/partition.js +15 -0
  103. package/lib/utils/partition.js.map +1 -0
  104. package/lib/utils/request.d.ts +15 -0
  105. package/lib/utils/request.d.ts.map +1 -0
  106. package/lib/utils/request.js +135 -0
  107. package/lib/utils/request.js.map +1 -0
  108. package/lib/yarnrc/yarnrcFileProvider.d.ts +27 -0
  109. package/lib/yarnrc/yarnrcFileProvider.d.ts.map +1 -0
  110. package/lib/yarnrc/yarnrcFileProvider.js +96 -0
  111. package/lib/yarnrc/yarnrcFileProvider.js.map +1 -0
  112. package/package.json +48 -0
@@ -0,0 +1,154 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { beforeEach, expect, test, vi } from "vitest";
3
+ import { exec } from "../utils/exec.js";
4
+ import * as utils from "../utils/is-wsl.js";
5
+ import { adoPat } from "./ado.js";
6
+ vi.mock("child_process", async () => {
7
+ return {
8
+ spawnSync: vi.fn(() => {
9
+ error: {
10
+ }
11
+ }),
12
+ };
13
+ });
14
+ vi.mock("./is-azureauth-installed.js", async () => {
15
+ return {
16
+ isAzureAuthInstalled: vi.fn(() => true),
17
+ };
18
+ });
19
+ vi.mock("../utils/exec.js", async () => {
20
+ return {
21
+ exec: vi.fn(),
22
+ };
23
+ });
24
+ vi.mock("../utils/is-wsl.js", async () => {
25
+ return {
26
+ isWsl: vi.fn(),
27
+ };
28
+ });
29
+ vi.mock("./is-supported-platform-and-architecture.js", async () => {
30
+ return {
31
+ isSupportedPlatformAndArchitecture: vi.fn(() => true),
32
+ };
33
+ });
34
+ beforeEach(() => {
35
+ vi.clearAllMocks();
36
+ });
37
+ test("it should spawn azureauth", async () => {
38
+ vi.mocked(utils.isWsl).mockReturnValue(false);
39
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
40
+ stdout: '{ "token": "foobarabc123" }',
41
+ stderr: "",
42
+ }));
43
+ const results = (await adoPat({
44
+ promptHint: "hint",
45
+ organization: "org",
46
+ displayName: "test display",
47
+ scope: ["foobar"],
48
+ output: "json",
49
+ domain: "baz.com",
50
+ timeout: "200",
51
+ }));
52
+ expect(exec).toHaveBeenCalledWith('npm exec --silent --yes azureauth -- ado pat --prompt-hint "hint" --organization org --display-name test display --scope foobar --output json --domain baz.com --timeout 200', expect.anything());
53
+ expect(results.token).toBe("foobarabc123");
54
+ });
55
+ test("it should spawnSync azureauth on wsl", async () => {
56
+ vi.mocked(spawnSync).mockReturnValue({
57
+ status: 0,
58
+ stdout: '{ "token": "foobarabc123" }',
59
+ });
60
+ vi.mocked(utils.isWsl).mockReturnValue(true);
61
+ const results = (await adoPat({
62
+ promptHint: "hint",
63
+ organization: "org",
64
+ displayName: "test display",
65
+ scope: ["foobar"],
66
+ output: "json",
67
+ domain: "baz.com",
68
+ timeout: "200",
69
+ }));
70
+ expect(spawnSync).toHaveBeenCalledWith("npm", [
71
+ "exec",
72
+ "--silent",
73
+ "--yes",
74
+ "azureauth",
75
+ "--",
76
+ "ado",
77
+ "pat",
78
+ "--prompt-hint hint",
79
+ "--organization org",
80
+ "--display-name test display",
81
+ "--scope foobar",
82
+ "--output json",
83
+ "--domain baz.com",
84
+ "--timeout 200",
85
+ ], expect.anything());
86
+ expect(results.token).toBe("foobarabc123");
87
+ });
88
+ test("it should handle errors on wsl if azureauth exit code is not 0", async () => {
89
+ vi.mocked(utils.isWsl).mockReturnValue(true);
90
+ vi.mocked(spawnSync).mockReturnValue({
91
+ status: 1,
92
+ stdout: "",
93
+ stderr: "an error",
94
+ });
95
+ await expect(adoPat({
96
+ promptHint: "hint",
97
+ organization: "org",
98
+ displayName: "test display",
99
+ scope: ["foobar"],
100
+ output: "json",
101
+ domain: "baz.com",
102
+ timeout: "200",
103
+ })).rejects.toThrowError("Failed to get Ado Pat from system AzureAuth: Azure Auth failed with exit code 1: an error");
104
+ });
105
+ test("it should handle errors on wsl if azureauth has stderr output", async () => {
106
+ vi.mocked(utils.isWsl).mockReturnValue(true);
107
+ vi.mocked(spawnSync).mockReturnValue({
108
+ status: 0,
109
+ stdout: "",
110
+ stderr: "an error",
111
+ });
112
+ await expect(adoPat({
113
+ promptHint: "hint",
114
+ organization: "org",
115
+ displayName: "test display",
116
+ scope: ["foobar"],
117
+ output: "json",
118
+ domain: "baz.com",
119
+ timeout: "200",
120
+ })).rejects.toThrowError("Failed to get Ado Pat from system AzureAuth: Azure Auth failed with exit code 0: an error");
121
+ });
122
+ test("it should handle json errors", async () => {
123
+ vi.mocked(utils.isWsl).mockReturnValue(false);
124
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
125
+ stdout: "an error",
126
+ stderr: "",
127
+ }));
128
+ await expect(adoPat({
129
+ promptHint: "hint",
130
+ organization: "org",
131
+ displayName: "test display",
132
+ scope: ["foobar"],
133
+ output: "json",
134
+ domain: "baz.com",
135
+ timeout: "200",
136
+ })).rejects.toThrowError("Failed to parse JSON output: an error");
137
+ });
138
+ test("it should handle errors from azureauth-cli", async () => {
139
+ vi.mocked(utils.isWsl).mockReturnValue(false);
140
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
141
+ stdout: "",
142
+ stderr: "an error",
143
+ }));
144
+ await expect(adoPat({
145
+ promptHint: "hint",
146
+ organization: "org",
147
+ displayName: "test display",
148
+ scope: ["foobar"],
149
+ output: "json",
150
+ domain: "baz.com",
151
+ timeout: "200",
152
+ })).rejects.toThrowError("Failed to get Ado Pat from npx AzureAuth: an error");
153
+ });
154
+ //# sourceMappingURL=ado.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ado.test.js","sourceRoot":"","sources":["../../src/azureauth/ado.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const clearMemo: () => void;
2
+ /**
3
+ * Get the executable path of azureauth command
4
+ * @returns the string of the executable command to run azureauth, and any
5
+ * necessary environment variables if using npx
6
+ */
7
+ export declare const azureAuthCommand: () => {
8
+ command: string[];
9
+ env: Record<string, string>;
10
+ };
11
+ //# sourceMappingURL=azureauth-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azureauth-command.d.ts","sourceRoot":"","sources":["../../src/azureauth/azureauth-command.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,YAErB,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAO;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAO7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { isWsl } from "../utils/is-wsl.js";
2
+ let memo = undefined;
3
+ export const clearMemo = () => {
4
+ memo = void 0;
5
+ };
6
+ const npxAzureAuthCommand = [
7
+ "npm",
8
+ "exec",
9
+ "--silent",
10
+ "--yes",
11
+ "azureauth",
12
+ "--",
13
+ ];
14
+ const npxEnv = {
15
+ ...process.env,
16
+ // Use the version from the public registry to avoid a cycle
17
+ npm_config_registry: "https://registry.npmjs.org",
18
+ };
19
+ /**
20
+ * Get the executable path of azureauth command
21
+ * @returns the string of the executable command to run azureauth, and any
22
+ * necessary environment variables if using npx
23
+ */
24
+ export const azureAuthCommand = () => {
25
+ if (!memo) {
26
+ memo = isWsl() ? ["azureauth.exe"] : npxAzureAuthCommand;
27
+ }
28
+ return { command: memo, env: npxEnv };
29
+ };
30
+ //# sourceMappingURL=azureauth-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azureauth-command.js","sourceRoot":"","sources":["../../src/azureauth/azureauth-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,IAAI,IAAI,GAAyB,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,IAAI,GAAG,KAAK,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAa;IACpC,KAAK;IACL,MAAM;IACN,UAAU;IACV,OAAO;IACP,WAAW;IACX,IAAI;CACL,CAAC;AACF,MAAM,MAAM,GAAG;IACb,GAAG,OAAO,CAAC,GAAG;IACd,4DAA4D;IAC5D,mBAAmB,EAAE,4BAA4B;CAClD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAG9B,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const clearMemo: () => void;
2
+ /**
3
+ * Determine if a valid version (>=0.8.0.0) is installed
4
+ * @returns { boolean } Whether a valid version of azureauth is installed
5
+ */
6
+ export declare const isAzureAuthInstalled: () => Promise<boolean>;
7
+ //# sourceMappingURL=is-azureauth-installed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-azureauth-installed.d.ts","sourceRoot":"","sources":["../../src/azureauth/is-azureauth-installed.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,YAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,OAAO,CAiB5D,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { exec } from "../utils/exec.js";
2
+ import { azureAuthCommand } from "./azureauth-command.js";
3
+ let memo = undefined;
4
+ export const clearMemo = () => {
5
+ memo = void 0;
6
+ };
7
+ /**
8
+ * Determine if a valid version (>=0.8.0.0) is installed
9
+ * @returns { boolean } Whether a valid version of azureauth is installed
10
+ */
11
+ export const isAzureAuthInstalled = async () => {
12
+ if (memo === undefined) {
13
+ const { command: authCommand, env } = azureAuthCommand();
14
+ const command = `${authCommand.join(" ")} --version`;
15
+ try {
16
+ const result = await exec(command, { env });
17
+ // version must be >=0.8.0.0
18
+ const [, minor] = result.stdout.split(".");
19
+ memo = parseInt(minor) >= 8;
20
+ }
21
+ catch {
22
+ // azureauth not installed
23
+ memo = false;
24
+ }
25
+ }
26
+ return memo;
27
+ };
28
+ //# sourceMappingURL=is-azureauth-installed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-azureauth-installed.js","sourceRoot":"","sources":["../../src/azureauth/is-azureauth-installed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,IAAI,IAAI,GAAwB,SAAS,CAAC;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,IAAI,GAAG,KAAK,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAsB,EAAE;IAC/D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,4BAA4B;YAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;YAC1B,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=is-azureauth-installed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-azureauth-installed.test.d.ts","sourceRoot":"","sources":["../../src/azureauth/is-azureauth-installed.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { expect, test, vi, beforeEach } from "vitest";
2
+ import { isAzureAuthInstalled, clearMemo } from "./is-azureauth-installed.js";
3
+ import { clearMemo as clearAuthMemo } from "./azureauth-command.js";
4
+ import { exec } from "../utils/exec.js";
5
+ import * as utils from "../utils/is-wsl.js";
6
+ vi.mock("../utils/is-wsl.js", async () => {
7
+ return {
8
+ isWsl: vi.fn(),
9
+ };
10
+ });
11
+ vi.mock("../utils/exec.js", async () => {
12
+ return {
13
+ exec: vi.fn(),
14
+ };
15
+ });
16
+ beforeEach(() => {
17
+ vi.clearAllMocks();
18
+ clearAuthMemo();
19
+ clearMemo();
20
+ });
21
+ test("when azure auth is not installed", async () => {
22
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
23
+ stdout: "",
24
+ stderr: "",
25
+ }));
26
+ vi.mocked(utils.isWsl).mockReturnValue(false);
27
+ const azureAuthInstalled = await isAzureAuthInstalled();
28
+ expect(vi.mocked(exec)).toBeCalled();
29
+ expect(azureAuthInstalled).toBe(false);
30
+ });
31
+ test("when azure auth is installed", async () => {
32
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
33
+ stdout: "0.8.5",
34
+ stderr: "",
35
+ }));
36
+ vi.mocked(utils.isWsl).mockReturnValue(false);
37
+ const azureAuthInstalled = await isAzureAuthInstalled();
38
+ expect(vi.mocked(exec)).toBeCalled();
39
+ expect(azureAuthInstalled).toBe(true);
40
+ });
41
+ test("when azure auth is installed on windows", async () => {
42
+ vi.mocked(exec).mockReturnValue(Promise.resolve({
43
+ stdout: "0.8.5",
44
+ stderr: "",
45
+ }));
46
+ vi.mocked(utils.isWsl).mockReturnValue(true);
47
+ const azureAuthInstalled = await isAzureAuthInstalled();
48
+ expect(vi.mocked(exec)).toBeCalled();
49
+ expect(vi.mocked(exec)).toBeCalledWith("azureauth.exe --version", {
50
+ env: expect.any(Object),
51
+ });
52
+ expect(azureAuthInstalled).toBe(true);
53
+ });
54
+ //# sourceMappingURL=is-azureauth-installed.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-azureauth-installed.test.js","sourceRoot":"","sources":["../../src/azureauth/is-azureauth-installed.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Determines if the currently running platform is supported by azureauth. Currently, supported platforms are Windows, Mac & WSL
3
+ * @returns { boolean } if the current platform is supported by azureauth
4
+ */
5
+ export declare const isSupportedPlatformAndArchitecture: () => boolean;
6
+ //# sourceMappingURL=is-supported-platform-and-architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-supported-platform-and-architecture.d.ts","sourceRoot":"","sources":["../../src/azureauth/is-supported-platform-and-architecture.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QAAO,OAWrD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { arch, platform } from "node:os";
2
+ import { isWsl } from "../utils/is-wsl.js";
3
+ /**
4
+ * Determines if the currently running platform is supported by azureauth. Currently, supported platforms are Windows, Mac & WSL
5
+ * @returns { boolean } if the current platform is supported by azureauth
6
+ */
7
+ export const isSupportedPlatformAndArchitecture = () => {
8
+ const supportedPlatformsAndArchitectures = {
9
+ win32: ["x64"],
10
+ darwin: ["x64", "arm64"],
11
+ };
12
+ return (isWsl() ||
13
+ (supportedPlatformsAndArchitectures[platform()] &&
14
+ supportedPlatformsAndArchitectures[platform()].includes(arch())));
15
+ };
16
+ //# sourceMappingURL=is-supported-platform-and-architecture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-supported-platform-and-architecture.js","sourceRoot":"","sources":["../../src/azureauth/is-supported-platform-and-architecture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAY,EAAE;IAC9D,MAAM,kCAAkC,GAA6B;QACnE,KAAK,EAAE,CAAC,KAAK,CAAC;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;KACzB,CAAC;IAEF,OAAO,CACL,KAAK,EAAE;QACP,CAAC,kCAAkC,CAAC,QAAQ,EAAE,CAAC;YAC7C,kCAAkC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CACnE,CAAC;AACJ,CAAC,CAAC"}
package/lib/cli.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { Args } from "./args.js";
2
+ export declare const run: (args: Args) => Promise<null | boolean>;
3
+ export declare function main(): Promise<boolean>;
4
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAStC,eAAO,MAAM,GAAG,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAqG5D,CAAC;AAcF,wBAAsB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAiC7C"}
package/lib/cli.js ADDED
@@ -0,0 +1,125 @@
1
+ import { arch, platform } from "node:os";
2
+ import process from "node:process";
3
+ import { isSupportedPlatformAndArchitecture } from "./azureauth/is-supported-platform-and-architecture.js";
4
+ import { isCodespaces } from "./utils/is-codespaces.js";
5
+ import { logTelemetry } from "./telemetry/index.js";
6
+ import { parseArgs } from "./args.js";
7
+ import { NpmrcFileProvider } from "./npmrc/npmrcFileProvider.js";
8
+ import { defaultEmail, defaultUser } from "./fileProvider.js";
9
+ import { generateNpmrcPat } from "./npmrc/generate-npmrc-pat.js";
10
+ import { partition } from "./utils/partition.js";
11
+ import { YarnRcFileProvider } from "./yarnrc/yarnrcFileProvider.js";
12
+ export const run = async (args) => {
13
+ const fileProviders = [
14
+ new NpmrcFileProvider(args.configFile),
15
+ new YarnRcFileProvider(args.configFile),
16
+ ];
17
+ const validatedFeeds = [];
18
+ if (args.doValidCheck || args.skipAuth) {
19
+ for (const fileProvider of fileProviders) {
20
+ if (await fileProvider.isSupportedInRepo()) {
21
+ validatedFeeds.push(...(await fileProvider.validateAllUsedFeeds()));
22
+ }
23
+ }
24
+ }
25
+ // Filter to feeds to only feeds that were not authenticated and are actually
26
+ // azure devops feeds by checking if we discovered the adoOrganization for it.
27
+ const invalidFeeds = validatedFeeds.filter((feed) => !feed.isValid && feed.feed.adoOrganization);
28
+ const invalidFeedCount = invalidFeeds.length;
29
+ if (args.doValidCheck && invalidFeedCount == 0) {
30
+ return null;
31
+ }
32
+ if (args.skipAuth && invalidFeedCount != 0) {
33
+ logTelemetry({ success: false, automaticSuccess: false, error: "invalid token(s)" }, true);
34
+ console.log(invalidFeedCount == 1
35
+ ? "❌ Your token is invalid."
36
+ : `❌ ${invalidFeedCount} tokens are invalid.`);
37
+ return false;
38
+ }
39
+ try {
40
+ console.log("🔑 Authenticating to package feed...");
41
+ const feedsToGetTokenFor = new Map();
42
+ for (const feed of invalidFeeds.map((feed) => feed.feed)) {
43
+ feedsToGetTokenFor.set(feed.adoOrganization, feed.registry);
44
+ }
45
+ // get a token for each feed
46
+ const organizationPatMap = {};
47
+ for (const [org, feed] of feedsToGetTokenFor) {
48
+ organizationPatMap[org] = await generateNpmrcPat(org, feed, false, args.azureAuthLocation);
49
+ }
50
+ // Update the pat in the invalid feeds.
51
+ for (const invalidFeed of invalidFeeds) {
52
+ const feed = invalidFeed.feed;
53
+ const authToken = organizationPatMap[feed.adoOrganization];
54
+ if (!authToken) {
55
+ console.log(`❌ Failed to obtain pat for ${feed.registry} via ${invalidFeed.fileProvider.id}`);
56
+ return false;
57
+ }
58
+ feed.authToken = authToken;
59
+ if (!feed.email) {
60
+ feed.email = defaultEmail;
61
+ }
62
+ if (!feed.userName) {
63
+ feed.userName = defaultUser;
64
+ }
65
+ }
66
+ const invalidFeedsByProvider = partition(invalidFeeds, (feed) => feed.fileProvider);
67
+ for (const [fileProvider, updatedFeeds] of invalidFeedsByProvider) {
68
+ await fileProvider.writeWorkspaceRegistries(updatedFeeds.map((updatedFeed) => updatedFeed.feed));
69
+ }
70
+ return true;
71
+ }
72
+ catch (error) {
73
+ logTelemetry({
74
+ success: false,
75
+ automaticSuccess: false,
76
+ error: error.message,
77
+ }, true);
78
+ console.log("Encountered error while performing auth", error);
79
+ return false;
80
+ }
81
+ };
82
+ if (isCodespaces()) {
83
+ // ignore codespaces setups
84
+ process.exit(0);
85
+ }
86
+ if (!isSupportedPlatformAndArchitecture()) {
87
+ const errorMessage = `Platform ${platform()} and architecture ${arch()} not supported for automatic authentication.`;
88
+ console.log(errorMessage);
89
+ logTelemetry({ success: false, error: errorMessage }, true);
90
+ process.exit(0);
91
+ }
92
+ export async function main() {
93
+ const args = parseArgs(process.argv);
94
+ try {
95
+ const result = await run(args);
96
+ if (result === null) {
97
+ // current auth is valid, do nothing
98
+ logTelemetry({ success: true });
99
+ console.log("✅ Current authentication is valid");
100
+ }
101
+ else if (result) {
102
+ // automatic auth was performed
103
+ // advertise success
104
+ logTelemetry({ success: true, automaticSuccess: true });
105
+ console.log("✅ Automatic authentication successful");
106
+ // if the user specified an exit code for reauthenticate, exit
107
+ if (args.exitCodeOnReAuthenticate !== undefined) {
108
+ process.exit(args.exitCodeOnReAuthenticate);
109
+ }
110
+ }
111
+ else {
112
+ // automatic auth failed (for some reason)
113
+ // advertise failure and link wiki to fix
114
+ console.log("❌ Authentication to package feed failed.");
115
+ return false;
116
+ }
117
+ }
118
+ catch (error) {
119
+ console.error(error);
120
+ console.log("❌ Authentication to package feed failed.");
121
+ return false;
122
+ }
123
+ return true;
124
+ }
125
+ //# sourceMappingURL=cli.js.map
package/lib/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Default user to be used in the .npmrc
3
+ */
4
+ export declare const defaultUser = "me";
5
+ /**
6
+ * Default email to be used in the .npmrc
7
+ */
8
+ export declare const defaultEmail = "me@example.com";
9
+ export type Feed = {
10
+ registry: string;
11
+ adoOrganization: string;
12
+ userName?: string;
13
+ email?: string;
14
+ authToken?: string;
15
+ };
16
+ export type ValidatedFeed = {
17
+ feed: Feed;
18
+ isValid: boolean;
19
+ fileProvider: FileProvider;
20
+ };
21
+ export declare abstract class FileProvider {
22
+ id: string;
23
+ workspaceFileName: string;
24
+ workspaceFilePath: string;
25
+ userFilePath: string;
26
+ feeds: Map<string, Feed>;
27
+ constructor(id: string, workspaceFileName: string, configFile?: string);
28
+ isSupportedInRepo(): Promise<boolean>;
29
+ validateAllUsedFeeds(): Promise<ValidatedFeed[]>;
30
+ abstract prepUserFile(): Promise<void>;
31
+ abstract getUserFeeds(): Promise<Map<string, Feed>>;
32
+ abstract getWorkspaceRegistries(): Promise<string[]>;
33
+ abstract writeWorkspaceRegistries(feedsToPatch: Iterable<Feed>): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=fileProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileProvider.d.ts","sourceRoot":"","sources":["../src/fileProvider.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,8BAAsB,YAAY;IAOvB,EAAE,EAAE,MAAM;IACV,iBAAiB,EAAE,MAAM;IAP3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAGvB,EAAE,EAAE,MAAM,EACV,iBAAiB,EAAE,MAAM,EAChC,UAAU,CAAC,EAAE,MAAM;IAiBR,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAuC7D,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IACpD,QAAQ,CAAC,wBAAwB,CAC/B,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;CACjB"}
@@ -0,0 +1,79 @@
1
+ import { join } from "node:path";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { homedir } from "node:os";
5
+ // Index into workspace-tools to save 100Kb in the final bundle
6
+ import { getWorkspaceManagerRoot } from "workspace-tools/lib/workspaces/getWorkspaceRoot.js";
7
+ import { getOrganizationFromFeedUrl } from "./utils/get-organization-from-feed-url.js";
8
+ import { makeADORequest } from "./ado/make-ado-request.js";
9
+ /**
10
+ * Default user to be used in the .npmrc
11
+ */
12
+ export const defaultUser = "me";
13
+ /**
14
+ * Default email to be used in the .npmrc
15
+ */
16
+ export const defaultEmail = "me@example.com";
17
+ export class FileProvider {
18
+ constructor(id, workspaceFileName, configFile) {
19
+ this.id = id;
20
+ this.workspaceFileName = workspaceFileName;
21
+ let workspaceFilePath = undefined;
22
+ if (configFile && path.basename(configFile) === this.workspaceFileName) {
23
+ workspaceFilePath = path.resolve(configFile);
24
+ }
25
+ else {
26
+ const workspaceRoot = getWorkspaceManagerRoot(process.cwd()) || "";
27
+ workspaceFilePath = join(workspaceRoot, this.workspaceFileName);
28
+ }
29
+ this.workspaceFilePath = workspaceFilePath;
30
+ const userHome = process.env["HOME"] || process.env["USERPROFILE"] || homedir() || "";
31
+ this.userFilePath = join(userHome, workspaceFileName);
32
+ this.feeds = new Map();
33
+ }
34
+ async isSupportedInRepo() {
35
+ try {
36
+ await fs.access(this.workspaceFilePath);
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ return true;
42
+ }
43
+ async validateAllUsedFeeds() {
44
+ await this.prepUserFile();
45
+ const result = [];
46
+ const workspaceRegistries = await this.getWorkspaceRegistries();
47
+ const userFeeds = await this.getUserFeeds();
48
+ // check each feed for validity
49
+ for (const registry of workspaceRegistries) {
50
+ const feed = userFeeds.get(registry);
51
+ if (feed) {
52
+ let feedIsValid = true;
53
+ try {
54
+ await makeADORequest({
55
+ password: feed.authToken || "",
56
+ organization: feed.adoOrganization,
57
+ });
58
+ }
59
+ catch {
60
+ feedIsValid = false;
61
+ }
62
+ result.push({ feed: feed, isValid: feedIsValid, fileProvider: this });
63
+ }
64
+ else {
65
+ // No representation of the token in the users config file.
66
+ result.push({
67
+ feed: {
68
+ registry: registry,
69
+ adoOrganization: getOrganizationFromFeedUrl(registry),
70
+ },
71
+ isValid: false,
72
+ fileProvider: this,
73
+ });
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ }
79
+ //# sourceMappingURL=fileProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileProvider.js","sourceRoot":"","sources":["../src/fileProvider.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export { YarnRcFileProvider } from "./yarnrc/yarnrcFileProvider.js";
2
+ export { NpmrcFileProvider } from "./npmrc/npmrcFileProvider.js";
3
+ export type { Feed, ValidatedFeed } from "./fileProvider.js";
4
+ export { defaultUser, defaultEmail, FileProvider } from "./fileProvider.js";
5
+ export { generateNpmrcPat } from "./npmrc/generate-npmrc-pat.js";
6
+ export { getOrganizationFromFeedUrl } from "./utils/get-organization-from-feed-url.js";
7
+ export { partition } from "./utils/partition.js";
8
+ export { logTelemetry } from "./telemetry/index.js";
9
+ export { main } from "./cli.js";
10
+ //# sourceMappingURL=index.d.ts.map