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
- Host: GitHub
- URL: https://github.com/arlac77/fetch-rate-limit-util
- Owner: arlac77
- License: 0bsd
- Created: 2020-09-07T06:42:00.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-15T11:00:49.000Z (about 1 year ago)
- Last Synced: 2025-03-15T12:18:28.051Z (about 1 year ago)
- Language: JavaScript
- Size: 3.06 MB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/fetch-rate-limit-util)
[](https://spdx.org/licenses/0BSD.html)
[](https://typescriptlang.org)
[](https://bundlejs.com/?q=fetch-rate-limit-util)
[](https://npmjs.org/package/fetch-rate-limit-util)
[](https://github.com/arlac77/fetch-rate-limit-util/issues)
[](https://actions-badge.atrox.dev/arlac77/fetch-rate-limit-util/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/arlac77/fetch-rate-limit-util)
[](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