From 0150ff4fe7eb7e00769e3868e96057ce3e2c5c35 Mon Sep 17 00:00:00 2001 From: Katy Bowman Date: Thu, 21 May 2026 12:51:17 -0400 Subject: [PATCH 1/4] fix: update heroku-cli-command and heroku-cli-util --- package-lock.json | 143 ++++++++++------------------------------------ package.json | 7 +-- 2 files changed, 32 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d5b096ed9..3f4e6e2e88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "11.2.0", "license": "ISC", "dependencies": { - "@heroku-cli/command": "13.0.0-beta.3", + "@heroku-cli/command": "12.4.0-beta.0", "@heroku-cli/notifications": "^1.2.6", "@heroku-cli/schema": "^1.0.25", "@heroku/buildpack-registry": "^1.0.1", - "@heroku/heroku-cli-util": "^10.8.0", + "@heroku/heroku-cli-util": "10.8.1-alpha.0", "@heroku/http-call": "^5.5.1", "@heroku/mcp-server": "^1.2.0", "@heroku/socksv5": "^0.0.9", @@ -147,7 +147,7 @@ "std-mocks": "^2.0.0", "stdout-stderr": "^0.1.13", "ts-node": "^10.9.2", - "typescript": "4.9.5" + "typescript": "5.9.3" }, "engines": { "node": ">=20" @@ -2142,9 +2142,9 @@ } }, "node_modules/@heroku-cli/command": { - "version": "13.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@heroku-cli/command/-/command-13.0.0-beta.3.tgz", - "integrity": "sha512-vrUNs/7Yp9E2w7I8CUTSork9s++wIBQuVFc5s+a3yyzPf4pnFYmGpadHoCz+TXhwfqJy+MMTehCmMEiyPWM67Q==", + "version": "12.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@heroku-cli/command/-/command-12.4.0-beta.0.tgz", + "integrity": "sha512-hW0JVwdqcO6CzOvctSlRBLMm42Bm0DNBKRIeOYnv1K8ebT7BJ7ar/n57kvmrKHMYWJGbyqprTxvjjM03cVtFuQ==", "license": "ISC", "dependencies": { "@heroku/http-call": "^5.4.0", @@ -2444,12 +2444,12 @@ "license": "MIT" }, "node_modules/@heroku/heroku-cli-util": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/@heroku/heroku-cli-util/-/heroku-cli-util-10.8.0.tgz", - "integrity": "sha512-/P6eQPU6TaI/BY9+56NnAOPl9VSCo19kwk0CC2um2xDMiMA38Eyzz+wSo0sNxHeSLAIoDPM6n40VagVxwsN/tQ==", + "version": "10.8.1-alpha.0", + "resolved": "https://registry.npmjs.org/@heroku/heroku-cli-util/-/heroku-cli-util-10.8.1-alpha.0.tgz", + "integrity": "sha512-IyqLP5loh0PHFgr27nb5RILGNZ/kJ2aduqjTv42waiNbUhjY3uPZmTtYhxC4Qnrnofg3gXgJ3Vugr3lLvzlaag==", "license": "ISC", "dependencies": { - "@heroku-cli/command": "^12.2.0", + "@heroku-cli/command": "12.4.0-beta.0", "@heroku/http-call": "^5.5.0", "@oclif/core": "^4.3.0", "@oclif/table": "0.5.2", @@ -6561,25 +6561,19 @@ "node": ">=8.0.0" } }, - "node_modules/@sentry/node/node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.214.0.tgz", - "integrity": "sha512-kIN8nTBMgV2hXzV/a20BCFilPZdAIMYYJGSgfMMRm/Xa+07y5hRDS2Vm12A/z8Cdu3Sq++ZvJfElokX2rkgGgw==", + "node_modules/@sentry/node/node_modules/@opentelemetry/core": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz", + "integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==", "license": "Apache-2.0", - "optional": true, - "peer": true, "dependencies": { - "@opentelemetry/core": "2.6.1", - "@opentelemetry/otlp-exporter-base": "0.214.0", - "@opentelemetry/otlp-transformer": "0.214.0", - "@opentelemetry/resources": "2.6.1", - "@opentelemetry/sdk-trace-base": "2.6.1" + "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@sentry/node/node_modules/@opentelemetry/instrumentation": { @@ -6599,54 +6593,13 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/node/node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.214.0.tgz", - "integrity": "sha512-u1Gdv0/E9wP+apqWf7Wv2npXmgJtxsW2XL0TEv9FZloTZRuMBKmu8cYVXwS4Hm3q/f/3FuCnPTgiwYvIqRSpRg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@opentelemetry/core": "2.6.1", - "@opentelemetry/otlp-transformer": "0.214.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@sentry/node/node_modules/@opentelemetry/otlp-transformer": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.214.0.tgz", - "integrity": "sha512-DSaYcuBRh6uozfsWN3R8HsN0yDhCuWP7tOFdkUOVaWD1KVJg8m4qiLUsg/tNhTLS9HUYUcwNpwL2eroLtsZZ/w==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@opentelemetry/api-logs": "0.214.0", - "@opentelemetry/core": "2.6.1", - "@opentelemetry/resources": "2.6.1", - "@opentelemetry/sdk-logs": "0.214.0", - "@opentelemetry/sdk-metrics": "2.6.1", - "@opentelemetry/sdk-trace-base": "2.6.1", - "protobufjs": "^7.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, "node_modules/@sentry/node/node_modules/@opentelemetry/resources": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.6.1.tgz", - "integrity": "sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz", + "integrity": "sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.6.1", + "@opentelemetry/core": "2.7.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -6656,52 +6609,14 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-logs": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.214.0.tgz", - "integrity": "sha512-zf6acnScjhsaBUU22zXZ/sLWim1dfhUAbGXdMmHmNG3LfBnQ3DKsOCITb2IZwoUsNNMTogqFKBnlIPPftUgGwA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@opentelemetry/api-logs": "0.214.0", - "@opentelemetry/core": "2.6.1", - "@opentelemetry/resources": "2.6.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-metrics": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.6.1.tgz", - "integrity": "sha512-9t9hJHX15meBy2NmTJxL+NJfXmnausR2xUDvE19XQce0Qi/GBtDGamU8nS1RMbdgDmhgpm3VaOu2+fiS/SfTpQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@opentelemetry/core": "2.6.1", - "@opentelemetry/resources": "2.6.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.1.tgz", - "integrity": "sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.7.1.tgz", + "integrity": "sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.6.1", - "@opentelemetry/resources": "2.6.1", + "@opentelemetry/core": "2.7.1", + "@opentelemetry/resources": "2.7.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -24327,16 +24242,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { diff --git a/package.json b/package.json index 9b9fd07b2d..882ad1689c 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,11 @@ "bin": "./bin/run.js", "bugs": "https://github.com/heroku/cli/issues", "dependencies": { - "@heroku-cli/command": "13.0.0-beta.3", + "@heroku-cli/command": "12.4.0-beta.0", "@heroku-cli/notifications": "^1.2.6", "@heroku-cli/schema": "^1.0.25", "@heroku/buildpack-registry": "^1.0.1", - "@heroku/heroku-cli-util": "^10.8.0", + "@heroku/heroku-cli-util": "10.8.1-alpha.0", "@heroku/http-call": "^5.5.1", "@heroku/mcp-server": "^1.2.0", "@heroku/socksv5": "^0.0.9", @@ -141,7 +141,7 @@ "std-mocks": "^2.0.0", "stdout-stderr": "^0.1.13", "ts-node": "^10.9.2", - "typescript": "4.9.5" + "typescript": "5.9.3" }, "oclif": { "additionalHelpFlags": [ @@ -378,7 +378,6 @@ "license": "ISC", "main": "dist/index.js", "overrides": { - "@heroku-cli/command": "13.0.0-beta.3", "serialize-javascript": "^7.0.4" }, "repository": "heroku/cli", From aa684fac8b2b7e46c41d71005ededa19c0a87702 Mon Sep 17 00:00:00 2001 From: Katy Bowman Date: Thu, 21 May 2026 12:52:38 -0400 Subject: [PATCH 2/4] fix: update whoami to correctly process 401 error --- src/commands/auth/whoami.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/commands/auth/whoami.ts b/src/commands/auth/whoami.ts index fa1e039579..fa9c25f032 100644 --- a/src/commands/auth/whoami.ts +++ b/src/commands/auth/whoami.ts @@ -18,9 +18,8 @@ export default class AuthWhoami extends Command { const {body: account} = await this.heroku.get('/account', {retryAuth: false}) this.log(account.email) } catch (error: any) { - if (error.statusCode === 401) this.notloggedin() + if (error.http.statusCode === 401) this.notloggedin() throw error } } } - From 5ebc159b5d465293c3c14abfea30cc9d0f3c6f74 Mon Sep 17 00:00:00 2001 From: Katy Bowman Date: Thu, 21 May 2026 13:13:33 -0400 Subject: [PATCH 3/4] update package-lock for node 22 --- package-lock.json | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/package-lock.json b/package-lock.json index 3f4e6e2e88..f38a727552 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6576,6 +6576,27 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@sentry/node/node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.218.0.tgz", + "integrity": "sha512-8dqezsmPhtKitIK/eTipZhYl9EX2/gNQ5zUMhaz3uxEURwfkNf8IPvo6yNfrzbxdtpAOybS/+h7wmIWYqFSpiw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/core": "2.7.1", + "@opentelemetry/otlp-exporter-base": "0.218.0", + "@opentelemetry/otlp-transformer": "0.218.0", + "@opentelemetry/resources": "2.7.1", + "@opentelemetry/sdk-trace-base": "2.7.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, "node_modules/@sentry/node/node_modules/@opentelemetry/instrumentation": { "version": "0.214.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.214.0.tgz", @@ -6593,6 +6614,60 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@sentry/node/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.218.0.tgz", + "integrity": "sha512-ZwqpkNL5W7RyGJPDZ9g06DvKp8KFTWPJPN12anpMQYSKpTSU0z3EIZuPq9vPGpS8siFyOqDYDAuCwlNO9FqgbA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/core": "2.7.1", + "@opentelemetry/otlp-transformer": "0.218.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/node/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.218.0.tgz", + "integrity": "sha512-CFaKH87WAzjuJ4awowTTLzUvMfaRfiOFG5+qm5S5ncyalRtN4ecQ+YmuANJSCrVPuvZFEkUgKhBPBndxi3rHsQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/api-logs": "0.218.0", + "@opentelemetry/core": "2.7.1", + "@opentelemetry/resources": "2.7.1", + "@opentelemetry/sdk-logs": "0.218.0", + "@opentelemetry/sdk-metrics": "2.7.1", + "@opentelemetry/sdk-trace-base": "2.7.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/node/node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/api-logs": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.218.0.tgz", + "integrity": "sha512-fmEWp5kXlGEc3i/lR698Hz41DfGyN4Tbe4g7L1AxSc7fF8Xeh/FQ9Quqpa9dVA413Q1Ad43QOLzU4JoXgbFPWw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@sentry/node/node_modules/@opentelemetry/resources": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz", @@ -6609,6 +6684,58 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, + "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-logs": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.218.0.tgz", + "integrity": "sha512-QvnNdugatFTVCJXH0Mcu7GOOJSylA9j127kIezOE4YwTI4YbowRons2K4WZTv5FMS8T4q9P0NdaRHdkSmeAIag==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/api-logs": "0.218.0", + "@opentelemetry/core": "2.7.1", + "@opentelemetry/resources": "2.7.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/api-logs": { + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.218.0.tgz", + "integrity": "sha512-fmEWp5kXlGEc3i/lR698Hz41DfGyN4Tbe4g7L1AxSc7fF8Xeh/FQ9Quqpa9dVA413Q1Ad43QOLzU4JoXgbFPWw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-metrics": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.7.1.tgz", + "integrity": "sha512-MpDJdkiFDs3Pm1RHO3KByuZbuBdJEXEAkiC0+yJdsZGVCdf1RpHR6n+LHDcS7ffmfrt5kVCzJSCfm4z2C7v0uQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/core": "2.7.1", + "@opentelemetry/resources": "2.7.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, "node_modules/@sentry/node/node_modules/@opentelemetry/sdk-trace-base": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.7.1.tgz", From 0359226723ade80816503d3f3026b47c3ab12b1b Mon Sep 17 00:00:00 2001 From: Katy Bowman Date: Thu, 21 May 2026 13:25:27 -0400 Subject: [PATCH 4/4] test: update resolve function unit test to use 503 error instead of 401 --- test/unit/lib/addons/resolve.unit.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/lib/addons/resolve.unit.test.ts b/test/unit/lib/addons/resolve.unit.test.ts index 1b813bbd03..ebf195f38e 100644 --- a/test/unit/lib/addons/resolve.unit.test.ts +++ b/test/unit/lib/addons/resolve.unit.test.ts @@ -66,13 +66,13 @@ describe('resolve', function () { it('fails if errored', function () { nock('https://api.heroku.com:443') - .post('/actions/addons/resolve', {addon: 'myaddon-5', app: 'myapp'}).reply(401) + .post('/actions/addons/resolve', {addon: 'myaddon-5', app: 'myapp'}).reply(503) return resolveAddon(herokuAPI, 'myapp', 'myaddon-5') .then(() => { throw new Error('unreachable') }) - .catch((error: any) => expect(error).to.have.nested.include({statusCode: 401})) + .catch((error: any) => expect(error).to.have.nested.include({statusCode: 503})) }) it('fails if ambiguous', function () {