npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

custom-api-handler

v1.2.2

Published

The package uses axios library to request APIs and uses local-storage for tokens (auth & refresh).

Downloads

59

Readme

api-handler

Custom package to handle API requests in JS using Axios

The package uses axios library to request APIs and uses local-storage for tokens (auth & refresh).

It uses custom-validation mehtods (isAccessTokenExpired & isRefreshTokenExpired) for token expiry check.

For auth-token:- save local-storage item as "X-Auth-Token".

For refresh-token:- save local-storage item as "Refresh-Token".


Installation

Install with NPM or Yarn.

Run npm install custom-api-handler or yarn add custom-api-handler to install the library.

Usage

Changes in version 1.2.2

Now, you can add refresh-token & access-token label names that will be present in server-response. The package will use these labels for all API-Requests with the name provided.

Refresh-token & Access-token labels will be saved after 64-bit encryption.

For Setting Label Names

import { apiHandler } from "custom-api-handler/lib";

const api = apiHandler;
api.setAccessTokenLabelName("authToken");
api.setRefreshTokenLabelName("refreshToken");

For Getting Label Names

import { apiHandler } from "custom-api-handler/lib";

const api = apiHandler;
console.log(api.getAccessTokenLabelName());
console.log(api.getRefreshTokenLabelName());

/*
  prints (default value):
    authToken
    refreshToken
*/

Note: These label names should be same as you received in server-response.

Server-Response

response:{ type:"SUCCESS", data:{ authToken:"ABCD", //The key here should be the access-token label name refreshToken:"EFGH" //The key here should be the refresh-token label name } }

Normal API-Request

import { apiHandler } from "custom-api-handler/lib";

const api = apiHandler;
api
  .requestApi(
    "api/users?page=2",
    "get",
    null,
    null,
    "https://reqres.in",
    false,
    false
  )
  .then((res) => {
    console.log(res.data);
  })
  .catch((error) => {
    console.log(error.message);
  });

/* prints API response:
{
    "page": 2,
    "per_page": 6,
    "total": 12,
    "total_pages": 2,
    "data": [
        {
            "id": 7,
            "email": "[email protected]",
            "first_name": "Michael",
            "last_name": "Lawson",
            "avatar": "https://reqres.in/img/faces/7-image.jpg"
        },
    ],
    "support": {
        "url": "https://reqres.in/#support-heading",
        "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
    }
}
 */

API-Request with requesting Refresh-Token API for adding new tokens (auth & refresh) before each API request.

import { apiHandler } from "custom-api-handler/lib";

const api = apiHandler;

api.setTokenLabel("ABC"); //Bearer name for adding tokens in header for request

api
  .rftWrapper(
    "api/users?page=2",
    "refreshToken",
    "GET",
    null,
    null,
    "https://reqres.in/url",
    "https://reqres.in/rftURL"
  )
  .then((res) => {
    console.log(res.data);
  })
  .catch((error) => {
    console.log(error.message);
  });

/* prints API response:
{
    "page": 2,
    "per_page": 6,
    "total": 12,
    "total_pages": 2,
    "data": [
        {
            "id": 7,
            "email": "[email protected]",
            "first_name": "Michael",
            "last_name": "Lawson",
            "avatar": "https://reqres.in/img/faces/7-image.jpg"
        },
    ],
    "support": {
        "url": "https://reqres.in/#support-heading",
        "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
    }
}
 */

API-Request with custom-validations for auth & refresh token expiry.

Note: If Auth-Token expires, Refresh-Token API will be requested for new tokens then normal API request is done.

Note: If Refresh-Token expires, Session-Expired error will be thrown and then reload.

Note: If concurrent API-Requests are made when refresh-token expires, then provide refresh-token check from backend.

From Server

Response-Body : { ... error_description:"Refresh token not found" }

API-Request will work properly.

import { apiHandler } from "custom-api-handler/lib";

const api = apiHandler;

api.setTokenLabel("ABC"); //Bearer name for adding tokens in header for request

api
  .reqAPIwithRFTWrapper(
    "api/users?page=2",
    "refreshToken",
    "GET",
    null,
    null,
    true,
    "https://reqres.in/url",
    "https://reqres.in/rftURL"
  )
  .then((res) => {
    console.log(res.data);
  })
  .catch((error) => {
    console.log(error.message);
  });

/* prints API response:
{
    "page": 2,
    "per_page": 6,
    "total": 12,
    "total_pages": 2,
    "data": [
        {
            "id": 7,
            "email": "[email protected]",
            "first_name": "Michael",
            "last_name": "Lawson",
            "avatar": "https://reqres.in/img/faces/7-image.jpg"
        },
    ],
    "support": {
        "url": "https://reqres.in/#support-heading",
        "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
    }
}
 */

Set Token Label

const { apiHandler } = require("custom-api-handler/lib");

const api = apiHandler;

api.setTokenLabel("ABC");
...

Use as a CommonJS package

const { apiHandler } = require("custom-api-handler/lib");
...