Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add Headers.prototype.getSetCookie #1915

Merged
merged 1 commit into from Feb 8, 2023

Conversation

KhafraDev
Copy link
Member

Implements whatwg/fetch@e4d3480

It got merged finally!

return this[kHeadersList].cookies ?? []
}

// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine
get [kHeadersSortedMap] () {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A Map can't be used anymore because there can now be duplicate set-cookie keys. I could probably work around it but it wouldn't be maintainable. So I chose the spec solution instead, which is probably slower, but much easier to fix issues with in the future.

@codecov-commenter
Copy link

codecov-commenter commented Feb 8, 2023

Codecov Report

Base: 90.42% // Head: 94.93% // Increases project coverage by +4.51% 🎉

Coverage data is based on head (175931b) compared to base (c0ba75f).
Patch has no changes to coverable lines.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1915      +/-   ##
==========================================
+ Coverage   90.42%   94.93%   +4.51%     
==========================================
  Files          71       40      -31     
  Lines        6107     2944    -3163     
==========================================
- Hits         5522     2795    -2727     
+ Misses        585      149     -436     
Impacted Files Coverage Δ
index.js 72.27% <0.00%> (-26.74%) ⬇️
lib/core/util.js 88.81% <0.00%> (-9.22%) ⬇️
lib/api/readable.js 82.75% <0.00%> (-8.63%) ⬇️
lib/handler/RedirectHandler.js 87.50% <0.00%> (-7.50%) ⬇️
lib/mock/mock-utils.js 94.00% <0.00%> (-6.00%) ⬇️
lib/proxy-agent.js 88.31% <0.00%> (-5.20%) ⬇️
lib/core/request.js 94.28% <0.00%> (-4.58%) ⬇️
lib/cookies/index.js
lib/fetch/headers.js
lib/fileapi/symbols.js
... and 28 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

@KhafraDev
Copy link
Member Author

Test failures seem to be due to the server used in the test being down.

'https://speed.hetzner.de/100MB.bin', {

Copy link
Member

@ronag ronag left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, does this break anything?

@KhafraDev
Copy link
Member Author

KhafraDev commented Feb 8, 2023

No, all tests pass locally but we should wait for CI still. I'm opening another pr to remove the test.
#1916

CI is about as green as it'll get.

@ronag ronag merged commit ba5ef44 into nodejs:main Feb 8, 2023
@KhafraDev KhafraDev deleted the add-getsetcookie-finally-wow branch February 8, 2023 20:07
meyfa added a commit to meyfa/get-some-rest that referenced this pull request Mar 24, 2023
Since Node.js now has `getSetCookie` available, we can use it instead of
splitting the header on comma, which was very error-prone.

Ref: nodejs/undici#1915

The linked PR was released as Undici v5.19.0, which is first available
in Node.js 18.14.1. Since Node.js 18.14.2 has an even more up-tp-date
version of Undici (5.20.0), I figured it'd be sensible to raise our
requirement to that.

BREAKING CHANGE: Engine version requirement raised to Node `>=18.14.2`.
meyfa added a commit to meyfa/get-some-rest that referenced this pull request Mar 24, 2023
Since Node.js now has `getSetCookie` available, we can use it instead of
splitting the header on comma, which was very error-prone.

Ref: nodejs/undici#1915

The linked PR was released as Undici v5.19.0, which is first available
in Node.js 18.14.1. Since Node.js 18.14.2 has an even more up-tp-date
version of Undici (5.20.0), I figured it'd be sensible to raise our
requirement to that.

BREAKING CHANGE: Engine version requirement raised to Node `>=18.14.2`.
meyfa added a commit to meyfa/get-some-rest that referenced this pull request Mar 24, 2023
)

Since Node.js now has `getSetCookie` available, we can use it instead of
splitting the header on comma, which was very error-prone.

Ref: nodejs/undici#1915

The linked PR was released as Undici v5.19.0, which is first available
in Node.js 18.14.1. Since Node.js 18.14.2 has an even more up-tp-date
version of Undici (5.20.0), I figured it'd be sensible to raise our
requirement to that.

BREAKING CHANGE: Engine version requirement raised to Node `>=18.14.2`.
anonrig pushed a commit to anonrig/undici that referenced this pull request Apr 4, 2023
metcoder95 pushed a commit to metcoder95/undici that referenced this pull request Jul 21, 2023
kodiakhq bot pushed a commit to vercel/next.js that referenced this pull request Sep 7, 2023
### What?

Upgrade TypeScript to the latest version as of this PR. **This does not affect users, as the change is only for our repository.**

### Why?

Part of some upcoming PRs to try to clean up cookie handling, now that `getSetCookie` is available. Since we use `undici`, which [implements it](nodejs/undici#1915), we can get rid of some code to rely more on the platform.

This PR is needed to get the types for `Headers#getSetCookie` which was added in 5.2

### How?

I needed to update some dependency types to get build to pass, but other than that, only needed to bump from `5.1.6` to `5.2.2`, so hopefully all is fine.
kodiakhq bot pushed a commit to X-oss-byte/Canary-nextjs that referenced this pull request Sep 18, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [undici](https://undici.nodejs.org) ([source](https://togithub.com/nodejs/undici)) | [`5.14.0` -> `5.19.1`](https://renovatebot.com/diffs/npm/undici/5.14.0/5.19.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/undici/5.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/undici/5.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/undici/5.14.0/5.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/undici/5.14.0/5.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

### GitHub Vulnerability Alerts

#### [CVE-2023-23936](https://togithub.com/nodejs/undici/security/advisories/GHSA-5r9g-qh6m-jxff)

### Impact

undici library does not protect `host` HTTP header from CRLF injection vulnerabilities.

### Patches

This issue was patched in Undici v5.19.1.

### Workarounds

Sanitize the `headers.host` string before passing to undici.

### References

Reported at https://hackerone.com/reports/1820955.

### Credits

Thank you to Zhipeng Zhang ([@&#8203;timon8](https://hackerone.com/timon8)) for reporting this vulnerability.

---

### Release Notes

<details>
<summary>nodejs/undici (undici)</summary>

### [`v5.19.1`](https://togithub.com/nodejs/undici/releases/tag/v5.19.1)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.19.0...v5.19.1)

#### ⚠️ Security Release ⚠️

-   [Regular Expression Denial of Service in Headers](https://togithub.com/nodejs/undici/security/advisories/GHSA-r6ch-mqf9-qc9w) with CVE-2023-24807
-   [CRLF Injection in Nodejs ‘undici’ via host](https://togithub.com/nodejs/undici/security/advisories/GHSA-5r9g-qh6m-jxff) with CVE-2023-23936

This release is part of the Node.js security release train: https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/

### [`v5.19.0`](https://togithub.com/nodejs/undici/releases/tag/v5.19.0)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.18.0...v5.19.0)

#### What's Changed

-   fix(fetch): raise AbortSignal max event listeners by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1910
-   fix: content-disposition header parsing by [@&#8203;climba03003](https://togithub.com/climba03003) in [nodejs/undici#1911
-   fix: remove test by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1916
-   feat: add Headers.prototype.getSetCookie by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1915
-   fix(headers): clone getSetCookie list & add getSetCookie type by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1917
-   doc(mock): update out-of-date reply documentation by [@&#8203;p9f](https://togithub.com/p9f) in [nodejs/undici#1913
-   fix(types): add missing keepAlive params by [@&#8203;SkeLLLa](https://togithub.com/SkeLLLa) in [nodejs/undici#1918
-   Make the fetch() abort test pass locally, on Linux and Mac, Node 18/19. by [@&#8203;mcollina](https://togithub.com/mcollina) in [nodejs/undici#1927

#### New Contributors

-   [@&#8203;climba03003](https://togithub.com/climba03003) made their first contribution in [nodejs/undici#1911
-   [@&#8203;p9f](https://togithub.com/p9f) made their first contribution in [nodejs/undici#1913

**Full Changelog**: nodejs/undici@v5.18.0...v5.19.0

### [`v5.18.0`](https://togithub.com/nodejs/undici/releases/tag/v5.18.0)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.17.1...v5.18.0)

##### What's Changed

-   Add ability to set TCP keepalive by [@&#8203;xconverge](https://togithub.com/xconverge) in [nodejs/undici#1904
-   use faster timers by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1908
-   fix: ensure header value is a string by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1899

**Full Changelog**: nodejs/undici@v5.17.1...v5.18.0

### [`v5.17.1`](https://togithub.com/nodejs/undici/releases/tag/v5.17.1)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.17.0...v5.17.1)

#### What's Changed

-   fix: bad buffer slice (nodejs/undici@d2be675)

**Full Changelog**: nodejs/undici@v5.17.0...v5.17.1

### [`v5.17.0`](https://togithub.com/nodejs/undici/releases/tag/v5.17.0)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.16.0...v5.17.0)

#### What's Changed

-   fix(wpts): Blob is a global getter in >=v19.x.x by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1880
-   doc: fix anchor links dispatcher.stream by [@&#8203;RafaelGSS](https://togithub.com/RafaelGSS) in [nodejs/undici#1881
-   wpt: make runner more resilient by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1884
-   Make test pass in v19.x by [@&#8203;mcollina](https://togithub.com/mcollina) in [nodejs/undici#1879
-   Correct the type of DispatchOptions\["headers"] by [@&#8203;pan93412](https://togithub.com/pan93412) in [nodejs/undici#1896
-   perf(content-type parser): faster string collector by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1894
-   feat: expose content-type parser by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1895
-   fix(types): Update DispatchOptions type for missing "blocking" by [@&#8203;xconverge](https://togithub.com/xconverge) in [nodejs/undici#1889
-   fix(types): update error type definitions by [@&#8203;rafaelcr](https://togithub.com/rafaelcr) in [nodejs/undici#1888
-   fix: ensure connection header is a string by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1900
-   fix: throw if invalid content-type header by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1901
-   fix(fetch): use semicolon for Cookie header delimiter by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1906
-   Use FastBuffer by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1907

#### New Contributors

-   [@&#8203;pan93412](https://togithub.com/pan93412) made their first contribution in [nodejs/undici#1896
-   [@&#8203;rafaelcr](https://togithub.com/rafaelcr) made their first contribution in [nodejs/undici#1888

**Full Changelog**: nodejs/undici@v5.16.0...v5.17.0

### [`v5.16.0`](https://togithub.com/nodejs/undici/releases/tag/v5.16.0)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.15.2...v5.16.0)

#### What's Changed

-   Add feature to specify custom headers for proxies by [@&#8203;Sebmaster](https://togithub.com/Sebmaster) in [nodejs/undici#1877

#### New Contributors

-   [@&#8203;Sebmaster](https://togithub.com/Sebmaster) made their first contribution in [nodejs/undici#1877

**Full Changelog**: nodejs/undici@v5.15.2...v5.16.0

### [`v5.15.2`](https://togithub.com/nodejs/undici/compare/9d5f23177408dc16d3d4cbb8cebf463081c54e16...9457c9719029945ef9ff36b71d58557443730942)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.15.1...v5.15.2)

### [`v5.15.1`](https://togithub.com/nodejs/undici/releases/tag/v5.15.1)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.15.0...v5.15.1)

#### What's Changed

-   fix(websocket): simplify typedarray copying by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1854
-   fix: wpts on node v18.13.0+ by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1859
-   perf: allow keep alive for HEAD requests by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1858
-   fix: flaky abort test by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1863

**Full Changelog**: nodejs/undici@v5.15.0...v5.15.1

### [`v5.15.0`](https://togithub.com/nodejs/undici/releases/tag/v5.15.0)

[Compare Source](https://togithub.com/nodejs/undici/compare/v5.14.0...v5.15.0)

#### What's Changed

-   \[types] update ProxyAgent Options (timeout) by [@&#8203;sosoba](https://togithub.com/sosoba) in [nodejs/undici#1801
-   feat: implement websockets by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1795
-   feat(websocket): handle ping/pong frames & fix fragmented frames by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1809
-   docs: add basic fetch & company docs by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1810
-   make formdata body immutable and encode it only once by [@&#8203;jimmywarting](https://togithub.com/jimmywarting) in [nodejs/undici#1814
-   test: add regression test for [#&#8203;1814](https://togithub.com/nodejs/undici/issues/1814) by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1815
-   feat(websocket): only consume necessary bytes by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1812
-   websocket: use Buffer.allocUnsafe by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1817
-   build(deps-dev): bump [@&#8203;sinonjs/fake-timers](https://togithub.com/sinonjs/fake-timers) from 9.1.2 to 10.0.2 by [@&#8203;dependabot](https://togithub.com/dependabot) in [nodejs/undici#1819
-   fix(websocket): deprecation warning & 64-bit unsigned int body length by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1818
-   Use nodejs.stream.destroyed symbol by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1816
-   fetch: removal of redundant condition by [@&#8203;debadree25](https://togithub.com/debadree25) in [nodejs/undici#1821
-   fix(request): request headers array by [@&#8203;jd-carroll](https://togithub.com/jd-carroll) in [nodejs/undici#1807
-   fix(websocket): validate payload length received by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1822
-   fix(websocket): run parser in loop, instead of recursively by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1828
-   fix(fetch): weaker refs by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1824
-   websocket: add tests for opening handshake by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1831
-   websocket: add tests for constructor, close, and send by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1832
-   websocket: more test coverage by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1833
-   fix(WPTs): flaky abort test by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1835
-   wpt: add test by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1836
-   fix: don't send keep-alive if we want reset by [@&#8203;ronag](https://togithub.com/ronag) in [nodejs/undici#1846
-   fetch: update body consume to match spec by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1847
-   feat: allow connection header in request by [@&#8203;metcoder95](https://togithub.com/metcoder95) in [nodejs/undici#1829
-   feat: add cookie parsing ability by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1848
-   fix(cookie): add docs & expose in node v16 by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1849
-   fix(cookies): work with global Headers by [@&#8203;KhafraDev](https://togithub.com/KhafraDev) in [nodejs/undici#1850
-   docs(Dispatcher): adjust documentation for reset flag by [@&#8203;metcoder95](https://togithub.com/metcoder95) in [nodejs/undici#1852
-   Fix broken interceptor test by [@&#8203;mcollina](https://togithub.com/mcollina) in [nodejs/undici#1853

#### New Contributors

-   [@&#8203;sosoba](https://togithub.com/sosoba) made their first contribution in [nodejs/undici#1801
-   [@&#8203;debadree25](https://togithub.com/debadree25) made their first contribution in [nodejs/undici#1821
-   [@&#8203;jd-carroll](https://togithub.com/jd-carroll) made their first contribution in [nodejs/undici#1807

**Full Changelog**: nodejs/undici@v5.14.0...v5.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), 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.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/sammyfilly/Canary-nextjs).
crysmags pushed a commit to crysmags/undici that referenced this pull request Feb 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants