Promise based HTTP client for the browser and node.js

Overview

axios

npm version CDNJS build status Gitpod Ready-to-Code code coverage install size npm downloads gitter chat code helpers

Promise based HTTP client for the browser and node.js

New axios docs website: click here

Table of Contents

Features

  • Make XMLHttpRequests from the browser
  • Make http requests from node.js
  • Supports the Promise API
  • Intercept request and response
  • Transform request and response data
  • Cancel requests
  • Automatic transforms for JSON data
  • Client side support for protecting against XSRF

Browser Support

Chrome Firefox Safari Opera Edge IE
Latest Latest Latest Latest Latest 11

Browser Matrix

Installing

Using npm:

$ npm install axios

Using bower:

$ bower install axios

Using yarn:

$ yarn add axios

Using jsDelivr CDN:

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

Using unpkg CDN:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Example

note: CommonJS usage

In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with require() use the following approach:

const axios = require('axios').default;

// axios.<method> will now provide autocomplete and parameter typings

Performing a GET request

const axios = require('axios');

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

// Optionally the request above could also be done as
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });  

// Want to use async/await? Add the `async` keyword to your outer function/method.
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

NOTE: async/await is part of ECMAScript 2017 and is not supported in Internet Explorer and older browsers, so use with caution.

Performing a POST request

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Performing multiple concurrent requests

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

Promise.all([getUserAccount(), getUserPermissions()])
  .then(function (results) {
    const acct = results[0];
    const perm = results[1];
  });

axios API

Requests can be made by passing the relevant config to axios.

axios(config)
// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});
// GET request for remote image in node.js
axios({
  method: 'get',
  url: 'http://bit.ly/2mTM3nY',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });
axios(url[, config])
// Send a GET request (default method)
axios('/user/12345');

Request method aliases

For convenience aliases have been provided for all supported request methods.

axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
NOTE

When using the alias methods url, method, and data properties don't need to be specified in config.

Concurrency (Deprecated)

Please use Promise.all to replace the below functions.

Helper functions for dealing with concurrent requests.

axios.all(iterable) axios.spread(callback)

Creating an instance

You can create a new instance of axios with a custom config.

axios.create([config])
const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

Instance methods

The available instance methods are listed below. The specified config will be merged with the instance config.

axios#request(config)
axios#get(url[, config])
axios#delete(url[, config])
axios#head(url[, config])
axios#options(url[, config])
axios#post(url[, data[, config]])
axios#put(url[, data[, config]])
axios#patch(url[, data[, config]])
axios#getUri([config])

Request Config

These are the available config options for making requests. Only the url is required. Requests will default to GET if method is not specified.

{
  // `url` is the server URL that will be used for the request
  url: '/user',

  // `method` is the request method to be used when making the request
  method: 'get', // default

  // `baseURL` will be prepended to `url` unless `url` is absolute.
  // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
  // to methods of that instance.
  baseURL: 'https://some-domain.com/api/',

  // `transformRequest` allows changes to the request data before it is sent to the server
  // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE'
  // The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
  // FormData or Stream
  // You may modify the headers object.
  transformRequest: [function (data, headers) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `transformResponse` allows changes to the response data to be made before
  // it is passed to then/catch
  transformResponse: [function (data) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `headers` are custom headers to be sent
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `params` are the URL parameters to be sent with the request
  // Must be a plain object or a URLSearchParams object
  params: {
    ID: 12345
  },

  // `paramsSerializer` is an optional function in charge of serializing `params`
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function (params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },

  // `data` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH'
  // When no `transformRequest` is set, must be of one of the following types:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - Browser only: FormData, File, Blob
  // - Node only: Stream, Buffer
  data: {
    firstName: 'Fred'
  },
  
  // syntax alternative to send data into the body
  // method post
  // only the value is sent, not the key
  data: 'Country=Brasil&City=Belo Horizonte',

  // `timeout` specifies the number of milliseconds before the request times out.
  // If the request takes longer than `timeout`, the request will be aborted.
  timeout: 1000, // default is `0` (no timeout)

  // `withCredentials` indicates whether or not cross-site Access-Control requests
  // should be made using credentials
  withCredentials: false, // default

  // `adapter` allows custom handling of requests which makes testing easier.
  // Return a promise and supply a valid response (see lib/adapters/README.md).
  adapter: function (config) {
    /* ... */
  },

  // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
  // This will set an `Authorization` header, overwriting any existing
  // `Authorization` custom headers you have set using `headers`.
  // Please note that only HTTP Basic auth is configurable through this parameter.
  // For Bearer tokens and such, use `Authorization` custom headers instead.
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },

  // `responseType` indicates the type of data that the server will respond with
  // options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
  //   browser only: 'blob'
  responseType: 'json', // default

  // `responseEncoding` indicates encoding to use for decoding responses (Node.js only)
  // Note: Ignored for `responseType` of 'stream' or client-side requests
  responseEncoding: 'utf8', // default

  // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
  xsrfCookieName: 'XSRF-TOKEN', // default

  // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
  xsrfHeaderName: 'X-XSRF-TOKEN', // default

  // `onUploadProgress` allows handling of progress events for uploads
  // browser only
  onUploadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `onDownloadProgress` allows handling of progress events for downloads
  // browser only
  onDownloadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js
  maxContentLength: 2000,

  // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed
  maxBodyLength: 2000,

  // `validateStatus` defines whether to resolve or reject the promise for a given
  // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
  // or `undefined`), the promise will be resolved; otherwise, the promise will be
  // rejected.
  validateStatus: function (status) {
    return status >= 200 && status < 300; // default
  },

  // `maxRedirects` defines the maximum number of redirects to follow in node.js.
  // If set to 0, no redirects will be followed.
  maxRedirects: 5, // default

  // `socketPath` defines a UNIX Socket to be used in node.js.
  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
  // Only either `socketPath` or `proxy` can be specified.
  // If both are specified, `socketPath` is used.
  socketPath: null, // default

  // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
  // and https requests, respectively, in node.js. This allows options to be added like
  // `keepAlive` that are not enabled by default.
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),

  // `proxy` defines the hostname, port, and protocol of the proxy server.
  // You can also define your proxy using the conventional `http_proxy` and
  // `https_proxy` environment variables. If you are using environment variables
  // for your proxy configuration, you can also define a `no_proxy` environment
  // variable as a comma-separated list of domains that should not be proxied.
  // Use `false` to disable proxies, ignoring environment variables.
  // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
  // supplies credentials.
  // This will set an `Proxy-Authorization` header, overwriting any existing
  // `Proxy-Authorization` custom headers you have set using `headers`.
  // If the proxy server uses HTTPS, then you must set the protocol to `https`. 
  proxy: {
    protocol: 'https',
    host: '127.0.0.1',
    port: 9000,
    auth: {
      username: 'mikeymike',
      password: 'rapunz3l'
    }
  },

  // `cancelToken` specifies a cancel token that can be used to cancel the request
  // (see Cancellation section below for details)
  cancelToken: new CancelToken(function (cancel) {
  }),

  // `decompress` indicates whether or not the response body should be decompressed 
  // automatically. If set to `true` will also remove the 'content-encoding' header 
  // from the responses objects of all decompressed responses
  // - Node only (XHR cannot turn off decompression)
  decompress: true // default

}

Response Schema

The response for a request contains the following information.

{
  // `data` is the response that was provided by the server
  data: {},

  // `status` is the HTTP status code from the server response
  status: 200,

  // `statusText` is the HTTP status message from the server response
  statusText: 'OK',

  // `headers` the HTTP headers that the server responded with
  // All header names are lower cased and can be accessed using the bracket notation.
  // Example: `response.headers['content-type']`
  headers: {},

  // `config` is the config that was provided to `axios` for the request
  config: {},

  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance in the browser
  request: {}
}

When using then, you will receive the response as follows:

axios.get('/user/12345')
  .then(function (response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

When using catch, or passing a rejection callback as second parameter of then, the response will be available through the error object as explained in the Handling Errors section.

Config Defaults

You can specify config defaults that will be applied to every request.

Global axios defaults

axios.defaults.baseURL = 'https://api.example.com';

// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them.
// See below for an example using Custom instance defaults instead.
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

Custom instance defaults

// Set config defaults when creating the instance
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

Config order of precedence

Config will be merged with an order of precedence. The order is library defaults found in lib/defaults.js, 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.

// Create an instance using the config defaults provided by the library
// At this point the timeout config value is `0` as is the default for the library
const instance = axios.create();

// Override timeout default for the library
// Now all requests using this instance will wait 2.5 seconds before timing out
instance.defaults.timeout = 2500;

// Override timeout for this request as it's known to take a long time
instance.get('/longRequest', {
  timeout: 5000
});

Interceptors

You can intercept requests or responses before they are handled by then or catch.

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });

If you need to remove an interceptor later you can.

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

You can add interceptors to a custom instance of axios.

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay in the execution of your axios request when the main thread is blocked (a promise is created under the hood for the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag to the options object that will tell axios to run the code synchronously and avoid any delays in request execution.

axios.interceptors.request.use(function (config) {
  config.headers.test = 'I am only a header!';
  return config;
}, null, { synchronous: true });

If you want to execute a particular interceptor based on a runtime check, you can add a runWhen function to the options object. The interceptor will not be executed if and only if the return of runWhen is false. The function will be called with the config object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an asynchronous request interceptor that only needs to run at certain times.

function onGetCall(config) {
  return config.method === 'get';
}
axios.interceptors.request.use(function (config) {
  config.headers.test = 'special get headers';
  return config;
}, null, { runWhen: onGetCall });

Handling Errors

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

Using the validateStatus config option, you can define HTTP code(s) that should throw an error.

axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // Resolve only if the status code is less than 500
  }
})

Using toJSON you get an object with more information about the HTTP error.

axios.get('/user/12345')
  .catch(function (error) {
    console.log(error.toJSON());
  });

Cancellation

You can cancel a request using a cancel token.

The axios cancel token API is based on the withdrawn cancelable promises proposal.

You can create a cancel token using the CancelToken.source factory as shown below:

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');

You can also create a cancel token by passing an executor function to the CancelToken constructor:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  })
});

// cancel the request
cancel();

Note: you can cancel several requests with the same cancel token.

Using application/x-www-form-urlencoded format

By default, axios serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

Browser

In a browser, you can use the URLSearchParams API as follows:

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Note that URLSearchParams is not supported by all browsers (see caniuse.com), but there is a polyfill available (make sure to polyfill the global environment).

Alternatively, you can encode data using the qs library:

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

Or in another way (ES6),

import qs from 'qs';
const data = { 'bar': 123 };
const options = {
  method: 'POST',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  data: qs.stringify(data),
  url,
};
axios(options);

Node.js

Query string

In node.js, you can use the querystring module as follows:

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

or 'URLSearchParams' from 'url module' as follows:

const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());

You can also use the qs library.

NOTE

The qs library is preferable if you need to stringify nested objects, as the querystring method has known issues with that use case (https://github.com/nodejs/node-v0.x-archive/issues/1665).

Form data

In node.js, you can use the form-data library as follows:

const FormData = require('form-data');
 
const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

axios.post('https://example.com', form, { headers: form.getHeaders() })

Alternatively, use an interceptor:

axios.interceptors.request.use(config => {
  if (config.data instanceof FormData) {
    Object.assign(config.headers, config.data.getHeaders());
  }
  return config;
});

Semver

Until axios reaches a 1.0 release, breaking changes will be released with a new minor version. For example 0.5.1, and 0.5.4 will have the same API, but 0.6.0 will have breaking changes.

Promises

axios depends on a native ES6 Promise implementation to be supported. If your environment doesn't support ES6 Promises, you can polyfill.

TypeScript

axios includes TypeScript definitions.

import axios from 'axios';
axios.get('/user?ID=12345');

Online one-click setup

You can use Gitpod an online IDE(which is free for Open Source) for contributing or running the examples online.

Open in Gitpod

Resources

Credits

axios is heavily inspired by the $http service provided in Angular. Ultimately axios is an effort to provide a standalone $http-like service for use outside of Angular.

License

MIT

Comments
  • Content-Type application/x-www-form-urlencoded

    Content-Type application/x-www-form-urlencoded

    Try to send request with content type application/x-www-form-urlencoded

    var data = Querystring.stringify({ 
                    "grant_type": "password",
                    "username": login,
                    "password": password
                });
    axios.post(Urls.login, data);
    

    but there is no such header in request.

    I tried to use code:

      var data = Querystring.stringify({ 
                    "grant_type": "password",
                    "username": login,
                    "password": password
                });
            return axios({
                method: 'post',
                url: Urls.login,
                data: data,
                headers: {
                    'Content-type': 'application/x-www-form-urlencoded'
                }
            });
    

    same problem

    jquery code works fine:

    $.ajax({
                url: Urls.login,
                data: data,
                type: "POST",
                headers: {
                    'Content-type': 'application/x-www-form-urlencoded'
                }
            });
    

    How can I use axios to send request with this header?

    opened by alborozd 220
  • Getting 'Cross-Origin Request Blocked' on a GET request

    Getting 'Cross-Origin Request Blocked' on a GET request

    Summary

    I'm making a GET request to 4chan's API for retrieving threads from a board. This is my code:

    const board = this.props.routeParams.tag;
    var config = {
        headers: {'Access-Control-Allow-Origin': '*'}
    };
    axios.get('https://a.4cdn.org/' + board + '/threads.json', config)
        .then(function (response) {
            console.log(response.data);
    });
    

    I receive the following warning:

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://a.4cdn.org/a/threads.json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). As seen above, I have added the relevant header, but it does not solve the issue. I made the same request from my terminal using cURL and it worked fine.

    Context

    • axios version: e.g.: v0.16.0
    • Environment: e.g.: node v6.9.4, Firefox 51.0.1, Ubuntu 14.04
    opened by adl1995 143
  • Can't get a .post with 'Content-Type': 'multipart/form-data' to work

    Can't get a .post with 'Content-Type': 'multipart/form-data' to work

    I've spent a few hours today trying to get a post request to work with a few parameters and a file that I need to upload.

    I was able to make it work with pure javascript and XMLHttpRequest but it doesn't work with Axios. What am I doing wrong?

    Here's the code that works using XMLHttpRequest:

    let data = new FormData();
    
    data.append('action', 'ADD');
    data.append('param', 0);
    data.append('secondParam', 0);
    data.append('file', new Blob([payload], { type: 'text/csv' }));
    
    // this works
    let request = new XMLHttpRequest();
    request.open('POST', url);
    request.send(data);
    

    What would be the 'Axios' version of that?

    Here's one of my tries (the simple one):

    // this won't work
    const config = { headers: { 'Content-Type': 'multipart/form-data' } };
        axios.post(url, data, config)
        .then(response => console.log(response))
        .catch(errors => console.log(errors));
    

    Thank you! And thanks for your great work with Axios!

    opened by rafaelbiten 99
  • [Community Contest] A logo for Axios

    [Community Contest] A logo for Axios

    Axios has grown to become a popular library with over 3 million weekly downloads on npm. I think it's time axios has its own logo, just like many other major libraries out there. I've designed a concept for the logo, and I hope you guys like it.

    Page 1 Page 2 Page 3

    The logo is based on the concept of request and response. The first one is a square icon/profile picture. The second and third are full logos. These images are not full size, so if you do like them and plan to use them, I can send you the full sized files.

    Edit: Should we count 👍 reactions to this parent comment as votes for this logo submission, or just people in favor of a new logo in general? I can make a a second comment for votes for this submission, or we can do a proper poll with strawpoll later when people are done submitting their ideas.

    feature 
    opened by richiksc 97
  • Axios catch error returns javascript error not server response

    Axios catch error returns javascript error not server response

    Im trying to catch validation errors from the server.

    Code:

    axios.post('/formulas/create', {
           name: "",
           parts: ""
    })
    .then( 
    	(response) => { console.log(response) },
    	(error) => { console.log(error) }
    );
    

    Console log output

    Error: Request failed with status code 422
        at createError (app.js:6765)
        at settle (app.js:29489)
        at XMLHttpRequest.handleLoad (app.js:6600)
    

    Network tab output {"name":["The name field is required."],"parts":["The parts field is required."]}

    I should be seeing an object that contains JSON form validation as that is the response in my network tab, i seem to get the JS catch output?

    Also tried the following:

    axios.post('/formulas/create', {
    	name: "",
    	parts: ""
    })
    .then(response => { 
    	console.log(response)
    })
    .catch(error => {
        console.log(error)
    });
    

    Same result

    More people seem to have the same problem using the same enviroment as me here. https://laracasts.com/discuss/channels/vue/issues-with-axios-catch-method

    • Axios version: ^0.16.2
    • VueJS 2.3.4
    • Vue-template-compiler 2.3.4
    • Laravel-mix
    • Environment: node v6.4.0, chrome 58, Mac OSX 10.12.4
    opened by jiimmeh 87
  • Request params are not getting merged with instance params

    Request params are not getting merged with instance params

    Describe the bug

    Specific request params do not get merged with the instance default params.

    To Reproduce

    const instance = axios.create({
        baseURL: "http://www.example.com",
        params: {
          q: "question",
        }
      });
    
    instance.get("/page", 
      { 
        params: { 
          page: 2 
        }
      }
    )
    

    What happens is that the request param object overrides the instance default param object. The instance no longer has a query param of q.

    Expected behavior

    According to the docs, all configuration options are merged. https://github.com/axios/axios#instance-methods

    I expected request to contain both q and page params. This is also how it was working in version 0.18.0, which is how I noticed.

    Environment:

    • Axios Version: 0.19.0
    • OS: 10.14.5 (18F132)
    • Browser: Node Express, and Chrome
    • Browser: Node 10.15.0, Chrome Version 74.0.3729.169 (Official Build) (64-bit)
    opened by zackseuberling 84
  • TypeError: axios.get is not a function (v1.1.0)

    TypeError: axios.get is not a function (v1.1.0)

    Describe the bug

    The new version of axios (v1.1.0) is throwing an error for axios.get: TypeError: axios.get is not a function.

    Note: This issue was not present in v1.0.0

    To Reproduce

    Include axio v1.1.0 via a <script> tag, and then reference it directly via axios.get()

    <script src="https://unpkg.com/[email protected]/dist/axios.min.js"></script>
    <script>
        axios.get(...)
    </script>
    

    Expected behavior

    axios.get should be a valid function.

    Environment

    • Axios Version 1.1.0
    opened by addisonhardy 76
  • Don't send default header

    Don't send default header

    If a header has been set as a default, there does not appear to be any way to skip it on an individual request. Setting null or undefined doesn't do anything.

    opened by kyeotic 71
  • cannot get cross-site POST to work

    cannot get cross-site POST to work

    Hello,

    Thanks for the great work. Although that were some releases targeting cross-site requests, I still can't get it to work. I dug through the previous posts and tried adding:

    • crossDomain: true
    • xDomain: true *xDomainRequest: true

    to the config. And none of them worked. (If this feature is actually available, updating the readme would help.)

    Please advise ASAP. Thank you.

    opened by j-planet 70
  • Set a code/status for

    Set a code/status for "Network Error"

    I'm trying to detect when my server is down so that I can display an appropriate error message to the user.

    In this case, axios network requests throw an error which is different from all other axios errors, as discussed here: https://github.com/mzabriskie/axios/issues/204

    In my code, it seems the only way to detect this error is to check err.message: if (err.message === "Network Error"){/*tell user the server is down*/}

    This bothers me because string comparisons are a little risky; perhaps some day this message will be translated, and my code will fail.

    It would be great if err.status or err.code (or err.???) were set to some documented value that we can check for in our code.

    Is there any other way to detect this scenario that I'm missing? Thanks all!

    opened by jonathan-stone 69
  • React native IOS Network Error

    React native IOS Network Error

    Describe the bug

    While making any post request using Axios package. I am getting a Network error. While the same API seems to be working perfectly fine with Android devices. It is not an issue with the API.

    To Reproduce

    Axios post request throws a network error message. If I make the call again inside the catch block then it works fine.

    axios
          .post(
            base_url + 'generatePaymentIntent',
            {
              // unit_id: 1,
              token: obj,
              order_type: 'ORD',
              order_data: {
                order_type: order_type,
                apt_id: apt_id,
              },
            },
            Loginheader,
          )
            .then(item => {
            this.setState({
              loading: false,
            });
            console.log('--------generate intent----------');
              console.log(item);
            if (item.data.code === 200) {
              const {price} = item.data.data.order_data;
              
    
              this.displayPaymentModal(
                'Confirm Payment',
                `Final Price: $${price}`,
                this.props.navigation,
                item.data.code,
                'Make Payment',
                item.data.data,
              );
            }
          })
          .catch(e => {
            this.setState({
              loading: false,
            });
            console.log('--------catch generate intent----------');
            // console.log(e.response);
            // const {message, code} = e.response;
            // this.retryPopup(
            //   `Error getting payment Intent`,
            //   message,
            //   '',
            //   code,
            //   'onetime',
            // );
            console.log(e.response);
    
            console.log(JSON.stringify(e));
    
            if (e.message === 'Network Error') {
              // this.makeOneTimePayment(order_type, apt_id);
              this.retryPopup(
                  `Error getting payment Intent`,
                  'RETRY',
                  '',
                  '400',
                  'onetime',
                );
            }
          });
    

    Expected behavior

    It shouldn't through network error. What should be done to fix this behavior specifically for iOS devices/simulators.

    Environment

    • Axios Version [e.g. 0.19.2]
    • Additional Library Versions [e.g. React 16.9.0, React Native 0.62.2]

    Additional context/Screenshots

    N/A

    opened by swapnilshah09 65
  • No error.request.getHeaders() function when ETIMEDOUT occurs

    No error.request.getHeaders() function when ETIMEDOUT occurs

    Describe the bug

    Environment: Node.js Axios version: v1.2.2


    According to axios document for error handling, error.request is an instance of http.ClientRequest in node.js. But it seems to be an instance of Writable in ETIMEDOUT error case.

    I printed it in normal error(ERR_BAD_REQUEST & 404) case and timeout error case.

    • ERR_BAD_REQUEST & 404
      ex.request: <ref *2> ClientRequest { ... }
      
    • ETIMEDOUT
      ex.request: <ref *6> Writable { ... }
      

    So, I can't call error.request.getHeaders(). It raises request.getHeaders() is not a function error. Could you please fix this or update the document?

    To Reproduce

    No response

    Code snippet

    No response

    Expected behavior

    No response

    Axios Version

    1.2.2

    Adapter Version

    No response

    Browser

    No response

    Browser Version

    No response

    Node.js Version

    16.16.0

    OS

    No response

    Additional Library Versions

    No response

    Additional context/Screenshots

    No response

    opened by anselmo-coolstay 0
  • fix(types): fixed AxiosRequestConfig header interface by refactoring it to RawAxiosRequestConfig;

    fix(types): fixed AxiosRequestConfig header interface by refactoring it to RawAxiosRequestConfig;

    • Refactored AxiosRequestConfig to RawAxiosRequestConfig interface;
    • Re-added AxiosRequestConfig as a subinterface of AxiosRequestConfig;
    export interface AxiosRequestConfig<D = any> extends RawAxiosRequestConfig {
      headers: AxiosRequestHeaders;
    }
    
    axios.interceptors.request.use((req: AxiosRequestConfig) => {
      req.headers.set('foo', 'bar');
      req.headers['Content-Type'] = 123;
      return req;
    });
    

    Fixes #5415

    opened by DigitalBrainJS 2
  • Property 'Authorization' does not exists on type 'AxiosHeaders' after upgrade to 1.2.2

    Property 'Authorization' does not exists on type 'AxiosHeaders' after upgrade to 1.2.2

    Summary

    I'm getting the following error after upgrading axios to version 1.2.2:

    TS2339: Property 'Authorization' does not exist on type 'AxiosHeaders | Partial<RawAxiosHeaders & MethodsHeaders & CommonHeaders>'. Property 'Authorization' does not exist on type 'AxiosHeaders'

    The same snippet of code is working on version 1.2.1:

    import axios from 'axios';
    
    axios.interceptors.request.use((request) => {
        request.headers
            ? (request.headers.Authorization = `Bearer ${token}`)
            : (request.headers = { Authorization: `Bearer ${token}` });
    });
    

    Environment

    • Axios 1.2.2
    • Node.js 18.12.1
    • OS: Ubuntu 20.04.4 LTS (WSL2)
    opened by andreylh 5
  • Broken `AxiosHeaders` typings

    Broken `AxiosHeaders` typings

    Describe the bug

    AxiosHeaders types makes it so trying to call methods on the instance raises a typescript compilation error.

    image

    AxiosRequestConfig.headers can be either RawAxiosRequestHeaders or AxiosHeaders. RawAxiosRequestHeaders, being an alias of Record<string, AxiosHeaderValue> causes methods to not be callable.

    To Reproduce

    Invoke any method on AxiosRequestConfig.headers.

    Code snippet

    const api = axios.create({ ... })
    
    api.interceptors.request.use(req => {
      // Trying to access any method on `req.headers` will result in
      // a "This expression is not callable" TS error
      req.headers.set('foo', 'bar')
    })
    

    Expected behavior

    Should be able to call any method declared in AxiosHeaders.

    Environment

    • axios: 1.2.2
    • node: 18.12.1
    • typescript: 4.9.4
    • macOS Ventura 13.1
    opened by nfantone 2
  • Error: 'import' and 'export' may appear only with 'sourceType: module' after upgrading from 0.27.2 to 1.2.1

    Error: 'import' and 'export' may appear only with 'sourceType: module' after upgrading from 0.27.2 to 1.2.1

    Describe the issue

    I'm using serverless and in this line import axios from 'axios'; I'm getting the next error Error: 'import' and 'export' may appear only with 'sourceType: module' after I upgraded to version 1.2.1.

    Axios Version

    1.2.1

    Node.js Version

    16.19.0

    opened by amirhamdy 0
  • Axios Instance 400 returned as Success

    Axios Instance 400 returned as Success

    Describe the bug

    when i use an axios instance i created , the 400 status code is returned in .then() as success but when i use the default axios it return as an error in the .catch() , i don't know why this is happening , i tried adding the validateStatus : () => return false and it keeps returning everything as success .

    To Reproduce

    import axios from "axios";
    
    export default axios.create({
      baseURL: "http://192.168.1.45:3000",
      headers: {
        "Content-type": "application/json",
      },
    });
    
    

    i imported the axiosToken on project initialization and injected my token and made an interceptor for the 401 error status code

    axiosTokenInstance.defaults.headers.common[
        "Authorization"
      ] = `Bearer ${auth.user.token}`;
    
    
      axiosTokenInstance.interceptors.response.use(
        (response) => {
          return response;
        },
        (error) => {
          if (error.response.status === 401) {
            auth.removeAsyncUser();
          }
          return error;
        }
      );
    

    Code snippet

    No response

    Expected behavior

    No response

    Axios Version

    No response

    Adapter Version

    No response

    Browser

    No response

    Browser Version

    No response

    Node.js Version

    No response

    OS

    No response

    Additional Library Versions

    No response

    Additional context/Screenshots

    No response

    opened by waelbenmustapha 0
Releases(1.2.2)
  • 1.2.2(Dec 29, 2022)

    [1.2.2] - 2022-12-29

    Fixed

    • fix(ci): fix release script inputs #5392
    • fix(ci): prerelease scipts #5377
    • fix(ci): release scripts #5376
    • fix(ci): typescript tests #5375
    • fix: Brotli decompression #5353
    • fix: add missing HttpStatusCode #5345

    Chores

    • chore(ci): set conventional-changelog header config #5406
    • chore(ci): fix automatic contributors resolving #5403
    • chore(ci): improved logging for the contributors list generator #5398
    • chore(ci): fix release action #5397
    • chore(ci): fix version bump script by adding bump argument for target version #5393
    • chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 #5342
    • chore(ci): GitHub Actions Release script #5384
    • chore(ci): release scripts #5364

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Dec 5, 2022)

    [1.2.1] - 2022-12-05

    Changed

    • feat(exports): export mergeConfig #5151

    Fixed

    • fix(CancelledError): include config #4922
    • fix(general): removing multiple/trailing/leading whitespace #5022
    • fix(headers): decompression for responses without Content-Length header #5306
    • fix(webWorker): exception to sending form data in web worker #5139

    Refactors

    • refactor(types): AxiosProgressEvent.event type to any #5308
    • refactor(types): add missing types for static AxiosError.from method #4956

    Chores

    • chore(docs): remove README link to non-existent upgrade guide #5307
    • chore(docs): typo in issue template name #5159

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Nov 22, 2022)

    [1.2.0] - 2022-11-10

    Changed

    • changed: refactored module exports #5162
    • change: re-added support for loading Axios with require('axios').default #5225

    Fixed

    • fix: improve AxiosHeaders class #5224
    • fix: TypeScript type definitions for commonjs #5196
    • fix: type definition of use method on AxiosInterceptorManager to match the the README #5071
    • fix: __dirname is not defined in the sandbox #5269
    • fix: AxiosError.toJSON method to avoid circular references #5247
    • fix: Z_BUF_ERROR when content-encoding is set but the response body is empty #5250

    Refactors

    • refactor: allowing adapters to be loaded by name #5277

    Chores

    • chore: force CI restart #5243
    • chore: update ECOSYSTEM.md #5077
    • chore: update get/index.html #5116
    • chore: update Sandbox UI/UX #5205
    • chore:(actions): remove git credentials after checkout #5235
    • chore(actions): bump actions/dependency-review-action from 2 to 3 #5266
    • chore(packages): bump loader-utils from 1.4.1 to 1.4.2 #5295
    • chore(packages): bump engine.io from 6.2.0 to 6.2.1 #5294
    • chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 #5241
    • chore(packages): bump loader-utils from 1.4.0 to 1.4.1 #5245
    • chore(docs): update Resources links in README #5119
    • chore(docs): update the link for JSON url #5265
    • chore(docs): fix broken links #5218
    • chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md #5170
    • chore(docs): typo fix line #856 and #920 #5194
    • chore(docs): typo fix #800 #5193
    • chore(docs): fix typos #5184
    • chore(docs): fix punctuation in README.md #5197
    • chore(docs): update readme in the Handling Errors section - issue reference #5260 #5261
    • chore: remove \b from filename #5207
    • chore(docs): update CHANGELOG.md #5137
    • chore: add sideEffects false to package.json #5025

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • 1.2.0-alpha.1(Nov 10, 2022)

    [1.2.0-alpha.1] - 2022-11-10

    Changed

    • changed: refactored module exports #5162
    • change: re-added support for loading Axios with require('axios').default #5225

    Fixed

    • fix: improve AxiosHeaders class #5224
    • fix: TypeScript type definitions for commonjs #5196
    • fix: type definition of use method on AxiosInterceptorManager to match the the README #5071
    • fix: __dirname is not defined in the sandbox #5269
    • fix: AxiosError.toJSON method to avoid circular references #5247
    • fix: Z_BUF_ERROR when content-encoding is set but the response body is empty #5250

    Refactors

    • refactor: allowing adapters to be loaded by name #5277

    Chores

    • chore: force CI restart #5243
    • chore: update ECOSYSTEM.md #5077
    • chore: update get/index.html #5116
    • chore: update Sandbox UI/UX #5205
    • chore:(actions): remove git credentials after checkout #5235
    • chore(actions): bump actions/dependency-review-action from 2 to 3 #5266
    • chore(packages): bump loader-utils from 1.4.1 to 1.4.2 #5295
    • chore(packages): bump engine.io from 6.2.0 to 6.2.1 #5294
    • chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 #5241
    • chore(packages): bump loader-utils from 1.4.0 to 1.4.1 #5245
    • chore(docs): update Resources links in README #5119
    • chore(docs): update the link for JSON URL #5265
    • chore(docs): fix broken links #5218
    • chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md #5170
    • chore(docs): typo fix line #856 and #920 #5194
    • chore(docs): typo fix #800 #5193
    • chore(docs): fix typos #5184
    • chore(docs): fix punctuation in README.md #5197
    • chore(docs): update readme in the Handling Errors section - issue reference #5260 #5261
    • chore: remove \b from filename #5207
    • chore(docs): update CHANGELOG.md #5137
    • chore: add sideEffects false to package.json #5025

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Oct 15, 2022)

    Added

    Added custom params serializer support #5113

    Fixed

    Fixed top-level export to keep them in-line with static properties #5109 Stopped including null values to query string. #5108 Restored proxy config backwards compatibility with 0.x #5097 Added back AxiosHeaders in AxiosHeaderValue #5103 Pin CDN install instructions to a specific version #5060 Handling of array values fixed for AxiosHeaders #5085

    Chores

    docs: match badge style, add link to them #5046 chore: fixing comments typo #5054 chore: update issue template #5061 chore: added progress capturing section to the docs; #5084

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v1.1.2(Oct 7, 2022)

  • v1.1.1(Oct 7, 2022)

  • v1.1.0(Oct 6, 2022)

  • v1.0.0(Oct 4, 2022)

    Added

    • Added stack trace to AxiosError #4624
    • Add AxiosError to AxiosStatic #4654
    • Replaced Rollup as our build runner #4596
    • Added generic TS types for the exposed toFormData helper #4668
    • Added listen callback function #4096
    • Added instructions for installing using PNPM #4207
    • Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill #4229
    • Added axios-url-template in ECOSYSTEM.md #4238
    • Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an Axios instance #4248
    • Added react hook plugin #4319
    • Adding HTTP status code for transformResponse #4580
    • Added blob to the list of protocols supported by the browser #4678
    • Resolving proxy from env on redirect #4436
    • Added enhanced toFormData implementation with additional options 4704
    • Adding Canceler parameters config and request #4711
    • Added automatic payload serialization to application/x-www-form-urlencoded #4714
    • Added the ability for webpack users to overwrite built-ins #4715
    • Added string[] to AxiosRequestHeaders type #4322
    • Added the ability for the url-encoded-form serializer to respect the formSerializer config #4721
    • Added isCancel type assert #4293
    • Added data URL support for node.js #4725
    • Adding types for progress event callbacks #4675
    • URL params serializer #4734
    • Added axios.formToJSON method #4735
    • Bower platform add data protocol #4804
    • Use WHATWG URL API instead of url.parse() #4852
    • Add ENUM containing Http Status Codes to typings #4903
    • Improve typing of timeout in index.d.ts #4934

    Changed

    • Updated AxiosError.config to be optional in the type definition #4665
    • Updated README emphasizing the URLSearchParam built-in interface over other solutions #4590
    • Include request and config when creating a CanceledError instance #4659
    • Changed func-names eslint rule to as-needed #4492
    • Replacing deprecated substr() with slice() as substr() is deprecated #4468
    • Updating HTTP links in README.md to use HTTPS #4387
    • Updated to a better trim() polyfill #4072
    • Updated types to allow specifying partial default headers on instance create #4185
    • Expanded isAxiosError types #4344
    • Updated type definition for Axios instance methods #4224
    • Updated eslint config #4722
    • Updated Docs #4742
    • Refactored Axios to use ES2017 #4787

    Deprecated

    • There are multiple deprecations, refactors and fixes provided in this release. Please read through the full release notes to see how this may impact your project and use case.

    Removed

    • Removed incorrect argument for NetworkError constructor #4656
    • Removed Webpack #4596
    • Removed function that transforms arguments to array #4544

    Fixed

    • Fixed grammar in README #4649
    • Fixed code error in README #4599
    • Optimized the code that checks cancellation #4587
    • Fix URL pointing to defaults.js in README #4532
    • Use type alias instead of interface for AxiosPromise #4505
    • Fix some word spelling and lint style in code comments #4500
    • Edited readme with 3 updated browser icons of Chrome, Firefox and Safari #4414
    • Bump follow-redirects from 1.14.9 to 1.15.0 #4673
    • Fixing HTTP tests to avoid hanging when assertions fail #4435
    • Fix TS definition for AxiosRequestTransformer #4201
    • Fix grammatical issues in README #4232
    • Fixing instance.defaults.headers type #4557
    • Fixed race condition on immediate requests cancellation #4261
    • Fixing Z_BUF_ERROR when no content #4701
    • Fixing proxy beforeRedirect regression #4708
    • Fixed AxiosError status code type #4717
    • Fixed AxiosError stack capturing #4718
    • Fixing AxiosRequestHeaders typings #4334
    • Fixed max body length defaults #4731
    • Fixed toFormData Blob issue on node>v17 #4728
    • Bump grunt from 1.5.2 to 1.5.3 #4743
    • Fixing content-type header repeated #4745
    • Fixed timeout error message for HTTP 4738
    • Request ignores false, 0 and empty string as body values #4785
    • Added back missing minified builds #4805
    • Fixed a type error #4815
    • Fixed a regression bug with unsubscribing from cancel token; #4819
    • Remove repeated compression algorithm #4820
    • The error of calling extends to pass parameters #4857
    • SerializerOptions.indexes allows boolean | null | undefined #4862
    • Require interceptors to return values #4874
    • Removed unused imports #4949
    • Allow null indexes on formSerializer and paramsSerializer #4960

    Chores

    • Set permissions for GitHub actions #4765
    • Included githubactions in the dependabot config #4770
    • Included dependency review #4771
    • Update security.md #4784
    • Remove unnecessary spaces #4854
    • Simplify the import path of AxiosError #4875
    • Fix Gitpod dead link #4941
    • Enable syntax highlighting for a code block #4970
    • Using Logo Axios in Readme.md #4993
    • Fix markup for note in README #4825
    • Fix typo and formatting, add colons #4853
    • Fix typo in readme #4942

    Security

    • Update SECURITY.md #4687

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.1(May 31, 2022)

    Added

    • Added stack trace to AxiosError #4624
    • Add AxiosError to AxiosStatic #4654
    • Replaced Rollup as our build runner #4596
    • Added generic TS types for the exposed toFormData helper #4668
    • Added listen callback function #4096
    • Added instructions for installing using PNPM #4207
    • Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill #4229
    • Added axios-url-template in ECOSYSTEM.md #4238
    • Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an axios instance #4248
    • Added react hook plugin #4319
    • Adding HTTP status code for transformResponse #4580
    • Added blob to the list of protocols supported by the browser #4678
    • Resolving proxy from env on redirect #4436
    • Added enhanced toFormData implementation with additional options 4704
    • Adding Canceler parameters config and request #4711
    • Added automatic payload serialization to application/x-www-form-urlencoded #4714
    • Added the ability for webpack users to overwrite built-ins #4715
    • Added string[] to AxiosRequestHeaders type #4322
    • Added the ability for the url-encoded-form serializer to respect the formSerializer config #4721
    • Added isCancel type assert #4293
    • Added data URL support for node.js #4725
    • Adding types for progress event callbacks #4675
    • URL params serializer #4734
    • Added axios.formToJSON method #4735

    Changed

    • Updated AxiosError.config to be optional in the type definition #4665
    • Updated README emphasizing the URLSearchParam built-in interface over other solutions #4590
    • Include request and config when creating a CanceledError instance #4659
    • Changed func-names eslint rule to as-needed #4492
    • Replacing deprecated substr() with slice() as substr() is deprecated #4468
    • Updating HTTP links in README.md to use HTTPS #4387
    • Updated to a better trim() polyfill #4072
    • Updated types to allow specifying partial default headers on instance create #4185
    • Expanded isAxiosError types #4344
    • Updated type definition for axios instance methods #4224
    • Updated eslint config #4722
    • Updated Docs #4742

    Removed

    • Removed incorrect argument for NetworkError constructor #4656
    • Removed Webpack #4596
    • Removed function that transform arguments to array #4544

    Fixed

    • Fixed grammar in README #4649
    • Fixed code error in README #4599
    • Optimized the code that checks cancellation #4587
    • Fix url pointing to defaults.js in README #4532
    • Use type alias instead of interface for AxiosPromise #4505
    • Fix some word spelling and lint style in code comments #4500
    • Edited readme with 3 updated browser icons of Chrome, FireFox and Safari #4414
    • Bump follow-redirects from 1.14.9 to 1.15.0 #4673
    • Fixing http tests to avoid hanging when assertions fail #4435
    • Fix TS definition for AxiosRequestTransformer #4201
    • Fix grammatical issues in README #4232
    • Fixing instance.defaults.headers type #4557
    • Fixed race condition on immediate requests cancellation #4261
    • Fixing Z_BUF_ERROR when no content #4701
    • Fixing proxy beforeRedirect regression #4708
    • Fixed AxiosError status code type #4717
    • Fixed AxiosError stack capturing #4718
    • Fixing AxiosRequestHeaders typings #4334
    • Fixed max body length defaults #4731
    • Fixed toFormData Blob issue on node>v17 #4728
    • Bump grunt from 1.5.2 to 1.5.3 #4743
    • Fixing content-type header repeated #4745
    • Fixed timeout error message for http 4738

    Security

    • Update SECURITY.md #4687

    Contributors to this release

    Source code(tar.gz)
    Source code(zip)
  • v0.27.2(Apr 27, 2022)

  • v0.27.1(Apr 26, 2022)

  • v0.27.0(Apr 25, 2022)

    Breaking changes:

    • New toFormData helper function that allows the implementor to pass an object and allow axios to convert it to FormData (#3757)
    • Removed functionality that removed the the Content-Type request header when passing FormData (#3785)
    • (*) Refactored error handling implementing AxiosError as a constructor, this is a large change to error handling on the whole (#3645)
    • Separated responsibility for FormData instantiation between transformRequest and toFormData (#4470)
    • (*) Improved and fixed multiple issues with FormData support (#4448)

    QOL and DevX improvements:

    • Added a multipart/form-data testing playground allowing contributors to debug changes easily (#4465)

    Fixes and Functionality:

    • Refactored project file structure to avoid circular imports (#4515) & (#4516)
    • Bumped follow-redirects to ^1.14.9 (#4562)

    Internal and Tests:

    • Updated dev dependencies to latest version

    Documentation:

    • Fixing incorrect link in changelog (#4551)

    Notes:

    • (*) Please read these pull requests before updating, these changes are very impactful and far reaching.
    Source code(tar.gz)
    Source code(zip)
  • v0.26.1(Mar 9, 2022)

  • v0.26.0(Feb 13, 2022)

    Fixes and Functionality:

    • Fixed The timeoutErrorMessage property in config not work with Node.js (#3581)
    • Added errors to be displayed when the query parsing process itself fails (#3961)
    • Fix/remove url required (#4426)
    • Update follow-redirects dependency due to Vulnerability (#4462)
    • Bump karma from 6.3.11 to 6.3.14 (#4461)
    • Bump follow-redirects from 1.14.7 to 1.14.8 (#4473)
    Source code(tar.gz)
    Source code(zip)
  • v0.25.0(Jan 18, 2022)

    Breaking changes:

    • Fixing maxBodyLength enforcement (#3786)
    • Don't rely on strict mode behaviour for arguments (#3470)
    • Adding error handling when missing url (#3791)
    • Update isAbsoluteURL.js removing escaping of non-special characters (#3809)
    • Use native Array.isArray() in utils.js (#3836)
    • Adding error handling inside stream end callback (#3967)

    Fixes and Functionality:

    • Added aborted even handler (#3916)
    • Header types expanded allowing boolean and number types (#4144)
    • Fix cancel signature allowing cancel message to be undefined (#3153)
    • Updated type checks to be formulated better (#3342)
    • Avoid unnecessary buffer allocations (#3321)
    • Adding a socket handler to keep TCP connection live when processing long living requests (#3422)
    • Added toFormData helper function (#3757)
    • Adding responseEncoding prop type in AxiosRequestConfig (#3918)

    Internal and Tests:

    • Adding axios-test-instance to ecosystem (#3786)
    • Optimize the logic of isAxiosError (#3546)
    • Add tests and documentation to display how multiple inceptors work (#3564)
    • Updating follow-redirects to version 1.14.7 (#4379)

    Documentation:

    • Fixing changelog to show corrext pull request (#4219)
    • Update upgrade guide for https proxy setting (#3604)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.24.0(Oct 25, 2021)

  • v0.23.0(Oct 12, 2021)

    Breaking changes:

    • Distinguish request and response data types (#4116)
    • Change never type to unknown (#4142)
    • Fixed TransitionalOptions typings (#4147)

    Fixes and Functionality:

    • Adding globalObject: 'this' to webpack config (#3176)
    • Adding insecureHTTPParser type to AxiosRequestConfig (#4066)
    • Fix missing semicolon in typings (#4115)
    • Fix response headers types (#4136)

    Internal and Tests:

    • Improve timeout error when timeout is browser default (#3209)
    • Fix node version on CI (#4069)
    • Added testing to TypeScript portion of project (#4140)

    Documentation:

    • Rename Angular to AngularJS (#4114)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.22.0(Oct 1, 2021)

    Fixes and Functionality:

    • Caseless header comparing in HTTP adapter (#2880)
    • Avoid package.json import fixing issues and warnings related to this (#4041), (#4065)
    • Fixed cancelToken leakage and added AbortController support (#3305)
    • Updating CI to run on release branches
    • Bump follow redirects version
    • Fixed default transitional config for custom Axios instance; (#4052)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.21.4(Sep 6, 2021)

  • 0.21.3(Sep 4, 2021)

    Fixes and Functionality:

    • Fixing response interceptor not being called when request interceptor is attached (#4013)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.21.2(Sep 4, 2021)

    Fixes and Functionality:

    • Updating axios requests to be delayed by pre-emptive promise creation (#2702)
    • Adding "synchronous" and "runWhen" options to interceptors api (#2702)
    • Updating of transformResponse (#3377)
    • Adding ability to omit User-Agent header (#3703)
    • Adding multiple JSON improvements (#3688, #3763)
    • Fixing quadratic runtime and extra memory usage when setting a maxContentLength (#3738)
    • Adding parseInt to config.timeout (#3781)
    • Adding custom return type support to interceptor (#3783)
    • Adding security fix for ReDoS vulnerability (#3980)

    Internal and Tests:

    • Updating build dev dependancies (#3401)
    • Fixing builds running on Travis CI (#3538)
    • Updating follow rediect version (#3694, #3771)
    • Updating karma sauce launcher to fix failing sauce tests (#3712, #3717)
    • Updating content-type header for application/json to not contain charset field, according do RFC 8259 (#2154)
    • Fixing tests by bumping karma-sauce-launcher version (#3813)
    • Changing testing process from Travis CI to GitHub Actions (#3938)

    Documentation:

    • Updating documentation around the use of AUTH_TOKEN with multiple domain endpoints (#3539)
    • Remove duplication of item in changelog (#3523)
    • Fixing gramatical errors (#2642)
    • Fixing spelling error (#3567)
    • Moving gitpod metion (#2637)
    • Adding new axios documentation website link (#3681, #3707)
    • Updating documentation around dispatching requests (#3772)
    • Adding documentation for the type guard isAxiosError (#3767)
    • Adding explanation of cancel token (#3803)
    • Updating CI status badge (#3953)
    • Fixing errors with JSON documentation (#3936)
    • Fixing README typo under Request Config (#3825)
    • Adding axios-multi-api to the ecosystem file (#3817)
    • Adding SECURITY.md to properly disclose security vulnerabilities (#3981)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.21.1(Jan 4, 2021)

    Fixes and Functionality:

    • Hotfix: Prevent SSRF (#3410)
    • Protocol not parsed when setting proxy config from env vars (#3070)
    • Updating axios in types to be lower case (#2797)
    • Adding a type guard for AxiosError (#2949)

    Internal and Tests:

    • Remove the skipping of the socket http test (#3364)
    • Use different socket for Win32 test (#3375)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Oct 23, 2020)

    Fixes and Functionality:

    • Fixing requestHeaders.Authorization (#3287)
    • Fixing node types (#3237)
    • Fixing axios.delete ignores config.data (#3282)
    • Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" (#3289)
    • Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled (#3200)

    Internal and Tests:

    • Lock travis to not use node v15 (#3361)

    Documentation:

    • Fixing simple typo, existant -> existent (#3252)
    • Fixing typos (#3309)

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Aug 21, 2020)

  • v0.20.0-0(Jul 15, 2020)

    Fixes and Functionality:

    • Fixing response with utf-8 BOM can not parse to json (#2419)
      • fix: remove byte order marker (UTF-8 BOM) when transform response
      • fix: remove BOM only utf-8
      • test: utf-8 BOM
      • fix: incorrect param name
    • Refactor mergeConfig without utils.deepMerge (#2844)
      • Adding failing test
      • Fixing #2587 default custom config persisting
      • Adding Concat keys and filter duplicates
      • Fixed value from CPE
      • update for review feedbacks
      • no deepMerge
      • only merge between plain objects
      • fix rename
      • always merge config by mergeConfig
      • extract function mergeDeepProperties
      • refactor mergeConfig with all keys, and add special logic for validateStatus
      • add test for resetting headers
      • add lots of tests and fix a bug
      • should not inherit data
      • use simple toString
    • Fixing overwrite Blob/File type as Content-Type in browser. (#1773)
    • Fixing an issue that type 'null' is not assignable to validateStatus (#2773)
    • Fixing special char encoding (#1671)
      • removing @ character from replacement list since it is a reserved character
      • Updating buildURL test to not include the @ character
      • Removing console logs
    • Fixing password encoding with special characters in basic authentication (#1492)
      • Fixing password encoding with special characters in basic authentication
      • Adding test to check if password with non-Latin1 characters pass
    • Fixing 'Network Error' in react native android (#1487) There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug.
    • Fixing Cookie Helper with Asyc Components (#1105) (#1107)
    • Fixing 'progressEvent' type (#2851)
      • Fix 'progressEvent' type
      • Update axios.ts
    • Fixing getting local files (file://) failed (#2470)
      • fix issue #2416, #2396
      • fix Eslint warn
      • Modify judgment conditions
      • add unit test
      • update unit test
      • update unit test
    • Allow PURGE method in typings (#2191)
    • Adding option to disable automatic decompression (#2661)
      • Adding ability to disable auto decompression
      • Updating decompress documentation in README
      • Fixing test\unit\adapters\http.js lint errors
      • Adding test for disabling auto decompression
      • Removing changes that fixed lint errors in tests
      • Removing formating change to unit test
    • Add independent maxBodyLength option (#2781)
      • Add independent option to set the maximum size of the request body
      • Remove maxBodyLength check
      • Update README
      • Assert for error code and message
    • Adding responseEncoding to mergeConfig (#1745)
    • Compatible with follow-redirect aborts the request (#2689)
      • Compatible with follow-redirect aborts the request
      • Use the error code
    • Fix merging of params (#2656)
      • Name function to avoid ESLint func-names warning
      • Switch params config to merge list and update tests
      • Restore testing of both false and null
      • Restore test cases for keys without defaults
      • Include test for non-object values that aren't false-y.
    • Revert finally as then (#2683)

    Internal and Tests:

    • Fix stale bot config (#3049)
      • fix stale bot config
      • fix multiple lines
    • Add days and change name to work (#3035)
    • Update close-issues.yml (#3031)
      • Update close-issues.yml Update close message to read better 😄
      • Fix use of quotations Use single quotes as per other .yml files
      • Remove user name form message
    • Add GitHub actions to close stale issues/prs (#3029)
      • prepare stale actions
      • update messages
      • Add exempt labels and lighten up comments
    • Add GitHub actions to close invalid issues (#3022)
      • add close actions
      • fix with checkout
      • update issue templates
      • add reminder
      • update close message
    • Add test with Node.js 12 (#2860)
      • test with Node.js 12
      • test with latest
    • Adding console log on sandbox server startup (#2210)
      • Adding console log on sandbox server startup
      • Update server.js Add server error handeling
      • Update server.js Better error message, remove retry.
    • Adding tests for method options type definitions (#1996) Update tests.
    • Add test for redirecting with too large response (#2695)
    • Fixing unit test failure in Windows OS (#2601)
    • Fixing issue for HEAD method and gziped repsonse (#2666)
    • Fix tests in browsers (#2748)
    • chore: add jsdelivr and unpkg support (#2443)

    Documentation:

    • Adding support for URLSearchParams in node (#1900)
      • Adding support for URLSearchParams in node
      • Remove un-needed code
      • Update utils.js
      • Make changes as suggested
    • Adding table of content (preview) (#3050)
      • add toc (preview)
      • remove toc in toc Signed-off-by: Moni [email protected]
      • fix sublinks
      • fix indentation
      • remove redundant table links
      • update caps and indent
      • remove axios
    • Replace 'blacklist' with 'blocklist' (#3006)
    • docs(): Detailed config options environment. (#2088)
      • docs(): Detailed config options environment.
      • Update README.md
    • Include axios-data-unpacker in ECOSYSTEM.md (#2080)
    • Allow opening examples in Gitpod (#1958)
    • Remove axios.all() and axios.spread() from Readme.md (#2727)
      • remove axios.all(), axios.spread()
      • replace example
      • axios.all() -> Promise.all()
      • axios.spread(function (acct, perms)) -> function (acct, perms)
      • add deprecated mark
    • Update README.md (#2887) Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE.
    • Include swagger-taxos-codegen in ECOSYSTEM.md (#2162)
    • Add CDNJS version badge in README.md (#878) This badge will show the version on CDNJS!
    • Documentation update to clear up ambiguity in code examples (#2928)
      • Made a adjustment to the documenation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side.
    • Update README.md about validateStatus (#2912) Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500"
    • Updating documentation for usage form-data (#2805) Closes #2049
    • Fixing CHANGELOG.md issue link (#2784)
    • Include axios-hooks in ECOSYSTEM.md (#2003)
    • Added Response header access instructions (#1901)
      • Added Response header access instructions
      • Added note about using bracket notation
    • Add onUploadProgress and onDownloadProgress are browser only (#2763) Saw in #928 and #1966 that onUploadProgress and onDownloadProgress only work in the browser and was missing that from the README.
    • Update ' sign to ` in proxy spec (#2778)
    • Adding jsDelivr link in README (#1110)
      • Adding jsDelivr link
      • Add SRI
      • Remove SRI

    Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

    Source code(tar.gz)
    Source code(zip)
  • v0.19.2(Jan 22, 2020)

  • 0.19.1(Jan 7, 2020)

    Fixes and Functionality:

    • Fixing invalid agent issue (#1904)
    • Fix ignore set withCredentials false (#2582)
    • Delete useless default to hash (#2458)
    • Fix HTTP/HTTPs agents passing to follow-redirect (#1904)
    • Fix ignore set withCredentials false (#2582)
    • Fix CI build failure (#2570)
    • Remove dependency on is-buffer from package.json (#1816)
    • Adding options typings (#2341)
    • Adding Typescript HTTP method definition for LINK and UNLINK. (#2444)
    • Update dist with newest changes, fixes Custom Attributes issue
    • Change syntax to see if build passes (#2488)
    • Update Webpack + deps, remove now unnecessary polyfills (#2410)
    • Fix to prevent XSS, throw an error when the URL contains a JS script (#2464)
    • Add custom timeout error copy in config (#2275)
    • Add error toJSON example (#2466)
    • Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… (#2451)
    • Fixing subdomain handling on no_proxy (#2442)
    • Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426] and (#2547)
    • Add toJSON property to AxiosError type (#2427)
    • Fixing socket hang up error on node side for slow response. (#1752)
    • Alternative syntax to send data into the body (#2317)
    • Fixing custom config options (#2207)
    • Fixing set config.method after mergeConfig for Axios.prototype.request (#2383)
    • Axios create url bug (#2290)
    • Do not modify config.url when using a relative baseURL (resolves #1628) (#2391)
    • Add typescript HTTP method definition for LINK and UNLINK (#2444)

    Internal:

    • Revert "Update Webpack + deps, remove now unnecessary polyfills" (#2479)
    • Order of if/else blocks is causing unit tests mocking XHR. (#2201)
    • Add license badge (#2446)
    • Fix travis CI build #2386
    • Fix cancellation error on build master. #2290 #2207 (#2407)

    Documentation:

    • Fixing typo in CHANGELOG.md: s/Functionallity/Functionality (#2639)
    • Fix badge, use master branch (#2538)
    • Fix typo in changelog #2193
    • Document fix (#2514)
    • Update docs with no_proxy change, issue #2484 (#2513)
    • Fixing missing words in docs template (#2259)
    • 🐛Fix request finally documentation in README (#2189)
    • updating spelling and adding link to docs (#2212)
    • docs: minor tweak (#2404)
    • Update response interceptor docs (#2399)
    • Update README.md (#2504)
    • Fix word 'sintaxe' to 'syntax' in README.md (#2432)
    • upadating README: notes on CommonJS autocomplete (#2256)
    • Fix grammar in README.md (#2271)
    • Doc fixes, minor examples cleanup (#2198)
    Source code(tar.gz)
    Source code(zip)
  • v0.18.1(Jun 1, 2019)

  • v0.19.0(May 30, 2019)

    Fixes and Functionality:

    • Unzip response body only for statuses != 204 (#1129) - drawski
    • Destroy stream on exceeding maxContentLength (fixes #1098) (#1485) - Gadzhi Gadzhiev
    • Makes Axios error generic to use AxiosResponse (#1738) - Suman Lama
    • Fixing Mocha tests by locking follow-redirects version to 1.5.10 (#1993) - grumblerchester
    • Allow uppercase methods in typings. (#1781) - Ken Powers
    • Fixing .eslintrc without extension (#1789) - Manoel
    • Consistent coding style (#1787) - Ali Servet Donmez
    • Fixing building url with hash mark (#1771) - Anatoly Ryabov
    • This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after #, because client cut everything after #
    • Preserve HTTP method when following redirect (#1758) - Rikki Gibson
    • Add getUri signature to TypeScript definition. (#1736) - Alexander Trauzzi
    • Adding isAxiosError flag to errors thrown by axios (#1419) - Ayush Gupta
    • Fix failing SauceLabs tests by updating configuration - Emily Morehouse

    Documentation:

    • Add information about auth parameter to README (#2166) - xlaguna
    • Add DELETE to list of methods that allow data as a config option (#2169) - Daniela Borges Matos de Carvalho
    • Update ECOSYSTEM.md - Add Axios Endpoints (#2176) - Renan
    • Add r2curl in ECOSYSTEM (#2141) - 유용우 / CX
    • Update README.md - Add instructions for installing with yarn (#2036) - Victor Hermes
    • Fixing spacing for README.md (#2066) - Josh McCarty
    • Update README.md. - Change .then to .finally in example code (#2090) - Omar Cai
    • Clarify what values responseType can have in Node (#2121) - Tyler Breisacher
    • docs(ECOSYSTEM): add axios-api-versioning (#2020) - Weffe
    • It seems that responseType: 'blob' doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser
    • Add issue templates - Emily Morehouse
    • Update README.md. - Add Querystring library note (#1896) - Dmitriy Eroshenko
    • Add react-hooks-axios to Libraries section of ECOSYSTEM.md (#1925) - Cody Chan
    • Clarify in README that default timeout is 0 (no timeout) (#1750) - Ben Standefer
    Source code(tar.gz)
    Source code(zip)
JavaScript OAuth 1.0a signature generator (RFC 5849) for node and the browser

OAuth 1.0a signature generator for node and the browser Compliant with RFC 5843 + Errata ID 2550 and community spec Installation Install with npm: npm

Marco Bettiolo 230 Dec 16, 2022
🤠 An opinionated AJAX client for Ruby on Rails APIs

Rails Ranger Exploring the routes and paths of Ruby on Rails APIs Github Repository | Documentation Rails Ranger is a thin layer on top of Axios, whic

Victor Marques 37 Nov 22, 2022
Job scheduler and rate limiter, supports Clustering

bottleneck Bottleneck is a lightweight and zero-dependency Task Scheduler and Rate Limiter for Node.js and the browser. Bottleneck is an easy solution

Simon Grondin 1.4k Jan 3, 2023
Bearer provides all of the tools to build, run and manage API integrations.

Bearer - The API Integration Framework Bearer provides all of the tools to build, run and manage API Learn more Archive Status Bearer JS has been arch

Bearer.sh 22 Oct 31, 2022
Optic documents and tests your API as you build it

Optic uses real traffic to document and test your APIs Language agnostic, works with any Rest API Optic observes development traffic and learns your A

Optic 1k Dec 31, 2022
⚛️ Hooks for fetching, caching and updating asynchronous data in React

Hooks for fetching, caching and updating asynchronous data in React Enjoy this library? Try the entire TanStack! React Table, React Form, React Charts

Tanner Linsley 32k Dec 31, 2022
Promise based HTTP client for the browser and node.js

axios Promise based HTTP client for the browser and node.js New axios docs website: click here Table of Contents Features Browser Support Installing E

axios 98k Dec 31, 2022
Promise based HTTP client for the browser and node.js

axios Promise based HTTP client for the browser and node.js New axios docs website: click here Table of Contents Features Browser Support Installing E

axios 98k Jan 5, 2023
⚡️The Fullstack React Framework — built on Next.js

The Fullstack React Framework "Zero-API" Data Layer — Built on Next.js — Inspired by Ruby on Rails Read the Documentation “Zero-API” data layer lets y

⚡️Blitz 12.5k Jan 4, 2023
Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Lily Scott 3 Feb 28, 2022
Adds promise support (rejects(), doesNotReject()) to tape by decorating it using tape-promise.

Tape With Promises Adds promise support (rejects(), doesNotReject()) to tape by decorating it using tape-promise. Install npm install --save-dev @smal

Small Technology Foundation 3 Mar 21, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
Javascript client for Sanity. Works in node.js and modern browsers (older browsers needs a Promise polyfill).

@sanity/client Javascript client for Sanity. Works in node.js and modern browsers (older browsers needs a Promise polyfill). Requirements Sanity Clien

Sanity 23 Nov 29, 2022
🌳 Tiny & elegant JavaScript HTTP client based on the browser Fetch API

Huge thanks to for sponsoring me! Ky is a tiny and elegant HTTP client based on the browser Fetch API Ky targets modern browsers and Deno. For older b

Sindre Sorhus 8.5k Jan 2, 2023
Very very very powerful, extensible http client for both node.js and browser.

ES-Fetch-API 中文 | English Very very very powerful, extensible http client for both node.js and browser. Why should you use ES-Fetch API? Still using a

null 17 Dec 12, 2022
Node.js web server framework for Http/1.1 or Http/2

Node.js web server framework for Http/1.1 or Http/2 Description: This is http framework, you can use it to create Http/1.1 or Http/2 service。 Now let'

Jeremy Yu 10 Mar 24, 2022
Processing Foundation 18.6k Jan 1, 2023
📡Usagi-http-interaction: A library for interacting with Http Interaction API

?? - A library for interacting with Http Interaction API (API for receiving interactions.)

Rabbit House Corp 3 Oct 24, 2022