UNPKG

custom-api-handler

Version:

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

245 lines (193 loc) 5.57 kB
# 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 ```javascript import { apiHandler } from "custom-api-handler/lib"; const api = apiHandler; api.setAccessTokenLabelName("authToken"); api.setRefreshTokenLabelName("refreshToken"); ``` For Getting Label Names ```javascript 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 ```javascript 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": "michael.lawson@reqres.in", "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. ```javascript 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": "michael.lawson@reqres.in", "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. ```javascript 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": "michael.lawson@reqres.in", "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 ```javascript const { apiHandler } = require("custom-api-handler/lib"); const api = apiHandler; api.setTokenLabel("ABC"); ... ``` ## Use as a CommonJS package ```javascript const { apiHandler } = require("custom-api-handler/lib"); ... ```