reflex-search 1.5.2 β†’ 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/node_modules/.package-lock.json +15 -15
  2. package/node_modules/axios/CHANGELOG.md +126 -1
  3. package/node_modules/axios/README.md +390 -257
  4. package/node_modules/axios/dist/axios.js +511 -154
  5. package/node_modules/axios/dist/axios.min.js +3 -3
  6. package/node_modules/axios/dist/axios.min.js.map +1 -1
  7. package/node_modules/axios/dist/browser/axios.cjs +537 -124
  8. package/node_modules/axios/dist/esm/axios.js +537 -124
  9. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  10. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  11. package/node_modules/axios/dist/node/axios.cjs +753 -226
  12. package/node_modules/axios/index.d.cts +27 -4
  13. package/node_modules/axios/index.d.ts +23 -2
  14. package/node_modules/axios/lib/adapters/adapters.js +1 -1
  15. package/node_modules/axios/lib/adapters/fetch.js +217 -47
  16. package/node_modules/axios/lib/adapters/http.js +274 -169
  17. package/node_modules/axios/lib/adapters/xhr.js +1 -0
  18. package/node_modules/axios/lib/core/Axios.js +4 -2
  19. package/node_modules/axios/lib/core/AxiosError.js +13 -1
  20. package/node_modules/axios/lib/core/AxiosHeaders.js +12 -9
  21. package/node_modules/axios/lib/core/buildFullPath.js +29 -1
  22. package/node_modules/axios/lib/core/mergeConfig.js +35 -0
  23. package/node_modules/axios/lib/defaults/transitional.js +2 -0
  24. package/node_modules/axios/lib/env/data.js +1 -1
  25. package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -3
  26. package/node_modules/axios/lib/helpers/Http2Sessions.js +119 -0
  27. package/node_modules/axios/lib/helpers/buildURL.js +7 -4
  28. package/node_modules/axios/lib/helpers/composeSignals.js +1 -1
  29. package/node_modules/axios/lib/helpers/cookies.js +5 -1
  30. package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +16 -11
  31. package/node_modules/axios/lib/helpers/formDataToJSON.js +25 -3
  32. package/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  33. package/node_modules/axios/lib/helpers/fromDataURI.js +4 -2
  34. package/node_modules/axios/lib/helpers/resolveConfig.js +26 -13
  35. package/node_modules/axios/lib/helpers/shouldBypassProxy.js +33 -1
  36. package/node_modules/axios/lib/helpers/toFormData.js +48 -12
  37. package/node_modules/axios/lib/helpers/validator.js +1 -1
  38. package/node_modules/axios/lib/utils.js +97 -12
  39. package/node_modules/axios/package.json +29 -13
  40. package/node_modules/brace-expansion/dist/commonjs/index.js +24 -14
  41. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  42. package/node_modules/brace-expansion/dist/esm/index.js +24 -14
  43. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  44. package/node_modules/brace-expansion/package.json +2 -2
  45. package/node_modules/form-data/CHANGELOG.md +29 -2
  46. package/node_modules/form-data/README.md +4 -4
  47. package/node_modules/form-data/lib/form_data.js +14 -2
  48. package/node_modules/form-data/package.json +7 -7
  49. package/node_modules/hasown/CHANGELOG.md +18 -0
  50. package/node_modules/hasown/eslint.config.mjs +6 -0
  51. package/node_modules/hasown/package.json +13 -14
  52. package/npm-shrinkwrap.json +16 -16
  53. package/package.json +2 -2
  54. package/node_modules/axios/dist/axios.js.map +0 -1
  55. package/node_modules/axios/dist/browser/axios.cjs.map +0 -1
  56. package/node_modules/axios/dist/esm/axios.js.map +0 -1
  57. package/node_modules/axios/dist/node/axios.cjs.map +0 -1
  58. package/node_modules/hasown/.eslintrc +0 -5
@@ -29,27 +29,10 @@
29
29
  </td>
30
30
  <td align="center" width="50%">
31
31
  <a
32
- href="https://hopper.security/?utm_source&#x3D;axios&amp;utm_medium&#x3D;readme_sponsorlist&amp;utm_campaign&#x3D;sponsorship"
33
- style="padding: 10px; display: inline-block"
32
+ href="https://opencollective.com/axios/contribute"
34
33
  target="_blank"
34
+ >πŸ’œ Become a sponsor</a
35
35
  >
36
- <img
37
- width="90px"
38
- height="90px"
39
- src="https://images.opencollective.com/hopper-security/c4f7de2/avatar.png"
40
- alt="Hopper Security"
41
- />
42
- </a>
43
- <p align="center">
44
- Hopper provides a secure, open-source registry where every component is verified against malware and continuously remediated for vulnerabilities across all versions. In simple terms, Hopper removes the need to manage software supply chain risk altogether.
45
- </p>
46
- <p align="center">
47
- <a
48
- href="https://hopper.security/?utm_source&#x3D;axios&amp;utm_medium&#x3D;readme_sponsorlist&amp;utm_campaign&#x3D;sponsorship"
49
- target="_blank"
50
- ><b>hopper.security</b></a
51
- >
52
- </p>
53
36
  </td>
54
37
  </tr>
55
38
  </table>
@@ -142,7 +125,7 @@
142
125
  </a>
143
126
  <p
144
127
  align="center"
145
- title="Hi, we&#x27;re Descope! We are building something in the authentication space for app developers and can’t wait to place it in your hands."
128
+ title="Hi, we&#x27;re Descope! We are building something in the authentication space for app developers and can't wait to place it in your hands."
146
129
  >
147
130
  Reduce user friction, prevent account takeover, and get a 360Β° view of your customer and agentic identities with the Descope External IAM platform.
148
131
  </p>
@@ -250,7 +233,7 @@
250
233
  <p
251
234
  align="center"
252
235
  >
253
- At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rated world&#39;s #1 IG service since 2012.
236
+ At Buzzoid, you can buy Instagram followers through a short checkout flow with safety controls. Rated world&#39;s #1 IG service since 2012.
254
237
  </p>
255
238
  <p align="center">
256
239
  <a
@@ -288,15 +271,33 @@
288
271
  </td>
289
272
  <td align="center" width="33.333333333333336%">
290
273
  <a
291
- href="https://opencollective.com/axios/contribute"
274
+ href="https://global.fun88.com/?utm_source=axios_docs_website&utm_medium=website&utm_campaign=axios_open_collective_sponsorship"
275
+ style="padding: 10px; display: inline-block"
292
276
  target="_blank"
293
- >πŸ’œ Become a sponsor</a
294
277
  >
278
+ <img
279
+ width="71px"
280
+ height="70px"
281
+ src="https://images.opencollective.com/fun88-official/bf2843c/logo.png"
282
+ alt="Fun 88"
283
+ />
284
+ </a>
285
+ <p
286
+ align="center"
287
+ >
288
+ Fun88 is a global online gambling and betting brand founded in 2009, offering a wide range of services including sports betting, live casino games, slots, and virtual gaming.
289
+ </p>
290
+ <p align="center">
291
+ <a
292
+ href="https://global.fun88.com/?utm_source=axios_docs_website&utm_medium=website&utm_campaign=axios_open_collective_sponsorship"
293
+ target="_blank"
294
+ ><b>global.fun88.com</b></a
295
+ >
296
+ </p>
295
297
  </td>
296
298
  </tr>
297
299
  </table>
298
300
 
299
-
300
301
  <!--<div>marker</div>-->
301
302
 
302
303
  <br><br>
@@ -315,62 +316,61 @@
315
316
  <div align="center">
316
317
 
317
318
  [![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios)
318
- [![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios)
319
319
  [![Build status](https://img.shields.io/github/actions/workflow/status/axios/axios/ci.yml?branch=v1.x&label=CI&logo=github&style=flat-square)](https://github.com/axios/axios/actions/workflows/ci.yml)
320
320
  [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod&style=flat-square)](https://gitpod.io/#https://github.com/axios/axios)
321
- [![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios)
322
321
  [![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=axios&query=$.install.pretty&label=install%20size&style=flat-square)](https://packagephobia.now.sh/result?p=axios)
323
322
  [![npm bundle size](https://img.shields.io/bundlephobia/minzip/axios?style=flat-square)](https://bundlephobia.com/package/axios@latest)
324
323
  [![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](https://npm-stat.com/charts.html?package=axios)
325
324
  [![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios)
326
325
  [![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios)
327
326
  [![Contributors](https://img.shields.io/github/contributors/axios/axios.svg?style=flat-square)](CONTRIBUTORS.md)
327
+ [![Agent Friendly](https://agentfriendlycode.com/api/badge/github/axios/axios.svg)](https://agentfriendlycode.com/repo/32)
328
328
 
329
329
  </div>
330
330
 
331
- ## Table of Contents
331
+ ## Table of contents
332
332
 
333
333
  - [Features](#features)
334
- - [Browser Support](#browser-support)
334
+ - [Browser support](#browser-support)
335
335
  - [Installing](#installing)
336
336
  - [Package manager](#package-manager)
337
337
  - [CDN](#cdn)
338
338
  - [Example](#example)
339
339
  - [Axios API](#axios-api)
340
340
  - [Request method aliases](#request-method-aliases)
341
- - [Concurrency πŸ‘Ž](#concurrency-deprecated)
341
+ - [Concurrency](#concurrency-deprecated)
342
342
  - [Creating an instance](#creating-an-instance)
343
343
  - [Instance methods](#instance-methods)
344
- - [Request Config](#request-config)
345
- - [Response Schema](#response-schema)
346
- - [Config Defaults](#config-defaults)
344
+ - [Request config](#request-config)
345
+ - [Response schema](#response-schema)
346
+ - [Config defaults](#config-defaults)
347
347
  - [Global axios defaults](#global-axios-defaults)
348
348
  - [Custom instance defaults](#custom-instance-defaults)
349
349
  - [Config order of precedence](#config-order-of-precedence)
350
350
  - [Interceptors](#interceptors)
351
- - [Multiple Interceptors](#multiple-interceptors)
352
- - [Handling Errors](#handling-errors)
353
- - [Handling Timeouts](#handling-timeouts)
351
+ - [Multiple interceptors](#multiple-interceptors)
352
+ - [Handling errors](#handling-errors)
353
+ - [Handling timeouts](#handling-timeouts)
354
354
  - [Cancellation](#cancellation)
355
355
  - [AbortController](#abortcontroller)
356
- - [CancelToken πŸ‘Ž](#canceltoken-deprecated)
356
+ - [CancelToken](#canceltoken-deprecated)
357
357
  - [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format)
358
358
  - [URLSearchParams](#urlsearchparams)
359
359
  - [Query string](#query-string-older-browsers)
360
- - [πŸ†• Automatic serialization](#-automatic-serialization-to-urlsearchparams)
360
+ - [Automatic serialization](#automatic-serialization-to-urlsearchparams)
361
361
  - [Using multipart/form-data format](#using-multipartform-data-format)
362
362
  - [FormData](#formdata)
363
- - [πŸ†• Automatic serialization](#-automatic-serialization-to-formdata)
364
- - [Files Posting](#files-posting)
365
- - [HTML Form Posting](#-html-form-posting-browser)
366
- - [πŸ†• Progress capturing](#-progress-capturing)
367
- - [πŸ†• Rate limiting](#-rate-limiting)
368
- - [πŸ†• AxiosHeaders](#-axiosheaders)
369
- - [πŸ”₯ Fetch adapter](#-fetch-adapter)
370
- - [πŸ”₯ Custom fetch](#-custom-fetch)
371
- - [πŸ”₯ Using with Tauri](#-using-with-tauri)
372
- - [πŸ”₯ Using with SvelteKit](#-using-with-sveltekit)
373
- - [πŸ”₯ HTTP2](#-http2)
363
+ - [Automatic serialization](#automatic-serialization-to-formdata)
364
+ - [Posting files](#posting-files)
365
+ - [HTML form posting](#html-form-posting-browser)
366
+ - [Progress capturing](#progress-capturing)
367
+ - [Rate limiting](#rate-limiting)
368
+ - [AxiosHeaders](#axiosheaders)
369
+ - [Fetch adapter](#fetch-adapter)
370
+ - [Custom fetch](#custom-fetch)
371
+ - [Using with Tauri](#using-with-tauri)
372
+ - [Using with SvelteKit](#using-with-sveltekit)
373
+ - [HTTP/2 support](#http2-support)
374
374
  - [Semver](#semver)
375
375
  - [Promises](#promises)
376
376
  - [TypeScript](#typescript)
@@ -382,17 +382,17 @@
382
382
 
383
383
  ## Features
384
384
 
385
- - **Browser Requests:** Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) directly from the browser.
386
- - **Node.js Requests:** Make [http](https://nodejs.org/api/http.html) requests from Node.js environments.
387
- - **Promise-based:** Fully supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API for easier asynchronous code.
388
- - **Interceptors:** Intercept requests and responses to add custom logic or transform data.
389
- - **Data Transformation:** Transform request and response data automatically.
390
- - **Request Cancellation:** Cancel requests using built-in mechanisms.
391
- - **Automatic JSON Handling:** Automatically serializes and parses [JSON](https://www.json.org/json-en.html) data.
392
- - **Form Serialization:** πŸ†• Automatically serializes data objects to `multipart/form-data` or `x-www-form-urlencoded` formats.
393
- - **XSRF Protection:** Client-side support to protect against [Cross-Site Request Forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery).
385
+ - Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser.
386
+ - Make [http](https://nodejs.org/api/http.html) requests from Node.js.
387
+ - Use the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API for asynchronous request handling.
388
+ - Intercept requests and responses to add custom logic or transform data.
389
+ - Transform request and response data.
390
+ - Cancel requests with built-in cancellation APIs.
391
+ - Serialize and parse [JSON](https://www.json.org/json-en.html) data.
392
+ - Serialize data objects to `multipart/form-data` or `application/x-www-form-urlencoded`.
393
+ - Add client-side protection against [Cross-Site Request Forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery).
394
394
 
395
- ## Browser Support
395
+ ## Browser support
396
396
 
397
397
  | Chrome | Firefox | Safari | Opera | Edge |
398
398
  | :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------: |
@@ -429,7 +429,13 @@ Using bun:
429
429
  $ bun add axios
430
430
  ```
431
431
 
432
- Once the package is installed, you can import the library using `import` or `require` approach:
432
+ Using Deno:
433
+
434
+ ```bash
435
+ $ deno add axios
436
+ ```
437
+
438
+ Once the package is installed, import it with `import` or `require`:
433
439
 
434
440
  ```js
435
441
  import axios, { isCancel, AxiosError } from 'axios';
@@ -451,14 +457,13 @@ const axios = require('axios');
451
457
  console.log(axios.isCancel('something'));
452
458
  ```
453
459
 
454
- For some bundlers and some ES6 linters you may need to do the following:
460
+ Some bundlers and ES6 linters need this form:
455
461
 
456
462
  ```js
457
463
  import { default as axios } from 'axios';
458
464
  ```
459
465
 
460
- For cases where something went wrong when trying to import a module into a custom or legacy environment,
461
- you can try importing the module package directly:
466
+ In custom or legacy environments, you can import the bundle directly:
462
467
 
463
468
  ```js
464
469
  const axios = require('axios/dist/browser/axios.cjs'); // browser commonJS bundle (ES2017)
@@ -498,7 +503,7 @@ axios
498
503
  params: {
499
504
  ID: 12345,
500
505
  },
501
- timeout: 5000, // 5 seconds β€” see "Handling Timeouts" below for matching error handling
506
+ timeout: 5000, // 5 seconds. See "Handling Timeouts" below for matching error handling
502
507
  })
503
508
  .then(function (response) {
504
509
  console.log(response);
@@ -513,26 +518,26 @@ axios
513
518
  // Want to use async/await? Add the `async` keyword to your outer function/method.
514
519
  async function getUser() {
515
520
  try {
516
- // Example: GET request with query parameters
517
- const response = await axios.get('/user', {
518
- params: {
519
- ID: 12345
520
- }
521
- });
521
+ // Example: GET request with query parameters
522
+ const response = await axios.get('/user', {
523
+ params: {
524
+ ID: 12345,
525
+ },
526
+ });
522
527
 
523
- // Using the `params` option improves readability and automatically formats query strings
528
+ // Using the `params` option improves readability and automatically formats query strings
524
529
 
525
- console.log(response);
530
+ console.log(response);
526
531
  } catch (error) {
527
532
  console.error(error);
528
533
  }
529
534
  }
530
535
  ```
531
536
 
532
- > **Note**: Set a `timeout` in production β€” without one, a stalled request can hang
537
+ > Note: Set a `timeout` in production. Without one, a stalled request can hang
533
538
  > indefinitely. See [Handling Timeouts](#handling-timeouts) for the matching error handling.
534
539
 
535
- > **Note**: `async/await` is part of ECMAScript 2017 and is not supported in Internet
540
+ > Note: `async/await` is part of ECMAScript 2017 and is not supported in Internet
536
541
  > Explorer and older browsers, so use with caution.
537
542
 
538
543
  Performing a `POST` request
@@ -617,13 +622,13 @@ For convenience, aliases have been provided for all common request methods.
617
622
 
618
623
  ##### axios.patch(url[, data[, config]])
619
624
 
620
- ###### NOTE
625
+ ###### Note
621
626
 
622
627
  When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config.
623
628
 
624
- ### Concurrency (Deprecated)
629
+ ### Concurrency (deprecated)
625
630
 
626
- Please use `Promise.all` to replace the below functions.
631
+ Use `Promise.all` instead of these helpers.
627
632
 
628
633
  Helper functions for dealing with concurrent requests.
629
634
 
@@ -646,7 +651,7 @@ const instance = axios.create({
646
651
 
647
652
  ### Instance methods
648
653
 
649
- The available instance methods are listed below. The specified config will be merged with the instance config.
654
+ The following instance methods are available. Axios merges the specified config with the instance config.
650
655
 
651
656
  ##### axios#request(config)
652
657
 
@@ -666,11 +671,11 @@ The available instance methods are listed below. The specified config will be me
666
671
 
667
672
  ##### axios#getUri([config])
668
673
 
669
- ## Request Config
674
+ ## Request config
670
675
 
671
- ### ⚠️ Security notice: decompression-bomb protection is opt-in
676
+ ### Security notice: decompression-bomb protection is opt-in
672
677
 
673
- By default `maxContentLength` and `maxBodyLength` are `-1` (unlimited). A malicious or compromised server can return a tiny gzip/deflate/brotli body that expands to gigabytes and exhaust the Node.js process.
678
+ By default `maxContentLength` and `maxBodyLength` are `-1` (unlimited). A malicious or compromised server can return a tiny gzip/deflate/brotli/zstd body that expands to gigabytes and exhaust the Node.js process.
674
679
 
675
680
  If you call servers you do not fully trust, **set a cap**:
676
681
 
@@ -681,17 +686,17 @@ axios.defaults.maxBodyLength = 10 * 1024 * 1024;
681
686
 
682
687
  See the [security guide](https://axios.rest/pages/misc/security.html) for details.
683
688
 
684
- These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified.
689
+ These config options are available for requests. Only `url` is required. Requests default to `GET` when `method` is not set.
685
690
 
686
691
  ```js
687
692
  {
688
- // `url` is the server URL that will be used for the request
693
+ // `url` is the server URL for the request
689
694
  url: '/user',
690
695
 
691
696
  // `method` is the request method to be used when making the request
692
697
  method: 'get', // default
693
698
 
694
- // `baseURL` will be prepended to `url` unless `url` is absolute and the option `allowAbsoluteUrls` is set to true.
699
+ // Axios prepends `baseURL` to `url` unless `url` is absolute and `allowAbsoluteUrls` is set to true.
695
700
  // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
696
701
  // to the methods of that instance.
697
702
  baseURL: 'https://some-domain.com/api/',
@@ -720,7 +725,7 @@ These are the available config options for making requests. Only the `url` is re
720
725
  return data;
721
726
  }],
722
727
 
723
- // `parseReviver` is an optional function that will be passed as the
728
+ // `parseReviver` is an optional function passed as the
724
729
  // second argument (reviver) to JSON.parse()
725
730
  parseReviver: function (key, value, context) {
726
731
  // In modern environments, context.source provides the raw JSON string
@@ -770,9 +775,12 @@ These are the available config options for making requests. Only the `url` is re
770
775
 
771
776
  // `data` is the data to be sent as the request body
772
777
  // Only applicable for request methods 'PUT', 'POST', 'DELETE', and 'PATCH'
778
+ // `data` is request-specific: axios does not inherit or deep-merge it from defaults.
779
+ // To add shared body fields, use a request interceptor or transformRequest.
773
780
  // When no `transformRequest` is set, it must be of one of the following types:
774
781
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
775
782
  // - Browser only: FormData, File, Blob
783
+ // - React Native: FormData
776
784
  // - Node only: Stream, Buffer, FormData (form-data package)
777
785
  data: {
778
786
  firstName: 'Fred'
@@ -789,7 +797,7 @@ These are the available config options for making requests. Only the `url` is re
789
797
  data: 'Country=Brasil&City=Belo Horizonte',
790
798
 
791
799
  // `timeout` specifies the number of milliseconds before the request times out.
792
- // If the request takes longer than `timeout`, the request will be aborted.
800
+ // If the request takes longer than `timeout`, Axios aborts it.
793
801
  timeout: 1000, // default is `0` (no timeout)
794
802
 
795
803
  // `withCredentials` indicates whether or not cross-site Access-Control requests
@@ -810,6 +818,12 @@ These are the available config options for making requests. Only the `url` is re
810
818
  // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
811
819
  // This will set an `Authorization` header, overwriting any existing
812
820
  // `Authorization` custom headers you have set using `headers`.
821
+ // If `auth` is omitted, the Node.js HTTP and fetch adapters can read
822
+ // HTTP Basic auth credentials from the request URL, for example
823
+ // `https://user:pass@example.com`. Axios decodes percent-encoded URL
824
+ // credentials, and `auth` takes precedence over URL-embedded credentials.
825
+ // The Node.js HTTP adapter preserves Basic auth on same-origin redirects
826
+ // and strips it on cross-origin redirects.
813
827
  // Please note that only HTTP Basic auth is configurable through this parameter.
814
828
  // For Bearer tokens and such, use `Authorization` custom headers instead.
815
829
  auth: {
@@ -871,10 +885,12 @@ These are the available config options for making requests. Only the `url` is re
871
885
  // Do whatever you want with the Axios progress event
872
886
  },
873
887
 
874
- // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js
888
+ // `maxContentLength` defines the max size of the response content in bytes.
889
+ // It is enforced by the Node.js HTTP adapter and the fetch adapter.
875
890
  maxContentLength: 2000,
876
891
 
877
- // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed
892
+ // `maxBodyLength` defines the max size of the request content in bytes.
893
+ // It is enforced by the Node.js HTTP adapter and the fetch adapter when the body length can be determined.
878
894
  maxBodyLength: 2000,
879
895
 
880
896
  // `redact` masks matching config keys when AxiosError#toJSON() is called.
@@ -882,18 +898,26 @@ These are the available config options for making requests. Only the `url` is re
882
898
  redact: ['authorization', 'password'],
883
899
 
884
900
  // `validateStatus` defines whether to resolve or reject the promise for a given
885
- // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
886
- // or `undefined`), the promise will be resolved; otherwise, the promise will be
887
- // rejected.
901
+ // HTTP response status code. If `validateStatus` returns `true` or is set to
902
+ // `null`, Axios resolves the promise; otherwise, Axios rejects it.
903
+ // Explicit `validateStatus: undefined` resolves every status by default for
904
+ // backward compatibility. Set `transitional.validateStatusUndefinedResolves`
905
+ // to `false` to make explicit `undefined` behave as if this option was omitted.
888
906
  validateStatus: function (status) {
889
907
  return status >= 200 && status < 300; // default
890
908
  },
891
909
 
892
910
  // `maxRedirects` defines the maximum number of redirects to follow in node.js.
893
- // If set to 0, no redirects will be followed.
911
+ // If set to 0, Axios follows no redirects.
894
912
  maxRedirects: 21, // default
895
913
 
896
- // `beforeRedirect` defines a function that will be called before redirect.
914
+ // `sensitiveHeaders` (Node only option) lists custom secret-bearing headers
915
+ // (such as `X-API-Key`) to remove from cross-origin redirects. Matching is
916
+ // case-insensitive. Same-origin redirects keep these headers. If
917
+ // `maxRedirects` is 0, this option is not used.
918
+ sensitiveHeaders: ['X-API-Key'],
919
+
920
+ // `beforeRedirect` defines a function that Axios calls before redirect.
897
921
  // Use this to adjust the request options upon redirecting,
898
922
  // to inspect the latest response headers,
899
923
  // or to cancel the request by throwing an error
@@ -909,16 +933,10 @@ These are the available config options for making requests. Only the `url` is re
909
933
  },
910
934
  // Security note:
911
935
  // The `beforeRedirect` hook runs after sensitive headers are stripped during redirects.
912
- //The `follow-redirects` library removes credentials on protocol downgrade (HTTPS β†’ HTTP) for security.
913
- //Since `beforeRedirect` runs after this, re-injecting credentials without checking the protocol can expose sensitive data.
914
- //Always ensure credentials are only added for trusted HTTPS destinations.
915
-
916
- // Security note:
917
- // The beforeRedirect hook runs after sensitive headers are stripped during redirects.
918
- // Re-injecting credentials without checking the destination can expose sensitive data.
919
- // Only add credentials for trusted HTTPS destinations.
920
- // Avoid re-adding credentials on downgraded redirects.
921
-
936
+ // `follow-redirects` removes credentials on protocol downgrades
937
+ // (HTTPS to HTTP). Because `beforeRedirect` runs after that step,
938
+ // re-injecting credentials without checking the destination can expose
939
+ // sensitive data. Only add credentials for trusted HTTPS destinations.
922
940
 
923
941
  // `socketPath` defines a UNIX Socket to be used in node.js.
924
942
  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
@@ -937,10 +955,10 @@ These are the available config options for making requests. Only the `url` is re
937
955
  // `ERR_BAD_OPTION_VALUE`. When null/undefined, no restriction is applied.
938
956
  allowedSocketPaths: null, // default
939
957
 
940
- // `transport` determines the transport method that will be used to make the request.
941
- // If defined, it will be used. Otherwise, if `maxRedirects` is 0,
942
- // the default `http` or `https` library will be used, depending on the protocol specified in `protocol`.
943
- // Otherwise, the `httpFollow` or `httpsFollow` library will be used, again depending on the protocol,
958
+ // `transport` determines the transport method for the request.
959
+ // If defined, Axios uses it. Otherwise, if `maxRedirects` is 0,
960
+ // Axios uses the default `http` or `https` library, depending on the protocol specified in `protocol`.
961
+ // Otherwise, Axios uses the `httpFollow` or `httpsFollow` library, again depending on the protocol,
944
962
  // which can handle redirects.
945
963
  transport: undefined, // default
946
964
 
@@ -958,6 +976,12 @@ These are the available config options for making requests. Only the `url` is re
958
976
  // for your proxy configuration, you can also define a `no_proxy` environment
959
977
  // variable as a comma-separated list of domains that should not be proxied.
960
978
  // Use `false` to disable proxies, ignoring environment variables.
979
+ // On Node.js versions with native environment proxy support, axios defers
980
+ // environment proxy handling to Node when the selected agent has `proxyEnv`
981
+ // enabled, including processes started with `NODE_USE_ENV_PROXY=1`,
982
+ // `--use-env-proxy`, or `NODE_OPTIONS=--use-env-proxy`. Custom agents without
983
+ // `proxyEnv` continue to use axios environment proxy resolution. Explicit
984
+ // `proxy` config is still handled by axios.
961
985
  // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
962
986
  // supplies credentials.
963
987
  // For `http://` targets, axios sends the request to the proxy in
@@ -966,12 +990,15 @@ These are the available config options for making requests. Only the `url` is re
966
990
  // For `https://` targets, axios establishes a CONNECT tunnel through the
967
991
  // proxy and performs TLS end-to-end with the origin; `Proxy-Authorization`
968
992
  // is sent on the CONNECT request only, never on the wrapped TLS request,
969
- // so the proxy never sees the URL, headers, or body. Supply a custom
970
- // `httpsAgent` to opt out of automatic CONNECT tunneling.
993
+ // so the proxy never sees the URL, headers, or body. Axios forwards
994
+ // `httpsAgent` TLS options such as `ca`, `cert`, `key`, and
995
+ // `rejectUnauthorized` to the generated tunneling agent, so they still apply
996
+ // to the origin TLS connection.
997
+ // If you supply an `HttpsProxyAgent`, axios leaves tunneling to that agent.
971
998
  // If the proxy server uses HTTPS, then you must set the protocol to `https`.
972
999
  // A user-supplied `Host` header in `headers` is preserved when forwarding
973
1000
  // through a proxy (case-insensitive match on `host`/`Host`/`HOST`); this
974
- // lets you target a virtual host that differs from the request URL β€” for
1001
+ // lets you target a virtual host that differs from the request URL, for
975
1002
  // example, hitting `127.0.0.1:4000` while having the proxy treat the
976
1003
  // request as `example.com`. If no `Host` header is supplied, axios
977
1004
  // defaults it to the request URL's `hostname:port` as before. The Host
@@ -1000,6 +1027,8 @@ These are the available config options for making requests. Only the `url` is re
1000
1027
  // `decompress` indicates whether or not the response body should be decompressed
1001
1028
  // automatically. If set to `true` will also remove the 'content-encoding' header
1002
1029
  // from the responses objects of all decompressed responses
1030
+ // Axios supports gzip, deflate, brotli, and zstd when the current Node.js
1031
+ // runtime provides the corresponding zlib decompressor.
1003
1032
  // - Node only (XHR cannot turn off decompression)
1004
1033
  decompress: true, // default
1005
1034
 
@@ -1029,6 +1058,16 @@ These are the available config options for making requests. Only the `url` is re
1029
1058
  // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts
1030
1059
  clarifyTimeoutError: false,
1031
1060
 
1061
+ // keep explicit `validateStatus: undefined` resolving every response status
1062
+ // for backward compatibility. Set to false to make explicit undefined behave
1063
+ // as if validateStatus was omitted.
1064
+ validateStatusUndefinedResolves: true,
1065
+
1066
+ // advertise `zstd` in the default Accept-Encoding header when the current
1067
+ // Node.js runtime supports zstd decompression. Axios still decompresses
1068
+ // zstd responses when support exists and `decompress` is true.
1069
+ advertiseZstdAcceptEncoding: false,
1070
+
1032
1071
  // use the legacy interceptor request/response ordering
1033
1072
  legacyInterceptorReqResOrdering: true, // default
1034
1073
  },
@@ -1054,6 +1093,15 @@ These are the available config options for making requests. Only the `url` is re
1054
1093
  }
1055
1094
  ```
1056
1095
 
1096
+ For custom secret-bearing headers in Node.js, list them in `sensitiveHeaders` so Axios removes them when following a redirect to another origin:
1097
+
1098
+ ```js
1099
+ axios.get('https://api.example.com/users', {
1100
+ headers: { 'X-API-Key': 'secret' },
1101
+ sensitiveHeaders: ['X-API-Key'],
1102
+ });
1103
+ ```
1104
+
1057
1105
  ### Strict RFC 3986 percent-encoding for query params
1058
1106
 
1059
1107
  By default, axios decodes `%3A`, `%24`, `%2C` and `%20` back to `:`, `$`, `,` and `+` for readability (the `+` follows the `application/x-www-form-urlencoded` convention for spaces in query strings). These characters are valid in a query component under [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986#section-3.4), so the default output is correct, but some backends require strict percent-encoding and reject the readable form.
@@ -1064,26 +1112,26 @@ Override the default encoder via `paramsSerializer.encode`:
1064
1112
  // Per-request: emit strict RFC 3986 percent-encoding for query values
1065
1113
  axios.get('/foo', {
1066
1114
  params: { filter: JSON.stringify({ startedAt: '2026-01-23' }) },
1067
- paramsSerializer: { encode: encodeURIComponent }
1115
+ paramsSerializer: { encode: encodeURIComponent },
1068
1116
  });
1069
1117
 
1070
1118
  // Or set it on the instance defaults
1071
1119
  const client = axios.create({
1072
- paramsSerializer: { encode: encodeURIComponent }
1120
+ paramsSerializer: { encode: encodeURIComponent },
1073
1121
  });
1074
1122
  ```
1075
1123
 
1076
- ## πŸ”₯ HTTP/2 Support
1124
+ ## HTTP/2 support
1077
1125
 
1078
- Axios has experimental HTTP/2 support available via the Node.js HTTP adapter.
1126
+ Axios has experimental HTTP/2 support in the Node.js HTTP adapter.
1079
1127
 
1080
- Support depends on the runtime environment and Node.js version. Features like redirects and some behaviors may not be fully supported with HTTP/2.
1128
+ Support depends on the runtime environment and Node.js version. Redirects and some adapter behavior may differ from HTTP/1.1.
1081
1129
 
1082
- Options like `httpVersion` and `http2Options` are adapter-specific and may not work consistently across all environments.
1130
+ Options like `httpVersion` and `http2Options` are adapter-specific and may not work the same way in every environment.
1083
1131
 
1084
- If HTTP/2 functionality is required, ensure your runtime environment supports it or consider using alternative libraries or custom adapters.
1132
+ If you need HTTP/2, check runtime support or use a custom adapter.
1085
1133
 
1086
- ## Response Schema
1134
+ ## Response schema
1087
1135
 
1088
1136
  The response to a request contains the following information.
1089
1137
 
@@ -1113,7 +1161,7 @@ The response to a request contains the following information.
1113
1161
  }
1114
1162
  ```
1115
1163
 
1116
- When using `then`, you will receive the response as follows:
1164
+ When using `then`, you receive the response like this:
1117
1165
 
1118
1166
  ```js
1119
1167
  const response = await axios.get('/user/12345');
@@ -1124,18 +1172,18 @@ console.log(response.headers);
1124
1172
  console.log(response.config);
1125
1173
  ```
1126
1174
 
1127
- When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section.
1175
+ When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as the second parameter of `then`, read the response from the `error` object. See [Handling errors](#handling-errors).
1128
1176
 
1129
- ## Config Defaults
1177
+ ## Config defaults
1130
1178
 
1131
- You can specify config defaults that will be applied to every request.
1179
+ Config defaults apply to every request.
1132
1180
 
1133
1181
  ### Global axios defaults
1134
1182
 
1135
1183
  ```js
1136
1184
  axios.defaults.baseURL = 'https://api.example.com';
1137
1185
 
1138
- // Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them.
1186
+ // Important: If you use axios with multiple domains, Axios sends AUTH_TOKEN to all of them.
1139
1187
  // See below for an example using Custom instance defaults instead.
1140
1188
  axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
1141
1189
 
@@ -1156,7 +1204,9 @@ instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
1156
1204
 
1157
1205
  ### Config order of precedence
1158
1206
 
1159
- Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults/index.js](https://github.com/axios/axios/blob/main/lib/defaults/index.js#L49), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example.
1207
+ Axios merges config in this order: library defaults from [lib/defaults/index.js](https://github.com/axios/axios/blob/main/lib/defaults/index.js#L49), the instance `defaults` property, and the request `config` argument. Later values take precedence over earlier ones.
1208
+
1209
+ Some options are request-specific and are only taken from the request `config`. `data` is one of those options: axios does not inherit or deep-merge request bodies from global or instance defaults. If every request needs shared body fields, add them with a request interceptor or `transformRequest`, and scope that logic carefully so sensitive values are not sent to the wrong endpoint.
1160
1210
 
1161
1211
  ```js
1162
1212
  // Create an instance using the config defaults provided by the library
@@ -1258,8 +1308,8 @@ axios.interceptors.request.use(
1258
1308
  ```
1259
1309
 
1260
1310
  If you want to execute a particular interceptor based on a runtime check,
1261
- you can add a `runWhen` function to the options object. The request interceptor will not be executed **if and only if** the return
1262
- of `runWhen` is `false`. The function will be called with the config
1311
+ you can add a `runWhen` function to the options object. The request interceptor will not run **if and only if** the return
1312
+ of `runWhen` is `false`. Axios calls the function with the config
1263
1313
  object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an
1264
1314
  asynchronous request interceptor that only needs to run at certain times.
1265
1315
 
@@ -1277,15 +1327,15 @@ axios.interceptors.request.use(
1277
1327
  );
1278
1328
  ```
1279
1329
 
1280
- > **Note:** The options parameter(having `synchronous` and `runWhen` properties) is only supported for request interceptors at the moment.
1330
+ > Note: The options parameter (with `synchronous` and `runWhen` properties) is only supported for request interceptors at the moment.
1281
1331
 
1282
- ### Interceptor Execution Order
1332
+ ### Interceptor execution order
1283
1333
 
1284
- **Important:** Interceptors have different execution orders depending on their type!
1334
+ Request and response interceptors use different execution orders.
1285
1335
 
1286
- Request interceptors are executed in **reverse order** (LIFO - Last In, First Out). This means the _last_ interceptor added is executed **first**.
1336
+ Request interceptors run in reverse order (LIFO: last in, first out). The last interceptor added runs first.
1287
1337
 
1288
- Response interceptors are executed in the **order they were added** (FIFO - First In, First Out). This means the _first_ interceptor added is executed **first**.
1338
+ Response interceptors run in the order they were added (FIFO: first in, first out). The first interceptor added runs first.
1289
1339
 
1290
1340
  Example:
1291
1341
 
@@ -1314,37 +1364,33 @@ instance.interceptors.response.use(interceptor('Response Interceptor 3'));
1314
1364
  // Response Interceptor 3
1315
1365
  ```
1316
1366
 
1317
- ### Multiple Interceptors
1367
+ ### Multiple interceptors
1318
1368
 
1319
- Given that you add multiple response interceptors
1320
- and when the response was fulfilled
1369
+ When a response is fulfilled and multiple response interceptors are registered:
1321
1370
 
1322
- - then each interceptor is executed
1323
- - then they are executed in the order they were added
1324
- - then only the last interceptor's result is returned
1325
- - then every interceptor receives the result of its predecessor
1326
- - and when the fulfillment-interceptor throws
1327
- - then the following fulfillment-interceptor is not called
1328
- - then the following rejection-interceptor is called
1329
- - once caught, another following fulfill-interceptor is called again (just like in a promise chain).
1371
+ - Each interceptor runs in registration order.
1372
+ - Each interceptor receives the result from the previous interceptor.
1373
+ - The chain returns the result from the last interceptor.
1374
+ - If a fulfillment interceptor throws, Axios skips the next fulfillment interceptor and calls the next rejection interceptor.
1375
+ - After the error is caught, later fulfillment interceptors run again, just like in a promise chain.
1330
1376
 
1331
1377
  Read [the interceptor tests](./test/specs/interceptors.spec.js) to see all this in code.
1332
1378
 
1333
- ## Error Types
1379
+ ## Error types
1334
1380
 
1335
- There are many different axios error messages that can appear which can provide basic information about the specifics of the error and where opportunities may lie in debugging.
1381
+ Axios error messages include details that can help you debug the request.
1336
1382
 
1337
- The general structure of axios errors is as follows:
1383
+ Axios errors use this structure:
1338
1384
  | Property | Definition |
1339
1385
  | -------- | ---------- |
1340
1386
  | message | A quick summary of the error message and the status it failed with. |
1341
1387
  | name | This defines where the error originated from. For axios, it will always be an 'AxiosError'. |
1342
- | stack | Provides the stack trace of the error. |
1388
+ | stack | Stack trace for the error. |
1343
1389
  | config | An axios config object with specific instance configurations defined by the user from when the request was made |
1344
- | code | Represents an axios identified error. The table below lists specific definitions for internal axios error. |
1390
+ | code | Axios error code. The table below lists internal Axios error codes. |
1345
1391
  | status | HTTP response status code. See [here](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) for common HTTP response status code meanings.
1346
1392
 
1347
- Below is a list of potential axios identified error:
1393
+ These are the internal Axios error codes:
1348
1394
 
1349
1395
  | Code | Definition |
1350
1396
  | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -1354,16 +1400,16 @@ Below is a list of potential axios identified error:
1354
1400
  | ERR_DEPRECATED | Deprecated feature or method used in axios. |
1355
1401
  | ERR_INVALID_URL | Invalid URL provided for axios request. |
1356
1402
  | ECONNABORTED | Typically indicates that the request has been timed out (unless `transitional.clarifyTimeoutError` is set) or aborted by the browser or its plugin. |
1357
- | ERR_CANCELED | Feature or method is canceled explicitly by the user using an AbortSignal (or a CancelToken). |
1358
- | ETIMEDOUT | Request timed out due to exceeding the default axios timelimit. `transitional.clarifyTimeoutError` must be set to `true`, otherwise a generic `ECONNABORTED` error will be thrown instead. |
1403
+ | ERR_CANCELED | The user explicitly canceled the request with an AbortSignal or CancelToken. |
1404
+ | ETIMEDOUT | Request timed out after exceeding the configured Axios timeout. Set `transitional.clarifyTimeoutError` to `true`; otherwise Axios throws a generic `ECONNABORTED` error. |
1359
1405
  | ERR_NETWORK | Network-related issue. In the browser, this error can also be caused by a [CORS](https://developer.mozilla.org/ru/docs/Web/HTTP/Guides/CORS) or [Mixed Content](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content) policy violation. The browser does not allow the JS code to clarify the real reason for the error caused by security issues, so please check the console. |
1360
- | ERR_FR_TOO_MANY_REDIRECTS | Request is redirected too many times; exceeds max redirects specified in axios configuration. |
1406
+ | ERR_FR_TOO_MANY_REDIRECTS | Request exceeded the configured maximum number of redirects. |
1361
1407
  | ERR_BAD_RESPONSE | Response cannot be parsed properly or is in an unexpected format. Usually related to a response with `5xx` status code. |
1362
1408
  | ERR_BAD_REQUEST | The request has an unexpected format or is missing required parameters. Usually related to a response with `4xx` status code. |
1363
1409
 
1364
- ## Handling Errors
1410
+ ## Handling errors
1365
1411
 
1366
- The default behavior is to reject every response that returns with a status code that falls out of the range of 2xx and treat it as an error.
1412
+ By default, Axios rejects responses with status codes outside the 2xx range.
1367
1413
 
1368
1414
  ```js
1369
1415
  axios.get('/user/12345').catch(function (error) {
@@ -1386,7 +1432,7 @@ axios.get('/user/12345').catch(function (error) {
1386
1432
  });
1387
1433
  ```
1388
1434
 
1389
- Using the `validateStatus` config option, you can override the default condition (status >= 200 && status < 300) and define HTTP code(s) that should throw an error.
1435
+ Use `validateStatus` to override the default condition (`status >= 200 && status < 300`) and choose which HTTP status codes should reject.
1390
1436
 
1391
1437
  ```js
1392
1438
  axios.get('/user/12345', {
@@ -1396,7 +1442,20 @@ axios.get('/user/12345', {
1396
1442
  });
1397
1443
  ```
1398
1444
 
1399
- Using `toJSON` you get an object with more information about the HTTP error.
1445
+ By default, explicit `validateStatus: undefined` keeps legacy behavior and resolves every response status because `transitional.validateStatusUndefinedResolves` defaults to `true`. Set it to `false` to make explicit `validateStatus: undefined` behave like the option was omitted, so Axios uses the configured/default validator and rejects non-2xx responses by default.
1446
+
1447
+ `validateStatus: null` still accepts every response status. If you disable the transitional behavior and intentionally want all statuses to resolve, use `null` or `() => true`.
1448
+
1449
+ ```js
1450
+ axios.get('/user/12345', {
1451
+ validateStatus: undefined,
1452
+ transitional: {
1453
+ validateStatusUndefinedResolves: false,
1454
+ },
1455
+ });
1456
+ ```
1457
+
1458
+ Use `toJSON` to get more information about the HTTP error.
1400
1459
 
1401
1460
  ```js
1402
1461
  axios.get('/user/12345').catch(function (error) {
@@ -1407,15 +1466,17 @@ axios.get('/user/12345').catch(function (error) {
1407
1466
  To avoid logging secrets from `error.config`, pass a `redact` array in the request config. Matching config keys are masked case-insensitively at any depth when `AxiosError#toJSON()` is called.
1408
1467
 
1409
1468
  ```js
1410
- axios.get('/user/12345', {
1411
- headers: { Authorization: 'Bearer token' },
1412
- redact: ['authorization']
1413
- }).catch(function (error) {
1414
- console.log(error.toJSON().config.headers.Authorization); // [REDACTED ****]
1415
- });
1469
+ axios
1470
+ .get('/user/12345', {
1471
+ headers: { Authorization: 'Bearer token' },
1472
+ redact: ['authorization'],
1473
+ })
1474
+ .catch(function (error) {
1475
+ console.log(error.toJSON().config.headers.Authorization); // [REDACTED ****]
1476
+ });
1416
1477
  ```
1417
1478
 
1418
- ## Handling Timeouts
1479
+ ## Handling timeouts
1419
1480
 
1420
1481
  ```js
1421
1482
  async function fetchWithTimeout() {
@@ -1449,7 +1510,7 @@ async function fetchWithTimeout() {
1449
1510
 
1450
1511
  ### AbortController
1451
1512
 
1452
- Starting from `v0.22.0` Axios supports AbortController to cancel requests in a fetch API way:
1513
+ Since `v0.22.0`, Axios supports AbortController:
1453
1514
 
1454
1515
  ```js
1455
1516
  const controller = new AbortController();
@@ -1465,15 +1526,15 @@ axios
1465
1526
  controller.abort();
1466
1527
  ```
1467
1528
 
1468
- ### CancelToken `πŸ‘Ždeprecated`
1529
+ ### CancelToken (deprecated)
1469
1530
 
1470
1531
  You can also cancel a request using a _CancelToken_.
1471
1532
 
1472
1533
  > The axios cancel token API is based on the withdrawn [cancellable promises proposal](https://github.com/tc39/proposal-cancelable-promises).
1473
1534
 
1474
- > This API is deprecated since v0.22.0 and shouldn't be used in new projects
1535
+ > This API is deprecated since v0.22.0 and should not be used in new projects.
1475
1536
 
1476
- You can create a cancel token using the `CancelToken.source` factory as shown below:
1537
+ Create a cancel token with the `CancelToken.source` factory:
1477
1538
 
1478
1539
  ```js
1479
1540
  const CancelToken = axios.CancelToken;
@@ -1505,7 +1566,7 @@ axios.post(
1505
1566
  source.cancel('Operation canceled by the user.');
1506
1567
  ```
1507
1568
 
1508
- You can also create a cancel token by passing an executor function to the `CancelToken` constructor:
1569
+ You can also pass an executor function to the `CancelToken` constructor:
1509
1570
 
1510
1571
  ```js
1511
1572
  const CancelToken = axios.CancelToken;
@@ -1522,16 +1583,49 @@ axios.get('/user/12345', {
1522
1583
  cancel();
1523
1584
  ```
1524
1585
 
1525
- > **Note:** you can cancel several requests with the same cancel token/abort controller.
1526
- > If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make a real request.
1586
+ `CancelToken` also exposes low-level helpers for legacy integrations:
1587
+
1588
+ ```js
1589
+ const source = axios.CancelToken.source();
1590
+
1591
+ const listener = (cancel) => {
1592
+ console.log(cancel.message);
1593
+ };
1594
+
1595
+ source.token.subscribe(listener);
1596
+
1597
+ const signal = source.token.toAbortSignal();
1598
+ // Pass `signal` to APIs that accept AbortSignal.
1599
+
1600
+ source.cancel('Operation canceled by the user.');
1601
+ source.token.unsubscribe(listener);
1602
+ ```
1603
+
1604
+ Canceled requests reject with `axios.CanceledError`. The legacy `axios.Cancel` export is an alias of `axios.CanceledError`, and cancellation errors include `__CANCEL__` for `axios.isCancel` compatibility.
1605
+
1606
+ > Note: You can cancel several requests with the same cancel token or abort controller.
1607
+ > If a cancellation token is already cancelled when an Axios request starts, Axios cancels the request immediately without making a real request.
1527
1608
 
1528
1609
  > During the transition period, you can use both cancellation APIs, even for the same request:
1529
1610
 
1611
+ ```js
1612
+ const controller = new AbortController();
1613
+ const source = axios.CancelToken.source();
1614
+
1615
+ axios.get('/user/12345', {
1616
+ cancelToken: source.token,
1617
+ signal: controller.signal,
1618
+ });
1619
+
1620
+ controller.abort();
1621
+ source.cancel('Operation canceled by the user.');
1622
+ ```
1623
+
1530
1624
  ## Using `application/x-www-form-urlencoded` format
1531
1625
 
1532
1626
  ### URLSearchParams
1533
1627
 
1534
- By default, axios serializes JavaScript objects to `JSON`. To send data in the [`application/x-www-form-urlencoded`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) format instead, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API, which is [supported](http://www.caniuse.com/#feat=urlsearchparams) in the vast majority of browsers, and [Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) starting with v10 (released in 2018).
1628
+ By default, axios serializes JavaScript objects to `JSON`. To send data as [`application/x-www-form-urlencoded`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST), use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API. It works in most browsers and in [Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) v10 and later.
1535
1629
 
1536
1630
  ```js
1537
1631
  const params = new URLSearchParams({ foo: 'bar' });
@@ -1539,9 +1633,9 @@ params.append('extraparam', 'value');
1539
1633
  axios.post('/foo', params);
1540
1634
  ```
1541
1635
 
1542
- ### Query string (Older browsers)
1636
+ ### Query string (older browsers)
1543
1637
 
1544
- For compatibility with very old browsers, there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment).
1638
+ For very old browsers, use a [polyfill](https://github.com/WebReflection/url-search-params) and make sure it patches the global environment.
1545
1639
 
1546
1640
  Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library:
1547
1641
 
@@ -1550,7 +1644,7 @@ const qs = require('qs');
1550
1644
  axios.post('/foo', qs.stringify({ bar: 123 }));
1551
1645
  ```
1552
1646
 
1553
- Or in another way (ES6),
1647
+ With ES modules:
1554
1648
 
1555
1649
  ```js
1556
1650
  import qs from 'qs';
@@ -1566,7 +1660,7 @@ axios(options);
1566
1660
 
1567
1661
  ### Older Node.js versions
1568
1662
 
1569
- For older Node.js engines, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows:
1663
+ For older Node.js engines, use the [`querystring`](https://nodejs.org/api/querystring.html) module:
1570
1664
 
1571
1665
  ```js
1572
1666
  const querystring = require('querystring');
@@ -1575,11 +1669,11 @@ axios.post('https://something.com/', querystring.stringify({ foo: 'bar' }));
1575
1669
 
1576
1670
  You can also use the [`qs`](https://github.com/ljharb/qs) library.
1577
1671
 
1578
- > **Note**: The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case.
1672
+ > Note: The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case.
1579
1673
 
1580
- ### πŸ†• Automatic serialization to URLSearchParams
1674
+ ### Automatic serialization to URLSearchParams
1581
1675
 
1582
- Axios will automatically serialize the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded".
1676
+ Axios automatically serializes the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded".
1583
1677
 
1584
1678
  ```js
1585
1679
  const data = {
@@ -1597,7 +1691,7 @@ await axios.postForm('https://postman-echo.com/post', data, {
1597
1691
  });
1598
1692
  ```
1599
1693
 
1600
- The server will handle it as:
1694
+ The server receives these fields:
1601
1695
 
1602
1696
  ```js
1603
1697
  {
@@ -1614,7 +1708,7 @@ The server will handle it as:
1614
1708
  }
1615
1709
  ```
1616
1710
 
1617
- If your backend body-parser (like `body-parser` of `express.js`) supports nested objects decoding, you will get the same object on the server-side automatically
1711
+ If your backend body parser, such as `body-parser` for `express.js`, supports nested object decoding, the server receives the same object structure:
1618
1712
 
1619
1713
  ```js
1620
1714
  const app = express();
@@ -1633,8 +1727,9 @@ server = app.listen(3000);
1633
1727
 
1634
1728
  ### FormData
1635
1729
 
1636
- To send the data as a `multipart/form-data` you need to pass a formData instance as a payload.
1637
- Setting the `Content-Type` header is not required as Axios guesses it based on the payload type.
1730
+ To send data as `multipart/form-data`, pass a FormData instance as the payload.
1731
+ You do not need to set the `Content-Type` header. Axios detects it from the payload type.
1732
+ For browser, web worker, and React Native `FormData`, leave `Content-Type` unset so the runtime can add the multipart boundary.
1638
1733
 
1639
1734
  ```js
1640
1735
  const formData = new FormData();
@@ -1643,7 +1738,7 @@ formData.append('foo', 'bar');
1643
1738
  axios.post('https://httpbin.org/post', formData);
1644
1739
  ```
1645
1740
 
1646
- In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows:
1741
+ In node.js, use the [`form-data`](https://github.com/form-data/form-data) library:
1647
1742
 
1648
1743
  ```js
1649
1744
  const FormData = require('form-data');
@@ -1658,12 +1753,12 @@ axios.post('https://example.com', form);
1658
1753
 
1659
1754
  In node.js, when a `FormData` object provides `getHeaders()`, axios copies all returned headers by default for v1 compatibility. If the `FormData` object is custom or not fully trusted, set `formDataHeaderPolicy: 'content-only'` to copy only `Content-Type` and `Content-Length`, and set any other request headers explicitly with the request `headers` config.
1660
1755
 
1661
- ### πŸ†• Automatic serialization to FormData
1756
+ ### Automatic serialization to FormData
1662
1757
 
1663
- Starting from `v0.27.0`, Axios supports automatic object serialization to a FormData object if the request `Content-Type`
1758
+ Since `v0.27.0`, Axios can serialize an object to FormData if the request `Content-Type`
1664
1759
  header is set to `multipart/form-data`.
1665
1760
 
1666
- The following request will submit the data in a FormData format (Browser & Node.js):
1761
+ This request submits data as FormData in browsers and Node.js:
1667
1762
 
1668
1763
  ```js
1669
1764
  import axios from 'axios';
@@ -1681,10 +1776,9 @@ axios
1681
1776
  .then(({ data }) => console.log(data));
1682
1777
  ```
1683
1778
 
1684
- In the `node.js` build, the ([`form-data`](https://github.com/form-data/form-data)) polyfill is used by default.
1779
+ The Node.js build uses the [`form-data`](https://github.com/form-data/form-data) polyfill by default.
1685
1780
 
1686
- You can overload the FormData class by setting the `env.FormData` config variable,
1687
- but you probably won't need it in most cases:
1781
+ You can override the FormData class with the `env.FormData` config option, but most applications do not need this:
1688
1782
 
1689
1783
  ```js
1690
1784
  const axios = require('axios');
@@ -1703,31 +1797,34 @@ axios
1703
1797
  .then(({ data }) => console.log(data));
1704
1798
  ```
1705
1799
 
1706
- Axios FormData serializer supports some special endings to perform the following operations:
1800
+ The Axios FormData serializer supports these special endings:
1707
1801
 
1708
1802
  - `{}` - serialize the value with JSON.stringify
1709
1803
  - `[]` - unwrap the array-like object as separate fields with the same key
1710
1804
 
1711
- > **Note**: unwrap/expand operation will be used by default on arrays and FileList objects
1805
+ > Note: Arrays and FileList objects are unwrapped by default.
1712
1806
 
1713
1807
  FormData serializer supports additional options via `config.formSerializer: object` property to handle rare cases:
1714
1808
 
1715
- - `visitor: Function` - user-defined visitor function that will be called recursively to serialize the data object
1809
+ - `visitor: Function` - user-defined visitor function that Axios calls recursively to serialize the data object
1716
1810
  to a `FormData` object by following custom rules.
1717
1811
 
1718
1812
  - `dots: boolean = false` - use dot notation instead of brackets to serialize arrays and objects;
1719
1813
 
1720
1814
  - `metaTokens: boolean = true` - add the special ending (e.g `user{}: '{"name": "John"}'`) in the FormData key.
1721
- The back-end body-parser could potentially use this meta-information to automatically parse the value as JSON.
1815
+ A backend body parser can use this meta-information to parse the value as JSON.
1722
1816
 
1723
- - `indexes: null|false|true = false` - controls how indexes will be added to unwrapped keys of `flat` array-like objects.
1817
+ - `indexes: null|false|true = false` - controls how Axios adds indexes to unwrapped keys of `flat` array-like objects.
1724
1818
  - `null` - don't add brackets (`arr: 1`, `arr: 2`, `arr: 3`)
1725
1819
  - `false`(default) - add empty brackets (`arr[]: 1`, `arr[]: 2`, `arr[]: 3`)
1726
1820
  - `true` - add brackets with indexes (`arr[0]: 1`, `arr[1]: 2`, `arr[2]: 3`)
1727
1821
  - `maxDepth: number = 100` - maximum object nesting depth the serializer will recurse into. If the
1728
1822
  input object exceeds this depth, an `AxiosError` with `code: 'ERR_FORM_DATA_DEPTH_EXCEEDED'` is
1729
- thrown instead of overflowing the call stack. This protects server-side applications from DoS
1823
+ thrown instead of overflowing the call stack. This protects server applications from DoS
1730
1824
  attacks via deeply nested payloads. Set to `Infinity` to disable the limit and restore pre-fix behaviour.
1825
+ - `Blob: typeof Blob` - Blob constructor used when converting ArrayBuffer-like values for spec-compliant
1826
+ `FormData`. Override it only for runtimes that provide a compatible `Blob` constructor under a
1827
+ different binding.
1731
1828
 
1732
1829
  ```js
1733
1830
  // Raise the limit for a schema that genuinely nests deeper than 100 levels:
@@ -1737,7 +1834,7 @@ axios.postForm('/api', data, { formSerializer: { maxDepth: 200 } });
1737
1834
  axios.get('/api', { params: data, paramsSerializer: { maxDepth: 200 } });
1738
1835
  ```
1739
1836
 
1740
- Let's say we have an object like this one:
1837
+ Given this object:
1741
1838
 
1742
1839
  ```js
1743
1840
  const obj = {
@@ -1752,7 +1849,7 @@ const obj = {
1752
1849
  };
1753
1850
  ```
1754
1851
 
1755
- The following steps will be executed by the Axios serializer internally:
1852
+ The Axios serializer appends these fields:
1756
1853
 
1757
1854
  ```js
1758
1855
  const formData = new FormData();
@@ -1770,12 +1867,11 @@ formData.append('users[1][surname]', 'Anderson');
1770
1867
  formData.append('obj2{}', '[{"x":1}]');
1771
1868
  ```
1772
1869
 
1773
- Axios supports the following shortcut methods: `postForm`, `putForm`, `patchForm`
1774
- which are just the corresponding http methods with the `Content-Type` header preset to `multipart/form-data`.
1870
+ Axios supports `postForm`, `putForm`, and `patchForm` as shortcuts for the matching HTTP methods with the `Content-Type` header preset to `multipart/form-data`.
1775
1871
 
1776
- ## Files Posting
1872
+ ## Posting files
1777
1873
 
1778
- You can easily submit a single file:
1874
+ Submit a single file:
1779
1875
 
1780
1876
  ```js
1781
1877
  await axios.postForm('https://httpbin.org/post', {
@@ -1798,9 +1894,9 @@ await axios.postForm('https://httpbin.org/post', {
1798
1894
  await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files);
1799
1895
  ```
1800
1896
 
1801
- All files will be sent with the same field names: `files[]`.
1897
+ Axios sends all files with the same field name: `files[]`.
1802
1898
 
1803
- ## πŸ†• HTML Form Posting (browser)
1899
+ ## HTML form posting (browser)
1804
1900
 
1805
1901
  Pass an HTML Form element as a payload to submit it as `multipart/form-data` content.
1806
1902
 
@@ -1838,7 +1934,7 @@ For example, the Form
1838
1934
  </form>
1839
1935
  ```
1840
1936
 
1841
- will be submitted as the following JSON object:
1937
+ submits this JSON object:
1842
1938
 
1843
1939
  ```js
1844
1940
  {
@@ -1860,10 +1956,10 @@ will be submitted as the following JSON object:
1860
1956
 
1861
1957
  Sending `Blobs`/`Files` as JSON (`base64`) is not currently supported.
1862
1958
 
1863
- ## πŸ†• Progress capturing
1959
+ ## Progress capturing
1864
1960
 
1865
- Axios supports both browser and node environments to capture request upload/download progress.
1866
- The frequency of progress events is forced to be limited to `3` times per second.
1961
+ Axios can capture request upload and download progress in browsers and Node.js.
1962
+ Progress events are limited to `3` times per second.
1867
1963
 
1868
1964
  ```js
1869
1965
  await axios.post(url, data, {
@@ -1909,14 +2005,14 @@ const { data } = await axios.post(SERVER_URL, readableStream, {
1909
2005
  });
1910
2006
  ```
1911
2007
 
1912
- > **Note:**
2008
+ > Note:
1913
2009
  > Capturing FormData upload progress is not currently supported in node.js environments.
1914
2010
 
1915
- > **⚠️ Warning**
1916
- > It is recommended to disable redirects by setting maxRedirects: 0 to upload the stream in the **node.js** environment,
1917
- > as the follow-redirects package will buffer the entire stream in RAM without following the "backpressure" algorithm.
2011
+ > Warning:
2012
+ > Set `maxRedirects: 0` when uploading streams in node.js.
2013
+ > The follow-redirects package buffers the entire stream in RAM and does not follow the "backpressure" algorithm.
1918
2014
 
1919
- ## πŸ†• Rate limiting
2015
+ ## Rate limiting
1920
2016
 
1921
2017
  Download and upload rate limits can only be set for the http adapter (node.js):
1922
2018
 
@@ -1930,25 +2026,24 @@ const { data } = await axios.post(LOCAL_SERVER_URL, myBuffer, {
1930
2026
  });
1931
2027
  ```
1932
2028
 
1933
- ## πŸ†• AxiosHeaders
2029
+ ## AxiosHeaders
1934
2030
 
1935
- Axios has its own `AxiosHeaders` class to manipulate headers using a Map-like API that guarantees caseless work.
1936
- Although HTTP is case-insensitive in headers, Axios will retain the case of the original header for stylistic reasons
1937
- and as a workaround when servers mistakenly consider the header's case.
1938
- The old approach of directly manipulating the headers object is still available, but deprecated and not recommended for future usage.
2031
+ Axios includes an `AxiosHeaders` class for working with headers through a Map-like API.
2032
+ HTTP header names are case-insensitive, but Axios keeps the original header case for style and for servers that incorrectly depend on case.
2033
+ Directly manipulating the headers object still works, but it is deprecated.
1939
2034
 
1940
2035
  ### Working with headers
1941
2036
 
1942
- An AxiosHeaders object instance can contain different types of internal values. that control setting and merging logic.
1943
- The final headers object with string values is obtained by Axios by calling the `toJSON` method.
2037
+ An `AxiosHeaders` instance can contain several internal value types that control setting and merging.
2038
+ Axios gets the final headers object with string values by calling `toJSON`.
1944
2039
 
1945
2040
  > Note: By JSON here we mean an object consisting only of string values intended to be sent over the network.
1946
2041
 
1947
2042
  The header value can be one of the following types:
1948
2043
 
1949
- - `string` - normal string value that will be sent to the server
2044
+ - `string` - normal string value sent to the server
1950
2045
  - `null` - skip header when rendering to JSON
1951
- - `false` - skip header when rendering to JSON, additionally indicates that `set` method must be called with `rewrite` option set to `true`
2046
+ - `false` - skip header when rendering to JSON. Also indicates that the `set` method must be called with `rewrite` set to `true`
1952
2047
  to overwrite this value (Axios uses this internally to allow users to opt out of installing certain headers like `User-Agent` or `Content-Type`)
1953
2048
  - `undefined` - value is not set
1954
2049
 
@@ -1965,7 +2060,7 @@ axios.interceptors.request.use((request: InternalAxiosRequestConfig) => {
1965
2060
  'My-set-header2': 'my-set-value2',
1966
2061
  });
1967
2062
 
1968
- request.headers.set('User-Agent', false); // disable subsequent setting the header by Axios
2063
+ request.headers.set('User-Agent', false); // prevent Axios from setting this header later
1969
2064
 
1970
2065
  request.headers.setContentType('text/plain');
1971
2066
 
@@ -2033,7 +2128,7 @@ Constructs a new `AxiosHeaders` instance.
2033
2128
  constructor(headers?: RawAxiosHeaders | AxiosHeaders | string);
2034
2129
  ```
2035
2130
 
2036
- If the headers object is a string, it will be parsed as RAW HTTP headers.
2131
+ If the headers object is a string, Axios parses it as raw HTTP headers.
2037
2132
 
2038
2133
  ```js
2039
2134
  const headers = new AxiosHeaders(`
@@ -2056,6 +2151,7 @@ console.log(headers);
2056
2151
  set(headerName, value: Axios, rewrite?: boolean);
2057
2152
  set(headerName, value, rewrite?: (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean);
2058
2153
  set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean);
2154
+ set(headers?: Iterable<[string, AxiosHeaderValue]>, rewrite?: boolean);
2059
2155
  ```
2060
2156
 
2061
2157
  The `rewrite` argument controls the overwriting behavior:
@@ -2064,7 +2160,22 @@ The `rewrite` argument controls the overwriting behavior:
2064
2160
  - `undefined` (default) - overwrite the header unless its value is set to `false`
2065
2161
  - `true` - rewrite anyway
2066
2162
 
2067
- The option can also accept a user-defined function that determines whether the value should be overwritten or not.
2163
+ The option can also accept a user-defined function that determines whether to overwrite the value.
2164
+
2165
+ Empty or whitespace-only header names are ignored.
2166
+
2167
+ Iterable key/value pairs, such as a `Map`, are accepted:
2168
+
2169
+ ```js
2170
+ const headers = new AxiosHeaders();
2171
+
2172
+ headers.set(
2173
+ new Map([
2174
+ ['X-Trace-Id', 'abc123'],
2175
+ ['Accept', 'application/json'],
2176
+ ])
2177
+ );
2178
+ ```
2068
2179
 
2069
2180
  Returns `this`.
2070
2181
 
@@ -2128,7 +2239,7 @@ clear(matcher?: AxiosHeaderMatcher): boolean;
2128
2239
  ```
2129
2240
 
2130
2241
  Removes all headers.
2131
- Unlike the `delete` method matcher, this optional matcher will be used to match against the header name rather than the value.
2242
+ Unlike the `delete` method matcher, this optional matcher matches the header name rather than the value.
2132
2243
 
2133
2244
  ```ts
2134
2245
  const headers = new AxiosHeaders({
@@ -2172,19 +2283,28 @@ Returns `this`.
2172
2283
  concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
2173
2284
  ```
2174
2285
 
2175
- Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string, it will be parsed as RAW HTTP headers.
2286
+ Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string, Axios parses it as raw HTTP headers.
2176
2287
 
2177
2288
  Returns a new `AxiosHeaders` instance.
2178
2289
 
2179
2290
  ### AxiosHeaders#toJSON(asStrings?)
2180
2291
 
2181
2292
  ```
2182
- toJSON(asStrings?: boolean): RawAxiosHeaders;
2293
+ toJSON(asStrings: true): Record<string, string>;
2294
+ toJSON(asStrings?: false): Record<string, string | string[]>;
2183
2295
  ```
2184
2296
 
2185
- Resolve all internal header values into a new null prototype object.
2297
+ Resolves all internal header values into a new null prototype object.
2186
2298
  Set `asStrings` to true to resolve arrays as a string containing all elements, separated by commas.
2187
2299
 
2300
+ ### AxiosHeaders#toString()
2301
+
2302
+ ```
2303
+ toString(): string;
2304
+ ```
2305
+
2306
+ Returns the headers as a CRLF-free HTTP header block, one `name: value` pair per line.
2307
+
2188
2308
  ### AxiosHeaders.from(thing?)
2189
2309
 
2190
2310
  ```
@@ -2192,7 +2312,7 @@ from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
2192
2312
  ```
2193
2313
 
2194
2314
  Returns a new `AxiosHeaders` instance created from the raw headers passed in,
2195
- or simply returns the given headers object if it's an `AxiosHeaders` instance.
2315
+ or returns the given headers object if it's already an `AxiosHeaders` instance.
2196
2316
 
2197
2317
  ### AxiosHeaders.concat(...targets)
2198
2318
 
@@ -2216,11 +2336,10 @@ The following shortcuts are available:
2216
2336
 
2217
2337
  - `setContentEncoding`, `getContentEncoding`, `hasContentEncoding`
2218
2338
 
2219
- ## πŸ”₯ Fetch adapter
2339
+ ## Fetch adapter
2220
2340
 
2221
- Fetch adapter was introduced in `v1.7.0`. By default, it will be used if `xhr` and `http` adapters are not available in the build,
2222
- or not supported by the environment.
2223
- To use it by default, it must be selected explicitly:
2341
+ Axios introduced the fetch adapter in `v1.7.0`. By default, Axios uses it when the `xhr` and `http` adapters are not available in the build or not supported by the environment.
2342
+ To use it by default, select it explicitly:
2224
2343
 
2225
2344
  ```js
2226
2345
  const { data } = axios.get(url, {
@@ -2238,20 +2357,21 @@ const fetchAxios = axios.create({
2238
2357
  const { data } = fetchAxios.get(url);
2239
2358
  ```
2240
2359
 
2241
- The adapter supports the same functionality as the `xhr` adapter, **including upload and download progress capturing**.
2242
- Also, it supports additional response types such as `stream` and `formdata` (if supported by the environment).
2360
+ The adapter supports the same features as the `xhr` adapter, including upload and download progress capturing.
2361
+ It also supports response types such as `stream` and `formdata` when the environment supports them.
2362
+
2363
+ When `auth` is omitted, the fetch adapter can read HTTP Basic auth credentials from the request URL, for example `https://user:pass@example.com`. Percent-encoded URL credentials are decoded before the `Authorization` header is generated, and `auth` takes precedence over URL-embedded credentials.
2243
2364
 
2244
- ### πŸ”₯ Custom fetch
2365
+ ### Custom fetch
2245
2366
 
2246
- Starting from `v1.12.0`, you can customize the fetch adapter to use a custom fetch API instead of environment globals.
2247
- You can pass a custom `fetch` function, `Request`, and `Response` constructors via env config.
2248
- This can be helpful in case of custom environments & app frameworks.
2367
+ Since `v1.12.0`, you can configure the fetch adapter to use a custom fetch API instead of environment globals.
2368
+ Pass a custom `fetch` function, `Request`, and `Response` constructors through `env` config.
2369
+ This helps in custom environments and app frameworks.
2249
2370
 
2250
- Also, when using a custom fetch, you may need to set custom Request and Response too. If you don't set them, global objects will be used.
2251
- If your custom fetch api does not have these objects, and the globals are incompatible with a custom fetch,
2252
- you must disable their use inside the fetch adapter by passing null.
2371
+ When using a custom fetch, you may also need to set custom `Request` and `Response` constructors. If you do not set them, Axios uses the global objects.
2372
+ If your custom fetch API does not provide these objects and the globals are incompatible with it, pass `null` to disable them inside the fetch adapter.
2253
2373
 
2254
- > Note: Setting `Request` & `Response` to `null` will make it impossible for the fetch adapter to capture the upload & download progress.
2374
+ > Note: Setting `Request` and `Response` to `null` prevents the fetch adapter from capturing upload and download progress.
2255
2375
 
2256
2376
  Basic example:
2257
2377
 
@@ -2271,7 +2391,7 @@ const instance = axios.create({
2271
2391
  });
2272
2392
  ```
2273
2393
 
2274
- #### πŸ”₯ Using with Tauri
2394
+ #### Using with Tauri
2275
2395
 
2276
2396
  A minimal example of setting up Axios for use in a [Tauri](https://tauri.app/plugin/http-client/) app with a platform fetch function that ignores CORS policy for requests.
2277
2397
 
@@ -2292,10 +2412,9 @@ const instance = axios.create({
2292
2412
  const { data } = await instance.get('https://google.com');
2293
2413
  ```
2294
2414
 
2295
- #### πŸ”₯ Using with SvelteKit
2415
+ #### Using with SvelteKit
2296
2416
 
2297
- [SvelteKit](https://svelte.dev/docs/kit/web-standards#Fetch-APIs) framework has a custom implementation of the fetch function for server rendering (so called `load` functions), and also uses relative paths,
2298
- which makes it incompatible with the standard URL API. So, Axios must be configured to use the custom fetch API:
2417
+ [SvelteKit](https://svelte.dev/docs/kit/web-standards#Fetch-APIs) uses a custom fetch function for server rendering in `load` functions. It also uses relative paths, which are incompatible with the standard URL API. Configure Axios to use SvelteKit's custom fetch API:
2299
2418
 
2300
2419
  ```js
2301
2420
  export async function load({ fetch }) {
@@ -2312,13 +2431,13 @@ export async function load({ fetch }) {
2312
2431
  }
2313
2432
  ```
2314
2433
 
2315
- #### HTTP/2 Support
2434
+ #### HTTP/2 support
2316
2435
 
2317
- Axios supports HTTP/2 via the Node.js `http` adapter (introduced in v1.13.0).
2436
+ Axios supports HTTP/2 through the Node.js `http` adapter, introduced in v1.13.0.
2318
2437
 
2319
- This support depends on the runtime environment. Since Axios relies on Node.js APIs, HTTP/2 functionality is available in supported Node.js versions, but may not work in other environments (such as Bun or Deno).
2438
+ Support depends on the runtime environment. Axios relies on Node.js APIs, so HTTP/2 works in supported Node.js versions but may not work in other environments such as Bun or Deno.
2320
2439
 
2321
- Options like `httpVersion` and `http2Options` are adapter-specific and may not behave consistently across all environments.
2440
+ Options like `httpVersion` and `http2Options` are adapter-specific and may not behave the same way in every environment.
2322
2441
 
2323
2442
  Note: HTTP/2 redirects are currently not supported by the HTTP/2 adapter.
2324
2443
 
@@ -2340,7 +2459,7 @@ const { data, headers, status } = await axios.post('https://httpbin.org/post', f
2340
2459
 
2341
2460
  ## Semver
2342
2461
 
2343
- Since Axios has reached a `v.1.0.0` we will fully embrace semver as per the spec [here](https://semver.org/)
2462
+ Axios follows [semver](https://semver.org/) since `v1.0.0`.
2344
2463
 
2345
2464
  ## Promises
2346
2465
 
@@ -2365,10 +2484,24 @@ try {
2365
2484
  }
2366
2485
  ```
2367
2486
 
2368
- Because axios dual publishes with an ESM default export and a CJS `module.exports`, there are some caveats.
2369
- The recommended setting is to use `"moduleResolution": "node16"` (this is implied by `"module": "node16"`). Note that this requires TypeScript 4.7 or greater.
2370
- If use ESM, your settings should be fine.
2371
- If you compile TypeScript to CJS and you can’t use `"moduleResolution": "node 16"`, you have to enable `esModuleInterop`.
2487
+ Use `axios.isCancel<T>()` to narrow cancellation errors to `CanceledError<T>`:
2488
+
2489
+ ```typescript
2490
+ const controller = new AbortController();
2491
+
2492
+ try {
2493
+ await axios.get<User>('/user?ID=12345', { signal: controller.signal });
2494
+ } catch (error) {
2495
+ if (axios.isCancel<User>(error)) {
2496
+ handleCancellation(error);
2497
+ }
2498
+ }
2499
+ ```
2500
+
2501
+ Because axios publishes an ESM default export and a CJS `module.exports`, TypeScript has a few caveats.
2502
+ The recommended setting is `"moduleResolution": "node16"`, which is implied by `"module": "node16"`. This requires TypeScript 4.7 or greater.
2503
+ If you use ESM, your settings should be fine.
2504
+ If you compile TypeScript to CJS and can't use `"moduleResolution": "node 16"`, enable `esModuleInterop`.
2372
2505
  If you use TypeScript to type check CJS JavaScript code, your only option is to use `"moduleResolution": "node16"`.
2373
2506
 
2374
2507
  You can also create a custom instance with typed interceptors:
@@ -2389,7 +2522,7 @@ apiClient.interceptors.request.use((config: InternalAxiosRequestConfig) => {
2389
2522
 
2390
2523
  ## Online one-click setup
2391
2524
 
2392
- You can use Gitpod, an online IDE(which is free for Open Source) for contributing or running the examples online.
2525
+ You can use Gitpod, a free online IDE for open source projects, to contribute or run the examples online.
2393
2526
 
2394
2527
  [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/axios/axios/blob/main/examples/server.js)
2395
2528
 
@@ -2408,7 +2541,7 @@ npm rebuild husky && npx husky
2408
2541
 
2409
2542
  Run those two commands once per fresh checkout. You do **not** need to re-run them after every subsequent `npm install`.
2410
2543
 
2411
- Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this β€” that re-opens the lifecycle-script attack surface for every other package in the tree. All CI workflows already invoke npm with `--ignore-scripts`, so local behaviour matches CI.
2544
+ Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this. That reopens the lifecycle-script attack surface for every other package in the tree. All CI workflows already invoke npm with `--ignore-scripts`, so local behaviour matches CI.
2412
2545
 
2413
2546
  ## Resources
2414
2547
 
@@ -2419,7 +2552,7 @@ Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this β€” that re-open
2419
2552
 
2420
2553
  ## Credits
2421
2554
 
2422
- axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [AngularJS](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of AngularJS.
2555
+ axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) in [AngularJS](https://angularjs.org/). It provides a standalone `$http`-like service for use outside AngularJS.
2423
2556
 
2424
2557
  ## License
2425
2558