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.
npm install @haverstack/axios-fetch-adapter
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
});
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 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
.
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 fromaxios
has been copied here and modified to be more flexible. Licensed MIT.