@lifi/sdk
Version:
LI.FI Any-to-Any Cross-Chain-Swap SDK
66 lines • 2.23 kB
JavaScript
import { config } from './config.js';
import { ValidationError } from './errors/errors.js';
import { HTTPError } from './errors/httpError.js';
import { SDKError } from './errors/SDKError.js';
import { sleep } from './utils/sleep.js';
import { version } from './version.js';
export const requestSettings = {
retries: 1,
};
const stripExtendRequestInitProperties = ({ retries, ...rest }) => ({
...rest,
});
export const request = async (url, options = {
retries: requestSettings.retries,
}) => {
const { userId, integrator, widgetVersion, apiKey } = config.get();
if (!integrator) {
throw new SDKError(new 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 ?? 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) {
options.headers = {
...options.headers,
'x-lifi-sdk': 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(response, url, options);
}
return await response.json();
}
catch (error) {
if (options.retries > 0 && error.status === 500) {
await sleep(500);
return request(url, { ...options, retries: options.retries - 1 });
}
await error.buildAdditionalDetails?.();
throw new SDKError(error);
}
};
//# sourceMappingURL=request.js.map