mirror of
https://github.com/Unleash/unleash.git
synced 2026-11-02 17:05:24 +00:00
dependabot/github_actions/actions/setup-node-7
2461 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
de76f2aded |
chore: security maintenance
This won't fix all warnings, but it should get undici and nodemailer out of our way. We'll need to have a look at our mcp server as well as our swagger dependencies afterwards. |
||
|
|
e35c1248b5 |
chore(deps): update dependency fast-check to v4.10.2 (#12706)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [fast-check](https://fast-check.dev/) ([source](https://redirect.github.com/dubzzz/fast-check/tree/HEAD/packages/fast-check)) | [`4.9.0` → `4.10.2`](https://renovatebot.com/diffs/npm/fast-check/4.9.0/4.10.2) |  |  | --- ### Release Notes <details> <summary>dubzzz/fast-check (fast-check)</summary> ### [`v4.10.2`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#4102) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.10.1...v4.10.2) *Fix interrupt plugin (throwing)* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.10.2)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.10.1...v4.10.2)] #### Fixes - ([PR#7333](https://redirect.github.com/dubzzz/fast-check/pull/7333)) Bug: Plugin `interruptAfterTimeLimit` crashes ### [`v4.10.1`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#4101) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.10.0...v4.10.1) *Fix fake-timer compatibility in timeout and interrupt plugins* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.10.1)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.10.0...v4.10.1)] #### Fixes - ([PR#7293](https://redirect.github.com/dubzzz/fast-check/pull/7293)) Bug: Capture timers for `interruptAfterTimeLimit` plugin - ([PR#7282](https://redirect.github.com/dubzzz/fast-check/pull/7282)) CI: Temporarily disable documentation updates until v5 - ([PR#7279](https://redirect.github.com/dubzzz/fast-check/pull/7279)) Doc: Release note for 4.10.0 ### [`v4.10.0`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#4100) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.9.0...v4.10.0) *New plugin API and deprecations ahead of v5* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.10.0)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.9.0...v4.10.0)] #### Features - ([PR#7216](https://redirect.github.com/dubzzz/fast-check/pull/7216)) Introduce a plugin API - ([PR#7221](https://redirect.github.com/dubzzz/fast-check/pull/7221)) Refine plugin API - ([PR#7222](https://redirect.github.com/dubzzz/fast-check/pull/7222)) Add ability to configure plugins globally - ([PR#7224](https://redirect.github.com/dubzzz/fast-check/pull/7224)) Add the `beforeEach` plugin to hook in life-cycle - ([PR#7227](https://redirect.github.com/dubzzz/fast-check/pull/7227)) Create an `afterEach` plugin - ([PR#7232](https://redirect.github.com/dubzzz/fast-check/pull/7232)) Deprecate life-cycle methods - ([PR#7235](https://redirect.github.com/dubzzz/fast-check/pull/7235)) Support teardown of `beforeEach` plugin - ([PR#7228](https://redirect.github.com/dubzzz/fast-check/pull/7228)) Add `timeout` plugin to stop long running predicates - ([PR#7237](https://redirect.github.com/dubzzz/fast-check/pull/7237)) Deprecate timeout from parameters - ([PR#7238](https://redirect.github.com/dubzzz/fast-check/pull/7238)) Pass a store to plugins - ([PR#7239](https://redirect.github.com/dubzzz/fast-check/pull/7239)) Add extra plugin's method called `onAllRunsComplete` - ([PR#7240](https://redirect.github.com/dubzzz/fast-check/pull/7240)) Deprecate `reporter` and `asyncReporter` from parameters - ([PR#7229](https://redirect.github.com/dubzzz/fast-check/pull/7229)) Add plugin to interrupt after time limit - ([PR#7245](https://redirect.github.com/dubzzz/fast-check/pull/7245)) Support `failOnInterrupt` on the plugin - ([PR#7230](https://redirect.github.com/dubzzz/fast-check/pull/7230)) Add plugins to drop runs on already covered cases - ([PR#7259](https://redirect.github.com/dubzzz/fast-check/pull/7259)) Add ability to decorate `generate` via Plugins - ([PR#7231](https://redirect.github.com/dubzzz/fast-check/pull/7231)) Add the `unbiased` plugin to generate without bias - ([PR#7260](https://redirect.github.com/dubzzz/fast-check/pull/7260)) Deprecate parameters superseded by plugins - ([PR#7261](https://redirect.github.com/dubzzz/fast-check/pull/7261)) Deprecate v5 removals #### Fixes - ([PR#7225](https://redirect.github.com/dubzzz/fast-check/pull/7225)) Bug: Proper ordering between plugins - ([PR#7127](https://redirect.github.com/dubzzz/fast-check/pull/7127)) CI: Announce on Bluesky when drafting the release - ([PR#7217](https://redirect.github.com/dubzzz/fast-check/pull/7217)) CI: Dedupe packages for pnpm - ([PR#7137](https://redirect.github.com/dubzzz/fast-check/pull/7137)) Doc: Release note for 4.9.0 - ([PR#7226](https://redirect.github.com/dubzzz/fast-check/pull/7226)) Doc: Fix admonition titles on the website - ([PR#7246](https://redirect.github.com/dubzzz/fast-check/pull/7246)) Doc: Add jkomyno as code contributor - ([PR#7251](https://redirect.github.com/dubzzz/fast-check/pull/7251)) Performance: Single timer for `interruptAfterTimeLimit` *** </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
e6344c93b1 |
chore(deps): update dependency @fast-check/vitest to ^0.5.0 (#12703)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@fast-check/vitest](https://redirect.github.com/dubzzz/fast-check/tree/main/packages/vitest#readme) ([source](https://redirect.github.com/dubzzz/fast-check/tree/HEAD/packages/vitest)) | [`^0.4.1` → `^0.5.0`](https://renovatebot.com/diffs/npm/@fast-check%2fvitest/0.4.1/0.5.0) |  |  | --- ### Release Notes <details> <summary>dubzzz/fast-check (@​fast-check/vitest)</summary> ### [`v0.5.0`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/vitest/CHANGELOG.md#050) *Support for plugins and for Vitest v5* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/vitest%2Fv0.5.0)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/vitest%2Fv0.4.1...vitest%2Fv0.5.0)] #### Features - ([PR#7219](https://redirect.github.com/dubzzz/fast-check/pull/7219)) Support plugin API of fast-check - ([PR#7244](https://redirect.github.com/dubzzz/fast-check/pull/7244)) Support Vitest 5 *** </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
0a7c1c73db |
fix(deps): update dependency ip-address to v10.7.2 (#12702)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ip-address](https://redirect.github.com/beaugunderson/ip-address) | [`10.7.1` → `10.7.2`](https://renovatebot.com/diffs/npm/ip-address/10.7.1/10.7.2) |  |  | --- ### Release Notes <details> <summary>beaugunderson/ip-address (ip-address)</summary> ### [`v10.7.2`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.7.2) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.7.1...v10.7.2) #### What's Changed - Accept an arpa suffix in any case and without the root dot in fromArpa by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​227](https://redirect.github.com/beaugunderson/ip-address/pull/227) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.7.1...v10.7.2> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
4fc6b613cb |
fix(deps): update dependency ip-address to v10.7.1 [security] (#12694)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ip-address](https://redirect.github.com/beaugunderson/ip-address) | [`10.5.1` → `10.7.1`](https://renovatebot.com/diffs/npm/ip-address/10.5.1/10.7.1) |  |  | --- ### ip-address: Address6 builds a parse diagnostic proportional to the input with no length bound, allowing a single long string to stall or crash the process [CVE-2026-101911](https://nvd.nist.gov/vuln/detail/CVE-2026-101911) / [GHSA-h3mg-xc3c-68pw](https://redirect.github.com/advisories/GHSA-h3mg-xc3c-68pw) <details> <summary>More information</summary> #### Details ##### Summary `new Address6()` and `Address6.isValid()` place no bound on the length of the string they parse. When the string contains a character that cannot appear in an IPv6 address, the parser builds a diagnostic that wraps every such character in a 34-byte `<span class="parse-error">`, so the work and the memory scale with the input rather than with an address. A 1 MiB string of `!` costs about 110 MB and 70 ms of synchronous work, 8 MiB costs about 800 MB and half a second, 16 MiB throws a `RangeError` in place of the documented `AddressError`, and 32 MiB aborts the Node process. `isValid()` builds the diagnostic and discards it, so a caller that only asks whether a string is valid pays the full price. An application that validates an attacker-supplied string with these methods can be stalled or crashed by a single oversized request. This is a crash on input that should have been rejected cleanly, which SECURITY.md lists as in scope. ##### Details `parse()` in `src/ipv6.ts` checks for characters outside `[0-9a-f:/%]` and, on finding any, throws an `AddressError` whose `parseMessage` is the whole input with each offending character wrapped: ```ts const badCharacters = address.match(constants6.RE_BAD_CHARACTERS); if (badCharacters) { throw new AddressError( `Bad character${badCharacters.length > 1 ? 's' : ''} detected in address: ${badCharacters.join('')}`, address.replace(constants6.RE_BAD_CHARACTERS, '<span class="parse-error">$1</span>'), ); } ``` `RE_BAD_CHARACTERS` is `/([^0-9a-f:/%])/gi`. For an input made entirely of punctuation the `match` allocates one string per character, the `join` copies them all into the message, and the `replace` produces a string 34 times the input. Nothing before this point looks at the length: the constructor strips a CIDR suffix and a zone identifier and hands the rest to `parse()`. The `RE_BAD_ADDRESS` branch below it builds its diagnostic the same way at about a third of the ratio, for input in the hex-and-colon alphabet such as `fffff:` repeated. `parse()` is reached only through the constructor, so every entry point that constructs an `Address6` from a string it has not already bounded is affected: `new Address6()`, `isValid()`, both arguments of `fromAddressAndMask()` and `fromAddressAndWildcardMask()`, `fromWildcard()`, and the prefix argument of `fromAddress4Nat64()` and `toAddress4Nat64()`. `fromURL()` admits only hex, colons, and dots in a host, so it reaches the `RE_BAD_ADDRESS` branch and not the other. `fromArpa()` caps its input at 32 nibbles before constructing anything, and `fromBigInt()`, `fromByteArray()`, and `fromAddress4()` build the string themselves, so those are unaffected. The `replace` is where size becomes fatal. V8 caps a string at 2^29 - 24 characters, so past 16 MiB of input the `replace` throws `RangeError: Invalid string length` rather than the `AddressError` callers catch; `isValid()` swallows it, but a constructor call guarded by `instanceof AddressError` does not. Past 32 MiB the replacement builder's internal array exceeds its maximum size and V8 aborts the process with `Fatal JavaScript invalid size error`, which no `try`/`catch` intercepts. ##### Affected versions `<= 10.7.0`. The diagnostic has had this shape since the parser was written, so every release is affected. ##### Impact `Address6.isValid()` on N bytes of `!`, measured on node 24.19.0: | Input | Wall time | Transient heap | Outcome | |---|---|---|---| | 16 KiB | 1 ms | 1 MB | `false` | | 1 MiB | 73 ms | 112 MB | `false` | | 8 MiB | 464 ms | 784 MB | `false` | | 16 MiB | | | `RangeError: Invalid string length` from the constructor; `isValid()` returns `false` | | 32 MiB | | | the process aborts | The parse is synchronous, so the event loop is blocked for the whole of the wall time and nothing else on that process is served. The heap is transient and is reclaimed after the call returns, so memory does not accumulate across requests; the abort at 32 MiB is a single request. `Address4` has no diagnostic of this shape and parses the same 8 MiB in a few milliseconds. ##### Reachability Reaching the sizes above requires that the application hand the parser a string it has not already bounded. A host taken from a URL or an HTTP header is bounded by the server's header limit (Node's default is 16 KB), and at that size the cost is a millisecond. The megabyte sizes need a request body the application accepts at that scale and passes through unchecked. Common body parsers default to between 100 KB and 1 MB, which caps the effect at a stall of under 100 ms per request, and the abort needs 32 MiB in a single field, which no default admits. The severity is scored for the stall, not the abort: an application that accepts 32 MiB bodies into an address parser is the exception, and the reader running one should treat this as a crash. ##### Proof of concept `npm i ip-address@10.7.0`, then: ```js const { Address6 } = require('ip-address'); for (const mib of [1, 8]) { const input = '!'.repeat(mib * 1024 * 1024); const before = process.memoryUsage().heapUsed; const start = process.hrtime.bigint(); Address6.isValid(input); const ms = Number(process.hrtime.bigint() - start) / 1e6; const mb = (process.memoryUsage().heapUsed - before) / 1048576; console.log(`${mib} MiB: ${ms.toFixed(0)} ms, ${mb.toFixed(0)} MB`); } try { new Address6('!'.repeat(16 * 1024 * 1024)); } catch (e) { console.log(`16 MiB: ${e.name}: ${e.message}`); } new Address6('!'.repeat(32 * 1024 * 1024)); ``` On affected versions (node 24.19.0): ``` 1 MiB: 73 ms, 112 MB 8 MiB: 464 ms, 784 MB 16 MiB: RangeError: Invalid string length # ##### Fatal error in , line 0 ##### Fatal JavaScript invalid size error 142606336 # ``` The last line is V8 terminating the process; the script does not reach its end. ##### Remediation Upgrade to the patched release. In the fix, the constructor rejects an address longer than the family allows before `parse()` runs: 45 characters for IPv6 once the CIDR suffix and zone identifier are stripped (six four-digit groups, six colons, and a dotted quad, the same line CPython's `ipaddress` module draws), and 15 characters for IPv4. The rejection is an `AddressError` with no `parseMessage`, so `isValid()` returns `false` for the cost of a length comparison and the 32 MiB input above is rejected in the same time as a 46-character one. A zone identifier is not counted, since it never reaches the diagnostic. This rejects nothing a previous release accepted: every string longer than the limit already failed to parse. If you cannot upgrade immediately, reject a candidate longer than an address with a zone identifier can be before you parse it: ```js if (host.length > 64) throw new Error('not an IP address'); ``` #### Severity - CVSS Score: 6.3 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-h3mg-xc3c-68pw](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-h3mg-xc3c-68pw) - [https://nvd.nist.gov/vuln/detail/CVE-2026-101911](https://nvd.nist.gov/vuln/detail/CVE-2026-101911) - [https://github.com/beaugunderson/ip-address/commit/469ead1231b4cc059f2150c626e1e0c2895c0134](https://redirect.github.com/beaugunderson/ip-address/commit/469ead1231b4cc059f2150c626e1e0c2895c0134) - [https://github.com/beaugunderson/ip-address/commit/8b34a21e0839b37c094066816fb2c2c48a2adcf5](https://redirect.github.com/beaugunderson/ip-address/commit/8b34a21e0839b37c094066816fb2c2c48a2adcf5) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.7.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.7.1) - [https://github.com/advisories/GHSA-h3mg-xc3c-68pw](https://redirect.github.com/advisories/GHSA-h3mg-xc3c-68pw) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-h3mg-xc3c-68pw) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### ip-address: isInSubnet() and isHostInSubnet() compare addresses of different families as if they shared an address space, allowing an allowlist check to admit an address outside its range [CVE-2026-101912](https://nvd.nist.gov/vuln/detail/CVE-2026-101912) / [GHSA-j6r3-76f7-8jcv](https://redirect.github.com/advisories/GHSA-j6r3-76f7-8jcv) <details> <summary>More information</summary> #### Details ##### Summary `isInSubnet()` and `isHostInSubnet()` accept an address of either family and compare masked binary strings without checking that both operands are the same family. `Address4` pads to 32 bits and `Address6` to 128, so whenever the leading bits agree the strings are equal: `new Address6('a00::1').isInSubnet(new Address4('10.0.0.0/8'))` is `true`, and `new Address4('32.0.0.1').isInSubnet(new Address6('2000::/3'))` is `true`. No IPv4 address is inside an IPv6 network, so both answers are untrue. An application that parses untrusted input as whichever family accepts it and then tests the result against a fixed-family allowlist can admit an address outside the list. ##### Details Both methods are in `src/common.ts`: ```ts export function isInSubnet(this: Address4 | Address6, address: Address4 | Address6) { if (this.subnetMask < address.subnetMask) { return false; } return isHostInSubnet.call(this, address); } export function isHostInSubnet(this: Address4 | Address6, address: Address4 | Address6) { return this.mask(address.subnetMask) === address.mask(); } ``` `mask(n)` returns the first `n` bits of the address as a string of `0` and `1`, taken from a representation padded to the family's width. `new Address6('a00::1').mask(8)` is `'00001010'`, and so is `new Address4('10.0.0.0/8').mask()`, so string equality reports containment. The signature admits either family on either side, so TypeScript raises nothing, and the `v4` property on `Address6` marks IPv4 notation (`::ffff:10.0.0.1`) rather than family, so it does not discriminate either. Which cross-family pairs coincide depends on the network's prefix length. `mask(n)` on an `Address4` returns at most 32 bits, so an IPv6 network longer than `/32` never matches an IPv4 address, and an IPv6 network of `/32` or shorter matches exactly the IPv4 addresses whose leading bits equal its prefix. An IPv4 network is at most 32 bits and matches every IPv6 address whose leading bits equal its prefix. ##### Affected versions `<= 10.7.0`. The comparison has had this shape since the methods were written, so every release is affected. ##### Impact | Expression | Result | Reason | |---|---|---| | `new Address6('a00::1').isInSubnet(new Address4('10.0.0.0/8'))` | `true` | both mask to `00001010` | | `new Address4('10.0.0.1').isInSubnet(new Address6('a00::/8'))` | `true` | the same bits, reversed | | `new Address4('32.0.0.1').isInSubnet(new Address6('2000::/3'))` | `true` | both begin `001` | | `new Address4('32.1.13.184').isInSubnet(new Address6('2001:db8::/32'))` | `true` | the `/32` spells an IPv4 address | | `new Address6('cb00:7100::1').isInSubnet(new Address4('203.0.113.0/24'))` | `true` | the `/24` spells an IPv6 prefix | | `new Address4('10.0.0.1').isInSubnet(new Address6('::ffff:10.0.0.0/104'))` | `false` | `/104` is longer than 32 bits | | `new Address4('8.8.8.8').isInSubnet(new Address4('10.0.0.0/8'))` | `false` | same-family control | In the allowlist direction the check admits an address outside the list; in the denylist direction it blocks an address outside the list. What the coincidence can admit is narrow. An IPv6 allowlist of `/32` or shorter admits the IPv4 addresses its prefix spells: `2001:db8::/32` admits exactly `32.1.13.184`, and `2000::/3` admits `32.0.0.0/3`. Those are public IPv4 addresses; the private, loopback, and link-local ranges begin with bit patterns no allocated IPv6 prefix shares. An IPv4 allowlist admits the IPv6 addresses its prefix spells, and those all sit in blocks IANA has not allocated. So a request admitted through this defect reaches an address outside the intended list, not an internal host, and the severity reflects that. ##### Proof of concept `npm i ip-address@10.7.0`, then: ```js const { Address4, Address6 } = require('ip-address'); // An allowlist of the application's own IPv6 range, tested against whichever // family the input parses as. const allowed = new Address6('2001:db8::/32'); function parse(host) { return Address4.isValid(host) ? new Address4(host) : new Address6(host); } for (const h of ['2001:db8::1', '2001:db9::1', '32.1.13.184', '32.1.13.185']) { console.log(parse(h).isInSubnet(allowed) ? 'ALLOW' : 'BLOCK', h); } ``` On affected versions: ``` ALLOW 2001:db8::1 BLOCK 2001:db9::1 ALLOW 32.1.13.184 BLOCK 32.1.13.185 ``` The IPv6 rows are right. The IPv4 address whose 32 bits equal the allowlist's prefix is admitted; the one next to it is not. ##### Remediation Upgrade to the patched release. In the fix, `isHostInSubnet()` returns `false` when the two addresses are of different families, and `isInSubnet()` inherits the answer. The methods keep accepting either family so existing call sites compile. A caller that means to compare across families converts first, with `Address6.fromAddress4()`, `to4()`, or `toAddress4Nat64()`: `new Address6('::ffff:10.0.0.1').to4().isInSubnet(new Address4('10.0.0.0/8'))` is `true`, as before. If you cannot upgrade immediately, compare the classes before you compare the addresses: ```js const contained = host.constructor === network.constructor && host.isInSubnet(network); ``` ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. #### Severity - CVSS Score: 6.3 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-j6r3-76f7-8jcv](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-j6r3-76f7-8jcv) - [https://nvd.nist.gov/vuln/detail/CVE-2026-101912](https://nvd.nist.gov/vuln/detail/CVE-2026-101912) - [https://github.com/beaugunderson/ip-address/commit/1343629d57fea413644a5c9d41ff1e59619f3f28](https://redirect.github.com/beaugunderson/ip-address/commit/1343629d57fea413644a5c9d41ff1e59619f3f28) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.7.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.7.1) - [https://github.com/advisories/GHSA-j6r3-76f7-8jcv](https://redirect.github.com/advisories/GHSA-j6r3-76f7-8jcv) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-j6r3-76f7-8jcv) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### Release Notes <details> <summary>beaugunderson/ip-address (ip-address)</summary> ### [`v10.7.1`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.7.1) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.7.0...v10.7.1) #### What's Changed - Bump js-yaml and brace-expansion in the lockfile by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​226](https://redirect.github.com/beaugunderson/ip-address/pull/226) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.7.0...v10.7.1> ### [`v10.7.0`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.7.0) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.6.0...v10.7.0) #### What's Changed - Add offset() and nextNetwork(), accept prefix-length ip6.arpa names, correct the IPv6 end-address docs by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​225](https://redirect.github.com/beaugunderson/ip-address/pull/225) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.6.0...v10.7.0> ### [`v10.6.0`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.6.0) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.5.1...v10.6.0) #### What's Changed - Add isGlobal() and pin the classifiers to the IANA special-purpose registries by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​224](https://redirect.github.com/beaugunderson/ip-address/pull/224) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.5.1...v10.6.0> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
43d57924a9 |
chore(deps): bump nodemailer from 9.0.1 to 10.0.2
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 9.0.1 to 10.0.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nodemailer/nodemailer/releases">nodemailer's releases</a>.</em></p> <blockquote> <h2>v10.0.2</h2> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v10.0.1...v10.0.2">10.0.2</a> (2026-09-09)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>mime-node:</strong> flatten nested recipient arrays without recursion (<a href="https://github.com/nodemailer/nodemailer/commit/ebe084940aef88278afc6016b78c6d1c3821bb66">ebe0849</a>)</li> <li><strong>shared:</strong> keep the TLS server name out of the DNS cache (<a href="https://github.com/nodemailer/nodemailer/commit/a6512dbcb3c6e7f2f70d3acccc5752defe3c61fe">a6512db</a>)</li> </ul> <h2>v10.0.1</h2> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v10.0.0...v10.0.1">10.0.1</a> (2026-09-07)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>types:</strong> accept an explicit undefined for optional properties (<a href="https://github.com/nodemailer/nodemailer/commit/209719dd6a192656a6b18de265a3b4ac387208ff">209719d</a>), closes <a href="https://redirect.github.com/nodemailer/nodemailer/issues/1853">#1853</a></li> <li><strong>types:</strong> drop the internal members from the published declarations (<a href="https://github.com/nodemailer/nodemailer/commit/81e64eaee70aabf867afef88d3733556c9fcc1cc">81e64ea</a>)</li> </ul> <h2>v10.0.0</h2> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v9.1.1...v10.0.0">10.0.0</a> (2026-09-03)</h2> <h3>⚠ BREAKING CHANGES</h3> <ul> <li>Node.js 20 or newer is required. The Node.js 6 syntax compatibility check and the .npmignore file are gone.</li> </ul> <h3>Features</h3> <ul> <li>keep the <code>@types/nodemailer</code> type layout working (<a href="https://github.com/nodemailer/nodemailer/commit/1cc535627e1bb672214b09fa4cc503567275fd7f">1cc5356</a>)</li> <li>migrate to TypeScript with ES module and CommonJS builds (<a href="https://github.com/nodemailer/nodemailer/commit/f7cbf8384e0ea6055efcc514afb8bc070ac3a2b1">f7cbf83</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>apply the other keys of a configuration object next to its url (<a href="https://github.com/nodemailer/nodemailer/commit/29610f9fe04dbd8af04c4a3362f3b68d293592da">29610f9</a>)</li> <li><strong>dkim:</strong> canonicalize raw messages the way verifiers do (<a href="https://github.com/nodemailer/nodemailer/commit/2c84b117d4d138751e9ffa8607f3796771bb5e66">2c84b11</a>)</li> <li>keep a transporter assignable to the plain Transporter type (<a href="https://github.com/nodemailer/nodemailer/commit/8bf55fb177cf155b24d6bb86a7cd86670146d551">8bf55fb</a>)</li> <li><strong>shared:</strong> keep a colon in the user name of a connection or proxy url (<a href="https://github.com/nodemailer/nodemailer/commit/6acf4b67d919971f516f58940113c9b8598b2254">6acf4b6</a>)</li> <li><strong>shared:</strong> refuse URL hosts the legacy parser would truncate (<a href="https://github.com/nodemailer/nodemailer/commit/17a5068f06e62fc04e1d5545ed70d4248bef258e">17a5068</a>)</li> <li><strong>shared:</strong> resolve hostnames when the runtime has no interface table (<a href="https://github.com/nodemailer/nodemailer/commit/8b032407135ea05ae377e623a7021705a4a139d0">8b03240</a>)</li> <li><strong>smtp-connection:</strong> clear the timers of a connection dropped before the greeting (<a href="https://github.com/nodemailer/nodemailer/commit/01dcaa05b212aafc33747041027fb8c66497e0eb">01dcaa0</a>)</li> <li><strong>smtp-connection:</strong> keep an incomplete server reply out of lastServerResponse (<a href="https://github.com/nodemailer/nodemailer/commit/1a6e4271adb808509adf11832ad1adfdfc05c31b">1a6e427</a>)</li> <li><strong>smtp-pool:</strong> free the pool slot when the proxy socket can not be opened (<a href="https://github.com/nodemailer/nodemailer/commit/204a344f7e4068ff41385195ee394a223ebadd84">204a344</a>)</li> <li><strong>well-known:</strong> keep nodemailer/lib/well-known/services.json available (<a href="https://github.com/nodemailer/nodemailer/commit/367730cce85bc78c7804405c2cc7d89d93aafdd1">367730c</a>)</li> </ul> <h2>v9.1.1</h2> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v9.1.0...v9.1.1">9.1.1</a> (2026-09-01)</h2> <h3>Bug Fixes</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md">nodemailer's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v10.0.1...v10.0.2">10.0.2</a> (2026-09-09)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>mime-node:</strong> flatten nested recipient arrays without recursion (<a href="https://github.com/nodemailer/nodemailer/commit/ebe084940aef88278afc6016b78c6d1c3821bb66">ebe0849</a>)</li> <li><strong>shared:</strong> keep the TLS server name out of the DNS cache (<a href="https://github.com/nodemailer/nodemailer/commit/a6512dbcb3c6e7f2f70d3acccc5752defe3c61fe">a6512db</a>)</li> </ul> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v10.0.0...v10.0.1">10.0.1</a> (2026-09-07)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>types:</strong> accept an explicit undefined for optional properties (<a href="https://github.com/nodemailer/nodemailer/commit/209719dd6a192656a6b18de265a3b4ac387208ff">209719d</a>), closes <a href="https://redirect.github.com/nodemailer/nodemailer/issues/1853">#1853</a></li> <li><strong>types:</strong> drop the internal members from the published declarations (<a href="https://github.com/nodemailer/nodemailer/commit/81e64eaee70aabf867afef88d3733556c9fcc1cc">81e64ea</a>)</li> </ul> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v9.1.1...v10.0.0">10.0.0</a> (2026-09-03)</h2> <h3>⚠ BREAKING CHANGES</h3> <ul> <li>Node.js 20 or newer is required. The Node.js 6 syntax compatibility check and the .npmignore file are gone.</li> </ul> <h3>Features</h3> <ul> <li>keep the <code>@types/nodemailer</code> type layout working (<a href="https://github.com/nodemailer/nodemailer/commit/1cc535627e1bb672214b09fa4cc503567275fd7f">1cc5356</a>)</li> <li>migrate to TypeScript with ES module and CommonJS builds (<a href="https://github.com/nodemailer/nodemailer/commit/f7cbf8384e0ea6055efcc514afb8bc070ac3a2b1">f7cbf83</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>apply the other keys of a configuration object next to its url (<a href="https://github.com/nodemailer/nodemailer/commit/29610f9fe04dbd8af04c4a3362f3b68d293592da">29610f9</a>)</li> <li><strong>dkim:</strong> canonicalize raw messages the way verifiers do (<a href="https://github.com/nodemailer/nodemailer/commit/2c84b117d4d138751e9ffa8607f3796771bb5e66">2c84b11</a>)</li> <li>keep a transporter assignable to the plain Transporter type (<a href="https://github.com/nodemailer/nodemailer/commit/8bf55fb177cf155b24d6bb86a7cd86670146d551">8bf55fb</a>)</li> <li><strong>shared:</strong> keep a colon in the user name of a connection or proxy url (<a href="https://github.com/nodemailer/nodemailer/commit/6acf4b67d919971f516f58940113c9b8598b2254">6acf4b6</a>)</li> <li><strong>shared:</strong> refuse URL hosts the legacy parser would truncate (<a href="https://github.com/nodemailer/nodemailer/commit/17a5068f06e62fc04e1d5545ed70d4248bef258e">17a5068</a>)</li> <li><strong>shared:</strong> resolve hostnames when the runtime has no interface table (<a href="https://github.com/nodemailer/nodemailer/commit/8b032407135ea05ae377e623a7021705a4a139d0">8b03240</a>)</li> <li><strong>smtp-connection:</strong> clear the timers of a connection dropped before the greeting (<a href="https://github.com/nodemailer/nodemailer/commit/01dcaa05b212aafc33747041027fb8c66497e0eb">01dcaa0</a>)</li> <li><strong>smtp-connection:</strong> keep an incomplete server reply out of lastServerResponse (<a href="https://github.com/nodemailer/nodemailer/commit/1a6e4271adb808509adf11832ad1adfdfc05c31b">1a6e427</a>)</li> <li><strong>smtp-pool:</strong> free the pool slot when the proxy socket can not be opened (<a href="https://github.com/nodemailer/nodemailer/commit/204a344f7e4068ff41385195ee394a223ebadd84">204a344</a>)</li> <li><strong>well-known:</strong> keep nodemailer/lib/well-known/services.json available (<a href="https://github.com/nodemailer/nodemailer/commit/367730cce85bc78c7804405c2cc7d89d93aafdd1">367730c</a>)</li> </ul> <h2><a href="https://github.com/nodemailer/nodemailer/compare/v9.1.0...v9.1.1">9.1.1</a> (2026-09-01)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>mailer:</strong> apply the message access policy in resolveContent (<a href="https://github.com/nodemailer/nodemailer/commit/dc48ed395c4d6c79ee5c95eb6eff17bafe391474">dc48ed3</a>)</li> <li><strong>mailer:</strong> keep message data from reopening the access sandbox (<a href="https://github.com/nodemailer/nodemailer/commit/ab7ef348b9a97b1fd70e7bfbeb56d4ea4a07946b">ab7ef34</a>)</li> <li><strong>mime-node:</strong> inherit the access policy from the tree a node hangs in (<a href="https://github.com/nodemailer/nodemailer/commit/262d550b1e121e3ff4ef6675d6771a5b2b4ddcec">262d550</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/nodemailer/nodemailer/commit/01957998adab6c56b3f63c17a39a72a3ff18f3f4"><code>0195799</code></a> chore(master): release 10.0.2 (<a href="https://redirect.github.com/nodemailer/nodemailer/issues/1855">#1855</a>)</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/d456fd68dfb559392af5b0f0926979d4c5e3ef67"><code>d456fd6</code></a> test: resolve the TLS server name test host without a resolver stub</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/ebe084940aef88278afc6016b78c6d1c3821bb66"><code>ebe0849</code></a> fix(mime-node): flatten nested recipient arrays without recursion</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/a6512dbcb3c6e7f2f70d3acccc5752defe3c61fe"><code>a6512db</code></a> fix(shared): keep the TLS server name out of the DNS cache</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/40d52215aac65b811d7e131bc916f68605efd9d2"><code>40d5221</code></a> chore(master): release 10.0.1 (<a href="https://redirect.github.com/nodemailer/nodemailer/issues/1854">#1854</a>)</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/81e64eaee70aabf867afef88d3733556c9fcc1cc"><code>81e64ea</code></a> fix(types): drop the internal members from the published declarations</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/c5dba6e2c6e3705d046a26663fef0e4bda13c0fa"><code>c5dba6e</code></a> chore: turn on exactOptionalPropertyTypes for the type-check</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/209719dd6a192656a6b18de265a3b4ac387208ff"><code>209719d</code></a> fix(types): accept an explicit undefined for optional properties</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/2ee030ca78c18db4b1f7e040fdce285c51972a96"><code>2ee030c</code></a> chore(master): release 10.0.0 (<a href="https://redirect.github.com/nodemailer/nodemailer/issues/1852">#1852</a>)</li> <li><a href="https://github.com/nodemailer/nodemailer/commit/8bf55fb177cf155b24d6bb86a7cd86670146d551"><code>8bf55fb</code></a> fix: keep a transporter assignable to the plain Transporter type</li> <li>Additional commits viewable in <a href="https://github.com/nodemailer/nodemailer/compare/v9.0.1...v10.0.2">compare view</a></li> </ul> </details> <details> <summary>Install script changes</summary> <p>This version adds <code>prepare</code> script that runs during installation. Review the package contents before updating.</p> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/bricks-software/unleash-enterprise/network/alerts). </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Simon Hornby <simon@getunleash.io> Co-authored-by: Simon Hornby <liquidwicked64@gmail.com> |
||
|
|
865d2d5ae7 | test: improved playground tests | ||
|
|
0f5cbc7633 |
chore(deps): update dependency @types/node to v22.20.4 (#12682)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.20.3` → `22.20.4`](https://renovatebot.com/diffs/npm/@types%2fnode/22.20.3/22.20.4) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
d1887556ba |
fix(deps): update dependency ip-address to v10.5.1 [security] (#12686)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ip-address](https://redirect.github.com/beaugunderson/ip-address) | [`10.3.1` → `10.5.1`](https://renovatebot.com/diffs/npm/ip-address/10.3.1/10.5.1) |  |  | --- ### ip-address: no classifier recognizes the NAT64 local-use range 64:ff9b:1::/48, allowing SSRF and trust-boundary bypass [CVE-2026-101910](https://nvd.nist.gov/vuln/detail/CVE-2026-101910) / [GHSA-2vr4-cq9g-pvrc](https://redirect.github.com/advisories/GHSA-2vr4-cq9g-pvrc) <details> <summary>More information</summary> #### Details ##### Summary No classifier on `Address6` recognizes the NAT64 local-use range `64:ff9b:1::/48` (RFC 8215). `isPrivate()`, `isLoopback()`, `isLinkLocal()` and their siblings all return `false` for every address in it, so an internal IPv4 destination written through a local-use NAT64 prefix (`64:ff9b:1:7f00:0:100::` for `127.0.0.1`, `64:ff9b:1:a9fe:a9:fe00::` for `169.254.169.254`) reads as an ordinary global address. `getType()` names the range `'NAT64 (local-use)'`, so the library knows what the address is and classifies it as nothing. An application that builds a network trust-boundary decision on these checks (for example a filter intended to block Server-Side Request Forgery, or SSRF) will classify an internal target as external and allow the request. SSRF is an attack in which a user-supplied address coaxes the server into making a request to an internal destination the user could not otherwise reach, such as a loopback service or a cloud metadata endpoint. ##### Details The fix for GHSA-22jq-vg5j-6vgg (10.2.1) classifies IPv4-mapped (`::ffff:0:0/96`) and NAT64 well-known (`64:ff9b::/96`) addresses by their embedded IPv4 address: `embeddedIPv4()` in `src/ipv6.ts` decodes the trailing 32 bits and every special-use classifier delegates to the resulting `Address4`. Those are the only two ranges `embeddedIPv4()` handles. The local-use range differs in kind from the well-known prefix, which is why extending the decoder does not fix it. RFC 8215 reserves `64:ff9b:1::/48` so an operator can carve their own NAT64 prefix out of it, of any length RFC 6052 allows (`/48`, `/56`, `/64`, or `/96`). Where the IPv4 address sits depends on that choice: `127.0.0.1` is `64:ff9b:1:7f00:0:100::` under a `/48` prefix and `64:ff9b:1::7f00:1` under a `/96` prefix, and each of those decodes to a different address under the other prefix length. There is no single embedded IPv4 address for the library to classify by. What is well-defined is the range as a whole. The IANA IPv6 Special-Purpose Address Registry lists `64:ff9b:1::/48` as not globally reachable, and Python's `ipaddress` module reports `is_private` as `True` and `is_global` as `False` for every address in it. `isPrivate()` covered ULA (`fc00::/7`) plus the decoded mapped and well-known cases, and nothing in the local-use range. ##### Affected versions `>= 10.2.0, <= 10.5.0`. The `is*` classification API was extended to `Address6` in 10.2.0; releases before it do not expose the method and are not affected through this vector. ##### Impact Every address in `64:ff9b:1::/48` parses successfully, `isValid()` is `true`, and no classifier catches it. Which internal target is reached depends on the NAT64 prefix deployed on the server's network; the well-known prefix column is the patched control from GHSA-22jq-vg5j-6vgg. | Internal target | Well-known form | Classified | Local-use form (`/48` prefix) | Classified | |---|---|---|---|---| | `127.0.0.1` | `64:ff9b::7f00:1` | loopback | `64:ff9b:1:7f00:0:100::` | nothing | | `10.0.0.1` | `64:ff9b::a00:1` | private | `64:ff9b:1:a00:0:100::` | nothing | | `169.254.169.254` | `64:ff9b::a9fe:a9fe` | link-local | `64:ff9b:1:a9fe:a9:fe00::` | nothing | | `192.168.1.1` | `64:ff9b::c0a8:101` | private | `64:ff9b:1:c0a8:1:100::` | nothing | ##### Reachability Reaching an internal host through one of these addresses requires that the server's network run a NAT64 translator on a prefix inside `64:ff9b:1::/48` and that the attacker guess or know the prefix length. That is the same precondition the well-known prefix carries (a translator on `64:ff9b::/96`), with the additional constraint that the prefix is operator-chosen rather than fixed. The severity reflects that precondition. ##### Proof of concept `npm i ip-address@10.5.0`, then: ```js const { Address6 } = require('ip-address'); // A guard of the shape the library documents. function isBlocked(host) { const a = new Address6(host); return a.isLoopback() || a.isLinkLocal() || a.isPrivate() || a.isMulticast() || a.isUnspecified(); } for (const h of ['64:ff9b::7f00:1', '64:ff9b:1:7f00:0:100::', '64:ff9b:1::7f00:1']) { console.log(isBlocked(h) ? 'BLOCK' : 'ALLOW', h, '-> getType()', new Address6(h).getType()); } ``` On affected versions: ``` BLOCK 64:ff9b::7f00:1 -> getType() NAT64 (well-known) ALLOW 64:ff9b:1:7f00:0:100:: -> getType() NAT64 (local-use) ALLOW 64:ff9b:1::7f00:1 -> getType() NAT64 (local-use) ``` ##### Remediation Upgrade to the patched release. In the fix, `isPrivate()` returns `true` for every address in `64:ff9b:1::/48`, alongside ULA and the decoded mapped and well-known cases. The range is reported private as a whole rather than by a decoded IPv4 address, for the reason given above; `toAddress4Nat64(prefix)` remains the way to decode an address under a known deployment prefix. `isLoopback()` and `isLinkLocal()` are unchanged for this range, since without the prefix length the library cannot know which IPv4 address is embedded. If you cannot upgrade immediately, test the range directly: ```js const NAT64_LOCAL_USE = new Address6('64:ff9b:1::/48'); const localUse = new Address6(host).isHostInSubnet(NAT64_LOCAL_USE); ``` ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. #### Severity - CVSS Score: 6.9 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-2vr4-cq9g-pvrc](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-2vr4-cq9g-pvrc) - [https://nvd.nist.gov/vuln/detail/CVE-2026-101910](https://nvd.nist.gov/vuln/detail/CVE-2026-101910) - [https://github.com/beaugunderson/ip-address/commit/ab3dc88bcf5374344168a2ba075ca7ac4ff257f8](https://redirect.github.com/beaugunderson/ip-address/commit/ab3dc88bcf5374344168a2ba075ca7ac4ff257f8) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.5.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.5.1) - [https://github.com/advisories/GHSA-2vr4-cq9g-pvrc](https://redirect.github.com/advisories/GHSA-2vr4-cq9g-pvrc) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-2vr4-cq9g-pvrc) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### ip-address: Address6.isLinkLocal() recognizes fe80::/64 rather than fe80::/10, allowing SSRF and trust-boundary bypass to on-link hosts [CVE-2026-101913](https://nvd.nist.gov/vuln/detail/CVE-2026-101913) / [GHSA-rpw4-54j3-4h4q](https://redirect.github.com/advisories/GHSA-rpw4-54j3-4h4q) <details> <summary>More information</summary> #### Details ##### Summary `Address6.isLinkLocal()` recognizes `fe80::/64` rather than `fe80::/10`. Link-local unicast is the whole `/10` under RFC 4291 §2.4 and the IANA IPv6 Special-Purpose Address Registry, so the method returns `false` for every link-local address outside the one `/64` that stateless address autoconfiguration happens to use. `new Address6('fe81::1').isLinkLocal()` is `false`. The library contradicts itself on the same object: for `fe81::1`, `getType()` returns `'Link-local unicast'`, `getScope()` returns `'Link local'`, and `isHostInSubnet(new Address6('fe80::/10'))` returns `true`, while `isLinkLocal()` returns `false`. An application that builds a network trust-boundary decision on these checks (for example a filter intended to block Server-Side Request Forgery, or SSRF) will classify a link-local target as unremarkable and allow the request. SSRF is an attack in which a user-supplied address coaxes the server into making a request to an internal destination the user could not otherwise reach. ##### Details `isLinkLocal()` in `src/ipv6.ts` compares the first 64 bits of the address against a literal string: ```ts // Zeroes are required, i.e. we can't check isHostInSubnet with 'fe80::/10' if ( this.getBitsBase2(0, 64) === '1111111010000000000000000000000000000000000000000000000000000000' ) { return true; } ``` The comparison requires the first 64 bits to be exactly `fe80:0000:0000:0000`, so it accepts 2⁶⁴ of the 2¹¹⁸ addresses in `fe80::/10`. The comment states a premise the library disproves: `getType()` classifies the same range with `isHostInSubnet` against the `'fe80::/10': 'Link-local unicast'` entry in `src/v6/constants.ts`, and `Address4.isLinkLocal()` is a plain `isHostInSubnet` test against `169.254.0.0/16`. RFC 4291 §2.5.6 constrains the format of an autoconfigured link-local address; it does not define the range, and reading it as the definition is the likeliest origin of the `/64` comparison. The IPv4-mapped and NAT64 well-known paths of `isLinkLocal()` are unaffected: `::ffff:169.254.169.254` and `64:ff9b::a9fe:a9fe` are classified by their embedded IPv4 address and report `true`. ##### Affected versions `<= 10.5.0`. The comparison has had this shape since `Address6.isLinkLocal()` was introduced, so every release exposing the method is affected. ##### Impact Every well-formed address in `fe80::/10` outside `fe80::/64` is parsed successfully, `isValid()` is `true`, and the classifier reports something untrue about it. No other classifier catches these addresses: `isPrivate()` covers ULA (`fc00::/7`), not link-local. | Address | `isLinkLocal()` | `getType()` | `getScope()` | |---|---|---|---| | `fe80::1` | `true` | Link-local unicast | Link local | | `fe81::1` | `false` | Link-local unicast | Link local | | `fe8f::1` | `false` | Link-local unicast | Link local | | `febf::1` | `false` | Link-local unicast | Link local | | `fe80:0:0:1::1` | `false` | Link-local unicast | Link local | | `fe80::1:0:0:0:1` | `false` | Link-local unicast | Link local | Python's `ipaddress` module, the `IN6_IS_ADDR_LINKLOCAL` macro in `netinet6/in6.h`, and Linux's `ipv6_addr_type()` all apply a ten-bit prefix test and classify every row above as link-local. A request admitted through a guard built on `isLinkLocal()` reaches a link-local host on the server's own segment: a neighboring machine or the on-link router. An IPv6 link-local destination generally needs a zone index and a neighbor on the same link, so the reach is the server's own segment rather than the internet or a universal metadata endpoint, and the severity reflects that. ##### Proof of concept `npm i ip-address@10.5.0`, then: ```js const { Address6 } = require('ip-address'); // A guard of the shape the library documents. function isBlocked(host) { const a = new Address6(host); return a.isLoopback() || a.isLinkLocal() || a.isPrivate() || a.isMulticast() || a.isUnspecified(); } for (const h of ['fe80::1', 'fe81::1', 'febf::1', 'fe80:0:0:1::1']) { const a = new Address6(h); console.log(isBlocked(h) ? 'BLOCK' : 'ALLOW', h, '-> getType()', a.getType()); } ``` On affected versions: ``` BLOCK fe80::1 -> getType() Link-local unicast ALLOW fe81::1 -> getType() Link-local unicast ALLOW febf::1 -> getType() Link-local unicast ALLOW fe80:0:0:1::1 -> getType() Link-local unicast ``` ##### Remediation Upgrade to the patched release. In the fix, `isLinkLocal()` tests the address against `fe80::/10` with the same `isHostInSubnet` predicate `getType()` and `Address4.isLinkLocal()` use. The same release adds `2001::/32` to the type table so `getType()` reports `'Teredo'` for the addresses `isTeredo()` returns `true` for; that is a consistency correction with no security effect. If you cannot upgrade immediately, test the range directly: ```js const LINK_LOCAL = new Address6('fe80::/10'); const linkLocal = new Address6(host).isHostInSubnet(LINK_LOCAL); ``` ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. #### Severity - CVSS Score: 6.3 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-rpw4-54j3-4h4q](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-rpw4-54j3-4h4q) - [https://nvd.nist.gov/vuln/detail/CVE-2026-101913](https://nvd.nist.gov/vuln/detail/CVE-2026-101913) - [https://github.com/beaugunderson/ip-address/commit/d03e960c7cc3179ef25c8a44b4f94dd499625546](https://redirect.github.com/beaugunderson/ip-address/commit/d03e960c7cc3179ef25c8a44b4f94dd499625546) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.5.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.5.1) - [https://github.com/advisories/GHSA-rpw4-54j3-4h4q](https://redirect.github.com/advisories/GHSA-rpw4-54j3-4h4q) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-rpw4-54j3-4h4q) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### Release Notes <details> <summary>beaugunderson/ip-address (ip-address)</summary> ### [`v10.5.1`](https://redirect.github.com/beaugunderson/ip-address/compare/v10.5.0...38b02d73cfc0724f9ad61c65b6328e116eac03ec) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.5.0...v10.5.1) ### [`v10.5.0`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.5.0) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.4.0...v10.5.0) ##### What's Changed - Honor the fromURL graceful-failure contract for non-IPv6 hosts by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​218](https://redirect.github.com/beaugunderson/ip-address/pull/218) - Correct the documentation where it disagreed with the library by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​219](https://redirect.github.com/beaugunderson/ip-address/pull/219) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.4.0...v10.5.0> ### [`v10.4.0`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.4.0) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.3.1...v10.4.0) #### What's Changed - Add GitHub Actions CI by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​213](https://redirect.github.com/beaugunderson/ip-address/pull/213) - Keep the package loadable on node 12, and enforce it by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​216](https://redirect.github.com/beaugunderson/ip-address/pull/216) - Validate the byte arrays Address6 is given by [@​beaugunderson](https://redirect.github.com/beaugunderson) in [#​217](https://redirect.github.com/beaugunderson/ip-address/pull/217) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.3.1...v10.4.0> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
4bdd5471bb | chore(deps): bump js-yaml from 4.3.1 to 4.3.2 | ||
|
|
62fc46b7df |
chore(deps): update dependency @types/node to v22.20.3 (#12675)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.20.2` → `22.20.3`](https://renovatebot.com/diffs/npm/@types%2fnode/22.20.2/22.20.3) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
c471bec671 |
chore(deps): update dependency @types/node to v22.20.2 (#12656)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.20.1` → `22.20.2`](https://renovatebot.com/diffs/npm/@types%2fnode/22.20.1/22.20.2) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC45NC4wIiwidXBkYXRlZEluVmVyIjoiNDQuOTQuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
ebac51753c |
chore(deps): update dependency fast-check to v4.9.0 (#12627)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [fast-check](https://fast-check.dev/) ([source](https://redirect.github.com/dubzzz/fast-check/tree/HEAD/packages/fast-check)) | [`4.8.0` → `4.9.0`](https://renovatebot.com/diffs/npm/fast-check/4.8.0/4.9.0) |  |  | --- ### Release Notes <details> <summary>dubzzz/fast-check (fast-check)</summary> ### [`v4.9.0`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#490) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.8.0...v4.9.0) *Shrinkable `entityGraph` and few performance chips* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.9.0)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.8.0...v4.9.0)] #### Features - ([PR#7008](https://redirect.github.com/dubzzz/fast-check/pull/7008)) Towards shrinkable `entityGraph` thanks to `chainUntil` #### Fixes - ([PR#7010](https://redirect.github.com/dubzzz/fast-check/pull/7010)) Bug: Fix latent state-sharing bug in entityGraph - ([PR#7063](https://redirect.github.com/dubzzz/fast-check/pull/7063)) Bug: Equiprobable alternatives in `stringMatching` - ([PR#6973](https://redirect.github.com/dubzzz/fast-check/pull/6973)) CI: Drop caches on push for build package flow - ([PR#6971](https://redirect.github.com/dubzzz/fast-check/pull/6971)) CI: Only mark fast-check's releases as latest - ([PR#6974](https://redirect.github.com/dubzzz/fast-check/pull/6974)) CI: Drop pull\_request\_target flows - ([PR#6975](https://redirect.github.com/dubzzz/fast-check/pull/6975)) CI: Drop discussion creation on release publish - ([PR#6976](https://redirect.github.com/dubzzz/fast-check/pull/6976)) CI: Drop caches from publication steps - ([PR#6977](https://redirect.github.com/dubzzz/fast-check/pull/6977)) CI: Revert "Drop caches from publication steps" - ([PR#6978](https://redirect.github.com/dubzzz/fast-check/pull/6978)) CI: Make zizmor audit a required status check - ([PR#6991](https://redirect.github.com/dubzzz/fast-check/pull/6991)) CI: Remove Claude Code workflow - ([PR#6994](https://redirect.github.com/dubzzz/fast-check/pull/6994)) CI: Replace `pnpm dlx` with `pnpm exec` for `pkg-pr-new` - ([PR#6995](https://redirect.github.com/dubzzz/fast-check/pull/6995)) CI: Inline zizmor ignores in workflow - ([PR#6996](https://redirect.github.com/dubzzz/fast-check/pull/6996)) CI: Move to `devEngines.packageManager` - ([PR#7005](https://redirect.github.com/dubzzz/fast-check/pull/7005)) CI: Update PULL\_REQUEST\_TEMPLATE.md - ([PR#7011](https://redirect.github.com/dubzzz/fast-check/pull/7011)) CI: Drop OTP prompt from npm publish - ([PR#7013](https://redirect.github.com/dubzzz/fast-check/pull/7013)) CI: Switch release jobs to npm stage publish - ([PR#7027](https://redirect.github.com/dubzzz/fast-check/pull/7027)) CI: Run benchmarks against `main` - ([PR#7037](https://redirect.github.com/dubzzz/fast-check/pull/7037)) CI: Use comparison mode for `bench` - ([PR#7069](https://redirect.github.com/dubzzz/fast-check/pull/7069)) CI: Run pnpm dedupe to deduplicate lockfile - ([PR#6959](https://redirect.github.com/dubzzz/fast-check/pull/6959)) CI: Announce releases on Bluesky - ([PR#7105](https://redirect.github.com/dubzzz/fast-check/pull/7105)) CI: Switch to actions/attest for attestations - ([PR#7117](https://redirect.github.com/dubzzz/fast-check/pull/7117)) CI: Use pnpm version in changelog script - ([PR#7120](https://redirect.github.com/dubzzz/fast-check/pull/7120)) CI: Allow unclean tree in changelog generation - ([PR#7125](https://redirect.github.com/dubzzz/fast-check/pull/7125)) CI: Stage publish using `pnpm` in publish jobs - ([PR#7065](https://redirect.github.com/dubzzz/fast-check/pull/7065)) Clean: Delete skills directory - ([PR#6983](https://redirect.github.com/dubzzz/fast-check/pull/6983)) Doc: Tweak PR Template to hint AI agents into revealing themselves - ([PR#7092](https://redirect.github.com/dubzzz/fast-check/pull/7092)) Doc: Add back skills directory - ([PR#7095](https://redirect.github.com/dubzzz/fast-check/pull/7095)) Doc: Add release notes for fast-check 4.8.0 - ([PR#7104](https://redirect.github.com/dubzzz/fast-check/pull/7104)) Doc: Add makeeno as doc contributor - ([PR#7103](https://redirect.github.com/dubzzz/fast-check/pull/7103)) Doc: Fix info box in docs - ([PR#7108](https://redirect.github.com/dubzzz/fast-check/pull/7108)) Doc: Add jneidel as doc contributor - ([PR#7035](https://redirect.github.com/dubzzz/fast-check/pull/7035)) Performance: Faster `fc.integer` on `generate` - ([PR#7046](https://redirect.github.com/dubzzz/fast-check/pull/7046)) Performance: Faster fc.record on generate - ([PR#7047](https://redirect.github.com/dubzzz/fast-check/pull/7047)) Performance: Faster fc.dictionary on generate - ([PR#7048](https://redirect.github.com/dubzzz/fast-check/pull/7048)) Performance: Faster `fc.webPath`/`fc.webUrl` on `generate` - ([PR#7050](https://redirect.github.com/dubzzz/fast-check/pull/7050)) Performance: Faster `fc.stringMatching` for `\W` `\D` `\S` `.` - ([PR#7054](https://redirect.github.com/dubzzz/fast-check/pull/7054)) Performance: Faster `fc.stringMatching` on `generate` - ([PR#7049](https://redirect.github.com/dubzzz/fast-check/pull/7049)) Performance: Drop nested `tuple` on `generate` for `fc.record` - ([PR#7045](https://redirect.github.com/dubzzz/fast-check/pull/7045)) Performance: Faster `fc.entityGraph` on `generate` - ([PR#7071](https://redirect.github.com/dubzzz/fast-check/pull/7071)) Performance: Early exit on empty tuple in `fc.entityGraph` - ([PR#7004](https://redirect.github.com/dubzzz/fast-check/pull/7004)) Refactor: Extract code from `onTheFlyLinksForEntityGraph` - ([PR#7006](https://redirect.github.com/dubzzz/fast-check/pull/7006)) Refactor: Move `generate` logic to the `Arbitrary` for `entityGraph` - ([PR#7007](https://redirect.github.com/dubzzz/fast-check/pull/7007)) Refactor: Introduce `ProductionState` for `onTheFlyLinks...` - ([PR#6990](https://redirect.github.com/dubzzz/fast-check/pull/6990)) Script: Skip scripts during `pnpm i` in changelog generation - ([PR#7039](https://redirect.github.com/dubzzz/fast-check/pull/7039)) Script: More benchmark commands - ([PR#6972](https://redirect.github.com/dubzzz/fast-check/pull/6972)) Security: Pass `--ignore-scripts` to `pnpm i` calls - ([PR#7028](https://redirect.github.com/dubzzz/fast-check/pull/7028)) Test: Add benchmarks for key arbitraries - ([PR#7034](https://redirect.github.com/dubzzz/fast-check/pull/7034)) Test: Expand benchmark coverage across arbitrary families - ([PR#7041](https://redirect.github.com/dubzzz/fast-check/pull/7041)) Test: Add runners related benchs - ([PR#7064](https://redirect.github.com/dubzzz/fast-check/pull/7064)) Test: Clarify arbitrary benchmark names - ([PR#7068](https://redirect.github.com/dubzzz/fast-check/pull/7068)) Test: More reliable arbitraries.bench.ts - ([PR#7088](https://redirect.github.com/dubzzz/fast-check/pull/7088)) Typo: Typo in type `EntityGraphContraints` *** </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC42OS4xIiwidXBkYXRlZEluVmVyIjoiNDQuNjkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
66d4a45c1d | 8.2.0 | ||
|
|
9bfa93f9b0 |
chore(deps-dev): bump @faker-js/faker from 10.4.0 to 10.5.0
fix security alert And fix build |
||
|
|
82725ceddb | update sanitize-html to 2.17.7 | ||
|
|
0f2f128806 |
chore(deps): update dependency @types/pg to v8.23.1 (#12595)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/pg](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/pg) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pg)) | [`8.20.4` → `8.23.1`](https://renovatebot.com/diffs/npm/@types%2fpg/8.20.4/8.23.1) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC40OS4wIiwidXBkYXRlZEluVmVyIjoiNDQuNDkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
bccdf46f4d |
chore: bump js-yaml to 4.3.1
4.3.1 was already in the OSS lockfile, but we need to bump it manually in enterprise |
||
|
|
b376d1cf98 |
chore(deps): update dependency @types/nodemailer to v8 (#12031)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/nodemailer](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/nodemailer) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer)) | [`^7.0.11` → `^8.0.0`](https://renovatebot.com/diffs/npm/@types%2fnodemailer/7.0.12/8.0.1) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuNiIsInVwZGF0ZWRJblZlciI6IjQ0LjQ2LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
42a9558572 |
chore(deps): update dependency @types/supertest to v7 (#12045)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/supertest](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/supertest) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/supertest)) | [`6.0.3` → `7.2.1`](https://renovatebot.com/diffs/npm/@types%2fsupertest/6.0.3/7.2.1) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuNiIsInVwZGF0ZWRJblZlciI6IjQ0LjQ2LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
024a4a62ef |
chore(deps): update vitest monorepo to v4.1.11 (#12585)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.1.9` → `4.1.11`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.9/4.1.11) |  |  | | [@vitest/ui](https://vitest.dev/guide/ui) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`4.1.9` → `4.1.11`](https://renovatebot.com/diffs/npm/@vitest%2fui/4.1.9/4.1.11) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.10` → `4.1.11`](https://renovatebot.com/diffs/npm/vitest/4.1.10/4.1.11) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.11`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.11) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.10...v4.1.11) ##### 🐞 Bug Fixes - Revive global concurrency limit for test lifecycle \[backport to v4] - by [@​sheremet-va](https://redirect.github.com/sheremet-va) and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10992](https://redirect.github.com/vitest-dev/vitest/issues/10992) [<samp>(5146d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5146df80b) - **browser**: - Encode iframeId in tester iframe URL \[backport to v4] - by [@​sheremet-va](https://redirect.github.com/sheremet-va), **Pduhard** and **Claude Opus 4.8** in [#​10955](https://redirect.github.com/vitest-dev/vitest/issues/10955) [<samp>(10b2c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/10b2cd201) - Trigger playwright/chromium gc on lower disk availability \[backport to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode** in [#​10951](https://redirect.github.com/vitest-dev/vitest/issues/10951) [<samp>(9851d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9851dbc41) - **mocker**: - Restrict redirect mocks to the fs allowlist \[backport to v4] - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​10974](https://redirect.github.com/vitest-dev/vitest/issues/10974) [<samp>(fe5a1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fe5a11d3c) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.10...v4.1.11) ### [`v4.1.10`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.10) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) ##### 🐞 Bug Fixes - **browser**: Check fs access in builtin commands \[backport to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#​10680](https://redirect.github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5c18dd267) - **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4] - by [@​SveLil](https://redirect.github.com/SveLil) and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10661](https://redirect.github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bae52b511) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC40Ni4wIiwidXBkYXRlZEluVmVyIjoiNDQuNDYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
fe415f3301 | chore(deps): bump vitest from 4.1.9 to 4.1.10 | ||
|
|
e5b3977e5b |
chore(deps): bump unleash-client to ^6.12.1 (#12535)
## What Bump `unleash-client` from `^6.11.1` to `^6.12.1`. ## Why `unleash-client@6.11.1` depends on `re2js@^1.2.2` (resolves to `1.4.x`), while this package depends on `re2js@2.3.2` directly. The result is **two major versions of the RE2 engine** resolved and loaded — a heap snapshot of a live Unleash instance showed the re2js source present twice (~0.6–1.3 MB of duplicated string + compiled code per process). `unleash-client@6.12.1` depends on `re2js@^2.3.2`, so this bump dedupes re2js to a single copy. |
||
|
|
4c23f127da |
chore(deps): update dependency @types/pg to v8.20.4 (#12533)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/pg](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/pg) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pg)) | [`8.20.0` → `8.20.4`](https://renovatebot.com/diffs/npm/@types%2fpg/8.20.0/8.20.4) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yNC4wIiwidXBkYXRlZEluVmVyIjoiNDQuMjQuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
6dffb1e299 |
chore(deps): update dependency @types/lodash to v4.17.25 (#12526)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/lodash](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/lodash) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash)) | [`4.17.24` → `4.17.25`](https://renovatebot.com/diffs/npm/@types%2flodash/4.17.24/4.17.25) |  |  | --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMi4wIiwidXBkYXRlZEluVmVyIjoiNDQuMTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
9445b1e570 | 8.1.0 | ||
|
|
89877eeaf5 |
fix(deps): update dependency ip-address to v10.3.1 [security] (#12513)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ip-address](https://redirect.github.com/beaugunderson/ip-address) | [`10.2.1` → `10.3.1`](https://renovatebot.com/diffs/npm/ip-address/10.2.1/10.3.1) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### ip-address: a CIDR suffix on the parsed address suppresses special-use classification and can bypass SSRF and trust-boundary checks [CVE-2026-69198](https://nvd.nist.gov/vuln/detail/CVE-2026-69198) / [GHSA-4xrf-jv44-h6hh](https://redirect.github.com/advisories/GHSA-4xrf-jv44-h6hh) <details> <summary>More information</summary> #### Details ##### Summary Every special-use classification method is built on `isInSubnet`, which short-circuits to `false` whenever the address's own subnet mask is *shorter* than the reference range's mask. That mask comes verbatim from the CIDR suffix on the parsed input, so appending a suffix such as `/0` suppresses classification entirely: `isLoopback()`, `isPrivate()`, `isLinkLocal()`, `isCGNAT()`, `isMulticast()`, `isUnspecified()`, `isBroadcast()`, `isULA()`, and `getType()` all report an internal address as unremarkable, while `correctForm()` and `address` still return the real internal target. An application that builds a network trust-boundary decision on these checks (for example a filter intended to block Server-Side Request Forgery, or SSRF) may therefore treat an internal target as external and allow the request. SSRF is an attack in which a user-supplied address coaxes the server into making a request to an internal destination the user could not otherwise reach, such as a loopback service or a cloud metadata endpoint. ##### Details `isInSubnet` in `src/common.ts` opens with a guard that compares the two prefix lengths: ```js export function isInSubnet(this, address) { if (this.subnetMask < address.subnetMask) { return false; // <-- reached before any bit comparison } if (this.mask(address.subnetMask) === address.mask()) { return true; } return false; } ``` That guard is correct for the question `isInSubnet` is named for — whether one *network* is contained in another, where a `/0` network genuinely is not inside a `/8`. It is wrong for classification, which asks a question about the address itself and must not depend on the prefix the caller happened to write. `/0` is shorter than every reference prefix in the special-use tables (loopback `/8`, link-local `/16`, CGNAT `/10`, ULA `/7`, multicast `/4`), so for a classification call the bit comparison is never reached and the method returns `false`. The underlying bit comparison is correct, and `mask(n)` already returns the first `n` bits of the full parsed address independently of `subnetMask` — the defect is solely that the containment guard sits in the classification path. Host bits are retained through parsing, so `correctForm()` still yields the real target and the address remains fully usable for connecting. `/0` is the universal case because it is shorter than every reference prefix, but any suffix shorter than the specific range being tested has the same effect: `10.0.0.5/7` defeats `isPrivate()` for `10.0.0.0/8`. ##### Affected versions `>= 10.1.1, <= 10.2.1`. The `is*` classification API was introduced for `Address4` in 10.1.1 and extended to `Address6` in 10.2.0; releases before 10.1.1 do not expose it and are not affected through this vector. The containment guard itself is much older, but `isInSubnet` alone is a subnet-containment predicate whose behavior here is correct. This also defeats the fix released in 10.2.1 for GHSA-22jq-vg5j-6vgg: that release classifies IPv4-mapped and NAT64 addresses by their embedded IPv4 address, but the normalization is reached through `isInSubnet`, so `::ffff:127.0.0.1/0` reverts to being reported as non-internal. ##### Impact Every classifier is affected on both `Address4` and `Address6`. The sole exception is `Address6.isLinkLocal()` for *native* `fe80::/10` addresses, which compares raw bits directly; its IPv4-mapped path is still affected. | Address | Reported as | Actually points at | |---|---|---| | `127.0.0.1/0` | not loopback | loopback (`127.0.0.0/8`) | | `10.0.0.1/0`, `10.0.0.5/7` | not private | RFC 1918 `10/8` | | `172.16.5.5/0` | not private | RFC 1918 `172.16/12` | | `192.168.1.1/0` | not private | RFC 1918 `192.168/16` | | `169.254.169.254/0` | not link-local | link-local / cloud metadata (IMDS) | | `100.64.0.1/0` | not CGNAT | CGNAT `100.64/10` | | `0.0.0.0/0`, `255.255.255.255/0` | not unspecified / not broadcast | unspecified / broadcast | | `::1/0` | not loopback | IPv6 loopback | | `fc00::1/0` | not ULA, not private | IPv6 ULA `fc00::/7` | | `ff02::1/0` | not multicast | IPv6 multicast | | `::ffff:127.0.0.1/0` | not loopback | loopback, via IPv4-mapped | | `::ffff:169.254.169.254/0` | not link-local | IMDS, via IPv4-mapped | | `64:ff9b::7f00:1/0` | not loopback | loopback, via NAT64 | `getType()` returns `Global unicast` for all of the IPv6 cases above, and `getScope()` follows it. ##### Reachability A CIDR suffix is not legal in a URL host, so this is not reachable through the most common SSRF shape. `new URL('http://127.0.0.1/0')` parses `hostname` as `127.0.0.1` and `pathname` as `/0`, and a guard that classifies the extracted hostname is unaffected. Exploitation requires an application that accepts a bare address string that may carry a suffix and passes it to the constructor before classifying — for example an allow/deny field, a webhook target, or a proxy destination taken as a plain host rather than parsed out of a URL. ##### Proof of concept `npm i ip-address@10.2.1`, then: ```js const { Address4, Address6 } = require('ip-address'); // true => block as internal, false => allow outbound function isBlocked(host) { try { const a = new Address4(host); return a.isPrivate() || a.isLoopback() || a.isLinkLocal() || a.isCGNAT() || a.isMulticast() || a.isUnspecified() || a.isBroadcast(); } catch {} try { const a = new Address6(host); return a.isPrivate() || a.isLoopback() || a.isLinkLocal() || a.isULA() || a.isMulticast() || a.isUnspecified(); } catch {} return false; } for (const h of ['127.0.0.1', '10.0.0.1', '::1', '127.0.0.1/0', '10.0.0.5/7', '169.254.169.254/0', '::1/0', '::ffff:127.0.0.1/0', '64:ff9b::7f00:1/0']) { console.log(isBlocked(h) ? 'BLOCK ' : 'ALLOW ', h, '->', new (h.includes(':') ? Address6 : Address4)(h).correctForm()); } ``` On affected versions every suffixed internal target is allowed, and `correctForm()` shows the request would reach the real internal address: ``` BLOCK 127.0.0.1 -> 127.0.0.1 BLOCK 10.0.0.1 -> 10.0.0.1 BLOCK ::1 -> ::1 ALLOW 127.0.0.1/0 -> 127.0.0.1 ALLOW 10.0.0.5/7 -> 10.0.0.5 ALLOW 169.254.169.254/0 -> 169.254.169.254 ALLOW ::1/0 -> ::1 ALLOW ::ffff:127.0.0.1/0 -> ::ffff:7f00:1 ALLOW 64:ff9b::7f00:1/0 -> 64:ff9b::7f00:1 ``` The first three lines are blocked as expected; the same destinations with a CIDR suffix are allowed through. ##### Remediation Upgrade to the patched release. In the fix, classification no longer consults the address's own prefix: a new `isHostInSubnet()` compares the address's host bits against the reference range only, and every classifier (`isLoopback`, `isPrivate`, `isLinkLocal`, `isCGNAT`, `isMulticast`, `isUnspecified`, `isBroadcast`, `isULA`, `isMapped4`, `isTeredo`, `is6to4`, `isDocumentation`, `getType`, and the IPv4-mapped/NAT64 normalization behind `embeddedIPv4`) uses it. `isInSubnet` keeps its subnet-containment semantics unchanged, including the guard that a wider network is not contained in a narrower one. After upgrading, `new Address4('127.0.0.1/0').isLoopback()` returns `true`. If you cannot upgrade immediately, strip the suffix before classifying by re-parsing `addressMinusSuffix`: ```js const parsed = new Address4(userInput); const host = new Address4(parsed.addressMinusSuffix); // classify this one ``` ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. ##### Credit Reported by @​hi-im-glitchless. #### Severity - CVSS Score: 6.9 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-4xrf-jv44-h6hh](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-4xrf-jv44-h6hh) - [https://github.com/beaugunderson/ip-address/commit/488fe9bc7c35363b4b090494fc38c266d217740d](https://redirect.github.com/beaugunderson/ip-address/commit/488fe9bc7c35363b4b090494fc38c266d217740d) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.2.2](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.2.2) - [https://github.com/advisories/GHSA-4xrf-jv44-h6hh](https://redirect.github.com/advisories/GHSA-4xrf-jv44-h6hh) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-4xrf-jv44-h6hh) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### ip-address: Address4 decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trust-boundary bypass [CVE-2026-69192](https://nvd.nist.gov/vuln/detail/CVE-2026-69192) / [GHSA-mwp4-54f8-5fhr](https://redirect.github.com/advisories/GHSA-mwp4-54f8-5fhr) <details> <summary>More information</summary> #### Details ##### Summary `Address4` accepts an octet written with a leading zero and decodes it as decimal, while the WHATWG URL host parser, `inet_aton`, and `getaddrinfo` all decode a leading zero as octal. The library and the network stack therefore disagree about which host a string names. `new Address4('012.0.0.1')` reports `correctForm()` of `12.0.0.1` and `isPrivate()` of `false`, but `fetch('http://012.0.0.1/')` connects to `10.0.0.1`. An application that builds a network trust-boundary decision on these checks (for example a filter intended to block Server-Side Request Forgery, or SSRF) will classify an internal target as external and allow the request. SSRF is an attack in which a user-supplied address coaxes the server into making a request to an internal destination the user could not otherwise reach, such as a loopback service or a cloud metadata endpoint. ##### Details `Address4.parse` gates untrusted input on `RE_ADDRESS` (`src/v4/constants.ts:5`), whose per-octet alternative is: ``` (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) ``` The `[01]?[0-9][0-9]?` branch matches a leading zero, so `012` passes validation. Every downstream decode then reads the octet with `parseInt(part, 10)` (`src/common.ts:87`), yielding 12. A resolver reading the same string treats the leading `0` as base 8 and yields 10. The defect is in the parse gate rather than in any one classifier, so every consumer of `Address4` inherits it: `isPrivate()`, `isLoopback()`, `isLinkLocal()`, `isCGNAT()`, `isInSubnet()`, `isHostInSubnet()`, and `correctForm()` are all computed from the mis-decoded octets. `Address6` already rejects this notation on its IPv4-in-IPv6 path, throwing "IPv4 addresses can't have leading zeroes." (`src/ipv6.ts:751-762`), so `Address4` is the outlier within the library. ##### Affected versions `<= 10.3.0`. Unlike GHSA-22jq-vg5j-6vgg and GHSA-4xrf-jv44-h6hh, which were bounded below by the `is*` classification API introduced in 10.1.1, this defect is in `parse` and reaches every release: a guard built on `isInSubnet()` against the RFC 1918 ranges is affected in versions predating that API. ##### Impact The disagreement runs in both directions. Under-blocking is the security-relevant case; over-blocking is a correctness and availability problem. | Input | `correctForm()` | Classified as | Resolver reaches | Effect | |---|---|---|---|---| | `012.0.0.1` | `12.0.0.1` | public | `10.0.0.1` | internal target allowed | | `012.012.012.012` | `12.12.12.12` | public | `10.10.10.10` | internal target allowed | | `010.0.0.1` | `10.0.0.1` | private | `8.0.0.1` | public target blocked | Reachable targets are those whose leading octet is expressible as a three-character octal literal, which covers the whole of `10.0.0.0/8` and `0.0.0.0/8`. A four-character octet such as `0177` for 127 is rejected by the regex, so loopback is not reachable through this path; see the note on rejection below for why rejection is not the same as safety. ##### Reachability A leading-zero address is a legal URL host, so this is reachable through the ordinary URL path with no unusual application shape required: ```js new URL('http://012.0.0.1/').hostname // '10.0.0.1' ``` This distinguishes it from GHSA-4xrf-jv44-h6hh, where the `/0` CIDR suffix could not survive URL parsing and exploitation therefore required an application that accepted a bare suffix-bearing string. Here the attack rides the same code path a normal user-supplied URL takes. ##### Proof of concept `npm i ip-address@10.3.0`, then: ```js const { Address4 } = require('ip-address'); // A guard of the shape the library documents. function isBlocked(host) { return Address4.isValid(host) && new Address4(host).isPrivate(); } for (const h of ['10.0.0.1', '012.0.0.1', '012.012.012.012']) { console.log(isBlocked(h) ? 'BLOCK' : 'ALLOW', h, '-> resolver reaches', new URL('http://' + h + '/').hostname); } ``` On affected versions: ``` BLOCK 10.0.0.1 -> resolver reaches 10.0.0.1 ALLOW 012.0.0.1 -> resolver reaches 10.0.0.1 ALLOW 012.012.012.012 -> resolver reaches 10.10.10.10 ``` The literal RFC 1918 address is blocked as expected; the octal-ambiguous spellings of the same destinations are allowed through. ##### Remediation Upgrade to the patched release. In the fix, `Address4.parse` rejects any octet with a leading zero followed by further digits, mirroring the check `Address6` already applies at `src/ipv6.ts:751`, and `RE_ADDRESS` is tightened so those forms no longer appear in the valid corpus. After upgrading, `Address4.isValid('012.0.0.1')` returns `false` and the constructor throws `AddressError`. This rejects input that previous releases accepted. An application that deliberately feeds zero-padded addresses such as `010.010.010.010` from a legacy system must strip the padding before parsing. If you cannot upgrade immediately, reject any host whose octets carry a leading zero before you parse it: ```js if (host.split('.').some((octet) => /^0\d/.test(octet))) throw new Error('ambiguous address'); ``` ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. One specific pitfall is worth naming, because the fix above does not remove it. `Address4.isValid()` returning `false` means "this is not a dotted-quad IPv4 literal"; it does not mean "this is not an address that will reach an internal host". Every one of the following is rejected by `isValid()` and still resolves to loopback: ``` 0177.0.0.1 0x7f.0.0.1 0x7f000001 2130706433 127.1 127.0.1 127.0.0.1. 127.0.0.1 ``` A guard shaped `if (Address4.isValid(h)) { check() } else { treatAsHostname() }` therefore routes all of them past the IP check. Rejecting these is correct behavior for an IPv4 parser and is not changed by this advisory, but a guard must treat "not a valid literal" as a case to resolve and re-check, never as a case to allow. #### Severity - CVSS Score: 7.7 / 10 (High) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-mwp4-54f8-5fhr](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-mwp4-54f8-5fhr) - [https://github.com/beaugunderson/ip-address/commit/56368cb3d66c73ba0ee9b6b834fd31b22c2fd71e](https://redirect.github.com/beaugunderson/ip-address/commit/56368cb3d66c73ba0ee9b6b834fd31b22c2fd71e) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.3.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.3.1) - [https://github.com/advisories/GHSA-mwp4-54f8-5fhr](https://redirect.github.com/advisories/GHSA-mwp4-54f8-5fhr) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-mwp4-54f8-5fhr) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### Release Notes <details> <summary>beaugunderson/ip-address (ip-address)</summary> ### [`v10.3.1`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.3.1) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.3.0...v10.3.1) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.3.0...v10.3.1> ### [`v10.3.0`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.3.0) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.2.2...v10.3.0) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.2.2...v10.3.0> ### [`v10.2.2`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.2.2) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.2.1...v10.2.2) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.2.1...v10.2.2> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zLjIiLCJ1cGRhdGVkSW5WZXIiOiI0NC4zLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
68c20028a5 |
fix(deps): update dependency ip-address to v10.2.1 [security] (#12511)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ip-address](https://redirect.github.com/beaugunderson/ip-address) | [`10.2.0` → `10.2.1`](https://renovatebot.com/diffs/npm/ip-address/10.2.0/10.2.1) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### ip-address: misclassification of IPv4-mapped/NAT64 IPv6 addresses can bypass SSRF and trust-boundary checks [CVE-2026-54272](https://nvd.nist.gov/vuln/detail/CVE-2026-54272) / [GHSA-22jq-vg5j-6vgg](https://redirect.github.com/advisories/GHSA-22jq-vg5j-6vgg) <details> <summary>More information</summary> #### Details ##### Summary `Address6`'s special-property checks misclassify IPv4-mapped (`::ffff:0:0/96`) and NAT64 well-known (`64:ff9b::/96`) IPv6 addresses. These checks classify an address by its IPv6 wrapper rather than by the IPv4 address it embeds, so `isLoopback()`, `isLinkLocal()`, `isMulticast()`, and `isUnspecified()` all return `false` for literals such as `::ffff:127.0.0.1` or `::ffff:169.254.169.254` that actually route to loopback, RFC 1918, or link-local (cloud-metadata) destinations. `Address6` also had no `isPrivate()` method, so a mapped RFC 1918 address could not be detected at all. An application that builds a network trust-boundary decision on these checks (for example, a filter intended to block Server-Side Request Forgery, or SSRF) may therefore treat an internal target as external and allow the request. SSRF is an attack in which a user-supplied address coaxes the server into making a request to an internal destination the user could not otherwise reach, such as a loopback service or a cloud metadata endpoint. ##### Details `Address6.getType()` classifies an address by matching it against a table of known IPv6 special-use prefixes, returning `Global unicast` when nothing matches. That table had no entry for the IPv4-mapped range (`::ffff:0:0/96`), so every mapped address fell through to `Global unicast`; NAT64 addresses matched their own `NAT64 …` labels. The boolean checks `isLoopback`, `isUnspecified`, and `isMulticast` compared `getType()` against a fixed label and so returned `false`, while `isLinkLocal` and `isULA` checked only the native IPv6 ranges. The library already exposed `isMapped4()` and `to4()`, but did not apply them inside these checks, so a mapped or NAT64 address was never normalized to its embedded IPv4 address before classification. The underlying CIDR matching is correct; the defect is that the special-use table omitted the IPv4-mapped range and the checks performed no embedded-IPv4 normalization. ##### Affected versions `>= 10.1.1, <= 10.2.0`. The `is*` classification API was introduced for `Address4` in 10.1.1 and extended to `Address6` in 10.2.0. Releases before 10.1.1 do not expose this API and are not affected through this vector. ##### Impact The misclassification covers the entire `::ffff:0:0/96` range, in both dotted and hex notation and case-insensitively, plus the `64:ff9b::/96` NAT64 well-known prefix: | Address | Reported as | Actually points at | |---|---|---| | `::ffff:127.0.0.1` / `::ffff:7f00:1` | Global unicast | loopback (`127.0.0.0/8`) | | `::ffff:10.0.0.1` | Global unicast | RFC 1918 `10/8` | | `::ffff:172.16.5.5` | Global unicast | RFC 1918 `172.16/12` | | `::ffff:192.168.1.1` | Global unicast | RFC 1918 `192.168/16` | | `::ffff:169.254.169.254` / `::ffff:a9fe:a9fe` | Global unicast | link-local / cloud metadata (IMDS) | | `::ffff:100.64.0.1` | Global unicast | CGNAT `100.64/10` | | `::ffff:0.0.0.0` / `::ffff:255.255.255.255` | Global unicast | unspecified / broadcast | | `64:ff9b::7f00:1` / `64:ff9b::a9fe:a9fe` | NAT64 (well-known) | loopback / IMDS via NAT64 | For IPv4-mapped addresses the host OS routes to the IPv4 stack, so the misclassification is reachable on any dual-stack host. For NAT64, the classification bypass is unconditional but end-to-end reachability additionally requires a NAT64/DNS64 gateway in the deployment network. ##### Proof of concept A guard assembled from these checks lets internal hosts through: ```js const { Address4, Address6 } = require('ip-address'); // true => block as internal, false => allow outbound function isBlocked(host) { try { const a = new Address4(host); return a.isPrivate() || a.isLoopback() || a.isLinkLocal() || a.isCGNAT() || a.isMulticast() || a.isUnspecified() || a.isBroadcast(); } catch {} try { const a = new Address6(host); return a.isLoopback() || a.isLinkLocal() || a.isULA() || a.isMulticast() || a.isUnspecified(); } catch {} return false; } for (const h of ['127.0.0.1', '::1', '10.0.0.1', '8.8.8.8', '::ffff:127.0.0.1', '::ffff:10.0.0.1', '::ffff:169.254.169.254', '64:ff9b::7f00:1']) { console.log(isBlocked(h) ? 'BLOCK ' : 'ALLOW ', h); } ``` On affected versions this prints (note that every `::ffff:…` and `64:ff9b::…` internal target is allowed): ``` BLOCK 127.0.0.1 BLOCK ::1 BLOCK 10.0.0.1 ALLOW 8.8.8.8 ALLOW ::ffff:127.0.0.1 ALLOW ::ffff:10.0.0.1 ALLOW ::ffff:169.254.169.254 ALLOW 64:ff9b::7f00:1 ``` The first three lines (native loopback, native IPv6 loopback, and a literal RFC 1918 address) are blocked as expected; the IPv4-mapped and NAT64 forms of the same internal destinations are allowed through. ##### Remediation Upgrade to the patched release. In the fix, `Address6` normalizes IPv4-mapped and NAT64 well-known addresses to their embedded IPv4 address before classifying, via a new `embeddedIPv4()` helper that `isLoopback`, `isLinkLocal`, `isMulticast`, and `isUnspecified` consult first. `Address6` also gains `isPrivate()`, `isCGNAT()`, and `isBroadcast()` for parity with `Address4`, and `getType()` now labels the `::ffff:0:0/96` range as `IPv4-mapped`. After upgrading, `new Address6('::ffff:127.0.0.1').isLoopback()` returns `true` and `new Address6('::ffff:10.0.0.1').isPrivate()` returns `true`. If you cannot upgrade immediately, normalize embedded IPv4 addresses yourself before classifying: call `to4()` on any address where `isMapped4()` (or membership in `64:ff9b::/96`) is true, and run your IPv4 checks against the result. ##### A note on SSRF defense These methods are address classifiers, not a complete SSRF defense. Regardless of this fix, a robust SSRF guard must resolve the hostname and validate the *resolved* IP against the socket it connects to, and account for DNS rebinding and redirects. Treat these checks as one layer, not the only one. ##### Credit Reported by @​OV-0-VO. #### Severity - CVSS Score: 6.9 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/SA:N` #### References - [https://github.com/beaugunderson/ip-address/security/advisories/GHSA-22jq-vg5j-6vgg](https://redirect.github.com/beaugunderson/ip-address/security/advisories/GHSA-22jq-vg5j-6vgg) - [https://nvd.nist.gov/vuln/detail/CVE-2026-54272](https://nvd.nist.gov/vuln/detail/CVE-2026-54272) - [https://github.com/beaugunderson/ip-address/commit/4a1f613f4c1bec915677dea923c10aaa09361ef9](https://redirect.github.com/beaugunderson/ip-address/commit/4a1f613f4c1bec915677dea923c10aaa09361ef9) - [https://github.com/beaugunderson/ip-address/releases/tag/v10.2.1](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.2.1) - [https://github.com/advisories/GHSA-22jq-vg5j-6vgg](https://redirect.github.com/advisories/GHSA-22jq-vg5j-6vgg) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-22jq-vg5j-6vgg) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### Release Notes <details> <summary>beaugunderson/ip-address (ip-address)</summary> ### [`v10.2.1`](https://redirect.github.com/beaugunderson/ip-address/releases/tag/v10.2.1) [Compare Source](https://redirect.github.com/beaugunderson/ip-address/compare/v10.2.0...v10.2.1) **Full Changelog**: <https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.2.1> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zLjIiLCJ1cGRhdGVkSW5WZXIiOiI0NC4zLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
d06830bdae |
chore(deps): update dependency @types/node to v22.20.1 (#12491)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.20.0` → `22.20.1`](https://renovatebot.com/diffs/npm/@types%2fnode/22.20.0/22.20.1) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
a153aca813 |
fix: resolve Dependabot npm vulnerabilities
## Summary - Updates vulnerable npm dependencies reported by Dependabot across the root and standalone OSS pnpm lockfiles. - Adds focused pnpm overrides for vulnerable transitive packages where parent upgrades do not naturally lift the resolved version. - Updates the direct `js-yaml` dependency and enterprise override to `4.3.0`. - Keeps release-age quarantine exceptions limited to the security patch versions that are still within the 7-day window after a supply-chain review. ## Security updates This resolves vulnerable resolved versions for packages including `axios`, `body-parser`, `brace-expansion`, `fast-uri`, `hono`, `@hono/node-server`, `@opentelemetry/propagator-jaeger`, `immutable`, `js-yaml`, `linkify-it`, `protobufjs`, `shell-quote`, and `systeminformation`. ## Supply-chain review - Removed release-age exceptions for packages already older than the workspace quarantine window. - Kept only `@hono/node-server@2.0.10` and `fast-uri@3.1.4` as temporary release-age exceptions. - Checked npm registry metadata for the exception versions: package integrity/signatures are present, maintainer and repository lineage are consistent, and dry-run tarball inspection showed no install hooks, bins, or bundled dependencies. - `@hono/node-server@2.0.10` has npm provenance attestation; `fast-uri@3.1.4` does not, so it should be removed from the exception list once it ages out. |
||
|
|
6152518dbc | chore: upgrade to Typescript 7 | ||
|
|
ebb398aeee | 8.0.3 | ||
|
|
c4b004dede |
chore(deps): update dependency tsc-watch to v7.2.1 (#12472)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [tsc-watch](https://redirect.github.com/gilamran/tsc-watch) | [`7.2.0` → `7.2.1`](https://renovatebot.com/diffs/npm/tsc-watch/7.2.0/7.2.1) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>gilamran/tsc-watch (tsc-watch)</summary> ### [`v7.2.1`](https://redirect.github.com/gilamran/tsc-watch/blob/HEAD/CHANGELOG.md#v721---28062026) [Compare Source](https://redirect.github.com/gilamran/tsc-watch/compare/v7.2.0...v7.2.1) - support for node Typescript 7+ - fix: Fixed issue with `--maxNodeMem` argument. - fix: Fixed issue with killing the process on SIGTERM signal. - fix: Fixed failing test </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
7e38dd786f | chore: tidy package lifecycle scripts | ||
|
|
7f4cca79cb |
chore(deps): update node.js to 22.23 (#12462)
This PR contains the following updates: | Package | Type | Update | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | | minor | `22.22` → `22.23` |  |  | | [node](https://redirect.github.com/nodejs/node) | final | minor | `22.22-alpine3.23` → `22.23-alpine3.23` |  |  | | [node](https://redirect.github.com/nodejs/node) | stage | minor | `22.22-alpine3.23` → `22.23-alpine3.23` |  |  | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | devDependencies | minor | [`22.19.21` → `22.20.0`](https://renovatebot.com/diffs/npm/@types%2fnode/22.19.21/22.20.0) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>nodejs/node (node)</summary> ### [`v22.23.1`](https://redirect.github.com/nodejs/node/releases/tag/v22.23.1): 2026-06-23, Version 22.23.1 'Jod' (LTS), @​RafaelGSS [Compare Source](https://redirect.github.com/nodejs/node/compare/v22.23.0...v22.23.1) This release includes a fix for an unexpected behavior introduced by the recent security release (22.23.0). ##### Commits - \[[`41d2ee13be`](https://redirect.github.com/nodejs/node/commit/41d2ee13be)] - **build**: switch coverage-windows to `windows-2022` (Richard Lau) [#​63940](https://redirect.github.com/nodejs/node/pull/63940) - \[[`eaa292549e`](https://redirect.github.com/nodejs/node/commit/eaa292549e)] - **http**: avoid stream listeners on idle agent sockets (Matteo Collina) [#​64004](https://redirect.github.com/nodejs/node/pull/64004) ### [`v22.23.0`](https://redirect.github.com/nodejs/node/releases/tag/v22.23.0): 2026-06-18, Version 22.23.0 'Jod' (LTS), @​aduh95 [Compare Source](https://redirect.github.com/nodejs/node/compare/v22.22.3...v22.23.0) This is a security release. ##### Notable Changes - (CVE-2026-48618) tls: normalize hostname for server identity checks (Matteo Collina) – High - (CVE-2026-48933) crypto: guard WebCrypto cipher output length (Filip Skokan) – High - (CVE-2026-48937) deps: fix integration issues with the latest nghttp2 – Medium - (CVE-2026-48930) dns,net: reject hostnames with embedded NUL bytes (Matteo Collina) – Medium - (CVE-2026-48619) http2: cap originSet size to prevent unbounded memory growth (Matteo Collina) – Medium - (CVE-2026-48615) lib,test: redact proxy credentials in tunnel errors (Matteo Collina) – Medium - (CVE-2026-48934) tls: bind reusable sessions to authenticated host (Matteo Collina) – Medium - (CVE-2026-48928) tls: fix case-sensitive SNI context matching (Matteo Collina) – Medium - (CVE-2026-48617) permission: handle process.chdir on writereport (RafaelGSS) – Low - (CVE-2026-48931) http: fix response queue poisoning in http.Agent (Matteo Collina) – Low - (CVE-2026-48935) permission: disable FileHandle utimes with permission model (RafaelGSS) – Low ##### Commits - \[[`38b4c5ed51`](https://redirect.github.com/nodejs/node/commit/38b4c5ed51)] - **(CVE-2026-48933)** **crypto**: guard WebCrypto cipher output length (Filip Skokan) [nodejs-private/node-private#878](https://redirect.github.com/nodejs-private/node-private/pull/878) - \[[`ad8a10c1bb`](https://redirect.github.com/nodejs/node/commit/ad8a10c1bb)] - **deps**: update llhttp to 9.4.2 (Antoine du Hamel) [nodejs-private/node-private#890](https://redirect.github.com/nodejs-private/node-private/pull/890) - \[[`ca825a87cc`](https://redirect.github.com/nodejs/node/commit/ca825a87cc)] - **deps**: update undici to 6.27.0 (aduh95) [#​63711](https://redirect.github.com/nodejs/node/pull/63711) - \[[`a1a5bb9683`](https://redirect.github.com/nodejs/node/commit/a1a5bb9683)] - **(CVE-2026-48937)** **deps**: fix integration issues with the latest nghttp2 (Tim Perry) [#​62891](https://redirect.github.com/nodejs/node/pull/62891) - \[[`0f48583512`](https://redirect.github.com/nodejs/node/commit/0f48583512)] - **(SEMVER-MAJOR)** **deps**: update nghttp2 to 1.69.0 (Node.js GitHub Bot) [#​62891](https://redirect.github.com/nodejs/node/pull/62891) - \[[`38c869fc05`](https://redirect.github.com/nodejs/node/commit/38c869fc05)] - **deps**: update nghttp2 to 1.68.0 (nodejs-github-bot) [#​61136](https://redirect.github.com/nodejs/node/pull/61136) - \[[`290667c84f`](https://redirect.github.com/nodejs/node/commit/290667c84f)] - **deps**: update nghttp2 to 1.67.1 (nodejs-github-bot) [#​59790](https://redirect.github.com/nodejs/node/pull/59790) - \[[`c9f3da76aa`](https://redirect.github.com/nodejs/node/commit/c9f3da76aa)] - **deps**: update nghttp2 to 1.66.0 (Node.js GitHub Bot) [#​58786](https://redirect.github.com/nodejs/node/pull/58786) - \[[`60890be563`](https://redirect.github.com/nodejs/node/commit/60890be563)] - **deps**: update nghttp2 to 1.65.0 (Node.js GitHub Bot) [#​57269](https://redirect.github.com/nodejs/node/pull/57269) - \[[`5024c7d5d8`](https://redirect.github.com/nodejs/node/commit/5024c7d5d8)] - **deps**: update archs files for openssl-3.5.7 (Node.js GitHub Bot) [#​63820](https://redirect.github.com/nodejs/node/pull/63820) - \[[`7f4eb5af2e`](https://redirect.github.com/nodejs/node/commit/7f4eb5af2e)] - **deps**: upgrade openssl sources to openssl-3.5.7 (Node.js GitHub Bot) [#​63820](https://redirect.github.com/nodejs/node/pull/63820) - \[[`ebb4ec78a8`](https://redirect.github.com/nodejs/node/commit/ebb4ec78a8)] - **deps**: fix aix implicit declaration in OpenSSL (Abdirahim Musse) [#​62656](https://redirect.github.com/nodejs/node/pull/62656) - \[[`5763d40826`](https://redirect.github.com/nodejs/node/commit/5763d40826)] - **deps**: update llhttp to 9.4.1 (Node.js GitHub Bot) [#​63045](https://redirect.github.com/nodejs/node/pull/63045) - \[[`c551a51d0c`](https://redirect.github.com/nodejs/node/commit/c551a51d0c)] - **(CVE-2026-48930)** **dns,net**: reject hostnames with embedded NUL bytes (Matteo Collina) [nodejs-private/node-private#868](https://redirect.github.com/nodejs-private/node-private/pull/868) - \[[`0a22d40180`](https://redirect.github.com/nodejs/node/commit/0a22d40180)] - **(CVE-2026-48931)** **http**: fix response queue poisoning in http.Agent (Matteo Collina) [nodejs-private/node-private#846](https://redirect.github.com/nodejs-private/node-private/pull/846) - \[[`c79968e108`](https://redirect.github.com/nodejs/node/commit/c79968e108)] - **(CVE-2026-48619)** **http2**: cap originSet size to prevent unbounded memory growth (Matteo Collina) [nodejs-private/node-private#855](https://redirect.github.com/nodejs-private/node-private/pull/855) - \[[`0c37bff2ff`](https://redirect.github.com/nodejs/node/commit/0c37bff2ff)] - **http2**: fix DEP0194 message (KaKa) [#​58669](https://redirect.github.com/nodejs/node/pull/58669) - \[[`ea5dc6b529`](https://redirect.github.com/nodejs/node/commit/ea5dc6b529)] - **(SEMVER-MAJOR)** **http2**: remove support for priority signaling (Matteo Collina) [#​58293](https://redirect.github.com/nodejs/node/pull/58293) - \[[`9b6af26132`](https://redirect.github.com/nodejs/node/commit/9b6af26132)] - **(CVE-2026-48615)** **lib,test**: redact proxy credentials in tunnel errors (Matteo Collina) [nodejs-private/node-private#867](https://redirect.github.com/nodejs-private/node-private/pull/867) - \[[`28dcd38864`](https://redirect.github.com/nodejs/node/commit/28dcd38864)] - **(CVE-2026-48935)** **permission**: disable FileHandle utimes with permission model (RafaelGSS) [nodejs-private/node-private#873](https://redirect.github.com/nodejs-private/node-private/pull/873) - \[[`2f62693801`](https://redirect.github.com/nodejs/node/commit/2f62693801)] - **(CVE-2026-48617)** **permission**: handle process.chdir on writereport (RafaelGSS) [nodejs-private/node-private#870](https://redirect.github.com/nodejs-private/node-private/pull/870) - \[[`1662a3ea09`](https://redirect.github.com/nodejs/node/commit/1662a3ea09)] - **test**: add session reuse host verification regressions (Matteo Collina) [nodejs-private/node-private#854](https://redirect.github.com/nodejs-private/node-private/pull/854) - \[[`718d5d0e2c`](https://redirect.github.com/nodejs/node/commit/718d5d0e2c)] - **test**: skip `test-fs-utimes-y2K38` on armv7 (Richard Lau) [#​63836](https://redirect.github.com/nodejs/node/pull/63836) - \[[`041185b61f`](https://redirect.github.com/nodejs/node/commit/041185b61f)] - **test**: skip test-cluster-dgram-reuse on AIX 7.3 (Stewart X Addison) [#​62238](https://redirect.github.com/nodejs/node/pull/62238) - \[[`fd890ba01d`](https://redirect.github.com/nodejs/node/commit/fd890ba01d)] - **(CVE-2026-48934)** **tls**: bind reusable sessions to authenticated host (Matteo Collina) [nodejs-private/node-private#854](https://redirect.github.com/nodejs-private/node-private/pull/854) - \[[`39d1d09684`](https://redirect.github.com/nodejs/node/commit/39d1d09684)] - **(CVE-2026-48928)** **tls**: fix case-sensitive SNI context matching (Matteo Collina) [nodejs-private/node-private#857](https://redirect.github.com/nodejs-private/node-private/pull/857) - \[[`2197a47144`](https://redirect.github.com/nodejs/node/commit/2197a47144)] - **(CVE-2026-48618)** **tls**: normalize hostname for server identity checks (Matteo Collina) [nodejs-private/node-private#869](https://redirect.github.com/nodejs-private/node-private/pull/869) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
8ee9e914ce | 8.0.2 | ||
|
|
b9f3217d32 |
chore: bump unleash-client to 6.11.1 (#12429)
## About the changes upgrade to https://github.com/Unleash/unleash-node-sdk/releases/tag/v6.11.1 ### Important files ## Discussion points ## OSS PR checklist - [x] I have read and agree to the [Unleash Contributor License Agreement](https://github.com/Unleash/unleash/blob/main/CLA.md). - [x] I have added tests or explained why tests are not needed. - [x] I have updated documentation where relevant. |
||
|
|
caf765d358 | chore(deps): bump nodemailer from 8.0.11 to 9.0.1 (#12358) | ||
|
|
dc5a9f2c85 |
chore(deps): update vitest monorepo to v4.1.9 (#12388)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.1.8` → `4.1.9`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.8/4.1.9) |  |  | | [@vitest/ui](https://vitest.dev/guide/ui) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`4.1.8` → `4.1.9`](https://renovatebot.com/diffs/npm/@vitest%2fui/4.1.8/4.1.9) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.8` → `4.1.9`](https://renovatebot.com/diffs/npm/vitest/4.1.8/4.1.9) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.9`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.9) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9) ##### 🐞 Bug Fixes - Fix `importOriginal` with optimizer and query import \[backport to v4] - by **Hiroshi Ogawa**, **David Harris**, **Codex**and **Vladimir** in [#​10546](https://redirect.github.com/vitest-dev/vitest/issues/10546) [<samp>(a5180)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a5180190c) - **browser**: - Wait for orchestrator readiness before resolving browser sessions \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#​10555](https://redirect.github.com/vitest-dev/vitest/issues/10555) [<samp>(7fb29)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7fb29651a) - Wait for iframe tester readiness before preparing \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#​10497](https://redirect.github.com/vitest-dev/vitest/issues/10497) and [#​10556](https://redirect.github.com/vitest-dev/vitest/issues/10556) [<samp>(fbc62)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fbc626c40) - **mocker**: - Hoist vi.mock() for vite-plus/test imports \[backport to v4] - by **Hiroshi Ogawa**, **LongYinan**, **Claude Opus 4.8** and **Vladimir** in [#​10548](https://redirect.github.com/vitest-dev/vitest/issues/10548) [<samp>(2c955)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2c9559c02) - **pool**: - Prevent test run hang on worker crash \[backport to v4] - by **Ari Perkkiö** and **Jattioui Ismail** in [#​10543](https://redirect.github.com/vitest-dev/vitest/issues/10543) and [#​10564](https://redirect.github.com/vitest-dev/vitest/issues/10564) [<samp>(934b0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/934b0f587) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9) </details> <details> <summary>vitest-dev/vitest (@​vitest/ui)</summary> ### [`v4.1.9`](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
146efc059e |
feat: added htmlInput validation extension for joi schemas (#12377)
## About the changes Adds an extension to reject input that contains html tags. Also starts using it for project name. ### Important files ## Discussion points ## OSS PR checklist - [x] I have read and agree to the [Unleash Contributor License Agreement](https://github.com/Unleash/unleash/blob/main/CLA.md). - [x] I have added tests or explained why tests are not needed. - [x] I have updated documentation where relevant. --------- Co-authored-by: Thomas Heartman <thomas@getunleash.io> |
||
|
|
074666d104 |
task: update pnpm to 11.8.0 (#12373)
## About the changes What the title says, updates pnpm to 11.8.0 ### Important files ## Discussion points ## OSS PR checklist - [x] I have read and agree to the [Unleash Contributor License Agreement](https://github.com/Unleash/unleash/blob/main/CLA.md). - [x] I have added tests or explained why tests are not needed. - [x] I have updated documentation where relevant. |
||
|
|
6630b659c8 |
chore(deps): update pnpm to v11.5.3 (#12348)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`11.5.2+sha512.71c631e382066efc25625d5cf029075de07b61b37f6e27350fbd84b1bda5864c8c1967adc280776b45c30a715c0359a3be08fef42d5bb09e2b99029979692916` → `11.5.3`](https://renovatebot.com/diffs/npm/pnpm/11.5.2/11.5.3) |  |  | | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`11.5.2` → `11.5.3`](https://renovatebot.com/diffs/npm/pnpm/11.5.2/11.5.3) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>pnpm/pnpm (pnpm)</summary> ### [`v11.5.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#1153) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.5.2...v11.5.3) ##### Patch Changes - Stopped expanding environment variables in repository-controlled registry/proxy request destinations and registry credential values from `.npmrc`, and in workspace registry URLs from `pnpm-workspace.yaml`. Move dynamic registry URL and token configuration to trusted user, global, CLI, or environment config. - Resolve package-manager bootstrap dependencies with trusted user or CLI registry and network config, and reject package-manager env-lockfile records that do not use registry package paths with integrity-only resolutions before auto-switch execution. - Avoid writing `packageManagerDependencies` to `pnpm-lock.yaml` when package manager policy is set to `onFail: ignore` or `pmOnFail: ignore` [#​12228](https://redirect.github.com/pnpm/pnpm/issues/12228). - Avoid running dependency-status auto-install when the dependency status is unavailable without a project manifest. - Using the `$` version reference syntax in `overrides` (e.g. `"react": "$react"`) now prints a deprecation warning. The syntax still works, but [catalogs](https://pnpm.io/catalogs) are the recommended way to keep an overridden version in sync with the rest of the workspace. Reference a catalog entry with the `catalog:` protocol instead. - Fixed `pnpm config get globalconfig` to return the global `config.yaml` path again [pnpm/pnpm#11962](https://redirect.github.com/pnpm/pnpm/issues/11962). - Fixed bare `--color` so it does not consume the following CLI flag, allowing command shorthands like `--parallel` to expand correctly and forms like `pnpm --color with current <command>` to dispatch the inner command instead of failing with `MISSING_WITH_CURRENT_CMD`. - Fix `pnpm install` ignoring `enableGlobalVirtualStore` toggle by including it in the workspace state settings check [#​12142](https://redirect.github.com/pnpm/pnpm/issues/12142). - Security: pnpm now verifies the npm registry signature of a package-manager binary before spawning it, so a cloned repository cannot make pnpm download and execute an arbitrary native binary. This covers two paths that select an executable from repository-controlled input: - **pacquet install engine** — declaring `pacquet` (or `@pnpm/pacquet`) in `configDependencies` opts in to pnpm's Rust install engine. pnpm now verifies that the installed `pacquet` shim and the host's `@pacquet/<platform>-<arch>` binary carry a valid npm registry signature for their exact `name@version`, and refuses to run pacquet (failing the command) if the signature does not verify or cannot be checked. The only graceful fallback to pnpm's own engine is when pacquet has no binary for the current platform. - **automatic version switch / `self-update`** — the `packageManager` / `devEngines.packageManager` field makes pnpm download and run a specific pnpm version. pnpm now verifies the registry signature of `pnpm`, `@pnpm/exe`, and the host platform binary before installing/spawning them, and refuses to run an engine whose signature does not match a published, signed release. The check runs only on an actual download (store cache miss), so it does not add a network round trip to every command. In both cases the signature is verified over the *installed* integrity, against npm's public signing keys that ship embedded in the pnpm CLI (like corepack), so bytes substituted via a tampered lockfile or a repository-controlled registry fail verification — and a registry the user did not vouch for cannot supply its own signing keys. The signed packument is fetched from the configured registry, so an npm mirror works transparently. Verification fails closed: if it cannot be completed (for example, the registry is unreachable), the command fails rather than running an unverified binary. The embedded keys are kept current by a release-time check against npm's signing-keys endpoint. - Made peer-dependent deduplication deterministic. When a peer-suffixed package variant was a subset of two or more mutually incompatible larger variants, the variant it collapsed into depended on the order importers were resolved in, which varies between machines. This could resolve the same workspace to different lockfiles on different platforms and make `pnpm dedupe --check` alternate between passing and failing. - Reject invalid package names and versions from staged tarball manifests before deriving filenames for `pnpm stage download`. - Clarified in CLI help that the pnpm store is trusted shared state and store integrity checks are corruption detection, not a tamper boundary for untrusted store writers. - Reject reserved manifest `bin` names (`""`, `"."`, `".."`, and scoped forms such as `@scope/..`) when resolving a package's bins. These names previously passed the bin-name guard and, when joined to the global bin directory during global remove/update/add operations, could resolve to the global bin directory itself or its parent and have it recursively deleted. - Require trusted package identity before package-name `allowBuilds` entries can approve lifecycle scripts for git, git-hosted tarball, direct tarball, and local directory artifacts. To approve one of those artifacts explicitly, use its peer-suffix-free lockfile depPath as the `allowBuilds` key. Lockfile verification now rejects lockfiles where a registry-style dependency path (`name@semver`) is backed by a git, directory, or git-hosted tarball resolution (`ERR_PNPM_RESOLUTION_SHAPE_MISMATCH`), so the dependency path is a reliable artifact identity by the time scripts can run. - Security: pnpm now verifies the OpenPGP signature of a downloaded Node.js runtime's `SHASUMS256.txt` before trusting its integrity hashes. When a repository requests a Node.js runtime (e.g. via `devEngines.runtime` / `useNodeVersion`), the download mirror is repository-configurable through `node-mirror:<channel>`. The integrity of the downloaded binary was only checked against `SHASUMS256.txt` fetched from that same mirror — a circular check that a malicious mirror could satisfy by serving a tampered binary together with a matching `SHASUMS256.txt`. pnpm then executes the binary (for example to run lifecycle scripts). pnpm now fetches `SHASUMS256.txt.sig` and verifies the detached OpenPGP signature against the Node.js release team's public keys, which ship embedded in the pnpm CLI. A mirror that serves a tampered binary cannot also produce a valid signature, so the download fails to verify. The embedded keys are kept current by a release-time check against the canonical `nodejs/release-keys` list. The musl variants from the hardcoded `unofficial-builds.nodejs.org` mirror are not repository-configurable and are signed by a different key, so they continue to be trusted over TLS. </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
35c424d0cc |
chore(deps): update dependency @types/node to v22.19.21 (#12347)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.19.20` → `22.19.21`](https://renovatebot.com/diffs/npm/@types%2fnode/22.19.20/22.19.21) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
82be2c63e1 |
chore(deps): update dependency fast-check to v4.8.0 (#12336)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [fast-check](https://fast-check.dev/) ([source](https://redirect.github.com/dubzzz/fast-check/tree/HEAD/packages/fast-check)) | [`4.7.0` → `4.8.0`](https://renovatebot.com/diffs/npm/fast-check/4.7.0/4.8.0) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>dubzzz/fast-check (fast-check)</summary> ### [`v4.8.0`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#480) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.7.0...v4.8.0) *New arbitrary to chain in a loop fashion* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.8.0)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.7.0...v4.8.0)] #### Features - ([PR#6678](https://redirect.github.com/dubzzz/fast-check/pull/6678)) Add `chainUntil` arbitrary for iterative chaining #### Fixes - ([PR#6965](https://redirect.github.com/dubzzz/fast-check/pull/6965)) Bug: Restore ability not to use `skipLibCheck` - ([PR#6877](https://redirect.github.com/dubzzz/fast-check/pull/6877)) CI: Lowercase discussion\_category\_name to "announcements" - ([PR#6878](https://redirect.github.com/dubzzz/fast-check/pull/6878)) CI: Scope permissions of clean-caches - ([PR#6880](https://redirect.github.com/dubzzz/fast-check/pull/6880)) CI: Add PR-authoring guidance for Claude - ([PR#6887](https://redirect.github.com/dubzzz/fast-check/pull/6887)) CI: Delete CLAUDE.md - ([PR#6888](https://redirect.github.com/dubzzz/fast-check/pull/6888)) CI: Use tilde ranges for security dependency overrides - ([PR#6891](https://redirect.github.com/dubzzz/fast-check/pull/6891)) CI: Disable Renovate updates on pnpm overrides - ([PR#6899](https://redirect.github.com/dubzzz/fast-check/pull/6899)) CI: Scope Claude hooks to `$CLAUDE_PROJECT_DIR` - ([PR#6905](https://redirect.github.com/dubzzz/fast-check/pull/6905)) CI: Enable pnpm global virtual store - ([PR#6933](https://redirect.github.com/dubzzz/fast-check/pull/6933)) CI: Pin pnpm in npm install commands - ([PR#6932](https://redirect.github.com/dubzzz/fast-check/pull/6932)) CI: Grant `discussions: write` to release jobs - ([PR#6935](https://redirect.github.com/dubzzz/fast-check/pull/6935)) CI: Skip PR template check for dubzzz - ([PR#6937](https://redirect.github.com/dubzzz/fast-check/pull/6937)) CI: Mirror the repo to tangled - ([PR#6938](https://redirect.github.com/dubzzz/fast-check/pull/6938)) CI: Add missing runs-on for tangled - ([PR#6889](https://redirect.github.com/dubzzz/fast-check/pull/6889)) Doc: Add release notes for fast-check 4.7.0 - ([PR#6900](https://redirect.github.com/dubzzz/fast-check/pull/6900)) Doc: Fix broken API reference links - ([PR#6844](https://redirect.github.com/dubzzz/fast-check/pull/6844)) Doc: Extract manual setup guide into dedicated page - ([PR#6845](https://redirect.github.com/dubzzz/fast-check/pull/6845)) Doc: Add index pages for documentation sections - ([PR#6918](https://redirect.github.com/dubzzz/fast-check/pull/6918)) Doc: Fix Documentation link to point to first doc page - ([PR#6939](https://redirect.github.com/dubzzz/fast-check/pull/6939)) Doc: Link to Tangled mirror of fast-check - ([PR#6934](https://redirect.github.com/dubzzz/fast-check/pull/6934)) Test: Tolerate `\p{...}` value drift in docs tests - ([PR#6951](https://redirect.github.com/dubzzz/fast-check/pull/6951)) Test: Fix poisoning tests for latest Node *** </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
f6125bdb43 | 8.0.1 | ||
|
|
a3dec2e65a |
chore(deps): update pnpm to v11.5.2 (#12304)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`11.5.1+sha512.93f7b57422ea7068257235b4c16eb60762eb68e1dc23723199cc739043ea9be2c4143274a399d8c6defa2b1176226d9ca1c4b63482d6200c1a8fbaa78c1d1485` → `11.5.2`](https://renovatebot.com/diffs/npm/pnpm/11.5.1/11.5.2) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Release Notes <details> <summary>pnpm/pnpm (pnpm)</summary> ### [`v11.5.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#1152) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.5.1...v11.5.2) ##### Patch Changes - Peer dependency resolution now reuses the peer contexts already recorded in the lockfile when those providers are still present in the dependency graph and still satisfy the peer ranges. This avoids unnecessary peer-context rewrites during lockfile regeneration. Current manifest choices remain authoritative: a newly added, explicitly updated, or aliased direct provider, a changed nested provider, or a locked version that no longer satisfies the range still takes precedence. - The lockfile verifier now checks that a registry entry pinning an explicit `tarball` URL points at the artifact the registry's own metadata lists for that `name@version`. Previously a tampered lockfile could pair a trusted `name@version` with an attacker-chosen tarball URL (and a matching integrity for those bytes), so the install fetched the attacker's bytes. A mismatch — or any entry that can't be confirmed against the registry — is rejected with `ERR_PNPM_TARBALL_URL_MISMATCH`. Non-registry resolutions (`file:`, git-hosted, etc.) and registry entries without an explicit tarball URL (the URL is reconstructed from name+version+registry, so it is inherently bound) are unaffected; non-standard registry tarball URLs (npm Enterprise, GitHub Packages) still pass because they match the metadata. - Fix `pnpm update --recursive --lockfile-only <pkg>@​<version>` crashing with `Invalid Version` when the catalog entry for `<pkg>` is a version range (e.g. `^21.2.10`) and `catalogMode` is `strict` or `prefer`. The catalog–version comparison now skips the equality check when either side is a range rather than passing a range to `semver.eq()`, so range specifiers fall through to the existing mismatch handling instead of throwing [#​11570](https://redirect.github.com/pnpm/pnpm/issues/11570). - Avoided a Node.js crash when pnpm exits after network requests on Windows. - Fixed packages being materialized into the virtual store without their root-level files (`package.json`, `LICENSE`, README, root entrypoints) when multiple `pnpm install` processes ran against the same store/workspace concurrently. The fast import path used to destructively empty the shared target directory, so a concurrent importer could wipe files another importer had already written; if the surviving files included the `package.json` completion marker, every later install treated the broken directory as complete and never repaired it. The fast path now imports directly only when it can create the target directory exclusively, and otherwise builds the package in a private temp directory and atomically renames it into place [#​12197](https://redirect.github.com/pnpm/pnpm/issues/12197). - Fix dependency build scripts not running under the global virtual store (`enableGlobalVirtualStore`). In a workspace install, dependency build scripts are deferred to a single `rebuild` pass (`buildProjects`). That pass resolved each package's location from the classic `node_modules/.pnpm/<depPathToFilename>` layout, which does not exist under the global virtual store — so native dependencies (e.g. packages using `node-gyp` / `prebuild-install`) were never built and failed to load at runtime (`Cannot find module .../build/Release/*.node`). `buildProjects` now resolves the global-virtual-store projection directory (`<storeDir>/links/<hash>`, computed with the same graph hash the installer uses) when `enableGlobalVirtualStore` is set, and serializes concurrent builds of the same shared projection so parallel workspace projects don't race on the same directory. - Don't promote a `runtime:` dependency (such as the Node.js version from `devEngines.runtime` or `pnpm runtime set`) into a catalog when `catalogMode` is `strict` or `prefer`. A `runtime:` dependency round-trips to `devEngines.runtime`, which only recognizes the `runtime:` protocol; cataloging it rewrote the manifest entry to `catalog:`, which broke that round-trip, stranded it in `devDependencies`, and left `devEngines.runtime` untouched. - Skip lockfile `minimumReleaseAge`/`trustPolicy` verification for non-registry tarball protocols (for example `file:`), so local tarball dependencies are not incorrectly checked against npm registry metadata. </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
12d56c8299 |
chore(deps): update dependency @types/node to v22.19.20 (#12301)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.19.19` → `22.19.20`](https://renovatebot.com/diffs/npm/@types%2fnode/22.19.19/22.19.20) |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/959) for more information. --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
f2b1bd4944 | chore(deps): update dependency del-cli to v7 (#11874) | ||
|
|
c52116254a |
chore(deps): update vitest monorepo to v4.1.8 (#12285)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.1.5` → `4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.5/4.1.8) |  |  | | [@vitest/ui](https://vitest.dev/guide/ui) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`4.1.5` → `4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fui/4.1.5/4.1.8) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.5` → `4.1.8`](https://renovatebot.com/diffs/npm/vitest/4.1.5/4.1.8) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.8`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.8) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8) ##### 🐞 Bug Fixes - **browser**: - Disable client `cdp` API when `allowWrite/allowExec: false` \[backport to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex** in [#​10450](https://redirect.github.com/vitest-dev/vitest/issues/10450) [<samp>(e4067)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e4067b3b1) - Remove orphaned Playwright route when same module is mocked via multiple ids \[backport to v4] - by [@​toxik](https://redirect.github.com/toxik) and [@​Zelys-DFKH](https://redirect.github.com/Zelys-DFKH) in [#​10474](https://redirect.github.com/vitest-dev/vitest/issues/10474) [<samp>(675b4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/675b4343f) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8) ### [`v4.1.7`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.7) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7) ##### 🐞 Bug Fixes - **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport) - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10384](https://redirect.github.com/vitest-dev/vitest/issues/10384) [<samp>(4f0f2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4f0f2a1ee) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7) ### [`v4.1.6`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.6) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6) ##### 🐞 Bug Fixes - **browser**: Provide project reference in `ToMatchScreenshotResolvePath` - by [@​macarie](https://redirect.github.com/macarie) and [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​10138](https://redirect.github.com/vitest-dev/vitest/issues/10138) [<samp>(31882)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/31882607c) - Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Codex** and [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​10196](https://redirect.github.com/vitest-dev/vitest/issues/10196) [<samp>(2847d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2847dfa2a) - **browser**: Simplify orchestrator otel carrier - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10285](https://redirect.github.com/vitest-dev/vitest/issues/10285) [<samp>(18af9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/18af98cee) ##### 🏎 Performance - Stringify diff objects only once - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​10276](https://redirect.github.com/vitest-dev/vitest/issues/10276) [<samp>(9f7b1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9f7b1528c) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Madrid) - Branch creation - "after 7pm every weekday,before 5am every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
62caf7a9f3 | chore(deps): update dependency concurrently to v10 (#12267) |