ARSN-645: Replace deprecated and unmaintained dependencies - #2710
Open
francoisferrand wants to merge 10 commits into
Open
francoisferrand wants to merge 10 commits into
francoisferrand wants to merge 10 commits into
Conversation
francoisferrand
force-pushed
the
improvement/ARSN-645
branch
2 times, most recently
from
September 21, 2026 20:58
dc3b143 to
69b5617
Compare
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## improvement/ARSN-642 #2710 +/- ##
========================================================
+ Coverage 74.75% 74.80% +0.04%
========================================================
Files 228 229 +1
Lines 18673 18686 +13
Branches 3873 3877 +4
========================================================
+ Hits 13959 13978 +19
+ Misses 4709 4703 -6
Partials 5 5 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
francoisferrand
force-pushed
the
improvement/ARSN-642
branch
from
September 21, 2026 22:15
b114ae4 to
3006f5a
Compare
npm flags all uuid <=10 releases as deprecated, recommending v11 for CommonJS codebases (Arsenal compiles to CJS). Runtime v4() behavior is unchanged; only needed an explicit return type on the local uuidv4 wrapper in kmip/index.ts to satisfy the updated overload typings. Issue: ARSN-645
npm flags this as a deprecated stub since ioredis ships its own type definitions; the extra devDependency is no longer needed. Issue: ARSN-645
The backo GitHub repo has been archived since 2023 with no releases since 2022, and there's no actively maintained drop-in successor with the same callback-friendly duration()/reset() shape (AWS SDK v3's own @smithy/util-retry is built around wrapping whole SDK client calls, and exponential-backoff owns the retry loop itself; neither fits the custom retry loop in mpuHelper.js without a larger rewrite). Since the same backo@^1.1.0 API is used identically in Backbeat (also an exponential retry timer around a callback-based retry loop), add it as a shared lib/utils/Backoff export rather than a GCP-local file, so other Arsenal consumers - and eventually Backbeat - can depend on Arsenal's copy instead of the unmaintained package. Issue: ARSN-645
Re-resolve the lockfile against existing package.json semver ranges (no range changes). Picks up patch/minor bumps for tar, fast-xml-parser, ws, lodash, jws, node-forge, ip-address, semver, minimatch, glob, ajv, joi, brace-expansion, protobufjs, picomatch, engine.io and others, clearing most of the known advisories affecting the existing ranges. Issue: ARSN-645
Fixes a ReDoS in ajv's $data option (GHSA advisory, <6.14.0). Stays on the 6.x line used by policyValidator.ts, no API changes needed. Issue: ARSN-645
Fixes a homograph attack allowing Unicode lookalike characters to bypass validation (GHSA advisory, <=3.0.10). Used by VersionID.ts, no API changes needed. Issue: ARSN-645
sdk-node <0.220.0 pins propagator-jaeger <2.9.0, which has a DoS via unhandled exception on malformed headers (GHSA advisory). Bump the whole OTel family in lockstep (sdk-node/exporter-trace-otlp-http to 0.220.x, resources/sdk-trace-base/context-async-hooks/core to 2.9.x) since these packages are version-locked across the monorepo. Issue: ARSN-645
Pulls in istanbul-lib-processinfo@3.0.1, which drops its uuid dependency entirely (the old copy had the buffer bounds-check advisory, <11.1.1). nyc 18 requires Node 20 or >=22, already satisfied by Arsenal's engines field. Smoke-tested the coverage script directly to confirm reports still generate correctly. Issue: ARSN-645
ZenkoMetrics must share the exact same registry singleton as the consuming app's own prom-client instance to produce a combined /metrics output. Keeping prom-client only as a regular dependency relies on yarn/npm hoisting to accidentally dedupe it with the host app's copy; if a transitive dep (e.g. node-rdkafka-prometheus, pinned to prom-client ^12) forces a nested install, Arsenal and the app end up with two separate registries with no error, silently breaking metrics. Declaring it as a peerDependency (in addition to keeping it as a regular dependency, so Arsenal still works standalone) makes yarn/npm enforce and warn on version mismatches instead of silently duplicating the module. Issue: ARSN-645
Issue: ARSN-645 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
francoisferrand
force-pushed
the
improvement/ARSN-645
branch
from
September 21, 2026 22:16
69b5617 to
bab8157
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #2709 (ARSN-642 / Node 24 CI+engines). Doesn't touch anything from that ticket's scope (CI matrix, engines field,
url.parse()migration, node-fcntl/httpagent floors).What changed
Deprecated/unmaintained direct deps replaced:
uuid^10 → ^11@types/ioredis(deprecated stub, ioredis ships its own types)backowith a sharedlib/utils/Backoff.tshelper, exported fromindex.ts(Backbeat uses the same backoff logic and can consume this instead of vendoring its own copy)Lockfile refresh:
yarn upgrade --ignore-enginesto pick up available transitive version bumps within existing semver ranges (nopackage.jsonrange changes in that commit) — dropped combined yarn audit findings from moderate 113/high 245/critical 13 down to a handfulTargeted direct-dep CVE fixes surfaced by the refresh:
ajv6.12.3 → 6.15.0base-x3.0.8 → 3.0.11@opentelemetry/*family bumped in lockstep (0.219.x/2.8.x → 0.220.x/2.9.x) to pull in a fixedpropagator-jaegernyc^17.1.0 → ^18.0.0 (drops a vulnerable transitiveuuidviaistanbul-lib-processinfo)prom-client peer dependency:
prom-clientas apeerDependency(kept as a regular dependency too) sinceZenkoMetricsneeds to share the exact same registry singleton as the consuming app's ownprom-clientinstance — relying on hoisting alone risks a silent duplicate registry if a transitive dep pins an incompatible range (e.g.node-rdkafka-prometheusin Backbeat).Deliberately out of scope / left alone:
@prometheus-io/clientmigration — investigated, reverted;prom-clientstays. Backbeat'snode-rdkafka-prometheushardcodesrequire('prom-client')internally with no injection point, so a unilateral Arsenal swap breaks the shared-registry requirement. Follow-up needed (tracked separately).level/level-sublevel(archived) — still carries the last 3 remaining audit findings (2xbl, 1xsemver), all transitive vialevel-sublevel > levelup. Large blast radius, needs its own migration investigation. Follow-up needed (tracked separately).Validation
yarn build,yarn lintcleantests/unit/network/http/server.spec.js, TLS cert alert) is pre-existing/environment-related, reproduces identically on the unmodified base branch too.Issue: ARSN-645