UNPKG

@dima_aryze/reforge

Version:

TypeScript/JavaScript SDK for Reforge - Cross-chain token operations

160 lines 5.56 kB
"use strict"; /** * Error transformation utilities for HTTP client */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ErrorTransformer = void 0; const errors_1 = require("../errors"); /** * Transforms various error types into Reforge SDK errors */ class ErrorTransformer { /** * Transform an error into a Reforge SDK error */ transform(error) { // If already a Reforge error, return as-is if (error instanceof errors_1.ReforgeError) { return error; } // Handle timeout errors if (this.isTimeoutError(error)) { return errors_1.ReforgeNetworkError.timeout(error.config?.url); } // Handle connection errors if (this.isConnectionError(error)) { return errors_1.ReforgeNetworkError.connection(error.config?.url, error); } // Handle HTTP response errors if (this.isHttpResponseError(error)) { return this.transformHttpError(error); } // Handle axios request errors if (this.isAxiosError(error)) { return this.transformAxiosError(error); } // Generic error fallback return new errors_1.ReforgeError(error?.message || 'An unknown error occurred', error); } /** * Check if error is a timeout error */ isTimeoutError(error) { return error.code === 'ECONNABORTED' || (error.message && error.message.includes('timeout')); } /** * Check if error is a connection error */ isConnectionError(error) { return (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED' || error.code === 'ECONNRESET' || error.code === 'ENETUNREACH'); } /** * Check if error has HTTP response */ isHttpResponseError(error) { return error.response && error.response.status; } /** * Check if error is an axios error */ isAxiosError(error) { return error.isAxiosError === true; } /** * Transform HTTP response error */ transformHttpError(error) { const { status, data } = error.response; // Try to extract structured error from response if (data && typeof data === 'object') { return this.createApiErrorFromResponse(data, status); } // Create generic API error return new errors_1.ReforgeApiError(error.message || `HTTP ${status} Error`, status, `HTTP_${status}`, data); } /** * Transform axios-specific error */ transformAxiosError(error) { if (error.request && !error.response) { // Request was made but no response received return new errors_1.ReforgeNetworkError('No response received from server', error.config?.url, false, error); } // Request setup error return new errors_1.ReforgeError(error.message || 'Request configuration error', error); } /** * Create API error from structured response data */ createApiErrorFromResponse(data, status) { // Check for common error response formats if (this.isStandardApiError(data)) { return errors_1.ReforgeApiError.fromApiError(data, status); } // Handle various response formats const message = this.extractErrorMessage(data); const code = this.extractErrorCode(data, status); const details = this.extractErrorDetails(data); return new errors_1.ReforgeApiError(message, status, code, details); } /** * Check if data matches standard API error format */ isStandardApiError(data) { return (data && typeof data === 'object' && typeof data.code === 'string' && typeof data.message === 'string'); } /** * Extract error message from response data */ extractErrorMessage(data) { // Try common message fields const messageFields = ['message', 'error', 'detail', 'description']; for (const field of messageFields) { if (data[field] && typeof data[field] === 'string') { return data[field]; } } // Handle error arrays if (Array.isArray(data.errors) && data.errors.length > 0) { const firstError = data.errors[0]; if (typeof firstError === 'string') { return firstError; } if (firstError.message) { return firstError.message; } } return 'An API error occurred'; } /** * Extract error code from response data */ extractErrorCode(data, status) { // Try common code fields const codeFields = ['code', 'error_code', 'type', 'kind']; for (const field of codeFields) { if (data[field] && typeof data[field] === 'string') { return data[field]; } } return `HTTP_${status}`; } /** * Extract error details from response data */ extractErrorDetails(data) { // Filter out known message/code fields to avoid duplication /* eslint-disable no-unused-vars */ const { message: _message, error: _error, code: _code, error_code: _error_code, type: _type, kind: _kind, ...details } = data; /* eslint-enable no-unused-vars */ return Object.keys(details).length > 0 ? details : undefined; } } exports.ErrorTransformer = ErrorTransformer; //# sourceMappingURL=errors.js.map