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

No error is emitted on response destroy when socket is already destroyed #35923

Closed
szmarczak opened this issue Nov 2, 2020 · 2 comments
Closed
Labels
http Issues or PRs related to the http subsystem.

Comments

@szmarczak
Copy link
Member

szmarczak commented Nov 2, 2020

  • Version: 10.x.x, 12.x.x, 14.x.x, 15.x.x
  • Platform: Linux solus 5.6.19-159.current #1 SMP PREEMPT Fri Oct 16 17:49:06 UTC 2020 x86_64 GNU/Linux
  • Subsystem: http

What steps will reproduce the bug?

const http = require('http');

const request = http.get('http://httpbin.org/anything', response => {
    setTimeout(() => {
        console.log(`request.destroyed = ${request.destroyed}`);
        console.log(`response.destroyed = ${response.destroyed}`);
        
        response.destroy(new Error('failure'));
    }, 1000);
});

How often does it reproduce? Is there a required condition?

Always.

What is the expected behavior?

An error with a message failure.

What do you see instead?

No error.

Additional information

While I understand that request is destroyed on socket close, the response.destroy logic is broken:

node/lib/_http_incoming.js

Lines 121 to 125 in c1da528

IncomingMessage.prototype.destroy = function destroy(error) {
if (this.socket)
this.socket.destroy(error);
return this;
};

The error is not thrown because the socket has been destroyed. Although the response has not.

@szmarczak szmarczak changed the title No error is emitted on response when socket is destroyed No error is emitted on response destroy when socket is already destroyed Nov 2, 2020
@lpinca lpinca added the http Issues or PRs related to the http subsystem. label Nov 2, 2020
@xamgore
Copy link

xamgore commented May 17, 2021

Same behaviour in v16.1.0. Possibly @jasnell should keep in mind the issue when implementing HTTP3?

renovate bot referenced this issue in valora-inc/hooks Mar 22, 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 |
|---|---|---|---|---|---|
| [got](https://github.com/sindresorhus/got) | [`^11.8.6` ->
`^12.6.0`](https://renovatebot.com/diffs/npm/got/11.8.6/12.6.0) |
[![age](https://badges.renovateapi.com/packages/npm/got/12.6.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/got/12.6.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/got/12.6.0/compatibility-slim/11.8.6)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/got/12.6.0/confidence-slim/11.8.6)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>sindresorhus/got</summary>

###
[`v12.6.0`](https://github.com/sindresorhus/got/releases/tag/v12.6.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.3...v12.6.0)

- Update dependencies
[`88c88fb`](https://github.com/sindresorhus/got/commit/88c88fb)
[`979272e`](https://github.com/sindresorhus/got/commit/979272e)
- Loosen URL validation strictness
([#&#8203;2200](https://github.com/sindresorhus/got/issues/2200))
[`0ca0b7f`](https://github.com/sindresorhus/got/commit/0ca0b7f)

###
[`v12.5.3`](https://github.com/sindresorhus/got/releases/tag/v12.5.3)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.2...v12.5.3)

- Fix abort event listeners not always being cleaned up
([#&#8203;2162](https://github.com/sindresorhus/got/issues/2162))
[`3cc40b5`](https://github.com/sindresorhus/got/commit/3cc40b5)

###
[`v12.5.2`](https://github.com/sindresorhus/got/releases/tag/v12.5.2)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.1...v12.5.2)

- Improve TypeScript 4.9 compatibility
([#&#8203;2163](https://github.com/sindresorhus/got/issues/2163))
[`39f83b6`](https://github.com/sindresorhus/got/commit/39f83b6)

###
[`v12.5.1`](https://github.com/sindresorhus/got/releases/tag/v12.5.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.0...v12.5.1)

- Fix compatibility with TypeScript and ESM
[`3b3ea67`](https://github.com/sindresorhus/got/commit/3b3ea67)
- Fix request body not being properly cached
([#&#8203;2150](https://github.com/sindresorhus/got/issues/2150))
[`3e9d3af`](https://github.com/sindresorhus/got/commit/3e9d3af)

###
[`v12.5.0`](https://github.com/sindresorhus/got/releases/tag/v12.5.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.4.1...v12.5.0)

- Disable method rewriting on 307 and 308 status codes
([#&#8203;2145](https://github.com/sindresorhus/got/issues/2145))
[`e049e94`](https://github.com/sindresorhus/got/commit/e049e94)
- Upgrade dependencies
[`8630815`](https://github.com/sindresorhus/got/commit/8630815)
[`f0ac0b3`](https://github.com/sindresorhus/got/commit/f0ac0b3)
[`4c3762a`](https://github.com/sindresorhus/got/commit/4c3762a)

###
[`v12.4.1`](https://github.com/sindresorhus/got/releases/tag/v12.4.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.4.0...v12.4.1)

##### Fixes

- Fix `options.context` being not extensible
[`b671480`](https://github.com/sindresorhus/got/commit/b671480715dbbff908e9a385f5e714570c663cd7)
- Don't emit `uploadProgress` after promise cancelation
[`693de21`](https://github.com/sindresorhus/got/commit/693de217b030816f574d6e4cb505ee2e77b21c29)

###
[`v12.4.0`](https://github.com/sindresorhus/got/releases/tag/v12.4.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.3.1...v12.4.0)

##### Improvements

- Support FormData without known length
([#&#8203;2120](https://github.com/sindresorhus/got/issues/2120))
[`850773c`](https://github.com/sindresorhus/got/commit/850773c)

##### Fixes

- Don't call `beforeError` hooks with `HTTPError` if the
`throwHttpErrors` option is `false`
([#&#8203;2104](https://github.com/sindresorhus/got/issues/2104))
[`3927348`](https://github.com/sindresorhus/got/commit/3927348)

###
[`v12.3.1`](https://github.com/sindresorhus/got/releases/tag/v12.3.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.3.0...v12.3.1)

- Don't freeze signal when freezing Options
([#&#8203;2100](https://github.com/sindresorhus/got/issues/2100))
[`43b1467`](https://github.com/sindresorhus/got/commit/43b1467)

###
[`v12.3.0`](https://github.com/sindresorhus/got/releases/tag/v12.3.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.2.0...v12.3.0)

- Add `.off()` method for events
([#&#8203;2092](https://github.com/sindresorhus/got/issues/2092))
[`88056be`](https://github.com/sindresorhus/got/commit/88056be)

###
[`v12.2.0`](https://github.com/sindresorhus/got/releases/tag/v12.2.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.1.0...v12.2.0)

- [Support
`AbortController`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#signal)
([#&#8203;2020](https://github.com/sindresorhus/got/issues/2020))
[`6a6d2a9`](https://github.com/sindresorhus/got/commit/6a6d2a9)
- Add
[`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets)
option
([#&#8203;2062](https://github.com/sindresorhus/got/issues/2062))
[`461b3d4`](https://github.com/sindresorhus/got/commit/461b3d4)

###
[`v12.1.0`](https://github.com/sindresorhus/got/releases/tag/v12.1.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.4...v12.1.0)

##### Improvements

- Add `response.ok`
([#&#8203;2043](https://github.com/sindresorhus/got/issues/2043))
[`22d58fb`](https://github.com/sindresorhus/got/commit/22d58fb)
- This is only useful if you have [`{throwHttpErrors:
false}`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#throwhttperrors)

##### Fixes

- Do not redirect to UNIX sockets
([#&#8203;2047](https://github.com/sindresorhus/got/issues/2047))
[`861ccd9`](https://github.com/sindresorhus/got/commit/861ccd9)
- [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)
- [Also back ported to
v11](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

###
[`v12.0.4`](https://github.com/sindresorhus/got/releases/tag/v12.0.4)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.3...v12.0.4)

- Remove stream lock - unreliable since Node 17.3.0
[`bb8eca9`](https://github.com/sindresorhus/got/commit/bb8eca924c338ca12d5b90d6a26aa28dbddb42ee)

###
[`v12.0.3`](https://github.com/sindresorhus/got/releases/tag/v12.0.3)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.2...v12.0.3)

- Allow more types in the `json` option
([#&#8203;2015](https://github.com/sindresorhus/got/issues/2015))
[`eb045bf`](https://github.com/sindresorhus/got/commit/eb045bf)

###
[`v12.0.2`](https://github.com/sindresorhus/got/releases/tag/v12.0.2)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.1...v12.0.2)

- Fix `encoding` option with `{responseType: 'json'}`
([#&#8203;1996](https://github.com/sindresorhus/got/issues/1996))
[`0703318`](https://github.com/sindresorhus/got/commit/0703318)

###
[`v12.0.1`](https://github.com/sindresorhus/got/releases/tag/v12.0.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.0...v12.0.1)

- Fix `nock` compatibility
([#&#8203;1959](https://github.com/sindresorhus/got/issues/1959))
[`bf39d2c`](https://github.com/sindresorhus/got/commit/bf39d2c)
- Fix missing export of `Request` TypeScript type
([#&#8203;1940](https://github.com/sindresorhus/got/issues/1940))
[`0f9f2b8`](https://github.com/sindresorhus/got/commit/0f9f2b8)

###
[`v12.0.0`](https://github.com/sindresorhus/got/releases/tag/v12.0.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v11.8.6...v12.0.0)

##### Introducing Got v12.0.0 🎉

Long time no see! The latest Got version (v11.8.2) was released just in
February ❄️
We have been working hard on squashing bugs and improving overall
experience.

If you find Got useful, you might want to [sponsor the Got
maintainers](https://github.com/sindresorhus/got?sponsor=1).

##### This package is now pure ESM

**Please [read
this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).**
Also see
[https://github.com/sindresorhus/got/issues/1789](https://github.com/sindresorhus/got/issues/1789).

- **Please don't open issues about `[ERR_REQUIRE_ESM]` and `Must use
import to load ES Module` errors.** This is a problem with your setup,
not Got.
- Please don't open issues about using Got with Jest. Jest does not
fully support ESM.
- Pretty much any problem with loading this package is a problem with
your bundler, test framework, etc, not Got.
- If you use TypeScript, you will want to stay on Got v11 until
TypeScript 4.6 is out.
[Why.](https://github.com/microsoft/TypeScript/issues/46452)
- If you use a bundler, make sure it supports ESM and that you have
correctly configured it for ESM.
- The Got issue tracker is not a support channel for your favorite
build/bundler tool.

##### Required Node.js >=14

While working with streams, we encountered more Node.js bugs that needed
workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code
would get more messy.
We strongly recommend that you update Node.js to **v14 LTS**.

##### HTTP/2 support

Every Node.js release, the native `http2` module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we
decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it
on via the `http2` option.

To run HTTP/2 requests, it is required to use Node.js **v15.10** or
above.

##### Bug fixes

Woah, we possibly couldn't make a release if we didn't fix some bugs!

- Do not throw on custom stack traces
([#&#8203;1491](https://github.com/sindresorhus/got/issues/1491))
[`49c16ee`](https://github.com/sindresorhus/got/commit/49c16ee54fb19ea7aa77e24ac8c2b602f0aad265)
- Remove automatic `content-length` on ReadStream
([#&#8203;1510](https://github.com/sindresorhus/got/issues/1510))
[`472b8ef`](https://github.com/sindresorhus/got/commit/472b8ef9d9fc7713b740981a8b1103a7a9111b26)
- Fix promise shortcuts in case of error status code
([#&#8203;1543](https://github.com/sindresorhus/got/issues/1543))
[`ff918fb`](https://github.com/sindresorhus/got/commit/ff918fb6dedb6d8b23421497ec890d43f45121b7)
[`1107cc6`](https://github.com/sindresorhus/got/commit/1107cc625e4cc469276483316c48896a21f6251a)
- Invert the `methodRewriting` option
[`51d88a0`](https://github.com/sindresorhus/got/commit/51d88a0efed56760d116c5b911cea71e3265c787)
- Fix `url` not being reused on retry in rare case
([#&#8203;1487](https://github.com/sindresorhus/got/issues/1487))
[`462bc63`](https://github.com/sindresorhus/got/commit/462bc630015064fa4ad4358cf28d24f95e1c958b)
- Fix hanging promise on HTTP/2 timeout
([#&#8203;1492](https://github.com/sindresorhus/got/issues/1492))
[`a59fac4`](https://github.com/sindresorhus/got/commit/a59fac415ac013a48b1d514837628a5cf81d6878)
- Prevent uncaught ParseErrors on initial successful response
([#&#8203;1527](https://github.com/sindresorhus/got/issues/1527))
[`77df9c3`](https://github.com/sindresorhus/got/commit/77df9c33db5ba3126f54317171e1cfcfceefc3d5)
- Throw an error when retrying with consumed body
([#&#8203;1507](https://github.com/sindresorhus/got/issues/1507))
[`62305d7`](https://github.com/sindresorhus/got/commit/62305d77d3428b5c714d21b4bbee68cc75b5f787)
- Fix a Node.js 16 bug that hangs Got streams
[`06a2d3d`](https://github.com/sindresorhus/got/commit/06a2d3d7d8d4fcc6898b6364d1a18ca1d407092b)
- Fix default pagination handling for empty Link header
([#&#8203;1768](https://github.com/sindresorhus/got/issues/1768))
[`1e1e506`](https://github.com/sindresorhus/got/commit/1e1e50647e93d038a4cc6a9bbbfbf61165d8fd39)
- Fix incorrect `response.complete` when using cache
[`9e15d88`](https://github.com/sindresorhus/got/commit/9e15d887da3b065940bbc8ca38f9c748a0bbc75e)
- Fix `Cannot call end` error when `request` returns a `Writable`
[`226cc39`](https://github.com/sindresorhus/got/commit/226cc3995f6e16938163ebde24d8762e7dcd15e2)
- Fix Request options not being reused on retry
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Fix types being not compatible with CommonJS
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Fix `got.paginate does not call init hooks`
([#&#8203;1574](https://github.com/sindresorhus/got/issues/1574))
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Generate a new object when passing options to the native `https`
module
([#&#8203;1567](https://github.com/sindresorhus/got/issues/1567))
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Remove stream reuse check
([#&#8203;1803](https://github.com/sindresorhus/got/issues/1803))
[`9ecc5ee`](https://github.com/sindresorhus/got/commit/9ecc5ee76f77aafd5100520d9d8789c491c8fb24)
- Fix merging `searchParams`
([#&#8203;1814](https://github.com/sindresorhus/got/issues/1814))
[`1018c20`](https://github.com/sindresorhus/got/commit/1018c2029eea1f5b75b5120265996f1c0b3c12ae)
[`732e9bd`](https://github.com/sindresorhus/got/commit/732e9bd9406ba1c3dd64b445264e891f33fc0254)
- Fix unhandled exception when lookup returns invalid IP early
([#&#8203;1737](https://github.com/sindresorhus/got/issues/1737))
[`2453e5e`](https://github.com/sindresorhus/got/commit/2453e5e4213fe036a0108de3e4db414dcf2b4c30)
- Fix relative URLs when paginating
[`439fb82`](https://github.com/sindresorhus/got/commit/439fb82d2a07cece417a18c47e37cfdeaaf38db7)
- Require url to be an instance of URL when paginating
([#&#8203;1818](https://github.com/sindresorhus/got/issues/1818))
[`eda69ff`](https://github.com/sindresorhus/got/commit/eda69ff924a621e499d31cbc590993a32ddb48d3)
- Fix `username` and `password` encoding in URL
([#&#8203;1169](https://github.com/sindresorhus/got/issues/1169)
[#&#8203;1317](https://github.com/sindresorhus/got/issues/1317))
[`d65d0ca`](https://github.com/sindresorhus/got/commit/d65d0caf627e8d1f5367db34d7d9b55d332c1efb)
- Clone raw options
[`1c4cefc`](https://github.com/sindresorhus/got/commit/1c4cefc9b49f891712c3758f853d8c6214a1c904)
- Fix invalid `afterResponse` return check
[`cbc8902`](https://github.com/sindresorhus/got/commit/cbc8902)
- Fix `https.alpnProtocols` not having an effect
[`e1099fb`](https://github.com/sindresorhus/got/commit/e1099fb)

##### Improvements

- Make the `context` option mergeable
([#&#8203;1459](https://github.com/sindresorhus/got/issues/1459))
[`2b8ed1f`](https://github.com/sindresorhus/got/commit/2b8ed1f5a185f30603d24e2ceb8181782de3bc5a)
- Add generic argument to AfterResponseHook TypeScript type
([#&#8203;1589](https://github.com/sindresorhus/got/issues/1589))
[`6fc04a9`](https://github.com/sindresorhus/got/commit/6fc04a9b92f07b07b9fba010f2231a90082a039b)
- Add read timeout
([#&#8203;1518](https://github.com/sindresorhus/got/issues/1518))
[`e943672`](https://github.com/sindresorhus/got/commit/e9436720fcb32b77d39d5477b420b18083e41c02)
*(blocked by
[https://github.com/nodejs/node/issues/35923](https://github.com/nodejs/node/issues/35923))*
- Improve the pagination API
([#&#8203;1644](https://github.com/sindresorhus/got/issues/1644))
[`2675046`](https://github.com/sindresorhus/got/commit/2675046a83c7f03613f553a8da2912d491be900d)
- Change the stackAllItems option to be false by default
([#&#8203;1645](https://github.com/sindresorhus/got/issues/1645))
[`1120370`](https://github.com/sindresorhus/got/commit/1120370e05fd8d9e768677d8474d0c82cf91a6a6)
- Throw when afterResponse hook returns an invalid value
[`4f21eb3`](https://github.com/sindresorhus/got/commit/4f21eb3db705c90797ef8ee1503704f78fea3c1b)
- Add `retry.backoffLimit` option
[`41c4136`](https://github.com/sindresorhus/got/commit/41c4136632b9391adb3ac53332b312089bc4dc16)
- Add `noise` retry option
[`e830077`](https://github.com/sindresorhus/got/commit/e83007704670b5f567ca338c156441f6c569ecb5)
- Enable more HTTPS options
[`83575d5`](https://github.com/sindresorhus/got/commit/83575d590a119027d319bd9208681973087564a9)
[`fe723a0`](https://github.com/sindresorhus/got/commit/fe723a0477dc02785a0b477e3d5f85d0233e5b84)
(thanks [@&#8203;Giotino](https://github.com/Giotino))
- Define `error.code`
[`f27e8d3`](https://github.com/sindresorhus/got/commit/f27e8d331627074e76e4a9ec85a2c8d0a0625e5f)
- Set `options.url` even if some options are invalid
[`8d6a680`](https://github.com/sindresorhus/got/commit/8d6a6807883323a83ea5f126ca56b55d9ce5f299)
- Improve memory usage when merging options
[`2db5ec5`](https://github.com/sindresorhus/got/commit/2db5ec5d366efbbf9e0838eabfa6be774a0518a0)
- Support async generators as body
[`854430f`](https://github.com/sindresorhus/got/commit/854430f01350811fe8a0ccf20cd820aabfbd3926)
[`3df52f3`](https://github.com/sindresorhus/got/commit/3df52f38edbadb45158c37d499817bc5486989c6)
- Add missing `once` types for Stream API
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- New error type: `RetryError` which always triggers a new retry when
thrown
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- `error.options` is now enumerable
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- `defaults.handlers` don't need a default handler now
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Add a parser for the `Link` header
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- General code improvements
[`a5dd9aa`](https://github.com/sindresorhus/got/commit/a5dd9aa37e7891b2620798560799c7f8bd380877)

##### Breaking changes

##### Improved option normalization

- Got exports an `Option` class that is specifically designed to parse
and validate Got options.
It is made of setters and getters that provide fast normalization and
more consistent behavior.

When passing an option does not exist, Got will throw an error. In order
to retrieve the options before the error, use `error.options`.

```js
import got from 'got';

try {
    await got('https://httpbin.org/anything', {
        thisOptionDoesNotExist: true
    });
} catch (error) {
    console.error(error);
    console.error(error.options.url.href);
    // Unexpected option: thisOptionDoesNotExist
    // https://httpbin.org/anything
}
```

- The `init` hook now accepts a second argument: `self`, which points to
an `Options` instance.

In order to define your own options, you have to move them to
`options.context` in an [`init`
hook](https://github.com/sindresorhus/got/blob/main/documentation/lets-make-a-plugin.md#authorization)
or store them in `options.context` directly.

- The `init` hooks are ran only when passing an options object
explicitly.

```diff
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooks
```

- [`options.merge()`](2-options.md) replaced `got.mergeOptions` and
`Request.normalizeArguments`

```diff
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
```

This fixes issues like
[#&#8203;1450](https://github.com/sindresorhus/got/issues/1450)

- Legacy `Url` instances are not supported anymore. You need to use
WHATWG URL instead.

```diff
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);
```

-   No implicit timeout declaration.

```diff
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})
```

-   No implicit retry declaration.

```diff
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})
```

-   `dnsLookupIpVersion` is now a number (4 or 6) or undefined

```diff
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
```

-   `redirectUrls` and `requestUrl` now give URL instances

```diff
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()
```

```diff
- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()
```

-   Renamed `request.aborted` to `request.isAborted`

```diff
- request.aborted
+ request.isAborted
```

Reason: consistency with `options.isStream`.

-   Renamed the `lookup` option to `dnsLookup`

```diff
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
```

- The `beforeRetry` hook now accepts only two arguments: `error` and
`retryCount`

```diff
await got('https://example.com', {
    hooks: {
        beforeRetry: [
-            (options, error, retryCount) => {
-                console.log(options, error, retryCount);
-            }
+            (error, retryCount) => {
+                console.log(error.options, error, retryCount);
+            }
        ]
    }
})
```

The `options` argument has been removed, however it's still accessible
via `error.options`. All modifications on `error.options` will be
reflected in the next requests (no behavior change, same as with Got
11).

- The `beforeRedirect` hook's first argument (options) is now a cloned
instance of the Request options.

This was done to make retrieving the original options possible:
`plainResponse.request.options`.

```diff
await got('http://szmarczak.com', {
    hooks: {
        beforeRedirect: [
            (options, response) => {
-                console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+                console.log(options === response.request.options); //=> false [we can access the original options now]
            }
        ]
    }
})
```

- The `redirect` event now takes two arguments in this order:
`updatedOptions` and `plainResponse`.

```diff
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
```

Reason: consistency with the `beforeRedirect` hook.

- The `socketPath` option has been removed. Use the `unix:` protocol
instead.

```diff
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
```

- The `retryWithMergedOptions` function in an `afterResponse` hook no
longer returns a `Promise`.

It now throws `RetryError`, so this should this should be the last
function being executed.
This was done to allow `beforeRetry` hooks getting called.

-   You can no longer set `options.agent` to `false`.
To do so, you need to define all the `options.agent` properties: `http`,
`https` and `http2`.

```diff
await got('https://example.com', {
-    agent: false
+    agent: {
+        http: false,
+        https: false,
+        http2: false
+    }
})
```

- When passing a `url` option when paginating, it now needs to be an
absolute URL - the `prefixUrl` option is always reset from now on. The
same when retrying in an `afterResponse` hook.

```diff
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
```

There was confusion around the `prefixUrl` option. It was
counterintuitive if used with the Pagination API. For example, it worked
fine if the server replied with a relative URL, but if it was an
absolute URL then the `prefixUrl` would end up duplicated. In order to
fix this, Got now requires an absolute URL - no `prefixUrl` will be
applied.

- `got.extend(…)` will throw when passing some options that don't accept
undefined - undefined no longer retains the old value, as setting
undefined explicitly may reset the option

##### Documentation

We have redesigned the documentation so it's easier to navigate and find
exactly what you are looking for. We hope you like it ❤️

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - "after 8:00 before 23:00 every weekday except on Friday" in
timezone UTC.

🚦 **Automerge**: Enabled.

♻ **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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/valora-inc/plugin-poc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNy4xIiwidXBkYXRlZEluVmVyIjoiMzUuMTcuMSJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
gastonfournier referenced this issue in Unleash/unleash Jul 5, 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 |
|---|---|---|---|---|---|
| [got](https://github.com/sindresorhus/got) | [`^11.8.5` ->
`^13.0.0`](https://renovatebot.com/diffs/npm/got/11.8.6/13.0.0) |
[![age](https://badges.renovateapi.com/packages/npm/got/13.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/got/13.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/got/13.0.0/compatibility-slim/11.8.6)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/got/13.0.0/confidence-slim/11.8.6)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>sindresorhus/got</summary>

###
[`v13.0.0`](https://github.com/sindresorhus/got/releases/tag/v13.0.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.6.1...v13.0.0)

As a reminder, Got continues to require ESM. For TypeScript users, this
includes having [`"module": "node16", "moduleResolution": "node16"` in
your
tsconfig](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm).

##### Breaking

- Require Node.js 16
[`52a1063`](https://github.com/sindresorhus/got/commit/52a1063)
- Change the
[`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets)
option to be `false` by default
[`852c312`](https://github.com/sindresorhus/got/commit/852c312)
    -   Most users don't need it.

##### Improvements

- Allow specifying `undefined` for options
([#&#8203;2258](https://github.com/sindresorhus/got/issues/2258))
[`1cefe8b`](https://github.com/sindresorhus/got/commit/1cefe8b)

###
[`v12.6.1`](https://github.com/sindresorhus/got/releases/tag/v12.6.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.6.0...v12.6.1)

- Fix `get-stream` import statement
([#&#8203;2266](https://github.com/sindresorhus/got/issues/2266))
[`67d5039`](https://github.com/sindresorhus/got/commit/67d5039)

###
[`v12.6.0`](https://github.com/sindresorhus/got/releases/tag/v12.6.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.3...v12.6.0)

- Update dependencies
[`88c88fb`](https://github.com/sindresorhus/got/commit/88c88fb)
[`979272e`](https://github.com/sindresorhus/got/commit/979272e)
- Loosen URL validation strictness
([#&#8203;2200](https://github.com/sindresorhus/got/issues/2200))
[`0ca0b7f`](https://github.com/sindresorhus/got/commit/0ca0b7f)

###
[`v12.5.3`](https://github.com/sindresorhus/got/releases/tag/v12.5.3)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.2...v12.5.3)

- Fix abort event listeners not always being cleaned up
([#&#8203;2162](https://github.com/sindresorhus/got/issues/2162))
[`3cc40b5`](https://github.com/sindresorhus/got/commit/3cc40b5)

###
[`v12.5.2`](https://github.com/sindresorhus/got/releases/tag/v12.5.2)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.1...v12.5.2)

- Improve TypeScript 4.9 compatibility
([#&#8203;2163](https://github.com/sindresorhus/got/issues/2163))
[`39f83b6`](https://github.com/sindresorhus/got/commit/39f83b6)

###
[`v12.5.1`](https://github.com/sindresorhus/got/releases/tag/v12.5.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.5.0...v12.5.1)

- Fix compatibility with TypeScript and ESM
[`3b3ea67`](https://github.com/sindresorhus/got/commit/3b3ea67)
- Fix request body not being properly cached
([#&#8203;2150](https://github.com/sindresorhus/got/issues/2150))
[`3e9d3af`](https://github.com/sindresorhus/got/commit/3e9d3af)

###
[`v12.5.0`](https://github.com/sindresorhus/got/releases/tag/v12.5.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.4.1...v12.5.0)

- Disable method rewriting on 307 and 308 status codes
([#&#8203;2145](https://github.com/sindresorhus/got/issues/2145))
[`e049e94`](https://github.com/sindresorhus/got/commit/e049e94)
- Upgrade dependencies
[`8630815`](https://github.com/sindresorhus/got/commit/8630815)
[`f0ac0b3`](https://github.com/sindresorhus/got/commit/f0ac0b3)
[`4c3762a`](https://github.com/sindresorhus/got/commit/4c3762a)

###
[`v12.4.1`](https://github.com/sindresorhus/got/releases/tag/v12.4.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.4.0...v12.4.1)

##### Fixes

- Fix `options.context` being not extensible
[`b671480`](https://github.com/sindresorhus/got/commit/b671480715dbbff908e9a385f5e714570c663cd7)
- Don't emit `uploadProgress` after promise cancelation
[`693de21`](https://github.com/sindresorhus/got/commit/693de217b030816f574d6e4cb505ee2e77b21c29)

###
[`v12.4.0`](https://github.com/sindresorhus/got/releases/tag/v12.4.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.3.1...v12.4.0)

##### Improvements

- Support FormData without known length
([#&#8203;2120](https://github.com/sindresorhus/got/issues/2120))
[`850773c`](https://github.com/sindresorhus/got/commit/850773c)

##### Fixes

- Don't call `beforeError` hooks with `HTTPError` if the
`throwHttpErrors` option is `false`
([#&#8203;2104](https://github.com/sindresorhus/got/issues/2104))
[`3927348`](https://github.com/sindresorhus/got/commit/3927348)

###
[`v12.3.1`](https://github.com/sindresorhus/got/releases/tag/v12.3.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.3.0...v12.3.1)

- Don't freeze signal when freezing Options
([#&#8203;2100](https://github.com/sindresorhus/got/issues/2100))
[`43b1467`](https://github.com/sindresorhus/got/commit/43b1467)

###
[`v12.3.0`](https://github.com/sindresorhus/got/releases/tag/v12.3.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.2.0...v12.3.0)

- Add `.off()` method for events
([#&#8203;2092](https://github.com/sindresorhus/got/issues/2092))
[`88056be`](https://github.com/sindresorhus/got/commit/88056be)

###
[`v12.2.0`](https://github.com/sindresorhus/got/releases/tag/v12.2.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.1.0...v12.2.0)

- [Support
`AbortController`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#signal)
([#&#8203;2020](https://github.com/sindresorhus/got/issues/2020))
[`6a6d2a9`](https://github.com/sindresorhus/got/commit/6a6d2a9)
- Add
[`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets)
option
([#&#8203;2062](https://github.com/sindresorhus/got/issues/2062))
[`461b3d4`](https://github.com/sindresorhus/got/commit/461b3d4)

###
[`v12.1.0`](https://github.com/sindresorhus/got/releases/tag/v12.1.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.4...v12.1.0)

##### Improvements

- Add `response.ok`
([#&#8203;2043](https://github.com/sindresorhus/got/issues/2043))
[`22d58fb`](https://github.com/sindresorhus/got/commit/22d58fb)
- This is only useful if you have [`{throwHttpErrors:
false}`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#throwhttperrors)

##### Fixes

- Do not redirect to UNIX sockets
([#&#8203;2047](https://github.com/sindresorhus/got/issues/2047))
[`861ccd9`](https://github.com/sindresorhus/got/commit/861ccd9)
- [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)
- [Also back ported to
v11](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

###
[`v12.0.4`](https://github.com/sindresorhus/got/releases/tag/v12.0.4)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.3...v12.0.4)

- Remove stream lock - unreliable since Node 17.3.0
[`bb8eca9`](https://github.com/sindresorhus/got/commit/bb8eca924c338ca12d5b90d6a26aa28dbddb42ee)

###
[`v12.0.3`](https://github.com/sindresorhus/got/releases/tag/v12.0.3)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.2...v12.0.3)

- Allow more types in the `json` option
([#&#8203;2015](https://github.com/sindresorhus/got/issues/2015))
[`eb045bf`](https://github.com/sindresorhus/got/commit/eb045bf)

###
[`v12.0.2`](https://github.com/sindresorhus/got/releases/tag/v12.0.2)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.1...v12.0.2)

- Fix `encoding` option with `{responseType: 'json'}`
([#&#8203;1996](https://github.com/sindresorhus/got/issues/1996))
[`0703318`](https://github.com/sindresorhus/got/commit/0703318)

###
[`v12.0.1`](https://github.com/sindresorhus/got/releases/tag/v12.0.1)

[Compare
Source](https://github.com/sindresorhus/got/compare/v12.0.0...v12.0.1)

- Fix `nock` compatibility
([#&#8203;1959](https://github.com/sindresorhus/got/issues/1959))
[`bf39d2c`](https://github.com/sindresorhus/got/commit/bf39d2c)
- Fix missing export of `Request` TypeScript type
([#&#8203;1940](https://github.com/sindresorhus/got/issues/1940))
[`0f9f2b8`](https://github.com/sindresorhus/got/commit/0f9f2b8)

###
[`v12.0.0`](https://github.com/sindresorhus/got/releases/tag/v12.0.0)

[Compare
Source](https://github.com/sindresorhus/got/compare/v11.8.6...v12.0.0)

##### Introducing Got v12.0.0 🎉

Long time no see! The latest Got version (v11.8.2) was released just in
February ❄️
We have been working hard on squashing bugs and improving overall
experience.

If you find Got useful, you might want to [sponsor the Got
maintainers](https://github.com/sindresorhus/got?sponsor=1).

##### This package is now pure ESM

**Please [read
this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).**
Also see
[https://github.com/sindresorhus/got/issues/1789](https://github.com/sindresorhus/got/issues/1789).

- **Please don't open issues about `[ERR_REQUIRE_ESM]` and `Must use
import to load ES Module` errors.** This is a problem with your setup,
not Got.
- Please don't open issues about using Got with Jest. Jest does not
fully support ESM.
- Pretty much any problem with loading this package is a problem with
your bundler, test framework, etc, not Got.
- If you use TypeScript, you will want to stay on Got v11 until
TypeScript 4.6 is out.
[Why.](https://github.com/microsoft/TypeScript/issues/46452)
- If you use a bundler, make sure it supports ESM and that you have
correctly configured it for ESM.
- The Got issue tracker is not a support channel for your favorite
build/bundler tool.

##### Required Node.js >=14

While working with streams, we encountered more Node.js bugs that needed
workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code
would get more messy.
We strongly recommend that you update Node.js to **v14 LTS**.

##### HTTP/2 support

Every Node.js release, the native `http2` module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we
decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it
on via the `http2` option.

To run HTTP/2 requests, it is required to use Node.js **v15.10** or
above.

##### Bug fixes

Woah, we possibly couldn't make a release if we didn't fix some bugs!

- Do not throw on custom stack traces
([#&#8203;1491](https://github.com/sindresorhus/got/issues/1491))
[`49c16ee`](https://github.com/sindresorhus/got/commit/49c16ee54fb19ea7aa77e24ac8c2b602f0aad265)
- Remove automatic `content-length` on ReadStream
([#&#8203;1510](https://github.com/sindresorhus/got/issues/1510))
[`472b8ef`](https://github.com/sindresorhus/got/commit/472b8ef9d9fc7713b740981a8b1103a7a9111b26)
- Fix promise shortcuts in case of error status code
([#&#8203;1543](https://github.com/sindresorhus/got/issues/1543))
[`ff918fb`](https://github.com/sindresorhus/got/commit/ff918fb6dedb6d8b23421497ec890d43f45121b7)
[`1107cc6`](https://github.com/sindresorhus/got/commit/1107cc625e4cc469276483316c48896a21f6251a)
- Invert the `methodRewriting` option
[`51d88a0`](https://github.com/sindresorhus/got/commit/51d88a0efed56760d116c5b911cea71e3265c787)
- Fix `url` not being reused on retry in rare case
([#&#8203;1487](https://github.com/sindresorhus/got/issues/1487))
[`462bc63`](https://github.com/sindresorhus/got/commit/462bc630015064fa4ad4358cf28d24f95e1c958b)
- Fix hanging promise on HTTP/2 timeout
([#&#8203;1492](https://github.com/sindresorhus/got/issues/1492))
[`a59fac4`](https://github.com/sindresorhus/got/commit/a59fac415ac013a48b1d514837628a5cf81d6878)
- Prevent uncaught ParseErrors on initial successful response
([#&#8203;1527](https://github.com/sindresorhus/got/issues/1527))
[`77df9c3`](https://github.com/sindresorhus/got/commit/77df9c33db5ba3126f54317171e1cfcfceefc3d5)
- Throw an error when retrying with consumed body
([#&#8203;1507](https://github.com/sindresorhus/got/issues/1507))
[`62305d7`](https://github.com/sindresorhus/got/commit/62305d77d3428b5c714d21b4bbee68cc75b5f787)
- Fix a Node.js 16 bug that hangs Got streams
[`06a2d3d`](https://github.com/sindresorhus/got/commit/06a2d3d7d8d4fcc6898b6364d1a18ca1d407092b)
- Fix default pagination handling for empty Link header
([#&#8203;1768](https://github.com/sindresorhus/got/issues/1768))
[`1e1e506`](https://github.com/sindresorhus/got/commit/1e1e50647e93d038a4cc6a9bbbfbf61165d8fd39)
- Fix incorrect `response.complete` when using cache
[`9e15d88`](https://github.com/sindresorhus/got/commit/9e15d887da3b065940bbc8ca38f9c748a0bbc75e)
- Fix `Cannot call end` error when `request` returns a `Writable`
[`226cc39`](https://github.com/sindresorhus/got/commit/226cc3995f6e16938163ebde24d8762e7dcd15e2)
- Fix Request options not being reused on retry
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Fix types being not compatible with CommonJS
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Fix `got.paginate does not call init hooks`
([#&#8203;1574](https://github.com/sindresorhus/got/issues/1574))
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Generate a new object when passing options to the native `https`
module
([#&#8203;1567](https://github.com/sindresorhus/got/issues/1567))
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Remove stream reuse check
([#&#8203;1803](https://github.com/sindresorhus/got/issues/1803))
[`9ecc5ee`](https://github.com/sindresorhus/got/commit/9ecc5ee76f77aafd5100520d9d8789c491c8fb24)
- Fix merging `searchParams`
([#&#8203;1814](https://github.com/sindresorhus/got/issues/1814))
[`1018c20`](https://github.com/sindresorhus/got/commit/1018c2029eea1f5b75b5120265996f1c0b3c12ae)
[`732e9bd`](https://github.com/sindresorhus/got/commit/732e9bd9406ba1c3dd64b445264e891f33fc0254)
- Fix unhandled exception when lookup returns invalid IP early
([#&#8203;1737](https://github.com/sindresorhus/got/issues/1737))
[`2453e5e`](https://github.com/sindresorhus/got/commit/2453e5e4213fe036a0108de3e4db414dcf2b4c30)
- Fix relative URLs when paginating
[`439fb82`](https://github.com/sindresorhus/got/commit/439fb82d2a07cece417a18c47e37cfdeaaf38db7)
- Require url to be an instance of URL when paginating
([#&#8203;1818](https://github.com/sindresorhus/got/issues/1818))
[`eda69ff`](https://github.com/sindresorhus/got/commit/eda69ff924a621e499d31cbc590993a32ddb48d3)
- Fix `username` and `password` encoding in URL
([#&#8203;1169](https://github.com/sindresorhus/got/issues/1169)
[#&#8203;1317](https://github.com/sindresorhus/got/issues/1317))
[`d65d0ca`](https://github.com/sindresorhus/got/commit/d65d0caf627e8d1f5367db34d7d9b55d332c1efb)
- Clone raw options
[`1c4cefc`](https://github.com/sindresorhus/got/commit/1c4cefc9b49f891712c3758f853d8c6214a1c904)
- Fix invalid `afterResponse` return check
[`cbc8902`](https://github.com/sindresorhus/got/commit/cbc8902)
- Fix `https.alpnProtocols` not having an effect
[`e1099fb`](https://github.com/sindresorhus/got/commit/e1099fb)

##### Improvements

- Make the `context` option mergeable
([#&#8203;1459](https://github.com/sindresorhus/got/issues/1459))
[`2b8ed1f`](https://github.com/sindresorhus/got/commit/2b8ed1f5a185f30603d24e2ceb8181782de3bc5a)
- Add generic argument to AfterResponseHook TypeScript type
([#&#8203;1589](https://github.com/sindresorhus/got/issues/1589))
[`6fc04a9`](https://github.com/sindresorhus/got/commit/6fc04a9b92f07b07b9fba010f2231a90082a039b)
- Add read timeout
([#&#8203;1518](https://github.com/sindresorhus/got/issues/1518))
[`e943672`](https://github.com/sindresorhus/got/commit/e9436720fcb32b77d39d5477b420b18083e41c02)
*(blocked by
[https://github.com/nodejs/node/issues/35923](https://github.com/nodejs/node/issues/35923))*
- Improve the pagination API
([#&#8203;1644](https://github.com/sindresorhus/got/issues/1644))
[`2675046`](https://github.com/sindresorhus/got/commit/2675046a83c7f03613f553a8da2912d491be900d)
- Change the stackAllItems option to be false by default
([#&#8203;1645](https://github.com/sindresorhus/got/issues/1645))
[`1120370`](https://github.com/sindresorhus/got/commit/1120370e05fd8d9e768677d8474d0c82cf91a6a6)
- Throw when afterResponse hook returns an invalid value
[`4f21eb3`](https://github.com/sindresorhus/got/commit/4f21eb3db705c90797ef8ee1503704f78fea3c1b)
- Add `retry.backoffLimit` option
[`41c4136`](https://github.com/sindresorhus/got/commit/41c4136632b9391adb3ac53332b312089bc4dc16)
- Add `noise` retry option
[`e830077`](https://github.com/sindresorhus/got/commit/e83007704670b5f567ca338c156441f6c569ecb5)
- Enable more HTTPS options
[`83575d5`](https://github.com/sindresorhus/got/commit/83575d590a119027d319bd9208681973087564a9)
[`fe723a0`](https://github.com/sindresorhus/got/commit/fe723a0477dc02785a0b477e3d5f85d0233e5b84)
(thanks [@&#8203;Giotino](https://github.com/Giotino))
- Define `error.code`
[`f27e8d3`](https://github.com/sindresorhus/got/commit/f27e8d331627074e76e4a9ec85a2c8d0a0625e5f)
- Set `options.url` even if some options are invalid
[`8d6a680`](https://github.com/sindresorhus/got/commit/8d6a6807883323a83ea5f126ca56b55d9ce5f299)
- Improve memory usage when merging options
[`2db5ec5`](https://github.com/sindresorhus/got/commit/2db5ec5d366efbbf9e0838eabfa6be774a0518a0)
- Support async generators as body
[`854430f`](https://github.com/sindresorhus/got/commit/854430f01350811fe8a0ccf20cd820aabfbd3926)
[`3df52f3`](https://github.com/sindresorhus/got/commit/3df52f38edbadb45158c37d499817bc5486989c6)
- Add missing `once` types for Stream API
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- New error type: `RetryError` which always triggers a new retry when
thrown
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- `error.options` is now enumerable
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- `defaults.handlers` don't need a default handler now
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- Add a parser for the `Link` header
[`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
- General code improvements
[`a5dd9aa`](https://github.com/sindresorhus/got/commit/a5dd9aa37e7891b2620798560799c7f8bd380877)

##### Breaking changes

##### Improved option normalization

- Got exports an `Option` class that is specifically designed to parse
and validate Got options.
It is made of setters and getters that provide fast normalization and
more consistent behavior.

When passing an option does not exist, Got will throw an error. In order
to retrieve the options before the error, use `error.options`.

```js
import got from 'got';

try {
    await got('https://httpbin.org/anything', {
        thisOptionDoesNotExist: true
    });
} catch (error) {
    console.error(error);
    console.error(error.options.url.href);
    // Unexpected option: thisOptionDoesNotExist
    // https://httpbin.org/anything
}
```

- The `init` hook now accepts a second argument: `self`, which points to
an `Options` instance.

In order to define your own options, you have to move them to
`options.context` in an [`init`
hook](https://github.com/sindresorhus/got/blob/main/documentation/lets-make-a-plugin.md#authorization)
or store them in `options.context` directly.

- The `init` hooks are ran only when passing an options object
explicitly.

```diff
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooks
```

- [`options.merge()`](2-options.md) replaced `got.mergeOptions` and
`Request.normalizeArguments`

```diff
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
```

This fixes issues like
[#&#8203;1450](https://github.com/sindresorhus/got/issues/1450)

- Legacy `Url` instances are not supported anymore. You need to use
WHATWG URL instead.

```diff
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);
```

-   No implicit timeout declaration.

```diff
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})
```

-   No implicit retry declaration.

```diff
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})
```

-   `dnsLookupIpVersion` is now a number (4 or 6) or undefined

```diff
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
```

-   `redirectUrls` and `requestUrl` now give URL instances

```diff
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()
```

```diff
- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()
```

-   Renamed `request.aborted` to `request.isAborted`

```diff
- request.aborted
+ request.isAborted
```

Reason: consistency with `options.isStream`.

-   Renamed the `lookup` option to `dnsLookup`

```diff
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
```

- The `beforeRetry` hook now accepts only two arguments: `error` and
`retryCount`

```diff
await got('https://example.com', {
    hooks: {
        beforeRetry: [
-            (options, error, retryCount) => {
-                console.log(options, error, retryCount);
-            }
+            (error, retryCount) => {
+                console.log(error.options, error, retryCount);
+            }
        ]
    }
})
```

The `options` argument has been removed, however it's still accessible
via `error.options`. All modifications on `error.options` will be
reflected in the next requests (no behavior change, same as with Got
11).

- The `beforeRedirect` hook's first argument (options) is now a cloned
instance of the Request options.

This was done to make retrieving the original options possible:
`plainResponse.request.options`.

```diff
await got('http://szmarczak.com', {
    hooks: {
        beforeRedirect: [
            (options, response) => {
-                console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+                console.log(options === response.request.options); //=> false [we can access the original options now]
            }
        ]
    }
})
```

- The `redirect` event now takes two arguments in this order:
`updatedOptions` and `plainResponse`.

```diff
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
```

Reason: consistency with the `beforeRedirect` hook.

- The `socketPath` option has been removed. Use the `unix:` protocol
instead.

```diff
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
```

- The `retryWithMergedOptions` function in an `afterResponse` hook no
longer returns a `Promise`.

It now throws `RetryError`, so this should this should be the last
function being executed.
This was done to allow `beforeRetry` hooks getting called.

-   You can no longer set `options.agent` to `false`.
To do so, you need to define all the `options.agent` properties: `http`,
`https` and `http2`.

```diff
await got('https://example.com', {
-    agent: false
+    agent: {
+        http: false,
+        https: false,
+        http2: false
+    }
})
```

- When passing a `url` option when paginating, it now needs to be an
absolute URL - the `prefixUrl` option is always reset from now on. The
same when retrying in an `afterResponse` hook.

```diff
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
```

There was confusion around the `prefixUrl` option. It was
counterintuitive if used with the Pagination API. For example, it worked
fine if the server replied with a relative URL, but if it was an
absolute URL then the `prefixUrl` would end up duplicated. In order to
fix this, Got now requires an absolute URL - no `prefixUrl` will be
applied.

- `got.extend(…)` will throw when passing some options that don't accept
undefined - undefined no longer retains the old value, as setting
undefined explicitly may reset the option

##### Documentation

We have redesigned the documentation so it's easier to navigate and find
exactly what you are looking for. We hope you like it ❤️

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Vylpes pushed a commit to Vylpes/random-bunny that referenced this issue Sep 5, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [got](https://github.com/sindresorhus/got) | resolutions | major | [`^11.8.5` -> `^13.0.0`](https://renovatebot.com/diffs/npm/got/11.8.6/13.0.0) |

---

### Release Notes

<details>
<summary>sindresorhus/got</summary>

### [`v13.0.0`](https://github.com/sindresorhus/got/releases/tag/v13.0.0)

[Compare Source](sindresorhus/got@v12.6.1...v13.0.0)

As a reminder, Got continues to require ESM. For TypeScript users, this includes having [`"module": "node16", "moduleResolution": "node16"` in your tsconfig](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm).

##### Breaking

-   Require Node.js 16  [`52a1063`](sindresorhus/got@52a1063)
-   Change the [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option to be `false` by default  [`852c312`](sindresorhus/got@852c312)
    -   Most users don't need it.

##### Improvements

-   Allow specifying `undefined` for options ([#&#8203;2258](sindresorhus/got#2258))  [`1cefe8b`](sindresorhus/got@1cefe8b)

### [`v12.6.1`](https://github.com/sindresorhus/got/releases/tag/v12.6.1)

[Compare Source](sindresorhus/got@v12.6.0...v12.6.1)

-   Fix `get-stream` import statement ([#&#8203;2266](sindresorhus/got#2266))  [`67d5039`](sindresorhus/got@67d5039)

### [`v12.6.0`](https://github.com/sindresorhus/got/releases/tag/v12.6.0)

[Compare Source](sindresorhus/got@v12.5.3...v12.6.0)

-   Update dependencies  [`88c88fb`](sindresorhus/got@88c88fb) [`979272e`](sindresorhus/got@979272e)
-   Loosen URL validation strictness ([#&#8203;2200](sindresorhus/got#2200))  [`0ca0b7f`](sindresorhus/got@0ca0b7f)

### [`v12.5.3`](https://github.com/sindresorhus/got/releases/tag/v12.5.3)

[Compare Source](sindresorhus/got@v12.5.2...v12.5.3)

-   Fix abort event listeners not always being cleaned up ([#&#8203;2162](sindresorhus/got#2162))  [`3cc40b5`](sindresorhus/got@3cc40b5)

### [`v12.5.2`](https://github.com/sindresorhus/got/releases/tag/v12.5.2)

[Compare Source](sindresorhus/got@v12.5.1...v12.5.2)

-   Improve TypeScript 4.9 compatibility ([#&#8203;2163](sindresorhus/got#2163))  [`39f83b6`](sindresorhus/got@39f83b6)

### [`v12.5.1`](https://github.com/sindresorhus/got/releases/tag/v12.5.1)

[Compare Source](sindresorhus/got@v12.5.0...v12.5.1)

-   Fix compatibility with TypeScript and ESM  [`3b3ea67`](sindresorhus/got@3b3ea67)
-   Fix request body not being properly cached ([#&#8203;2150](sindresorhus/got#2150))  [`3e9d3af`](sindresorhus/got@3e9d3af)

### [`v12.5.0`](https://github.com/sindresorhus/got/releases/tag/v12.5.0)

[Compare Source](sindresorhus/got@v12.4.1...v12.5.0)

-   Disable method rewriting on 307 and 308 status codes ([#&#8203;2145](sindresorhus/got#2145))  [`e049e94`](sindresorhus/got@e049e94)
-   Upgrade dependencies  [`8630815`](sindresorhus/got@8630815) [`f0ac0b3`](sindresorhus/got@f0ac0b3) [`4c3762a`](sindresorhus/got@4c3762a)

### [`v12.4.1`](https://github.com/sindresorhus/got/releases/tag/v12.4.1)

[Compare Source](sindresorhus/got@v12.4.0...v12.4.1)

##### Fixes

-   Fix `options.context` being not extensible [`b671480`](sindresorhus/got@b671480)
-   Don't emit `uploadProgress` after promise cancelation [`693de21`](sindresorhus/got@693de21)

### [`v12.4.0`](https://github.com/sindresorhus/got/releases/tag/v12.4.0)

[Compare Source](sindresorhus/got@v12.3.1...v12.4.0)

##### Improvements

-   Support FormData without known length ([#&#8203;2120](sindresorhus/got#2120))  [`850773c`](sindresorhus/got@850773c)

##### Fixes

-   Don't call `beforeError` hooks with `HTTPError` if the `throwHttpErrors` option is `false` ([#&#8203;2104](sindresorhus/got#2104))  [`3927348`](sindresorhus/got@3927348)

### [`v12.3.1`](https://github.com/sindresorhus/got/releases/tag/v12.3.1)

[Compare Source](sindresorhus/got@v12.3.0...v12.3.1)

-   Don't freeze signal when freezing Options ([#&#8203;2100](sindresorhus/got#2100))  [`43b1467`](sindresorhus/got@43b1467)

### [`v12.3.0`](https://github.com/sindresorhus/got/releases/tag/v12.3.0)

[Compare Source](sindresorhus/got@v12.2.0...v12.3.0)

-   Add `.off()` method for events ([#&#8203;2092](sindresorhus/got#2092))  [`88056be`](sindresorhus/got@88056be)

### [`v12.2.0`](https://github.com/sindresorhus/got/releases/tag/v12.2.0)

[Compare Source](sindresorhus/got@v12.1.0...v12.2.0)

-   [Support `AbortController`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#signal) ([#&#8203;2020](sindresorhus/got#2020))  [`6a6d2a9`](sindresorhus/got@6a6d2a9)
-   Add [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option ([#&#8203;2062](sindresorhus/got#2062))  [`461b3d4`](sindresorhus/got@461b3d4)

### [`v12.1.0`](https://github.com/sindresorhus/got/releases/tag/v12.1.0)

[Compare Source](sindresorhus/got@v12.0.4...v12.1.0)

##### Improvements

-   Add `response.ok` ([#&#8203;2043](sindresorhus/got#2043))  [`22d58fb`](sindresorhus/got@22d58fb)
    -   This is only useful if you have [`{throwHttpErrors: false}`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#throwhttperrors)

##### Fixes

-   Do not redirect to UNIX sockets ([#&#8203;2047](sindresorhus/got#2047))  [`861ccd9`](sindresorhus/got@861ccd9)
    -   [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)
    -   [Also back ported to v11](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

### [`v12.0.4`](https://github.com/sindresorhus/got/releases/tag/v12.0.4)

[Compare Source](sindresorhus/got@v12.0.3...v12.0.4)

-   Remove stream lock - unreliable since Node 17.3.0 [`bb8eca9`](sindresorhus/got@bb8eca9)

### [`v12.0.3`](https://github.com/sindresorhus/got/releases/tag/v12.0.3)

[Compare Source](sindresorhus/got@v12.0.2...v12.0.3)

-   Allow more types in the `json` option ([#&#8203;2015](sindresorhus/got#2015))  [`eb045bf`](sindresorhus/got@eb045bf)

### [`v12.0.2`](https://github.com/sindresorhus/got/releases/tag/v12.0.2)

[Compare Source](sindresorhus/got@v12.0.1...v12.0.2)

-   Fix `encoding` option with `{responseType: 'json'}` ([#&#8203;1996](sindresorhus/got#1996))  [`0703318`](sindresorhus/got@0703318)

### [`v12.0.1`](https://github.com/sindresorhus/got/releases/tag/v12.0.1)

[Compare Source](sindresorhus/got@v12.0.0...v12.0.1)

-   Fix `nock` compatibility ([#&#8203;1959](sindresorhus/got#1959))  [`bf39d2c`](sindresorhus/got@bf39d2c)
-   Fix missing export of `Request` TypeScript type ([#&#8203;1940](sindresorhus/got#1940))  [`0f9f2b8`](sindresorhus/got@0f9f2b8)

### [`v12.0.0`](https://github.com/sindresorhus/got/releases/tag/v12.0.0)

[Compare Source](sindresorhus/got@v11.8.6...v12.0.0)

##### Introducing Got v12.0.0 🎉

Long time no see! The latest Got version (v11.8.2) was released just in February ❄️
We have been working hard on squashing bugs and improving overall experience.

If you find Got useful, you might want to [sponsor the Got maintainers](https://github.com/sindresorhus/got?sponsor=1).

##### This package is now pure ESM

**Please [read this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).** Also see sindresorhus/got#1789.

-   **Please don't open issues about `[ERR_REQUIRE_ESM]` and `Must use import to load ES Module` errors.** This is a problem with your setup, not Got.
-   Please don't open issues about using Got with Jest. Jest does not fully support ESM.
-   Pretty much any problem with loading this package is a problem with your bundler, test framework, etc, not Got.
-   If you use TypeScript, you will want to stay on Got v11 until TypeScript 4.6 is out. [Why.](microsoft/TypeScript#46452)
-   If you use a bundler, make sure it supports ESM and that you have correctly configured it for ESM.
-   The Got issue tracker is not a support channel for your favorite build/bundler tool.

##### Required Node.js >=14

While working with streams, we encountered more Node.js bugs that needed workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code would get more messy.
We strongly recommend that you update Node.js to **v14 LTS**.

##### HTTP/2 support

Every Node.js release, the native `http2` module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it on via the `http2` option.

To run HTTP/2 requests, it is required to use Node.js **v15.10** or above.

##### Bug fixes

Woah, we possibly couldn't make a release if we didn't fix some bugs!

-   Do not throw on custom stack traces ([#&#8203;1491](sindresorhus/got#1491)) [`49c16ee`](sindresorhus/got@49c16ee)
-   Remove automatic `content-length` on ReadStream ([#&#8203;1510](sindresorhus/got#1510)) [`472b8ef`](sindresorhus/got@472b8ef)
-   Fix promise shortcuts in case of error status code ([#&#8203;1543](sindresorhus/got#1543)) [`ff918fb`](sindresorhus/got@ff918fb) [`1107cc6`](sindresorhus/got@1107cc6)
-   Invert the `methodRewriting` option [`51d88a0`](sindresorhus/got@51d88a0)
-   Fix `url` not being reused on retry in rare case ([#&#8203;1487](sindresorhus/got#1487)) [`462bc63`](sindresorhus/got@462bc63)
-   Fix hanging promise on HTTP/2 timeout ([#&#8203;1492](sindresorhus/got#1492)) [`a59fac4`](sindresorhus/got@a59fac4)
-   Prevent uncaught ParseErrors on initial successful response ([#&#8203;1527](sindresorhus/got#1527)) [`77df9c3`](sindresorhus/got@77df9c3)
-   Throw an error when retrying with consumed body ([#&#8203;1507](sindresorhus/got#1507)) [`62305d7`](sindresorhus/got@62305d7)
-   Fix a Node.js 16 bug that hangs Got streams [`06a2d3d`](sindresorhus/got@06a2d3d)
-   Fix default pagination handling for empty Link header ([#&#8203;1768](sindresorhus/got#1768)) [`1e1e506`](sindresorhus/got@1e1e506)
-   Fix incorrect `response.complete` when using cache [`9e15d88`](sindresorhus/got@9e15d88)
-   Fix `Cannot call end` error when `request` returns a `Writable` [`226cc39`](sindresorhus/got@226cc39)
-   Fix Request options not being reused on retry [`3c23eea`](sindresorhus/got@3c23eea)
-   Fix types being not compatible with CommonJS [`3c23eea`](sindresorhus/got@3c23eea)
-   Fix `got.paginate does not call init hooks` ([#&#8203;1574](sindresorhus/got#1574)) [`3c23eea`](sindresorhus/got@3c23eea)
-   Generate a new object when passing options to the native `https` module ([#&#8203;1567](sindresorhus/got#1567)) [`3c23eea`](sindresorhus/got@3c23eea)
-   Remove stream reuse check ([#&#8203;1803](sindresorhus/got#1803)) [`9ecc5ee`](sindresorhus/got@9ecc5ee)
-   Fix merging `searchParams` ([#&#8203;1814](sindresorhus/got#1814)) [`1018c20`](sindresorhus/got@1018c20) [`732e9bd`](sindresorhus/got@732e9bd)
-   Fix unhandled exception when lookup returns invalid IP early ([#&#8203;1737](sindresorhus/got#1737)) [`2453e5e`](sindresorhus/got@2453e5e)
-   Fix relative URLs when paginating [`439fb82`](sindresorhus/got@439fb82)
-   Require url to be an instance of URL when paginating ([#&#8203;1818](sindresorhus/got#1818)) [`eda69ff`](sindresorhus/got@eda69ff)
-   Fix `username` and `password` encoding in URL ([#&#8203;1169](sindresorhus/got#1169) [#&#8203;1317](sindresorhus/got#1317)) [`d65d0ca`](sindresorhus/got@d65d0ca)
-   Clone raw options [`1c4cefc`](sindresorhus/got@1c4cefc)
-   Fix invalid `afterResponse` return check  [`cbc8902`](sindresorhus/got@cbc8902)
-   Fix `https.alpnProtocols` not having an effect  [`e1099fb`](sindresorhus/got@e1099fb)

##### Improvements

-   Make the `context` option mergeable ([#&#8203;1459](sindresorhus/got#1459)) [`2b8ed1f`](sindresorhus/got@2b8ed1f)
-   Add generic argument to AfterResponseHook TypeScript type ([#&#8203;1589](sindresorhus/got#1589)) [`6fc04a9`](sindresorhus/got@6fc04a9)
-   Add read timeout ([#&#8203;1518](sindresorhus/got#1518)) [`e943672`](sindresorhus/got@e943672) *(blocked by nodejs/node#35923
-   Improve the pagination API ([#&#8203;1644](sindresorhus/got#1644)) [`2675046`](sindresorhus/got@2675046)
-   Change the stackAllItems option to be false by default ([#&#8203;1645](sindresorhus/got#1645)) [`1120370`](sindresorhus/got@1120370)
-   Throw when afterResponse hook returns an invalid value [`4f21eb3`](sindresorhus/got@4f21eb3)
-   Add `retry.backoffLimit` option [`41c4136`](sindresorhus/got@41c4136)
-   Add `noise` retry option [`e830077`](sindresorhus/got@e830077)
-   Enable more HTTPS options [`83575d5`](sindresorhus/got@83575d5) [`fe723a0`](sindresorhus/got@fe723a0) (thanks [@&#8203;Giotino](https://github.com/Giotino))
-   Define `error.code` [`f27e8d3`](sindresorhus/got@f27e8d3)
-   Set `options.url` even if some options are invalid [`8d6a680`](sindresorhus/got@8d6a680)
-   Improve memory usage when merging options [`2db5ec5`](sindresorhus/got@2db5ec5)
-   Support async generators as body [`854430f`](sindresorhus/got@854430f) [`3df52f3`](sindresorhus/got@3df52f3)
-   Add missing `once` types for Stream API [`3c23eea`](sindresorhus/got@3c23eea)
-   New error type: `RetryError` which always triggers a new retry when thrown [`3c23eea`](sindresorhus/got@3c23eea)
-   `error.options` is now enumerable [`3c23eea`](sindresorhus/got@3c23eea)
-   `defaults.handlers` don't need a default handler now [`3c23eea`](sindresorhus/got@3c23eea)
-   Add a parser for the `Link` header [`3c23eea`](sindresorhus/got@3c23eea)
-   General code improvements [`a5dd9aa`](sindresorhus/got@a5dd9aa)

##### Breaking changes

##### Improved option normalization

-   Got exports an `Option` class that is specifically designed to parse and validate Got options.
    It is made of setters and getters that provide fast normalization and more consistent behavior.

When passing an option does not exist, Got will throw an error. In order to retrieve the options before the error, use `error.options`.

```js
import got from 'got';

try {
    await got('https://httpbin.org/anything', {
        thisOptionDoesNotExist: true
    });
} catch (error) {
    console.error(error);
    console.error(error.options.url.href);
    // Unexpected option: thisOptionDoesNotExist
    // https://httpbin.org/anything
}
```

-   The `init` hook now accepts a second argument: `self`, which points to an `Options` instance.

In order to define your own options, you have to move them to `options.context` in an [`init` hook](https://github.com/sindresorhus/got/blob/main/documentation/lets-make-a-plugin.md#authorization) or store them in `options.context` directly.

-   The `init` hooks are ran only when passing an options object explicitly.

```diff
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooks
```

-   [`options.merge()`](2-options.md) replaced `got.mergeOptions` and `Request.normalizeArguments`

```diff
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
```

This fixes issues like [#&#8203;1450](sindresorhus/got#1450)

-   Legacy `Url` instances are not supported anymore. You need to use WHATWG URL instead.

```diff
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);
```

-   No implicit timeout declaration.

```diff
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})
```

-   No implicit retry declaration.

```diff
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})
```

-   `dnsLookupIpVersion` is now a number (4 or 6) or undefined

```diff
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
```

-   `redirectUrls` and `requestUrl` now give URL instances

```diff
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()
```

```diff
- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()
```

-   Renamed `request.aborted` to `request.isAborted`

```diff
- request.aborted
+ request.isAborted
```

Reason: consistency with `options.isStream`.

-   Renamed the `lookup` option to `dnsLookup`

```diff
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
```

-   The `beforeRetry` hook now accepts only two arguments: `error` and `retryCount`

```diff
await got('https://example.com', {
    hooks: {
        beforeRetry: [
-            (options, error, retryCount) => {
-                console.log(options, error, retryCount);
-            }
+            (error, retryCount) => {
+                console.log(error.options, error, retryCount);
+            }
        ]
    }
})
```

The `options` argument has been removed, however it's still accessible via `error.options`. All modifications on `error.options` will be reflected in the next requests (no behavior change, same as with Got 11).

-   The `beforeRedirect` hook's first argument (options) is now a cloned instance of the Request options.

This was done to make retrieving the original options possible: `plainResponse.request.options`.

```diff
await got('http://szmarczak.com', {
    hooks: {
        beforeRedirect: [
            (options, response) => {
-                console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+                console.log(options === response.request.options); //=> false [we can access the original options now]
            }
        ]
    }
})
```

-   The `redirect` event now takes two arguments in this order: `updatedOptions` and `plainResponse`.

```diff
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
```

Reason: consistency with the `beforeRedirect` hook.

-   The `socketPath` option has been removed. Use the `unix:` protocol instead.

```diff
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
```

-   The `retryWithMergedOptions` function in an `afterResponse` hook no longer returns a `Promise`.

It now throws `RetryError`, so this should this should be the last function being executed.
This was done to allow `beforeRetry` hooks getting called.

-   You can no longer set `options.agent` to `false`.
    To do so, you need to define all the `options.agent` properties: `http`, `https` and `http2`.

```diff
await got('https://example.com', {
-    agent: false
+    agent: {
+        http: false,
+        https: false,
+        http2: false
+    }
})
```

-   When passing a `url` option when paginating, it now needs to be an absolute URL - the `prefixUrl` option is always reset from now on. The same when retrying in an `afterResponse` hook.

```diff
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
```

There was confusion around the `prefixUrl` option. It was counterintuitive if used with the Pagination API. For example, it worked fine if the server replied with a relative URL, but if it was an absolute URL then the `prefixUrl` would end up duplicated. In order to fix this, Got now requires an absolute URL - no `prefixUrl` will be applied.

-   `got.extend(…)` will throw when passing some options that don't accept undefined - undefined no longer retains the old value, as setting undefined explicitly may reset the option

##### Documentation

We have redesigned the documentation so it's easier to navigate and find exactly what you are looking for. We hope you like it ❤️

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), 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 has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC43NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNzQuMiJ9-->

Reviewed-on: https://gitea.vylpes.xyz/RabbitLabs/random-bunny/pulls/66
Co-authored-by: Renovate Bot <renovate@vylpes.com>
Co-committed-by: Renovate Bot <renovate@vylpes.com>
kodiakhq bot referenced this issue in X-oss-byte/Canary-nextjs Oct 7, 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 |
|---|---|---|---|---|---|
| [got](https://github.com/sindresorhus/got) | [`11.8.6` -> `13.0.0`](https://renovatebot.com/diffs/npm/got/11.8.6/13.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/got/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/got/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/got/11.8.6/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/got/11.8.6/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### ⚠ Dependency Lookup Warnings ⚠

Warnings were logged while processing this repo. Please check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>sindresorhus/got (got)</summary>

### [`v13.0.0`](https://github.com/sindresorhus/got/releases/tag/v13.0.0)

[Compare Source](https://github.com/sindresorhus/got/compare/c405f5407863ef8faca3af397204d6f192a56320...b1d61c173a681755ac23afb2f155f08801c1e7e4)

As a reminder, Got continues to require ESM. For TypeScript users, this includes having [`"module": "node16", "moduleResolution": "node16"` in your tsconfig](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm).

##### Breaking

-   Require Node.js 16  [`52a1063`](https://github.com/sindresorhus/got/commit/52a1063)
-   Change the [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option to be `false` by default  [`852c312`](https://github.com/sindresorhus/got/commit/852c312)
    -   Most users don't need it.

##### Improvements

-   Allow specifying `undefined` for options ([#&#8203;2258](https://github.com/sindresorhus/got/issues/2258))  [`1cefe8b`](https://github.com/sindresorhus/got/commit/1cefe8b)

### [`v12.6.1`](https://github.com/sindresorhus/got/releases/tag/v12.6.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.6.0...v12.6.1)

-   Fix `get-stream` import statement ([#&#8203;2266](https://github.com/sindresorhus/got/issues/2266))  [`67d5039`](https://github.com/sindresorhus/got/commit/67d5039)

### [`v12.6.0`](https://github.com/sindresorhus/got/releases/tag/v12.6.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.3...v12.6.0)

-   Update dependencies  [`88c88fb`](https://github.com/sindresorhus/got/commit/88c88fb) [`979272e`](https://github.com/sindresorhus/got/commit/979272e)
-   Loosen URL validation strictness ([#&#8203;2200](https://github.com/sindresorhus/got/issues/2200))  [`0ca0b7f`](https://github.com/sindresorhus/got/commit/0ca0b7f)

### [`v12.5.3`](https://github.com/sindresorhus/got/releases/tag/v12.5.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.2...v12.5.3)

-   Fix abort event listeners not always being cleaned up ([#&#8203;2162](https://github.com/sindresorhus/got/issues/2162))  [`3cc40b5`](https://github.com/sindresorhus/got/commit/3cc40b5)

### [`v12.5.2`](https://github.com/sindresorhus/got/releases/tag/v12.5.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.1...v12.5.2)

-   Improve TypeScript 4.9 compatibility ([#&#8203;2163](https://github.com/sindresorhus/got/issues/2163))  [`39f83b6`](https://github.com/sindresorhus/got/commit/39f83b6)

### [`v12.5.1`](https://github.com/sindresorhus/got/releases/tag/v12.5.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.0...v12.5.1)

-   Fix compatibility with TypeScript and ESM  [`3b3ea67`](https://github.com/sindresorhus/got/commit/3b3ea67)
-   Fix request body not being properly cached ([#&#8203;2150](https://github.com/sindresorhus/got/issues/2150))  [`3e9d3af`](https://github.com/sindresorhus/got/commit/3e9d3af)

### [`v12.5.0`](https://github.com/sindresorhus/got/releases/tag/v12.5.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.4.1...v12.5.0)

-   Disable method rewriting on 307 and 308 status codes ([#&#8203;2145](https://github.com/sindresorhus/got/issues/2145))  [`e049e94`](https://github.com/sindresorhus/got/commit/e049e94)
-   Upgrade dependencies  [`8630815`](https://github.com/sindresorhus/got/commit/8630815) [`f0ac0b3`](https://github.com/sindresorhus/got/commit/f0ac0b3) [`4c3762a`](https://github.com/sindresorhus/got/commit/4c3762a)

### [`v12.4.1`](https://github.com/sindresorhus/got/releases/tag/v12.4.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.4.0...v12.4.1)

##### Fixes

-   Fix `options.context` being not extensible [`b671480`](https://github.com/sindresorhus/got/commit/b671480715dbbff908e9a385f5e714570c663cd7)
-   Don't emit `uploadProgress` after promise cancelation [`693de21`](https://github.com/sindresorhus/got/commit/693de217b030816f574d6e4cb505ee2e77b21c29)

### [`v12.4.0`](https://github.com/sindresorhus/got/releases/tag/v12.4.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.3.1...v12.4.0)

##### Improvements

-   Support FormData without known length ([#&#8203;2120](https://github.com/sindresorhus/got/issues/2120))  [`850773c`](https://github.com/sindresorhus/got/commit/850773c)

##### Fixes

-   Don't call `beforeError` hooks with `HTTPError` if the `throwHttpErrors` option is `false` ([#&#8203;2104](https://github.com/sindresorhus/got/issues/2104))  [`3927348`](https://github.com/sindresorhus/got/commit/3927348)

### [`v12.3.1`](https://github.com/sindresorhus/got/releases/tag/v12.3.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.3.0...v12.3.1)

-   Don't freeze signal when freezing Options ([#&#8203;2100](https://github.com/sindresorhus/got/issues/2100))  [`43b1467`](https://github.com/sindresorhus/got/commit/43b1467)

### [`v12.3.0`](https://github.com/sindresorhus/got/releases/tag/v12.3.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.2.0...v12.3.0)

-   Add `.off()` method for events ([#&#8203;2092](https://github.com/sindresorhus/got/issues/2092))  [`88056be`](https://github.com/sindresorhus/got/commit/88056be)

### [`v12.2.0`](https://github.com/sindresorhus/got/releases/tag/v12.2.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.1.0...v12.2.0)

-   [Support `AbortController`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#signal) ([#&#8203;2020](https://github.com/sindresorhus/got/issues/2020))  [`6a6d2a9`](https://github.com/sindresorhus/got/commit/6a6d2a9)
-   Add [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option ([#&#8203;2062](https://github.com/sindresorhus/got/issues/2062))  [`461b3d4`](https://github.com/sindresorhus/got/commit/461b3d4)

### [`v12.1.0`](https://github.com/sindresorhus/got/releases/tag/v12.1.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.4...v12.1.0)

##### Improvements

-   Add `response.ok` ([#&#8203;2043](https://github.com/sindresorhus/got/issues/2043))  [`22d58fb`](https://github.com/sindresorhus/got/commit/22d58fb)
    -   This is only useful if you have [`{throwHttpErrors: false}`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#throwhttperrors)

##### Fixes

-   Do not redirect to UNIX sockets ([#&#8203;2047](https://github.com/sindresorhus/got/issues/2047))  [`861ccd9`](https://github.com/sindresorhus/got/commit/861ccd9)
    -   [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)
    -   [Also back ported to v11](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

### [`v12.0.4`](https://github.com/sindresorhus/got/releases/tag/v12.0.4)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.3...v12.0.4)

-   Remove stream lock - unreliable since Node 17.3.0 [`bb8eca9`](https://github.com/sindresorhus/got/commit/bb8eca924c338ca12d5b90d6a26aa28dbddb42ee)

### [`v12.0.3`](https://github.com/sindresorhus/got/releases/tag/v12.0.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.2...v12.0.3)

-   Allow more types in the `json` option ([#&#8203;2015](https://github.com/sindresorhus/got/issues/2015))  [`eb045bf`](https://github.com/sindresorhus/got/commit/eb045bf)

### [`v12.0.2`](https://github.com/sindresorhus/got/releases/tag/v12.0.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.1...v12.0.2)

-   Fix `encoding` option with `{responseType: 'json'}` ([#&#8203;1996](https://github.com/sindresorhus/got/issues/1996))  [`0703318`](https://github.com/sindresorhus/got/commit/0703318)

### [`v12.0.1`](https://github.com/sindresorhus/got/releases/tag/v12.0.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.0...v12.0.1)

-   Fix `nock` compatibility ([#&#8203;1959](https://github.com/sindresorhus/got/issues/1959))  [`bf39d2c`](https://github.com/sindresorhus/got/commit/bf39d2c)
-   Fix missing export of `Request` TypeScript type ([#&#8203;1940](https://github.com/sindresorhus/got/issues/1940))  [`0f9f2b8`](https://github.com/sindresorhus/got/commit/0f9f2b8)

### [`v12.0.0`](https://github.com/sindresorhus/got/releases/tag/v12.0.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.6...v12.0.0)

##### Introducing Got v12.0.0 🎉

Long time no see! The latest Got version (v11.8.2) was released just in February ❄️
We have been working hard on squashing bugs and improving overall experience.

If you find Got useful, you might want to [sponsor the Got maintainers](https://github.com/sindresorhus/got?sponsor=1).

##### This package is now pure ESM

**Please [read this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).** Also see [https://github.com/sindresorhus/got/issues/1789](https://github.com/sindresorhus/got/issues/1789).

-   **Please don't open issues about `[ERR_REQUIRE_ESM]` and `Must use import to load ES Module` errors.** This is a problem with your setup, not Got.
-   Please don't open issues about using Got with Jest. Jest does not fully support ESM.
-   Pretty much any problem with loading this package is a problem with your bundler, test framework, etc, not Got.
-   If you use TypeScript, you will want to stay on Got v11 until TypeScript 4.6 is out. [Why.](https://github.com/microsoft/TypeScript/issues/46452)
-   If you use a bundler, make sure it supports ESM and that you have correctly configured it for ESM.
-   The Got issue tracker is not a support channel for your favorite build/bundler tool.

##### Required Node.js >=14

While working with streams, we encountered more Node.js bugs that needed workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code would get more messy.
We strongly recommend that you update Node.js to **v14 LTS**.

##### HTTP/2 support

Every Node.js release, the native `http2` module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it on via the `http2` option.

To run HTTP/2 requests, it is required to use Node.js **v15.10** or above.

##### Bug fixes

Woah, we possibly couldn't make a release if we didn't fix some bugs!

-   Do not throw on custom stack traces ([#&#8203;1491](https://github.com/sindresorhus/got/issues/1491)) [`49c16ee`](https://github.com/sindresorhus/got/commit/49c16ee54fb19ea7aa77e24ac8c2b602f0aad265)
-   Remove automatic `content-length` on ReadStream ([#&#8203;1510](https://github.com/sindresorhus/got/issues/1510)) [`472b8ef`](https://github.com/sindresorhus/got/commit/472b8ef9d9fc7713b740981a8b1103a7a9111b26)
-   Fix promise shortcuts in case of error status code ([#&#8203;1543](https://github.com/sindresorhus/got/issues/1543)) [`ff918fb`](https://github.com/sindresorhus/got/commit/ff918fb6dedb6d8b23421497ec890d43f45121b7) [`1107cc6`](https://github.com/sindresorhus/got/commit/1107cc625e4cc469276483316c48896a21f6251a)
-   Invert the `methodRewriting` option [`51d88a0`](https://github.com/sindresorhus/got/commit/51d88a0efed56760d116c5b911cea71e3265c787)
-   Fix `url` not being reused on retry in rare case ([#&#8203;1487](https://github.com/sindresorhus/got/issues/1487)) [`462bc63`](https://github.com/sindresorhus/got/commit/462bc630015064fa4ad4358cf28d24f95e1c958b)
-   Fix hanging promise on HTTP/2 timeout ([#&#8203;1492](https://github.com/sindresorhus/got/issues/1492)) [`a59fac4`](https://github.com/sindresorhus/got/commit/a59fac415ac013a48b1d514837628a5cf81d6878)
-   Prevent uncaught ParseErrors on initial successful response ([#&#8203;1527](https://github.com/sindresorhus/got/issues/1527)) [`77df9c3`](https://github.com/sindresorhus/got/commit/77df9c33db5ba3126f54317171e1cfcfceefc3d5)
-   Throw an error when retrying with consumed body ([#&#8203;1507](https://github.com/sindresorhus/got/issues/1507)) [`62305d7`](https://github.com/sindresorhus/got/commit/62305d77d3428b5c714d21b4bbee68cc75b5f787)
-   Fix a Node.js 16 bug that hangs Got streams [`06a2d3d`](https://github.com/sindresorhus/got/commit/06a2d3d7d8d4fcc6898b6364d1a18ca1d407092b)
-   Fix default pagination handling for empty Link header ([#&#8203;1768](https://github.com/sindresorhus/got/issues/1768)) [`1e1e506`](https://github.com/sindresorhus/got/commit/1e1e50647e93d038a4cc6a9bbbfbf61165d8fd39)
-   Fix incorrect `response.complete` when using cache [`9e15d88`](https://github.com/sindresorhus/got/commit/9e15d887da3b065940bbc8ca38f9c748a0bbc75e)
-   Fix `Cannot call end` error when `request` returns a `Writable` [`226cc39`](https://github.com/sindresorhus/got/commit/226cc3995f6e16938163ebde24d8762e7dcd15e2)
-   Fix Request options not being reused on retry [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Fix types being not compatible with CommonJS [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Fix `got.paginate does not call init hooks` ([#&#8203;1574](https://github.com/sindresorhus/got/issues/1574)) [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Generate a new object when passing options to the native `https` module ([#&#8203;1567](https://github.com/sindresorhus/got/issues/1567)) [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Remove stream reuse check ([#&#8203;1803](https://github.com/sindresorhus/got/issues/1803)) [`9ecc5ee`](https://github.com/sindresorhus/got/commit/9ecc5ee76f77aafd5100520d9d8789c491c8fb24)
-   Fix merging `searchParams` ([#&#8203;1814](https://github.com/sindresorhus/got/issues/1814)) [`1018c20`](https://github.com/sindresorhus/got/commit/1018c2029eea1f5b75b5120265996f1c0b3c12ae) [`732e9bd`](https://github.com/sindresorhus/got/commit/732e9bd9406ba1c3dd64b445264e891f33fc0254)
-   Fix unhandled exception when lookup returns invalid IP early ([#&#8203;1737](https://github.com/sindresorhus/got/issues/1737)) [`2453e5e`](https://github.com/sindresorhus/got/commit/2453e5e4213fe036a0108de3e4db414dcf2b4c30)
-   Fix relative URLs when paginating [`439fb82`](https://github.com/sindresorhus/got/commit/439fb82d2a07cece417a18c47e37cfdeaaf38db7)
-   Require url to be an instance of URL when paginating ([#&#8203;1818](https://github.com/sindresorhus/got/issues/1818)) [`eda69ff`](https://github.com/sindresorhus/got/commit/eda69ff924a621e499d31cbc590993a32ddb48d3)
-   Fix `username` and `password` encoding in URL ([#&#8203;1169](https://github.com/sindresorhus/got/issues/1169) [#&#8203;1317](https://github.com/sindresorhus/got/issues/1317)) [`d65d0ca`](https://github.com/sindresorhus/got/commit/d65d0caf627e8d1f5367db34d7d9b55d332c1efb)
-   Clone raw options [`1c4cefc`](https://github.com/sindresorhus/got/commit/1c4cefc9b49f891712c3758f853d8c6214a1c904)
-   Fix invalid `afterResponse` return check  [`cbc8902`](https://github.com/sindresorhus/got/commit/cbc8902)
-   Fix `https.alpnProtocols` not having an effect  [`e1099fb`](https://github.com/sindresorhus/got/commit/e1099fb)

##### Improvements

-   Make the `context` option mergeable ([#&#8203;1459](https://github.com/sindresorhus/got/issues/1459)) [`2b8ed1f`](https://github.com/sindresorhus/got/commit/2b8ed1f5a185f30603d24e2ceb8181782de3bc5a)
-   Add generic argument to AfterResponseHook TypeScript type ([#&#8203;1589](https://github.com/sindresorhus/got/issues/1589)) [`6fc04a9`](https://github.com/sindresorhus/got/commit/6fc04a9b92f07b07b9fba010f2231a90082a039b)
-   Add read timeout ([#&#8203;1518](https://github.com/sindresorhus/got/issues/1518)) [`e943672`](https://github.com/sindresorhus/got/commit/e9436720fcb32b77d39d5477b420b18083e41c02) *(blocked by [https://github.com/nodejs/node/issues/35923](https://github.com/nodejs/node/issues/35923))*
-   Improve the pagination API ([#&#8203;1644](https://github.com/sindresorhus/got/issues/1644)) [`2675046`](https://github.com/sindresorhus/got/commit/2675046a83c7f03613f553a8da2912d491be900d)
-   Change the stackAllItems option to be false by default ([#&#8203;1645](https://github.com/sindresorhus/got/issues/1645)) [`1120370`](https://github.com/sindresorhus/got/commit/1120370e05fd8d9e768677d8474d0c82cf91a6a6)
-   Throw when afterResponse hook returns an invalid value [`4f21eb3`](https://github.com/sindresorhus/got/commit/4f21eb3db705c90797ef8ee1503704f78fea3c1b)
-   Add `retry.backoffLimit` option [`41c4136`](https://github.com/sindresorhus/got/commit/41c4136632b9391adb3ac53332b312089bc4dc16)
-   Add `noise` retry option [`e830077`](https://github.com/sindresorhus/got/commit/e83007704670b5f567ca338c156441f6c569ecb5)
-   Enable more HTTPS options [`83575d5`](https://github.com/sindresorhus/got/commit/83575d590a119027d319bd9208681973087564a9) [`fe723a0`](https://github.com/sindresorhus/got/commit/fe723a0477dc02785a0b477e3d5f85d0233e5b84) (thanks [@&#8203;Giotino](https://github.com/Giotino))
-   Define `error.code` [`f27e8d3`](https://github.com/sindresorhus/got/commit/f27e8d331627074e76e4a9ec85a2c8d0a0625e5f)
-   Set `options.url` even if some options are invalid [`8d6a680`](https://github.com/sindresorhus/got/commit/8d6a6807883323a83ea5f126ca56b55d9ce5f299)
-   Improve memory usage when merging options [`2db5ec5`](https://github.com/sindresorhus/got/commit/2db5ec5d366efbbf9e0838eabfa6be774a0518a0)
-   Support async generators as body [`854430f`](https://github.com/sindresorhus/got/commit/854430f01350811fe8a0ccf20cd820aabfbd3926) [`3df52f3`](https://github.com/sindresorhus/got/commit/3df52f38edbadb45158c37d499817bc5486989c6)
-   Add missing `once` types for Stream API [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   New error type: `RetryError` which always triggers a new retry when thrown [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   `error.options` is now enumerable [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   `defaults.handlers` don't need a default handler now [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Add a parser for the `Link` header [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   General code improvements [`a5dd9aa`](https://github.com/sindresorhus/got/commit/a5dd9aa37e7891b2620798560799c7f8bd380877)

##### Breaking changes

##### Improved option normalization

-   Got exports an `Option` class that is specifically designed to parse and validate Got options.
    It is made of setters and getters that provide fast normalization and more consistent behavior.

When passing an option does not exist, Got will throw an error. In order to retrieve the options before the error, use `error.options`.

```js
import got from 'got';

try {
    await got('https://httpbin.org/anything', {
        thisOptionDoesNotExist: true
    });
} catch (error) {
    console.error(error);
    console.error(error.options.url.href);
    // Unexpected option: thisOptionDoesNotExist
    // https://httpbin.org/anything
}
```

-   The `init` hook now accepts a second argument: `self`, which points to an `Options` instance.

In order to define your own options, you have to move them to `options.context` in an [`init` hook](https://github.com/sindresorhus/got/blob/main/documentation/lets-make-a-plugin.md#authorization) or store them in `options.context` directly.

-   The `init` hooks are ran only when passing an options object explicitly.

```diff
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooks
```

-   [`options.merge()`](2-options.md) replaced `got.mergeOptions` and `Request.normalizeArguments`

```diff
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
```

This fixes issues like [#&#8203;1450](https://github.com/sindresorhus/got/issues/1450)

-   Legacy `Url` instances are not supported anymore. You need to use WHATWG URL instead.

```diff
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);
```

-   No implicit timeout declaration.

```diff
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})
```

-   No implicit retry declaration.

```diff
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})
```

-   `dnsLookupIpVersion` is now a number (4 or 6) or undefined

```diff
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
```

-   `redirectUrls` and `requestUrl` now give URL instances

```diff
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()
```

```diff
- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()
```

-   Renamed `request.aborted` to `request.isAborted`

```diff
- request.aborted
+ request.isAborted
```

Reason: consistency with `options.isStream`.

-   Renamed the `lookup` option to `dnsLookup`

```diff
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
```

-   The `beforeRetry` hook now accepts only two arguments: `error` and `retryCount`

```diff
await got('https://example.com', {
    hooks: {
        beforeRetry: [
-            (options, error, retryCount) => {
-                console.log(options, error, retryCount);
-            }
+            (error, retryCount) => {
+                console.log(error.options, error, retryCount);
+            }
        ]
    }
})
```

The `options` argument has been removed, however it's still accessible via `error.options`. All modifications on `error.options` will be reflected in the next requests (no behavior change, same as with Got 11).

-   The `beforeRedirect` hook's first argument (options) is now a cloned instance of the Request options.

This was done to make retrieving the original options possible: `plainResponse.request.options`.

```diff
await got('http://szmarczak.com', {
    hooks: {
        beforeRedirect: [
            (options, response) => {
-                console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+                console.log(options === response.request.options); //=> false [we can access the original options now]
            }
        ]
    }
})
```

-   The `redirect` event now takes two arguments in this order: `updatedOptions` and `plainResponse`.

```diff
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
```

Reason: consistency with the `beforeRedirect` hook.

-   The `socketPath` option has been removed. Use the `unix:` protocol instead.

```diff
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
```

-   The `retryWithMergedOptions` function in an `afterResponse` hook no longer returns a `Promise`.

It now throws `RetryError`, so this should this should be the last function being executed.
This was done to allow `beforeRetry` hooks getting called.

-   You can no longer set `options.agent` to `false`.
    To do so, you need to define all the `options.agent` properties: `http`, `https` and `http2`.

```diff
await got('https://example.com', {
-    agent: false
+    agent: {
+        http: false,
+        https: false,
+        http2: false
+    }
})
```

-   When passing a `url` option when paginating, it now needs to be an absolute URL - the `prefixUrl` option is always reset from now on. The same when retrying in an `afterResponse` hook.

```diff
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
```

There was confusion around the `prefixUrl` option. It was counterintuitive if used with the Pagination API. For example, it worked fine if the server replied with a relative URL, but if it was an absolute URL then the `prefixUrl` would end up duplicated. In order to fix this, Got now requires an absolute URL - no `prefixUrl` will be applied.

-   `got.extend(…)` will throw when passing some options that don't accept undefined - undefined no longer retains the old value, as setting undefined explicitly may reset the option

##### Documentation

We have redesigned the documentation so it's easier to navigate and find exactly what you are looking for. We hope you like it ❤️

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), 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/X-oss-byte/Canary-nextjs).
kodiakhq bot referenced this issue in X-oss-byte/Nextjs Oct 12, 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 |
|---|---|---|---|---|---|
| [got](https://github.com/sindresorhus/got) | [`10.7.0` -> `13.0.0`](https://renovatebot.com/diffs/npm/got/10.7.0/13.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/got/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/got/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/got/10.7.0/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/got/10.7.0/13.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sindresorhus/got (got)</summary>

### [`v13.0.0`](https://github.com/sindresorhus/got/releases/tag/v13.0.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.6.1...v13.0.0)

As a reminder, Got continues to require ESM. For TypeScript users, this includes having [`"module": "node16", "moduleResolution": "node16"` in your tsconfig](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm).

##### Breaking

-   Require Node.js 16  [`52a1063`](https://github.com/sindresorhus/got/commit/52a1063)
-   Change the [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option to be `false` by default  [`852c312`](https://github.com/sindresorhus/got/commit/852c312)
    -   Most users don't need it.

##### Improvements

-   Allow specifying `undefined` for options ([#&#8203;2258](https://github.com/sindresorhus/got/issues/2258))  [`1cefe8b`](https://github.com/sindresorhus/got/commit/1cefe8b)

### [`v12.6.1`](https://github.com/sindresorhus/got/releases/tag/v12.6.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.6.0...v12.6.1)

-   Fix `get-stream` import statement ([#&#8203;2266](https://github.com/sindresorhus/got/issues/2266))  [`67d5039`](https://github.com/sindresorhus/got/commit/67d5039)

### [`v12.6.0`](https://github.com/sindresorhus/got/releases/tag/v12.6.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.3...v12.6.0)

-   Update dependencies  [`88c88fb`](https://github.com/sindresorhus/got/commit/88c88fb) [`979272e`](https://github.com/sindresorhus/got/commit/979272e)
-   Loosen URL validation strictness ([#&#8203;2200](https://github.com/sindresorhus/got/issues/2200))  [`0ca0b7f`](https://github.com/sindresorhus/got/commit/0ca0b7f)

### [`v12.5.3`](https://github.com/sindresorhus/got/releases/tag/v12.5.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.2...v12.5.3)

-   Fix abort event listeners not always being cleaned up ([#&#8203;2162](https://github.com/sindresorhus/got/issues/2162))  [`3cc40b5`](https://github.com/sindresorhus/got/commit/3cc40b5)

### [`v12.5.2`](https://github.com/sindresorhus/got/releases/tag/v12.5.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.1...v12.5.2)

-   Improve TypeScript 4.9 compatibility ([#&#8203;2163](https://github.com/sindresorhus/got/issues/2163))  [`39f83b6`](https://github.com/sindresorhus/got/commit/39f83b6)

### [`v12.5.1`](https://github.com/sindresorhus/got/releases/tag/v12.5.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.5.0...v12.5.1)

-   Fix compatibility with TypeScript and ESM  [`3b3ea67`](https://github.com/sindresorhus/got/commit/3b3ea67)
-   Fix request body not being properly cached ([#&#8203;2150](https://github.com/sindresorhus/got/issues/2150))  [`3e9d3af`](https://github.com/sindresorhus/got/commit/3e9d3af)

### [`v12.5.0`](https://github.com/sindresorhus/got/releases/tag/v12.5.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.4.1...v12.5.0)

-   Disable method rewriting on 307 and 308 status codes ([#&#8203;2145](https://github.com/sindresorhus/got/issues/2145))  [`e049e94`](https://github.com/sindresorhus/got/commit/e049e94)
-   Upgrade dependencies  [`8630815`](https://github.com/sindresorhus/got/commit/8630815) [`f0ac0b3`](https://github.com/sindresorhus/got/commit/f0ac0b3) [`4c3762a`](https://github.com/sindresorhus/got/commit/4c3762a)

### [`v12.4.1`](https://github.com/sindresorhus/got/releases/tag/v12.4.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.4.0...v12.4.1)

##### Fixes

-   Fix `options.context` being not extensible [`b671480`](https://github.com/sindresorhus/got/commit/b671480715dbbff908e9a385f5e714570c663cd7)
-   Don't emit `uploadProgress` after promise cancelation [`693de21`](https://github.com/sindresorhus/got/commit/693de217b030816f574d6e4cb505ee2e77b21c29)

### [`v12.4.0`](https://github.com/sindresorhus/got/releases/tag/v12.4.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.3.1...v12.4.0)

##### Improvements

-   Support FormData without known length ([#&#8203;2120](https://github.com/sindresorhus/got/issues/2120))  [`850773c`](https://github.com/sindresorhus/got/commit/850773c)

##### Fixes

-   Don't call `beforeError` hooks with `HTTPError` if the `throwHttpErrors` option is `false` ([#&#8203;2104](https://github.com/sindresorhus/got/issues/2104))  [`3927348`](https://github.com/sindresorhus/got/commit/3927348)

### [`v12.3.1`](https://github.com/sindresorhus/got/releases/tag/v12.3.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.3.0...v12.3.1)

-   Don't freeze signal when freezing Options ([#&#8203;2100](https://github.com/sindresorhus/got/issues/2100))  [`43b1467`](https://github.com/sindresorhus/got/commit/43b1467)

### [`v12.3.0`](https://github.com/sindresorhus/got/releases/tag/v12.3.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.2.0...v12.3.0)

-   Add `.off()` method for events ([#&#8203;2092](https://github.com/sindresorhus/got/issues/2092))  [`88056be`](https://github.com/sindresorhus/got/commit/88056be)

### [`v12.2.0`](https://github.com/sindresorhus/got/releases/tag/v12.2.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.1.0...v12.2.0)

-   [Support `AbortController`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#signal) ([#&#8203;2020](https://github.com/sindresorhus/got/issues/2020))  [`6a6d2a9`](https://github.com/sindresorhus/got/commit/6a6d2a9)
-   Add [`enableUnixSockets`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#enableunixsockets) option ([#&#8203;2062](https://github.com/sindresorhus/got/issues/2062))  [`461b3d4`](https://github.com/sindresorhus/got/commit/461b3d4)

### [`v12.1.0`](https://github.com/sindresorhus/got/releases/tag/v12.1.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.4...v12.1.0)

##### Improvements

-   Add `response.ok` ([#&#8203;2043](https://github.com/sindresorhus/got/issues/2043))  [`22d58fb`](https://github.com/sindresorhus/got/commit/22d58fb)
    -   This is only useful if you have [`{throwHttpErrors: false}`](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#throwhttperrors)

##### Fixes

-   Do not redirect to UNIX sockets ([#&#8203;2047](https://github.com/sindresorhus/got/issues/2047))  [`861ccd9`](https://github.com/sindresorhus/got/commit/861ccd9)
    -   [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)
    -   [Also back ported to v11](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

### [`v12.0.4`](https://github.com/sindresorhus/got/releases/tag/v12.0.4)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.3...v12.0.4)

-   Remove stream lock - unreliable since Node 17.3.0 [`bb8eca9`](https://github.com/sindresorhus/got/commit/bb8eca924c338ca12d5b90d6a26aa28dbddb42ee)

### [`v12.0.3`](https://github.com/sindresorhus/got/releases/tag/v12.0.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.2...v12.0.3)

-   Allow more types in the `json` option ([#&#8203;2015](https://github.com/sindresorhus/got/issues/2015))  [`eb045bf`](https://github.com/sindresorhus/got/commit/eb045bf)

### [`v12.0.2`](https://github.com/sindresorhus/got/releases/tag/v12.0.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.1...v12.0.2)

-   Fix `encoding` option with `{responseType: 'json'}` ([#&#8203;1996](https://github.com/sindresorhus/got/issues/1996))  [`0703318`](https://github.com/sindresorhus/got/commit/0703318)

### [`v12.0.1`](https://github.com/sindresorhus/got/releases/tag/v12.0.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v12.0.0...v12.0.1)

-   Fix `nock` compatibility ([#&#8203;1959](https://github.com/sindresorhus/got/issues/1959))  [`bf39d2c`](https://github.com/sindresorhus/got/commit/bf39d2c)
-   Fix missing export of `Request` TypeScript type ([#&#8203;1940](https://github.com/sindresorhus/got/issues/1940))  [`0f9f2b8`](https://github.com/sindresorhus/got/commit/0f9f2b8)

### [`v12.0.0`](https://github.com/sindresorhus/got/releases/tag/v12.0.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.6...v12.0.0)

##### Introducing Got v12.0.0 :tada:

Long time no see! The latest Got version (v11.8.2) was released just in February ❄️
We have been working hard on squashing bugs and improving overall experience.

If you find Got useful, you might want to [sponsor the Got maintainers](https://github.com/sindresorhus/got?sponsor=1).

##### This package is now pure ESM

**Please [read this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).** Also see [https://github.com/sindresorhus/got/issues/1789](https://github.com/sindresorhus/got/issues/1789).

-   **Please don't open issues about `[ERR_REQUIRE_ESM]` and `Must use import to load ES Module` errors.** This is a problem with your setup, not Got.
-   Please don't open issues about using Got with Jest. Jest does not fully support ESM.
-   Pretty much any problem with loading this package is a problem with your bundler, test framework, etc, not Got.
-   If you use TypeScript, you will want to stay on Got v11 until TypeScript 4.6 is out. [Why.](https://github.com/microsoft/TypeScript/issues/46452)
-   If you use a bundler, make sure it supports ESM and that you have correctly configured it for ESM.
-   The Got issue tracker is not a support channel for your favorite build/bundler tool.

##### Required Node.js >=14

While working with streams, we encountered more Node.js bugs that needed workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code would get more messy.
We strongly recommend that you update Node.js to **v14 LTS**.

##### HTTP/2 support

Every Node.js release, the native `http2` module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it on via the `http2` option.

To run HTTP/2 requests, it is required to use Node.js **v15.10** or above.

##### Bug fixes

Woah, we possibly couldn't make a release if we didn't fix some bugs!

-   Do not throw on custom stack traces ([#&#8203;1491](https://github.com/sindresorhus/got/issues/1491)) [`49c16ee`](https://github.com/sindresorhus/got/commit/49c16ee54fb19ea7aa77e24ac8c2b602f0aad265)
-   Remove automatic `content-length` on ReadStream ([#&#8203;1510](https://github.com/sindresorhus/got/issues/1510)) [`472b8ef`](https://github.com/sindresorhus/got/commit/472b8ef9d9fc7713b740981a8b1103a7a9111b26)
-   Fix promise shortcuts in case of error status code ([#&#8203;1543](https://github.com/sindresorhus/got/issues/1543)) [`ff918fb`](https://github.com/sindresorhus/got/commit/ff918fb6dedb6d8b23421497ec890d43f45121b7) [`1107cc6`](https://github.com/sindresorhus/got/commit/1107cc625e4cc469276483316c48896a21f6251a)
-   Invert the `methodRewriting` option [`51d88a0`](https://github.com/sindresorhus/got/commit/51d88a0efed56760d116c5b911cea71e3265c787)
-   Fix `url` not being reused on retry in rare case ([#&#8203;1487](https://github.com/sindresorhus/got/issues/1487)) [`462bc63`](https://github.com/sindresorhus/got/commit/462bc630015064fa4ad4358cf28d24f95e1c958b)
-   Fix hanging promise on HTTP/2 timeout ([#&#8203;1492](https://github.com/sindresorhus/got/issues/1492)) [`a59fac4`](https://github.com/sindresorhus/got/commit/a59fac415ac013a48b1d514837628a5cf81d6878)
-   Prevent uncaught ParseErrors on initial successful response ([#&#8203;1527](https://github.com/sindresorhus/got/issues/1527)) [`77df9c3`](https://github.com/sindresorhus/got/commit/77df9c33db5ba3126f54317171e1cfcfceefc3d5)
-   Throw an error when retrying with consumed body ([#&#8203;1507](https://github.com/sindresorhus/got/issues/1507)) [`62305d7`](https://github.com/sindresorhus/got/commit/62305d77d3428b5c714d21b4bbee68cc75b5f787)
-   Fix a Node.js 16 bug that hangs Got streams [`06a2d3d`](https://github.com/sindresorhus/got/commit/06a2d3d7d8d4fcc6898b6364d1a18ca1d407092b)
-   Fix default pagination handling for empty Link header ([#&#8203;1768](https://github.com/sindresorhus/got/issues/1768)) [`1e1e506`](https://github.com/sindresorhus/got/commit/1e1e50647e93d038a4cc6a9bbbfbf61165d8fd39)
-   Fix incorrect `response.complete` when using cache [`9e15d88`](https://github.com/sindresorhus/got/commit/9e15d887da3b065940bbc8ca38f9c748a0bbc75e)
-   Fix `Cannot call end` error when `request` returns a `Writable` [`226cc39`](https://github.com/sindresorhus/got/commit/226cc3995f6e16938163ebde24d8762e7dcd15e2)
-   Fix Request options not being reused on retry [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Fix types being not compatible with CommonJS [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Fix `got.paginate does not call init hooks` ([#&#8203;1574](https://github.com/sindresorhus/got/issues/1574)) [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Generate a new object when passing options to the native `https` module ([#&#8203;1567](https://github.com/sindresorhus/got/issues/1567)) [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Remove stream reuse check ([#&#8203;1803](https://github.com/sindresorhus/got/issues/1803)) [`9ecc5ee`](https://github.com/sindresorhus/got/commit/9ecc5ee76f77aafd5100520d9d8789c491c8fb24)
-   Fix merging `searchParams` ([#&#8203;1814](https://github.com/sindresorhus/got/issues/1814)) [`1018c20`](https://github.com/sindresorhus/got/commit/1018c2029eea1f5b75b5120265996f1c0b3c12ae) [`732e9bd`](https://github.com/sindresorhus/got/commit/732e9bd9406ba1c3dd64b445264e891f33fc0254)
-   Fix unhandled exception when lookup returns invalid IP early ([#&#8203;1737](https://github.com/sindresorhus/got/issues/1737)) [`2453e5e`](https://github.com/sindresorhus/got/commit/2453e5e4213fe036a0108de3e4db414dcf2b4c30)
-   Fix relative URLs when paginating [`439fb82`](https://github.com/sindresorhus/got/commit/439fb82d2a07cece417a18c47e37cfdeaaf38db7)
-   Require url to be an instance of URL when paginating ([#&#8203;1818](https://github.com/sindresorhus/got/issues/1818)) [`eda69ff`](https://github.com/sindresorhus/got/commit/eda69ff924a621e499d31cbc590993a32ddb48d3)
-   Fix `username` and `password` encoding in URL ([#&#8203;1169](https://github.com/sindresorhus/got/issues/1169) [#&#8203;1317](https://github.com/sindresorhus/got/issues/1317)) [`d65d0ca`](https://github.com/sindresorhus/got/commit/d65d0caf627e8d1f5367db34d7d9b55d332c1efb)
-   Clone raw options [`1c4cefc`](https://github.com/sindresorhus/got/commit/1c4cefc9b49f891712c3758f853d8c6214a1c904)
-   Fix invalid `afterResponse` return check  [`cbc8902`](https://github.com/sindresorhus/got/commit/cbc8902)
-   Fix `https.alpnProtocols` not having an effect  [`e1099fb`](https://github.com/sindresorhus/got/commit/e1099fb)

##### Improvements

-   Make the `context` option mergeable ([#&#8203;1459](https://github.com/sindresorhus/got/issues/1459)) [`2b8ed1f`](https://github.com/sindresorhus/got/commit/2b8ed1f5a185f30603d24e2ceb8181782de3bc5a)
-   Add generic argument to AfterResponseHook TypeScript type ([#&#8203;1589](https://github.com/sindresorhus/got/issues/1589)) [`6fc04a9`](https://github.com/sindresorhus/got/commit/6fc04a9b92f07b07b9fba010f2231a90082a039b)
-   Add read timeout ([#&#8203;1518](https://github.com/sindresorhus/got/issues/1518)) [`e943672`](https://github.com/sindresorhus/got/commit/e9436720fcb32b77d39d5477b420b18083e41c02) *(blocked by [https://github.com/nodejs/node/issues/35923](https://github.com/nodejs/node/issues/35923))*
-   Improve the pagination API ([#&#8203;1644](https://github.com/sindresorhus/got/issues/1644)) [`2675046`](https://github.com/sindresorhus/got/commit/2675046a83c7f03613f553a8da2912d491be900d)
-   Change the stackAllItems option to be false by default ([#&#8203;1645](https://github.com/sindresorhus/got/issues/1645)) [`1120370`](https://github.com/sindresorhus/got/commit/1120370e05fd8d9e768677d8474d0c82cf91a6a6)
-   Throw when afterResponse hook returns an invalid value [`4f21eb3`](https://github.com/sindresorhus/got/commit/4f21eb3db705c90797ef8ee1503704f78fea3c1b)
-   Add `retry.backoffLimit` option [`41c4136`](https://github.com/sindresorhus/got/commit/41c4136632b9391adb3ac53332b312089bc4dc16)
-   Add `noise` retry option [`e830077`](https://github.com/sindresorhus/got/commit/e83007704670b5f567ca338c156441f6c569ecb5)
-   Enable more HTTPS options [`83575d5`](https://github.com/sindresorhus/got/commit/83575d590a119027d319bd9208681973087564a9) [`fe723a0`](https://github.com/sindresorhus/got/commit/fe723a0477dc02785a0b477e3d5f85d0233e5b84) (thanks [@&#8203;Giotino](https://github.com/Giotino))
-   Define `error.code` [`f27e8d3`](https://github.com/sindresorhus/got/commit/f27e8d331627074e76e4a9ec85a2c8d0a0625e5f)
-   Set `options.url` even if some options are invalid [`8d6a680`](https://github.com/sindresorhus/got/commit/8d6a6807883323a83ea5f126ca56b55d9ce5f299)
-   Improve memory usage when merging options [`2db5ec5`](https://github.com/sindresorhus/got/commit/2db5ec5d366efbbf9e0838eabfa6be774a0518a0)
-   Support async generators as body [`854430f`](https://github.com/sindresorhus/got/commit/854430f01350811fe8a0ccf20cd820aabfbd3926) [`3df52f3`](https://github.com/sindresorhus/got/commit/3df52f38edbadb45158c37d499817bc5486989c6)
-   Add missing `once` types for Stream API [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   New error type: `RetryError` which always triggers a new retry when thrown [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   `error.options` is now enumerable [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   `defaults.handlers` don't need a default handler now [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   Add a parser for the `Link` header [`3c23eea`](https://github.com/sindresorhus/got/commit/3c23eea5a096f6f8ea0edf3e2a27e1caca88acf9)
-   General code improvements [`a5dd9aa`](https://github.com/sindresorhus/got/commit/a5dd9aa37e7891b2620798560799c7f8bd380877)

##### Breaking changes

##### Improved option normalization

-   Got exports an `Option` class that is specifically designed to parse and validate Got options.
    It is made of setters and getters that provide fast normalization and more consistent behavior.

When passing an option does not exist, Got will throw an error. In order to retrieve the options before the error, use `error.options`.

```js
import got from 'got';

try {
    await got('https://httpbin.org/anything', {
        thisOptionDoesNotExist: true
    });
} catch (error) {
    console.error(error);
    console.error(error.options.url.href);
    // Unexpected option: thisOptionDoesNotExist
    // https://httpbin.org/anything
}
```

-   The `init` hook now accepts a second argument: `self`, which points to an `Options` instance.

In order to define your own options, you have to move them to `options.context` in an [`init` hook](https://github.com/sindresorhus/got/blob/main/documentation/lets-make-a-plugin.md#authorization) or store them in `options.context` directly.

-   The `init` hooks are ran only when passing an options object explicitly.

```diff
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooks
```

-   [`options.merge()`](2-options.md) replaced `got.mergeOptions` and `Request.normalizeArguments`

```diff
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
```

This fixes issues like [#&#8203;1450](https://github.com/sindresorhus/got/issues/1450)

-   Legacy `Url` instances are not supported anymore. You need to use WHATWG URL instead.

```diff
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);
```

-   No implicit timeout declaration.

```diff
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})
```

-   No implicit retry declaration.

```diff
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})
```

-   `dnsLookupIpVersion` is now a number (4 or 6) or undefined

```diff
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
```

-   `redirectUrls` and `requestUrl` now give URL instances

```diff
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()
```

```diff
- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()
```

-   Renamed `request.aborted` to `request.isAborted`

```diff
- request.aborted
+ request.isAborted
```

Reason: consistency with `options.isStream`.

-   Renamed the `lookup` option to `dnsLookup`

```diff
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
```

-   The `beforeRetry` hook now accepts only two arguments: `error` and `retryCount`

```diff
await got('https://example.com', {
    hooks: {
        beforeRetry: [
-            (options, error, retryCount) => {
-                console.log(options, error, retryCount);
-            }
+            (error, retryCount) => {
+                console.log(error.options, error, retryCount);
+            }
        ]
    }
})
```

The `options` argument has been removed, however it's still accessible via `error.options`. All modifications on `error.options` will be reflected in the next requests (no behavior change, same as with Got 11).

-   The `beforeRedirect` hook's first argument (options) is now a cloned instance of the Request options.

This was done to make retrieving the original options possible: `plainResponse.request.options`.

```diff
await got('http://szmarczak.com', {
    hooks: {
        beforeRedirect: [
            (options, response) => {
-                console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+                console.log(options === response.request.options); //=> false [we can access the original options now]
            }
        ]
    }
})
```

-   The `redirect` event now takes two arguments in this order: `updatedOptions` and `plainResponse`.

```diff
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
```

Reason: consistency with the `beforeRedirect` hook.

-   The `socketPath` option has been removed. Use the `unix:` protocol instead.

```diff
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
```

-   The `retryWithMergedOptions` function in an `afterResponse` hook no longer returns a `Promise`.

It now throws `RetryError`, so this should this should be the last function being executed.
This was done to allow `beforeRetry` hooks getting called.

-   You can no longer set `options.agent` to `false`.
    To do so, you need to define all the `options.agent` properties: `http`, `https` and `http2`.

```diff
await got('https://example.com', {
-    agent: false
+    agent: {
+        http: false,
+        https: false,
+        http2: false
+    }
})
```

-   When passing a `url` option when paginating, it now needs to be an absolute URL - the `prefixUrl` option is always reset from now on. The same when retrying in an `afterResponse` hook.

```diff
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
```

There was confusion around the `prefixUrl` option. It was counterintuitive if used with the Pagination API. For example, it worked fine if the server replied with a relative URL, but if it was an absolute URL then the `prefixUrl` would end up duplicated. In order to fix this, Got now requires an absolute URL - no `prefixUrl` will be applied.

-   `got.extend(…)` will throw when passing some options that don't accept undefined - undefined no longer retains the old value, as setting undefined explicitly may reset the option

##### Documentation

We have redesigned the documentation so it's easier to navigate and find exactly what you are looking for. We hope you like it :heart:

### [`v11.8.6`](https://github.com/sindresorhus/got/releases/tag/v11.8.6)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.5...v11.8.6)

-   Destroy request object after successful response

### [`v11.8.5`](https://github.com/sindresorhus/got/releases/tag/v11.8.5)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.3...v11.8.5)

-   Backport security fix https://github.com/sindresorhus/got/commit/861ccd9ac2237df762a9e2beed7edd88c60782dc
    -   [CVE-2022-33987](https://nvd.nist.gov/vuln/detail/CVE-2022-33987)

### [`v11.8.3`](https://github.com/sindresorhus/got/releases/tag/v11.8.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.2...v11.8.3)

-   Bump cacheable-request dependency ([#&#8203;1921](https://github.com/sindresorhus/got/issues/1921))  [`9463bb6`](https://github.com/sindresorhus/got/commit/9463bb6)
-   Fix `HTTPError` missing `.code` property ([#&#8203;1739](https://github.com/sindresorhus/got/issues/1739))  [`0e167b8`](https://github.com/sindresorhus/got/commit/0e167b8)

### [`v11.8.2`](https://github.com/sindresorhus/got/releases/tag/v11.8.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.1...v11.8.2)

-   Make the `dnsCache` option lazy ([#&#8203;1529](https://github.com/sindresorhus/got/issues/1529))  [`3bd245f`](https://github.com/sindresorhus/got/commit/3bd245f)
    This slightly improves Got startup performance and fixes an issue with Jest.

### [`v11.8.1`](https://github.com/sindresorhus/got/releases/tag/v11.8.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.8.0...v11.8.1)

-   Do not throw on custom stack traces ([#&#8203;1491](https://github.com/sindresorhus/got/issues/1491)) [`4c815c3`](https://github.com/sindresorhus/got/commit/4c815c3a609eb74d0eb139414d9996b4f65dc3c0)

### [`v11.8.0`](https://github.com/sindresorhus/got/releases/tag/v11.8.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.7.0...v11.8.0)

-   Fix for sending files with size `0` on `stat` ([#&#8203;1488](https://github.com/sindresorhus/got/issues/1488))  [`7acd380`](https://github.com/sindresorhus/got/commit/7acd380)
-   `beforeRetry` allows stream body if different from original ([#&#8203;1501](https://github.com/sindresorhus/got/issues/1501))  [`3dd2273`](https://github.com/sindresorhus/got/commit/3dd2273)
-   Set default value for an options object ([#&#8203;1495](https://github.com/sindresorhus/got/issues/1495))  [`390b145`](https://github.com/sindresorhus/got/commit/390b145)

### [`v11.7.0`](https://github.com/sindresorhus/got/releases/tag/v11.7.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.6.2...v11.7.0)

##### Improvements

-   Add [`pfx`](https://github.com/sindresorhus/got#httpspfx) HTTPS option ([#&#8203;1364](https://github.com/sindresorhus/got/issues/1364))  [`c33df7f`](https://github.com/sindresorhus/got/commit/c33df7f)
-   Update `body` after `beforeRequest` ([#&#8203;1453](https://github.com/sindresorhus/got/issues/1453))  [`e1c1844`](https://github.com/sindresorhus/got/commit/e1c1844)
-   Don't allocate buffer twice ([#&#8203;1403](https://github.com/sindresorhus/got/issues/1403))  [`7bc69d9`](https://github.com/sindresorhus/got/commit/7bc69d9)

##### Fixes

-   Fix a regression where body was sent after redirect  [`88b32ea`](https://github.com/sindresorhus/got/commit/88b32ea)
-   Fix destructure error on `promise.json()`  [`c97ce7c`](https://github.com/sindresorhus/got/commit/c97ce7c)
-   Do not ignore userinfo on a redirect to the same origin  [`52de13b`](https://github.com/sindresorhus/got/commit/52de13b)

### [`v11.6.2`](https://github.com/sindresorhus/got/releases/tag/v11.6.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.6.1...v11.6.2)

##### Bug fixes

-   Inherit the `prefixUrl` option from parent if it's `undefined` ([#&#8203;1448](https://github.com/sindresorhus/got/issues/1448)) [`a3da70a`](https://github.com/sindresorhus/got/commit/a3da70a78aeb7f44dd3e0d0fa47cebe9541eb91e)
-   Prepare a fix for hanging promise on Node.js 14.10.x [`29d4e32`](https://github.com/sindresorhus/got/commit/29d4e325b110ccf7571d4265d40760be4175f7ff)
-   Prepare for Node.js 15.0.0 [`c126ff1`](https://github.com/sindresorhus/got/commit/c126ff19c4e893975cbf6c2c8bebce6ed7631276)

##### Docs

-   Point travis-ci.org badge to travis-ci.com ([#&#8203;1442](https://github.com/sindresorhus/got/issues/1442)) [`2b352d3`](https://github.com/sindresorhus/got/commit/2b352d3f9e216e116efc0249a3a78b8d4492f97c)
-   Clarify the retry mechanism [`f248618`](https://github.com/sindresorhus/got/commit/f2486180207dba30624901761a457694096441c1)
-   Fix `RequestError` links [`3ed4af6`](https://github.com/sindresorhus/got/commit/3ed4af605ca6493c080cc8003a55c3b37988efee)

##### Tests

-   Downgrade Travis CI Node.js version to 14.9.0 ([#&#8203;1454](https://github.com/sindresorhus/got/issues/1454)) [`27470b5`](https://github.com/sindresorhus/got/commit/27470b53e1bcd6f435fc77006c9e3e864961dbec)

### [`v11.6.1`](https://github.com/sindresorhus/got/releases/tag/v11.6.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.6.0...v11.6.1)

##### Fixes

-   Fix `options.port` on redirect ([#&#8203;1439](https://github.com/sindresorhus/got/issues/1439))  [`408e22a`](https://github.com/sindresorhus/got/commit/408e22a)

##### Meta

-   Welcome [@&#8203;Giotino](https://github.com/Giotino) as a maintainer 🎉  [`5031843`](https://github.com/sindresorhus/got/commit/5031843)
-   Showcase companies using Got ([#&#8203;1432](https://github.com/sindresorhus/got/issues/1432))  [`d12d6af`](https://github.com/sindresorhus/got/commit/d12d6af)

### [`v11.6.0`](https://github.com/sindresorhus/got/releases/tag/v11.6.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.5.2...v11.6.0)

##### Improvements

-   Add `retry` stream event ([#&#8203;1384](https://github.com/sindresorhus/got/issues/1384)) [`7072198`](https://github.com/sindresorhus/got/commit/707219825b2f8ff3df597230a53244636df21642)
-   Add types for `http-cache-semantics` options [`2e2295f`](https://github.com/sindresorhus/got/commit/2e2295fba63c260d347fef2081cdbcae45fa6116)
-   Make `CancelError` inherit `RequestError` [`1f132e8`](https://github.com/sindresorhus/got/commit/1f132e88b4e9b295631637757d64307032a4e56e)
-   Add `retryAfter` to `RetryObject` [`643a305`](https://github.com/sindresorhus/got/commit/643a305b4d710042d2a958a21e7637183713505c)
-   Add documentation comments to exported TypeScript types ([#&#8203;1278](https://github.com/sindresorhus/got/issues/1278)) [`eaf1e02`](https://github.com/sindresorhus/got/commit/eaf1e02b21e4b8c08197c6400844d4098828ecf4)
-   Move cache options into a `cacheOptions` property [`9c16d90`](https://github.com/sindresorhus/got/commit/9c16d9083019fcb28f566659106036faa4839447)

##### Bug fixes

-   Got promise shouldn't retry when the body is a stream [`6e1aeae`](https://github.com/sindresorhus/got/commit/6e1aeaedb5dfe4f4b15eecf72a80303c30df22af)

##### Docs

-   Add an example of nock integration with retrying [`f7bbc37`](https://github.com/sindresorhus/got/commit/f7bbc3753779e14b22d7aa337764c7048aebb915)
-   Fix `CancelError` docs [`28c400f`](https://github.com/sindresorhus/got/commit/28c400f4df5f45990f80641a794a2d09439bef93)
-   Fix retry delay function in the `README` ([#&#8203;1425](https://github.com/sindresorhus/got/issues/1425)) [`38bbb04`](https://github.com/sindresorhus/got/commit/38bbb04ea24f01eed6f01e394bc3e9405df8cfc5)

### [`v11.5.2`](https://github.com/sindresorhus/got/releases/tag/v11.5.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.5.1...v11.5.2)

##### Docs

-   Add hpagent to proxy section ([#&#8203;1363](https://github.com/sindresorhus/got/issues/1363)) [`a3e171c`](https://github.com/sindresorhus/got/commit/a3e171c4d43c8bbb236ef3a04feb25ba6fdf6c49)
-   Mention header lowercasing in`request` migration guide ([#&#8203;1387](https://github.com/sindresorhus/got/issues/1387)) [`a748343`](https://github.com/sindresorhus/got/commit/a748343363ecb0347897264fb49df4a8f4793997)
-   Fixed deprecationWarning on https options ([#&#8203;1391](https://github.com/sindresorhus/got/issues/1391)) [`9a309bd`](https://github.com/sindresorhus/got/commit/9a309bdbe7e2552c5bffbea253d58c39d6e6c3e3)

##### Bug fixes

-   Fix duplicated hooks when paginating [`e02845f`](https://github.com/sindresorhus/got/commit/e02845f1aa737d55dce23381d0f4f2a61b1eb5e1)
-   Fix `dnsCache: true` having no effect [`043c950`](https://github.com/sindresorhus/got/commit/043c9501b85172e09819d44ac8eb49c574b27bda)

### [`v11.5.1`](https://github.com/sindresorhus/got/releases/tag/v11.5.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.5.0...v11.5.1)

##### Enhancements

-   Upgrade `http2-wrapper` to `1.0.0-beta.5.0` [`16e7f03`](https://github.com/sindresorhus/got/commit/16e7f031bb371571e1948091b88385be3485d83f)
-   Compatibility fix to ignore incorrect Node.js 12 typings [`f7a1379`](https://github.com/sindresorhus/got/commit/f7a1379e417641613bf1b654e37f37a7e6447e0c) [`61d6f61`](https://github.com/sindresorhus/got/commit/61d6f610ffa6b760d466ff910a8e959778ee36e0)

##### Bug fixes

-   Prevent uncaught errors on HTTP errors [`2d96679`](https://github.com/sindresorhus/got/commit/2d96679c0a007be657835e83c6afb20b4510e9c5) [`1ef053d`](https://github.com/sindresorhus/got/commit/1ef053d2af7f9b050ce0a3d1884f45b285f2e775)

##### Docs

-   Mention HTTP/2 proxying in `readme.md` [`4ebd26a`](https://github.com/sindresorhus/got/commit/4ebd26a4b8eef704fe216d333e2614b39dedf695)
-   Update the comparison table [`bd2d532`](https://github.com/sindresorhus/got/commit/bd2d53269882e48af88ff736a2e82aecd9e1fbee) [`c833939`](https://github.com/sindresorhus/got/commit/c83393933c2b308a312ed4dc85d852c79445e400)
-   Document the hierarchy of error classes ([#&#8203;1359](https://github.com/sindresorhus/got/issues/1359)) [`559526e`](https://github.com/sindresorhus/got/commit/559526ee273fb60d152759d288bc76971abb99e2)
-   Fix example code for HTTPS proxy ([#&#8203;1360](https://github.com/sindresorhus/got/issues/1360)) [`4083347`](https://github.com/sindresorhus/got/commit/408334756ace0570ca4a0aded5a8aeac437eac33)

### [`v11.5.0`](https://github.com/sindresorhus/got/releases/tag/v11.5.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.4.0...v11.5.0)

##### Improvements

-   Add `backoff` option to pagination ([#&#8203;1182](https://github.com/sindresorhus/got/issues/1182))  [`4be7446`](https://github.com/sindresorhus/got/commit/4be7446)
-   Upgrade dependencies ([#&#8203;1345](https://github.com/sindresorhus/got/issues/1345))  [`b9a855d`](https://github.com/sindresorhus/got/commit/b9a855d) [`476c026`](https://github.com/sindresorhus/got/commit/476c026) [`8d697bc`](https://github.com/sindresorhus/got/commit/8d697bc)
-   Upgrade to TypeScript 3.9 ([#&#8203;1267](https://github.com/sindresorhus/got/issues/1267))  [`b51d836`](https://github.com/sindresorhus/got/commit/b51d836)

##### Fixes

-   Fix TypeScript types for Promise API ([#&#8203;1344](https://github.com/sindresorhus/got/issues/1344))  [`676be6d`](https://github.com/sindresorhus/got/commit/676be6d)
-   Fix cache not working with HTTP2  [`ac5f67d`](https://github.com/sindresorhus/got/commit/ac5f67d)
-   Fix `response` event not being emitted on cache verify request ([#&#8203;1305](https://github.com/sindresorhus/got/issues/1305))  [`da4769e`](https://github.com/sindresorhus/got/commit/da4769e)
-   Work around a bug in Node.js <=12.18.2  [`f33e8bc`](https://github.com/sindresorhus/got/commit/f33e8bc)
-   Remove request error handler after response is downloaded  [`e1afe82`](https://github.com/sindresorhus/got/commit/e1afe82)
-   Revert "Remove request error handler after response is downloaded"  [`aeb2e07`](https://github.com/sindresorhus/got/commit/aeb2e07)

##### Docs

-   Mention advanced usage of a `beforeRequest` hook  [`779062a`](https://github.com/sindresorhus/got/commit/779062a)
-   Mention to end the stream if there's no body  [`044767e`](https://github.com/sindresorhus/got/commit/044767e)

### [`v11.4.0`](https://github.com/sindresorhus/got/releases/tag/v11.4.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.3.0...v11.4.0)

-   Fix hanging promise on timeout on HTTP error [`934211f`](https://github.com/sindresorhus/got/commit/934211f951bfd56751e90ec4eabe6379d8541a05)
-   Use async iterators to get response body ([#&#8203;1256](https://github.com/sindresorhus/got/issues/1256)) [`7dcd145`](https://github.com/sindresorhus/got/commit/7dcd1456a68a2603d30cbb1a4e453c4560bd51b2)
-   Fix promise not returning Buffer on compressed response [`5028c11`](https://github.com/sindresorhus/got/commit/5028c11abd21c9d13bb3b12abb02961ec0465a8a)
-   Clarify options.encoding docs [`04f3ea4`](https://github.com/sindresorhus/got/commit/04f3ea4b7995e1609555dd13f00641b8f470de4c)
-   Fix unhandled `The server aborted pending request` rejection [`728aef9`](https://github.com/sindresorhus/got/commit/728aef989c1a6650d2b42a7f69b603075b5d35bf)
-   Add missing `ECONNRESET` code to an abort error [`d325d35`](https://github.com/sindresorhus/got/commit/d325d353a28e6038140aa5b18f2b6f9f796f10b6)
-   Fix `prefixUrl` not working when the `url` argument is empty [`8d3412a`](https://github.com/sindresorhus/got/commit/8d3412abb8aae3cefc75dd6f9e698988ed463dd6)
-   Improve the `searchParams` option [`4dbada9`](https://github.com/sindresorhus/got/commit/4dbada94e261ad890d2478c313ec3d74761b659e)
-   Fix non-enumerable options \[such as body] not being used [`8f775c7`](https://github.com/sindresorhus/got/commit/8f775c71c41a377186c6b38c6789542bfd523039)

### [`v11.3.0`](https://github.com/sindresorhus/got/releases/tag/v11.3.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.2.0...v11.3.0)

-   Deep merge `https` options ([#&#8203;1304](https://github.com/sindresorhus/got/issues/1304))  [`c98f0d7`](https://github.com/sindresorhus/got/commit/c98f0d7)
-   Add options to customize [parsing/stringifying JSON](https://github.com/sindresorhus/got#parsejson) ([#&#8203;1298](https://github.com/sindresorhus/got/issues/1298))  [`cb4da8d`](https://github.com/sindresorhus/got/commit/cb4da8d)
-   Add [`dnsLookupIpVersion`](https://github.com/sindresorhus/got#dnslookupipversion) option ([#&#8203;1264](https://github.com/sindresorhus/got/issues/1264))  [`7f643bb`](https://github.com/sindresorhus/got/commit/7f643bb)

### [`v11.2.0`](https://github.com/sindresorhus/got/releases/tag/v11.2.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.1.4...v11.2.0)

-   Provide an overload for unknown `responseType` ([#&#8203;1276](https://github.com/sindresorhus/got/issues/1276))  [`b9ba18a`](https://github.com/sindresorhus/got/commit/b9ba18a)
-   Fix overriding some options in a `beforeRequest` hook ([#&#8203;1293](https://github.com/sindresorhus/got/issues/1293))  [`d8c00cf`](https://github.com/sindresorhus/got/commit/d8c00cf)
-   Fix hanging promise on aborted requests on Node v14.3.0 ([#&#8203;1296](https://github.com/sindresorhus/got/issues/1296))  [`2ccc4c2`](https://github.com/sindresorhus/got/commit/2ccc4c2)
-   Do not wait for `ready` event if the file descriptor is already opened ([#&#8203;1289](https://github.com/sindresorhus/got/issues/1289))  [`2c8fe19`](https://github.com/sindresorhus/got/commit/2c8fe19)
-   General improvements to HTTPS API ([#&#8203;1255](https://github.com/sindresorhus/got/issues/1255))  [`697de37`](https://github.com/sindresorhus/got/commit/697de37)

### [`v11.1.4`](https://github.com/sindresorhus/got/releases/tag/v11.1.4)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.1.3...v11.1.4)

-   Clarify docs for got.HTTPError ([#&#8203;1244](https://github.com/sindresorhus/got/issues/1244)) [`3f125f1`](https://github.com/sindresorhus/got/commit/3f125f105e3b328942c04ef73579b1573fc39b5a)
-   Upgrade `cacheable-lookup` to 5.0.3 [`9770e54`](https://github.com/sindresorhus/got/commit/9770e540d088c35ec0b467fa3d2fafb60ed6797d)
-   Add a Runkit example ([#&#8203;1253](https://github.com/sindresorhus/got/issues/1253)) [`48bbb36`](https://github.com/sindresorhus/got/commit/48bbb369d715b8ec3c36e0af1ec88f47e2299172)
-   Mention `options.rejectUnauthorized` in the documentation  [`9b04963`](https://github.com/sindresorhus/got/commit/9b049635570ebbdd9d534ad1860f01d34771a5ee)
-   Test `responseType` set to `undefined` [`0e8582f`](https://github.com/sindresorhus/got/commit/0e8582f24e6903d9079a7d92e9b4d831cb5b5f17)
-   Slightly improve RunKit example [`6f84051`](https://github.com/sindresorhus/got/commit/6f8405102517a1e61393ee7bdb5a4fcff08e64c5)
-   Make `got.paginate()` an alias for `got.paginate.each()`  [`5480b31`](https://github.com/sindresorhus/got/commit/5480b3134cfd35497f618f08f574927c2bd7624b)
-   Don't force query string normalization ([#&#8203;1246](https://github.com/sindresorhus/got/issues/1246)) [`761b8e0`](https://github.com/sindresorhus/got/commit/761b8e01f7d194dd3b9aa6578c26966ebae6172c)
-   Upgrade `decompress-response` to `6.0.0` [`c2bc014`](https://github.com/sindresorhus/got/commit/c2bc014abc8818ad93dd69a0e8cc9d36d0dccb9c)
-   Migrate from `lolex` to `@sinonjs/fake-timers` ([#&#8203;1270](https://github.com/sindresorhus/got/issues/1270)) [`df333dd`](https://github.com/sindresorhus/got/commit/df333ddbc163e35537a9f49818e722c7aa6803c0)
-   Make `calculateDelay` promisable ([#&#8203;1266](https://github.com/sindresorhus/got/issues/1266)) [`3745efc`](https://github.com/sindresorhus/got/commit/3745efc9d9d03c78c898f357a34524524cce514d)

### [`v11.1.3`](https://github.com/sindresorhus/got/releases/tag/v11.1.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.1.2...v11.1.3)

-   Do not use deprecated `request.abort()` ([#&#8203;1242](https://github.com/sindresorhus/got/issues/1242)) [`ab338a7`](https://github.com/sindresorhus/got/commit/ab338a70dd9547a6c48af18ab5e2306639e5cbad)
-   Remove the `host` header on redirect ([#&#8203;1241](https://github.com/sindresorhus/got/issues/1241)) [`8ff71d9`](https://github.com/sindresorhus/got/commit/8ff71d972ae55700887b45d50a265e3659ac8cce)
-   Prevent URL pollution ([#&#8203;1243](https://github.com/sindresorhus/got/issues/1243)) [`7dbb9ee`](https://github.com/sindresorhus/got/commit/7dbb9ee2bd58e8ee67ebfe734e0c62e765759593)
-   Fix duplicated searchParams for pagination API ([#&#8203;1229](https://github.com/sindresorhus/got/issues/1229)) [`91aa0ac`](https://github.com/sindresorhus/got/commit/91aa0ac9e676130cd4cfc1183d16208c6167b31d)
-   Add a test for stringified `searchParams` in merge ([#&#8203;1208](https://github.com/sindresorhus/got/issues/1208)) [`7d7361c`](https://github.com/sindresorhus/got/commit/7d7361cc3845421f24288fc39464a8b38bd75d56)
-   Fix reusing options when paginating [`8862270`](https://github.com/sindresorhus/got/commit/88622701c70434ddc1040c46ad16de0c0acd9143)
-   Fix an invalid pagination test [`47c1afe`](https://github.com/sindresorhus/got/commit/47c1afedc77b27a2eb3edd85064d8532da835045) [`5131dc2`](https://github.com/sindresorhus/got/commit/5131dc2778a9b584acda062635a9458d5b22df0c)

### [`v11.1.2`](https://github.com/sindresorhus/got/releases/tag/v11.1.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.1.1...v11.1.2)

##### Bug fixes

-   Disable `options.dnsCache` by default [`79507c2`](https://github.com/sindresorhus/got/commit/79507c2cdec137e65d715f36d13a5a0e577ddc01)

> This should stay disabled when making requests to internal hostnames such as localhost, database.local etc.
> CacheableLookup uses dns.resolver4(..) and dns.resolver6(...) under the hood and fall backs to dns.lookup(...) when the first two fail, which may lead to additional delay.

##### Enhancements

-   Add test cases for issues [#&#8203;1221](https://github.com/sindresorhus/got/issues/1221) and [#&#8203;1223](https://github.com/sindresorhus/got/issues/1223) ([#&#8203;1231](https://github.com/sindresorhus/got/issues/1231)) [`822bfa7`](https://github.com/sindresorhus/got/commit/822bfa770306737a3ad06196101975b669b5d738)
-   Update dependencies [`05ff878`](https://github.com/sindresorhus/got/commit/05ff8780768d48fb58c782ba0b9c141af44a7c15)

### [`v11.1.1`](https://github.com/sindresorhus/got/releases/tag/v11.1.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.1.0...v11.1.1)

-   Improve Node.js 14 compatibility  [`50ef99a`](https://github.com/sindresorhus/got/commit/50ef99a)
-   Fix `got.mergeOptions()` regression  [`157e02b`](https://github.com/sindresorhus/got/commit/157e02b)
-   Fix hanging promise when using cache  [`7b19e8f`](https://github.com/sindresorhus/got/commit/7b19e8f)
-   Make `options.responseType` optional when using a template  [`9ed0a39`](https://github.com/sindresorhus/got/commit/9ed0a39)

### [`v11.1.0`](https://github.com/sindresorhus/got/releases/tag/v11.1.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.0.3...v11.1.0)

-   Add [`pagination.stackAllItems`](https://github.com/sindresorhus/got#paginationstackallitems) option ([#&#8203;1214](https://github.com/sindresorhus/got/issues/1214))  [`c1208d1`](https://github.com/sindresorhus/got/commit/c1208d1)
-   Allow response body to be typed for pagination API ([#&#8203;1212](https://github.com/sindresorhus/got/issues/1212))  [`c127f5b`](https://github.com/sindresorhus/got/commit/c127f5b)
-   Fix some options not working with the pagination API  [`278c421`](https://github.com/sindresorhus/got/commit/278c421)

### [`v11.0.3`](https://github.com/sindresorhus/got/releases/tag/v11.0.3)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.0.2...v11.0.3)

##### Fixes

-   Limit number of requests in pagination to prevent accidental overflows ([#&#8203;1181](https://github.com/sindresorhus/got/issues/1181))  [`4344c3a`](https://github.com/sindresorhus/got/commit/4344c3a)
-   Fix promise rejecting before retry [`b927e2d`](https://github.com/sindresorhus/got/commit/b927e2d)
-   Fix `options.searchParams` duplicates  [`429db40`](https://github.com/sindresorhus/got/commit/429db40)
-   Prevent calling `.abort()` on a destroyed request  [`63c1b72`](https://github.com/sindresorhus/got/commit/63c1b72)

##### Docs

-   Fix incorrect usage in the readme examples ([#&#8203;1203](https://github.com/sindresorhus/got/issues/1203))  [`16ff82f`](https://github.com/sindresorhus/got/commit/16ff82f)
-   Note that `cache` and `dnsCache` can be `false`  [`7c5290d`](https://github.com/sindresorhus/got/commit/7c5290d)

### [`v11.0.2`](https://github.com/sindresorhus/got/releases/tag/v11.0.2)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.0.1...v11.0.2)

-   Fix `response.statusMessage` being null [`965bd03`](https://github.com/sindresorhus/got/commit/965bd03ad463afb9fdbe098a48b16269b54de9bd)
-   Update the `http2-wrapper` dependency to `1.0.0-beta.4.4` [`4e8de8e`](https://github.com/sindresorhus/got/commit/4e8de8e32cccaafddf0c6ef4f31716810ab4a14b)
-   Use `Merge` as it's stricter than the intersection operator [`d3b972e`](https://github.com/sindresorhus/got/commit/d3b972efaca28d8033468c7232a469e8cb034677)
-   Prevent silent rejections in rare cases [`8501c69`](https://github.com/sindresorhus/got/commit/8501c6901af4f7c74cd0ae3700b499bb42ce5928)
-   Do not alter `options.body` [`835c70b`](https://github.com/sindresorhus/got/commit/835c70bd6fdc5b1ba7e7ffd322490b6d66fb407e)

### [`v11.0.1`](https://github.com/sindresorhus/got/releases/tag/v11.0.1)

[Compare Source](https://github.com/sindresorhus/got/compare/v11.0.0...v11.0.1)

Fixed two regressions:

-   `HTTPError`s have unspecified response body ([#&#8203;1162](https://github.com/sindresorhus/got/issues/1162))
-   Options are duplicated while merging ([#&#8203;1163](https://github.com/sindresorhus/got/issues/1163))

[Improved TypeScript types for errors inherited from `RequestError`](https://github.com/sindresorhus/got/commit/d914a7e7a0d97b03745b9b47623e4ac3532b4dae#diff-8eef38c70c64f535c3b8046b5ce40d9e)

### [`v11.0.0`](https://github.com/sindresorhus/got/releases/tag/v11.0.0)

[Compare Source](https://github.com/sindresorhus/got/compare/v10.7.0...v11.0.0)

Introducing Got 11! :tada: The last major version was in December last year. :snowflake: Since then, a huge amount of bugs has been fixed. There are also many new features, for example, **HTTP2 support** is finally live! :globe_with_meridians:

*If you find Got useful, you might want to [sponsor the Got maintainers](https://github.com/sindresorhus/got?sponsor=1).*

***

#### Breaking changes

##### Removed support for `electron.net`

Due to the inconsistencies between the Electron's `net` module and the Node.js `http` module, we have decided to officially drop support for it. Therefore, the `useElectronNet` option has been removed.

You'll still be able to use Got in the Electron main process and in the renderer process through the `electron.remote` module or if you use Node.js shims.

##### The Pagination API is now stable

We haven't seen any bugs yet, so please give it a try!
If you want to leave some feedback, you can do it [here](https://github.com/sindresorhus/got/issues/1052). Any suggestion is greatly appreciated!

```diff
 {
-    _pagination: {...}
+    pagination: {...}
 }
```

##### API

-   The `options.encoding` behavior has been reverted back to the Got 9 behavior.
    In other words, the options is only meant for the Got promise API.
    To set the encoding for streams, simply call `stream.setEncoding(encoding)`.

```diff
-got.stream('https://sindresorhus.com', {encoding: 'base64'});
+got.stream('https://sindresorhus.com').setEncoding('base64');

// Promises stay untouched
await got('https://sindresorhus.com', {encoding: 'base64'});
```

-   The error name `GotError` has been renamed to `RequestError` for better readability and to comply with the documentation.

```diff
-const {GotError} = require('got');
+const {RequestError} = require('got');
```

-   The `agent` option now accepts **only an object** with `http`, `https` and `http2` properties.
    While the `http` and `https` properties accept native `http(s).Agent` instances, the `http2` property must be an instance of [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) or be undefined.

```diff
{
-    agent: new https.Agent({keepAlive: true})
}

{
+    agent: {
+        http: new http.Agent({keepAlive: true}),
+        https: new https.Agent({keepAlive: true}),
+        http2: new http2wrapper.Agent()
+    }
}
```

-   The `dnsCache` option is now set to a default instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup). It cannot be a `Map`-like instance anymore. The underlying [`cacheable-lookup`](https://github.com/szmarczak/cacheable-lookup) package has received many improvements, for example, it has received `hosts` file support! Additionally, the `cacheAdapter` option has been renamed to `cache`. Note that it's no longer passed to [Keyv](https://github.com/lukechilds/keyv), so you need to pass a Keyv instance it if you want to save the data for later.

```diff
{
-    dnsCache: new CacheableLookup({
-        cacheAdapter: new Map()
-    })
}

{
+    dnsCache: new CacheableLookup({
+        cache: new Keyv({
+            cacheAdapter: new Map()
+        })
+    })
}

// Default:

{
    dnsCache: new CacheableLookup()
}
```

-   Errors thrown in `init` hooks will be converted to instances of `RequestError`. `RequestError`s provide much more useful information, for example, you can access the Got options (through `error.options`), which is very useful when debugging.

```js
const got = require('got');

(async () => {
    try {
        await got('https://sindresorhus.com', {
            hooks: {
                init: [
                    options => {
                        if (!options.context) {
                            throw new Error('You need to pass a `context` option');
                        }
                    }
                ]
            }
        });
    } catch (error) {
        console.log(`Request failed: ${error.message}`);
        console.log('Here are the options:', error.options);
    }
})();
```

-   The options passed in an `init` hook may not have a `url` property. To modify the request URL you should use a `beforeRequest` hook instead.

```diff
{
    hooks: {
-        init: [
+        beforeRequest: [
            options => {
                options.url = 'https://sindresorhus.com';
            }
        ]
    }
}
```

Note that this example shows a simple use case. In more complicated algorithms, you need to split the `init` hook into another `init` hook and a `beforeRequest` hook.

-   The `error.request` property is no longer a `ClientRequest` instance. Instead, it gives a Got stream, which provides a set of useful properties.

```js
const got = require('got');

(async () => {
    try {
        await got('https://sindresorhus.com/notfound');
    } catch (error) {
        console.log(`Request failed: ${error.message}`);
        console.log('Download progress:', error.request.downloadProgress);
    }
})();
```

##### Renamed TypeScript types

Some of the TypeScript types have been renamed to improve the readability:

<table>
<tr>
    <td>Old type</td>
    <td>New type</td>
</tr>
<tr>
    <td><code>ResponseObject</code></td>
    <td><code>Response</code></td>
</tr>
<tr>
    <td><code>Defaults</code></td>
    <td><code>InstanceDefaults</code></td>
</tr>
<tr>
    <td><code>DefaultOptions</code></td>
    <td><code>Defaults</code></td>
</tr>
<tr>
    <td><code>DefaultRetryOptions</code></td>
    <td><code>RequiredRetryOptions</code></td>
</tr>
<tr>
    <td><code>GotOptions</code></td>
    <td><code>Options</code></td>
</tr>
<tr>
    <td><code>GotRequestMethod</code></td>
    <td><code>GotRequestFunction</code></td>
</tr>
</table>

##### Other

-   Now requires Node.js 10.19 or later.

#### Enhancements

HTTP2 support is here! Excited? Yay! Unfortunately, it's off by default to make the migration smoother. Many Got users have set up their own Agents and we didn't want to break them. But fear no more, it will come enabled by default in Got 12.

```js
const got = require('got');

(async () => {
    const response = await got('https://nghttp2.org/httpbin/anything', {http2: true});
    console.log(response.socket.alpnProtocol);
    //=> 'h2'
})();
```

1.  The `merge` function is slow ([#&#8203;1016](https://github.com/sindresorhus/got/issues/1016))
2.  Use `error.code` instead of `error.message` to compare errors ([#&#8203;981](https://github.com/sindresorhus/got/issues/981))
3.  Pass error thrown in the `init` hook to `beforeError` hook ([#&#8203;929](https://github.com/sindresorhus/got/issues/929))
4.  Errors have undefined body when using streams ([#&#8203;1138](https://github.com/sindresorhus/got/issues/1138))
5.  Spaces should be normalized as `+` in query strings ([#&#8203;1113](https://github.com/sindresorhus/got/issues/1113))
6.  Modify response headers while using `got.stream(...)` ([#&#8203;1129](https://github.com/sindresorhus/got/issues/1129))
7.  Make `error.request` a Got stream ([`af0b147`](https://github.com/sindresorhus/got/commit/af0b1472abf48a6c5491dcb36a1d8863c5227fb3)).

#### Known bugs

1.  When some errors occur, the `timings` may indicate that the request was successful although it failed.
2.  When some errors occur, the `downloadProgress` object may show incorrect data.

#### Bug fixes

1.  Requests to UNIX sockets are missing query strings ([#&#8203;1036](https://github.com/sindresorhus/got/issues/1036))
2.  `beforeRequest` hooks aren't called on redirects ([#&#8203;994](https://github.com/sindresorhus/got/issues/994))
3.  Errors are swallowed when using `stream.pipeline(got.stream(...), ...)` ([#&#8203;1026](https://github.com/sindresorhus/got/issues/1026))
4.  Cannot use the `cache` along with the `body` option ([#&#8203;1021](https://github.com/sindresorhus/got/issues/1021))
5.  Got doesn't throw on leading slashes ([#&#8203;1057](https://github.com/sindresorhus/got/issues/1057))
6.  Got throws when passing already frozen options ([#&#8203;1050](https://github.com/sindresorhus/got/issues/1050))
7.  Cannot type Got options properly due to missing types ([#&#8203;954](https://github.com/sindresorhus/got/issues/954))
8.  `got.mergeOptions(...)` doesn't merge `URLSearchParams` instances ([#&#8203;1011](https://github.com/sindresorhus/got/issues/1011))
9.  The `authorization` header is leaking ([#&#8203;1090](https://togith

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), 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/X-oss-byte/Nextjs).
@RedYetiDev
Copy link
Member

const http = require('http');

const request = http.get('http://httpbin.org/anything', response => {
    setTimeout(() => {
        console.log(`request.destroyed = ${request.destroyed}`);
        console.log(`response.destroyed = ${response.destroyed}`);
        
        response.destroy(new Error('failure'));
    }, 1000);
});
request.destroyed = false
response.destroyed = false
node:events:498
      throw er; // Unhandled 'error' event
      ^

Error: failure
    at Timeout._onTimeout (/XXX/repro.js:8:26)
    at listOnTimeout (node:internal/timers:581:17)
    at process.processTimers (node:internal/timers:519:7)
Emitted 'error' event on ClientRequest instance at:
    at Socket.socketErrorListener (node:_http_client:502:9)
    at Socket.emit (node:events:532:35)
    at emitErrorNT (node:internal/streams/destroy:170:8)
    at emitErrorCloseNT (node:internal/streams/destroy:129:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Node.js v22.4.1

AFAICT,this is no longer reproducible. If you disagree, feel free to re-open.

@RedYetiDev RedYetiDev closed this as not planned Won't fix, can't repro, duplicate, stale Jul 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
http Issues or PRs related to the http subsystem.
Projects
None yet
Development

No branches or pull requests

4 participants