UNPKG

@nktkas/hyperliquid

Version:

Hyperliquid API SDK for all major JS runtimes, written in TypeScript.

78 lines 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiRequestError = void 0; exports.assertSuccessResponse = assertSuccessResponse; const _errors_js_1 = require("../../../../_errors.js"); // ============================================================= // Error Detection (Duck Typing) // ============================================================= /** Check if value has an error property. */ function hasError(value) { return typeof value === "object" && value !== null && "error" in value && typeof value.error === "string"; } /** Check if response has error status. */ function hasErrorStatus(response) { return typeof response === "object" && response !== null && "status" in response && response.status === "err"; } /** Check if response has statuses array with errors. */ function hasStatusesWithErrors(response) { if (typeof response !== "object" || response === null) return false; const r = response; const statuses = r.response?.data?.statuses; return Array.isArray(statuses) && statuses.some(hasError); } /** Check if response has single status with error. */ function hasSingleStatusWithError(response) { if (typeof response !== "object" || response === null) return false; const r = response; return hasError(r.response?.data?.status); } /** Extract error message from response using duck typing. */ function extractErrorMessage(response) { if (hasErrorStatus(response)) { return response.response; } const r = response; if (Array.isArray(r.response?.data?.statuses)) { const errors = r.response.data.statuses.reduce((acc, status, index) => { if (hasError(status)) acc.push(`Order ${index}: ${status.error}`); return acc; }, []); if (errors.length > 0) return errors.join(", "); } if (hasError(r.response?.data?.status)) { return r.response.data.status.error; } return undefined; } // ============================================================= // Error Classes // ============================================================= /** Thrown when Exchange API returns an error response. */ class ApiRequestError extends _errors_js_1.HyperliquidError { response; constructor(response) { const message = extractErrorMessage(response) || "An unknown error occurred while processing an API request. See `response` for more details."; super(message); this.name = "ApiRequestError"; this.response = response; } } exports.ApiRequestError = ApiRequestError; // ============================================================= // Assertions // ============================================================= /** Assert that response is successful, throw ApiRequestError otherwise. */ function assertSuccessResponse(response) { if (hasErrorStatus(response) || hasStatusesWithErrors(response) || hasSingleStatusWithError(response)) { throw new ApiRequestError(response); } } //# sourceMappingURL=errors.js.map