@code6226/cf-workers-fetch-helpers
v1.3.0
Published
A collection of chainable helpers to adapt the Fetch API
Downloads
2
Readme
Cloudflare Workers Fetch Helpers
A collection of chainable helpers to adapt the Fetch API.
Installation
npm install --save @glenstack/cf-workers-fetch-helpers
Usage
All methods exported from this library can be chained together and have the following usage:
import {
fetchHelper,
otherFetchHelper,
} from "@glenstack/cf-workers-fetch-helpers";
const fetch1 = fetchHelper(fetch, fetchHelperOptions); // `fetch` is the built-in fetch global
const fetch2 = otherFetchHelper(fetch1, otherFetchHelperOptions); // NOTE: `fetch1` is being chained here, such that `fetch2(request)` calls `fetch1(request)`, which calls `fetch(request)`
(async () => {
const response = await fetch2("https://example.com");
})();
Where:
fetch
,fetch1
andfetch2
are all Fetch compatible functions,fetchHelper
andotherFetchHelper
are fictional functions in this library (see below for the real ones),fetchHelperOptions
andotherFetchHelperOptions
are the options for these fictional helper functions (again, the real functions and their options follow).
alterURL
Changes the Request URL.
Options Signature
type options =
| {
prepend?: string;
append?: string;
}
| {
mutate: (prevURL: string) => string;
};
Options
| Option | Notes |
| --------- | ------------------------------------------------------- |
| prepend
| Prepends the URL with a given string. |
| append
| Appends the URL with a given string. |
| mutate
| A function that, when given a URL, returns the new URL. |
Example Usage
import { alterURL } from "@glenstack/cf-workers-fetch-helpers";
const gitHubFetch = alterURL(fetch, { prepend: "https://api.github.com" });
(async () => {
const response = await gitHubFetch("/meta");
})();
proxyHost
Replaces the host of a Request URL.
Options Signature
type options = {
host: string;
};
Options
| Option | Notes |
| ------ | ------------------------------------------- |
| host
| The new host to replace in the Request URL. |
Example Usage
import { proxyHost } from "@glenstack/cf-workers-fetch-helpers";
const proxiedFetch = proxyHost(fetch, { host: "about.gitlab.com" })(
async () => {
const response = await proxiedFetch("https://github.com/pricing");
}
)();
addHeaders
Adds headers to the Request.
Options Signature
type options = {
headers: RequestInit["headers"];
};
Options
| Option | Notes |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| headers
| A Headers object, an object literal, or an array of two-item arrays to set request’s headers. |
Example Usage
import { addHeaders } from "@glenstack/cf-workers-fetch-helpers";
const gitHubFetch = addHeaders(fetch, {
headers: { Authorization: "Basic xyz", "User-Agent": "Awesome-Octocat-App" },
});
(async () => {
const response = await gitHubFetch("/meta");
})();
authorization
Adds an Authorization header. The following types of authorization are supported:
- Basic
- Bearer
Options Signature
type options =
| {
username?: string;
password?: string;
}
| {
bearere: string;
};
Options
| Option | Notes |
| ---------- | -------------------------------------------- |
| username
| Used in basic authorization. |
| password
| Used in basic authorization. |
| bearer
| A bearer token used in bearer authorization. |
Example Usage
import { authorization } from "@glenstack/cf-workers-fetch-helpers";
const gitHubFetch = authorization(fetch, { bearer: "aToken" });
(async () => {
const response = await gitHubFetch("/meta");
})();
oauth2
A OAuth2 client which automatically refreshes tokens.
Options Signature
type options = {
tokenRefreshed?: (options: {
accessToken?: string;
refreshToken: string;
}) => Promise<void>;
accessToken?: string;
authorizationHasExpired?: (response: Response) => Promise<boolean>;
refreshToken: string;
tokenEndpoint: string;
clientID: string;
clientSecret: string;
redirectURI?: string;
scope?: string;
refreshFetch?: typeof fetch;
};
Options
| Option | Notes |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| tokenRefreshed
| A function called when a new token is generated. Useful if you wish to persist the latest valid tokens. |
| accessToken
| An Access Token. |
| authorizationHasExpired
| A function to evaluate if, given a Response, the Access Token is now invalid. Defaults to returning true if the Response status code is 401. |
| refreshToken
| A valid Refresh Token. |
| tokenEndpoint
| The URL of the authorization server which refreshes tokens. |
| clientID
| The application client ID. |
| clientSecret
| The application client secret. |
| redirectURI
| Although not in the specification, some authorization servers require a valid redirect URI when refreshing tokens. |
| scope
| The scope of the access token. |
| refreshFetch
| The fetch function to use when making calls to the authorization server. Defaults to the global fetch function. |
Example Usage
import { oauth2 } from "@glenstack/cf-workers-fetch-helpers";
const gitHubFetch = oauth2(fetch, {
tokenRefreshed: async ({ accessToken, refreshToken }) => {
console.log("Tokens have been refreshed!", { accessToken, refreshToken });
},
accessToken: "anAccessToken",
refreshToken: "aRefreshToken",
tokenEndpoint: "https://github.com/login/oauth/access_token",
clientID: "anID",
clientSecret: "aSecret",
});
(async () => {
const response = await gitHubFetch("https://api.github.com/meta");
})();