easy-currencies 2.1.0 → 2.2.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.js CHANGED
@@ -34,10 +34,26 @@ exports.RATES_BASE = Symbol.for("easy-currencies.ratesBase");
34
34
  * `CURRENCY_CODE`, so this can never collide with a rate.
35
35
  */
36
36
  exports.RATES_BASE_KEY = "__base";
37
+ /**
38
+ * An untrusted value as something with readable properties, or undefined.
39
+ *
40
+ * Vendor bodies and caller-supplied rate tables arrive as `unknown`. Reading a
41
+ * property off one without narrowing first is how a malformed 200 used to
42
+ * become a TypeError instead of a fallback.
43
+ */
44
+ function asRecord(value) {
45
+ return typeof value === "object" && value !== null
46
+ ? value
47
+ : undefined;
48
+ }
37
49
  /** The base a table was fetched for, or undefined for one built by hand. */
38
50
  function baseOf(rates) {
39
51
  var _a;
40
- const marked = (_a = rates[exports.RATES_BASE]) !== null && _a !== void 0 ? _a : rates[exports.RATES_BASE_KEY];
52
+ const record = asRecord(rates);
53
+ if (!record) {
54
+ return undefined;
55
+ }
56
+ const marked = (_a = record[exports.RATES_BASE]) !== null && _a !== void 0 ? _a : record[exports.RATES_BASE_KEY];
41
57
  return typeof marked === "string" ? marked : undefined;
42
58
  }
43
59
  /** A rejection that is not contract-shaped is a bug, not a provider failure, and must not trigger fallback. */
@@ -155,23 +171,27 @@ function hasUsableRate(rates) {
155
171
  * an unexpected shape, says nothing about the providers behind it.
156
172
  */
157
173
  function readRates(provider, data, from) {
174
+ var _a;
158
175
  // Some vendors truncate an unrecognised code to a valid prefix and answer for
159
176
  // that instead: exchangerate-api turns "CNYqqqwwC" into "CNY".
160
- const echoed = data && (data.base || data.source);
177
+ const body = asRecord(data);
178
+ const echoed = (_a = body === null || body === void 0 ? void 0 : body.base) !== null && _a !== void 0 ? _a : body === null || body === void 0 ? void 0 : body.source;
161
179
  if (typeof echoed === "string" && echoed.toLowerCase() !== from.toLowerCase()) {
162
180
  return [
163
181
  new Error(`Provider answered for base '${echoed}', not the requested '${from}'.`),
164
182
  {}
165
183
  ];
166
184
  }
167
- let rates;
185
+ let handled;
168
186
  try {
169
- rates = provider.handler(data);
187
+ const handler = provider.handler;
188
+ handled = handler(data);
170
189
  }
171
190
  catch (e) {
172
191
  return [asError(e), {}];
173
192
  }
174
- if (!rates || typeof rates !== "object") {
193
+ const rates = asRecord(handled);
194
+ if (!rates) {
175
195
  return [new Error("Provider returned no usable rates."), {}];
176
196
  }
177
197
  // Three of the built-in handlers return {} by design when the body is not the
@@ -184,6 +204,9 @@ function readRates(provider, data, from) {
184
204
  // Stamp a copy, not the handler's own object. A handler may return a frozen
185
205
  // table, where writing throws, or a memoised one, where a later fetch for a
186
206
  // different base rewrites the marker under a caller still holding it.
207
+ // The cast is the one place the base marker is smuggled into a table typed
208
+ // as currency-to-number. RATES_BASE_KEY cannot be a currency code, so no
209
+ // caller reading a rate can collide with it.
187
210
  const marked = Object.assign(Object.assign({}, rates), { [exports.RATES_BASE_KEY]: from });
188
211
  Object.defineProperty(marked, exports.RATES_BASE, {
189
212
  value: from,
@@ -292,7 +315,14 @@ class Converter {
292
315
  * @throws {Error} - if the amount is not finite, or a currency is missing
293
316
  * @returns {Promise<number>} - converted amount
294
317
  */
295
- this.convert = (amount_1, from_1, to_1, ...args_1) => __awaiter(this, [amount_1, from_1, to_1, ...args_1], void 0, function* (amount, from, to, rates = undefined) {
318
+ this.convert = (amount_1, from_1, to_1, ...args_1) => __awaiter(this, [amount_1, from_1, to_1, ...args_1], void 0, function* (amount, from, to,
319
+ // Public signature, and `any` is load-bearing here rather than laziness.
320
+ // Rates may legitimately arrive with string values, which FloatRates and
321
+ // AlphaVantage really send, and a caller's own interface has no index
322
+ // signature so it would not satisfy Record<string, unknown>. Narrowing
323
+ // happens immediately below instead.
324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
325
+ rates = undefined) {
296
326
  // Validating before anything is requested: an unset amount used to come
297
327
  // back as NaN, and an unset currency reached the vendor as "undefined".
298
328
  requireAmount(amount);
@@ -331,19 +361,27 @@ class Converter {
331
361
  * @throws {Error} - if the amount, the currency, the rates or the rate is invalid
332
362
  * @returns {number} - converted amount
333
363
  */
334
- this.convertRate = (amount, to, rates = undefined) => {
364
+ this.convertRate = (amount, to,
365
+ // Public signature, and `any` is load-bearing here rather than laziness.
366
+ // Rates may legitimately arrive with string values, which FloatRates and
367
+ // AlphaVantage really send, and a caller's own interface has no index
368
+ // signature so it would not satisfy Record<string, unknown>. Narrowing
369
+ // happens immediately below instead.
370
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
371
+ rates = undefined) => {
335
372
  var _a;
336
373
  requireAmount(amount);
337
374
  requireCurrency(to, "to");
338
- // Array.isArray as well as the typeof: an array IS an object, and
375
+ // Array.isArray as well as the record check: an array IS an object, and
339
376
  // Object.keys([0.9]) is ["0"], so a table read from an array offered
340
377
  // index-keyed currencies rather than being rejected.
341
- if (typeof rates !== "object" || rates === null || Array.isArray(rates)) {
378
+ const table = Array.isArray(rates) ? undefined : asRecord(rates);
379
+ if (!table) {
342
380
  throw new Error(`Rates must be an object mapping currency to rate, received ${describeRate(rates)}.`);
343
381
  }
344
382
  // The base marker rides along as an ordinary key; it is not a rate, so it
345
383
  // is neither a lookup candidate nor part of the "N rates available" count.
346
- const keys = Object.keys(rates).filter((key) => key !== exports.RATES_BASE_KEY);
384
+ const keys = Object.keys(table).filter((key) => key !== exports.RATES_BASE_KEY);
347
385
  // Exact match wins, so a response carrying both "EUR" and "eur" does not
348
386
  // resolve differently depending on JSON key order.
349
387
  const rateKey = (_a = keys.find((key) => key === to)) !== null && _a !== void 0 ? _a : keys.find((key) => asciiLower(key) === asciiLower(to));
@@ -352,7 +390,7 @@ class Converter {
352
390
  // The full table is ~4KB in production.
353
391
  throw new Error(`No '${to}' present in rates (${keys.length} rate${keys.length === 1 ? "" : "s"} available).`);
354
392
  }
355
- const raw = rates[rateKey];
393
+ const raw = table[rateKey];
356
394
  const numericRate = asRate(raw);
357
395
  if (!Number.isFinite(numericRate) || numericRate <= 0) {
358
396
  throw new Error(`Invalid rate value for '${to}': expected a finite number greater than zero, received ${describeRate(raw)}.`);
@@ -410,6 +448,8 @@ class Converter {
410
448
  this.report(lastError);
411
449
  continue;
412
450
  }
451
+ // The rejection is a FetchRatesError, not an Error, so name both sides
452
+ // rather than casting the pair to any and losing the shape entirely.
413
453
  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 })));
414
454
  if (!err) {
415
455
  // A provider answering wrongly, or a handler throwing on a shape it did
@@ -456,4 +496,4 @@ class Converter {
456
496
  }
457
497
  }
458
498
  exports.Converter = Converter;
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkU7QUFFM0UsMkNBQXdDO0FBQ3hDLDJDQUFxRDtBQUE1QyxrR0FBQSxPQUFPLE9BQVc7QUFDM0IseUNBQW9DO0FBYXBDOzs7Ozs7R0FNRztBQUNVLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUVsRTs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsNEVBQTRFO0FBQzVFLFNBQVMsTUFBTSxDQUFDLEtBQVU7O0lBQ3hCLE1BQU0sTUFBTSxHQUFHLE1BQUEsS0FBSyxDQUFDLGtCQUFVLENBQUMsbUNBQUksS0FBSyxDQUFDLHNCQUFjLENBQUMsQ0FBQztJQUMxRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekQsQ0FBQztBQVlELCtHQUErRztBQUMvRyxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDdkMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFRLEtBQXlCLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDWCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLHlCQUF5QixNQUFNLENB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
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkU7QUFFM0UsMkNBQXdDO0FBQ3hDLDJDQUFxRDtBQUE1QyxrR0FBQSxPQUFPLE9BQVc7QUFDM0IseUNBQW9DO0FBYXBDOzs7Ozs7R0FNRztBQUNVLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUVsRTs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkM7Ozs7OztHQU1HO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUNoRCxDQUFDLENBQUUsS0FBaUM7UUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLFNBQVMsTUFBTSxDQUFDLEtBQWM7O0lBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQ1YsTUFBQyxNQUEyQyxDQUFDLGtCQUFVLENBQUMsbUNBQ3hELE1BQU0sQ0FBQyxzQkFBYyxDQUFDLENBQUM7SUFDekIsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3pELENBQUM7QUFZRCwrR0FBK0c7QUFDL0csU0FBUyxpQkFBaUIsQ0FBQyxLQUFjO0lBQ3ZDLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssS0FBSyxJQUFJO1FBQ2QsT0FBUSxLQUF5QixDQUFDLE9B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
@@ -8,6 +8,14 @@ export interface chainableConverter {
8
8
  from: (from: string) => chainableConverter;
9
9
  to: (to: string) => Promise<number>;
10
10
  fetch: () => Promise<chainableConverter>;
11
+ /**
12
+ * The fetched rate table.
13
+ *
14
+ * This type is optimistic: the value is undefined until `fetch()` has
15
+ * resolved. Saying so would break any consumer reading `convert.rates`
16
+ * without a guard, so the honest `rateObject | undefined` waits for the next
17
+ * major rather than arriving in a minor.
18
+ */
11
19
  rates: rateObject;
12
20
  amount: (val: number) => chainableConverter;
13
21
  }
@@ -39,6 +39,7 @@ function Chainer(amount = undefined) {
39
39
  to: _to,
40
40
  fetch: _fetch,
41
41
  get rates() {
42
+ // Cast, not a lie the compiler made: see the note on the interface.
42
43
  return _currentRates;
43
44
  },
44
45
  amount: _amount
@@ -99,4 +100,4 @@ function Chainer(amount = undefined) {
99
100
  });
100
101
  }
101
102
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJ0cy9jaGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBMkJBLDBCQXNGQztBQWpIRCw0Q0FBcUQ7QUFnQnJEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixPQUFPLENBQUMsU0FBNkIsU0FBUztJQUM1RCxJQUFJLGNBQWMsR0FBdUIsTUFBTSxDQUFDO0lBQ2hELElBQUksWUFBWSxHQUF1QixTQUFTLENBQUM7SUFDakQsSUFBSSxVQUFVLEdBQXVCLFNBQVMsQ0FBQztJQUMvQyxJQUFJLGFBQWEsR0FBb0IsU0FBUyxDQUFDO0lBQy9DLG1EQUFtRDtJQUNuRCxJQUFJLFVBQVUsR0FBdUIsU0FBUyxDQUFDO0lBRS9DLGtCQUFrQjtJQUNsQixNQUFNLFVBQVUsR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQztJQUVuQzs7T0FFRztJQUNILE1BQU0sU0FBUyxHQUF1QjtRQUNwQyxJQUFJLEVBQUUsS0FBSztRQUNYLEVBQUUsRUFBRSxHQUFHO1FBQ1AsS0FBSyxFQUFFLE1BQU07UUFDYixJQUFJLEtBQUs7WUFDUCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQ0QsTUFBTSxFQUFFLE9BQU87S0FDaEIsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxTQUFlLE1BQU07O1lBQ25CLHVDQUF1QztZQUN2QyxhQUFhLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFTLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsVUFBVSxHQUFHLFlBQVksQ0FBQztZQUMxQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxTQUFTLENBQUM7SUFFakI7Ozs7O09BS0c7SUFDSCxTQUFTLE9BQU8sQ0FBQyxHQUFXO1FBQzFCLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFDckIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxLQUFLLENBQUMsSUFBWTtRQUN6Qix3RUFBd0U7UUFDeEUsbUVBQW1FO1FBQ25FLElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUMxQixVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWUsR0FBRyxDQUFDLEVBQVU7O1lBQzNCLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFFaEIsYUFBYTtZQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FDN0IsY0FBYyxFQUNkLFlBQVksRUFDWixVQUFVLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO1lBRUYsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUFBO0FBQ0gsQ0FBQyJ9
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJ0cy9jaGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBa0NBLDBCQXVGQztBQXpIRCw0Q0FBcUQ7QUF1QnJEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixPQUFPLENBQUMsU0FBNkIsU0FBUztJQUM1RCxJQUFJLGNBQWMsR0FBdUIsTUFBTSxDQUFDO0lBQ2hELElBQUksWUFBWSxHQUF1QixTQUFTLENBQUM7SUFDakQsSUFBSSxVQUFVLEdBQXVCLFNBQVMsQ0FBQztJQUMvQyxJQUFJLGFBQWEsR0FBMkIsU0FBUyxDQUFDO0lBQ3RELG1EQUFtRDtJQUNuRCxJQUFJLFVBQVUsR0FBdUIsU0FBUyxDQUFDO0lBRS9DLGtCQUFrQjtJQUNsQixNQUFNLFVBQVUsR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQztJQUVuQzs7T0FFRztJQUNILE1BQU0sU0FBUyxHQUF1QjtRQUNwQyxJQUFJLEVBQUUsS0FBSztRQUNYLEVBQUUsRUFBRSxHQUFHO1FBQ1AsS0FBSyxFQUFFLE1BQU07UUFDYixJQUFJLEtBQUs7WUFDUCxvRUFBb0U7WUFDcEUsT0FBTyxhQUEyQixDQUFDO1FBQ3JDLENBQUM7UUFDRCxNQUFNLEVBQUUsT0FBTztLQUNoQixDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFNBQWUsTUFBTTs7WUFDbkIsdUNBQXVDO1lBQ3ZDLGFBQWEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQVMsWUFBWSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRSxVQUFVLEdBQUcsWUFBWSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FBQTtJQUVELHNCQUFzQjtJQUN0QixPQUFPLFNBQVMsQ0FBQztJQUVqQjs7Ozs7T0FLRztJQUNILFNBQVMsT0FBTyxDQUFDLEdBQVc7UUFDMUIsY0FBYyxHQUFHLEdBQUcsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLEtBQUssQ0FBQyxJQUFZO1FBQ3pCLHdFQUF3RTtRQUN4RSxtRUFBbUU7UUFDbkUsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRCxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQzFCLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDekIsQ0FBQztRQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBZSxHQUFHLENBQUMsRUFBVTs7WUFDM0IsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUVoQixhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUM3QixjQUFjLEVBQ2QsWUFBWSxFQUNwQixVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUM7WUFFRixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQUE7QUFDSCxDQUFDIn0=
@@ -28,13 +28,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.createClient = createClient;
30
30
  const DEFAULT_MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
31
+ /** True for a non-null object, so a property read off it is not a member access on `unknown`. */
32
+ function isObject(value) {
33
+ return typeof value === "object" && value !== null;
34
+ }
31
35
  /** Node's fetch reports the reason under `cause`; surface it as a code. */
32
36
  function errorCode(err) {
33
- var _a, _b;
34
- if ((err === null || err === void 0 ? void 0 : err.name) === "TimeoutError" || (err === null || err === void 0 ? void 0 : err.name) === "AbortError") {
37
+ var _a;
38
+ if (!isObject(err)) {
39
+ return undefined;
40
+ }
41
+ if (err.name === "TimeoutError" || err.name === "AbortError") {
35
42
  return "ETIMEDOUT";
36
43
  }
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;
44
+ const cause = isObject(err.cause) ? err.cause : undefined;
45
+ const code = (_a = cause === null || cause === void 0 ? void 0 : cause.code) !== null && _a !== void 0 ? _a : err.code;
46
+ return typeof code === "string" ? code : undefined;
38
47
  }
39
48
  /** Distinguishes a body that grew past the cap from any other parse failure. */
40
49
  class ResponseTooLargeError extends Error {
@@ -94,7 +103,8 @@ function createClient(options = {}) {
94
103
  }
95
104
  catch (err) {
96
105
  // No response: DNS, refused, timeout, abort.
97
- const error = new Error((err === null || err === void 0 ? void 0 : err.message) || "fetch failed");
106
+ const message = isObject(err) && typeof err.message === "string" ? err.message : undefined;
107
+ const error = new Error(message || "fetch failed");
98
108
  error.code = errorCode(err);
99
109
  throw error;
100
110
  }
@@ -135,4 +145,4 @@ function createClient(options = {}) {
135
145
  }
136
146
  };
137
147
  }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7Ozs7Ozs7Ozs7O0FBNEZILG9DQXVEQztBQWpIRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRW5ELDJFQUEyRTtBQUMzRSxTQUFTLFNBQVMsQ0FBQyxHQUFROztJQUN6QixJQUFJLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksTUFBSyxjQUFjLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSxNQUFLLFlBQVksRUFBRSxDQUFDO1FBQy9ELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSywwQ0FBRSxJQUFJLG1DQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLENBQUM7QUFDdkMsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLHFCQUFzQixTQUFRLEtBQUs7Q0FBRztBQUU1Qzs7Ozs7Ozs7R0FRRztBQUNILFNBQWUsUUFBUSxDQUFDLFFBQWtCLEVBQUUsS0FBYTs7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0s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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7Ozs7Ozs7Ozs7O0FBeUdILG9DQXdEQztBQTVIRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRW5ELGlHQUFpRztBQUNqRyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxTQUFTLFNBQVMsQ0FBQyxHQUFZOztJQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUM3RCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFELE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksbUNBQUksR0FBRyxDQUFDLElBQUksQ0FBQztJQUNyQyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckQsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLHFCQUFzQixTQUFRLEtBQUs7Q0FBRztBQUU1Qzs7Ozs7Ozs7R0FRRztBQUNILFNBQWUsUUFBUSxDQUFDLFFBQWtCLEVBQUUsS0FBYTs7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxQixJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQywwQkFBMEIsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUMzRSxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQVksQ0FBQztJQUNyQyxDQUFDO0NBQUE7QUFFRCxTQUFTLE1BQU0sQ0FBQyxNQUFvQixFQUFFLEtBQWE7SUFDakQsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLFVBQXlCLEVBQUU7O0lBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQUEsT0FBTyxDQUFDLE9BQU8sbUNBQUksS0FBSyxDQUFDO0lBQ3pDLE1BQU0sZUFBZSxHQUFHLE1BQUEsT0FBTyxDQUFDLGVBQWUsbUNBQUkseUJBQXlCLENBQUM7SUFFN0UsT0FBTztRQUNDLEdBQUcsQ0FBQyxHQUFXOztnQkFDbkIsSUFBSSxRQUFrQixDQUFDO2dCQUN2QixJQUFJLENBQUM7b0JBQ0gsUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLDZDQUE2QztvQkFDN0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0YsTUFBTSxLQUFLLEdBQWMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO29CQUM5RCxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCwwRUFBMEU7Z0JBQzFFLHVFQUF1RTtnQkFDdkUsNEJBQTRCO2dCQUM1QixJQUFJLElBQWEsQ0FBQztnQkFDbEIsSUFBSSxDQUFDO29CQUNILElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ25ELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLEdBQUcsWUFBWSxxQkFBcUIsRUFBRSxDQUFDO3dCQUN6QyxnRUFBZ0U7d0JBQ2hFLGtFQUFrRTt3QkFDbEUsZ0VBQWdFO3dCQUNoRSxFQUFFO3dCQUNGLHFFQUFxRTt3QkFDckUsa0VBQWtFO3dCQUNsRSxnRUFBZ0U7d0JBQ2hFLHFEQUFxRDt3QkFDckQsTUFBTSxRQUFRLEdBQWMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNuRCxRQUFRLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO3dCQUN2QyxNQUFNLFFBQVEsQ0FBQztvQkFDakIsQ0FBQztvQkFDRCxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQixNQUFNLEtBQUssR0FBYyxJQUFJLEtBQUssQ0FDaEMsbUNBQW1DLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDckQsQ0FBQztvQkFDRixLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUM1RCxNQUFNLEtBQUssQ0FBQztnQkFDZCxDQUFDO2dCQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDcEQsQ0FBQztTQUFBO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,3 +1,4 @@
1
+ import type { rateObject } from "../converter";
1
2
  /**
2
3
  * A map for provider information
3
4
  *
@@ -61,7 +62,7 @@ export interface Provider {
61
62
  * @type {Function}
62
63
  * @memberof Provider
63
64
  */
64
- handler: Function;
65
+ handler: (data: any) => rateObject;
65
66
  /**
66
67
  * A map of possible errors and their respective messages
67
68
  *
@@ -18,11 +18,29 @@ function resolveProvider(provider) {
18
18
  throw new Error("No provider with this name. Please use a provider from the supported providers list.");
19
19
  }
20
20
  // Copy, so instances do not share a template and overwrite each other's key.
21
+ // `key` is `any` on both sides by the public contract (Provider.key,
22
+ // ProviderReference.key), so this assignment carries no more risk than the
23
+ // interfaces already declare.
24
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- see above
21
25
  return Object.assign(Object.assign({}, exports.providers[name]), { key: provider.key });
22
26
  }
27
+ /**
28
+ * Narrows an unknown response body to a plain object, or undefined if it is
29
+ * not one (including null, since typeof null === "object" would otherwise
30
+ * slip through). Every built-in handler and errorHandler below starts here
31
+ * instead of casting `data` ad hoc at each member access.
32
+ */
33
+ function asRecord(data) {
34
+ return typeof data === "object" && data !== null
35
+ ? data
36
+ : undefined;
37
+ }
23
38
  /**
24
39
  * Provider map initialization
25
40
  */
41
+ // Object.create(null) types as `any`, so Object.assign onto it does too; cast
42
+ // at the construction boundary rather than disabling the check, since this is
43
+ // the one place that must vouch for the literal actually matching Providers.
26
44
  exports.providers = Object.assign(Object.create(null), {
27
45
  ExchangeRateAPI: {
28
46
  endpoint: {
@@ -31,11 +49,13 @@ exports.providers = Object.assign(Object.create(null), {
31
49
  },
32
50
  key: undefined,
33
51
  handler: function (data) {
34
- return data.rates;
52
+ var _a;
53
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.rates;
35
54
  },
36
55
  errors: { 400: "Malformed query.", 404: "Currency not found" },
37
56
  errorHandler: function (data) {
38
- return data.status;
57
+ var _a;
58
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.status;
39
59
  }
40
60
  },
41
61
  ExchangeRatesAPIIO: {
@@ -50,11 +70,14 @@ exports.providers = Object.assign(Object.create(null), {
50
70
  },
51
71
  key: undefined,
52
72
  handler: function (data) {
53
- return data.rates;
73
+ var _a;
74
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.rates;
54
75
  },
55
76
  // apilayer signals failure in the body, not the HTTP status.
56
77
  errorHandler: function (data) {
57
- return data && data.error ? data.error.code : null;
78
+ var _a, _b;
79
+ const code = (_b = asRecord((_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.error)) === null || _b === void 0 ? void 0 : _b.code;
80
+ return (code !== null && code !== void 0 ? code : null);
58
81
  }
59
82
  },
60
83
  CurrencyLayer: {
@@ -64,15 +87,20 @@ exports.providers = Object.assign(Object.create(null), {
64
87
  },
65
88
  key: undefined,
66
89
  handler: function (data) {
90
+ var _a;
67
91
  // An empty or unexpected 200 body would otherwise throw a TypeError out
68
92
  // of the handler, which the caller reports as a missing response.
69
- if (!data || typeof data.quotes !== "object" || data.quotes === null) {
93
+ // `quotes` must itself be a real object: quotes === null is a distinct
94
+ // 200 shape, and asRecord folds it into "not usable" like every other
95
+ // non-object case.
96
+ const quotes = asRecord((_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.quotes);
97
+ if (!quotes) {
70
98
  return {};
71
99
  }
72
100
  const map = {};
73
- Object.keys(data.quotes).map((key) => {
74
- map[key.slice(3)] = data.quotes[key];
75
- });
101
+ for (const key of Object.keys(quotes)) {
102
+ map[key.slice(3)] = quotes[key];
103
+ }
76
104
  return map;
77
105
  },
78
106
  errors: {
@@ -82,7 +110,9 @@ exports.providers = Object.assign(Object.create(null), {
82
110
  106: "No results."
83
111
  },
84
112
  errorHandler: function (data) {
85
- return data.error ? data.error.code : null;
113
+ var _a, _b;
114
+ const code = (_b = asRecord((_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.error)) === null || _b === void 0 ? void 0 : _b.code;
115
+ return (code !== null && code !== void 0 ? code : null);
86
116
  }
87
117
  },
88
118
  OpenExchangeRates: {
@@ -92,13 +122,15 @@ exports.providers = Object.assign(Object.create(null), {
92
122
  },
93
123
  key: undefined,
94
124
  handler: function (data) {
95
- return data.rates;
125
+ var _a;
126
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.rates;
96
127
  },
97
128
  errors: {
98
129
  401: "Invalid API key!"
99
130
  },
100
131
  errorHandler: function (data) {
101
- return data.status;
132
+ var _a;
133
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.status;
102
134
  }
103
135
  },
104
136
  AlphaVantage: {
@@ -109,9 +141,15 @@ exports.providers = Object.assign(Object.create(null), {
109
141
  key: undefined,
110
142
  handler: function (data) {
111
143
  const map = {};
112
- const o = data ? data[Object.keys(data)[0]] : undefined;
113
- // Same guard: an empty 200 must not crash the handler.
114
- if (!o || typeof o !== "object") {
144
+ const record = asRecord(data);
145
+ if (!record) {
146
+ return map;
147
+ }
148
+ const firstKey = Object.keys(record)[0];
149
+ const o = firstKey === undefined ? undefined : asRecord(record[firstKey]);
150
+ // Same guard: an empty 200, or a first key holding a string rather than
151
+ // an object, must not crash the handler.
152
+ if (!o) {
115
153
  return map;
116
154
  }
117
155
  map[o["3. To_Currency Code"]] = o["5. Exchange Rate"];
@@ -122,14 +160,15 @@ exports.providers = Object.assign(Object.create(null), {
122
160
  503: "Invalid API key or Malformed query."
123
161
  },
124
162
  errorHandler: function (data) {
125
- if (!data) {
163
+ const record = asRecord(data);
164
+ if (!record) {
126
165
  return null;
127
166
  }
128
167
  // AlphaVantage does not return error codes in the response,
129
168
  // so we have to check if the response contains error messages
130
169
  // and translate them to error codes if possible.
131
- const hasError = data["Error Message"] || data["Information"];
132
- if (hasError === null || hasError === void 0 ? void 0 : hasError.includes("API rate limit")) {
170
+ const hasError = record["Error Message"] || record["Information"];
171
+ if (typeof hasError === "string" && hasError.includes("API rate limit")) {
133
172
  return 429;
134
173
  }
135
174
  if (hasError) {
@@ -145,7 +184,8 @@ exports.providers = Object.assign(Object.create(null), {
145
184
  },
146
185
  key: undefined,
147
186
  handler: function (data) {
148
- return data.rates;
187
+ var _a;
188
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.rates;
149
189
  },
150
190
  errors: {
151
191
  105: "A paid plan is required in order to use Fixer.io (base currency use not allowed)",
@@ -153,7 +193,9 @@ exports.providers = Object.assign(Object.create(null), {
153
193
  201: "Invalid base currency."
154
194
  },
155
195
  errorHandler: function (data) {
156
- return data.error ? data.error.code : null;
196
+ var _a, _b;
197
+ const code = (_b = asRecord((_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.error)) === null || _b === void 0 ? void 0 : _b.code;
198
+ return (code !== null && code !== void 0 ? code : null);
157
199
  }
158
200
  },
159
201
  Frankfurter: {
@@ -166,12 +208,14 @@ exports.providers = Object.assign(Object.create(null), {
166
208
  },
167
209
  key: undefined,
168
210
  handler: function (data) {
169
- return data.rates;
211
+ var _a;
212
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.rates;
170
213
  },
171
214
  // Verified live: an unknown base returns 404 with {"message":"not found"}.
172
215
  errors: { 404: "Currency not found or not supported by Frankfurter." },
173
216
  errorHandler: function (data) {
174
- return data.status;
217
+ var _a;
218
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.status;
175
219
  }
176
220
  },
177
221
  FloatRates: {
@@ -184,15 +228,23 @@ exports.providers = Object.assign(Object.create(null), {
184
228
  key: undefined,
185
229
  handler: function (data) {
186
230
  const map = {};
187
- Object.keys(data).map((key) => {
188
- map[data[key].code] = parseFloat(data[key].rate);
189
- });
231
+ const record = asRecord(data);
232
+ if (!record) {
233
+ return map;
234
+ }
235
+ for (const key of Object.keys(record)) {
236
+ const entry = asRecord(record[key]);
237
+ if (entry) {
238
+ map[entry.code] = parseFloat(entry.rate);
239
+ }
240
+ }
190
241
  return map;
191
242
  },
192
243
  // Verified live: an unknown currency returns 403 with an empty body.
193
244
  errors: { 403: "Currency not found or not supported by FloatRates." },
194
245
  errorHandler: function (data) {
195
- return data.status;
246
+ var _a;
247
+ return (_a = asRecord(data)) === null || _a === void 0 ? void 0 : _a.status;
196
248
  }
197
249
  }
198
250
  });
@@ -208,4 +260,4 @@ for (const name of Object.keys(exports.providers)) {
208
260
  // a built-in can no longer be deleted or replaced out from under every
209
261
  // Converter in the process.
210
262
  Object.seal(exports.providers);
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzR0EsMENBYUM7QUFwQkQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFFBQTJCO0lBQ3pELDZFQUE2RTtJQUM3RSxtRUFBbUU7SUFDbkUsK0NBQStDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxJQUFJLENBQUM7SUFDNUIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0ZBQXNGLENBQ3ZGLENBQUM7SUFDSixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHVDQUFZLGlCQUFTLENBQUMsSUFBSSxDQUFDLEtBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUc7QUFDbkQsQ0FBQztBQUVEOztHQUVHO0FBQ1UsUUFBQSxTQUFTLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ3JFLGVBQWUsRUFBRTtRQUNmLFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSw2Q0FBNkM7WUFDbkQsTUFBTSxFQUFFLFFBQVE7U0FDakI7UUFDRCxHQUFHLEVBQUUsU0FBUztRQUNkLE9BQU8sRUFBRSxVQUFVLElBQVM7WUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFO1FBQzlELFlBQVksRUFBRSxVQUFVLElBQVM7WUFDL0IsT0FBTyxJQUFJLENBQUMsTUFB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
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwSEEsMENBaUJDO0FBeEJEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxRQUEyQjtJQUN6RCw2RUFBNkU7SUFDN0UsbUVBQW1FO0lBQ25FLCtDQUErQztJQUMvQyxNQUFNLElBQUksR0FBRyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksS0FBSyxDQUNiLHNGQUFzRixDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsMkVBQTJFO0lBQzNFLDhCQUE4QjtJQUM5QixnRkFBZ0Y7SUFDaEYsdUNBQVksaUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBRztBQUNuRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFhO0lBQzdCLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJO1FBQzlDLENBQUMsQ0FBRSxJQUFnQztRQUNuQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILDhFQUE4RTtBQUM5RSw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQ2hFLFFBQUEsU0FBUyxHQUFjLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUNyRSxlQUFlLEVBQUU7UUFDZixRQUFRLEVBQUU7WUFDUixJQUFJ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
@@ -28,12 +28,21 @@ export interface RetryOptions {
28
28
  */
29
29
  deadline?: number;
30
30
  }
31
- /** How a rate fetch failed. Every provider failure is recoverable by trying the next provider. */
32
- export interface FetchRatesError {
31
+ /**
32
+ * How a rate fetch failed. Every provider failure is recoverable by trying the
33
+ * next provider.
34
+ *
35
+ * Extends Error, not a plain object, so every `throw` of one satisfies
36
+ * only-throw-error. converter.ts still recognises it by duck-typing `handled`
37
+ * (see `isProviderFailure` there), which an Error subclass with a boolean
38
+ * `handled` property satisfies exactly as a plain object would.
39
+ */
40
+ export declare class FetchRatesError extends Error {
33
41
  /** False means fatal: the caller rethrows rather than trying another provider. */
34
- handled: boolean;
35
- /** The reason, always an Error by the time it leaves here. */
36
- error: unknown;
42
+ readonly handled: boolean;
43
+ /** The reason: an Error for a transport or budget failure, or whatever a provider's errorHandler mapped to. */
44
+ readonly error: unknown;
45
+ constructor(handled: boolean, error: unknown);
37
46
  }
38
47
  /**
39
48
  * When a call that starts now must be finished by.
@@ -52,6 +61,6 @@ export declare function deadlineFrom(options: RetryOptions): number;
52
61
  * @param {Provider} provider - provider from which the quotes will be fetched
53
62
  * @param {Query} query - the query
54
63
  * @param {RetryOptions} [options] - retry tuning
55
- * @returns {Promise<any>} - a result promise
64
+ * @returns {Promise<unknown>} - a result promise
56
65
  */
57
- export declare function fetchRates(client: HttpClient, provider: Provider, query: Query, options?: RetryOptions): Promise<any>;
66
+ export declare function fetchRates(client: HttpClient, provider: Provider, query: Query, options?: RetryOptions): Promise<unknown>;
@@ -9,9 +9,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FetchRatesError = void 0;
12
13
  exports.deadlineFrom = deadlineFrom;
13
14
  exports.fetchRates = fetchRates;
14
15
  const utils_1 = require("../parts/utils");
16
+ /**
17
+ * How a rate fetch failed. Every provider failure is recoverable by trying the
18
+ * next provider.
19
+ *
20
+ * Extends Error, not a plain object, so every `throw` of one satisfies
21
+ * only-throw-error. converter.ts still recognises it by duck-typing `handled`
22
+ * (see `isProviderFailure` there), which an Error subclass with a boolean
23
+ * `handled` property satisfies exactly as a plain object would.
24
+ */
25
+ class FetchRatesError extends Error {
26
+ constructor(handled, error) {
27
+ super(error instanceof Error ? error.message : String(error));
28
+ this.name = "FetchRatesError";
29
+ this.handled = handled;
30
+ this.error = error;
31
+ }
32
+ }
33
+ exports.FetchRatesError = FetchRatesError;
15
34
  // The old 5 retries capped at 16s ran 1+2+4+8+16 = 31s per provider, and the
16
35
  // schedule restarted for each one: three rate-limited providers measured at
17
36
  // 102s and 18 upstream requests, with no way for a caller to shorten it.
@@ -37,7 +56,7 @@ function budgetExhausted() {
37
56
  return error;
38
57
  }
39
58
  function isBudgetExhausted(value) {
40
- return typeof value === "object" && value !== null && value[BUDGET_EXHAUSTED] === true;
59
+ return value instanceof Error && value[BUDGET_EXHAUSTED] === true;
41
60
  }
42
61
  /**
43
62
  * Rejects once the deadline passes.
@@ -64,7 +83,10 @@ function withDeadline(work, deadline) {
64
83
  resolve(value);
65
84
  }, (error) => {
66
85
  clearTimeout(timer);
67
- reject(error);
86
+ // Forwarded verbatim: `work` is whatever a caller-supplied HttpClient
87
+ // rejects with, which the contract never requires to be an Error.
88
+ const forwarded = error;
89
+ reject(forwarded);
68
90
  });
69
91
  });
70
92
  }
@@ -135,7 +157,7 @@ function signalledFailure(provider, failed, response, result) {
135
157
  ? provider.errors[error]
136
158
  : undefined;
137
159
  if (mapped) {
138
- return { handled: true, error: mapped };
160
+ return new FetchRatesError(true, mapped);
139
161
  }
140
162
  // A code the provider does not enumerate is not a verdict on the chain.
141
163
  // Treating it as fatal meant a 500 from any provider whose errorHandler reads
@@ -151,12 +173,9 @@ function signalledFailure(provider, failed, response, result) {
151
173
  // Keep the provider's own number when it is not just the status echoed
152
174
  // back: an apilayer 101 arriving on an HTTP 401 is the useful half, and
153
175
  // 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
- };
176
+ return new FetchRatesError(true, httpFailureError(response.status, error === response.status ? undefined : error));
158
177
  }
159
- return { handled: true, error };
178
+ return new FetchRatesError(true, error);
160
179
  }
161
180
  /**
162
181
  * The fetchRates function, used for fetching currency conversion rates.
@@ -168,7 +187,7 @@ function signalledFailure(provider, failed, response, result) {
168
187
  * @param {Provider} provider - provider from which the quotes will be fetched
169
188
  * @param {Query} query - the query
170
189
  * @param {RetryOptions} [options] - retry tuning
171
- * @returns {Promise<any>} - a result promise
190
+ * @returns {Promise<unknown>} - a result promise
172
191
  */
173
192
  function fetchRates(client_1, provider_1, query_1) {
174
193
  return __awaiter(this, arguments, void 0, function* (client, provider, query, options = {}) {
@@ -243,7 +262,7 @@ function normalize(value, fallback) {
243
262
  }
244
263
  /** The rejection shape for a failure the caller should treat as this provider's, and fall back from. */
245
264
  function providerFailure(error) {
246
- return { handled: true, error };
265
+ return new FetchRatesError(true, error);
247
266
  }
248
267
  /** The response of an HTTP failure, or undefined for anything else thrown. */
249
268
  function responseOf(err) {
@@ -258,12 +277,20 @@ function responseOf(err) {
258
277
  * `HttpResponse` carries no headers today, so this only pays off for a custom
259
278
  * client that attaches them — but it costs nothing to look.
260
279
  */
280
+ /** True for a non-null object, so a property read off it is not a member access on `unknown`. */
281
+ function isObject(value) {
282
+ return typeof value === "object" && value !== null;
283
+ }
284
+ /** Narrows to a fetch-style Headers instance, the one shape here that reads via a method. */
285
+ function hasGetMethod(value) {
286
+ return typeof value.get === "function";
287
+ }
261
288
  function header(response, name) {
262
289
  const headers = response.headers;
263
- if (!headers) {
290
+ if (!isObject(headers)) {
264
291
  return undefined;
265
292
  }
266
- if (typeof headers.get === "function") {
293
+ if (hasGetMethod(headers)) {
267
294
  const value = headers.get(name);
268
295
  return typeof value === "string" ? value : undefined;
269
296
  }
@@ -323,33 +350,46 @@ function httpFailureError(status, providerCode) {
323
350
  * @returns {string} - a short, safe description
324
351
  */
325
352
  function describe(err) {
326
- var _a;
327
353
  if (typeof err === "string") {
328
354
  return err.trim() || "unknown error";
329
355
  }
330
356
  if (err && typeof err === "object") {
331
- const { code, message } = err;
332
- if (typeof code === "string" && code.trim()) {
333
- return code.trim();
334
- }
335
- if (typeof code === "number") {
336
- return String(code);
337
- }
338
- const name = (_a = err.constructor) === null || _a === void 0 ? void 0 : _a.name;
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)`;
357
+ return describeObject(err);
345
358
  }
346
359
  if (err === null || err === undefined) {
347
360
  return "unknown error";
348
361
  }
349
- // Whatever is left is a primitive — number, bigint, boolean, symbol — and
350
- // every one of those renders. Objects never reach here, which matters:
351
- // String() throws on a null prototype, and their fields are not ours to show.
352
- return String(err);
362
+ // Each of these renders through String() on its own. Objects never reach
363
+ // here, which matters: String() throws on a null prototype and their fields
364
+ // are not ours to show. Named one by one rather than narrowed by
365
+ // elimination, because `unknown` stays `unknown` in the false branch of a
366
+ // typeof check, so nothing else convinces the compiler this is exhaustive.
367
+ if (typeof err === "number" ||
368
+ typeof err === "bigint" ||
369
+ typeof err === "boolean" ||
370
+ typeof err === "symbol" ||
371
+ typeof err === "function") {
372
+ return String(err);
373
+ }
374
+ return "unknown error";
375
+ }
376
+ /** The object half of `describe`, split out to keep either half readable. */
377
+ function describeObject(err) {
378
+ const { code, message } = err;
379
+ if (typeof code === "string" && code.trim()) {
380
+ return code.trim();
381
+ }
382
+ if (typeof code === "number") {
383
+ return String(code);
384
+ }
385
+ const ctor = err.constructor;
386
+ const name = typeof ctor === "function" ? ctor.name : undefined;
387
+ if (typeof name !== "string" || !name || name === "Object") {
388
+ return "unknown error";
389
+ }
390
+ return typeof message === "string" && message.trim()
391
+ ? `${name} (message withheld)`
392
+ : `${name} (no message)`;
353
393
  }
354
394
  /**
355
395
  * Reduces a request error to a message and code.
@@ -392,6 +432,6 @@ function formatUrl(provider, query) {
392
432
  return (provider.endpoint.base + provider.endpoint.single)
393
433
  .replace(/%FROM%/g, put(query.FROM))
394
434
  .replace(/%TO%/g, put(query.TO))
395
- .replace(/%KEY%/g, put(provider.key || ""));
435
+ .replace(/%KEY%/g, put(String(provider.key || "")));
396
436
  }
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3JlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQXlEQSxvQ0FFQztBQWdNRCxnQ0E4RUM7QUF2VUQsMENBQXNDO0FBd0N0Qyw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztBQUVwQjs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxPQUFxQjtJQUNoRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsZUFBZTtJQUN0QixNQUFNLEtBQUssR0FBUSxJQUFJLEtBQUssQ0FDMUIsaUVBQWlFLENBQ2xFLENBQUM7SUFDRixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFjO0lBQ3ZDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ2xHLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUksSUFBZ0IsRUFBRSxRQUFnQjtJ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
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL3JlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF3RUEsb0NBRUM7QUFtTUQsZ0NBOEVDO0FBelZELDBDQUFzQztBQWdDdEM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsS0FBSztJQU14QyxZQUFZLE9BQWdCLEVBQUUsS0FBYztRQUMxQyxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFaRCwwQ0FZQztBQUVELDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUseUVBQXlFO0FBQ3pFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQztBQUM3QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBRXBCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE9BQXFCO0lBQ2hELE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCx1RkFBdUY7QUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFLdkUsU0FBUyxlQUFl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
@@ -9,7 +9,7 @@ import { UserDefinedProvider, Provider } from "./providers";
9
9
  * checks the actual shape each field is dereferenced with, and returns the
10
10
  * reason so the caller can throw one message that names it.
11
11
  */
12
- export declare function providerShapeIssue(provider: Provider | any): string | null;
12
+ export declare function providerShapeIssue(provider: unknown): string | null;
13
13
  /**
14
14
  * Same as `providerShapeIssue`, for the `{ name, provider }` pair `add` and
15
15
  * `addMultiple` take.
@@ -19,7 +19,7 @@ export declare function providerShapeIssue(provider: Provider | any): string | n
19
19
  * property key for the built-in-name lookup, with no `toString` to fall back
20
20
  * on.
21
21
  */
22
- export declare function userDefinedProviderIssue(userDefinedProvider: UserDefinedProvider | any): string | null;
22
+ export declare function userDefinedProviderIssue(userDefinedProvider: unknown): string | null;
23
23
  /**
24
24
  * Utility for typechecking UserDefinedProvider objects
25
25
  *
@@ -27,7 +27,7 @@ export declare function userDefinedProviderIssue(userDefinedProvider: UserDefine
27
27
  * @param {(UserDefinedProvider | any)} userDefinedProvider - The UserDefinedProvider object to be checked
28
28
  * @returns {u is UserDefinedProvider}
29
29
  */
30
- export declare function checkIfUserDefinedProvider(userDefinedProvider: UserDefinedProvider | any): userDefinedProvider is UserDefinedProvider;
30
+ export declare function checkIfUserDefinedProvider(userDefinedProvider: unknown): userDefinedProvider is UserDefinedProvider;
31
31
  /**
32
32
  * Utility for typechecking Provider objects
33
33
  *
@@ -35,7 +35,7 @@ export declare function checkIfUserDefinedProvider(userDefinedProvider: UserDefi
35
35
  * @param {(Provider | any)} provider - The Provider object to be checked
36
36
  * @returns {p is Provider}
37
37
  */
38
- export declare function checkIfProvider(provider: Provider | any): provider is Provider;
38
+ export declare function checkIfProvider(provider: unknown): provider is Provider;
39
39
  /**
40
40
  * Wraps a promise and handles both the resolved value and any potential errors.
41
41
  * @param promise - The promise to wrap.
@@ -98,4 +98,4 @@ function _to(promise) {
98
98
  function sleep(ms) {
99
99
  return new Promise(resolve => setTimeout(resolve, ms));
100
100
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFydHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxnREF5QkM7QUFXRCw0REFXQztBQVNELGdFQUlDO0FBU0QsMENBSUM7QUFRRCxrQkFNQztBQVNELHNCQUVDO0FBNUdEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQXdCO0lBQ3pELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxPQUFPLDRCQUE0QixDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxRQUFvQixDQUFDO0lBQy9CLElBQ0UsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUNuQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFDckMsQ0FBQztRQUNELE9BQU8sOERBQThELENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RELE9BQU8sNEJBQTRCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELDRFQUE0RTtJQUM1RSxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsbUJBQThDO0lBRTlDLElBQUksbUJBQW1CLEtBQUssSUFBSSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUUsT0FBTyxrQ0FBa0MsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsbUJBQTBDLENBQUM7SUFDckQsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxtQkFBOEM7SUFFOUMsT0FBTyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixRQUF3QjtJQUV4QixPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBR0Q7Ozs7R0FJRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsT0FBbUI7SUFFbkIsT0FBTyxPQUFPO1NBQ1gsSUFBSSxDQUFDLENBQUMsSUFBTyxFQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQyxLQUFLLENBQUMsQ0FBQyxHQUFNLEVBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUdEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEVBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFydHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxnREF5QkM7QUFXRCw0REFXQztBQVNELGdFQUlDO0FBU0QsMENBSUM7QUFRRCxrQkFNQztBQVNELHNCQUVDO0FBNUdEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQWlCO0lBQ2xELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxPQUFPLDRCQUE0QixDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxRQUFvQixDQUFDO0lBQy9CLElBQ0UsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUNuQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFDckMsQ0FBQztRQUNELE9BQU8sOERBQThELENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RELE9BQU8sNEJBQTRCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELDRFQUE0RTtJQUM1RSxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsbUJBQTRCO0lBRTVCLElBQUksbUJBQW1CLEtBQUssSUFBSSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUUsT0FBTyxrQ0FBa0MsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsbUJBQTBDLENBQUM7SUFDckQsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxtQkFBNEI7SUFFNUIsT0FBTyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixRQUFpQjtJQUVqQixPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBR0Q7Ozs7R0FJRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsT0FBbUI7SUFFbkIsT0FBTyxPQUFPO1NBQ1gsSUFBSSxDQUFDLENBQUMsSUFBTyxFQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQyxLQUFLLENBQUMsQ0FBQyxHQUFNLEVBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUdEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEVBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-currencies",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "A tool for easy conversion of currencies.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,9 +20,10 @@
20
20
  },
21
21
  "scripts": {
22
22
  "build": "tsc",
23
+ "lint": "oxlint src test scripts && eslint src",
23
24
  "prepare": "npm run build",
24
25
  "docs": "typedoc && cp ./_config.yml docs/_config.yml",
25
- "prepublishOnly": "npm run build && npm test && npm run api:check",
26
+ "prepublishOnly": "npm run build && npm run lint && npm test && npm run api:check",
26
27
  "test": "jest --selectProjects offline",
27
28
  "test:live": "jest --selectProjects live --passWithNoTests --runInBand",
28
29
  "test:all": "jest --passWithNoTests",
@@ -59,10 +60,13 @@
59
60
  "@types/jest": "^29.5.12",
60
61
  "@types/node": "^20.14.2",
61
62
  "dotenv": "^16.4.5",
63
+ "eslint": "^10.9.1",
62
64
  "jest": "^29.7.0",
65
+ "oxlint": "^1.80.0",
63
66
  "publint": "^0.3.24",
64
67
  "ts-jest": "^29.1.4",
65
68
  "typedoc": "^0.28.20",
66
- "typescript": "^5.4.5"
69
+ "typescript": "^5.4.5",
70
+ "typescript-eslint": "^8.68.0"
67
71
  }
68
72
  }