easy-currencies
Version:
A tool for easy conversion of currencies.
73 lines • 5.53 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchRates = void 0;
const utils_1 = require("../parts/utils");
/**
* The fetchRates function, used for fetching currency conversion rates.
*
* @export
* @param {AxiosInstance} client - client to be used for the request
* @param {Provider} provider - provider from which the quotes will be fetched
* @param {Query} query - the query
* @returns {Promise<any>} - a result promise
*/
function fetchRates(client, provider, query) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const maxRetries = 5;
let attempt = 0;
let delay = 1000; // initial delay in ms
while (true) {
const [err, result] = (yield (0, utils_1._to)(client.get(formatUrl(provider, query))));
if (((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {
if (attempt >= maxRetries) {
throw { handled: false, error: "Too many 429 responses, giving up." };
}
const jitter = Math.random() * 1000; // jitter between 0 and 1000ms
yield (0, utils_1.sleep)(delay + jitter);
attempt++;
delay *= 2;
continue;
}
// resolving error
const error = provider.errorHandler(err ? err.response : result.data);
// returning either the meaning of the error (if registered in provider's definition), or the error itself.
if (error) {
throw provider.errors[error]
? { handled: true, error: provider.errors[error] }
: { handled: false, error };
}
return result.data;
}
});
}
exports.fetchRates = fetchRates;
/**
* URL formatting function
*
* @param {Provider} provider - provider against which the request will be executed
* @param {Query} query - the query
* @returns {string} - formatted GET url string.
*/
function formatUrl(provider, query) {
// if (query.multiple) {
// return (provider.endpoint.base + provider.endpoint.multiple)
// .replace("%FROM%", query.FROM)
// .replace("%KEY%", provider.key || "");
// }
// inserting base currency, final currency, and key (if needed)
return (provider.endpoint.base + provider.endpoint.single)
.replace("%FROM%", query.FROM)
.replace("%TO%", query.TO)
.replace("%KEY%", provider.key || "");
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3JlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQSwwQ0FBMkM7QUFlM0M7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFzQixVQUFVLENBQzlCLE1BQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLEtBQVk7OztRQUVaLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsc0JBQXNCO1FBRXhDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFBLFdBQUcsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUd2RSxDQUFDO1lBRUYsSUFBSSxDQUFBLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsMENBQUUsTUFBTSxNQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG9DQUFvQyxFQUFFLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLDhCQUE4QjtnQkFDbkUsTUFBTSxJQUFBLGFBQUssRUFBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsU0FBUztZQUNYLENBQUM7WUFFRCxrQkFBa0I7WUFDbEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0RSwyR0FBMkc7WUFDM0csSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUMxQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNsRCxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hDLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7Q0FBQTtBQXRDRCxnQ0FzQ0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxRQUFrQixFQUFFLEtBQVk7SUFDakQsd0JBQXdCO0lBQ3hCLGlFQUFpRTtJQUNqRSxxQ0FBcUM7SUFDckMsNkNBQTZDO0lBQzdDLElBQUk7SUFFSiwrREFBK0Q7SUFDL0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQ3ZELE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztTQUM3QixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDekIsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUMifQ==
;