@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/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var src_exports = {};
|
|
32
32
|
__export(src_exports, {
|
|
33
|
+
CurrencyUnit: () => CurrencyUnit,
|
|
33
34
|
DefaultCrypto: () => DefaultCrypto,
|
|
34
35
|
KeyOrAlias: () => KeyOrAlias,
|
|
35
36
|
LightsparkAuthException: () => LightsparkAuthException_default,
|
|
@@ -44,22 +45,39 @@ __export(src_exports, {
|
|
|
44
45
|
SigningKey: () => SigningKey,
|
|
45
46
|
SigningKeyType: () => SigningKeyType,
|
|
46
47
|
StubAuthProvider: () => StubAuthProvider,
|
|
48
|
+
abbrCurrencyUnit: () => abbrCurrencyUnit,
|
|
47
49
|
apiDomainForEnvironment: () => apiDomainForEnvironment,
|
|
48
50
|
b64decode: () => b64decode,
|
|
49
51
|
b64encode: () => b64encode,
|
|
50
52
|
bytesToHex: () => bytesToHex,
|
|
53
|
+
clamp: () => clamp,
|
|
51
54
|
convertCurrencyAmount: () => convertCurrencyAmount,
|
|
55
|
+
convertCurrencyAmountValue: () => convertCurrencyAmountValue,
|
|
56
|
+
countryCodesToCurrencyCodes: () => countryCodesToCurrencyCodes,
|
|
52
57
|
createSha256Hash: () => createSha256Hash,
|
|
58
|
+
defaultCurrencyCode: () => defaultCurrencyCode,
|
|
59
|
+
formatCurrencyStr: () => formatCurrencyStr,
|
|
60
|
+
getCurrentLocale: () => getCurrentLocale,
|
|
53
61
|
getErrorMsg: () => getErrorMsg,
|
|
54
62
|
hexToBytes: () => hexToBytes,
|
|
55
63
|
isBrowser: () => isBrowser,
|
|
64
|
+
isCurrencyAmount: () => isCurrencyAmount,
|
|
65
|
+
isCurrencyAmountObj: () => isCurrencyAmountObj,
|
|
66
|
+
isCurrencyMap: () => isCurrencyMap,
|
|
56
67
|
isError: () => isError,
|
|
57
68
|
isErrorMsg: () => isErrorMsg,
|
|
58
69
|
isErrorWithMessage: () => isErrorWithMessage,
|
|
59
70
|
isNode: () => isNode,
|
|
71
|
+
isNumber: () => isNumber,
|
|
60
72
|
isTest: () => isTest,
|
|
61
73
|
isType: () => isType,
|
|
74
|
+
linearInterpolate: () => linearInterpolate,
|
|
75
|
+
localeToCurrencyCode: () => localeToCurrencyCode,
|
|
76
|
+
localeToCurrencySymbol: () => localeToCurrencySymbol,
|
|
77
|
+
mapCurrencyAmount: () => mapCurrencyAmount,
|
|
62
78
|
pollUntil: () => pollUntil,
|
|
79
|
+
round: () => round,
|
|
80
|
+
separateCurrencyStrParts: () => separateCurrencyStrParts,
|
|
63
81
|
sleep: () => sleep,
|
|
64
82
|
urlsafe_b64decode: () => urlsafe_b64decode
|
|
65
83
|
});
|
|
@@ -407,7 +425,314 @@ async function createSha256Hash(data, asHex) {
|
|
|
407
425
|
}
|
|
408
426
|
}
|
|
409
427
|
|
|
428
|
+
// src/utils/locale.ts
|
|
429
|
+
function getCurrentLocale() {
|
|
430
|
+
return Intl.NumberFormat().resolvedOptions().locale;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// src/utils/localeToCurrencyCodes.ts
|
|
434
|
+
var countryCodesToCurrencyCodes = {
|
|
435
|
+
AD: "EUR",
|
|
436
|
+
// AE: "AED",
|
|
437
|
+
// AF: "AFN",
|
|
438
|
+
// AG: "XCD",
|
|
439
|
+
// AI: "XCD",
|
|
440
|
+
// AL: "ALL",
|
|
441
|
+
// AM: "AMD",
|
|
442
|
+
// AO: "AOA",
|
|
443
|
+
AR: "ARS",
|
|
444
|
+
AS: "USD",
|
|
445
|
+
AT: "EUR",
|
|
446
|
+
AU: "AUD",
|
|
447
|
+
// AW: "AWG",
|
|
448
|
+
AX: "EUR",
|
|
449
|
+
// AZ: "AZN",
|
|
450
|
+
// BA: "BAM",
|
|
451
|
+
// BB: "BBD",
|
|
452
|
+
// BD: "BDT",
|
|
453
|
+
BE: "EUR",
|
|
454
|
+
// BF: "XOF",
|
|
455
|
+
// BG: "BGN",
|
|
456
|
+
// BH: "BHD",
|
|
457
|
+
// BI: "BIF",
|
|
458
|
+
// BJ: "XOF",
|
|
459
|
+
BL: "EUR",
|
|
460
|
+
// BM: "BMD",
|
|
461
|
+
// BN: "BND",
|
|
462
|
+
// BO: "BOB",
|
|
463
|
+
BQ: "USD",
|
|
464
|
+
BR: "BRL",
|
|
465
|
+
// BS: "BSD",
|
|
466
|
+
// BT: "BTN",
|
|
467
|
+
// BV: "NOK",
|
|
468
|
+
// BW: "BWP",
|
|
469
|
+
// BY: "BYN",
|
|
470
|
+
// BZ: "BZD",
|
|
471
|
+
CA: "CAD",
|
|
472
|
+
// CC: "AUD",
|
|
473
|
+
// CD: "CDF",
|
|
474
|
+
// CF: "XAF",
|
|
475
|
+
// CG: "XAF",
|
|
476
|
+
// CH: "CHF",
|
|
477
|
+
// CI: "XOF",
|
|
478
|
+
// CK: "NZD",
|
|
479
|
+
// CL: "CLP",
|
|
480
|
+
// CM: "XAF",
|
|
481
|
+
// CN: "CNY",
|
|
482
|
+
CO: "COP",
|
|
483
|
+
// CR: "CRC",
|
|
484
|
+
// CU: "CUP",
|
|
485
|
+
// CV: "CVE",
|
|
486
|
+
// CW: "ANG",
|
|
487
|
+
// CX: "AUD",
|
|
488
|
+
CY: "EUR",
|
|
489
|
+
// CZ: "CZK",
|
|
490
|
+
DE: "EUR",
|
|
491
|
+
// DJ: "DJF",
|
|
492
|
+
// DK: "DKK",
|
|
493
|
+
// DM: "XCD",
|
|
494
|
+
// DO: "DOP",
|
|
495
|
+
// DZ: "DZD",
|
|
496
|
+
EC: "USD",
|
|
497
|
+
EE: "EUR",
|
|
498
|
+
// EG: "EGP",
|
|
499
|
+
// EH: "MAD",
|
|
500
|
+
// ER: "ERN",
|
|
501
|
+
ES: "EUR",
|
|
502
|
+
// ET: "ETB",
|
|
503
|
+
FI: "EUR",
|
|
504
|
+
// FJ: "FJD",
|
|
505
|
+
// FK: "FKP",
|
|
506
|
+
FM: "USD",
|
|
507
|
+
// FO: "DKK",
|
|
508
|
+
FR: "EUR",
|
|
509
|
+
// GA: "XAF",
|
|
510
|
+
GB: "GBP",
|
|
511
|
+
// GD: "XCD",
|
|
512
|
+
// GE: "GEL",
|
|
513
|
+
GF: "EUR",
|
|
514
|
+
GG: "GBP",
|
|
515
|
+
// GH: "GHS",
|
|
516
|
+
// GI: "GIP",
|
|
517
|
+
// GL: "DKK",
|
|
518
|
+
// GM: "GMD",
|
|
519
|
+
// GN: "GNF",
|
|
520
|
+
GP: "EUR",
|
|
521
|
+
// GQ: "XAF",
|
|
522
|
+
GR: "EUR",
|
|
523
|
+
GS: "GBP",
|
|
524
|
+
// GT: "GTQ",
|
|
525
|
+
GU: "USD",
|
|
526
|
+
// GW: "XOF",
|
|
527
|
+
// GY: "GYD",
|
|
528
|
+
// HK: "HKD",
|
|
529
|
+
// HM: "AUD",
|
|
530
|
+
// HN: "HNL",
|
|
531
|
+
// HR: "HRK",
|
|
532
|
+
// HT: "HTG",
|
|
533
|
+
// HU: "HUF",
|
|
534
|
+
// ID: "IDR",
|
|
535
|
+
IE: "EUR",
|
|
536
|
+
// IL: "ILS",
|
|
537
|
+
IM: "GBP",
|
|
538
|
+
IN: "INR",
|
|
539
|
+
IO: "USD",
|
|
540
|
+
// IQ: "IQD",
|
|
541
|
+
// IR: "IRR",
|
|
542
|
+
// IS: "ISK",
|
|
543
|
+
IT: "EUR",
|
|
544
|
+
JE: "GBP",
|
|
545
|
+
// JM: "JMD",
|
|
546
|
+
// JO: "JOD",
|
|
547
|
+
// JP: "JPY",
|
|
548
|
+
// KE: "KES",
|
|
549
|
+
// KG: "KGS",
|
|
550
|
+
// KH: "KHR",
|
|
551
|
+
// KI: "AUD",
|
|
552
|
+
// KM: "KMF",
|
|
553
|
+
// KN: "XCD",
|
|
554
|
+
// KP: "KPW",
|
|
555
|
+
// KR: "KRW",
|
|
556
|
+
// KW: "KWD",
|
|
557
|
+
// KY: "KYD",
|
|
558
|
+
// KZ: "KZT",
|
|
559
|
+
// LA: "LAK",
|
|
560
|
+
// LB: "LBP",
|
|
561
|
+
// LC: "XCD",
|
|
562
|
+
// LI: "CHF",
|
|
563
|
+
// LK: "LKR",
|
|
564
|
+
// LR: "LRD",
|
|
565
|
+
// LS: "LSL",
|
|
566
|
+
LT: "EUR",
|
|
567
|
+
LU: "EUR",
|
|
568
|
+
LV: "EUR",
|
|
569
|
+
// LY: "LYD",
|
|
570
|
+
// MA: "MAD",
|
|
571
|
+
MC: "EUR",
|
|
572
|
+
// MD: "MDL",
|
|
573
|
+
ME: "EUR",
|
|
574
|
+
MF: "EUR",
|
|
575
|
+
// MG: "MGA",
|
|
576
|
+
MH: "USD",
|
|
577
|
+
// MK: "MKD",
|
|
578
|
+
// ML: "XOF",
|
|
579
|
+
// MM: "MMK",
|
|
580
|
+
// MN: "MNT",
|
|
581
|
+
// MO: "MOP",
|
|
582
|
+
MP: "USD",
|
|
583
|
+
MQ: "EUR",
|
|
584
|
+
// MR: "MRO",
|
|
585
|
+
// MS: "XCD",
|
|
586
|
+
MT: "EUR",
|
|
587
|
+
// MU: "MUR",
|
|
588
|
+
// MV: "MVR",
|
|
589
|
+
// MW: "MWK",
|
|
590
|
+
MX: "MXN",
|
|
591
|
+
// MY: "MYR",
|
|
592
|
+
// MZ: "MZN",
|
|
593
|
+
// NA: "NAD",
|
|
594
|
+
// NC: "XPF",
|
|
595
|
+
// NE: "XOF",
|
|
596
|
+
NF: "AUD",
|
|
597
|
+
// NG: "NGN",
|
|
598
|
+
// NI: "NIO",
|
|
599
|
+
NL: "EUR",
|
|
600
|
+
// NO: "NOK",
|
|
601
|
+
// NP: "NPR",
|
|
602
|
+
NR: "AUD",
|
|
603
|
+
// NU: "NZD",
|
|
604
|
+
// NZ: "NZD",
|
|
605
|
+
// OM: "OMR",
|
|
606
|
+
// PA: "PAB",
|
|
607
|
+
// PE: "PEN",
|
|
608
|
+
// PF: "XPF",
|
|
609
|
+
// PG: "PGK",
|
|
610
|
+
// PH: "PHP",
|
|
611
|
+
// PK: "PKR",
|
|
612
|
+
// PL: "PLN",
|
|
613
|
+
PM: "EUR",
|
|
614
|
+
// PN: "NZD",
|
|
615
|
+
PR: "USD",
|
|
616
|
+
// PS: "ILS",
|
|
617
|
+
PT: "EUR",
|
|
618
|
+
PW: "USD",
|
|
619
|
+
// PY: "PYG",
|
|
620
|
+
// QA: "QAR",
|
|
621
|
+
RE: "EUR",
|
|
622
|
+
// RO: "RON",
|
|
623
|
+
// RS: "RSD",
|
|
624
|
+
// RU: "RUB",
|
|
625
|
+
// RW: "RWF",
|
|
626
|
+
// SA: "SAR",
|
|
627
|
+
// SB: "SBD",
|
|
628
|
+
// SC: "SCR",
|
|
629
|
+
// SD: "SDG",
|
|
630
|
+
// SE: "SEK",
|
|
631
|
+
// SG: "SGD",
|
|
632
|
+
// SH: "SHP",
|
|
633
|
+
SI: "EUR",
|
|
634
|
+
// SJ: "NOK",
|
|
635
|
+
SK: "EUR",
|
|
636
|
+
// SL: "SLL",
|
|
637
|
+
SM: "EUR",
|
|
638
|
+
// SN: "XOF",
|
|
639
|
+
// SO: "SOS",
|
|
640
|
+
// SR: "SRD",
|
|
641
|
+
// ST: "STD",
|
|
642
|
+
// SV: "SVC",
|
|
643
|
+
// SX: "ANG",
|
|
644
|
+
// SY: "SYP",
|
|
645
|
+
// SZ: "SZL",
|
|
646
|
+
TC: "USD",
|
|
647
|
+
// TD: "XAF",
|
|
648
|
+
TF: "EUR",
|
|
649
|
+
// TG: "XOF",
|
|
650
|
+
// TH: "THB",
|
|
651
|
+
// TJ: "TJS",
|
|
652
|
+
// TK: "NZD",
|
|
653
|
+
TL: "USD",
|
|
654
|
+
// TM: "TMT",
|
|
655
|
+
// TN: "TND",
|
|
656
|
+
// TO: "TOP",
|
|
657
|
+
// TR: "TRY",
|
|
658
|
+
// TT: "TTD",
|
|
659
|
+
TV: "AUD",
|
|
660
|
+
// TW: "TWD",
|
|
661
|
+
// TZ: "TZS",
|
|
662
|
+
// UA: "UAH",
|
|
663
|
+
// UG: "UGX",
|
|
664
|
+
UM: "USD",
|
|
665
|
+
US: "USD",
|
|
666
|
+
// UY: "UYU",
|
|
667
|
+
// UZ: "UZS",
|
|
668
|
+
VA: "EUR",
|
|
669
|
+
// VC: "XCD",
|
|
670
|
+
// VE: "VEF",
|
|
671
|
+
VG: "USD",
|
|
672
|
+
VI: "USD",
|
|
673
|
+
// VN: "VND",
|
|
674
|
+
// VU: "VUV",
|
|
675
|
+
// WF: "XPF",
|
|
676
|
+
// WS: "WST",
|
|
677
|
+
// YE: "YER",
|
|
678
|
+
YT: "EUR"
|
|
679
|
+
// ZA: "ZAR",
|
|
680
|
+
// ZM: "ZMW",
|
|
681
|
+
// ZW: "ZWL",
|
|
682
|
+
};
|
|
683
|
+
function getCountryCode(localeString) {
|
|
684
|
+
let components = localeString.split("_");
|
|
685
|
+
if (components.length === 2) {
|
|
686
|
+
return components.pop();
|
|
687
|
+
}
|
|
688
|
+
components = localeString.split("-");
|
|
689
|
+
if (components.length === 2) {
|
|
690
|
+
return components.pop();
|
|
691
|
+
}
|
|
692
|
+
return localeString;
|
|
693
|
+
}
|
|
694
|
+
function localeToCurrencyCode(locale) {
|
|
695
|
+
const countryCode = getCountryCode(locale);
|
|
696
|
+
return countryCodesToCurrencyCodes[countryCode];
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// src/utils/numbers.ts
|
|
700
|
+
function clamp(val, min, max) {
|
|
701
|
+
return val > max ? max : val < min ? min : val;
|
|
702
|
+
}
|
|
703
|
+
function linearInterpolate(value, fromRangeStart, fromRangeEnd, toRangeStart, toRangeEnd) {
|
|
704
|
+
const fromRangeMax = fromRangeEnd - fromRangeStart;
|
|
705
|
+
const fromRangeVal = value - fromRangeStart;
|
|
706
|
+
const toRangeMax = toRangeEnd - toRangeStart;
|
|
707
|
+
const val = fromRangeVal / fromRangeMax * toRangeMax + toRangeStart;
|
|
708
|
+
return clamp(
|
|
709
|
+
val,
|
|
710
|
+
Math.min(toRangeStart, toRangeEnd),
|
|
711
|
+
Math.max(toRangeStart, toRangeEnd)
|
|
712
|
+
);
|
|
713
|
+
}
|
|
714
|
+
function round(num, decimalPlaces = 0) {
|
|
715
|
+
const p = Math.pow(10, decimalPlaces);
|
|
716
|
+
const n = num * p * (1 + Number.EPSILON);
|
|
717
|
+
return Math.round(n) / p;
|
|
718
|
+
}
|
|
719
|
+
function isNumber(value) {
|
|
720
|
+
return typeof value === "number";
|
|
721
|
+
}
|
|
722
|
+
|
|
410
723
|
// src/utils/currency.ts
|
|
724
|
+
var defaultCurrencyCode = "USD";
|
|
725
|
+
var CurrencyUnit = /* @__PURE__ */ ((CurrencyUnit2) => {
|
|
726
|
+
CurrencyUnit2["FUTURE_VALUE"] = "FUTURE_VALUE";
|
|
727
|
+
CurrencyUnit2["BITCOIN"] = "BITCOIN";
|
|
728
|
+
CurrencyUnit2["SATOSHI"] = "SATOSHI";
|
|
729
|
+
CurrencyUnit2["MILLISATOSHI"] = "MILLISATOSHI";
|
|
730
|
+
CurrencyUnit2["USD"] = "USD";
|
|
731
|
+
CurrencyUnit2["NANOBITCOIN"] = "NANOBITCOIN";
|
|
732
|
+
CurrencyUnit2["MICROBITCOIN"] = "MICROBITCOIN";
|
|
733
|
+
CurrencyUnit2["MILLIBITCOIN"] = "MILLIBITCOIN";
|
|
734
|
+
return CurrencyUnit2;
|
|
735
|
+
})(CurrencyUnit || {});
|
|
411
736
|
var CONVERSION_MAP = {
|
|
412
737
|
["BITCOIN" /* BITCOIN */]: {
|
|
413
738
|
["BITCOIN" /* BITCOIN */]: (v) => v,
|
|
@@ -415,67 +740,303 @@ var CONVERSION_MAP = {
|
|
|
415
740
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v * 1e3,
|
|
416
741
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e11,
|
|
417
742
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e9,
|
|
418
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 1e8
|
|
743
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 1e8,
|
|
744
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
745
|
+
/* Round without decimals since we're returning cents: */
|
|
746
|
+
round(v * centsPerBtc, 2)
|
|
747
|
+
)
|
|
419
748
|
},
|
|
420
749
|
["MICROBITCOIN" /* MICROBITCOIN */]: {
|
|
421
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
750
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e6,
|
|
422
751
|
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v,
|
|
423
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
752
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e3,
|
|
424
753
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e5,
|
|
425
754
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e3,
|
|
426
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 100
|
|
755
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 100,
|
|
756
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
757
|
+
/* Round without decimals since we're returning cents: */
|
|
758
|
+
round(v / 1e6 * centsPerBtc)
|
|
759
|
+
)
|
|
427
760
|
},
|
|
428
761
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: {
|
|
429
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
762
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e3,
|
|
430
763
|
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v * 1e3,
|
|
431
764
|
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v,
|
|
432
765
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e8,
|
|
433
766
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 1e6,
|
|
434
|
-
["SATOSHI" /* SATOSHI */]: (v) => v * 1e5
|
|
767
|
+
["SATOSHI" /* SATOSHI */]: (v) => v * 1e5,
|
|
768
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
769
|
+
/* Round without decimals since we're returning cents: */
|
|
770
|
+
round(v / 1e3 * centsPerBtc)
|
|
771
|
+
)
|
|
435
772
|
},
|
|
436
773
|
["MILLISATOSHI" /* MILLISATOSHI */]: {
|
|
437
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
438
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
439
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
774
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e11,
|
|
775
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 1e5,
|
|
776
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e8,
|
|
440
777
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v,
|
|
441
|
-
["NANOBITCOIN" /* NANOBITCOIN */]: (v) =>
|
|
442
|
-
["SATOSHI" /* SATOSHI */]: (v) =>
|
|
778
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v / 100,
|
|
779
|
+
["SATOSHI" /* SATOSHI */]: (v) => v / 1e3,
|
|
780
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
781
|
+
/* Round without decimals since we're returning cents: */
|
|
782
|
+
round(v / 1e11 * centsPerBtc)
|
|
783
|
+
)
|
|
443
784
|
},
|
|
444
785
|
["NANOBITCOIN" /* NANOBITCOIN */]: {
|
|
445
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
446
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
447
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
786
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e9,
|
|
787
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 1e3,
|
|
788
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e6,
|
|
448
789
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 100,
|
|
449
790
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v,
|
|
450
|
-
["SATOSHI" /* SATOSHI */]: (v) =>
|
|
791
|
+
["SATOSHI" /* SATOSHI */]: (v) => v / 10,
|
|
792
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
793
|
+
/* Round without decimals since we're returning cents: */
|
|
794
|
+
round(v / 1e9 * centsPerBtc)
|
|
795
|
+
)
|
|
451
796
|
},
|
|
452
797
|
["SATOSHI" /* SATOSHI */]: {
|
|
453
|
-
["BITCOIN" /* BITCOIN */]: (v) =>
|
|
454
|
-
["MICROBITCOIN" /* MICROBITCOIN */]: (v) =>
|
|
455
|
-
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) =>
|
|
798
|
+
["BITCOIN" /* BITCOIN */]: (v) => v / 1e8,
|
|
799
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v) => v / 100,
|
|
800
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v) => v / 1e5,
|
|
456
801
|
["MILLISATOSHI" /* MILLISATOSHI */]: (v) => v * 1e3,
|
|
457
802
|
["NANOBITCOIN" /* NANOBITCOIN */]: (v) => v * 10,
|
|
458
|
-
["SATOSHI" /* SATOSHI */]: (v) => v
|
|
803
|
+
["SATOSHI" /* SATOSHI */]: (v) => v,
|
|
804
|
+
["USD" /* USD */]: (v, centsPerBtc = 1) => (
|
|
805
|
+
/* Round without decimals since we're returning cents: */
|
|
806
|
+
round(v / 1e8 * centsPerBtc)
|
|
807
|
+
)
|
|
808
|
+
},
|
|
809
|
+
["USD" /* USD */]: {
|
|
810
|
+
["BITCOIN" /* BITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc,
|
|
811
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e6,
|
|
812
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e3,
|
|
813
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e11,
|
|
814
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e9,
|
|
815
|
+
["SATOSHI" /* SATOSHI */]: (v, centsPerBtc = 1) => v / centsPerBtc * 1e8,
|
|
816
|
+
["USD" /* USD */]: (v) => v
|
|
459
817
|
}
|
|
460
818
|
};
|
|
461
|
-
|
|
462
|
-
if (
|
|
819
|
+
function convertCurrencyAmountValue(fromUnit, toUnit, amount, centsPerBtc = 1) {
|
|
820
|
+
if (fromUnit === "FUTURE_VALUE" /* FUTURE_VALUE */ || toUnit === "FUTURE_VALUE" /* FUTURE_VALUE */) {
|
|
463
821
|
throw new LightsparkException_default("CurrencyError", `Unsupported CurrencyUnit.`);
|
|
464
822
|
}
|
|
465
|
-
|
|
823
|
+
if (fromUnit === toUnit) {
|
|
824
|
+
return amount;
|
|
825
|
+
}
|
|
826
|
+
const conversionFn = CONVERSION_MAP[fromUnit][toUnit];
|
|
466
827
|
if (!conversionFn) {
|
|
467
828
|
throw new LightsparkException_default(
|
|
468
829
|
"CurrencyError",
|
|
469
|
-
`Cannot convert from ${
|
|
830
|
+
`Cannot convert from ${fromUnit} to ${toUnit}`
|
|
470
831
|
);
|
|
471
832
|
}
|
|
833
|
+
return conversionFn(amount, centsPerBtc);
|
|
834
|
+
}
|
|
835
|
+
var convertCurrencyAmount = (from, toUnit) => {
|
|
836
|
+
const value = convertCurrencyAmountValue(
|
|
837
|
+
from.originalUnit,
|
|
838
|
+
toUnit,
|
|
839
|
+
from.originalValue
|
|
840
|
+
);
|
|
472
841
|
return {
|
|
473
842
|
...from,
|
|
474
843
|
preferredCurrencyUnit: toUnit,
|
|
475
|
-
preferredCurrencyValueApprox:
|
|
476
|
-
preferredCurrencyValueRounded:
|
|
844
|
+
preferredCurrencyValueApprox: value,
|
|
845
|
+
preferredCurrencyValueRounded: value
|
|
846
|
+
};
|
|
847
|
+
};
|
|
848
|
+
function isCurrencyAmountObj(arg) {
|
|
849
|
+
return typeof arg === "object" && arg !== null && "value" in arg && "unit" in arg;
|
|
850
|
+
}
|
|
851
|
+
function isCurrencyAmount(arg) {
|
|
852
|
+
return typeof arg === "object" && arg !== null && "originalValue" in arg && "originalUnit" in arg && "preferredCurrencyUnit" in arg && "preferredCurrencyValueRounded" in arg && "preferredCurrencyValueApprox" in arg;
|
|
853
|
+
}
|
|
854
|
+
function asNumber(value) {
|
|
855
|
+
if (typeof value === "string") {
|
|
856
|
+
return Number(value);
|
|
857
|
+
}
|
|
858
|
+
return value || 0;
|
|
859
|
+
}
|
|
860
|
+
function getCurrencyAmount(currencyAmountArg) {
|
|
861
|
+
let value = 0;
|
|
862
|
+
let unit = void 0;
|
|
863
|
+
if (isCurrencyAmountObj(currencyAmountArg)) {
|
|
864
|
+
value = asNumber(currencyAmountArg.value);
|
|
865
|
+
unit = currencyAmountArg.unit;
|
|
866
|
+
} else if (isCurrencyAmount(currencyAmountArg)) {
|
|
867
|
+
value = currencyAmountArg.originalValue;
|
|
868
|
+
unit = currencyAmountArg.originalUnit;
|
|
869
|
+
}
|
|
870
|
+
return {
|
|
871
|
+
value: asNumber(value),
|
|
872
|
+
unit: unit || "SATOSHI" /* SATOSHI */
|
|
873
|
+
};
|
|
874
|
+
}
|
|
875
|
+
function mapCurrencyAmount(currencyAmountArg, centsPerBtc = 1) {
|
|
876
|
+
const { value, unit } = getCurrencyAmount(currencyAmountArg);
|
|
877
|
+
const convert = convertCurrencyAmountValue;
|
|
878
|
+
const sats = convert(unit, "SATOSHI" /* SATOSHI */, value, centsPerBtc);
|
|
879
|
+
const btc = convert(unit, "BITCOIN" /* BITCOIN */, value, centsPerBtc);
|
|
880
|
+
const msats = convert(unit, "MILLISATOSHI" /* MILLISATOSHI */, value, centsPerBtc);
|
|
881
|
+
const usd = convert(unit, "USD" /* USD */, value, centsPerBtc);
|
|
882
|
+
const mibtc = convert(unit, "MICROBITCOIN" /* MICROBITCOIN */, value, centsPerBtc);
|
|
883
|
+
const mlbtc = convert(unit, "MILLIBITCOIN" /* MILLIBITCOIN */, value, centsPerBtc);
|
|
884
|
+
const nbtc = convert(unit, "NANOBITCOIN" /* NANOBITCOIN */, value, centsPerBtc);
|
|
885
|
+
const mapWithCurrencyUnits = {
|
|
886
|
+
["BITCOIN" /* BITCOIN */]: btc,
|
|
887
|
+
["SATOSHI" /* SATOSHI */]: sats,
|
|
888
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: msats,
|
|
889
|
+
["USD" /* USD */]: usd,
|
|
890
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: mibtc,
|
|
891
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: mlbtc,
|
|
892
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: nbtc,
|
|
893
|
+
["FUTURE_VALUE" /* FUTURE_VALUE */]: NaN,
|
|
894
|
+
formatted: {
|
|
895
|
+
["BITCOIN" /* BITCOIN */]: formatCurrencyStr({
|
|
896
|
+
value: btc,
|
|
897
|
+
unit: "BITCOIN" /* BITCOIN */
|
|
898
|
+
}),
|
|
899
|
+
["SATOSHI" /* SATOSHI */]: formatCurrencyStr({
|
|
900
|
+
value: sats,
|
|
901
|
+
unit: "SATOSHI" /* SATOSHI */
|
|
902
|
+
}),
|
|
903
|
+
["MILLISATOSHI" /* MILLISATOSHI */]: formatCurrencyStr({
|
|
904
|
+
value: msats,
|
|
905
|
+
unit: "MILLISATOSHI" /* MILLISATOSHI */
|
|
906
|
+
}),
|
|
907
|
+
["MICROBITCOIN" /* MICROBITCOIN */]: formatCurrencyStr({
|
|
908
|
+
value: mibtc,
|
|
909
|
+
unit: "MICROBITCOIN" /* MICROBITCOIN */
|
|
910
|
+
}),
|
|
911
|
+
["MILLIBITCOIN" /* MILLIBITCOIN */]: formatCurrencyStr({
|
|
912
|
+
value: mlbtc,
|
|
913
|
+
unit: "MILLIBITCOIN" /* MILLIBITCOIN */
|
|
914
|
+
}),
|
|
915
|
+
["NANOBITCOIN" /* NANOBITCOIN */]: formatCurrencyStr({
|
|
916
|
+
value: nbtc,
|
|
917
|
+
unit: "NANOBITCOIN" /* NANOBITCOIN */
|
|
918
|
+
}),
|
|
919
|
+
["USD" /* USD */]: formatCurrencyStr({
|
|
920
|
+
value: usd,
|
|
921
|
+
unit: "USD" /* USD */
|
|
922
|
+
}),
|
|
923
|
+
["FUTURE_VALUE" /* FUTURE_VALUE */]: "-"
|
|
924
|
+
}
|
|
925
|
+
};
|
|
926
|
+
return {
|
|
927
|
+
...mapWithCurrencyUnits,
|
|
928
|
+
btc,
|
|
929
|
+
sats,
|
|
930
|
+
msats,
|
|
931
|
+
isZero: msats === 0,
|
|
932
|
+
isLessThan: (other) => {
|
|
933
|
+
if (isNumber(other)) {
|
|
934
|
+
return msats < other;
|
|
935
|
+
}
|
|
936
|
+
if (isCurrencyAmountObj(other)) {
|
|
937
|
+
other = mapCurrencyAmount(other);
|
|
938
|
+
}
|
|
939
|
+
return msats < other.msats;
|
|
940
|
+
},
|
|
941
|
+
isGreaterThan: (other) => {
|
|
942
|
+
if (isNumber(other)) {
|
|
943
|
+
return msats > other;
|
|
944
|
+
}
|
|
945
|
+
if (isCurrencyAmountObj(other)) {
|
|
946
|
+
other = mapCurrencyAmount(other);
|
|
947
|
+
}
|
|
948
|
+
return msats > other.msats;
|
|
949
|
+
},
|
|
950
|
+
isEqualTo: (other) => {
|
|
951
|
+
if (isNumber(other)) {
|
|
952
|
+
return msats === other;
|
|
953
|
+
}
|
|
954
|
+
if (isCurrencyAmountObj(other)) {
|
|
955
|
+
other = mapCurrencyAmount(other);
|
|
956
|
+
}
|
|
957
|
+
return msats === other.msats;
|
|
958
|
+
},
|
|
959
|
+
formatted: {
|
|
960
|
+
...mapWithCurrencyUnits.formatted,
|
|
961
|
+
btc: mapWithCurrencyUnits.formatted["BITCOIN" /* BITCOIN */],
|
|
962
|
+
sats: mapWithCurrencyUnits.formatted["SATOSHI" /* SATOSHI */],
|
|
963
|
+
msats: mapWithCurrencyUnits.formatted["MILLISATOSHI" /* MILLISATOSHI */]
|
|
964
|
+
},
|
|
965
|
+
type: "CurrencyMap"
|
|
477
966
|
};
|
|
967
|
+
}
|
|
968
|
+
var isCurrencyMap = (currencyMap) => typeof currencyMap === "object" && currencyMap !== null && "type" in currencyMap && typeof currencyMap.type === "string" && currencyMap.type === "CurrencyMap";
|
|
969
|
+
var abbrCurrencyUnit = (unit) => {
|
|
970
|
+
switch (unit) {
|
|
971
|
+
case "BITCOIN" /* BITCOIN */:
|
|
972
|
+
return "BTC";
|
|
973
|
+
case "SATOSHI" /* SATOSHI */:
|
|
974
|
+
return "SAT";
|
|
975
|
+
case "MILLISATOSHI" /* MILLISATOSHI */:
|
|
976
|
+
return "MSAT";
|
|
977
|
+
case "USD" /* USD */:
|
|
978
|
+
return "USD";
|
|
979
|
+
}
|
|
980
|
+
return "Unsupported CurrencyUnit";
|
|
478
981
|
};
|
|
982
|
+
function formatCurrencyStr(amount, maxFractionDigits, compact, showBtcSymbol = false, options = {}) {
|
|
983
|
+
const currencyAmount = getCurrencyAmount(amount);
|
|
984
|
+
let { value: num } = currencyAmount;
|
|
985
|
+
const { unit } = currencyAmount;
|
|
986
|
+
if (unit === "USD" /* USD */) {
|
|
987
|
+
num = num / 100;
|
|
988
|
+
}
|
|
989
|
+
function getDefaultMaxFractionDigits(defaultDigits) {
|
|
990
|
+
return typeof maxFractionDigits === "undefined" ? compact ? 1 : defaultDigits : maxFractionDigits;
|
|
991
|
+
}
|
|
992
|
+
const symbol = !showBtcSymbol ? "" : unit === "BITCOIN" /* BITCOIN */ ? "\uE903" : unit === "SATOSHI" /* SATOSHI */ ? "\uE902" : "";
|
|
993
|
+
const currentLocale = getCurrentLocale();
|
|
994
|
+
switch (unit) {
|
|
995
|
+
case "BITCOIN" /* BITCOIN */:
|
|
996
|
+
return `${symbol}${num.toLocaleString(currentLocale, {
|
|
997
|
+
notation: compact ? "compact" : void 0,
|
|
998
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(4),
|
|
999
|
+
...options
|
|
1000
|
+
})}`;
|
|
1001
|
+
case "MILLISATOSHI" /* MILLISATOSHI */:
|
|
1002
|
+
case "SATOSHI" /* SATOSHI */:
|
|
1003
|
+
case "MICROBITCOIN" /* MICROBITCOIN */:
|
|
1004
|
+
case "MILLIBITCOIN" /* MILLIBITCOIN */:
|
|
1005
|
+
case "NANOBITCOIN" /* NANOBITCOIN */:
|
|
1006
|
+
default:
|
|
1007
|
+
return `${symbol}${num.toLocaleString(currentLocale, {
|
|
1008
|
+
notation: compact ? "compact" : void 0,
|
|
1009
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(0),
|
|
1010
|
+
...options
|
|
1011
|
+
})}`;
|
|
1012
|
+
case "USD" /* USD */:
|
|
1013
|
+
return num.toLocaleString(currentLocale, {
|
|
1014
|
+
style: "currency",
|
|
1015
|
+
currency: defaultCurrencyCode,
|
|
1016
|
+
notation: compact ? "compact" : void 0,
|
|
1017
|
+
maximumFractionDigits: getDefaultMaxFractionDigits(2),
|
|
1018
|
+
...options
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
function separateCurrencyStrParts(currencyStr) {
|
|
1023
|
+
const symbol = currencyStr.replace(/[0-9\s\u00a0.,]/g, "");
|
|
1024
|
+
const amount = currencyStr.replace(/[^\d.,-]/g, "");
|
|
1025
|
+
return { symbol, amount };
|
|
1026
|
+
}
|
|
1027
|
+
function localeToCurrencySymbol(locale) {
|
|
1028
|
+
const currencyCode = localeToCurrencyCode(locale);
|
|
1029
|
+
const formatted = new Intl.NumberFormat(locale, {
|
|
1030
|
+
style: "currency",
|
|
1031
|
+
currency: currencyCode,
|
|
1032
|
+
useGrouping: false,
|
|
1033
|
+
// to avoid thousands separators
|
|
1034
|
+
minimumFractionDigits: 0,
|
|
1035
|
+
maximumFractionDigits: 0
|
|
1036
|
+
}).format(0);
|
|
1037
|
+
const { symbol } = separateCurrencyStrParts(formatted);
|
|
1038
|
+
return symbol;
|
|
1039
|
+
}
|
|
479
1040
|
|
|
480
1041
|
// src/utils/errors.ts
|
|
481
1042
|
var isError = (e) => {
|
|
@@ -958,6 +1519,7 @@ var apiDomainForEnvironment = (environment) => {
|
|
|
958
1519
|
var ServerEnvironment_default = ServerEnvironment;
|
|
959
1520
|
// Annotate the CommonJS export names for ESM import in node:
|
|
960
1521
|
0 && (module.exports = {
|
|
1522
|
+
CurrencyUnit,
|
|
961
1523
|
DefaultCrypto,
|
|
962
1524
|
KeyOrAlias,
|
|
963
1525
|
LightsparkAuthException,
|
|
@@ -972,22 +1534,39 @@ var ServerEnvironment_default = ServerEnvironment;
|
|
|
972
1534
|
SigningKey,
|
|
973
1535
|
SigningKeyType,
|
|
974
1536
|
StubAuthProvider,
|
|
1537
|
+
abbrCurrencyUnit,
|
|
975
1538
|
apiDomainForEnvironment,
|
|
976
1539
|
b64decode,
|
|
977
1540
|
b64encode,
|
|
978
1541
|
bytesToHex,
|
|
1542
|
+
clamp,
|
|
979
1543
|
convertCurrencyAmount,
|
|
1544
|
+
convertCurrencyAmountValue,
|
|
1545
|
+
countryCodesToCurrencyCodes,
|
|
980
1546
|
createSha256Hash,
|
|
1547
|
+
defaultCurrencyCode,
|
|
1548
|
+
formatCurrencyStr,
|
|
1549
|
+
getCurrentLocale,
|
|
981
1550
|
getErrorMsg,
|
|
982
1551
|
hexToBytes,
|
|
983
1552
|
isBrowser,
|
|
1553
|
+
isCurrencyAmount,
|
|
1554
|
+
isCurrencyAmountObj,
|
|
1555
|
+
isCurrencyMap,
|
|
984
1556
|
isError,
|
|
985
1557
|
isErrorMsg,
|
|
986
1558
|
isErrorWithMessage,
|
|
987
1559
|
isNode,
|
|
1560
|
+
isNumber,
|
|
988
1561
|
isTest,
|
|
989
1562
|
isType,
|
|
1563
|
+
linearInterpolate,
|
|
1564
|
+
localeToCurrencyCode,
|
|
1565
|
+
localeToCurrencySymbol,
|
|
1566
|
+
mapCurrencyAmount,
|
|
990
1567
|
pollUntil,
|
|
1568
|
+
round,
|
|
1569
|
+
separateCurrencyStrParts,
|
|
991
1570
|
sleep,
|
|
992
1571
|
urlsafe_b64decode
|
|
993
1572
|
});
|