diff --git a/.gitignore b/.gitignore index cf767636080ce..98b69eec8fce5 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,5 @@ tap-testdir*/ !/workspaces/libnpmsearch/ !/workspaces/libnpmteam/ !/workspaces/libnpmversion/ + +node_modules/ \ No newline at end of file diff --git a/.npmrc b/.npmrc index 63cd3a3b11d06..ccb811f14a926 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,3 @@ -; This file is automatically added by @npmcli/template-oss. Do not edit. - -package-lock=true +# Auto generated file from Gardener Plugin CentralFeedServiceAdoptionPlugin +registry=https://pkgs.dev.azure.com/msasg/bing_and_ipg/_packaging/bing_and_ipg_PublicPackages/npm/registry/ +always-auth=true diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index cb51908fc2283..6dfeb426f294b 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -263,6 +263,47 @@ graph LR; agent-base-->debug; aggregate-error-->clean-stack; aggregate-error-->indent-string; + azure-abort-controller-->tslib; + azure-core-auth-->azure-abort-controller["@azure/abort-controller"]; + azure-core-auth-->azure-core-util["@azure/core-util"]; + azure-core-auth-->tslib; + azure-core-client-->azure-abort-controller["@azure/abort-controller"]; + azure-core-client-->azure-core-auth["@azure/core-auth"]; + azure-core-client-->azure-core-rest-pipeline["@azure/core-rest-pipeline"]; + azure-core-client-->azure-core-tracing["@azure/core-tracing"]; + azure-core-client-->azure-core-util["@azure/core-util"]; + azure-core-client-->azure-logger["@azure/logger"]; + azure-core-client-->tslib; + azure-core-rest-pipeline-->azure-abort-controller["@azure/abort-controller"]; + azure-core-rest-pipeline-->azure-core-auth["@azure/core-auth"]; + azure-core-rest-pipeline-->azure-core-tracing["@azure/core-tracing"]; + azure-core-rest-pipeline-->azure-core-util["@azure/core-util"]; + azure-core-rest-pipeline-->azure-logger["@azure/logger"]; + azure-core-rest-pipeline-->http-proxy-agent; + azure-core-rest-pipeline-->https-proxy-agent; + azure-core-rest-pipeline-->tslib; + azure-core-tracing-->tslib; + azure-core-util-->azure-abort-controller["@azure/abort-controller"]; + azure-core-util-->tslib; + azure-identity-->azure-abort-controller["@azure/abort-controller"]; + azure-identity-->azure-core-auth["@azure/core-auth"]; + azure-identity-->azure-core-client["@azure/core-client"]; + azure-identity-->azure-core-rest-pipeline["@azure/core-rest-pipeline"]; + azure-identity-->azure-core-tracing["@azure/core-tracing"]; + azure-identity-->azure-core-util["@azure/core-util"]; + azure-identity-->azure-logger["@azure/logger"]; + azure-identity-->azure-msal-browser["@azure/msal-browser"]; + azure-identity-->azure-msal-node["@azure/msal-node"]; + azure-identity-->events; + azure-identity-->jws; + azure-identity-->open; + azure-identity-->stoppable; + azure-identity-->tslib; + azure-logger-->tslib; + azure-msal-browser-->azure-msal-common["@azure/msal-common"]; + azure-msal-node-->azure-msal-common["@azure/msal-common"]; + azure-msal-node-->jsonwebtoken; + azure-msal-node-->uuid; bin-links-->cmd-shim; bin-links-->npm-normalize-package-bin; bin-links-->proc-log; @@ -288,6 +329,7 @@ graph LR; cross-spawn-->shebang-command; cross-spawn-->which; debug-->ms; + ecdsa-sig-formatter-->safe-buffer; encoding-->iconv-lite; foreground-child-->cross-spawn; foreground-child-->signal-exit; @@ -315,6 +357,7 @@ graph LR; ip-address-->jsbn; ip-address-->sprintf-js; is-cidr-->cidr-regex; + is-wsl-->is-docker; isaacs-cliui-->string-width-cjs; isaacs-cliui-->string-width; isaacs-cliui-->strip-ansi-cjs; @@ -323,6 +366,21 @@ graph LR; isaacs-cliui-->wrap-ansi; jackspeak-->isaacs-cliui["@isaacs/cliui"]; jackspeak-->pkgjs-parseargs["@pkgjs/parseargs"]; + jsonwebtoken-->jws; + jsonwebtoken-->lodash.includes; + jsonwebtoken-->lodash.isboolean; + jsonwebtoken-->lodash.isinteger; + jsonwebtoken-->lodash.isnumber; + jsonwebtoken-->lodash.isplainobject; + jsonwebtoken-->lodash.isstring; + jsonwebtoken-->lodash.once; + jsonwebtoken-->ms; + jsonwebtoken-->semver; + jwa-->buffer-equal-constant-time; + jwa-->ecdsa-sig-formatter; + jwa-->safe-buffer; + jws-->jwa; + jws-->safe-buffer; libnpmaccess-->nock; libnpmaccess-->npm-package-arg; libnpmaccess-->npm-registry-fetch; @@ -463,6 +521,7 @@ graph LR; npm-->ajv-formats; npm-->ajv; npm-->archy; + npm-->azure-identity["@azure/identity"]; npm-->cacache; npm-->chalk; npm-->ci-info; @@ -698,6 +757,9 @@ graph LR; npmcli-smoke-tests-->semver; npmcli-smoke-tests-->tap; npmcli-smoke-tests-->which; + open-->define-lazy-prop; + open-->is-docker; + open-->is-wsl; p-map-->aggregate-error; pacote-->cacache; pacote-->fs-minipass; diff --git a/lib/commands/login.js b/lib/commands/login.js index 630abf9ac8e04..639af80859fc9 100644 --- a/lib/commands/login.js +++ b/lib/commands/login.js @@ -15,6 +15,11 @@ class Login extends BaseCommand { async exec () { const scope = this.npm.config.get('scope') let registry = this.npm.config.get('registry') + let authType = this.npm.config.get('auth-type') + + console.log('scope:', scope) + console.log('registry:', registry) + console.log('authType:', authType) if (scope) { const scopedRegistry = this.npm.config.get(`${scope}:registry`) @@ -24,7 +29,16 @@ class Login extends BaseCommand { } } - const creds = this.npm.config.getCredentialsByURI(registry) + if (authType == 'azureauth') { + this.npm.config.delete('_token', 'user') // prevent legacy pollution + if (await this.npm.config.getCredentialsByAzureAuth(registry)) { + log.notice('', `Logged in on ${replaceInfo(registry)}`) + return; + } + return; + } + + const creds = this.npm.config.getCredentialsByURI(registry); log.notice('', `Log in on ${replaceInfo(registry)}`) diff --git a/node_modules/.gitignore b/node_modules/.gitignore index 2f1ad728a5e71..4f70d3a1dcd3c 100644 --- a/node_modules/.gitignore +++ b/node_modules/.gitignore @@ -3,6 +3,39 @@ /* !/.gitignore # Allow all bundled deps +!/@azure/ +/@azure/* +!/@azure/abort-controller +!/@azure/core-auth +!/@azure/core-auth/node_modules/ +/@azure/core-auth/node_modules/* +!/@azure/core-auth/node_modules/@azure/ +/@azure/core-auth/node_modules/@azure/* +!/@azure/core-auth/node_modules/@azure/abort-controller +!/@azure/core-client +!/@azure/core-client/node_modules/ +/@azure/core-client/node_modules/* +!/@azure/core-client/node_modules/@azure/ +/@azure/core-client/node_modules/@azure/* +!/@azure/core-client/node_modules/@azure/abort-controller +!/@azure/core-rest-pipeline +!/@azure/core-rest-pipeline/node_modules/ +/@azure/core-rest-pipeline/node_modules/* +!/@azure/core-rest-pipeline/node_modules/@azure/ +/@azure/core-rest-pipeline/node_modules/@azure/* +!/@azure/core-rest-pipeline/node_modules/@azure/abort-controller +!/@azure/core-tracing +!/@azure/core-util +!/@azure/core-util/node_modules/ +/@azure/core-util/node_modules/* +!/@azure/core-util/node_modules/@azure/ +/@azure/core-util/node_modules/@azure/* +!/@azure/core-util/node_modules/@azure/abort-controller +!/@azure/identity +!/@azure/logger +!/@azure/msal-browser +!/@azure/msal-common +!/@azure/msal-node !/@isaacs/ /@isaacs/* !/@isaacs/cliui @@ -68,6 +101,7 @@ !/bin-links !/binary-extensions !/brace-expansion +!/buffer-equal-constant-time !/cacache !/cacache/node_modules/ /cacache/node_modules/* @@ -96,12 +130,15 @@ !/debug/node_modules/ /debug/node_modules/* !/debug/node_modules/ms +!/define-lazy-prop !/diff !/eastasianwidth +!/ecdsa-sig-formatter !/emoji-regex !/encoding !/env-paths !/err-code +!/events !/exponential-backoff !/fastest-levenshtein !/foreground-child @@ -121,16 +158,32 @@ !/ip-address !/ip-regex !/is-cidr +!/is-docker !/is-fullwidth-code-point !/is-lambda +!/is-wsl !/isexe !/jackspeak !/jsbn !/json-parse-even-better-errors !/json-stringify-nice !/jsonparse +!/jsonwebtoken +!/jsonwebtoken/node_modules/ +/jsonwebtoken/node_modules/* +!/jsonwebtoken/node_modules/jwa +!/jsonwebtoken/node_modules/jws !/just-diff-apply !/just-diff +!/jwa +!/jws +!/lodash.includes +!/lodash.isboolean +!/lodash.isinteger +!/lodash.isnumber +!/lodash.isplainobject +!/lodash.isstring +!/lodash.once !/lru-cache !/make-fetch-happen !/minimatch @@ -196,6 +249,7 @@ /npm-registry-fetch/node_modules/* !/npm-registry-fetch/node_modules/minizlib !/npm-user-validate +!/open !/p-map !/package-json-from-dist !/pacote @@ -216,6 +270,7 @@ !/read !/retry !/rimraf +!/safe-buffer !/safer-buffer !/semver !/shebang-command @@ -234,6 +289,7 @@ !/spdx-license-ids !/sprintf-js !/ssri +!/stoppable !/string-width-cjs !/string-width !/strip-ansi-cjs @@ -250,6 +306,7 @@ !/text-table !/tiny-relative-date !/treeverse +!/tslib !/tuf-js !/tuf-js/node_modules/ /tuf-js/node_modules/* @@ -267,6 +324,7 @@ !/unique-filename !/unique-slug !/util-deprecate +!/uuid !/validate-npm-package-license !/validate-npm-package-license/node_modules/ /validate-npm-package-license/node_modules/* diff --git a/package-lock.json b/package-lock.json index 9af770d60921e..18935f9add74c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "npm", "version": "10.9.0", "bundleDependencies": [ + "@azure/identity", "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/config", @@ -86,6 +87,7 @@ "workspaces/*" ], "dependencies": { + "@azure/identity": "^4.4.1", "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^8.0.0", "@npmcli/config": "^9.0.0", @@ -1074,6 +1076,229 @@ "node": ">=6.0.0" } }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.8.0.tgz", + "integrity": "sha512-YvFMowkXzLbXNM11yZtVLhUCmuG0ex7JKOH366ipjmHBhL3vpDcPAeWF+jf0X+jVXwFqo3UhsWUq4kH0ZPdu/g==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz", + "integrity": "sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.9.0", + "@azure/logger": "^1.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", + "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.10.0.tgz", + "integrity": "sha512-dqLWQsh9Nro1YQU+405POVtXnwrIVqPyfUzc4zXCbThTg7+vNNaiMkwbX9AMXKyoFYFClxmB3s25ZFr3+jZkww==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.4.1.tgz", + "integrity": "sha512-DwnG4cKFEM7S3T+9u05NstXU/HN0dk45kPOinUyNKsn5VWwpXd9sbPKEg6kgJzGbm1lMuhx9o31PVbCtM5sfBA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.14.0", + "@azure/msal-node": "^2.9.2", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", + "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.26.1.tgz", + "integrity": "sha512-y78sr9g61aCAH9fcLO1um+oHFXc1/5Ap88RIsUSuzkm0BHzFnN+PXGaQeuM1h5Qf5dTnWNOd6JqkskkMPAhh7Q==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.15.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.15.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.15.0.tgz", + "integrity": "sha512-ImAQHxmpMneJ/4S8BRFhjt1MZ3bppmpRPYYNyzeQPeFN288YKbb8TmmISQEbtfkQ1BPASvYZU5doIZOPBAqENQ==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.15.0.tgz", + "integrity": "sha512-gVPW8YLz92ZeCibQH2QUw96odJoiM3k/ZPH3f2HxptozmH6+OnyyvKXo/Egg39HAM230akarQKHf0W74UHlh0Q==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.15.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -4515,6 +4740,13 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5805,6 +6037,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -5970,6 +6212,16 @@ "inBundle": true, "license": "MIT" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.12", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.12.tgz", @@ -6964,6 +7216,16 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", @@ -8496,6 +8758,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "inBundle": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8771,6 +9049,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -9257,6 +9548,52 @@ "node": "*" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/just-deep-map-values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/just-deep-map-values/-/just-deep-map-values-1.2.0.tgz", @@ -9299,6 +9636,29 @@ "dev": true, "license": "MIT" }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -9501,6 +9861,27 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "inBundle": true, + "license": "MIT" + }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -9508,11 +9889,25 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "inBundle": true, + "license": "MIT" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "inBundle": true, "license": "MIT" }, "node_modules/lodash.kebabcase": { @@ -9536,6 +9931,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "inBundle": true, + "license": "MIT" + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -11954,6 +12356,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -13393,6 +13813,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -13910,6 +14351,17 @@ "escodegen": "^1.8.1" } }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, "node_modules/streamx": { "version": "2.18.0", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", @@ -16687,6 +17139,13 @@ "node": ">=4" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "inBundle": true, + "license": "0BSD" + }, "node_modules/tuf-js": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", @@ -17300,7 +17759,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, + "inBundle": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" diff --git a/package.json b/package.json index c92578506b30a..d91d12c4f4708 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "./package.json": "./package.json" }, "dependencies": { + "@azure/identity": "^4.4.1", "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^8.0.0", "@npmcli/config": "^9.0.0", @@ -121,6 +122,7 @@ "write-file-atomic": "^6.0.0" }, "bundleDependencies": [ + "@azure/identity", "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/config", diff --git a/workspaces/config/lib/definitions/definitions.js b/workspaces/config/lib/definitions/definitions.js index 7c58b11cf6eec..66b6127b93025 100644 --- a/workspaces/config/lib/definitions/definitions.js +++ b/workspaces/config/lib/definitions/definitions.js @@ -221,7 +221,7 @@ const definitions = { }), 'auth-type': new Definition('auth-type', { default: 'web', - type: ['legacy', 'web'], + type: ['legacy', 'web', 'azureauth'], description: ` What authentication strategy to use with \`login\`. Note that if an \`otp\` config is given, this value will always be set to \`legacy\`. diff --git a/workspaces/config/lib/index.js b/workspaces/config/lib/index.js index 4aa76d8e2d9a2..14ffc6c5322dd 100644 --- a/workspaces/config/lib/index.js +++ b/workspaces/config/lib/index.js @@ -15,6 +15,8 @@ const { mkdir, } = require('node:fs/promises') +const { DefaultAzureCredential } = require('@azure/identity') + const fileExists = (...p) => stat(resolve(...p)) .then((st) => st.isFile()) .catch(() => false) @@ -810,6 +812,19 @@ class Config { } } + async getCredentialsByAzureAuth (uri) { + // TODO: enable webInteractiveLogin + const credential = new DefaultAzureCredential(); + + const tokenResponse = await credential.getToken("499b84ac-1321-427f-aa17-267ca6975798/.default"); + const token = tokenResponse.token; + + + const nerfed = nerfDart(uri); + this.set(`${nerfed}:_authToken`, token, 'user'); + return true; + } + // this has to be a bit more complicated to support legacy data of all forms getCredentialsByURI (uri) { const nerfed = nerfDart(uri)