Skip to content

An Axios adapter that uses native `fetch`. Useful for Cloudflare Workers and ServiceWorker environments.

License

Notifications You must be signed in to change notification settings

haverstack/axios-fetch-adapter

Repository files navigation

axios-fetch-adapter

npm badge checks badge codecov badge license badge

An Axios adapter that uses native fetch or a custom fetch function. Useful for Cloudflare Workers and ServiceWorker environments.

Note: This adapter was designed for version 0.21.1 of Axios, which is still used in prominent e-commerce SDKs.

Install

npm install @haverstack/axios-fetch-adapter

Use

The default use-case for this library is:

import axios from "axios";
import fetchAdapter from "@haverstack/axios-fetch-adapter";

const client = axios.create({
  adapter: fetchAdapter
});

Using with custom fetch functions

If your application does not use a globally-available fetch, you can specify your own custom fetch function instead:

import axios from "axios";
import { createFetchAdapter } from "@haverstack/axios-fetch-adapter";
import myCustomFetch from "my-custom-fetch";

const myCustomFetchAdapter = createFetchAdapter({ fetch: myCustomFetch });
const client = axios.create({
  adapter: myCustomFetchAdapter
});

If your application allows for using non-fully-qualified URLs, e.g. /foo, use the disableRequest option to pass URLs directly to your custom fetch function without creating a Request object:

import axios from "axios";
import { createFetchAdapter } from "@haverstack/axios-fetch-adapter";
import myCustomFetch from "my-custom-fetch";

const customAdapter = createFetchAdapter({
  fetch: myCustomFetch,
  disableRequest: true
});
const client = axios.create({
  adapter: myCustomFetchAdapter
});

Note: A side effect of the disableRequest option is that the AxiosResponse object will only have the request URL in its request property instead of a Request object. This means that accessing, for example, response.request.url will throw an error.

Using with the Square Node.js SDK

To use this library with the square package to manage your Square resources:

import { Client, Environment } from "square";
import fetchAdapter from "@haverstack/axios-fetch-adapter";

const client = new Client({
  accessToken,
  environment,
  unstable_httpClientOptions: { adapter: fetchAdapter }
});

Development

# Run tests
npm run test

# Check tests, linting, and formatting
npm run check

# Fix linting and formatting
npm run fix

A Miniflare testing environment is used in order to simulate a Cloudflare Worker or a ServiceWorker. This testing environment is also useful because Node does not have a native implementation of fetch.

Acknowledgements

The code in this repo draws heavily from the following projects:

  • vespaiach/axios-fetch-adapter: Most of the initial code in this repo was copied from here. Licensed MIT.
  • axios/axios: The buildFullPath function from axios has been copied here and modified to be more flexible. Licensed MIT.

License

MIT

About

An Axios adapter that uses native `fetch`. Useful for Cloudflare Workers and ServiceWorker environments.

Resources

License

Stars

Watchers

Forks

Packages

No packages published