An open API service indexing awesome lists of open source software.

https://github.com/arlac77/fetch-rate-limit-util

handle fetch rate limits
https://github.com/arlac77/fetch-rate-limit-util

Last synced: about 1 year ago
JSON representation

handle fetch rate limits

Awesome Lists containing this project

README

          

[![npm](https://img.shields.io/npm/v/fetch-rate-limit-util.svg)](https://www.npmjs.com/package/fetch-rate-limit-util)
[![License](https://img.shields.io/badge/License-0BSD-blue.svg)](https://spdx.org/licenses/0BSD.html)
[![Typed with TypeScript](https://flat.badgen.net/badge/icon/Typed?icon=typescript\&label\&labelColor=blue\&color=555555)](https://typescriptlang.org)
[![bundlejs](https://deno.bundlejs.com/?q=fetch-rate-limit-util\&badge=detailed)](https://bundlejs.com/?q=fetch-rate-limit-util)
[![downloads](http://img.shields.io/npm/dm/fetch-rate-limit-util.svg?style=flat-square)](https://npmjs.org/package/fetch-rate-limit-util)
[![GitHub Issues](https://img.shields.io/github/issues/arlac77/fetch-rate-limit-util.svg?style=flat-square)](https://github.com/arlac77/fetch-rate-limit-util/issues)
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Farlac77%2Ffetch-rate-limit-util%2Fbadge\&style=flat)](https://actions-badge.atrox.dev/arlac77/fetch-rate-limit-util/goto)
[![Styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Known Vulnerabilities](https://snyk.io/test/github/arlac77/fetch-rate-limit-util/badge.svg)](https://snyk.io/test/github/arlac77/fetch-rate-limit-util)
[![Coverage Status](https://coveralls.io/repos/arlac77/fetch-rate-limit-util/badge.svg)](https://coveralls.io/github/arlac77/fetch-rate-limit-util)

# fetch-rate-limit-util

Handle fetch errors and rate limits and caching.

Waits and retry after rate limit rest time has reached.

* [auth0 API](https://auth0.com/docs/policies/rate-limit-policy)
* [github API](https://developer.github.com/v3/#rate-limiting)
* [Zalando API](https://opensource.zalando.com/restful-api-guidelines/#153)
* [Retry-After](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After)

```js
import { stateActionHandler } from "fetch-rate-limit-util";

const response = await stateActionHandler(someURL, options);

// if rate limit occurs waits and retires

```

# API

### Table of Contents

* [HandlerResult](#handlerresult)
* [Properties](#properties)
* [RequestReporter](#requestreporter)
* [Properties](#properties-1)
* [wait](#wait)
* [Parameters](#parameters)
* [stateActionHandler](#stateactionhandler)
* [Parameters](#parameters-1)
* [calculateRepeatAfter](#calculaterepeatafter)
* [Parameters](#parameters-2)
* [rateLimitHandler](#ratelimithandler)
* [Parameters](#parameters-3)
* [retryTimes](#retrytimes)
* [retryHandler](#retryhandler)
* [Parameters](#parameters-4)
* [redirectHandler](#redirecthandler)
* [Parameters](#parameters-5)
* [defaultHandler](#defaulthandler)
* [Parameters](#parameters-6)
* [errorHandler](#errorhandler)
* [Parameters](#parameters-7)
* [cacheHandler](#cachehandler)
* [Parameters](#parameters-8)
* [DEFAULT\_MIN\_WAIT\_MSECS](#default_min_wait_msecs)
* [DEFAULT\_MAX\_RETRIES](#default_max_retries)
* [defaultOptions](#defaultoptions)

## HandlerResult

Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)

### Properties

* `url` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** what to fetch next
* `repeatAfter` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** of milliseconds to wait befor next try
* `message` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** to report
* `done` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** op is finished return
* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)**
* `postprocess` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** exec postprocess

## RequestReporter

Function to provide progress report.

Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)

### Properties

* `url` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** to be requested
* `method` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** http method name
* `status` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Error](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error))** result of the last request
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** how often have we retried

## wait

### Parameters

* `url` **([URL](https://developer.mozilla.org/docs/Web/API/URL/URL) | [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))**
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `result` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**

## stateActionHandler

Executes fetch operation and handles response.

### Parameters

* `url` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [URL](https://developer.mozilla.org/docs/Web/API/URL/URL))**
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**

* `options.reporter` **[RequestReporter](#requestreporter)**
* `options.cache` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?**
* `options.maxRetries` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?**
* `options.method` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
* `options.headers` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?**
* `options.body` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
* `options.postprocess` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)**
* `options.stateActions` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)>** from fetch

## calculateRepeatAfter

### Parameters

* `response` **any**

Returns **([number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))** msecs to wait

## rateLimitHandler

* **See**:
* **See**:
* **See**:

Waits and retries after rate limit reset time has reached.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[HandlerResult](#handlerresult)**

## retryTimes

Retry timeouts with
increasing delay for each retry.
Values in msecs.

## retryHandler

Try several times with a increasing delay.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[HandlerResult](#handlerresult)**

## redirectHandler

Redirect to given header location.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[HandlerResult](#handlerresult)**

## defaultHandler

Postprocessing if response is ok.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[HandlerResult](#handlerresult)**

## errorHandler

No postprocessing.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[HandlerResult](#handlerresult)**

## cacheHandler

Provide cached data.

### Parameters

* `response` **[Response](https://developer.mozilla.org/docs/Web/Guide/HTML/HTML5)** from fetch
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `nthTry` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[HandlerResult](#handlerresult)>**

## DEFAULT\_MIN\_WAIT\_MSECS

Minimum wait time in msecs.

Type: [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)

## DEFAULT\_MAX\_RETRIES

Max # of retries.

Type: [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)

## defaultOptions

Default options

# install

With [npm](http://npmjs.org) do:

```shell
npm install fetch-rate-limit-util
```

# license

BSD-2-Clause