axios-master
Version:
Axios wrapper for advanced response time logging, retries, and token refresh.
162 lines (128 loc) โข 3.82 kB
Markdown
# Axios Master
A powerful and flexible Axios wrapper that adds advanced features like:
- โ
Retry on specific HTTP status codes
- ๐ Automatic token refresh using a custom function
- ๐ชต Rich logging with response metadata
- โฑ Custom timeout
- ๐ HTTPS Agent support
## ๐ฆ Installation
```bash
npm install axios-master
```
## โจ Features
- Easy-to-use Axios wrapper
- Retry mechanism with token refresh
- Customizable logger with timing, request, and response info
- Optional verbose logging
- Automatically handles `401` or any status you define
## ๐ Basic Example
```ts
import axiosMaster from "axios-master";
async function fetchStatus(body: any) {
try {
const result = await axiosMaster(
{
method: "GET",
url: `${config.host}/payment/status?value=${body.value}`,
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Bearer ${config.token}`,
},
},
{
name: "Payment Status",
timeout: 20000,
shouldRetry: true,
shouldRetryStatus: [401],
retryFunction: getNewToken,
logger: (log) => {
console.log("API LOG:", log);
},
},
);
console.log("Result:", result);
} catch (error) {
console.error("Request Failed:", error);
}
}
```
## ๐ Retry with Token Refresh (using axios-master itself)
```ts
import axiosMaster from "axios-master";
const getNewToken = async (): Promise<string> => {
try {
const tokenRes = await axiosMaster(
{
method: "POST",
url: "https://api.example.com/auth/token",
headers: {
"Content-Type": "application/json",
},
data: {
username: "your_username",
password: "your_password",
},
},
{
name: "Get New Token",
timeout: 10000,
logger: (log) => {
console.log("Token Fetch Log:", log);
},
},
);
config.token = tokenRes.accessToken;
return config.token;
} catch (error) {
console.error("Token fetch failed:", error);
return "";
}
};
```
## ๐งช Function Signature
```ts
axiosMasterMain(
default_config: AxiosRequestConfig,
masterConfig: MasterConfig
): Promise<any>
```
## โ๏ธ MasterConfig Options
| Option | Type | Description |
| ------------------- | ------------------------ | ---------------------------------------------- |
| `name` | `string` | Name to display in logs |
| `log` | `boolean` | If true, logs raw Axios request/response |
| `timeout` | `number` | Request timeout in milliseconds |
| `logger` | `(log: LogData) => void` | Custom logger callback |
| `shouldRetry` | `boolean` | Whether to retry the request on failure |
| `shouldRetryStatus` | `number[]` | HTTP status codes to retry (e.g. `[401, 500]`) |
| `retryFunction` | `() => Promise<string>` | Token refresh function to call before retrying |
## ๐ Logger Payload Structure
```ts
{
log_levels: "INFO" | "DEBUG" | "WARN" | "ERROR" | "CRITICAL" | "TRACE",
message: string,
json: {
time: number, // in seconds
request: AxiosRequestConfig,
response: any,
responseBody: any,
statusCode: number
}
}
```
## ๐ Advanced Options
- Automatically retries failed requests if status code matches
- Supports retry only once (for safety)
- Useful for microservices, SDKs, or secure API clients
## ๐ License
MIT License ยฉ [Buyantogtokh](https://togtokh.dev)