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
Maintainers
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");
...