Skip to content

fix: Bump undici from 6.28.1 to 6.29.1 and 7.29.1 to 7.30.1 - #636

Merged
mtrezza merged 1 commit into
parse-community:masterfrom
mtrezza:fix/undici-6.29.1-7.30.1
Oct 27, 2026
Merged

mtrezza merged 1 commit into
parse-community:masterfrom
mtrezza:fix/undici-6.29.1-7.30.1

Conversation

@mtrezza

@mtrezza mtrezza commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

Closes #634

Lock-file-only update of the three undici copies that the lock file controls:

  • node_modules/expo-server-sdk/node_modules/undici 7.29.1 → 7.30.1. Production; expo-server-sdk 6.1.0 declares ^7.2.0.
  • node_modules/@semantic-release/github/node_modules/undici 7.29.1 → 7.30.1. Development; @semantic-release/github 12.0.10 declares ^7.0.0.
  • node_modules/undici 6.28.1 → 6.29.1. Development, via @semantic-release/npm → @actions/core → @actions/http-client 4.0.0, which declares ^6.23.0.

npm ls undici --omit=dev shows only the copy under expo-server-sdk, which the EXPO push sender uses. @parse/node-apn and firebase-admin don't depend on undici.

The copy bundled inside npm (node_modules/npm/node_modules/undici 6.29.0, via @semantic-release/npm → npm 11.21.1 → node-gyp 12.4.0) ships in the npm tarball and can't be changed through the lock file.

Security

Dependabot alerts resolved by this PR:

Alert Severity Scope Advisory Vulnerable range
266 high runtime GHSA-xjj6-f33q-929c >= 7.18.0, < 7.30.1
262 medium runtime GHSA-f72v-6w45-q472 >= 7.15.0, < 7.30.1
264 medium runtime GHSA-4qv8-2p9j-2685 >= 7.0.0, < 7.30.1

After this PR, no undici 7.x copy below 7.30.1 is left in the lock file.

Alerts that stay open because of the copy bundled in npm 11.21.1:

  • 265 (high, development, GHSA-xjj6-f33q-929c, >= 6.23.0, < 6.29.1). The root copy moves out of range to 6.29.1, but the bundled copy 6.29.0 is still in range. Dependabot counts bundled copies here: alerts 239, 241 and 245 (< 6.28.1) only closed when refactor: Bump npm from 11.20.0 to 11.21.1 #630 moved the bundled copy from 6.28.0 to 6.29.0, although the root copy was already 6.28.1. npm 11.21.1 is the newest 11.x release, and @semantic-release/npm requires npm ^11.6.2. The alert stays open until an npm 11.x release bundles undici 6.29.1 or later.
  • 263 (medium, development, GHSA-4qv8-2p9j-2685, >= 6.5.0, < 6.29.1) is already auto-dismissed. The bundled copy stays in its range for the same reason.

How the advisories reach the production copy: expo-server-sdk only uses fetch from undici. It sends a POST to the Expo push API with Accept-Encoding: gzip, deflate, reads response.status and response.text(), and passes the adapter's httpAgent option as dispatcher when set.

  • GHSA-xjj6-f33q-929c is reachable. A response with more than five content codings that closed before its body crashed the process (reproduced below).
  • GHSA-qrxm-fqhp-jwvm (no alert in this repository) is reachable through any HTTPS connection. A server that renegotiates TLS 1.2 with a certificate that doesn't match the host hit an assertion in the socket error handler.
  • GHSA-f72v-6w45-q472 and GHSA-4qv8-2p9j-2685 aren't reachable. expo-server-sdk sets no integrity option and uses no EventSource.

Empirical check

Each case ran in its own Node.js 22.19.0 process. It called the adapter's EXPO.send() → expo-server-sdk sendPushNotificationsAsync() against a local HTTP server (EXPO_BASE_URL=http://127.0.0.1:<port>, no access token). The two runs used production installs (npm ci --omit=dev) of the master lock file and of this one. The module cache showed that only node_modules/expo-server-sdk/node_modules/undici was loaded: 7.29.1 and 7.30.1 respectively.

Response from the local server undici 7.29.1 (master) undici 7.30.1 (this PR)
JSON 2/2 transmitted Same
gzip 2/2 transmitted Same
deflate 2/2 transmitted Same
GZIP (upper case) 2/2 transmitted Same
JSON for 30 devices (request body over 1024 bytes, sent gzip-compressed) 30/30 transmitted Same
429, then 200 (retry in expo-server-sdk) 2 requests, 2/2 transmitted Same
400 with an Expo error body Rejects with Error: "to" must be a valid push token (statusCode 400, code VALIDATION_ERROR) Same
Malformed gzip body Rejects with TypeError: terminated, cause Error: incorrect header check Same
Five gzip codings 2/2 transmitted Same
Six gzip codings with a body Rejects with TypeError: fetch failed, cause Error: too many content-encodings in response: 6, maximum allowed is 5 Same
Six gzip codings, connection closed before the body Same rejection, then an uncaught SocketError: other side closed about 100 ms later, which crashes the process Same rejection, no uncaught exception

Changes

undici 7.29.1 → 7.30.1

undici 6.28.1 → 6.29.1

Lock file

Generated with npm update undici --ignore-scripts --package-lock-only (npm 10.9.3). The diff only changes version, resolved and integrity of the three entries above, in both the packages and the lockfileVersion 2 dependencies sections. It's identical to the lock file in #634.

Both target versions declare the same Node.js engine range as the current versions: >=20.18.1 for 7.x and >=18.17 for 6.x. The supported Node.js versions don't change. CI tests Node.js 20, 22 and 24.

Breaking Changes

None

Code Changes Required

None. The upgrade is a drop-in replacement.

  • Production copy: expo-server-sdk only calls fetch. The empirical check shows the same results for normal, compressed, error, retried and malformed responses. The only difference is the crash fix.
  • Interceptors, RetryAgent, EventSource and cookie helpers: neither the adapter nor any parent package (expo-server-sdk, @semantic-release/github, @actions/http-client) uses them. The decompression maxSize, RetryHandler, EventSource limit and dispatcher, and cookie changes don't apply.
  • Upgrade and CONNECT lifecycle: these changes only apply to upgrade and CONNECT requests, and no parent makes them here. expo-server-sdk sends a fetch POST. The development parents only send CONNECT through ProxyAgent when a proxy is configured, and release-automated.yml configures none.
  • ppc64 SIMD: on ppc64 hosts running Node.js 24.12 or later, the HTTP/1.1 parser that fetch uses now runs with WebAssembly SIMD ([Backport v7.x] fix: selectively re-enable SIMD for ppc64 nodejs/undici#5794). This is a deliberate upstream change.
  • TLS options and session cache: expo-server-sdk uses the default global dispatcher unless httpAgent is configured, and it passes no TLS options. The TLS session cache fix only applies once the cache holds 100 sessions, while the adapter connects to a single origin.
  • Development copies: they only run in release-automated.yml through the semantic-release plugins. @semantic-release/github calls fetch with a dispatcher that is a new Agent() without options, or a ProxyAgent({ uri }) when a proxy is configured. @actions/http-client only uses ProxyAgent. Neither parent passes TLS options, and the fetch change only affects responses with more than five content codings.

Summary by CodeRabbit

  • Chores
    • Updated bundled network dependency versions.

@parse-github-assistant

Copy link
Copy Markdown

🚀 Thanks for opening this pull request! We appreciate your effort in improving the project. Please let us know once your pull request is ready for review.

Tip

  • Keep pull requests small. Large PRs will be rejected. Break complex features into smaller, incremental PRs.
  • Use Test Driven Development. Write failing tests before implementing functionality. Ensure tests pass.
  • Group code into logical blocks. Add a short comment before each block to explain its purpose.
  • We offer conceptual guidance. Coding is up to you. PRs must be merge-ready for human review.
  • Our review focuses on concept, not quality. PRs with code issues will be rejected. Use an AI agent.
  • Human review time is precious. Avoid review ping-pong. Inspect and test your AI-generated code.

Note

Please respond to review comments from AI agents just like you would to comments from a human reviewer. Let the reviewer resolve their own comments, unless they have reviewed and accepted your commit, or agreed with your explanation for why the feedback was incorrect.

Caution

Pull requests must be written using an AI agent with human supervision. Pull requests written entirely by a human will likely be rejected, because of lower code quality, higher review effort and the higher risk of introducing bugs. Please note that AI review comments on this pull request alone do not satisfy this requirement. Our CI and AI review are safeguards, not development tools. If many issues are flagged, rethink your development approach. Invest more effort in planning and design rather than using review cycles to fix low-quality code.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: e9ce43cd-2c1d-4d82-9192-e119d8cc8a4b
Commits

Reviewing files that changed from the base of the PR and between 70ca98f and 56e5267.

Files selected for processing: 1
  • package-lock.json

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 2 reviews per hour.

Walkthrough

The lockfile updates undici from 7.29.1 to 7.30.1 in two dependency trees and from 6.28.1 to 6.29.1 in the top-level dependency tree. Resolved package URLs and integrity hashes also change.

Changes: Undici lockfile updates

Layer / File(s) Summary
Update undici lock entries
package-lock.json
The current and legacy dependency sections update undici versions, resolved URLs, and integrity hashes for the @semantic-release/github, expo-server-sdk, and top-level entries.

Priority: Normal

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: Minimal · up to 56e52

No merge-blocking risk is identified in this lockfile-only dependency update.

Pre-merge checks: Passed 6
Check name Status Explanation
Title check Passed The title begins with the allowed fix: prefix, uses capitalization after the prefix, and accurately describes the undici dependency updates.
Linked Issues check Passed Issue #634 requires updating undici from 7.29.1 to 7.30.1 and from 6.28.1 to 6.29.1 in the same change. The whole-PR diff against the merge base changes only package-lock.json, in these entries: node_…
Out of Scope Changes check Passed The whole-PR diff against the merge base contains one file, package-lock.json. All changed hunks update only the version, resolved, and integrity fields of the three undici entries that issue #634 nam…
Security Check Passed The pull request changes only package-lock.json. The semantic diff contains only version, resolved URL, and integrity updates for undici 7.29.1→7.30.1 and 6.28.1→6.29.1. No application code or securit…
Engage In Review Feedback Passed PASS: The supplied review metadata shows zero actionable findings and no CodeRabbit review threads. No feedback comment required engagement, implementation, or reviewer agreement.
Description check Passed The PR description is thorough and matches the template's intent. It gives the issue reference (Closes #634) and a detailed approach covering the three undici lock-file entries, the security alerts re…
Full details: Linked Issues check

Explanation

Issue #634 requires updating undici from 7.29.1 to 7.30.1 and from 6.28.1 to 6.29.1 in the same change. The whole-PR diff against the merge base changes only package-lock.json, in these entries: node_modules/expo-server-sdk/node_modules/undici and node_modules/@semantic-release/github/node_modules/undici (7.29.1 to 7.30.1), and node_modules/undici (6.28.1 to 6.29.1). Each entry has a new version, resolved URL, and integrity hash. The same three changes appear in the packages section and the lockfileVersion 2 dependencies section. Both version bumps land together, as the issue requires. The issue's remaining items, the security and reliability fixes, come from the upstream releases the lock file now pins. Those fixes are not separate code tasks in this repository. Issue #5663 is closed and is background only, so it adds no requirements. The copy bundled inside npm (6.29.0) is not in the issue's scope. The PR description says the lock file cannot change it, and the issue does not ask for that change. No coding requirement is unmet. The security claims in the PR description about upstream releases were not checked against upstream sources. They do not change this verdict.

Full details: Out of Scope Changes check

Explanation

The whole-PR diff against the merge base contains one file, package-lock.json. All changed hunks update only the version, resolved, and integrity fields of the three undici entries that issue #634 names. No source, test, workflow, or manifest file changed. The closed issue #5663 (proto cookie fix) is background only. The PR does not implement it, and the diff shows no related change. Every change in the diff is tied to the linked issue, so no out-of-scope change exists.

Full details: Security Check

Explanation

The pull request changes only package-lock.json. The semantic diff contains only version, resolved URL, and integrity updates for undici 7.29.1→7.30.1 and 6.28.1→6.29.1. No application code or security-sensitive logic changed, and the production expo-server-sdk copy is moved to the patched 7.30.1 release. The unchanged npm-bundled undici 6.29.0 is pre-existing and is not introduced by this pull request.

Full details: Description check

Explanation

The PR description is thorough and matches the template's intent. It gives the issue reference (Closes #634) and a detailed approach covering the three undici lock-file entries, the security alerts resolved, the alerts that remain open because of the bundled npm copy, an empirical runtime check, and a changelog-level review of the breaking-change surface. It does not follow the template's exact headings (Pull Request, Issue, Approach, Tasks), and the Tasks checklist (Add tests, Add changes to documentation) is absent. The license and security-policy lines are also missing. Those gaps are non-critical for a lock-file-only dependency bump, so the description is mostly complete.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Oct 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.18%. Comparing base (70ca98f) to head (56e5267).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #636   +/-   ##
=======================================
  Coverage   99.18%   99.18%           
=======================================
  Files          11       11           
  Lines        1841     1841           
=======================================
  Hits         1826     1826           
  Misses         15       15           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mtrezza
mtrezza merged commit 75d6ad9 into parse-community:master Oct 27, 2026
9 checks passed
parseplatformorg pushed a commit that referenced this pull request Oct 27, 2026
## [8.5.8](8.5.7...8.5.8) (2026-10-27)

### Bug Fixes

* Bump undici from 6.28.1 to 6.29.1 and 7.29.1 to 7.30.1 ([#636](#636)) ([75d6ad9](75d6ad9))
@parseplatformorg

Copy link
Copy Markdown
Contributor

🎉 This change has been released in version 8.5.8

@mtrezza
mtrezza deleted the fix/undici-6.29.1-7.30.1 branch October 27, 2026 00:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants