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.1of Axios, which is still used in prominent e-commerce SDKs.
npm install @haverstack/axios-fetch-adapterThe default use-case for this library is:
import axios from "axios";
import fetchAdapter from "@haverstack/axios-fetch-adapter";
const client = axios.create({
adapter: fetchAdapter
});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.
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 }
});# Run tests
npm run test
# Check tests, linting, and formatting
npm run check
# Fix linting and formatting
npm run fixA 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.
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
buildFullPathfunction fromaxioshas been copied here and modified to be more flexible. Licensed MIT.