Skip to content

chore(deps): Bump undici from 7.29.0 to 8.10.0 - #496

Closed
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/undici-8.10.0
Closed

chore(deps): Bump undici from 7.29.0 to 8.10.0#496
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/undici-8.10.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 9, 2026

Copy link
Copy Markdown
Contributor

Bumps undici from 7.29.0 to 8.10.0.

Release notes

Sourced from undici's releases.

v8.10.0

What's Changed

New Contributors

Full Changelog: nodejs/undici@v8.9.0...v8.10.0

v8.9.0

⚠️ Security fixes

High severity

  • GHSA-4cwx-7wf7-3272: malformed qualified private Cache-Control directives could cause cross-user information disclosure in shared caches or a parse-time crash. The cache parser now treats empty qualified directives conservatively and safely handles mixed qualified and unqualified directives. Fixed by 4fe5bc5f with regression coverage in 9f09b49a.

Medium severity

  • GHSA-m8rv-5g2x-5cg5: a malicious type property on a duck-typed blob-like HTTP/1.1 request body could inject CRLF sequences into the generated content-type header. Undici now coerces and validates the value before adding it to the request. Fixed by 7d3cf924.
  • GHSA-jr45-8vmc-qm54: optional whitespace around = in qualified no-cache and private directives could bypass shared-cache restrictions and disclose authenticated data across users. Cache-Control parsing now normalizes these forms and applies conservative cache decisions. Fixed by c601fff1.
  • GHSA-8xcm-r25x-g524: the retry interceptor could expose a stale Content-Length after resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whose Content-Length is inconsistent with Content-Range. Fixed by e11a68ed, with corrected fixtures in 2b3f7493.
  • GHSA-v3r7-h72x-cjcm: unsanitized domain and unparsed values passed to setCookie() could inject cookie attributes. Undici now validates cookie domains, paths, and unparsed attributes more strictly. Fixed by 10d93fc3.

Additional hardening

... (truncated)

Commits
  • c8d80e6 Bumped v8.10.0 (#5644)
  • 66923b4 fix: preserve DNS origin hostname on sockets (#5577)
  • 3926499 fix: retry refused HTTP/2 streams (#5598)
  • 73d6e9e fix(h2): detach upgrade close handler after GOAWAY (#5641)
  • b111adb fix(mock): emit request body lifecycle hooks (#5367)
  • ae4a3e3 build(deps): bump actions/setup-node from 6.4.0 to 7.0.0 (#5636)
  • ec3fbf1 build(deps): bump github/codeql-action/init from 4.36.2 to 4.37.3 (#5634)
  • 2151720 build(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#5633)
  • b96a116 fix(interceptors): allow interceptors without opts.origin (#5628)
  • a18ef2d fix(mock): non-string path matchers under ignoreTrailingSlash, and DataView r...
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
npm/undici 8.10.0 🟢 7.7
Details
CheckScoreReason
Security-Policy🟢 10security policy file detected
Dependency-Update-Tool🟢 10update tool detected
Code-Review🟢 10all changesets reviewed
Maintained🟢 1030 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 8binaries present in source code
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Vulnerabilities⚠️ 010 existing vulnerabilities detected
SAST🟢 10SAST tool is run on all commits
License🟢 10license file detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ -1no releases found
Packaging🟢 10packaging workflow detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
CI-Tests🟢 1030 out of 30 merged PRs checked by a CI test -- score normalized to 10
Contributors🟢 10project has 62 contributing companies or organizations

Scanned Files

  • package-lock.json

@windkh

windkh commented Aug 9, 2026

Copy link
Copy Markdown
Owner

@dependabot rebase

Bumps [undici](https://github.com/nodejs/undici) from 7.29.0 to 8.10.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v7.29.0...v8.10.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 8.10.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/undici-8.10.0 branch from c40cedc to 95815cb Compare August 9, 2026 07:11
windkh pushed a commit that referenced this pull request Aug 9, 2026
…osing it

#496 still failed after the Node 20 drop and a rebase onto [22.x, 24.x] -
on both legs. Every integration file that does real HTTP through our
dispatcher either timed out or failed with "EFATAL: fetch failed".

The cause is not the Node version. We build an Agent from the standalone
undici package and node-telegram-bot-api hands it to Node's BUILT-IN fetch,
which comes from Node's own bundled undici. undici v8 removed the legacy
dispatcher handler wrappers that the bundled copy still drives a dispatcher
through, so the dispatcher is accepted - dispatch() is reached, which is why
the unit test kept passing - but no response ever comes back.

- undici stays at ^7; .github/dependabot.yml ignores its majors so the PR
  does not return weekly. Minor/patch still flow, so security fixes are not
  blocked.
- ADR 0011 records the finding, the alternatives, and what has to be checked
  before the ignore is lifted (process.versions.undici on the minimum Node).
- ADR 0010 is corrected: it was framed as though undici 8 were being adopted.
  The Node 20 drop stands on its own - node-red@5 requires >=22.9 and Node 20
  is EOL - and now says so.
- CHANGELOG and MIGRATION.md follow the same correction.

No release exists for 19.0.0 yet, so this amends that entry in place.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dependabot @github

dependabot Bot commented on behalf of github Aug 9, 2026

Copy link
Copy Markdown
Contributor Author

Looks like undici is no longer being updated by Dependabot, so this is no longer needed.

@dependabot dependabot Bot closed this Aug 9, 2026
@dependabot
dependabot Bot deleted the dependabot/npm_and_yarn/undici-8.10.0 branch August 9, 2026 07:44
@windkh

windkh commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Closing unmerged — undici 8 is not usable by this package yet, and it is not a Node-version problem.

After master dropped Node 20 (V19.0.0, ADR 0010) and this PR was rebased onto the new [22.x, 24.x] matrix, it still failed — on both legs:

Test file Symptom
test/integration/polling.test.js test timed out after 30000ms
test/integration/sending.test.js test timed out after 30000ms
test/integration/setwebhook.test.js EFATAL: fetch failed (3 subtests)
test/integration/webhook.test.js waitFor timed out

Every failure is a request that goes out and never comes back.

Why. telegrambot/lib/undici-pool.js builds new Agent(...) from the standalone undici package, and node-telegram-bot-api spreads request.fetchOptions into a call to Node's built-in fetch — which comes from Node's own bundled undici, not ours. undici v8.0.0 removed the legacy dispatcher handler wrappers that the bundled copy still drives a dispatcher through. The dispatcher is accepted (dispatch() is reached, which is why the undici-pool unit test kept passing — it asserts only that, and swallows network errors), but the response is never delivered back.

Two undici majors cannot be mixed across the built-in-fetch boundary. This will become mergeable once a Node release bundles undici 8; process.versions.undici on the minimum supported Node is the thing to check.

undici stays at ^7, and .github/dependabot.yml now ignores its major updates so this PR does not reopen weekly. Minor and patch updates still flow, so security fixes are not blocked.

Full reasoning: ADR 0011.

@windkh

windkh commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Follow-up: the diagnosis above has now been verified directly, not just inferred.

When this was closed, the reasoning rested on the CI failure pattern plus undici's release notes. A machine with Node 24.19 was available afterwards, so the claim could be tested. It holds — and the mechanism is more precise than originally described.

Against a local HTTP server, with undici@8.10.0 installed over the tree:

node v24.19.0 | bundled undici 7.29.0 | standalone undici 8.10.0

OK     builtin fetch, no dispatcher         : 200 "pong"
FAIL   builtin fetch, undici-8 dispatcher   : TypeError: fetch failed
                                              (cause: invalid onRequestStart method)
       -> dispatch() reached: true
OK     undici-8 fetch, undici-8 dispatcher  : 200 "pong"
  • The server is reachable, so the failure is not environmental.
  • Our production path is the broken one. dispatch() is reached — which is why test/lib/undici-pool.test.js kept passing — but undici 8 then rejects the legacy-shaped handler Node's bundled undici hands it: invalid onRequestStart method. That is a rejection, not the silent non-delivery I described earlier; it surfaces as fetch failed, and to node-telegram-bot-api as EFATAL: fetch failed.
  • undici 8 itself is fine — its own fetch drives the very same dispatcher to a 200.

The full suite agrees: 14 integration subtests pass on undici@7, zero on undici@8, with the same 0 !== 1 and EFATAL: fetch failed assertions seen here.

One number worth recording: Node 24.19.0 still bundles undici 7.29.0 — the newest line in our CI matrix. The wait for a bundled undici 8 is real, so the Dependabot ignore rule is not about to become stale.

Nothing changed in package.json or package-lock.json; undici 8 was installed with --no-save and rolled back. ADR 0011 now carries the proof.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant