4.0.1 • Published 8 months ago

@devmoods/fetch v4.0.1

Weekly downloads
48
License
MIT
Repository
github
Last release
8 months ago

@devmoods/fetch

JSON-friendly wrapper around the Fetch API Fetch API with timeouts and automatic retries

npm install @devmoods/fetch

Features

  • Assume JSON responses and always make it available as response.jsonData - no need to await response.json()
  • Create fetch instances with pre-configured options and root URLs.
  • Type argument fetch<T> to specify response types (no validation, so use wisely)
  • Throw a HttpError when status < 200 or status >= 400 (containing error.response)
  • Timeouts
  • Automatic retries with configurable behaviour
  • Request and Response interceptors
  • Attach X-Request-ID to all requests. Retried requests have the same ID

Examples

Setup a configured fetch instance

import { createFetch, TimeoutError } from '@devmoods/fetch';

const fetch = createFetch({
  getRootUrl: () => 'http://localhost:3000/api',
  timeout: 1000,
  retryOn: () => error => error instanceof TimeoutError,
});

fetch.intercept({
  request: request => console.log(request),
  response: response => console.log(response),
});

Basic usage

type User = Record<string, any>;

const response = await fetch<User>('/users/1');
console.log(response.jsonData);

await fetch<User[]>('/users', {
  timeout: 5000,
  credentials: 'include',
  retryOn: () = false
});

Advanced RetryOn creator

Use the exported createRetryOn to create functions you can pass to retryOn. This utility makes it easy to limit amount of attempts, determine what errors to retry and setting a backoff strategy (e.g. linear or exponential).

import {
  createFetch,
  createRetryOn,
  TimeoutError,
  HttpError,
} from '@devmoods/fetch';

const fetch = createFetch({
  getRootUrl: () => 'http://localhost:3000/api',
  timeout: 20000,
  retryOn: () =>
    createRetryOn({
      max: 5,
      isRetriable: error =>
        error instanceof HttpError
          ? error.response.status === 503
          : error instanceof TimeoutError,
      getDelay: n => 500 * n,
    }),
});

License

MIT

4.0.1

8 months ago

4.0.0

8 months ago

3.3.0

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.2.3

2 years ago

3.1.0

2 years ago

3.0.0

3 years ago

2.0.0

3 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago