@lightsparkdev/core 1.0.5 → 1.0.7
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/CHANGELOG.md +14 -0
- package/dist/chunk-UU6SHVGX.js +909 -0
- package/dist/index.cjs +604 -25
- package/dist/index.d.ts +1 -1
- package/dist/index.js +37 -1
- package/dist/utils/index.cjs +604 -25
- package/dist/utils/index.d.ts +150 -21
- package/dist/utils/index.js +37 -1
- package/package.json +3 -2
- package/src/utils/currency.ts +400 -50
- package/src/utils/index.ts +3 -0
- package/src/utils/locale.ts +3 -0
- package/src/utils/localeToCurrencyCodes.ts +272 -0
- package/src/utils/numbers.ts +32 -0
- package/src/utils/tests/currency.test.ts +256 -0
- package/dist/chunk-5P2KZ44N.js +0 -348
package/dist/utils/index.cjs
CHANGED
|
@@ -30,21 +30,39 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/utils/index.ts
|
|
31
31
|
var utils_exports = {};
|
|
32
32
|
__export(utils_exports, {
|
|
33
|
+
CurrencyUnit: () => CurrencyUnit,
|
|
34
|
+
abbrCurrencyUnit: () => abbrCurrencyUnit,
|
|
33
35
|
b64decode: () => b64decode,
|
|
34
36
|
b64encode: () => b64encode,
|
|
35
37
|
bytesToHex: () => bytesToHex,
|
|
38
|
+
clamp: () => clamp,
|
|
36
39
|
convertCurrencyAmount: () => convertCurrencyAmount,
|
|
40
|
+
convertCurrencyAmountValue: () => convertCurrencyAmountValue,
|
|
41
|
+
countryCodesToCurrencyCodes: () => countryCodesToCurrencyCodes,
|
|
37
42
|
createSha256Hash: () => createSha256Hash,
|
|
43
|
+
defaultCurrencyCode: () => defaultCurrencyCode,
|
|
44
|
+
formatCurrencyStr: () => formatCurrencyStr,
|
|
45
|
+
getCurrentLocale: () => getCurrentLocale,
|
|
38
46
|
getErrorMsg: () => getErrorMsg,
|
|
39
47
|
hexToBytes: () => hexToBytes,
|
|
40
48
|
isBrowser: () => isBrowser,
|
|
49
|
+
isCurrencyAmount: () => isCurrencyAmount,
|
|
50
|
+
isCurrencyAmountObj: () => isCurrencyAmountObj,
|
|
51
|
+
isCurrencyMap: () => isCurrencyMap,
|
|
41
52
|
isError: () => isError,
|
|
42
53
|
isErrorMsg: () => isErrorMsg,
|
|
43
54
|
isErrorWithMessage: () => isErrorWithMessage,
|
|
44
55
|
isNode: () => isNode,
|
|
56
|
+
isNumber: () => isNumber,
|
|
45
57
|
isTest: () => isTest,
|
|
46
58
|
isType: () => isType,
|
|
59
|
+
linearInterpolate: () => linearInterpolate,
|
|
60
|
+
localeToCurrencyCode: () => localeToCurrencyCode,
|
|
61
|
+
localeToCurrencySymbol: () => localeToCurrencySymbol,
|
|
62
|
+
mapCurrencyAmount: () => mapCurrencyAmount,
|
|
47
63
|
pollUntil: () => pollUntil,
|
|
64
|
+
round: () => round,
|
|
65
|
+
separateCurrencyStrParts: () => separateCurrencyStrParts,
|
|
48
66
|
sleep: () => sleep,
|
|
49
67
|
urlsafe_b64decode: () => urlsafe_b64decode
|
|
50
68
|
});
|
|
@@ -147,7 +165,314 @@ var LightsparkException = class extends Error {
|
|
|
147
165
|
};
|
|
148
166
|
var LightsparkException_default = LightsparkException;
|
|
149
167
|
|
|
168
|
+
// src/utils/locale.ts
|
|
169
|
+
function getCurrentLocale() {
|
|
170
|
+
return Intl.NumberFormat().resolvedOptions().locale;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// src/utils/localeToCurrencyCodes.ts
|
|
174
|
+
var countryCodesToCurrencyCodes = {
|
|
175
|
+
AD: "EUR",
|
|
176
|
+
// AE: "AED",
|
|
177
|
+
// AF: "AFN",
|
|
178
|
+
// AG: "XCD",
|
|
179
|
+
// AI: "XCD",
|
|
180
|
+
// AL: "ALL",
|
|
181
|
+
// AM: "AMD",
|
|
182
|
+
// AO: "AOA",
|
|
183
|
+
AR: "ARS",
|
|
184
|
+
AS: "USD",
|
|
185
|
+
AT: "EUR",
|
|
186
|
+
AU: "AUD",
|
|
187
|
+
// AW: "AWG",
|
|
188
|
+
AX: "EUR",
|
|
189
|
+
// AZ: "AZN",
|
|
190
|
+
// BA: "BAM",
|
|
191
|
+
// BB: "BBD",
|
|
192
|
+
// BD: "BDT",
|
|
193
|
+
BE: "EUR",
|
|
194
|
+
// BF: "XOF",
|
|
195
|
+
// BG: "BGN",
|
|
196
|
+
// BH: "BHD",
|
|
197
|
+
// BI: "BIF",
|
|
198
|
+
// BJ: "XOF",
|
|
199
|
+
BL: "EUR",
|
|
200
|
+
// BM: "BMD",
|
|
201
|
+
// BN: "BND",
|
|
202
|
+
// BO: "BOB",
|
|
203
|
+
BQ: "USD",
|
|
204
|
+
BR: "BRL",
|
|
205
|
+
// BS: "BSD",
|
|
206
|
+
// BT: "BTN",
|
|
207
|
+
// BV: "NOK",
|
|
208
|
+
// BW: "BWP",
|
|
209
|
+
// BY: "BYN",
|
|
210
|
+
// BZ: "BZD",
|
|
211
|
+
CA: "CAD",
|
|
212
|
+
// CC: "AUD",
|
|
213
|
+
// CD: "CDF",
|
|
214
|
+
// CF: "XAF",
|
|
215
|
+
// CG: "XAF",
|
|
216
|
+
// CH: "CHF",
|
|
217
|
+
// CI: "XOF",
|
|
218
|
+
// CK: "NZD",
|
|
219
|
+
// CL: "CLP",
|
|
220
|
+
// CM: "XAF",
|
|
221
|
+
// CN: "CNY",
|
|
222
|
+
CO: "COP",
|
|
223
|
+
// CR: "CRC",
|
|
224
|
+
// CU: "CUP",
|
|
225
|
+
// CV: "CVE",
|
|
226
|
+
// CW: "ANG",
|
|
227
|
+
// CX: "AUD",
|
|
228
|
+
CY: "EUR",
|
|
229
|
+
// CZ: "CZK",
|
|
230
|
+
DE: "EUR",
|
|
231
|
+
// DJ: "DJF",
|
|
232
|
+
// DK: "DKK",
|
|
233
|
+
// DM: "XCD",
|
|
234
|
+
// DO: "DOP",
|
|
235
|
+
// DZ: "DZD",
|
|
236
|
+
EC: "USD",
|
|
237
|
+
EE: "EUR",
|
|
238
|
+
// EG: "EGP",
|
|
239
|
+
// EH: "MAD",
|
|
240
|
+
// ER: "ERN",
|
|
241
|
+
ES: "EUR",
|
|
242
|
+
// ET: "ETB",
|
|
243
|
+
FI: "EUR",
|
|
244
|
+
// FJ: "FJD",
|
|
245
|
+
// FK: "FKP",
|
|
246
|
+
FM: "USD",
|
|
247
|
+
// FO: "DKK",
|
|
248
|
+
FR: "EUR",
|
|
249
|
+
// GA: "XAF",
|
|
250
|
+
GB: "GBP",
|
|
251
|
+
// GD: "XCD",
|
|
252
|
+
// GE: "GEL",
|
|
253
|
+
GF: "EUR",
|
|
254
|
+
GG: "GBP",
|
|
255
|
+
// GH: "GHS",
|
|
256
|
+
// GI: "GIP",
|
|
257
|
+
// GL: "DKK",
|
|
258
|
+
// GM: "GMD",
|
|
259
|
+
// GN: "GNF",
|
|
260
|
+
GP: "EUR",
|
|
261
|
+
// GQ: "XAF",
|
|
262
|
+
GR: "EUR",
|
|
263
|
+
GS: "GBP",
|
|
264
|
+
// GT: "GTQ",
|
|
265
|
+
GU: "USD",
|
|
266
|
+
// GW: "XOF",
|
|
267
|
+
// GY: "GYD",
|
|
268
|
+
// HK: "HKD",
|
|
269
|
+
// HM: "AUD",
|
|
270
|
+
// HN: "HNL",
|
|
271
|
+
// HR: "HRK",
|
|
272
|
+
// HT: "HTG",
|
|
273
|
+
// HU: "HUF",
|
|
274
|
+
// ID: "IDR",
|
|
275
|
+
IE: "EUR",
|
|
276
|
+
// IL: "ILS",
|
|
277
|
+
IM: "GBP",
|
|
278
|
+
IN: "INR",
|
|
279
|
+
IO: "USD",
|
|
280
|
+
// IQ: "IQD",
|
|
281
|
+
// IR: "IRR",
|
|
282
|
+
// IS: "ISK",
|
|
283
|
+
IT: "EUR",
|
|
284
|
+
JE: "GBP",
|
|
285
|
+
// JM: "JMD",
|
|
286
|
+
// JO: "JOD",
|
|
287
|
+
// JP: "JPY",
|
|
288
|
+
// KE: "KES",
|
|
289
|
+
// KG: "KGS",
|
|
290
|
+
// KH: "KHR",
|
|
291
|
+
// KI: "AUD",
|
|
292
|
+
// KM: "KMF",
|
|
293
|
+
// KN: "XCD",
|
|
294
|
+
// KP: "KPW",
|
|
295
|
+
// KR: "KRW",
|
|
296
|
+
// KW: "KWD",
|
|
297
|
+
// KY: "KYD",
|
|
298
|
+
// KZ: "KZT",
|
|
299
|
+
// LA: "LAK",
|
|
300
|
+
// LB: "LBP",
|
|
301
|
+
// LC: "XCD",
|
|
302
|
+
// LI: "CHF",
|
|
303
|
+
// LK: "LKR",
|
|
304
|
+
// LR: "LRD",
|
|
305
|
+
// LS: "LSL",
|
|
306
|
+
LT: "EUR",
|
|
307
|
+
LU: "EUR",
|
|
308
|
+
LV: "EUR",
|
|
309
|
+
// LY: "LYD",
|
|
310
|
+
// MA: "MAD",
|
|
311
|
+
MC: "EUR",
|
|
312
|
+
// MD: "MDL",
|
|
313
|
+
ME: "EUR",
|
|
314
|
+
MF: "EUR",
|
|
315
|
+
// MG: "MGA",
|
|
316
|
+
MH: "USD",
|
|
317
|
+
// MK: "MKD",
|
|
318
|
+
// ML: "XOF",
|
|
319
|
+
// MM: "MMK",
|
|
320
|
+
// MN: "MNT",
|
|
321
|
+
// MO: "MOP",
|
|
322
|
+
MP: "USD",
|
|
323
|
+
MQ: "EUR",
|
|
324
|
+
// MR: "MRO",
|
|
325
|
+
// MS: "XCD",
|
|
326
|
+
MT: "EUR",
|
|
327
|
+
// MU: "MUR",
|
|
328
|
+
// MV: "MVR",
|
|
329
|
+
// MW: "MWK",
|
|
330
|
+
MX: "MXN",
|
|
331
|
+
// MY: "MYR",
|
|
332
|
+
// MZ: "MZN",
|
|
333
|
+
// NA: "NAD",
|
|
334
|
+
// NC: "XPF",
|
|
335
|
+
// NE: "XOF",
|
|
336
|
+
NF: "AUD",
|
|
337
|
+
// NG: "NGN",
|
|
338
|
+
// NI: "NIO",
|
|
339
|
+
NL: "EUR",
|
|
340
|
+
// NO: "NOK",
|
|
341
|
+
// NP: "NPR",
|
|
342
|
+
NR: "AUD",
|
|
343
|
+
// NU: "NZD",
|
|
344
|
+
// NZ: "NZD",
|
|
345
|
+
// OM: "OMR",
|
|
346
|
+
// PA: "PAB",
|
|
347
|
+
// PE: "PEN",
|
|
348
|
+
// PF: "XPF",
|
|
349
|
+
// PG: "PGK",
|
|
350
|
+
// PH: "PHP",
|
|
351
|
+
// PK: "PKR",
|
|
352
|
+
// PL: "PLN",
|
|
353
|
+
PM: "EUR",
|
|
354
|
+
// PN: "NZD",
|
|
355
|
+
PR: "USD",
|
|
356
|
+
// PS: "ILS",
|
|
357
|
+
PT: "EUR",
|
|
358
|
+
PW: "USD",
|
|
359
|
+
// PY: "PYG",
|
|
360
|
+
// QA: "QAR",
|
|
361
|
+
RE: "EUR",
|
|
362
|
+
// RO: "RON",
|
|
363
|
+
// RS: "RSD",
|
|
364
|
+
// RU: "RUB",
|
|
365
|
+
// RW: "RWF",
|
|
366
|
+
// SA: "SAR",
|
|
367
|
+
// SB: "SBD",
|
|
368
|
+
// SC: "SCR",
|
|
369
|
+
// SD: "SDG",
|
|
370
|
+
// SE: "SEK",
|
|
371
|
+
// SG: "SGD",
|
|
372
|
+
// SH: "SHP",
|
|
373
|
+
SI: "EUR",
|
|
374
|
+
// SJ: "NOK",
|
|
375
|
+
SK: "EUR",
|
|
376
|
+
// SL: "SLL",
|
|
377
|
+
SM: "EUR",
|
|
378
|
+
// SN: "XOF",
|
|
379
|
+
// SO: "SOS",
|
|
380
|
+
// SR: "SRD",
|
|
381
|
+
// ST: "STD",
|
|
382
|
+
// SV: "SVC",
|
|
383
|
+
// SX: "ANG",
|
|
384
|
+
// SY: "SYP",
|
|
385
|
+
// SZ: "SZL",
|
|
386
|
+
TC: "USD",
|
|
387
|
+
// TD: "XAF",
|
|
388
|
+
TF: "EUR",
|
|
389
|
+
// TG: "XOF",
|
|
390
|
+
// TH: "THB",
|
|
391
|
+
// TJ: "TJS",
|
|
392
|
+
// TK: "NZD",
|
|
393
|
+
TL: "USD",
|
|
394
|
+
// TM: "TMT",
|
|
395
|
+
// TN: "TND",
|
|
396
|
+
// TO: "TOP",
|
|
397
|
+
// TR: "TRY",
|
|
398
|
+
// TT: "TTD",
|
|
399
|
+
TV: "AUD",
|
|
400
|
+
// TW: "TWD",
|
|
401
|
+
// TZ: "TZS",
|
|
402
|
+
// UA: "UAH",
|
|
403
|
+
// UG: "UGX",
|
|
404
|
+
UM: "USD",
|
|
405
|
+
US: "USD",
|
|
406
|
+
// UY: "UYU",
|
|
407
|
+
// UZ: "UZS",
|
|
408
|
+
VA: "EUR",
|
|
409
|
+
// VC: "XCD",
|
|
410
|
+
// VE: "VEF",
|
|
411
|
+
VG: "USD",
|
|
412
|
+
VI: "USD",
|
|
413
|
+
// VN: "VND",
|
|
414
|
+
// VU: "VUV",
|
|
415
|
+
// WF: "XPF",
|
|
416
|
+
// WS: "WST",
|
|
417
|
+
// YE: "YER",
|
|
418
|
+
YT: "EUR"
|
|
419
|
+
// ZA: "ZAR",
|
|
420
|
+
// ZM: "ZMW",
|
|
421
|
+
// ZW: "ZWL",
|
|
422
|
+
};
|
|
423
|
+
function getCountryCode(localeString) {
|
|
424
|
+
let components = localeString.split("_");
|
|
425
|
+
if (components.length === 2) {
|
|
426
|
+
return components.pop();
|
|
427
|
+
}
|
|
428
|
+
components = localeString.split("-");
|
|
429
|
+
if (components.length === 2) {
|
|
430
|
+
return components.pop();
|
|
431
|
+
}
|
|
432
|
+
return localeString;
|
|
433
|
+
}
|
|
434
|
+
function localeToCurrencyCode(locale) {
|
|
435
|
+
const countryCode = getCountryCode(locale);
|
|
436
|
+
return countryCodesToCurrencyCodes[countryCode];
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// src/utils/numbers.ts
|
|
440
|
+
function clamp(val, min, max) {
|
|
441
|
+
return val > max ? max : val < min ? min : val;
|
|
442
|
+
}
|
|
443
|
+
function linearInterpolate(value, fromRangeStart, fromRangeEnd, toRangeStart, toRangeEnd) {
|
|
444
|
+
const fromRangeMax = fromRangeEnd - fromRangeStart;
|
|
445
|
+
const fromRangeVal = value - fromRangeStart;
|
|
446
|
+
const toRangeMax = toRangeEnd - toRangeStart;
|
|
447
|
+
const val = fromRangeVal / fromRangeMax * toRangeMax + toRangeStart;
|
|
448
|
+
return clamp(
|
|
449
|
+
val,
|
|
450
|
+
Math.min(toRangeStart, toRangeEnd),
|
|
451
|
+
Math.max(toRangeStart, toRangeEnd)
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
function round(num, decimalPlaces = 0) {
|
|
455
|
+
const p = Math.pow(10, decimalPlaces);
|
|
456
|
+
const n = num * p * (1 + Number.EPSILON);
|
|
457
|
+
return Math.round(n) / p;
|
|
458
|
+
}
|
|
459
|
+
function isNumber(value) {
|
|
460
|
+
return typeof value === "number";
|
|
461
|
+
}
|
|
462
|
+
|
|
150
463
|
// src/utils/currency.ts
|
|
464
|
+
var defaultCurrencyCode = "USD";
|
|
465
|
+
var CurrencyUnit = /* @__PURE__ */ ((CurrencyUnit2) => {
|
|
466
|
+
CurrencyUnit2["FUTURE_VALUE"] = "FUTURE_VALUE";
|
|
467
|
+
CurrencyUnit2["BITCOIN"] = "BITCOIN";
|
|
468
|
+
CurrencyUnit2["SATOSHI"] = "SATOSHI";
|
|
469
|
+
CurrencyUnit2["MILLISATOSHI"] = "MILLISATOSHI";
|
|
470
|
+
CurrencyUnit2["USD"] = "USD";
|
|
471
|
+
CurrencyUnit2["NANOBITCOIN"] = "NANOBITCOIN";
|
|
472
|
+
CurrencyUnit2["MICROBITCOIN"] = "MICROBITCOIN";
|
|
473
|
+
CurrencyUnit2["MILLIBITCOIN"] = "MILLIBITCOIN";
|
|
474
|
+
return CurrencyUnit2;
|
|
475
|
+
})(CurrencyUnit || {});
|
|
151
476
|
var CONVERSION_MAP = {
|
|
152
477
|
["BITCOIN" /* BITCOIN */]: {
|
|
153
478
|
["BITCOIN" /* BITCOIN */]: (v) => v,
|
|
@@ -155,67 +480,303 @@ var CONVERSION_MAP = {
|
|
|
155
480
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v * 1e3,
|
|
156
481
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e11,
|
|
157
482
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e9,
|
|
158
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 1e8
|
|
483
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 1e8,
|
|
484
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
485
|
+
/* Round without decimals since we're returning cents: */
|
|
486
|
+
round(v * centsPerBtc, 2)
|
|
487
|
+
)
|
|
159
488
|
},
|
|
160
489
|
["MICROBITCOIN" /* MICROBITCOIN */]: {
|
|
161
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
490
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e6,
|
|
162
491
|
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v,
|
|
163
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
492
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e3,
|
|
164
493
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e5,
|
|
165
494
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e3,
|
|
166
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 100
|
|
495
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 100,
|
|
496
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
497
|
+
/* Round without decimals since we're returning cents: */
|
|
498
|
+
round(v / 1e6 * centsPerBtc)
|
|
499
|
+
)
|
|
167
500
|
},
|
|
168
501
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: {
|
|
169
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
502
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e3,
|
|
170
503
|
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v * 1e3,
|
|
171
504
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v,
|
|
172
505
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e8,
|
|
173
506
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e6,
|
|
174
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 1e5
|
|
507
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 1e5,
|
|
508
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
509
|
+
/* Round without decimals since we're returning cents: */
|
|
510
|
+
round(v / 1e3 * centsPerBtc)
|
|
511
|
+
)
|
|
175
512
|
},
|
|
176
513
|
["MILLISATOSHI" /* MILLISATOSHI */]: {
|
|
177
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
178
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
179
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
514
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e11,
|
|
515
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 1e5,
|
|
516
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e8,
|
|
180
517
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v,
|
|
181
|
-
["NANOBITCOIN" /* NANOBITCOIN */]: (v) =>
|
|
182
|
-
["SATOSHI" /* SATOSHI */]: (v) =>
|
|
518
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v / 100,
|
|
519
|
+
["SATOSHI" /* SATOSHI */]: (v) => v / 1e3,
|
|
520
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
521
|
+
/* Round without decimals since we're returning cents: */
|
|
522
|
+
round(v / 1e11 * centsPerBtc)
|
|
523
|
+
)
|
|
183
524
|
},
|
|
184
525
|
["NANOBITCOIN" /* NANOBITCOIN */]: {
|
|
185
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
186
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
187
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
526
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e9,
|
|
527
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 1e3,
|
|
528
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e6,
|
|
188
529
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 100,
|
|
189
530
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v,
|
|
190
|
-
["SATOSHI" /* SATOSHI */]: (v) =>
|
|
531
|
+
["SATOSHI" /* SATOSHI */]: (v) => v / 10,
|
|
532
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
533
|
+
/* Round without decimals since we're returning cents: */
|
|
534
|
+
round(v / 1e9 * centsPerBtc)
|
|
535
|
+
)
|
|
191
536
|
},
|
|
192
537
|
["SATOSHI" /* SATOSHI */]: {
|
|
193
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
194
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
195
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
538
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e8,
|
|
539
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 100,
|
|
540
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e5,
|
|
196
541
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e3,
|
|
197
542
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 10,
|
|
198
|
-
["SATOSHI" /* SATOSHI */]: (v) => v
|
|
543
|
+
["SATOSHI" /* SATOSHI */]: (v) => v,
|
|
544
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
545
|
+
/* Round without decimals since we're returning cents: */
|
|
546
|
+
round(v / 1e8 * centsPerBtc)
|
|
547
|
+
)
|
|
548
|
+
},
|
|
549
|
+
["USD" /* USD */]: {
|
|
550
|
+
["BITCOIN" /* BITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc,
|
|
551
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e6,
|
|
552
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e3,
|
|
553
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e11,
|
|
554
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e9,
|
|
555
|
+
["SATOSHI" /* SATOSHI */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e8,
|
|
556
|
+
["USD" /* USD */]: (v) => v
|
|
199
557
|
}
|
|
200
558
|
};
|
|
201
|
-
|
|
202
|
-
if (
|
|
559
|
+
function convertCurrencyAmountValue(fromUnit, toUnit, amount, centsPerBtc = 1) {
|
|
560
|
+
if (fromUnit === "FUTURE_VALUE" /* FUTURE_VALUE */ || toUnit === "FUTURE_VALUE" /* FUTURE_VALUE */) {
|
|
203
561
|
throw new LightsparkException_default("CurrencyError", `Unsupported CurrencyUnit.`);
|
|
204
562
|
}
|
|
205
|
-
|
|
563
|
+
if (fromUnit === toUnit) {
|
|
564
|
+
return amount;
|
|
565
|
+
}
|
|
566
|
+
const conversionFn = CONVERSION_MAP[fromUnit][toUnit];
|
|
206
567
|
if (!conversionFn) {
|
|
207
568
|
throw new LightsparkException_default(
|
|
208
569
|
"CurrencyError",
|
|
209
|
-
`Cannot convert from ${
|
|
570
|
+
`Cannot convert from ${fromUnit} to ${toUnit}`
|
|
210
571
|
);
|
|
211
572
|
}
|
|
573
|
+
return conversionFn(amount, centsPerBtc);
|
|
574
|
+
}
|
|
575
|
+
var convertCurrencyAmount = (from, toUnit) => {
|
|
576
|
+
const value = convertCurrencyAmountValue(
|
|
577
|
+
from.originalUnit,
|
|
578
|
+
toUnit,
|
|
579
|
+
from.originalValue
|
|
580
|
+
);
|
|
212
581
|
return {
|
|
213
582
|
...from,
|
|
214
583
|
preferredCurrencyUnit: toUnit,
|
|
215
|
-
preferredCurrencyValueApprox:
|
|
216
|
-
preferredCurrencyValueRounded:
|
|
584
|
+
preferredCurrencyValueApprox: value,
|
|
585
|
+
preferredCurrencyValueRounded: value
|
|
217
586
|
};
|
|
218
587
|
};
|
|
588
|
+
function isCurrencyAmountObj(arg) {
|
|
589
|
+
return typeof arg === "object" && arg !== null && "value" in arg && "unit" in arg;
|
|
590
|
+
}
|
|
591
|
+
function isCurrencyAmount(arg) {
|
|
592
|
+
return typeof arg === "object" && arg !== null && "originalValue" in arg && "originalUnit" in arg && "preferredCurrencyUnit" in arg && "preferredCurrencyValueRounded" in arg && "preferredCurrencyValueApprox" in arg;
|
|
593
|
+
}
|
|
594
|
+
function asNumber(value) {
|
|
595
|
+
if (typeof value === "string") {
|
|
596
|
+
return Number(value);
|
|
597
|
+
}
|
|
598
|
+
return value || 0;
|
|
599
|
+
}
|
|
600
|
+
function getCurrencyAmount(currencyAmountArg) {
|
|
601
|
+
let value = 0;
|
|
602
|
+
let unit = void 0;
|
|
603
|
+
if (isCurrencyAmountObj(currencyAmountArg)) {
|
|
604
|
+
value = asNumber(currencyAmountArg.value);
|
|
605
|
+
unit = currencyAmountArg.unit;
|
|
606
|
+
} else if (isCurrencyAmount(currencyAmountArg)) {
|
|
607
|
+
value = currencyAmountArg.originalValue;
|
|
608
|
+
unit = currencyAmountArg.originalUnit;
|
|
609
|
+
}
|
|
610
|
+
return {
|
|
611
|
+
value: asNumber(value),
|
|
612
|
+
unit: unit || "SATOSHI" /* SATOSHI */
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function mapCurrencyAmount(currencyAmountArg, centsPerBtc = 1) {
|
|
616
|
+
const { value, unit } = getCurrencyAmount(currencyAmountArg);
|
|
617
|
+
const convert = convertCurrencyAmountValue;
|
|
618
|
+
const sats = convert(unit, "SATOSHI" /* SATOSHI */, value, centsPerBtc);
|
|
619
|
+
const btc = convert(unit, "BITCOIN" /* BITCOIN */, value, centsPerBtc);
|
|
620
|
+
const msats = convert(unit, "MILLISATOSHI" /* MILLISATOSHI */, value, centsPerBtc);
|
|
621
|
+
const usd = convert(unit, "USD" /* USD */, value, centsPerBtc);
|
|
622
|
+
const mibtc = convert(unit, "MICROBITCOIN" /* MICROBITCOIN */, value, centsPerBtc);
|
|
623
|
+
const mlbtc = convert(unit, "MILLIBITCOIN" /* MILLIBITCOIN */, value, centsPerBtc);
|
|
624
|
+
const nbtc = convert(unit, "NANOBITCOIN" /* NANOBITCOIN */, value, centsPerBtc);
|
|
625
|
+
const mapWithCurrencyUnits = {
|
|
626
|
+
["BITCOIN" /* BITCOIN */]: btc,
|
|
627
|
+
["SATOSHI" /* SATOSHI */]: sats,
|
|
628
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: msats,
|
|
629
|
+
["USD" /* USD */]: usd,
|
|
630
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: mibtc,
|
|
631
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: mlbtc,
|
|
632
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: nbtc,
|
|
633
|
+
["FUTURE_VALUE" /* FUTURE_VALUE */]: NaN,
|
|
634
|
+
formatted: {
|
|
635
|
+
["BITCOIN" /* BITCOIN */]: formatCurrencyStr({
|
|
636
|
+
value: btc,
|
|
637
|
+
unit: "BITCOIN" /* BITCOIN */
|
|
638
|
+
}),
|
|
639
|
+
["SATOSHI" /* SATOSHI */]: formatCurrencyStr({
|
|
640
|
+
value: sats,
|
|
641
|
+
unit: "SATOSHI" /* SATOSHI */
|
|
642
|
+
}),
|
|
643
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: formatCurrencyStr({
|
|
644
|
+
value: msats,
|
|
645
|
+
unit: "MILLISATOSHI" /* MILLISATOSHI */
|
|
646
|
+
}),
|
|
647
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: formatCurrencyStr({
|
|
648
|
+
value: mibtc,
|
|
649
|
+
unit: "MICROBITCOIN" /* MICROBITCOIN */
|
|
650
|
+
}),
|
|
651
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: formatCurrencyStr({
|
|
652
|
+
value: mlbtc,
|
|
653
|
+
unit: "MILLIBITCOIN" /* MILLIBITCOIN */
|
|
654
|
+
}),
|
|
655
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: formatCurrencyStr({
|
|
656
|
+
value: nbtc,
|
|
657
|
+
unit: "NANOBITCOIN" /* NANOBITCOIN */
|
|
658
|
+
}),
|
|
659
|
+
["USD" /* USD */]: formatCurrencyStr({
|
|
660
|
+
value: usd,
|
|
661
|
+
unit: "USD" /* USD */
|
|
662
|
+
}),
|
|
663
|
+
["FUTURE_VALUE" /* FUTURE_VALUE */]: "-"
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
return {
|
|
667
|
+
...mapWithCurrencyUnits,
|
|
668
|
+
btc,
|
|
669
|
+
sats,
|
|
670
|
+
msats,
|
|
671
|
+
isZero: msats === 0,
|
|
672
|
+
isLessThan: (other) => {
|
|
673
|
+
if (isNumber(other)) {
|
|
674
|
+
return msats < other;
|
|
675
|
+
}
|
|
676
|
+
if (isCurrencyAmountObj(other)) {
|
|
677
|
+
other = mapCurrencyAmount(other);
|
|
678
|
+
}
|
|
679
|
+
return msats < other.msats;
|
|
680
|
+
},
|
|
681
|
+
isGreaterThan: (other) => {
|
|
682
|
+
if (isNumber(other)) {
|
|
683
|
+
return msats > other;
|
|
684
|
+
}
|
|
685
|
+
if (isCurrencyAmountObj(other)) {
|
|
686
|
+
other = mapCurrencyAmount(other);
|
|
687
|
+
}
|
|
688
|
+
return msats > other.msats;
|
|
689
|
+
},
|
|
690
|
+
isEqualTo: (other) => {
|
|
691
|
+
if (isNumber(other)) {
|
|
692
|
+
return msats === other;
|
|
693
|
+
}
|
|
694
|
+
if (isCurrencyAmountObj(other)) {
|
|
695
|
+
other = mapCurrencyAmount(other);
|
|
696
|
+
}
|
|
697
|
+
return msats === other.msats;
|
|
698
|
+
},
|
|
699
|
+
formatted: {
|
|
700
|
+
...mapWithCurrencyUnits.formatted,
|
|
701
|
+
btc: mapWithCurrencyUnits.formatted["BITCOIN" /* BITCOIN */],
|
|
702
|
+
sats: mapWithCurrencyUnits.formatted["SATOSHI" /* SATOSHI */],
|
|
703
|
+
msats: mapWithCurrencyUnits.formatted["MILLISATOSHI" /* MILLISATOSHI */]
|
|
704
|
+
},
|
|
705
|
+
type: "CurrencyMap"
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
var isCurrencyMap = (currencyMap) => typeof currencyMap === "object" && currencyMap !== null && "type" in currencyMap && typeof currencyMap.type === "string" && currencyMap.type === "CurrencyMap";
|
|
709
|
+
var abbrCurrencyUnit = (unit) => {
|
|
710
|
+
switch (unit) {
|
|
711
|
+
case "BITCOIN" /* BITCOIN */:
|
|
712
|
+
return "BTC";
|
|
713
|
+
case "SATOSHI" /* SATOSHI */:
|
|
714
|
+
return "SAT";
|
|
715
|
+
case "MILLISATOSHI" /* MILLISATOSHI */:
|
|
716
|
+
return "MSAT";
|
|
717
|
+
case "USD" /* USD */:
|
|
718
|
+
return "USD";
|
|
719
|
+
}
|
|
720
|
+
return "Unsupported CurrencyUnit";
|
|
721
|
+
};
|
|
722
|
+
function formatCurrencyStr(amount, maxFractionDigits, compact, showBtcSymbol = false, options = {}) {
|
|
723
|
+
const currencyAmount = getCurrencyAmount(amount);
|
|
724
|
+
let { value: num } = currencyAmount;
|
|
725
|
+
const { unit } = currencyAmount;
|
|
726
|
+
if (unit === "USD" /* USD */) {
|
|
727
|
+
num = num / 100;
|
|
728
|
+
}
|
|
729
|
+
function getDefaultMaxFractionDigits(defaultDigits) {
|
|
730
|
+
return typeof maxFractionDigits === "undefined" ? compact ? 1 : defaultDigits : maxFractionDigits;
|
|
731
|
+
}
|
|
732
|
+
const symbol = !showBtcSymbol ? "" : unit === "BITCOIN" /* BITCOIN */ ? "\uE903" : unit === "SATOSHI" /* SATOSHI */ ? "\uE902" : "";
|
|
733
|
+
const currentLocale = getCurrentLocale();
|
|
734
|
+
switch (unit) {
|
|
735
|
+
case "BITCOIN" /* BITCOIN */:
|
|
736
|
+
return `${symbol}${num.toLocaleString(currentLocale, {
|
|
737
|
+
notation: compact ? "compact" : void 0,
|
|
738
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(4),
|
|
739
|
+
...options
|
|
740
|
+
})}`;
|
|
741
|
+
case "MILLISATOSHI" /* MILLISATOSHI */:
|
|
742
|
+
case "SATOSHI" /* SATOSHI */:
|
|
743
|
+
case "MICROBITCOIN" /* MICROBITCOIN */:
|
|
744
|
+
case "MILLIBITCOIN" /* MILLIBITCOIN */:
|
|
745
|
+
case "NANOBITCOIN" /* NANOBITCOIN */:
|
|
746
|
+
default:
|
|
747
|
+
return `${symbol}${num.toLocaleString(currentLocale, {
|
|
748
|
+
notation: compact ? "compact" : void 0,
|
|
749
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(0),
|
|
750
|
+
...options
|
|
751
|
+
})}`;
|
|
752
|
+
case "USD" /* USD */:
|
|
753
|
+
return num.toLocaleString(currentLocale, {
|
|
754
|
+
style: "currency",
|
|
755
|
+
currency: defaultCurrencyCode,
|
|
756
|
+
notation: compact ? "compact" : void 0,
|
|
757
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(2),
|
|
758
|
+
...options
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
function separateCurrencyStrParts(currencyStr) {
|
|
763
|
+
const symbol = currencyStr.replace(/[0-9\s\u00a0.,]/g, "");
|
|
764
|
+
const amount = currencyStr.replace(/[^\d.,-]/g, "");
|
|
765
|
+
return { symbol, amount };
|
|
766
|
+
}
|
|
767
|
+
function localeToCurrencySymbol(locale) {
|
|
768
|
+
const currencyCode = localeToCurrencyCode(locale);
|
|
769
|
+
const formatted = new Intl.NumberFormat(locale, {
|
|
770
|
+
style: "currency",
|
|
771
|
+
currency: currencyCode,
|
|
772
|
+
useGrouping: false,
|
|
773
|
+
// to avoid thousands separators
|
|
774
|
+
minimumFractionDigits: 0,
|
|
775
|
+
maximumFractionDigits: 0
|
|
776
|
+
}).format(0);
|
|
777
|
+
const { symbol } = separateCurrencyStrParts(formatted);
|
|
778
|
+
return symbol;
|
|
779
|
+
}
|
|
219
780
|
|
|
220
781
|
// src/utils/errors.ts
|
|
221
782
|
var isError = (e) => {
|
|
@@ -366,21 +927,39 @@ var isType = (typename) => (node) => {
|
|
|
366
927
|
};
|
|
367
928
|
// Annotate the CommonJS export names for ESM import in node:
|
|
368
929
|
0 && (module.exports = {
|
|
930
|
+
CurrencyUnit,
|
|
931
|
+
abbrCurrencyUnit,
|
|
369
932
|
b64decode,
|
|
370
933
|
b64encode,
|
|
371
934
|
bytesToHex,
|
|
935
|
+
clamp,
|
|
372
936
|
convertCurrencyAmount,
|
|
937
|
+
convertCurrencyAmountValue,
|
|
938
|
+
countryCodesToCurrencyCodes,
|
|
373
939
|
createSha256Hash,
|
|
940
|
+
defaultCurrencyCode,
|
|
941
|
+
formatCurrencyStr,
|
|
942
|
+
getCurrentLocale,
|
|
374
943
|
getErrorMsg,
|
|
375
944
|
hexToBytes,
|
|
376
945
|
isBrowser,
|
|
946
|
+
isCurrencyAmount,
|
|
947
|
+
isCurrencyAmountObj,
|
|
948
|
+
isCurrencyMap,
|
|
377
949
|
isError,
|
|
378
950
|
isErrorMsg,
|
|
379
951
|
isErrorWithMessage,
|
|
380
952
|
isNode,
|
|
953
|
+
isNumber,
|
|
381
954
|
isTest,
|
|
382
955
|
isType,
|
|
956
|
+
linearInterpolate,
|
|
957
|
+
localeToCurrencyCode,
|
|
958
|
+
localeToCurrencySymbol,
|
|
959
|
+
mapCurrencyAmount,
|
|
383
960
|
pollUntil,
|
|
961
|
+
round,
|
|
962
|
+
separateCurrencyStrParts,
|
|
384
963
|
sleep,
|
|
385
964
|
urlsafe_b64decode
|
|
386
965
|
});
|