From bd1687fc6f09f46e82d39fbc4d8046b08b8dad5e Mon Sep 17 00:00:00 2001 From: Michael Garvin Date: Fri, 20 Feb 2026 13:29:30 -0800 Subject: [PATCH 1/3] deps: add @gar/promise-retry@1.0.0 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3a1eafd4..9e73b189 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "git" ], "dependencies": { + "@gar/promise-retry": "^1.0.0", "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", From 4a1d0dfd6f28128b2a33d67326b55779b5bca54e Mon Sep 17 00:00:00 2001 From: Michael Garvin Date: Fri, 20 Feb 2026 13:29:37 -0800 Subject: [PATCH 2/3] deps: remove promise-retry --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 9e73b189..93f8f37c 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,6 @@ "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" From 2fa186e8b0594251332aeaed92b9abd093a92b18 Mon Sep 17 00:00:00 2001 From: Michael Garvin Date: Fri, 20 Feb 2026 13:31:22 -0800 Subject: [PATCH 3/3] fix: use @gar/promise-retry instead of retry --- lib/fetcher.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fetcher.js b/lib/fetcher.js index 0ce7aedb..786fd9d8 100644 --- a/lib/fetcher.js +++ b/lib/fetcher.js @@ -10,7 +10,7 @@ const cacache = require('cacache') const fsm = require('fs-minipass') const getContents = require('@npmcli/installed-package-contents') const npa = require('npm-package-arg') -const retry = require('promise-retry') +const { promiseRetry } = require('@gar/promise-retry') const ssri = require('ssri') const tar = require('tar') const { Minipass } = require('minipass') @@ -319,7 +319,7 @@ class FetcherBase { this.spec }. Extracting by manifest.`) } - return this.resolve().then(() => retry(tryAgain => + return this.resolve().then(() => promiseRetry(tryAgain => streamHandler(this.#istream(this[_.tarballFromResolved]())) .catch(streamErr => { // Most likely data integrity. A cache ENOENT error is unlikely