UNPKG

@getclave/lifi-sdk

Version:

LI.FI Any-to-Any Cross-Chain-Swap SDK

70 lines (69 loc) 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = exports.requestSettings = void 0; const config_1 = require("./config"); const SDKError_1 = require("./errors/SDKError"); const errors_1 = require("./errors/errors"); const httpError_1 = require("./errors/httpError"); const sleep_1 = require("./utils/sleep"); const version_1 = require("./version"); exports.requestSettings = { retries: 1, }; const stripExtendRequestInitProperties = ({ retries, ...rest }) => ({ ...rest, }); const request = async (url, options = { retries: exports.requestSettings.retries, }) => { const { userId, integrator, widgetVersion, apiKey } = config_1.config.get(); if (!integrator) { throw new SDKError_1.SDKError(new errors_1.ValidationError('You need to provide the Integrator property. Please see documentation https://docs.li.fi/integrate-li.fi-js-sdk/set-up-the-sdk')); } options.retries = options.retries ?? exports.requestSettings.retries; try { if (apiKey) { options.headers = { ...options.headers, 'x-lifi-api-key': apiKey, }; } if (userId) { options.headers = { ...options.headers, 'x-lifi-userid': userId, }; } if (widgetVersion) { options.headers = { ...options.headers, 'x-lifi-widget': widgetVersion, }; } if (version_1.version) { options.headers = { ...options.headers, 'x-lifi-sdk': version_1.version, }; } // integrator is mandatory during SDK initialization options.headers = { ...options.headers, 'x-lifi-integrator': integrator, }; const response = await fetch(url, stripExtendRequestInitProperties(options)); if (!response.ok) { throw new httpError_1.HTTPError(response, url, options); } return await response.json(); } catch (error) { if (options.retries > 0 && error.status === 500) { await (0, sleep_1.sleep)(500); return (0, exports.request)(url, { ...options, retries: options.retries - 1 }); } await error.buildAdditionalDetails?.(); throw new SDKError_1.SDKError(error); } }; exports.request = request;