UNPKG

@renegade-fi/core

Version:
54 lines (48 loc) 1.85 kB
import axios, { type AxiosError } from 'axios' export class PriceReporterError extends Error { constructor(message: string) { super(`PriceReporterError: ${message}`) Object.setPrototypeOf(this, PriceReporterError.prototype) } } export class HttpError extends PriceReporterError { public status?: number public details?: unknown /** * Creates a new HttpError with detailed error information * @param error - The original error (typically an AxiosError) * @param url - The URL that was being accessed * @param method - The HTTP method that was being used * @param customMessage - Optional custom message prefix (defaults to "HTTP request failed") */ constructor( error: unknown, url: string, method: string, customMessage = 'HTTP request failed', ) { const requestInfo = `[${method.toUpperCase()}] ${url}` let finalMessage = `${customMessage} - ${requestInfo}` if (axios.isAxiosError(error)) { const axiosError = error as AxiosError if (axiosError.response) { const { status, statusText, data } = axiosError.response const errorCode = axiosError.code ? ` (${axiosError.code})` : '' const errorMessage = typeof data === 'string' ? `: ${data}` : '' finalMessage = `${finalMessage} - Received ${status} ${statusText}${errorCode}${errorMessage}` } else if (axiosError.request) { finalMessage = `${finalMessage} - No response received from server` } else { finalMessage = `${finalMessage} - Request failed: ${axiosError.message}` } } super(finalMessage) Object.setPrototypeOf(this, HttpError.prototype) if (axios.isAxiosError(error) && error.response) { this.status = error.response.status this.details = error.response.data } else { this.details = error } } }