easy-currencies 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/converter.d.ts +8 -0
- package/dist/converter.js +53 -10
- package/dist/parts/client.d.ts +7 -0
- package/dist/parts/client.js +64 -4
- package/dist/parts/config.d.ts +1 -1
- package/dist/parts/config.js +8 -5
- package/dist/parts/requester.js +44 -13
- package/dist/parts/utils.d.ts +21 -0
- package/dist/parts/utils.js +58 -15
- package/package.json +1 -1
- package/readme.md +6 -0
package/dist/converter.d.ts
CHANGED
|
@@ -61,6 +61,14 @@ export declare class Converter {
|
|
|
61
61
|
* @memberof Converter
|
|
62
62
|
*/
|
|
63
63
|
onError: (error: unknown) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Reports a provider failure without letting the report become the failure.
|
|
66
|
+
*
|
|
67
|
+
* `onError` is consumer code, and the default is `console.error`, which
|
|
68
|
+
* throws on a closed stdout: a CLI piped into `head` would abort the whole
|
|
69
|
+
* chain on EPIPE and never reach the healthy provider behind it.
|
|
70
|
+
*/
|
|
71
|
+
private report;
|
|
64
72
|
/**
|
|
65
73
|
* Creates an instance of Converter.
|
|
66
74
|
* @param {(...ProviderReference[] | undefined[] | string[])} config
|
package/dist/converter.js
CHANGED
|
@@ -108,6 +108,33 @@ function requireCurrency(currency, label) {
|
|
|
108
108
|
}
|
|
109
109
|
return currency;
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Lower-cases A-Z only.
|
|
113
|
+
*
|
|
114
|
+
* `String.prototype.toLowerCase` folds the Kelvin sign U+212A onto "k", so a
|
|
115
|
+
* table carrying that key answered a request for "K". Currency codes are
|
|
116
|
+
* ASCII, so the fold should be too.
|
|
117
|
+
*/
|
|
118
|
+
function asciiLower(value) {
|
|
119
|
+
return value.replace(/[A-Z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 32));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A rate as a number, or NaN if the value is not one.
|
|
123
|
+
*
|
|
124
|
+
* FloatRates and AlphaVantage send rates as strings, so strings are accepted,
|
|
125
|
+
* but only in decimal. `Number()` on its own also parses `0x`, `0b` and `0o`,
|
|
126
|
+
* which turned a table carrying `"0x10"` into a rate of 16.
|
|
127
|
+
*/
|
|
128
|
+
const DECIMAL = /^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i;
|
|
129
|
+
function asRate(raw) {
|
|
130
|
+
if (typeof raw === "number") {
|
|
131
|
+
return raw;
|
|
132
|
+
}
|
|
133
|
+
if (typeof raw === "string" && DECIMAL.test(raw.trim())) {
|
|
134
|
+
return Number(raw);
|
|
135
|
+
}
|
|
136
|
+
return NaN;
|
|
137
|
+
}
|
|
111
138
|
/**
|
|
112
139
|
* Whether a table holds at least one entry that will actually convert.
|
|
113
140
|
*
|
|
@@ -116,8 +143,7 @@ function requireCurrency(currency, label) {
|
|
|
116
143
|
*/
|
|
117
144
|
function hasUsableRate(rates) {
|
|
118
145
|
return Object.keys(rates).some((key) => {
|
|
119
|
-
const
|
|
120
|
-
const value = typeof raw === "number" || typeof raw === "string" ? Number(raw) : NaN;
|
|
146
|
+
const value = asRate(rates[key]);
|
|
121
147
|
return Number.isFinite(value) && value > 0;
|
|
122
148
|
});
|
|
123
149
|
}
|
|
@@ -173,6 +199,21 @@ function readRates(provider, data, from) {
|
|
|
173
199
|
* @class Converter
|
|
174
200
|
*/
|
|
175
201
|
class Converter {
|
|
202
|
+
/**
|
|
203
|
+
* Reports a provider failure without letting the report become the failure.
|
|
204
|
+
*
|
|
205
|
+
* `onError` is consumer code, and the default is `console.error`, which
|
|
206
|
+
* throws on a closed stdout: a CLI piped into `head` would abort the whole
|
|
207
|
+
* chain on EPIPE and never reach the healthy provider behind it.
|
|
208
|
+
*/
|
|
209
|
+
report(error) {
|
|
210
|
+
try {
|
|
211
|
+
this.onError(error);
|
|
212
|
+
}
|
|
213
|
+
catch (_a) {
|
|
214
|
+
/* a broken reporter is not a reason to abandon the conversion */
|
|
215
|
+
}
|
|
216
|
+
}
|
|
176
217
|
/**
|
|
177
218
|
* Creates an instance of Converter.
|
|
178
219
|
* @param {(...ProviderReference[] | undefined[] | string[])} config
|
|
@@ -294,7 +335,10 @@ class Converter {
|
|
|
294
335
|
var _a;
|
|
295
336
|
requireAmount(amount);
|
|
296
337
|
requireCurrency(to, "to");
|
|
297
|
-
|
|
338
|
+
// Array.isArray as well as the typeof: an array IS an object, and
|
|
339
|
+
// Object.keys([0.9]) is ["0"], so a table read from an array offered
|
|
340
|
+
// index-keyed currencies rather than being rejected.
|
|
341
|
+
if (typeof rates !== "object" || rates === null || Array.isArray(rates)) {
|
|
298
342
|
throw new Error(`Rates must be an object mapping currency to rate, received ${describeRate(rates)}.`);
|
|
299
343
|
}
|
|
300
344
|
// The base marker rides along as an ordinary key; it is not a rate, so it
|
|
@@ -302,15 +346,14 @@ class Converter {
|
|
|
302
346
|
const keys = Object.keys(rates).filter((key) => key !== exports.RATES_BASE_KEY);
|
|
303
347
|
// Exact match wins, so a response carrying both "EUR" and "eur" does not
|
|
304
348
|
// resolve differently depending on JSON key order.
|
|
305
|
-
const rateKey = (_a = keys.find((key) => key === to)) !== null && _a !== void 0 ? _a : keys.find((key) => key
|
|
349
|
+
const rateKey = (_a = keys.find((key) => key === to)) !== null && _a !== void 0 ? _a : keys.find((key) => asciiLower(key) === asciiLower(to));
|
|
306
350
|
// Truthiness would report a present-but-zero rate as missing.
|
|
307
351
|
if (rateKey === undefined) {
|
|
308
352
|
// The full table is ~4KB in production.
|
|
309
353
|
throw new Error(`No '${to}' present in rates (${keys.length} rate${keys.length === 1 ? "" : "s"} available).`);
|
|
310
354
|
}
|
|
311
355
|
const raw = rates[rateKey];
|
|
312
|
-
|
|
313
|
-
const numericRate = typeof raw === "number" || typeof raw === "string" ? Number(raw) : NaN;
|
|
356
|
+
const numericRate = asRate(raw);
|
|
314
357
|
if (!Number.isFinite(numericRate) || numericRate <= 0) {
|
|
315
358
|
throw new Error(`Invalid rate value for '${to}': expected a finite number greater than zero, received ${describeRate(raw)}.`);
|
|
316
359
|
}
|
|
@@ -364,7 +407,7 @@ class Converter {
|
|
|
364
407
|
// symbol list. That is this provider's limitation, so move to the next.
|
|
365
408
|
if (multiple && provider.endpoint.single.includes("%TO%")) {
|
|
366
409
|
lastError = new Error("Provider cannot fetch a whole rate table; it requires a target currency.");
|
|
367
|
-
this.
|
|
410
|
+
this.report(lastError);
|
|
368
411
|
continue;
|
|
369
412
|
}
|
|
370
413
|
const [err, data] = yield (0, utils_1._to)((0, requester_1.fetchRates)(client, provider, { FROM: from, TO: to, multiple: multiple }, Object.assign(Object.assign({}, retry), { deadline })));
|
|
@@ -376,7 +419,7 @@ class Converter {
|
|
|
376
419
|
if (!failure) {
|
|
377
420
|
return rates;
|
|
378
421
|
}
|
|
379
|
-
this.
|
|
422
|
+
this.report(failure);
|
|
380
423
|
lastError = failure;
|
|
381
424
|
continue;
|
|
382
425
|
}
|
|
@@ -385,7 +428,7 @@ class Converter {
|
|
|
385
428
|
if (!isProviderFailure(err) || !err.handled) {
|
|
386
429
|
throw asError(isProviderFailure(err) ? err.error : err);
|
|
387
430
|
}
|
|
388
|
-
this.
|
|
431
|
+
this.report(err.error);
|
|
389
432
|
lastError = asError(err.error);
|
|
390
433
|
}
|
|
391
434
|
// Every provider in the snapshot failed.
|
|
@@ -413,4 +456,4 @@ class Converter {
|
|
|
413
456
|
}
|
|
414
457
|
}
|
|
415
458
|
exports.Converter = Converter;
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkU7QUFFM0UsMkNBQXdDO0FBQ3hDLDJDQUFxRDtBQUE1QyxrR0FBQSxPQUFPLE9BQVc7QUFDM0IseUNBQW9DO0FBYXBDOzs7Ozs7R0FNRztBQUNVLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUVsRTs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsNEVBQTRFO0FBQzVFLFNBQVMsTUFBTSxDQUFDLEtBQVU7O0lBQ3hCLE1BQU0sTUFBTSxHQUFHLE1BQUEsS0FBSyxDQUFDLGtCQUFVLENBQUMsbUNBQUksS0FBSyxDQUFDLHNCQUFjLENBQUMsQ0FBQztJQUMxRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekQsQ0FBQztBQVlELCtHQUErRztBQUMvRyxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDdkMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFRLEtBQXlCLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDWCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLHlCQUF5QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUUvQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxLQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUM3QixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBUyxZQUFZLENBQUMsS0FBYztJQUNsQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3pELENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBUyxhQUFhLENBQUMsTUFBZTtJQUNwQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLHVEQUF1RCxZQUFZLENBQ2pFLE1BQU0sQ0FDUCxHQUFHLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUU1QyxTQUFTLGVBQWUsQ0FBQyxRQUFpQixFQUFFLEtBQWE7SUFDdkQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUNiLFFBQVEsS0FBSyxtREFBbUQsWUFBWSxDQUMxRSxRQUFRLENBQ1QsR0FBRyxDQUNMLENBQUM7SUFDSixDQUFDO0lBQ0Qsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLFFBQVEsS0FBSyw2Q0FBNkMsWUFBWSxDQUNwRSxRQUFRLENBQ1QsR0FBRyxDQUNMLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBVTtJQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDckMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUNULE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsU0FBUyxDQUNoQixRQUFrQixFQUNsQixJQUFTLEVBQ1QsSUFBWTtJQUVaLDhFQUE4RTtJQUM5RSwrREFBK0Q7SUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzlFLE9BQU87WUFDTCxJQUFJLEtBQUssQ0FDUCwrQkFBK0IsTUFBTSx5QkFBeUIsSUFBSSxJQUFJLENBQ3ZFO1lBQ0QsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFVLENBQUM7SUFDZixJQUFJLENBQUM7UUFDSCxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQ3RFLE1BQU0sTUFBTSxtQ0FBYSxLQUFLLEtBQUUsQ0FBQyxzQkFBYyxDQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7SUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsa0JBQVUsRUFBRTtRQUN4QyxLQUFLLEVBQUUsSUFBSTtRQUNYLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxTQUFTO0lBNEJwQjs7OztPQUlHO0lBQ0gsWUFBWSxHQUFHLE1BQW9EO1FBeEJuRTs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUNILFlBQU8sR0FBNkIsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQXVDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBa0JHO1FBQ0gsY0FBUyxHQUFHLENBQUMsTUFBa0IsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVGOzs7Ozs7Ozs7Ozs7O1dBYUc7UUFDSCxvQkFBZSxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVGOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ0gsWUFBTyxHQUFHLG9DQUtTLEVBQUUseUVBSm5CLE1BQWMsRUFDZCxJQUFZLEVBQ1osRUFBVSxFQUNWLFFBQWEsU0FBUztZQUV0Qix3RUFBd0U7WUFDeEUsd0VBQXdFO1lBQ3hFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFMUIsNENBQTRDO1lBQzVDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFDRSxJQUFJLEtBQUssU0FBUztvQkFDbEIsT0FBTyxJQUFJLEtBQUssUUFBUTtvQkFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFDekMsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxJQUFJLGdDQUFnQyxJQUFJLElBQUksQ0FDN0UsQ0FBQztnQkFDSixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxvREFBb0Q7WUFDcEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUEsV0FBRyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTlELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQSxDQUFDO1FBRUY7Ozs7Ozs7Ozs7O1dBV0c7UUFDSCxnQkFBVyxHQUFHLENBQ1osTUFBYyxFQUNkLEVBQVUsRUFDVixRQUFhLFNBQVMsRUFDZCxFQUFFOztZQUNWLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTFCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEtBQUssQ0FDYiw4REFBOEQsWUFBWSxDQUN4RSxLQUFLLENBQ04sR0FBRyxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsMEVBQTBFO1lBQzFFLDJFQUEyRTtZQUMzRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLHNCQUFjLENBQUMsQ0FBQztZQUN4RSx5RUFBeUU7WUFDekUsbURBQW1EO1lBQ25ELE1BQU0sT0FBTyxHQUNYLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxtQ0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRTdELDhEQUE4RDtZQUM5RCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsd0NBQXdDO2dCQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLE9BQU8sRUFBRSx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sUUFDekMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FDM0IsY0FBYyxDQUNmLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNCLCtEQUErRDtZQUMvRCxNQUFNLFdBQVcsR0FDZixPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUV6RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLEVBQUUsMkRBQTJELFlBQVksQ0FDbEcsR0FBRyxDQUNKLEdBQUcsQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFFdkMseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSwwRUFBMEU7WUFDMUUseURBQXlEO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxJQUFJLEtBQUssQ0FDYixjQUFjLE1BQU0sWUFBWSxXQUFXLG9DQUFvQyxDQUNoRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGOzs7Ozs7Ozs7Ozs7V0FZRztRQUNILGFBQVEsR0FBRywwQkFJWSxFQUFFLCtEQUh2QixJQUFZLEVBQ1osRUFBVSxFQUNWLFdBQW9CLEtBQUs7WUFFekIsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUU5Qix3RUFBd0U7WUFDeEUsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCwyQ0FBMkM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFekMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELHFCQUFxQjtZQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXZDLGdFQUFnRTtZQUNoRSx3RUFBd0U7WUFDeEUsa0NBQWtDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBQSx3QkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJDLElBQUksU0FBUyxHQUFVLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFFbEUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU5QiwyRUFBMkU7Z0JBQzNFLDBFQUEwRTtnQkFDMUUsd0VBQXdFO2dCQUN4RSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsU0FBUyxHQUFHLElBQUksS0FBSyxDQUNuQiwwRUFBMEUsQ0FDM0UsQ0FBQztvQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4QixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFZLElBQUEsV0FBRyxFQUNqQyxJQUFBLHNCQUFVLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGtDQUNyQyxLQUFLLEtBQUUsUUFBUSxJQUNyQixDQUNELENBQUM7Z0JBRUgsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNULHdFQUF3RTtvQkFDeEUseUVBQXlFO29CQUN6RSxtQ0FBbUM7b0JBQ25DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDYixPQUFPLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUNELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3RCLFNBQVMsR0FBRyxPQUFPLENBQUM7b0JBQ3BCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxnRUFBZ0U7Z0JBQ2hFLHFFQUFxRTtnQkFDckUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUM1QyxNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFFRCx5Q0FBeUM7WUFDekMsTUFBTSxTQUFTLENBQUM7UUFDbEIsQ0FBQyxDQUFBLENBQUM7UUF6U0EsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUUzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFNBQVM7UUFDWCwyRUFBMkU7UUFDM0UscURBQXFEO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQW9SRjtBQTVVRCw4QkE0VUMifQ==
|
|
459
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkU7QUFFM0UsMkNBQXdDO0FBQ3hDLDJDQUFxRDtBQUE1QyxrR0FBQSxPQUFPLE9BQVc7QUFDM0IseUNBQW9DO0FBYXBDOzs7Ozs7R0FNRztBQUNVLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUVsRTs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsNEVBQTRFO0FBQzVFLFNBQVMsTUFBTSxDQUFDLEtBQVU7O0lBQ3hCLE1BQU0sTUFBTSxHQUFHLE1BQUEsS0FBSyxDQUFDLGtCQUFVLENBQUMsbUNBQUksS0FBSyxDQUFDLHNCQUFjLENBQUMsQ0FBQztJQUMxRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekQsQ0FBQztBQVlELCtHQUErRztBQUMvRyxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDdkMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFRLEtBQXlCLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDWCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLHlCQUF5QixNQUFNLENB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
|
package/dist/parts/client.d.ts
CHANGED
|
@@ -35,5 +35,12 @@ export interface HttpClient {
|
|
|
35
35
|
export interface ClientOptions {
|
|
36
36
|
/** Milliseconds before a request is aborted. Defaults to 10000. */
|
|
37
37
|
timeout?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Bytes of response body the client will buffer before giving up. Defaults
|
|
40
|
+
* to 10MB. An unterminated stream otherwise buffers whole until the timeout
|
|
41
|
+
* fires, so this is what stands between a broken upstream and an OOM; the
|
|
42
|
+
* largest real rate table is ~4KB, so 10MB is pure headroom, not a real ceiling.
|
|
43
|
+
*/
|
|
44
|
+
maxResponseSize?: number;
|
|
38
45
|
}
|
|
39
46
|
export declare function createClient(options?: ClientOptions): HttpClient;
|
package/dist/parts/client.js
CHANGED
|
@@ -27,6 +27,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.createClient = createClient;
|
|
30
|
+
const DEFAULT_MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
|
|
30
31
|
/** Node's fetch reports the reason under `cause`; surface it as a code. */
|
|
31
32
|
function errorCode(err) {
|
|
32
33
|
var _a, _b;
|
|
@@ -35,9 +36,55 @@ function errorCode(err) {
|
|
|
35
36
|
}
|
|
36
37
|
return (_b = (_a = err === null || err === void 0 ? void 0 : err.cause) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : err === null || err === void 0 ? void 0 : err.code;
|
|
37
38
|
}
|
|
39
|
+
/** Distinguishes a body that grew past the cap from any other parse failure. */
|
|
40
|
+
class ResponseTooLargeError extends Error {
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reads the body up to `limit` bytes and parses it as JSON.
|
|
44
|
+
*
|
|
45
|
+
* Reading via the stream instead of response.json() is what lets a call bail
|
|
46
|
+
* out mid-download: an unterminated chunked stream measured at 8898MB pushed
|
|
47
|
+
* and 9078MB RSS before the 10s abort ever landed, since response.json()
|
|
48
|
+
* buffers the whole thing first. TextDecoder, not Buffer#toString, so a
|
|
49
|
+
* leading UTF-8 BOM is stripped the same way response.json() strips it.
|
|
50
|
+
*/
|
|
51
|
+
function readBody(response, limit) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
if (!response.body) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const reader = response.body.getReader();
|
|
57
|
+
const chunks = [];
|
|
58
|
+
let total = 0;
|
|
59
|
+
while (true) {
|
|
60
|
+
const { done, value } = yield reader.read();
|
|
61
|
+
if (done) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
total += value.byteLength;
|
|
65
|
+
if (total > limit) {
|
|
66
|
+
yield reader.cancel();
|
|
67
|
+
throw new ResponseTooLargeError(`Response body exceeded ${limit} bytes`);
|
|
68
|
+
}
|
|
69
|
+
chunks.push(value);
|
|
70
|
+
}
|
|
71
|
+
const text = new TextDecoder().decode(concat(chunks, total));
|
|
72
|
+
return JSON.parse(text);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function concat(chunks, total) {
|
|
76
|
+
const out = new Uint8Array(total);
|
|
77
|
+
let offset = 0;
|
|
78
|
+
for (const chunk of chunks) {
|
|
79
|
+
out.set(chunk, offset);
|
|
80
|
+
offset += chunk.byteLength;
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
38
84
|
function createClient(options = {}) {
|
|
39
|
-
var _a;
|
|
85
|
+
var _a, _b;
|
|
40
86
|
const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : 10000;
|
|
87
|
+
const maxResponseSize = (_b = options.maxResponseSize) !== null && _b !== void 0 ? _b : DEFAULT_MAX_RESPONSE_SIZE;
|
|
41
88
|
return {
|
|
42
89
|
get(url) {
|
|
43
90
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -56,9 +103,22 @@ function createClient(options = {}) {
|
|
|
56
103
|
// rather than failing here.
|
|
57
104
|
let data;
|
|
58
105
|
try {
|
|
59
|
-
data = yield response
|
|
106
|
+
data = yield readBody(response, maxResponseSize);
|
|
60
107
|
}
|
|
61
|
-
catch (
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (err instanceof ResponseTooLargeError) {
|
|
110
|
+
// Same shape as the transport failure above: no usable response
|
|
111
|
+
// came back, so the fallback chain has to treat this provider the
|
|
112
|
+
// same way it treats a dropped connection, not a parsed answer.
|
|
113
|
+
//
|
|
114
|
+
// Carried on `code`, not in the message. The requester will not echo
|
|
115
|
+
// a client's message, because that is where a URL and its API key
|
|
116
|
+
// end up, so a message-only failure surfaces as "Error (message
|
|
117
|
+
// withheld)" and says nothing about what went wrong.
|
|
118
|
+
const tooLarge = new Error(err.message);
|
|
119
|
+
tooLarge.code = "E_RESPONSE_TOO_LARGE";
|
|
120
|
+
throw tooLarge;
|
|
121
|
+
}
|
|
62
122
|
data = undefined;
|
|
63
123
|
}
|
|
64
124
|
const headers = {};
|
|
@@ -75,4 +135,4 @@ function createClient(options = {}) {
|
|
|
75
135
|
}
|
|
76
136
|
};
|
|
77
137
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7Ozs7Ozs7Ozs7O0FBNEZILG9DQXVEQztBQWpIRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRW5ELDJFQUEyRTtBQUMzRSxTQUFTLFNBQVMsQ0FBQyxHQUFROztJQUN6QixJQUFJLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksTUFBSyxjQUFjLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSxNQUFLLFlBQVksRUFBRSxDQUFDO1FBQy9ELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSywwQ0FBRSxJQUFJLG1DQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLENBQUM7QUFDdkMsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLHFCQUFzQixTQUFRLEtBQUs7Q0FBRztBQUU1Qzs7Ozs7Ozs7R0FRRztBQUNILFNBQWUsUUFBUSxDQUFDLFFBQWtCLEVBQUUsS0FBYTs7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0s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
|
package/dist/parts/config.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export declare class Config {
|
|
|
70
70
|
/**
|
|
71
71
|
* Adds multiple new, user-defined provider to the list of providers.
|
|
72
72
|
*
|
|
73
|
-
* @param {UserDefinedProvider[]}
|
|
73
|
+
* @param {UserDefinedProvider[]} newProviders - providers to be added
|
|
74
74
|
* @param {boolean} [setActive=false] - should the new provider(s) be prioritized
|
|
75
75
|
* @memberof Config
|
|
76
76
|
*/
|
package/dist/parts/config.js
CHANGED
|
@@ -20,7 +20,9 @@ class Config {
|
|
|
20
20
|
* @memberof Config
|
|
21
21
|
*/
|
|
22
22
|
get providers() {
|
|
23
|
-
|
|
23
|
+
// A copy: handing back the live array lets `providers.length = 0` empty
|
|
24
|
+
// the chain, the same bypass `converter.providers` already guards against.
|
|
25
|
+
return [...this._active];
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* Provider setter (adder).
|
|
@@ -106,7 +108,7 @@ class Config {
|
|
|
106
108
|
/**
|
|
107
109
|
* Adds multiple new, user-defined provider to the list of providers.
|
|
108
110
|
*
|
|
109
|
-
* @param {UserDefinedProvider[]}
|
|
111
|
+
* @param {UserDefinedProvider[]} newProviders - providers to be added
|
|
110
112
|
* @param {boolean} [setActive=false] - should the new provider(s) be prioritized
|
|
111
113
|
* @memberof Config
|
|
112
114
|
*/
|
|
@@ -117,8 +119,9 @@ class Config {
|
|
|
117
119
|
// Validate the whole batch before adding any of it, so a bad entry cannot
|
|
118
120
|
// leave earlier ones half-added and unusable on retry.
|
|
119
121
|
newProviders.forEach((p) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
+
const issue = (0, utils_1.userDefinedProviderIssue)(p);
|
|
123
|
+
if (issue) {
|
|
124
|
+
throw new Error(`Invalid provider format! ${issue}.`);
|
|
122
125
|
}
|
|
123
126
|
if (Object.prototype.hasOwnProperty.call(providers_1.providers, p.name)) {
|
|
124
127
|
throw new Error(`'${p.name}' is the name of a built-in provider; choose another.`);
|
|
@@ -182,4 +185,4 @@ function resolveProviders(...configuration) {
|
|
|
182
185
|
// resolving all providers
|
|
183
186
|
return initializationConfig.map((provider) => (0, providers_1.resolveProvider)(provider));
|
|
184
187
|
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErTUEsNENBcUNDO0FBcFBELHFDQUFvRDtBQUVwRCwyQ0FNcUI7QUFFckIsbUNBQW1EO0FBRW5EOzs7Ozs7R0FNRztBQUNILE1BQWEsTUFBTTtJQVNqQjs7Ozs7T0FLRztJQUNILElBQUksU0FBUztRQUNYLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUEwQ0Q7Ozs7Ozs7T0FPRztJQUNLLFlBQVksQ0FBQyxTQUFxQixFQUFFLFNBQWtCO1FBQzVELFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakMsc0VBQXNFO1lBQ3RFLDZDQUE2QztZQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3ZCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN0RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTztJQUNULENBQUM7SUFvRUQ7Ozs7O09BS0c7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxH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
|
package/dist/parts/requester.js
CHANGED
|
@@ -134,10 +134,29 @@ function signalledFailure(provider, failed, response, result) {
|
|
|
134
134
|
const mapped = Object.prototype.hasOwnProperty.call(provider.errors, error)
|
|
135
135
|
? provider.errors[error]
|
|
136
136
|
: undefined;
|
|
137
|
+
if (mapped) {
|
|
138
|
+
return { handled: true, error: mapped };
|
|
139
|
+
}
|
|
137
140
|
// A code the provider does not enumerate is not a verdict on the chain.
|
|
138
141
|
// Treating it as fatal meant a 500 from any provider whose errorHandler reads
|
|
139
142
|
// the HTTP status ended the call outright, so the default chain never fell back.
|
|
140
|
-
|
|
143
|
+
//
|
|
144
|
+
// An unmapped number from an actual HTTP failure is usually that status
|
|
145
|
+
// echoed back: ExchangeRateAPI's errorHandler is literally `data => data.status`,
|
|
146
|
+
// so an unrecognised body carrying one surfaced bare, and the caller rendered
|
|
147
|
+
// it as "Rate provider failed: 500", naming neither the provider nor the fact
|
|
148
|
+
// that 500 was a status. Phrase it the way a transport failure already is
|
|
149
|
+
// rather than duplicating that string here.
|
|
150
|
+
if (typeof error === "number" && failed && response) {
|
|
151
|
+
// Keep the provider's own number when it is not just the status echoed
|
|
152
|
+
// back: an apilayer 101 arriving on an HTTP 401 is the useful half, and
|
|
153
|
+
// reporting only "HTTP 401" throws away what the vendor actually said.
|
|
154
|
+
return {
|
|
155
|
+
handled: true,
|
|
156
|
+
error: httpFailureError(response.status, error === response.status ? undefined : error)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return { handled: true, error };
|
|
141
160
|
}
|
|
142
161
|
/**
|
|
143
162
|
* The fetchRates function, used for fetching currency conversion rates.
|
|
@@ -281,12 +300,24 @@ function retryAfter(response) {
|
|
|
281
300
|
// A date already in the past means "retry now", not "retry in the past".
|
|
282
301
|
return Math.max(at - Date.now(), 0);
|
|
283
302
|
}
|
|
303
|
+
/** The phrasing any HTTP failure gets, regardless of which path notices it. */
|
|
304
|
+
function httpFailureError(status, providerCode) {
|
|
305
|
+
const detail = providerCode === undefined
|
|
306
|
+
? `HTTP ${status}`
|
|
307
|
+
: `HTTP ${status}, provider code ${providerCode}`;
|
|
308
|
+
return new Error(`Request to the provider failed: ${detail}`);
|
|
309
|
+
}
|
|
284
310
|
/**
|
|
285
311
|
* Describes a thrown value in one line, without serialising it.
|
|
286
312
|
*
|
|
287
313
|
* Clients are free to reject with anything at all, and `err.code ||
|
|
288
|
-
* err.message || String(err)` reads "undefined" off half of them.
|
|
289
|
-
*
|
|
314
|
+
* err.message || String(err)` reads "undefined" off half of them. `message` is
|
|
315
|
+
* never used verbatim: a bare `fetch()` throws a TypeError naming the request
|
|
316
|
+
* when a URL fails to parse, and node-fetch's FetchError does the same for a
|
|
317
|
+
* DNS or connection failure, both embedding the provider API key. `code` is
|
|
318
|
+
* the one field a client is expected to set as a closed classification (like
|
|
319
|
+
* "ETIMEDOUT"), so it is the only one trusted; anything else is named by its
|
|
320
|
+
* class, never dumped.
|
|
290
321
|
*
|
|
291
322
|
* @param {unknown} err - the thrown value
|
|
292
323
|
* @returns {string} - a short, safe description
|
|
@@ -304,14 +335,13 @@ function describe(err) {
|
|
|
304
335
|
if (typeof code === "number") {
|
|
305
336
|
return String(code);
|
|
306
337
|
}
|
|
307
|
-
if (typeof message === "string" && message.trim()) {
|
|
308
|
-
return message.trim();
|
|
309
|
-
}
|
|
310
|
-
// Named, not dumped — an error object's own fields may carry the API key.
|
|
311
338
|
const name = (_a = err.constructor) === null || _a === void 0 ? void 0 : _a.name;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
339
|
+
if (typeof name !== "string" || !name || name === "Object") {
|
|
340
|
+
return "unknown error";
|
|
341
|
+
}
|
|
342
|
+
return typeof message === "string" && message.trim()
|
|
343
|
+
? `${name} (message withheld)`
|
|
344
|
+
: `${name} (no message)`;
|
|
315
345
|
}
|
|
316
346
|
if (err === null || err === undefined) {
|
|
317
347
|
return "unknown error";
|
|
@@ -334,8 +364,9 @@ function describe(err) {
|
|
|
334
364
|
function transportError(err) {
|
|
335
365
|
var _a;
|
|
336
366
|
const status = (_a = responseOf(err)) === null || _a === void 0 ? void 0 : _a.status;
|
|
337
|
-
const
|
|
338
|
-
|
|
367
|
+
const error = status
|
|
368
|
+
? httpFailureError(status)
|
|
369
|
+
: new Error(`Request to the provider failed: ${describe(err)}`);
|
|
339
370
|
const code = err === null || err === void 0 ? void 0 : err.code;
|
|
340
371
|
if (typeof code === "string") {
|
|
341
372
|
error.code = code;
|
|
@@ -363,4 +394,4 @@ function formatUrl(provider, query) {
|
|
|
363
394
|
.replace(/%TO%/g, put(query.TO))
|
|
364
395
|
.replace(/%KEY%/g, put(provider.key || ""));
|
|
365
396
|
}
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3JlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQXlEQSxvQ0FFQztBQXdLRCxnQ0E4RUM7QUEvU0QsMENBQXNDO0FBd0N0Qyw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztBQUVwQjs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxPQUFxQjtJQUNoRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsZUFBZTtJQUN0QixNQUFNLEtBQUssR0FBUSxJQUFJLEtBQUssQ0FDMUIsaUVBQWlFLENBQ2xFLENBQUM7SUFDRixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFjO0lBQ3ZDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ2xHLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUksSUFBZ0IsRUFBRSxRQUFnQjtJ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
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3JlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQXlEQSxvQ0FFQztBQWdNRCxnQ0E4RUM7QUF2VUQsMENBQXNDO0FBd0N0Qyw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztBQUVwQjs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxPQUFxQjtJQUNoRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsZUFBZTtJQUN0QixNQUFNLEtBQUssR0FBUSxJQUFJLEtBQUssQ0FDMUIsaUVBQWlFLENBQ2xFLENBQUM7SUFDRixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFjO0lBQ3ZDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ2xHLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUksSUFBZ0IsRUFBRSxRQUFnQjtJ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
|
package/dist/parts/utils.d.ts
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import { UserDefinedProvider, Provider } from "./providers";
|
|
2
|
+
/**
|
|
3
|
+
* Checks a candidate Provider and names the first thing wrong with it, or
|
|
4
|
+
* returns null if it is well-formed.
|
|
5
|
+
*
|
|
6
|
+
* A plain `!== undefined` check let `endpoint: null` and similar garbage
|
|
7
|
+
* through, so `addProviders` crashed on `p.endpoint.base` with a raw
|
|
8
|
+
* TypeError instead of the library's own "Invalid provider format!". This
|
|
9
|
+
* checks the actual shape each field is dereferenced with, and returns the
|
|
10
|
+
* reason so the caller can throw one message that names it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function providerShapeIssue(provider: Provider | any): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Same as `providerShapeIssue`, for the `{ name, provider }` pair `add` and
|
|
15
|
+
* `addMultiple` take.
|
|
16
|
+
*
|
|
17
|
+
* `name` used to be checked with `!== undefined`, so `Object.create(null)` (an
|
|
18
|
+
* object, not undefined) passed here and then crashed converting it to a
|
|
19
|
+
* property key for the built-in-name lookup, with no `toString` to fall back
|
|
20
|
+
* on.
|
|
21
|
+
*/
|
|
22
|
+
export declare function userDefinedProviderIssue(userDefinedProvider: UserDefinedProvider | any): string | null;
|
|
2
23
|
/**
|
|
3
24
|
* Utility for typechecking UserDefinedProvider objects
|
|
4
25
|
*
|
package/dist/parts/utils.js
CHANGED
|
@@ -1,9 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.providerShapeIssue = providerShapeIssue;
|
|
4
|
+
exports.userDefinedProviderIssue = userDefinedProviderIssue;
|
|
3
5
|
exports.checkIfUserDefinedProvider = checkIfUserDefinedProvider;
|
|
4
6
|
exports.checkIfProvider = checkIfProvider;
|
|
5
7
|
exports._to = _to;
|
|
6
8
|
exports.sleep = sleep;
|
|
9
|
+
/**
|
|
10
|
+
* Checks a candidate Provider and names the first thing wrong with it, or
|
|
11
|
+
* returns null if it is well-formed.
|
|
12
|
+
*
|
|
13
|
+
* A plain `!== undefined` check let `endpoint: null` and similar garbage
|
|
14
|
+
* through, so `addProviders` crashed on `p.endpoint.base` with a raw
|
|
15
|
+
* TypeError instead of the library's own "Invalid provider format!". This
|
|
16
|
+
* checks the actual shape each field is dereferenced with, and returns the
|
|
17
|
+
* reason so the caller can throw one message that names it.
|
|
18
|
+
*/
|
|
19
|
+
function providerShapeIssue(provider) {
|
|
20
|
+
if (provider === null || typeof provider !== "object") {
|
|
21
|
+
return "provider must be an object";
|
|
22
|
+
}
|
|
23
|
+
const p = provider;
|
|
24
|
+
if (p.endpoint === null ||
|
|
25
|
+
typeof p.endpoint !== "object" ||
|
|
26
|
+
typeof p.endpoint.base !== "string" ||
|
|
27
|
+
typeof p.endpoint.single !== "string") {
|
|
28
|
+
return "'endpoint' must be an object with string 'base' and 'single'";
|
|
29
|
+
}
|
|
30
|
+
if (typeof p.handler !== "function") {
|
|
31
|
+
return "'handler' must be a function";
|
|
32
|
+
}
|
|
33
|
+
if (p.errors === null || typeof p.errors !== "object") {
|
|
34
|
+
return "'errors' must be an object";
|
|
35
|
+
}
|
|
36
|
+
if (typeof p.errorHandler !== "function") {
|
|
37
|
+
return "'errorHandler' must be a function";
|
|
38
|
+
}
|
|
39
|
+
// `key` is deliberately not required: keyless providers are legitimate, and
|
|
40
|
+
// requiring it rejected every built-in provider.
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Same as `providerShapeIssue`, for the `{ name, provider }` pair `add` and
|
|
45
|
+
* `addMultiple` take.
|
|
46
|
+
*
|
|
47
|
+
* `name` used to be checked with `!== undefined`, so `Object.create(null)` (an
|
|
48
|
+
* object, not undefined) passed here and then crashed converting it to a
|
|
49
|
+
* property key for the built-in-name lookup, with no `toString` to fall back
|
|
50
|
+
* on.
|
|
51
|
+
*/
|
|
52
|
+
function userDefinedProviderIssue(userDefinedProvider) {
|
|
53
|
+
if (userDefinedProvider === null || typeof userDefinedProvider !== "object") {
|
|
54
|
+
return "provider entry must be an object";
|
|
55
|
+
}
|
|
56
|
+
const u = userDefinedProvider;
|
|
57
|
+
if (typeof u.name !== "string") {
|
|
58
|
+
return "'name' must be a string";
|
|
59
|
+
}
|
|
60
|
+
return providerShapeIssue(u.provider);
|
|
61
|
+
}
|
|
7
62
|
/**
|
|
8
63
|
* Utility for typechecking UserDefinedProvider objects
|
|
9
64
|
*
|
|
@@ -12,11 +67,7 @@ exports.sleep = sleep;
|
|
|
12
67
|
* @returns {u is UserDefinedProvider}
|
|
13
68
|
*/
|
|
14
69
|
function checkIfUserDefinedProvider(userDefinedProvider) {
|
|
15
|
-
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
return (userDefinedProvider.name !== undefined &&
|
|
19
|
-
checkIfProvider(userDefinedProvider.provider));
|
|
70
|
+
return userDefinedProviderIssue(userDefinedProvider) === null;
|
|
20
71
|
}
|
|
21
72
|
/**
|
|
22
73
|
* Utility for typechecking Provider objects
|
|
@@ -26,15 +77,7 @@ function checkIfUserDefinedProvider(userDefinedProvider) {
|
|
|
26
77
|
* @returns {p is Provider}
|
|
27
78
|
*/
|
|
28
79
|
function checkIfProvider(provider) {
|
|
29
|
-
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
// `key` is deliberately not required: keyless providers are legitimate, and
|
|
33
|
-
// requiring it rejected every built-in provider.
|
|
34
|
-
return (provider.endpoint !== undefined &&
|
|
35
|
-
provider.errorHandler !== undefined &&
|
|
36
|
-
provider.errors !== undefined &&
|
|
37
|
-
provider.handler !== undefined);
|
|
80
|
+
return providerShapeIssue(provider) === null;
|
|
38
81
|
}
|
|
39
82
|
/**
|
|
40
83
|
* Wraps a promise and handles both the resolved value and any potential errors.
|
|
@@ -55,4 +98,4 @@ function _to(promise) {
|
|
|
55
98
|
function sleep(ms) {
|
|
56
99
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
57
100
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFydHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxnREF5QkM7QUFXRCw0REFXQztBQVNELGdFQUlDO0FBU0QsMENBSUM7QUFRRCxrQkFNQztBQVNELHNCQUVDO0FBNUdEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQXdCO0lBQ3pELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxPQUFPLDRCQUE0QixDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxRQUFvQixDQUFDO0lBQy9CLElBQ0UsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUNuQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFDckMsQ0FBQztRQUNELE9BQU8sOERBQThELENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RELE9BQU8sNEJBQTRCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELDRFQUE0RTtJQUM1RSxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsbUJBQThDO0lBRTlDLElBQUksbUJBQW1CLEtBQUssSUFBSSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUUsT0FBTyxrQ0FBa0MsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsbUJBQTBDLENBQUM7SUFDckQsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxtQkFBOEM7SUFFOUMsT0FBTyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixRQUF3QjtJQUV4QixPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBR0Q7Ozs7R0FJRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsT0FBbUI7SUFFbkIsT0FBTyxPQUFPO1NBQ1gsSUFBSSxDQUFDLENBQUMsSUFBTyxFQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQyxLQUFLLENBQUMsQ0FBQyxHQUFNLEVBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUdEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEVBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -134,6 +134,12 @@ The three keyless providers need no signup and are **used by default**: a
|
|
|
134
134
|
`new Converter()` tries them in the order below, so a conversion keeps working
|
|
135
135
|
when one of them is down. Nothing to configure.
|
|
136
136
|
|
|
137
|
+
They do not all cover the same currencies. ExchangeRateAPI carries 166 and
|
|
138
|
+
Frankfurter carries 29, the ECB set, so a fallback changes both the rate source
|
|
139
|
+
and which currencies resolve at all. A code that works most of the time can fail
|
|
140
|
+
while the primary is down. Name a provider explicitly if you need one specific
|
|
141
|
+
source.
|
|
142
|
+
|
|
137
143
|
| Name | Service | API key |
|
|
138
144
|
| ----------------- | --------------------------------------------------------- | ------------ |
|
|
139
145
|
| `ExchangeRateAPI` | [exchangerate-api.com](https://www.exchangerate-api.com/) | not required |
|