axios-phraseapp
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

Axios PhraseApp

Axios middleware/interceptor that helps to guard a bit against PhraseApp rate limiting. Highly configurable

Installation

npm install axios-phraseapp

Note 🚨

Not working with axios 0.19.0 (As most other libraries). For details see the bug. axios 0.19.1 has fixed this bug.

Usage

The simple, no configuration behaviour of axios-phraseapp is to add a phraseApp property on the request/response configuration of axios requests.

const { config } = await axios.get(PHRASEAPP_REQUEST);
console.log(config.phraseApp); /** Access to the phraseApp property */

This phraseApp property has following structure that you can extract information returned from the PhraseApp API calls and even add your own logic on top of them.

{
  moduleConfig : {}, /** Module configuration */
 
  state: {
    /** Number of in-flight requests */
    inFlightRequests: 0,
 
    /** Remaining requests until limit is reached for this time slice */
    remaining: null,
 
    /** Unix Epoch value to time reset */
    reset: null,
 
    /** PhraseApp request limit */
    limit: null,
 
    /** JavaScript Date object from the `reset` time */
    resetDate: null,
 
    /** Signifies if the `axios-phraseapp` functions are active */
    started: false
  }
}

Importing

// CommonJS
const { attach, detach } = require("axios-phraseapp");
 
// ESM
import { attach, detach } from "axios-phraseapp";
 
// You can also consider renaming, something like:
import {
  attach as phraseAppAttach,
  detach as phraseAppDetach
} from "axios-phraseapp";

Attaching

attach( [ AxiosInstance|AxiosStatic ], [ AxiosPhraseAppConfig ] ) : Array<InterceptorId, InterceptorId>

The attach method, registers the request interceptors on either an axios instance or the main imported axios object by default.

/** Implicit */
import axios from "axios";
attach(axios);
 
/** Explicit */
import axios from "axios";
attach(); // Assumes axios peer dependency
 
/** Specific instance */
import axios from "axios";
const axiosInstance = axios.create({});
attach(axiosInstance);

* The return value of the attach method, is an array <InterceptorId, InterceptorId> that can be then passed as it is to detach and remove the interceptors.

Detaching

To remove the axios-phraseapp interceptors you can use the detach method.

/** Implicit */
import axios from "axios";
const interceptorIds = attach(axios);
detach(axios, interceptorIds);
 
/** Specific instance */
import axios from "axios";
const axiosInstance = axios.create({});
const interceptorIds = attach(axiosInstance);
detach(axiosInstance, interceptorIds);

Configuration

The second argument to the attach method, can take a custom configuration object, or uses some non-intrusive defaults.

{
  /**
   * Will cancel with Axios.Cancel() when no more quota are available
   * until the next reset time.
   *
   * Defaults to false
   */
  cancelOnQuota?: boolean;
 
  /**
   * Will log when in the zone of either a percentage or
   * limit number of remaining requests.
   *
   * You can either pass a number e.g. 200 or certain percentage
   * e.g. 1 / 5 which is the same as 0.2 .
   *
   * Every time that a request is in this zone, the `logFunction`
   * will be triggered on request. Logging will be done
   * using `logFunction` parameter.
   *
   * Defaults to -1, which means it will not log.
   */
  logOnLimit?: number;
 
  /**
   * Method to log `logOnLimit` with.
   * Defaults to `console.log`.
   */
  logFunction?: function;
}

Next Steps

  • Examples folder
  • Full usage typings
  • More badges
  • Strategies for canceling befora quota is reached

License

License: ISC

refer to LICENSE file in this repository.


❗️ This repository is in no way affiliated with PhraseApp

Dependencies (0)

    Dev Dependencies (17)

    Package Sidebar

    Install

    npm i axios-phraseapp

    Weekly Downloads

    1

    Version

    0.0.2

    License

    ISC

    Unpacked Size

    9.37 kB

    Total Files

    4

    Last publish

    Collaborators

    • igneel64