UNPKG

axios-master

Version:

Axios wrapper for advanced response time logging, retries, and token refresh.

162 lines (128 loc) โ€ข 3.82 kB
# 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)