@leather.io/utils 0.49.4 → 0.49.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @leather.io/utils@0.49.4 build /home/runner/work/mono/mono/packages/utils
2
+ > @leather.io/utils@0.49.7 build /home/runner/work/mono/mono/packages/utils
3
3
  > tsdown
4
4
 
5
5
  ℹ tsdown v0.16.5 powered by rolldown v1.0.0-beta.50
@@ -7,9 +7,9 @@
7
7
  ℹ entry: src/index.ts
8
8
  ℹ tsconfig: tsconfig.json
9
9
  ℹ Build start
10
- ℹ dist/index.js  70.03 kB │ gzip: 19.45 kB
11
- ℹ dist/index.js.map 125.50 kB │ gzip: 27.65 kB
10
+ ℹ dist/index.js  69.92 kB │ gzip: 19.43 kB
11
+ ℹ dist/index.js.map 125.28 kB │ gzip: 27.63 kB
12
12
  ℹ dist/index.d.ts.map  7.47 kB │ gzip: 3.01 kB
13
13
  ℹ dist/index.d.ts  16.43 kB │ gzip: 4.35 kB
14
- ℹ 4 files, total: 219.43 kB
15
- ✔ Build complete in 3054ms
14
+ ℹ 4 files, total: 219.11 kB
15
+ ✔ Build complete in 2906ms
package/CHANGELOG.md CHANGED
@@ -368,6 +368,34 @@
368
368
  * devDependencies
369
369
  * @leather.io/prettier-config bumped to 0.9.0
370
370
 
371
+ ## [0.49.7](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.49.6...@leather.io/utils-v0.49.7) (2026-01-21)
372
+
373
+
374
+ ### Dependencies
375
+
376
+ * The following workspace dependencies were updated
377
+ * dependencies
378
+ * @leather.io/constants bumped to 0.30.0
379
+
380
+ ## [0.49.6](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.49.5...@leather.io/utils-v0.49.6) (2025-12-18)
381
+
382
+
383
+ ### Dependencies
384
+
385
+ * The following workspace dependencies were updated
386
+ * dependencies
387
+ * @leather.io/constants bumped to 0.29.0
388
+
389
+ ## [0.49.5](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.49.4...@leather.io/utils-v0.49.5) (2025-12-15)
390
+
391
+
392
+ ### Dependencies
393
+
394
+ * The following workspace dependencies were updated
395
+ * dependencies
396
+ * @leather.io/constants bumped to 0.28.5
397
+ * @leather.io/models bumped to 0.52.0
398
+
371
399
  ## [0.49.4](https://github.com/leather-io/mono/compare/@leather.io/utils-v0.49.3...@leather.io/utils-v0.49.4) (2025-12-09)
372
400
 
373
401
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/counter.ts","../src/math/calculate-averages.ts","../src/math/fibonacci.ts","../src/math/helpers.ts","../src/math/scale-value.ts","../src/money/calculate-money.ts","../src/money/create-money.ts","../src/money/is-money.ts","../src/money/is-fiat-currency-code.ts","../src/money/unit-conversion.ts","../src/accounts/account-addresses.ts","../src/assets/sort-assets.ts","../src/assets/asset-display-name.ts","../src/assets/balance-helpers.ts","../src/assets/inscription-helpers.ts","../src/assets/asset-id.ts","../src/truncate-middle.ts","../src/time.ts","../src/market-data.ts","../src/currency-formatter/currency-formatter.types.ts","../src/currency-formatter/currency-formatter.ts","../src/flatten-object.ts","../src/special-char.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts","../src/px-string-to-number/px-string-to-number.ts","../src/sanitize-content.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/counter.ts","../src/math/calculate-averages.ts","../src/math/fibonacci.ts","../src/math/helpers.ts","../src/math/scale-value.ts","../src/money/calculate-money.ts","../src/money/create-money.ts","../src/money/is-money.ts","../src/money/is-fiat-currency-code.ts","../src/money/unit-conversion.ts","../src/accounts/account-addresses.ts","../src/assets/sort-assets.ts","../src/assets/asset-display-name.ts","../src/assets/balance-helpers.ts","../src/assets/inscription-helpers.ts","../src/assets/asset-id.ts","../src/truncate-middle.ts","../src/time.ts","../src/market-data.ts","../src/currency-formatter/currency-formatter.types.ts","../src/currency-formatter/currency-formatter.ts","../src/flatten-object.ts","../src/special-char.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts","../src/px-string-to-number/px-string-to-number.ts","../src/sanitize-content.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;iBAAgB,aAAA;;;;EAAA,SAAA,EAAA,EAAA,MAAa;;;;iBCIb,oBAAA,UAA8B,yBAAsB;;;iBCEnD,kBAAA,uBAAoC;;;iBCFrC,aAAA,wBAAqC,qBAAkB;iBAavD,MAAA;AHjBA,iBGqBA,aAAA,CHrBa,GAAA,EAAA,MAAA,GAAA,MAAA,GGqBwB,SHrBxB,CAAA,EAAA,MAAA;iBG6Bb,0BAAA,0BAAoD;;;iBC7BpD,UAAA;;;iBCSA,qCAAA,WAAgD,oBAAoB,aAAU;iBAI9E,yBAAA,WAAoC;;;GAAwB,aAAU;ALbtE,iBK8BA,yBAAA,CL9Ba,QAAA,EK+BjB,KL/BiB,EAAA;EAAA,IAAA;EAAA;AAAA,CAAA,EKgCV,ULhCU,EAAA,QAAA,EAAA,MAAA,CAAA,EKiCX,KLjCW;iBKkDb,6BAAA,MAAmC,QAAQ,iCAA4B;iBAMvE,mCAAA,uBAER,6BACW;iBAKH,uBAAA,MAA6B,QAAQ,iCAA4B;AJ5DjE,iBIkEA,aAAA,CJlEoB,OAAU,EIkEP,KJlE6B,EAAA,OAAA,EIkEb,KJlEa,CAAA,EIkER,KJlEQ;iBIuEpD,QAAA,YAAoB,UAAO;iBAQ3B,QAAA,WAAmB,UAAO;iBAa1B,QAAA,WAAmB,UAAO;;;;;;ALhG1C;;iBM4BgB,sBAAA,QACP,iBACC,gCAEP;;AL5BH;;;;ACEiB,iBIsCD,WAAA,CJtCmB,KAAkB,EIsClB,OJtCkB,EAAA,MAAgB,EIsCjB,QJtCiB,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,EIsCe,KJtCf;;;iBKArD,OAAA,uBAA8B;iBAK9B,sBAAA,QAA8B;;;iBCP9B,kBAAA;;;iBCUA,oBAAA,6CACkB,cAAS;cAM9B,mCAbqB,cAAS;ATR3B,cSsBH,QTtBgB,EAAA,CAAA,IAAA,EAAA,MAAA,GAAA,MAAA,GSeK,STfL,EAAA,GSec,STfd;cSwBhB,wCAhBqB,cAAS;cAiB9B,wCAVqB,cAAS;iBAY3B,eAAA,MAAqB,QAAK;;;iBCpB1B,sBAAA,YACH,4DAGV;iBAgBa,iBAAA,UACL,8BACG;WAA8B;AV7B5C,CAAA;iBUiCgB,gBAAA,UACL,8BACG;UAA6B;;;;iBCjC3B;;aAAuD,IAAC;AXFxD,iBWqBA,iCXrBa,CAAA,UAAA;WWqB0C;aAAmB,IAGrB;;;iBCpBrD,mBAAA,QAA2B;;;iBCA3B,4BAAA,eACA,oBACD,qBACC,QACb;iBAaa,gBAAA,eACA,oBACD,qBACC,sBACC,iBACL,wBACO,QAChB;iBAiBa,gBAAA,eACA,oBACD,qBACC,mBACF,QACX;AblDa,iBakEA,gCAAA,CblEa,QAAA,EamEjB,sBbnEiB,EAAA,CAAA,EaoE1B,sBbpE0B;iBa4Eb,oBAAA,WAA+B,eAAe;iBAW9C,oBAAA,WAA+B,eAAe;;;iBC5E9C,+DAEI,6BAA6B,MAAG;AdbpC,UcyCC,qBAAA,CdzCY;;;;ECIb,SAAA,QAAA,CAAA,EAAA,MAAoB;;;;ECEnB,SAAA,gBAAkB,EAAA,MAAA,GAAkB,MAAA;;;;ACFrD;AAagB,iBWsCA,sBAAA,CXtCM,IAAA,EWsCuB,qBXtCvB,CAAA,EWsC+C,gBXtC/C;;;iBYPN,cAAA,QAAsB,sBAAsB;iBAK5C,aAAA,WAAwB,yBAAyB;iBAIjD,WAAA,SAAoB,qBAAqB;AfnBzC,iBeuBA,UAAA,CfvBa,KAAA,EeuBK,WfvBL,CAAA,EeuBmB,afvBnB;iBewEb,iBAAA,QAAyB,YAAY;iBAOrC,iBAAA,QAAyB;iBAIzB,gBAAA;Ed/EA,OAAA,EAAA,MAAA;;;KcoFJ,uBAAA;AblFK,iBaoFD,gBAAA,CbpFqC,OAAA,EaoFX,abpF2B,CAAA,EaoFX,uBbpFW;iBawFrD,kBAAA,oBAAsC,0BAA0B;;;iBC1FhE,cAAA;;;cCFH;cACA;cACA;cACA;AjBLG,iBiBOA,mBAAA,CjBPa,IAAA,EiBOa,IjBPb,CAAA,EAAA,MAAA;iBiBWb,SAAA;iBAIA,QAAA;iBAIA,SAAA;AhBfA,iBgBmBA,WAAA,ChBnBoB,OAAU,EAAA,MAAsB,CAAA,EAAA,MAAA;iBgBuBpD,WAAA;iBAIA,UAAA;iBAIA,SAAA;Af7BC,iBeiCD,UAAA,CfjCmB,KAAkB,EAAA,MAAA,CAAA,EAAA,MAAgB;iBeqCrD,YAAA;;;;;;AjB3ChB;;;;ACIgB,iBiBWA,gBAAA,CjBX8B,UAAsB,EiBWvB,UjBXuB,EAAA,YAAA,EiBWG,UjBXH,CAAA,EiBWgB,UjBXhB;;;;ACEnD,iBgBsCD,kBAAA,ChBtCqC,YAAgB,EgBsCpB,UhBtCoB,CAAA,EgBsCP,UhBtCO;;;UiBNpD,iBAAA;;;;AnBAjB;UmBMiB,yBAAA;;;ElBFD,eAAA,CAAA,EAAA,OAAoB;;UkBQnB,mBAAA,SAA4B;WAClC;EjBPM,mBAAA,CAAA,EiBQO,IAAA,CAAK,mBjBRwB;;KiBmBzC,uBAAA;;;UChBF,6BAAA;;;IpBTM,MAAA,EAAA,MAAa;aoBWkC,IAAA,CAAK;;;AnBPpD,iBmBmBA,uBAAA,CnBnB8B;EAAA,MAAsB;EAAA;AAAA,CAAA,EmBmBP,6BnBnBO,CAAA,EAAA;wBmB6BrC,6BAA4B;gCAIpB,6BAA4B;;IlB/BlD,MAAA,EAAA,MAAA;;;;ICFD,KAAA,EAAA,OAAa;IAab,MAAM,EAAA,MAAA;IAIN,KAAA,uBAAqC,EAAA;IAQrC,eAAA,kCAA6D;;;;;;KkB7BxE,WAAA,sCAAiD,eAAe;UAC3D,YAAA;iBACO;;ArBFjB,UqBKU,eAAA,CrBLmB;;;;ACI7B;;;;ACEA;;;;ACFA;AAaA;AAIA;AAQA;;;;AC7BA;;;;ACSA;;AAAoF,iBgBsBpE,aAAA,ChBtBoE,KAAA,EgBsB/C,WhBtB+C,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EgBsBpB,ehBtBoB;;;ciBPvE,SAAA;;;UCiBH,cAAA;;;AvBnBV;iBuBwBgB,UAAA;;;GAAiC;;;iBCxBjC,uBAAA;;;iBCAA,gBAAA;;;;;;;AzBAA,iB0BMA,eAAA,C1BNa,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;iB2BwBb,QAAA;iBAIA,QAAA;iBAIA,aAAA;AvBhCA,iBuBoCA,QAAA,CvBpCU,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAAA,MAAA;iBuBwCV,WAAA;iBAIA,UAAA;iBAIA,SAAA;AtBvCA,iBsB2CA,QAAA,CtB3CA,KAAA,EAAA,OAAqC,CAAA,EAAA,KAAA,IAAA,MAAA;AAAW,iBsB+ChD,OAAA,CtB/CgD,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IsB+Cd,KtB/Cc;AAAoB,iBsBmDpE,OAAA,CtBnDoE,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAAU,iBsBuD9E,StBvD8E,CAAA,CAAA,CAAA,CAAA,QAAA,EsBuDvD,CtBvDuD,GAAA,SAAA,CAAA,EAAA,QAAA,IsBuD3B,CtBvD2B;AAAA,iBsB2D9E,YAAA,CtB3D8E,GAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IsB2D3C,UtB3D2C;AAI9E,iBsB4DA,IAAA,CAAA,CtB5DA,EAAyB,IAAA;AAAW,iBsBgEpC,WtBhEoC,CAAA,CAAA,CAAA,CAAA,KAAA,EsBgEd,CtBhEc,GsBgEV,CtBhEU,EAAA,CAAA,EsBgEJ,CtBhEI,EAAA;AAAS,iBsBoE7C,qBtBpE6C,CAAA,UAAA,GAAA,EAAA,CAAA,CAAA,GAAA,EsBoED,CtBpEC,CAAA,EsBoEA,CtBpEA,GAAA,SAAA;KsBwExD,UtBxE8D,CAAA,CAAA,CAAA,GsBwE9C,MtBxE8C,CsBwEvC,YtBxEuC,EsBwEzB,CtBxEyB,CAAA;AAAS,iBsB0E5D,WAAA,CtB1E4D,IAAA,EsB0E1C,YtB1E0C,CAAA,EAAA,CAAA,UsB2ExD,UtB3EwD,CAAA,OAAA,CAAA,CAAA,CAAA,UAAA,EsB2EvB,CtB3EuB,EAAA,GsB2EG,CtB3EH,CsB2EK,YtB3EL,CAAA;AAAU,iBsB8EtE,YAAA,CtB9EsE,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA;AAAA,csBmFzE,kBAAA,GtBnFyE,SAAA;AAiBtE,iBsBoEA,YAAA,CtBpEyB,KAAA,EsBoEL,MtBpEK,CAAA,EsBoEI,MtBpEJ;AAC7B,iBsBoEI,YAAA,CtBpEJ,KAAA,EsBoEwB,UtBpExB,CAAA,EsBoEqC,UtBpErC;AACR,iBsByEY,eAAA,CtBzEZ,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;AAAM,iBsB6EM,qBAAA,CtB7EN,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;AAAS,iBsBqFG,KAAA,CtBrFH,EAAA,EAAA,MAAA,CAAA,EsBqFmB,OtBrFnB,CAAA,OAAA,CAAA;AACD,iBsBwFF,UAAA,CtBxFE,IAAA,EAAA,MAAA,EAAA,CAAA,EsBwFuB,WtBxFvB;AAAA,iBsB4FF,WtB5FE,CAAA,CAAA,CAAA,CAAA,CAAA,EsB4FgB,oBtB5FhB,CsB4FqC,CtB5FrC,CAAA,CAAA,EAAA,CAAA,IsB4F+C,sBtB5F/C,CsB4FsE,CtB5FtE,CAAA;AAiBF,iBsB+EA,UtB/EA,CAAA,CAA6B,CAAA,CAAA,CAAA,EsB+EZ,oBtB/EY,CsB+ES,CtB/ET,CAAA,CAAA,EAAA,CAAA,IsB+EmB,qBtB/EnB;AAAM,iBsBmFnC,uBAAA,CtBnFmC,MAAA,EAAA,MAAA,CAAA,EAAA,GAAA,EAAA;AAAQ,iBsBuF3C,mBAAA,CtBvF2C,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAA4B,iBsBqGvE,SAAA,CtBrGuE,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAAA,iBsBoHvE,aAAA,CtBpHuE,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,GAAA,CAAA,EAAA;EAMvE,CsB+Ge,IAAA,CtB/Gf,EAAA,OAAA;AAQhB,CAAA;AAA6C,iBsB0G7B,WAAA,CtB1G6B,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAAQ,iBsB8GrC,WAAA,CtB9GqC,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAA4B,iBsBkHjE,WAAA,CtBlHiE,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;KsBsH5E,WtBtH4E,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EsBsHhD,CtBtHgD,CAAA,MsBsHxC,CtBtHwC,CAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GsBsHpB,CtBtHoB;AAMjE,iBsBkHA,StBlHa,CAAA,UAAA,MAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EsBmHtB,CtBnHsB,EAAA,KAAA,EsBoHpB,WtBpHoB,CsBoHR,CtBpHQ,EsBoHL,CtBpHK,CAAA,CAAA,EAAA,QAAU,MsBqHtB,CtBrHsB,GsBqHlB,CtBrHkB,EAAgB;AAAK,iBsBiI5C,ctBjI4C,CAAA,CAAA,CAAA,CAAA,GAAA,EsBiIrB,CtBjIqB,CAAA,EAAA,QAAA,GAAA,IsBiIF,WtBjIE,CsBiIU,CtBjIV,CAAA;;AAK5D;AAQA;AAaA;;;iBsBiHgB,iBAAA;ArBrLA,iBqByLA,erBzLsB,CAAA,CAAA,CAAA,CAAA,KAAA,EqByLI,CrBzLJ,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,KAAA,IqByL0C,WrBzL1C,CqByLsD,CrBzLtD,CAAA;AAC7B,iBqB8LO,UAAA,CrB9LP,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AACC,iBqBiMM,WrBjMN,CAAA,CAAA,CAAA,CAAA,GAAA,EqBiM0B,CrBjM1B,EAAA,CAAA,EqBiM6B,CrBjM7B,EAAA;AAEP,iBqBmMa,4BAAA,CrBnMb,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAAK,iBqBuMQ,oBAAA,CrBvMR,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAAA,MAAA,GAAA,MAAA,EAAA"}
package/dist/index.js CHANGED
@@ -1340,7 +1340,6 @@ function getAssetDisplayName(asset) {
1340
1340
  case "sip9": return asset.name;
1341
1341
  case "stamp": return "stamp";
1342
1342
  case "src20": return "src-20";
1343
- case "stx20": return "stx-20";
1344
1343
  default: assertUnreachable(protocol);
1345
1344
  }
1346
1345
  }
@@ -1571,10 +1570,6 @@ function getAssetId(asset) {
1571
1570
  protocol: "src20",
1572
1571
  id: asset.id
1573
1572
  };
1574
- case "stx20": return {
1575
- protocol: "stx20",
1576
- id: asset.symbol
1577
- };
1578
1573
  case "inscription": return {
1579
1574
  protocol: "inscription",
1580
1575
  id: asset.id
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BigNumber","accountAddresses: AccountAddresses","BigNumber","currencyFormatterPresets: Record<\n CurrencyFormatterPreset,\n CurrencyFormatterPresetValue\n>","options: CurrencyFormatterPresetResult","locale","formatterOptions: Intl.NumberFormatOptions","result: string","result: FlattenedObject","BigNumber","result: Partial<{ [K in keyof T]: U }>"],"sources":["../src/counter.ts","../src/math/helpers.ts","../src/math/calculate-averages.ts","../src/math/fibonacci.ts","../src/math/scale-value.ts","../src/money/create-money.ts","../src/money/is-money.ts","../src/money/calculate-money.ts","../src/fiat-metadata.ts","../src/money/is-fiat-currency-code.ts","../src/money/unit-conversion.ts","../src/accounts/account-addresses.ts","../src/assets/sort-assets.ts","../src/assets/asset-display-name.ts","../src/assets/balance-helpers.ts","../src/time.ts","../src/assets/inscription-helpers.ts","../src/assets/asset-id.ts","../src/truncate-middle.ts","../src/market-data.ts","../src/currency-formatter/currency-formatter-presets.ts","../src/currency-formatter/currency-formatter.ts","../src/flatten-object.ts","../src/special-char.ts","../src/spam-filter/tlds-list.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts","../src/px-string-to-number/px-string-to-number.ts","../src/sanitize-content.ts","../src/index.ts"],"sourcesContent":["export function createCounter(startPosition = 0) {\n let count = startPosition;\n return {\n getValue() {\n return count;\n },\n increment() {\n return (count += 1);\n },\n incrementBy(amount: number) {\n return (count += amount);\n },\n decrement() {\n return (count -= 1);\n },\n };\n}\n","import BigNumber from 'bignumber.js';\n\nimport { isBigInt } from '..';\n\nexport function initBigNumber(num: string | number | BigNumber | bigint) {\n if (BigNumber.isBigNumber(num)) return num;\n return isBigInt(num) ? new BigNumber(num.toString()) : new BigNumber(num);\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nfunction isMultipleOf(multiple: number) {\n return (num: number) => num % multiple === 0;\n}\n\nexport function isEven(num: number) {\n return isMultipleOf(2)(num);\n}\n\nexport function countDecimals(num: string | number | BigNumber) {\n const LARGE_NUMBER_OF_DECIMALS = 100;\n BigNumber.config({ DECIMAL_PLACES: LARGE_NUMBER_OF_DECIMALS });\n const amount = initBigNumber(num);\n const decimals = amount.toString(10).split('.')[1];\n return decimals ? decimals.length : 0;\n}\n\nexport function increaseValueByOneMicroStx(value: string | number | BigNumber) {\n return new BigNumber(value).plus(0.000001).toNumber();\n}\n","import BigNumber from 'bignumber.js';\n\nimport { initBigNumber } from './helpers';\n\nexport function calculateMeanAverage(numbers: BigNumber[] | number[]) {\n if (numbers.length === 0) return new BigNumber(0);\n return numbers\n .map(initBigNumber)\n .reduce((acc, price) => acc.plus(price), new BigNumber(0))\n .dividedBy(numbers.length);\n}\n","function fibonacci(n = 0): number {\n if (n < 0) throw new Error('Cannot calculate from negative number');\n if (n < 2) return n;\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function* fibonacciGenerator(startIndex = 0): IterableIterator<number> {\n let index = startIndex;\n while (index < Infinity) yield fibonacci(index++);\n return Infinity;\n}\n","export function scaleValue(num: number): number {\n if (num === 0) return 0;\n const absNum = Math.abs(num);\n const exponent = Math.floor(Math.log10(absNum));\n const scale = Math.pow(10, exponent);\n const msd = Math.floor(absNum / scale);\n const result = msd * scale;\n // Fix floating point precision issues by rounding to 12 decimal places\n const rounded = Math.round(result * 1e12) / 1e12;\n return num < 0 ? -rounded : rounded;\n}\n","import BigNumber from 'bignumber.js';\n\nimport { currencyDecimalsMap } from '@leather.io/constants';\nimport type { Currency, Money, NumType } from '@leather.io/models';\n\nimport { isBigInt, isUndefined } from '..';\n\ntype KnownCurrencyDecimals = keyof typeof currencyDecimalsMap;\n\nfunction isResolutionOfCurrencyKnown(symbol: Currency): symbol is KnownCurrencyDecimals {\n return symbol in currencyDecimalsMap;\n}\n\nfunction getDecimalsOfSymbolIfKnown(symbol: Currency) {\n if (isResolutionOfCurrencyKnown(symbol)) return currencyDecimalsMap[symbol];\n return null;\n}\n\nfunction throwWhenDecimalUnknown(symbol: Currency, decimals?: number): asserts decimals is number {\n if (isUndefined(decimals) && isUndefined(getDecimalsOfSymbolIfKnown(symbol)))\n throw new Error(`Resolution of currency ${symbol} is unknown, must be described`);\n}\n\n/**\n * @param value Amount described in currency's primary unit\n * @param symbol Identifying letter code, e.g., EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoneyFromDecimal(\n value: NumType,\n symbol: Currency,\n resolution?: number\n): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value).shiftedBy(decimals);\n return Object.freeze({ amount, symbol, decimals });\n}\n\n/**\n * @param value Amount described in currency's fractional base unit, e.g., cents for USD amounts\n * @param symbol Identifying letter code, e.g., EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoney(value: NumType, symbol: Currency, resolution?: number): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value);\n return Object.freeze({ amount, symbol, decimals });\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\n\nimport { isObject } from '..';\n\nexport function isMoney(val: unknown): val is Money {\n if (!isObject(val)) return false;\n return 'amount' in val && 'symbol' in val && 'decimals' in val;\n}\n\nexport function isMoneyGreaterThanZero(money: Money) {\n if (!BigNumber.isBigNumber(money.amount)) return;\n return !(money.amount.isNaN() || money.amount.isZero());\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { type MarketData, type Money, type NumType, formatMarketPair } from '@leather.io/models';\n\nimport { isNumber } from '..';\nimport { initBigNumber } from '../math/helpers';\nimport { createMoney } from './create-money';\nimport { isMoney } from './is-money';\n\nexport function baseCurrencyAmountInQuoteWithFallback(quantity: Money, marketData?: MarketData) {\n return marketData ? baseCurrencyAmountInQuote(quantity, marketData) : createMoney(0, 'USD');\n}\n\nexport function baseCurrencyAmountInQuote(quantity: Money, { pair, price }: MarketData) {\n if (quantity.symbol !== pair.base)\n throw new Error(\n `Cannot calculate value of ${quantity.amount.toString()} ${quantity.symbol} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n return createMoney(\n convertAmountToFractionalUnit(\n convertAmountToBaseUnit(quantity).times(convertAmountToBaseUnit(price)),\n price.decimals\n ),\n pair.quote\n );\n}\n\nexport function quoteCurrencyAmountToBase(\n quantity: Money,\n { pair, price }: MarketData,\n decimals: number\n) {\n if (quantity.symbol !== pair.quote)\n throw new Error(\n `Cannot calculate value of ${quantity.amount.toString()} ${quantity.symbol} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n const baseAmount = quantity.amount\n .dividedBy(price.amount)\n .shiftedBy(decimals)\n .integerValue(BigNumber.ROUND_FLOOR);\n\n return createMoney(baseAmount, pair.base, decimals);\n}\n\nexport function convertAmountToFractionalUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(decimals);\n}\n\nexport function convertToMoneyTypeWithDefaultOfZero(\n symbol: string,\n num?: NumType,\n decimals?: number\n) {\n return createMoney(initBigNumber(num ?? 0), symbol.toUpperCase(), decimals);\n}\n\nexport function convertAmountToBaseUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(-num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(-decimals);\n}\n\nexport function subtractMoney(xAmount: Money, yAmount: Money) {\n if (xAmount.symbol !== yAmount.symbol) throw new Error('Cannot subtract different currencies');\n return createMoney(xAmount.amount.minus(yAmount.amount), xAmount.symbol, xAmount.decimals);\n}\n\nexport function sumMoney(moneysArr: Money[]) {\n if (moneysArr.some(item => item.symbol !== moneysArr[0].symbol))\n throw new Error('Cannot sum different currencies');\n\n const sum = moneysArr.reduce((acc, item) => acc.plus(item.amount), new BigNumber(0));\n return createMoney(sum, moneysArr[0].symbol, moneysArr[0].decimals);\n}\n\nexport function minMoney(moneyArr: Money[]) {\n if (moneyArr.length === 0) throw new Error('Cannot calculate min of empty array');\n\n const currency = moneyArr[0].symbol;\n if (!moneyArr.every(money => money.symbol === currency)) {\n throw new Error('Cannot calculate min of different currencies');\n }\n\n return moneyArr.reduce((smallest: Money, current: Money) => {\n return current.amount.isLessThan(smallest.amount) ? current : smallest;\n }, moneyArr[0]);\n}\n\nexport function maxMoney(moneyArr: Money[]) {\n if (moneyArr.length === 0) throw new Error('Cannot calculate max of empty array');\n\n const currency = moneyArr[0].symbol;\n if (!moneyArr.every(money => money.symbol === currency)) {\n throw new Error('Cannot calculate max of different currencies');\n }\n\n return moneyArr.reduce((largest: Money, current: Money) => {\n return current.amount.isGreaterThan(largest.amount) ? current : largest;\n }, moneyArr[0]);\n}\n","export const FIAT_METADATA = [\n {\n name: 'US Dollar',\n symbol: '$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'USD',\n namePlural: 'US dollars',\n },\n {\n name: 'Canadian Dollar',\n symbol: 'CA$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'CAD',\n namePlural: 'Canadian dollars',\n },\n {\n name: 'Euro',\n symbol: '€',\n symbolNative: '€',\n decimalDigits: 2,\n rounding: 0,\n code: 'EUR',\n namePlural: 'euros',\n },\n {\n name: 'United Arab Emirates Dirham',\n symbol: 'AED',\n symbolNative: 'د.إ.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'AED',\n namePlural: 'UAE dirhams',\n },\n {\n name: 'Afghan Afghani',\n symbol: 'Af',\n symbolNative: '؋',\n decimalDigits: 0,\n rounding: 0,\n code: 'AFN',\n namePlural: 'Afghan Afghanis',\n },\n {\n name: 'Albanian Lek',\n symbol: 'ALL',\n symbolNative: 'Lek',\n decimalDigits: 0,\n rounding: 0,\n code: 'ALL',\n namePlural: 'Albanian lekë',\n },\n {\n name: 'Armenian Dram',\n symbol: 'AMD',\n symbolNative: 'դր.',\n decimalDigits: 0,\n rounding: 0,\n code: 'AMD',\n namePlural: 'Armenian drams',\n },\n {\n name: 'Argentine Peso',\n symbol: 'AR$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'ARS',\n namePlural: 'Argentine pesos',\n },\n {\n name: 'Australian Dollar',\n symbol: 'AU$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'AUD',\n namePlural: 'Australian dollars',\n },\n {\n name: 'Azerbaijani Manat',\n symbol: 'man.',\n symbolNative: 'ман.',\n decimalDigits: 2,\n rounding: 0,\n code: 'AZN',\n namePlural: 'Azerbaijani manats',\n },\n {\n name: 'Bosnia-Herzegovina Convertible Mark',\n symbol: 'KM',\n symbolNative: 'KM',\n decimalDigits: 2,\n rounding: 0,\n code: 'BAM',\n namePlural: 'Bosnia-Herzegovina convertible marks',\n },\n {\n name: 'Bangladeshi Taka',\n symbol: 'Tk',\n symbolNative: '৳',\n decimalDigits: 2,\n rounding: 0,\n code: 'BDT',\n namePlural: 'Bangladeshi takas',\n },\n {\n name: 'Bulgarian Lev',\n symbol: 'BGN',\n symbolNative: 'лв.',\n decimalDigits: 2,\n rounding: 0,\n code: 'BGN',\n namePlural: 'Bulgarian leva',\n },\n {\n name: 'Bahraini Dinar',\n symbol: 'BD',\n symbolNative: 'د.ب.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'BHD',\n namePlural: 'Bahraini dinars',\n },\n {\n name: 'Burundian Franc',\n symbol: 'FBu',\n symbolNative: 'FBu',\n decimalDigits: 0,\n rounding: 0,\n code: 'BIF',\n namePlural: 'Burundian francs',\n },\n {\n name: 'Brunei Dollar',\n symbol: 'BN$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BND',\n namePlural: 'Brunei dollars',\n },\n {\n name: 'Bolivian Boliviano',\n symbol: 'Bs',\n symbolNative: 'Bs',\n decimalDigits: 2,\n rounding: 0,\n code: 'BOB',\n namePlural: 'Bolivian bolivianos',\n },\n {\n name: 'Brazilian Real',\n symbol: 'R$',\n symbolNative: 'R$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BRL',\n namePlural: 'Brazilian reals',\n },\n {\n name: 'Botswanan Pula',\n symbol: 'BWP',\n symbolNative: 'P',\n decimalDigits: 2,\n rounding: 0,\n code: 'BWP',\n namePlural: 'Botswanan pulas',\n },\n {\n name: 'Belarusian Ruble',\n symbol: 'Br',\n symbolNative: 'руб.',\n decimalDigits: 2,\n rounding: 0,\n code: 'BYN',\n namePlural: 'Belarusian rubles',\n },\n {\n name: 'Belize Dollar',\n symbol: 'BZ$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BZD',\n namePlural: 'Belize dollars',\n },\n {\n name: 'Congolese Franc',\n symbol: 'CDF',\n symbolNative: 'FrCD',\n decimalDigits: 2,\n rounding: 0,\n code: 'CDF',\n namePlural: 'Congolese francs',\n },\n {\n name: 'Swiss Franc',\n symbol: 'CHF',\n symbolNative: 'CHF',\n decimalDigits: 2,\n rounding: 0.05,\n code: 'CHF',\n namePlural: 'Swiss francs',\n },\n {\n name: 'Chilean Peso',\n symbol: 'CL$',\n symbolNative: '$',\n decimalDigits: 0,\n rounding: 0,\n code: 'CLP',\n namePlural: 'Chilean pesos',\n },\n {\n name: 'Chinese Yuan',\n symbol: 'CN¥',\n symbolNative: 'CN¥',\n decimalDigits: 2,\n rounding: 0,\n code: 'CNY',\n namePlural: 'Chinese yuan',\n },\n {\n name: 'Colombian Peso',\n symbol: 'CO$',\n symbolNative: '$',\n decimalDigits: 0,\n rounding: 0,\n code: 'COP',\n namePlural: 'Colombian pesos',\n },\n {\n name: 'Costa Rican Colón',\n symbol: '₡',\n symbolNative: '₡',\n decimalDigits: 0,\n rounding: 0,\n code: 'CRC',\n namePlural: 'Costa Rican colóns',\n },\n {\n name: 'Cape Verdean Escudo',\n symbol: 'CV$',\n symbolNative: 'CV$',\n decimalDigits: 2,\n rounding: 0,\n code: 'CVE',\n namePlural: 'Cape Verdean escudos',\n },\n {\n name: 'Czech Republic Koruna',\n symbol: 'Kč',\n symbolNative: 'Kč',\n decimalDigits: 2,\n rounding: 0,\n code: 'CZK',\n namePlural: 'Czech Republic korunas',\n },\n {\n name: 'Djiboutian Franc',\n symbol: 'Fdj',\n symbolNative: 'Fdj',\n decimalDigits: 0,\n rounding: 0,\n code: 'DJF',\n namePlural: 'Djiboutian francs',\n },\n {\n name: 'Danish Krone',\n symbol: 'Dkr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'DKK',\n namePlural: 'Danish kroner',\n },\n {\n name: 'Dominican Peso',\n symbol: 'RD$',\n symbolNative: 'RD$',\n decimalDigits: 2,\n rounding: 0,\n code: 'DOP',\n namePlural: 'Dominican pesos',\n },\n {\n name: 'Algerian Dinar',\n symbol: 'DA',\n symbolNative: 'د.ج.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'DZD',\n namePlural: 'Algerian dinars',\n },\n {\n name: 'Estonian Kroon',\n symbol: 'Ekr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'EEK',\n namePlural: 'Estonian kroons',\n },\n {\n name: 'Egyptian Pound',\n symbol: 'EGP',\n symbolNative: 'ج.م.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'EGP',\n namePlural: 'Egyptian pounds',\n },\n {\n name: 'Eritrean Nakfa',\n symbol: 'Nfk',\n symbolNative: 'Nfk',\n decimalDigits: 2,\n rounding: 0,\n code: 'ERN',\n namePlural: 'Eritrean nakfas',\n },\n {\n name: 'Ethiopian Birr',\n symbol: 'Br',\n symbolNative: 'Br',\n decimalDigits: 2,\n rounding: 0,\n code: 'ETB',\n namePlural: 'Ethiopian birrs',\n },\n {\n name: 'British Pound Sterling',\n symbol: '£',\n symbolNative: '£',\n decimalDigits: 2,\n rounding: 0,\n code: 'GBP',\n namePlural: 'British pounds sterling',\n },\n {\n name: 'Georgian Lari',\n symbol: 'GEL',\n symbolNative: 'GEL',\n decimalDigits: 2,\n rounding: 0,\n code: 'GEL',\n namePlural: 'Georgian laris',\n },\n {\n name: 'Ghanaian Cedi',\n symbol: 'GH₵',\n symbolNative: 'GH₵',\n decimalDigits: 2,\n rounding: 0,\n code: 'GHS',\n namePlural: 'Ghanaian cedis',\n },\n {\n name: 'Guinean Franc',\n symbol: 'FG',\n symbolNative: 'FG',\n decimalDigits: 0,\n rounding: 0,\n code: 'GNF',\n namePlural: 'Guinean francs',\n },\n {\n name: 'Guatemalan Quetzal',\n symbol: 'GTQ',\n symbolNative: 'Q',\n decimalDigits: 2,\n rounding: 0,\n code: 'GTQ',\n namePlural: 'Guatemalan quetzals',\n },\n {\n name: 'Hong Kong Dollar',\n symbol: 'HK$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'HKD',\n namePlural: 'Hong Kong dollars',\n },\n {\n name: 'Honduran Lempira',\n symbol: 'HNL',\n symbolNative: 'L',\n decimalDigits: 2,\n rounding: 0,\n code: 'HNL',\n namePlural: 'Honduran lempiras',\n },\n {\n name: 'Croatian Kuna',\n symbol: 'kn',\n symbolNative: 'kn',\n decimalDigits: 2,\n rounding: 0,\n code: 'HRK',\n namePlural: 'Croatian kunas',\n },\n {\n name: 'Hungarian Forint',\n symbol: 'Ft',\n symbolNative: 'Ft',\n decimalDigits: 0,\n rounding: 0,\n code: 'HUF',\n namePlural: 'Hungarian forints',\n },\n {\n name: 'Indonesian Rupiah',\n symbol: 'Rp',\n symbolNative: 'Rp',\n decimalDigits: 0,\n rounding: 0,\n code: 'IDR',\n namePlural: 'Indonesian rupiahs',\n },\n {\n name: 'Israeli New Sheqel',\n symbol: '₪',\n symbolNative: '₪',\n decimalDigits: 2,\n rounding: 0,\n code: 'ILS',\n namePlural: 'Israeli new sheqels',\n },\n {\n name: 'Indian Rupee',\n symbol: '₹',\n symbolNative: 'টকা',\n decimalDigits: 2,\n rounding: 0,\n code: 'INR',\n namePlural: 'Indian rupees',\n },\n {\n name: 'Iraqi Dinar',\n symbol: 'IQD',\n symbolNative: 'د.ع.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'IQD',\n namePlural: 'Iraqi dinars',\n },\n {\n name: 'Iranian Rial',\n symbol: 'IRR',\n symbolNative: '﷼',\n decimalDigits: 0,\n rounding: 0,\n code: 'IRR',\n namePlural: 'Iranian rials',\n },\n {\n name: 'Icelandic Króna',\n symbol: 'Ikr',\n symbolNative: 'kr',\n decimalDigits: 0,\n rounding: 0,\n code: 'ISK',\n namePlural: 'Icelandic krónur',\n },\n {\n name: 'Jamaican Dollar',\n symbol: 'J$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'JMD',\n namePlural: 'Jamaican dollars',\n },\n {\n name: 'Jordanian Dinar',\n symbol: 'JD',\n symbolNative: 'د.أ.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'JOD',\n namePlural: 'Jordanian dinars',\n },\n {\n name: 'Japanese Yen',\n symbol: '¥',\n symbolNative: '¥',\n decimalDigits: 0,\n rounding: 0,\n code: 'JPY',\n namePlural: 'Japanese yen',\n },\n {\n name: 'Kenyan Shilling',\n symbol: 'Ksh',\n symbolNative: 'Ksh',\n decimalDigits: 2,\n rounding: 0,\n code: 'KES',\n namePlural: 'Kenyan shillings',\n },\n {\n name: 'Cambodian Riel',\n symbol: 'KHR',\n symbolNative: '៛',\n decimalDigits: 2,\n rounding: 0,\n code: 'KHR',\n namePlural: 'Cambodian riels',\n },\n {\n name: 'Comorian Franc',\n symbol: 'CF',\n symbolNative: 'FC',\n decimalDigits: 0,\n rounding: 0,\n code: 'KMF',\n namePlural: 'Comorian francs',\n },\n {\n name: 'South Korean Won',\n symbol: '₩',\n symbolNative: '₩',\n decimalDigits: 0,\n rounding: 0,\n code: 'KRW',\n namePlural: 'South Korean won',\n },\n {\n name: 'Kuwaiti Dinar',\n symbol: 'KD',\n symbolNative: 'د.ك.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'KWD',\n namePlural: 'Kuwaiti dinars',\n },\n {\n name: 'Kazakhstani Tenge',\n symbol: 'KZT',\n symbolNative: 'тңг.',\n decimalDigits: 2,\n rounding: 0,\n code: 'KZT',\n namePlural: 'Kazakhstani tenges',\n },\n {\n name: 'Lebanese Pound',\n symbol: 'LB£',\n symbolNative: 'ل.ل.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'LBP',\n namePlural: 'Lebanese pounds',\n },\n {\n name: 'Sri Lankan Rupee',\n symbol: 'SLRs',\n symbolNative: 'SL Re',\n decimalDigits: 2,\n rounding: 0,\n code: 'LKR',\n namePlural: 'Sri Lankan rupees',\n },\n {\n name: 'Lithuanian Litas',\n symbol: 'Lt',\n symbolNative: 'Lt',\n decimalDigits: 2,\n rounding: 0,\n code: 'LTL',\n namePlural: 'Lithuanian litai',\n },\n {\n name: 'Latvian Lats',\n symbol: 'Ls',\n symbolNative: 'Ls',\n decimalDigits: 2,\n rounding: 0,\n code: 'LVL',\n namePlural: 'Latvian lati',\n },\n {\n name: 'Libyan Dinar',\n symbol: 'LD',\n symbolNative: 'د.ل.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'LYD',\n namePlural: 'Libyan dinars',\n },\n {\n name: 'Moroccan Dirham',\n symbol: 'MAD',\n symbolNative: 'د.م.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'MAD',\n namePlural: 'Moroccan dirhams',\n },\n {\n name: 'Moldovan Leu',\n symbol: 'MDL',\n symbolNative: 'MDL',\n decimalDigits: 2,\n rounding: 0,\n code: 'MDL',\n namePlural: 'Moldovan lei',\n },\n {\n name: 'Malagasy Ariary',\n symbol: 'MGA',\n symbolNative: 'MGA',\n decimalDigits: 0,\n rounding: 0,\n code: 'MGA',\n namePlural: 'Malagasy Ariaries',\n },\n {\n name: 'Macedonian Denar',\n symbol: 'MKD',\n symbolNative: 'MKD',\n decimalDigits: 2,\n rounding: 0,\n code: 'MKD',\n namePlural: 'Macedonian denari',\n },\n {\n name: 'Myanma Kyat',\n symbol: 'MMK',\n symbolNative: 'K',\n decimalDigits: 0,\n rounding: 0,\n code: 'MMK',\n namePlural: 'Myanma kyats',\n },\n {\n name: 'Macanese Pataca',\n symbol: 'MOP$',\n symbolNative: 'MOP$',\n decimalDigits: 2,\n rounding: 0,\n code: 'MOP',\n namePlural: 'Macanese patacas',\n },\n {\n name: 'Mauritian Rupee',\n symbol: 'MURs',\n symbolNative: 'MURs',\n decimalDigits: 0,\n rounding: 0,\n code: 'MUR',\n namePlural: 'Mauritian rupees',\n },\n {\n name: 'Mexican Peso',\n symbol: 'MX$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'MXN',\n namePlural: 'Mexican pesos',\n },\n {\n name: 'Malaysian Ringgit',\n symbol: 'RM',\n symbolNative: 'RM',\n decimalDigits: 2,\n rounding: 0,\n code: 'MYR',\n namePlural: 'Malaysian ringgits',\n },\n {\n name: 'Mozambican Metical',\n symbol: 'MTn',\n symbolNative: 'MTn',\n decimalDigits: 2,\n rounding: 0,\n code: 'MZN',\n namePlural: 'Mozambican meticals',\n },\n {\n name: 'Namibian Dollar',\n symbol: 'N$',\n symbolNative: 'N$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NAD',\n namePlural: 'Namibian dollars',\n },\n {\n name: 'Nigerian Naira',\n symbol: '₦',\n symbolNative: '₦',\n decimalDigits: 2,\n rounding: 0,\n code: 'NGN',\n namePlural: 'Nigerian nairas',\n },\n {\n name: 'Nicaraguan Córdoba',\n symbol: 'C$',\n symbolNative: 'C$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NIO',\n namePlural: 'Nicaraguan córdobas',\n },\n {\n name: 'Norwegian Krone',\n symbol: 'Nkr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'NOK',\n namePlural: 'Norwegian kroner',\n },\n {\n name: 'Nepalese Rupee',\n symbol: 'NPRs',\n symbolNative: 'नेरू',\n decimalDigits: 2,\n rounding: 0,\n code: 'NPR',\n namePlural: 'Nepalese rupees',\n },\n {\n name: 'New Zealand Dollar',\n symbol: 'NZ$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NZD',\n namePlural: 'New Zealand dollars',\n },\n {\n name: 'Omani Rial',\n symbol: 'OMR',\n symbolNative: 'ر.ع.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'OMR',\n namePlural: 'Omani rials',\n },\n {\n name: 'Panamanian Balboa',\n symbol: 'B/.',\n symbolNative: 'B/.',\n decimalDigits: 2,\n rounding: 0,\n code: 'PAB',\n namePlural: 'Panamanian balboas',\n },\n {\n name: 'Peruvian Nuevo Sol',\n symbol: 'S/.',\n symbolNative: 'S/.',\n decimalDigits: 2,\n rounding: 0,\n code: 'PEN',\n namePlural: 'Peruvian nuevos soles',\n },\n {\n name: 'Philippine Peso',\n symbol: '₱',\n symbolNative: '₱',\n decimalDigits: 2,\n rounding: 0,\n code: 'PHP',\n namePlural: 'Philippine pesos',\n },\n {\n name: 'Pakistani Rupee',\n symbol: 'PKRs',\n symbolNative: '₨',\n decimalDigits: 0,\n rounding: 0,\n code: 'PKR',\n namePlural: 'Pakistani rupees',\n },\n {\n name: 'Polish Zloty',\n symbol: 'zł',\n symbolNative: 'zł',\n decimalDigits: 2,\n rounding: 0,\n code: 'PLN',\n namePlural: 'Polish zlotys',\n },\n {\n name: 'Paraguayan Guarani',\n symbol: '₲',\n symbolNative: '₲',\n decimalDigits: 0,\n rounding: 0,\n code: 'PYG',\n namePlural: 'Paraguayan guaranis',\n },\n {\n name: 'Qatari Rial',\n symbol: 'QR',\n symbolNative: 'ر.ق.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'QAR',\n namePlural: 'Qatari rials',\n },\n {\n name: 'Romanian Leu',\n symbol: 'RON',\n symbolNative: 'RON',\n decimalDigits: 2,\n rounding: 0,\n code: 'RON',\n namePlural: 'Romanian lei',\n },\n {\n name: 'Serbian Dinar',\n symbol: 'din.',\n symbolNative: 'дин.',\n decimalDigits: 0,\n rounding: 0,\n code: 'RSD',\n namePlural: 'Serbian dinars',\n },\n {\n name: 'Russian Ruble',\n symbol: 'RUB',\n symbolNative: '₽.',\n decimalDigits: 2,\n rounding: 0,\n code: 'RUB',\n namePlural: 'Russian rubles',\n },\n {\n name: 'Rwandan Franc',\n symbol: 'RWF',\n symbolNative: 'FR',\n decimalDigits: 0,\n rounding: 0,\n code: 'RWF',\n namePlural: 'Rwandan francs',\n },\n {\n name: 'Saudi Riyal',\n symbol: 'SR',\n symbolNative: 'ر.س.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'SAR',\n namePlural: 'Saudi riyals',\n },\n {\n name: 'Sudanese Pound',\n symbol: 'SDG',\n symbolNative: 'SDG',\n decimalDigits: 2,\n rounding: 0,\n code: 'SDG',\n namePlural: 'Sudanese pounds',\n },\n {\n name: 'Swedish Krona',\n symbol: 'Skr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'SEK',\n namePlural: 'Swedish kronor',\n },\n {\n name: 'Singapore Dollar',\n symbol: 'S$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'SGD',\n namePlural: 'Singapore dollars',\n },\n {\n name: 'Somali Shilling',\n symbol: 'Ssh',\n symbolNative: 'Ssh',\n decimalDigits: 0,\n rounding: 0,\n code: 'SOS',\n namePlural: 'Somali shillings',\n },\n {\n name: 'Syrian Pound',\n symbol: 'SY£',\n symbolNative: 'ل.س.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'SYP',\n namePlural: 'Syrian pounds',\n },\n {\n name: 'Thai Baht',\n symbol: '฿',\n symbolNative: '฿',\n decimalDigits: 2,\n rounding: 0,\n code: 'THB',\n namePlural: 'Thai baht',\n },\n {\n name: 'Tunisian Dinar',\n symbol: 'DT',\n symbolNative: 'د.ت.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'TND',\n namePlural: 'Tunisian dinars',\n },\n {\n name: 'Tongan Paʻanga',\n symbol: 'T$',\n symbolNative: 'T$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TOP',\n namePlural: 'Tongan paʻanga',\n },\n {\n name: 'Turkish Lira',\n symbol: 'TL',\n symbolNative: 'TL',\n decimalDigits: 2,\n rounding: 0,\n code: 'TRY',\n namePlural: 'Turkish Lira',\n },\n {\n name: 'Trinidad and Tobago Dollar',\n symbol: 'TT$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TTD',\n namePlural: 'Trinidad and Tobago dollars',\n },\n {\n name: 'New Taiwan Dollar',\n symbol: 'NT$',\n symbolNative: 'NT$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TWD',\n namePlural: 'New Taiwan dollars',\n },\n {\n name: 'Tanzanian Shilling',\n symbol: 'TSh',\n symbolNative: 'TSh',\n decimalDigits: 0,\n rounding: 0,\n code: 'TZS',\n namePlural: 'Tanzanian shillings',\n },\n {\n name: 'Ukrainian Hryvnia',\n symbol: '₴',\n symbolNative: '₴',\n decimalDigits: 2,\n rounding: 0,\n code: 'UAH',\n namePlural: 'Ukrainian hryvnias',\n },\n {\n name: 'Ugandan Shilling',\n symbol: 'USh',\n symbolNative: 'USh',\n decimalDigits: 0,\n rounding: 0,\n code: 'UGX',\n namePlural: 'Ugandan shillings',\n },\n {\n name: 'Uruguayan Peso',\n symbol: '$U',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'UYU',\n namePlural: 'Uruguayan pesos',\n },\n {\n name: 'Uzbekistan Som',\n symbol: 'UZS',\n symbolNative: 'UZS',\n decimalDigits: 0,\n rounding: 0,\n code: 'UZS',\n namePlural: 'Uzbekistan som',\n },\n {\n name: 'Venezuelan Bolívar',\n symbol: 'Bs.F.',\n symbolNative: 'Bs.F.',\n decimalDigits: 2,\n rounding: 0,\n code: 'VEF',\n namePlural: 'Venezuelan bolívars',\n },\n {\n name: 'Vietnamese Dong',\n symbol: '₫',\n symbolNative: '₫',\n decimalDigits: 0,\n rounding: 0,\n code: 'VND',\n namePlural: 'Vietnamese dong',\n },\n {\n name: 'CFA Franc BEAC',\n symbol: 'FCFA',\n symbolNative: 'FCFA',\n decimalDigits: 0,\n rounding: 0,\n code: 'XAF',\n namePlural: 'CFA francs BEAC',\n },\n {\n name: 'CFA Franc BCEAO',\n symbol: 'CFA',\n symbolNative: 'CFA',\n decimalDigits: 0,\n rounding: 0,\n code: 'XOF',\n namePlural: 'CFA francs BCEAO',\n },\n {\n name: 'Yemeni Rial',\n symbol: 'YR',\n symbolNative: 'ر.ي.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'YER',\n namePlural: 'Yemeni rials',\n },\n {\n name: 'South African Rand',\n symbol: 'R',\n symbolNative: 'R',\n decimalDigits: 2,\n rounding: 0,\n code: 'ZAR',\n namePlural: 'South African rand',\n },\n {\n name: 'Zambian Kwacha',\n symbol: 'ZK',\n symbolNative: 'ZK',\n decimalDigits: 0,\n rounding: 0,\n code: 'ZMK',\n namePlural: 'Zambian kwachas',\n },\n {\n name: 'Zimbabwean Dollar',\n symbol: 'ZWL$',\n symbolNative: 'ZWL$',\n decimalDigits: 0,\n rounding: 0,\n code: 'ZWL',\n namePlural: 'Zimbabwean Dollar',\n },\n];\n","import { FIAT_METADATA } from '../fiat-metadata';\n\nconst fiatCurrencyCodeList = new Set(FIAT_METADATA.map(currency => currency.code));\n\nexport function isFiatCurrencyCode(code: string) {\n return fiatCurrencyCodeList.has(code);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { BTC_DECIMALS, STX_DECIMALS } from '@leather.io/constants';\nimport { Money } from '@leather.io/models';\n\nimport { initBigNumber } from '../math/helpers';\n\nfunction fractionalUnitToUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(-decimals);\n };\n}\n\nexport function unitToFractionalUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(decimals);\n };\n}\n\nexport const satToBtc = fractionalUnitToUnit(BTC_DECIMALS);\nexport const btcToSat = unitToFractionalUnit(BTC_DECIMALS);\n\nexport const microStxToStx = fractionalUnitToUnit(STX_DECIMALS);\nexport const stxToMicroStx = unitToFractionalUnit(STX_DECIMALS);\n\nexport function moneyToBaseUnit(sum: Money) {\n return fractionalUnitToUnit(sum.decimals)(sum.amount);\n}\n","import {\n AccountAddresses,\n AccountId,\n BitcoinAddressInfo,\n StacksAddressInfo,\n} from '@leather.io/models';\n\nexport function createAccountAddresses(\n accountId: AccountId,\n btcDescriptors: string[] = [],\n stxAddress?: string\n): AccountAddresses {\n const accountAddresses: AccountAddresses = { id: accountId };\n const taprootDescriptor = btcDescriptors.find(desc => desc.startsWith('tr('));\n const nativeSegwitDescriptor = btcDescriptors.find(desc => desc.startsWith('wpkh('));\n if (taprootDescriptor && nativeSegwitDescriptor) {\n accountAddresses.bitcoin = {\n taprootDescriptor,\n nativeSegwitDescriptor,\n };\n }\n if (stxAddress) {\n accountAddresses.stacks = { stxAddress };\n }\n return accountAddresses;\n}\n\nexport function hasBitcoinAddress(\n account: AccountAddresses\n): account is AccountAddresses & { bitcoin: BitcoinAddressInfo } {\n return account.bitcoin !== undefined;\n}\n\nexport function hasStacksAddress(\n account: AccountAddresses\n): account is AccountAddresses & { stacks: StacksAddressInfo } {\n return account.stacks !== undefined;\n}\n","import type { Money } from '@leather.io/models';\n\nexport function sortAssetsByName<T extends { name: string }[]>(assets: T) {\n return assets\n .sort((a, b) => {\n if (a.name < b.name) return -1;\n if (a.name > b.name) return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'STX') return -1;\n if (b.name !== 'STX') return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'BTC') return -1;\n if (b.name !== 'BTC') return 1;\n return 0;\n });\n}\n\nexport function migratePositiveAssetBalancesToTop<T extends { balance: Money }[]>(assets: T) {\n const assetsWithPositiveBalance = assets.filter(asset => asset.balance.amount.isGreaterThan(0));\n const assetsWithZeroBalance = assets.filter(asset => asset.balance.amount.isEqualTo(0));\n return [...assetsWithPositiveBalance, ...assetsWithZeroBalance] as T;\n}\n","import { CryptoAsset } from '@leather.io/models';\n\nimport { assertUnreachable } from '../index';\n\nexport function getAssetDisplayName(asset: CryptoAsset) {\n const { protocol } = asset;\n\n switch (protocol) {\n case 'nativeBtc':\n return 'bitcoin';\n case 'nativeStx':\n return 'stacks';\n case 'brc20':\n return 'brc-20';\n case 'inscription':\n return 'inscription';\n case 'rune':\n return 'rune';\n case 'sip10':\n return asset.name;\n case 'sip9':\n return asset.name;\n case 'stamp':\n return 'stamp';\n case 'src20':\n return 'src-20';\n case 'stx20':\n return 'stx-20';\n default:\n assertUnreachable(protocol);\n }\n}\n","import { BaseCryptoAssetBalance, BtcBalance, Money, StxBalance } from '@leather.io/models';\n\nimport { createMoney, subtractMoney, sumMoney } from '../money';\n\nexport function createBaseCryptoAssetBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money\n): BaseCryptoAssetBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n return {\n totalBalance,\n inboundBalance,\n outboundBalance,\n pendingBalance: subtractMoney(sumMoney([totalBalance, inboundBalance]), outboundBalance),\n availableBalance: subtractMoney(totalBalance, outboundBalance),\n };\n}\n\nexport function createBtcBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money,\n protectedBal?: Money,\n dustBal?: Money,\n unspendableBal?: Money\n): BtcBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n const protectedBalance = protectedBal ?? zeroBalance;\n const dustBalance = dustBal ?? zeroBalance;\n const unspendableBalance = unspendableBal ?? zeroBalance;\n const baseBalance = createBaseCryptoAssetBalance(totalBalance, inboundBalance, outboundBalance);\n return {\n ...baseBalance,\n protectedBalance,\n dustBalance,\n availableBalance: subtractMoney(totalBalance, unspendableBalance),\n unspendableBalance,\n };\n}\n\nexport function createStxBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money,\n lockedBal?: Money\n): StxBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n const lockedBalance = lockedBal ?? zeroBalance;\n const baseBalance = createBaseCryptoAssetBalance(totalBalance, inboundBalance, outboundBalance);\n const availableBalance = subtractMoney(totalBalance, outboundBalance);\n return {\n ...baseBalance,\n lockedBalance,\n unlockedBalance: subtractMoney(totalBalance, lockedBalance),\n availableBalance,\n availableUnlockedBalance: subtractMoney(availableBalance, lockedBalance),\n };\n}\n\nexport function aggregateBaseCryptoAssetBalances(\n balances: BaseCryptoAssetBalance[]\n): BaseCryptoAssetBalance {\n return createBaseCryptoAssetBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance))\n );\n}\n\nexport function aggregateBtcBalances(balances: BtcBalance[]): BtcBalance {\n return createBtcBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance)),\n sumMoney(balances.map(b => b.protectedBalance)),\n sumMoney(balances.map(b => b.dustBalance)),\n sumMoney(balances.map(b => b.unspendableBalance))\n );\n}\n\nexport function aggregateStxBalances(balances: StxBalance[]): StxBalance {\n return createStxBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance)),\n sumMoney(balances.map(b => b.lockedBalance))\n );\n}\n","// WARNING: When using `setTimeout` method, there is an upper maximum\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#maximum_delay_value\nexport const oneMinInMs = 60 * 1000;\nexport const fiveMinInMs = 5 * oneMinInMs;\nexport const oneDayInMs = 24 * 60 * 60 * 1000;\nexport const oneWeekInMs = 7 * oneDayInMs;\n\nexport function dateToUnixTimestamp(date: Date): number {\n return Math.floor(date.getTime() / 1000);\n}\n\nexport function weeksInMs(weeks: number) {\n return daysInMs(weeks * 7);\n}\n\nexport function daysInMs(days: number) {\n return hoursInMs(days * 24);\n}\n\nexport function hoursInMs(hours: number) {\n return minutesInMs(hours * 60);\n}\n\nexport function minutesInMs(minutes: number) {\n return secondsInMs(minutes * 60);\n}\n\nexport function secondsInMs(seconds: number) {\n return seconds * 1000;\n}\n\nexport function weeksInSec(weeks: number) {\n return daysInSec(weeks * 7);\n}\n\nexport function daysInSec(days: number) {\n return hoursInSec(days * 24);\n}\n\nexport function hoursInSec(hours: number) {\n return minutesInSec(hours * 60);\n}\n\nexport function minutesInSec(minutes: number) {\n return minutes * 60;\n}\n","import { ORD_IO_URL } from '@leather.io/constants';\nimport {\n CryptoAssetCategories,\n CryptoAssetChains,\n CryptoAssetProtocols,\n InscriptionAsset,\n InscriptionMimeType,\n} from '@leather.io/models';\n\nimport { dateToUnixTimestamp } from '../time';\n\nexport function whenInscriptionMimeType<T>(\n mimeType: string,\n branches: { [k in InscriptionMimeType]?: () => T }\n) {\n if (mimeType.startsWith('audio/') && branches.audio) {\n return branches.audio();\n }\n if (mimeType.startsWith('text/html') && branches.html) {\n return branches.html();\n }\n if (mimeType.startsWith('image/svg') && branches.svg) {\n return branches.svg();\n }\n if (mimeType.startsWith('image/') && branches.image) {\n return branches.image();\n }\n if (mimeType.startsWith('text') && branches.text) {\n return branches.text();\n }\n if (mimeType.startsWith('video/') && branches.video) {\n return branches.video();\n }\n if (mimeType.startsWith('model/gltf') && branches.gltf) {\n return branches.gltf();\n }\n if (branches.other) return branches.other();\n\n throw new Error('Unhandled inscription type');\n}\n\nexport interface CreateInscriptionData {\n readonly id: string;\n readonly number: number;\n readonly contentSrc: string;\n readonly mimeType?: string;\n readonly ownerAddress: string;\n readonly satPoint: string;\n readonly genesisBlockHash: string;\n readonly genesisTimestamp: string | number;\n readonly genesisBlockHeight: number;\n readonly outputValue: string;\n readonly thumbnailSrc?: string;\n}\n\nexport function createInscriptionAsset(data: CreateInscriptionData): InscriptionAsset {\n const ordinalPreviewSrc = `https://ordinals.com/preview/${data.id}`;\n const ordIoSrc = `${ORD_IO_URL}/content/${data.id}`;\n const thumbnailSrc = data.thumbnailSrc ?? ordinalPreviewSrc;\n const primarySrc = data.contentSrc || ordinalPreviewSrc;\n const preview = `https://ordinals.hiro.so/inscription/${data.id}`;\n const title = `Inscription ${data.number}`;\n const [txid, output, offset] = data.satPoint.split(':');\n\n const sharedInfo = {\n chain: CryptoAssetChains.bitcoin,\n category: CryptoAssetCategories.nft,\n protocol: CryptoAssetProtocols.inscription,\n id: data.id,\n number: data.number,\n output,\n txid,\n offset,\n address: data.ownerAddress,\n preview,\n title,\n genesisBlockHeight: data.genesisBlockHeight,\n genesisBlockHash: data.genesisBlockHash,\n genesisTimestamp: dateToUnixTimestamp(new Date(data.genesisTimestamp)),\n value: data.outputValue,\n thumbnailSrc,\n };\n\n if (!data.mimeType) {\n return {\n ...sharedInfo,\n mimeType: 'other',\n src: '',\n };\n }\n\n return whenInscriptionMimeType<InscriptionAsset>(data.mimeType, {\n audio: () => ({\n ...sharedInfo,\n mimeType: 'audio',\n name: 'inscription',\n src: primarySrc,\n }),\n gltf: () => ({\n ...sharedInfo,\n mimeType: 'gltf',\n name: 'inscription',\n src: primarySrc,\n }),\n html: () => ({\n ...sharedInfo,\n mimeType: 'html',\n name: 'inscription',\n thumbnailSrc: ordIoSrc,\n src: primarySrc,\n }),\n image: () => ({\n ...sharedInfo,\n mimeType: 'image',\n name: 'inscription',\n thumbnailSrc: ordIoSrc,\n src: primarySrc,\n }),\n svg: () => ({\n ...sharedInfo,\n mimeType: 'svg',\n name: 'inscription',\n src: primarySrc,\n }),\n text: () => ({\n ...sharedInfo,\n mimeType: 'text',\n name: 'inscription',\n src: data.contentSrc,\n }),\n video: () => ({\n ...sharedInfo,\n mimeType: 'video',\n name: 'inscription',\n src: primarySrc,\n }),\n other: () => ({\n ...sharedInfo,\n mimeType: 'other',\n name: 'inscription',\n src: data.contentSrc ?? '',\n }),\n });\n}\n","import {\n CryptoAsset,\n CryptoAssetId,\n CryptoAssetProtocol,\n CryptoAssetProtocols,\n Sip9Asset,\n} from '@leather.io/models';\n\nimport { assertUnreachable } from '../index';\n\nexport function matchesAssetId(asset: CryptoAsset, assetId: CryptoAssetId) {\n const assetIdentifier = getAssetId(asset);\n return isSameAssetId(assetIdentifier, assetId);\n}\n\nexport function isSameAssetId(assetId1: CryptoAssetId, assetId2: CryptoAssetId) {\n return assetId1.protocol === assetId2.protocol && assetId1.id === assetId2.id;\n}\n\nexport function isSameAsset(asset1: CryptoAsset, asset2: CryptoAsset) {\n return isSameAssetId(getAssetId(asset1), getAssetId(asset2));\n}\n\nexport function getAssetId(asset: CryptoAsset): CryptoAssetId {\n switch (asset.protocol) {\n case 'nativeBtc':\n return {\n protocol: 'nativeBtc',\n id: asset.symbol,\n };\n case 'nativeStx':\n return {\n protocol: 'nativeStx',\n id: asset.symbol,\n };\n case 'sip10':\n return {\n protocol: 'sip10',\n id: asset.assetId,\n };\n case 'rune':\n return {\n protocol: 'rune',\n id: asset.runeName,\n };\n case 'brc20':\n return {\n protocol: 'brc20',\n id: asset.symbol,\n };\n case 'src20':\n return {\n protocol: 'src20',\n id: asset.id,\n };\n case 'stx20':\n return {\n protocol: 'stx20',\n id: asset.symbol,\n };\n case 'inscription':\n return {\n protocol: 'inscription',\n id: asset.id,\n };\n case 'stamp':\n return {\n protocol: 'stamp',\n id: asset.stamp.toString(),\n };\n case 'sip9':\n return createSip9AssetId(asset);\n default:\n assertUnreachable(asset);\n }\n}\n\nexport function createSip9AssetId(asset: Sip9Asset): CryptoAssetId {\n return {\n protocol: asset.protocol,\n id: formatSip9IdField(asset),\n };\n}\n\nexport function formatSip9IdField(asset: Sip9Asset) {\n return `${asset.assetId}|${asset.tokenId}`;\n}\n\nexport function parseSip9IdField(id: string) {\n const [assetId, tokenId] = id.split('|');\n return { assetId, tokenId: Number(tokenId) };\n}\n\nexport type SerializedCryptoAssetId = `${string}|${string}`;\n\nexport function serializeAssetId(assetId: CryptoAssetId): SerializedCryptoAssetId {\n return `${assetId.protocol}|${assetId.id}`;\n}\n\nexport function deserializeAssetId(serializedAssetId: SerializedCryptoAssetId): CryptoAssetId {\n const [protocol, ...idParts] = serializedAssetId.split('|');\n const id = idParts.join('|');\n if (!Object.keys(CryptoAssetProtocols).includes(protocol)) {\n throw new Error(`Unrecognized Asset Protocol: ${protocol}`);\n }\n\n return {\n protocol: protocol as CryptoAssetProtocol,\n id,\n };\n}\n","function truncateHex(hex: string, offset = 5): string {\n return `${hex.substring(0, offset + 2)}…${hex.substring(hex.length - offset)}`;\n}\n\nexport function truncateMiddle(input: string, offset = 5): string {\n if (!input) return '';\n // Hex\n if (input.startsWith('0x')) {\n return truncateHex(input, offset);\n }\n // For contracts\n if (input.includes('.')) {\n const parts = input.split('.');\n const start = parts[0]?.substring(0, offset);\n const end = parts[0]?.substring(parts[0].length - offset, parts[0].length);\n return `${start}…${end}.${parts[1]}`;\n } else {\n // Everything else\n const start = input?.substring(0, offset);\n const end = input?.substring(input.length - offset, input.length);\n return `${start}…${end}`;\n }\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { currencyDecimalsMap, currencyNameMap } from '@leather.io/constants';\nimport { type MarketData, createMarketData, createMarketPair } from '@leather.io/models';\n\nimport { convertAmountToBaseUnit, convertAmountToFractionalUnit } from './money/calculate-money';\nimport { createMoney } from './money/create-money';\n\n/**\n * Rebases MarketData to a different quote currency using exchange rate.\n *\n * @param marketData - e.g. STX/USD\n * @param exchangeRate - e.g. EUR/USD (EUR is target quote currency)\n * @returns e.g. STX/EUR\n */\nexport function rebaseMarketData(marketData: MarketData, exchangeRate: MarketData): MarketData {\n if (exchangeRate.pair.quote !== marketData.pair.quote) {\n throw new Error(\n `Exchange rate quote currency (${exchangeRate.pair.quote}) must match original quote currency (${marketData.pair.quote})`\n );\n }\n\n const targetQuoteCurrency = exchangeRate.pair.base;\n if (!(targetQuoteCurrency in currencyNameMap)) {\n throw new Error(`Target currency must be a supported quote currency: ${targetQuoteCurrency}`);\n }\n\n const rebasedPrice = createMoney(\n convertAmountToFractionalUnit(\n marketData.price.amount.dividedBy(exchangeRate.price.amount),\n currencyDecimalsMap[targetQuoteCurrency]\n ),\n targetQuoteCurrency\n );\n\n return createMarketData(\n createMarketPair(marketData.pair.base, targetQuoteCurrency),\n rebasedPrice\n );\n}\n\n/**\n * Inverts exchange rate market data by swapping base/quote currencies (e.g. USD/EUR -> EUR/USD)\n */\nexport function invertExchangeRate(exchangeRate: MarketData): MarketData {\n if (!(exchangeRate.pair.base in currencyNameMap)) {\n throw new Error(`Base currency must be a supported quote currency: ${exchangeRate.pair.base}`);\n }\n\n const invertedPrice = createMoney(\n convertAmountToFractionalUnit(\n new BigNumber(1).dividedBy(convertAmountToBaseUnit(exchangeRate.price)),\n currencyDecimalsMap[exchangeRate.pair.base]\n ),\n exchangeRate.pair.base\n );\n\n return createMarketData(\n createMarketPair(exchangeRate.pair.quote, exchangeRate.pair.base),\n invertedPrice\n );\n}\n","import { isFiatCurrencyCode } from '../money';\nimport {\n CurrencyFormatterPreset,\n CurrencyFormatterPresetResult,\n CurrencyFormatterPresetValue,\n} from './currency-formatter.types';\n\nexport const currencyFormatterPresets: Record<\n CurrencyFormatterPreset,\n CurrencyFormatterPresetValue\n> = {\n price: input => {\n const options: CurrencyFormatterPresetResult = {\n compactThreshold: Infinity,\n approximateDust: false,\n showCurrency: true,\n numberFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n } as const;\n\n if (input.amount >= 0 && input.amount <= 99) {\n options.numberFormatOptions = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 6,\n };\n }\n\n return options;\n },\n 'shorthand-balance': input => {\n function getMaximumFractionDigits() {\n if (isFiatCurrencyCode(input.currencyCode)) {\n return 2;\n }\n\n return input.amount < 0.001 ? input.decimals : 4;\n }\n\n return {\n showCurrency: isFiatCurrencyCode(input.currencyCode),\n numberFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: getMaximumFractionDigits(),\n },\n };\n },\n 'pad-decimals': input => ({\n compactThreshold: Infinity,\n numberFormatOptions: {\n minimumFractionDigits: input.decimals,\n maximumFractionDigits: input.decimals,\n },\n }),\n};\n","import { isFiatCurrencyCode } from '../money';\nimport { currencyFormatterPresets } from './currency-formatter-presets';\nimport {\n CurrencyFormatterPreset,\n FormatAmountCustomOptions,\n FormatAmountInput,\n FormatAmountOptions,\n} from './currency-formatter.types';\n\ninterface CreateCurrencyFormatterParams {\n locale: string;\n onError?(error: unknown, context: { locale: string; options: Intl.NumberFormatOptions }): void;\n}\n\nconst fallback = '';\nconst defaultCompactThreshold = 1_000_000;\nconst thinSpace = '\\u2009';\nconst defaultCustomOptions = {\n compactThreshold: defaultCompactThreshold,\n showCurrency: true,\n approximateDust: true,\n};\n\nexport function createCurrencyFormatter({ locale, onError }: CreateCurrencyFormatterParams) {\n function safeInitializeNumberFormat(locale: string, options: Intl.NumberFormatOptions) {\n try {\n return new Intl.NumberFormat(locale, options);\n } catch (e) {\n onError?.(e, { locale, options });\n return null;\n }\n }\n\n function formatAmount(input: FormatAmountInput, options: FormatAmountOptions = {}) {\n return formatAmountWithMeta(input, options).result;\n }\n\n function formatAmountWithMeta(input: FormatAmountInput, options: FormatAmountOptions = {}) {\n const { amount, currencyCode, decimals } = input;\n const { preset, numberFormatOptions = {}, ...customOptions } = options;\n const { numberFormatOptions: presetNumberFormatOptions = {}, ...presetCustomOptions } =\n getPresetResult(preset, input);\n const { compactThreshold, showCurrency, approximateDust } = mergeCustomOptions(\n presetCustomOptions,\n customOptions\n );\n const shouldCompact = evaluateCompactNotation(compactThreshold, amount);\n const isFiatCurrency = isFiatCurrencyCode(currencyCode);\n const isDust = isFiatCurrency && isSmallerThanMinorUnit(amount, decimals);\n const { minimumFractionDigits, maximumFractionDigits } = deriveFractionOptions(\n amount,\n decimals,\n shouldCompact,\n presetNumberFormatOptions,\n numberFormatOptions\n );\n const formatterOptions: Intl.NumberFormatOptions = {\n minimumFractionDigits,\n maximumFractionDigits,\n ...(shouldCompact && { notation: 'compact' }),\n ...omitFractionOptions(presetNumberFormatOptions),\n ...omitFractionOptions(numberFormatOptions),\n };\n\n if (isFiatCurrency && showCurrency) {\n formatterOptions.style = 'currency';\n formatterOptions.currency = currencyCode;\n } else {\n formatterOptions.style = 'decimal';\n }\n\n const formatter = safeInitializeNumberFormat(locale, formatterOptions);\n\n if (!formatter)\n return {\n valid: false,\n result: fallback,\n parts: [],\n resolvedOptions: {},\n };\n\n let result: string;\n\n if (isDust && approximateDust) {\n const smallestUnit = getSmallestUnit(decimals);\n const multiplier = amount < 0 ? -1 : 1;\n result = `<${thinSpace}${formatter.format(smallestUnit * multiplier)}`;\n } else {\n result = formatter.format(amount);\n }\n\n if (!isFiatCurrency && showCurrency) {\n result += `\\u00A0${currencyCode}`;\n }\n\n return {\n valid: true,\n result,\n parts: buildParts({\n formatter,\n amount,\n isDust,\n approximateDust,\n decimals,\n currencyCode,\n isFiatCurrency,\n showCurrency,\n }),\n resolvedOptions: formatter.resolvedOptions(),\n };\n }\n\n function formatPercentage(amount: number, decimals = 2) {\n const formatter = safeInitializeNumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n\n if (!formatter) return fallback;\n\n return formatter.format(amount);\n }\n\n return {\n formatAmount,\n formatAmountWithMeta,\n formatPercentage,\n };\n}\n\nexport { type FormatAmountOptions };\n\n// -----------------------------------------------------------------------------\n//\n// Helpers\n//\n// -----------------------------------------------------------------------------\n// Amend NumberFormat's formatToParts with crypto and approximate dust display\nfunction buildParts({\n formatter,\n amount,\n isDust,\n approximateDust,\n decimals,\n currencyCode,\n isFiatCurrency,\n showCurrency,\n}: {\n formatter: Intl.NumberFormat;\n amount: number;\n isDust: boolean;\n approximateDust: boolean;\n decimals: number;\n currencyCode: string;\n isFiatCurrency: boolean;\n showCurrency: boolean;\n}): Intl.NumberFormatPart[] {\n if (typeof formatter.formatToParts !== 'function') return [];\n\n const baseAmount =\n isDust && approximateDust ? getSmallestUnit(decimals) * (amount < 0 ? -1 : 1) : amount;\n\n const parts = formatter.formatToParts(baseAmount);\n\n if (isDust && approximateDust) {\n parts.unshift({ type: 'unknown', value: '<' }, { type: 'literal', value: thinSpace });\n }\n\n if (!isFiatCurrency && showCurrency) {\n parts.push({ type: 'literal', value: '\\u00A0' }, { type: 'currency', value: currencyCode });\n }\n\n return parts;\n}\n\nfunction getPresetResult(preset: CurrencyFormatterPreset | undefined, input: FormatAmountInput) {\n if (!preset) return {};\n\n if (typeof currencyFormatterPresets[preset] === 'function') {\n return currencyFormatterPresets[preset](input);\n }\n\n return currencyFormatterPresets[preset];\n}\n\nfunction mergeCustomOptions(\n presetCustomOptions: FormatAmountCustomOptions,\n customOptions: FormatAmountCustomOptions\n) {\n return {\n ...defaultCustomOptions,\n ...presetCustomOptions,\n ...customOptions,\n };\n}\n\nfunction evaluateCompactNotation(compactThreshold: number, amount: number) {\n return Math.abs(amount) >= compactThreshold;\n}\n\nfunction getSmallestUnit(decimals: number) {\n return 1 / 10 ** decimals;\n}\n\nfunction isSmallerThanMinorUnit(value: number, decimals: number): boolean {\n if (value === 0) return false;\n const unit = 1 / 10 ** decimals;\n return Math.abs(value) < unit;\n}\n\nfunction omitFractionOptions(options: Intl.NumberFormatOptions) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minimumFractionDigits, maximumFractionDigits, ...rest } = options;\n return rest;\n}\n\nfunction deriveFractionOptions(\n amount: number,\n decimals: number,\n compact: boolean,\n presetNumberFormatOptions: Intl.NumberFormatOptions,\n numberFormatOptions: Intl.NumberFormatOptions\n) {\n const defaultMinimumFractionDigits = 2;\n\n function getMaximumFractionDigits() {\n if (compact && !numberFormatOptions.maximumFractionDigits) {\n return defaultMinimumFractionDigits;\n }\n\n if (\n !presetNumberFormatOptions.maximumFractionDigits &&\n !numberFormatOptions.maximumFractionDigits\n ) {\n if (amount >= 1000 && amount <= 999999) {\n return Math.min(decimals, defaultMinimumFractionDigits);\n }\n }\n\n return (\n numberFormatOptions.maximumFractionDigits ??\n presetNumberFormatOptions.maximumFractionDigits ??\n decimals\n );\n }\n\n const maximumFractionDigits = getMaximumFractionDigits();\n // Ensure final minimumFractionDigits <= maximumFractionDigits to avoid Intl.NumberFormat RangeError\n const minimumFractionDigits = Math.min(\n numberFormatOptions.minimumFractionDigits ??\n presetNumberFormatOptions.minimumFractionDigits ??\n defaultMinimumFractionDigits,\n maximumFractionDigits\n );\n\n return {\n maximumFractionDigits,\n minimumFractionDigits,\n };\n}\n","type ObjectValue = string | number | boolean | null | NestedObject | ObjectValue[];\ninterface NestedObject {\n [key: string]: ObjectValue;\n}\n\ninterface FlattenedObject {\n [key: string]: string | number | boolean | null;\n}\n\n/**\n * Flattens a nested object or array into a flat object with dot-notation key paths.\n *\n * @param input - The object or array to flatten\n * @param prefix - Internal parameter for recursion, represents the current key path\n * @returns A flat object where keys represent the path to the original nested value\n *\n * @example\n * ```typescript\n * // Object example\n * flattenObject({ layer1: { layer2: 'value' } })\n * // Returns: { 'layer1.layer2': 'value' }\n *\n * // Array example\n * flattenObject([{ key: 'value' }])\n * // Returns: { '[0].key': 'value' }\n *\n * // Mixed example\n * flattenObject({ users: [{ name: 'John', age: 30 }] })\n * // Returns: { 'users[0].name': 'John', 'users[0].age': 30 }\n * ```\n */\nexport function flattenObject(input: ObjectValue, prefix = ''): FlattenedObject {\n const result: FlattenedObject = {};\n\n if (input === null || typeof input !== 'object') {\n if (prefix === '') return { value: input };\n return { [prefix]: input };\n }\n\n if (Array.isArray(input)) {\n input.forEach((item, index) => {\n const key = prefix === '' ? `[${index}]` : `${prefix}[${index}]`;\n const flattened = flattenObject(item, key);\n Object.assign(result, flattened);\n });\n } else {\n Object.entries(input).forEach(([key, value]) => {\n const newKey = prefix === '' ? key : `${prefix}.${key}`;\n const flattened = flattenObject(value, newKey);\n Object.assign(result, flattened);\n });\n }\n\n return result;\n}\n","// A minus sign is a wider character than a hyphen, and should be used in\n// numerical contexts\nexport const minusSign = '−';\n","export const tlds = [\n 'AAA',\n 'AARP',\n 'ABB',\n 'ABBOTT',\n 'ABBVIE',\n 'ABC',\n 'ABLE',\n 'ABOGADO',\n 'ABUDHABI',\n 'AC',\n 'ACADEMY',\n 'ACCENTURE',\n 'ACCOUNTANT',\n 'ACCOUNTANTS',\n 'ACO',\n 'ACTOR',\n 'AD',\n 'ADS',\n 'ADULT',\n 'AE',\n 'AEG',\n 'AERO',\n 'AETNA',\n 'AF',\n 'AFL',\n 'AFRICA',\n 'AG',\n 'AGAKHAN',\n 'AGENCY',\n 'AI',\n 'AIG',\n 'AIRBUS',\n 'AIRFORCE',\n 'AIRTEL',\n 'AKDN',\n 'AL',\n 'ALIBABA',\n 'ALIPAY',\n 'ALLFINANZ',\n 'ALLSTATE',\n 'ALLY',\n 'ALSACE',\n 'ALSTOM',\n 'AM',\n 'AMAZON',\n 'AMERICANEXPRESS',\n 'AMERICANFAMILY',\n 'AMEX',\n 'AMFAM',\n 'AMICA',\n 'AMSTERDAM',\n 'ANALYTICS',\n 'ANDROID',\n 'ANQUAN',\n 'ANZ',\n 'AO',\n 'AOL',\n 'APARTMENTS',\n 'APP',\n 'APPLE',\n 'AQ',\n 'AQUARELLE',\n 'AR',\n 'ARAB',\n 'ARAMCO',\n 'ARCHI',\n 'ARMY',\n 'ARPA',\n 'ART',\n 'ARTE',\n 'AS',\n 'ASDA',\n 'ASIA',\n 'ASSOCIATES',\n 'AT',\n 'ATHLETA',\n 'ATTORNEY',\n 'AU',\n 'AUCTION',\n 'AUDI',\n 'AUDIBLE',\n 'AUDIO',\n 'AUSPOST',\n 'AUTHOR',\n 'AUTO',\n 'AUTOS',\n 'AW',\n 'AWS',\n 'AX',\n 'AXA',\n 'AZ',\n 'AZURE',\n 'BA',\n 'BABY',\n 'BAIDU',\n 'BANAMEX',\n 'BAND',\n 'BANK',\n 'BAR',\n 'BARCELONA',\n 'BARCLAYCARD',\n 'BARCLAYS',\n 'BAREFOOT',\n 'BARGAINS',\n 'BASEBALL',\n 'BASKETBALL',\n 'BAUHAUS',\n 'BAYERN',\n 'BB',\n 'BBC',\n 'BBT',\n 'BBVA',\n 'BCG',\n 'BCN',\n 'BD',\n 'BE',\n 'BEATS',\n 'BEAUTY',\n 'BEER',\n 'BENTLEY',\n 'BERLIN',\n 'BEST',\n 'BESTBUY',\n 'BET',\n 'BF',\n 'BG',\n 'BH',\n 'BHARTI',\n 'BI',\n 'BIBLE',\n 'BID',\n 'BIKE',\n 'BING',\n 'BINGO',\n 'BIO',\n 'BIZ',\n 'BJ',\n 'BLACK',\n 'BLACKFRIDAY',\n 'BLOCKBUSTER',\n 'BLOG',\n 'BLOOMBERG',\n 'BLUE',\n 'BM',\n 'BMS',\n 'BMW',\n 'BN',\n 'BNPPARIBAS',\n 'BO',\n 'BOATS',\n 'BOEHRINGER',\n 'BOFA',\n 'BOM',\n 'BOND',\n 'BOO',\n 'BOOK',\n 'BOOKING',\n 'BOSCH',\n 'BOSTIK',\n 'BOSTON',\n 'BOT',\n 'BOUTIQUE',\n 'BOX',\n 'BR',\n 'BRADESCO',\n 'BRIDGESTONE',\n 'BROADWAY',\n 'BROKER',\n 'BROTHER',\n 'BRUSSELS',\n 'BS',\n 'BT',\n 'BUILD',\n 'BUILDERS',\n 'BUSINESS',\n 'BUY',\n 'BUZZ',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'BZH',\n 'CA',\n 'CAB',\n 'CAFE',\n 'CAL',\n 'CALL',\n 'CALVINKLEIN',\n 'CAM',\n 'CAMERA',\n 'CAMP',\n 'CANON',\n 'CAPETOWN',\n 'CAPITAL',\n 'CAPITALONE',\n 'CAR',\n 'CARAVAN',\n 'CARDS',\n 'CARE',\n 'CAREER',\n 'CAREERS',\n 'CARS',\n 'CASA',\n 'CASE',\n 'CASH',\n 'CASINO',\n 'CAT',\n 'CATERING',\n 'CATHOLIC',\n 'CBA',\n 'CBN',\n 'CBRE',\n 'CC',\n 'CD',\n 'CENTER',\n 'CEO',\n 'CERN',\n 'CF',\n 'CFA',\n 'CFD',\n 'CG',\n 'CH',\n 'CHANEL',\n 'CHANNEL',\n 'CHARITY',\n 'CHASE',\n 'CHAT',\n 'CHEAP',\n 'CHINTAI',\n 'CHRISTMAS',\n 'CHROME',\n 'CHURCH',\n 'CI',\n 'CIPRIANI',\n 'CIRCLE',\n 'CISCO',\n 'CITADEL',\n 'CITI',\n 'CITIC',\n 'CITY',\n 'CK',\n 'CL',\n 'CLAIMS',\n 'CLEANING',\n 'CLICK',\n 'CLINIC',\n 'CLINIQUE',\n 'CLOTHING',\n 'CLOUD',\n 'CLUB',\n 'CLUBMED',\n 'CM',\n 'CN',\n 'CO',\n 'COACH',\n 'CODES',\n 'COFFEE',\n 'COLLEGE',\n 'COLOGNE',\n 'COM',\n 'COMMBANK',\n 'COMMUNITY',\n 'COMPANY',\n 'COMPARE',\n 'COMPUTER',\n 'COMSEC',\n 'CONDOS',\n 'CONSTRUCTION',\n 'CONSULTING',\n 'CONTACT',\n 'CONTRACTORS',\n 'COOKING',\n 'COOL',\n 'COOP',\n 'CORSICA',\n 'COUNTRY',\n 'COUPON',\n 'COUPONS',\n 'COURSES',\n 'CPA',\n 'CR',\n 'CREDIT',\n 'CREDITCARD',\n 'CREDITUNION',\n 'CRICKET',\n 'CROWN',\n 'CRS',\n 'CRUISE',\n 'CRUISES',\n 'CU',\n 'CUISINELLA',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CYMRU',\n 'CYOU',\n 'CZ',\n 'DAD',\n 'DANCE',\n 'DATA',\n 'DATE',\n 'DATING',\n 'DATSUN',\n 'DAY',\n 'DCLK',\n 'DDS',\n 'DE',\n 'DEAL',\n 'DEALER',\n 'DEALS',\n 'DEGREE',\n 'DELIVERY',\n 'DELL',\n 'DELOITTE',\n 'DELTA',\n 'DEMOCRAT',\n 'DENTAL',\n 'DENTIST',\n 'DESI',\n 'DESIGN',\n 'DEV',\n 'DHL',\n 'DIAMONDS',\n 'DIET',\n 'DIGITAL',\n 'DIRECT',\n 'DIRECTORY',\n 'DISCOUNT',\n 'DISCOVER',\n 'DISH',\n 'DIY',\n 'DJ',\n 'DK',\n 'DM',\n 'DNP',\n 'DO',\n 'DOCS',\n 'DOCTOR',\n 'DOG',\n 'DOMAINS',\n 'DOT',\n 'DOWNLOAD',\n 'DRIVE',\n 'DTV',\n 'DUBAI',\n 'DUNLOP',\n 'DUPONT',\n 'DURBAN',\n 'DVAG',\n 'DVR',\n 'DZ',\n 'EARTH',\n 'EAT',\n 'EC',\n 'ECO',\n 'EDEKA',\n 'EDU',\n 'EDUCATION',\n 'EE',\n 'EG',\n 'EMAIL',\n 'EMERCK',\n 'ENERGY',\n 'ENGINEER',\n 'ENGINEERING',\n 'ENTERPRISES',\n 'EPSON',\n 'EQUIPMENT',\n 'ER',\n 'ERICSSON',\n 'ERNI',\n 'ES',\n 'ESQ',\n 'ESTATE',\n 'ET',\n 'EU',\n 'EUROVISION',\n 'EUS',\n 'EVENTS',\n 'EXCHANGE',\n 'EXPERT',\n 'EXPOSED',\n 'EXPRESS',\n 'EXTRASPACE',\n 'FAGE',\n 'FAIL',\n 'FAIRWINDS',\n 'FAITH',\n 'FAMILY',\n 'FAN',\n 'FANS',\n 'FARM',\n 'FARMERS',\n 'FASHION',\n 'FAST',\n 'FEDEX',\n 'FEEDBACK',\n 'FERRARI',\n 'FERRERO',\n 'FI',\n 'FIDELITY',\n 'FIDO',\n 'FILM',\n 'FINAL',\n 'FINANCE',\n 'FINANCIAL',\n 'FIRE',\n 'FIRESTONE',\n 'FIRMDALE',\n 'FISH',\n 'FISHING',\n 'FIT',\n 'FITNESS',\n 'FJ',\n 'FK',\n 'FLICKR',\n 'FLIGHTS',\n 'FLIR',\n 'FLORIST',\n 'FLOWERS',\n 'FLY',\n 'FM',\n 'FO',\n 'FOO',\n 'FOOD',\n 'FOOTBALL',\n 'FORD',\n 'FOREX',\n 'FORSALE',\n 'FORUM',\n 'FOUNDATION',\n 'FOX',\n 'FR',\n 'FREE',\n 'FRESENIUS',\n 'FRL',\n 'FROGANS',\n 'FRONTIER',\n 'FTR',\n 'FUJITSU',\n 'FUN',\n 'FUND',\n 'FURNITURE',\n 'FUTBOL',\n 'FYI',\n 'GA',\n 'GAL',\n 'GALLERY',\n 'GALLO',\n 'GALLUP',\n 'GAME',\n 'GAMES',\n 'GAP',\n 'GARDEN',\n 'GAY',\n 'GB',\n 'GBIZ',\n 'GD',\n 'GDN',\n 'GE',\n 'GEA',\n 'GENT',\n 'GENTING',\n 'GEORGE',\n 'GF',\n 'GG',\n 'GGEE',\n 'GH',\n 'GI',\n 'GIFT',\n 'GIFTS',\n 'GIVES',\n 'GIVING',\n 'GL',\n 'GLASS',\n 'GLE',\n 'GLOBAL',\n 'GLOBO',\n 'GM',\n 'GMAIL',\n 'GMBH',\n 'GMO',\n 'GMX',\n 'GN',\n 'GODADDY',\n 'GOLD',\n 'GOLDPOINT',\n 'GOLF',\n 'GOO',\n 'GOODYEAR',\n 'GOOG',\n 'GOOGLE',\n 'GOP',\n 'GOT',\n 'GOV',\n 'GP',\n 'GQ',\n 'GR',\n 'GRAINGER',\n 'GRAPHICS',\n 'GRATIS',\n 'GREEN',\n 'GRIPE',\n 'GROCERY',\n 'GROUP',\n 'GS',\n 'GT',\n 'GU',\n 'GUCCI',\n 'GUGE',\n 'GUIDE',\n 'GUITARS',\n 'GURU',\n 'GW',\n 'GY',\n 'HAIR',\n 'HAMBURG',\n 'HANGOUT',\n 'HAUS',\n 'HBO',\n 'HDFC',\n 'HDFCBANK',\n 'HEALTH',\n 'HEALTHCARE',\n 'HELP',\n 'HELSINKI',\n 'HERE',\n 'HERMES',\n 'HIPHOP',\n 'HISAMITSU',\n 'HITACHI',\n 'HIV',\n 'HK',\n 'HKT',\n 'HM',\n 'HN',\n 'HOCKEY',\n 'HOLDINGS',\n 'HOLIDAY',\n 'HOMEDEPOT',\n 'HOMEGOODS',\n 'HOMES',\n 'HOMESENSE',\n 'HONDA',\n 'HORSE',\n 'HOSPITAL',\n 'HOST',\n 'HOSTING',\n 'HOT',\n 'HOTELS',\n 'HOTMAIL',\n 'HOUSE',\n 'HOW',\n 'HR',\n 'HSBC',\n 'HT',\n 'HU',\n 'HUGHES',\n 'HYATT',\n 'HYUNDAI',\n 'IBM',\n 'ICBC',\n 'ICE',\n 'ICU',\n 'ID',\n 'IE',\n 'IEEE',\n 'IFM',\n 'IKANO',\n 'IL',\n 'IM',\n 'IMAMAT',\n 'IMDB',\n 'IMMO',\n 'IMMOBILIEN',\n 'IN',\n 'INC',\n 'INDUSTRIES',\n 'INFINITI',\n 'INFO',\n 'ING',\n 'INK',\n 'INSTITUTE',\n 'INSURANCE',\n 'INSURE',\n 'INT',\n 'INTERNATIONAL',\n 'INTUIT',\n 'INVESTMENTS',\n 'IO',\n 'IPIRANGA',\n 'IQ',\n 'IR',\n 'IRISH',\n 'IS',\n 'ISMAILI',\n 'IST',\n 'ISTANBUL',\n 'IT',\n 'ITAU',\n 'ITV',\n 'JAGUAR',\n 'JAVA',\n 'JCB',\n 'JE',\n 'JEEP',\n 'JETZT',\n 'JEWELRY',\n 'JIO',\n 'JLL',\n 'JM',\n 'JMP',\n 'JNJ',\n 'JO',\n 'JOBS',\n 'JOBURG',\n 'JOT',\n 'JOY',\n 'JP',\n 'JPMORGAN',\n 'JPRS',\n 'JUEGOS',\n 'JUNIPER',\n 'KAUFEN',\n 'KDDI',\n 'KE',\n 'KERRYHOTELS',\n 'KERRYLOGISTICS',\n 'KERRYPROPERTIES',\n 'KFH',\n 'KG',\n 'KH',\n 'KI',\n 'KIA',\n 'KIDS',\n 'KIM',\n 'KINDLE',\n 'KITCHEN',\n 'KIWI',\n 'KM',\n 'KN',\n 'KOELN',\n 'KOMATSU',\n 'KOSHER',\n 'KP',\n 'KPMG',\n 'KPN',\n 'KR',\n 'KRD',\n 'KRED',\n 'KUOKGROUP',\n 'KW',\n 'KY',\n 'KYOTO',\n 'KZ',\n 'LA',\n 'LACAIXA',\n 'LAMBORGHINI',\n 'LAMER',\n 'LANCASTER',\n 'LAND',\n 'LANDROVER',\n 'LANXESS',\n 'LASALLE',\n 'LAT',\n 'LATINO',\n 'LATROBE',\n 'LAW',\n 'LAWYER',\n 'LB',\n 'LC',\n 'LDS',\n 'LEASE',\n 'LECLERC',\n 'LEFRAK',\n 'LEGAL',\n 'LEGO',\n 'LEXUS',\n 'LGBT',\n 'LI',\n 'LIDL',\n 'LIFE',\n 'LIFEINSURANCE',\n 'LIFESTYLE',\n 'LIGHTING',\n 'LIKE',\n 'LILLY',\n 'LIMITED',\n 'LIMO',\n 'LINCOLN',\n 'LINK',\n 'LIPSY',\n 'LIVE',\n 'LIVING',\n 'LK',\n 'LLC',\n 'LLP',\n 'LOAN',\n 'LOANS',\n 'LOCKER',\n 'LOCUS',\n 'LOL',\n 'LONDON',\n 'LOTTE',\n 'LOTTO',\n 'LOVE',\n 'LPL',\n 'LPLFINANCIAL',\n 'LR',\n 'LS',\n 'LT',\n 'LTD',\n 'LTDA',\n 'LU',\n 'LUNDBECK',\n 'LUXE',\n 'LUXURY',\n 'LV',\n 'LY',\n 'MA',\n 'MADRID',\n 'MAIF',\n 'MAISON',\n 'MAKEUP',\n 'MAN',\n 'MANAGEMENT',\n 'MANGO',\n 'MAP',\n 'MARKET',\n 'MARKETING',\n 'MARKETS',\n 'MARRIOTT',\n 'MARSHALLS',\n 'MATTEL',\n 'MBA',\n 'MC',\n 'MCKINSEY',\n 'MD',\n 'ME',\n 'MED',\n 'MEDIA',\n 'MEET',\n 'MELBOURNE',\n 'MEME',\n 'MEMORIAL',\n 'MEN',\n 'MENU',\n 'MERCKMSD',\n 'MG',\n 'MH',\n 'MIAMI',\n 'MICROSOFT',\n 'MIL',\n 'MINI',\n 'MINT',\n 'MIT',\n 'MITSUBISHI',\n 'MK',\n 'ML',\n 'MLB',\n 'MLS',\n 'MM',\n 'MMA',\n 'MN',\n 'MO',\n 'MOBI',\n 'MOBILE',\n 'MODA',\n 'MOE',\n 'MOI',\n 'MOM',\n 'MONASH',\n 'MONEY',\n 'MONSTER',\n 'MORMON',\n 'MORTGAGE',\n 'MOSCOW',\n 'MOTO',\n 'MOTORCYCLES',\n 'MOV',\n 'MOVIE',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MSD',\n 'MT',\n 'MTN',\n 'MTR',\n 'MU',\n 'MUSEUM',\n 'MUSIC',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NAB',\n 'NAGOYA',\n 'NAME',\n 'NAVY',\n 'NBA',\n 'NC',\n 'NE',\n 'NEC',\n 'NET',\n 'NETBANK',\n 'NETFLIX',\n 'NETWORK',\n 'NEUSTAR',\n 'NEW',\n 'NEWS',\n 'NEXT',\n 'NEXTDIRECT',\n 'NEXUS',\n 'NF',\n 'NFL',\n 'NG',\n 'NGO',\n 'NHK',\n 'NI',\n 'NICO',\n 'NIKE',\n 'NIKON',\n 'NINJA',\n 'NISSAN',\n 'NISSAY',\n 'NL',\n 'NO',\n 'NOKIA',\n 'NORTON',\n 'NOW',\n 'NOWRUZ',\n 'NOWTV',\n 'NP',\n 'NR',\n 'NRA',\n 'NRW',\n 'NTT',\n 'NU',\n 'NYC',\n 'NZ',\n 'OBI',\n 'OBSERVER',\n 'OFFICE',\n 'OKINAWA',\n 'OLAYAN',\n 'OLAYANGROUP',\n 'OLLO',\n 'OM',\n 'OMEGA',\n 'ONE',\n 'ONG',\n 'ONL',\n 'ONLINE',\n 'OOO',\n 'OPEN',\n 'ORACLE',\n 'ORANGE',\n 'ORG',\n 'ORGANIC',\n 'ORIGINS',\n 'OSAKA',\n 'OTSUKA',\n 'OTT',\n 'OVH',\n 'PA',\n 'PAGE',\n 'PANASONIC',\n 'PARIS',\n 'PARS',\n 'PARTNERS',\n 'PARTS',\n 'PARTY',\n 'PAY',\n 'PCCW',\n 'PE',\n 'PET',\n 'PF',\n 'PFIZER',\n 'PG',\n 'PH',\n 'PHARMACY',\n 'PHD',\n 'PHILIPS',\n 'PHONE',\n 'PHOTO',\n 'PHOTOGRAPHY',\n 'PHOTOS',\n 'PHYSIO',\n 'PICS',\n 'PICTET',\n 'PICTURES',\n 'PID',\n 'PIN',\n 'PING',\n 'PINK',\n 'PIONEER',\n 'PIZZA',\n 'PK',\n 'PL',\n 'PLACE',\n 'PLAY',\n 'PLAYSTATION',\n 'PLUMBING',\n 'PLUS',\n 'PM',\n 'PN',\n 'PNC',\n 'POHL',\n 'POKER',\n 'POLITIE',\n 'PORN',\n 'POST',\n 'PR',\n 'PRAMERICA',\n 'PRAXI',\n 'PRESS',\n 'PRIME',\n 'PRO',\n 'PROD',\n 'PRODUCTIONS',\n 'PROF',\n 'PROGRESSIVE',\n 'PROMO',\n 'PROPERTIES',\n 'PROPERTY',\n 'PROTECTION',\n 'PRU',\n 'PRUDENTIAL',\n 'PS',\n 'PT',\n 'PUB',\n 'PW',\n 'PWC',\n 'PY',\n 'QA',\n 'QPON',\n 'QUEBEC',\n 'QUEST',\n 'RACING',\n 'RADIO',\n 'RE',\n 'READ',\n 'REALESTATE',\n 'REALTOR',\n 'REALTY',\n 'RECIPES',\n 'RED',\n 'REDSTONE',\n 'REDUMBRELLA',\n 'REHAB',\n 'REISE',\n 'REISEN',\n 'REIT',\n 'RELIANCE',\n 'REN',\n 'RENT',\n 'RENTALS',\n 'REPAIR',\n 'REPORT',\n 'REPUBLICAN',\n 'REST',\n 'RESTAURANT',\n 'REVIEW',\n 'REVIEWS',\n 'REXROTH',\n 'RICH',\n 'RICHARDLI',\n 'RICOH',\n 'RIL',\n 'RIO',\n 'RIP',\n 'RO',\n 'ROCKS',\n 'RODEO',\n 'ROGERS',\n 'ROOM',\n 'RS',\n 'RSVP',\n 'RU',\n 'RUGBY',\n 'RUHR',\n 'RUN',\n 'RW',\n 'RWE',\n 'RYUKYU',\n 'SA',\n 'SAARLAND',\n 'SAFE',\n 'SAFETY',\n 'SAKURA',\n 'SALE',\n 'SALON',\n 'SAMSCLUB',\n 'SAMSUNG',\n 'SANDVIK',\n 'SANDVIKCOROMANT',\n 'SANOFI',\n 'SAP',\n 'SARL',\n 'SAS',\n 'SAVE',\n 'SAXO',\n 'SB',\n 'SBI',\n 'SBS',\n 'SC',\n 'SCB',\n 'SCHAEFFLER',\n 'SCHMIDT',\n 'SCHOLARSHIPS',\n 'SCHOOL',\n 'SCHULE',\n 'SCHWARZ',\n 'SCIENCE',\n 'SCOT',\n 'SD',\n 'SE',\n 'SEARCH',\n 'SEAT',\n 'SECURE',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SENER',\n 'SERVICES',\n 'SEVEN',\n 'SEW',\n 'SEX',\n 'SEXY',\n 'SFR',\n 'SG',\n 'SH',\n 'SHANGRILA',\n 'SHARP',\n 'SHELL',\n 'SHIA',\n 'SHIKSHA',\n 'SHOES',\n 'SHOP',\n 'SHOPPING',\n 'SHOUJI',\n 'SHOW',\n 'SI',\n 'SILK',\n 'SINA',\n 'SINGLES',\n 'SITE',\n 'SJ',\n 'SK',\n 'SKI',\n 'SKIN',\n 'SKY',\n 'SKYPE',\n 'SL',\n 'SLING',\n 'SM',\n 'SMART',\n 'SMILE',\n 'SN',\n 'SNCF',\n 'SO',\n 'SOCCER',\n 'SOCIAL',\n 'SOFTBANK',\n 'SOFTWARE',\n 'SOHU',\n 'SOLAR',\n 'SOLUTIONS',\n 'SONG',\n 'SONY',\n 'SOY',\n 'SPA',\n 'SPACE',\n 'SPORT',\n 'SPOT',\n 'SR',\n 'SRL',\n 'SS',\n 'ST',\n 'STADA',\n 'STAPLES',\n 'STAR',\n 'STATEBANK',\n 'STATEFARM',\n 'STC',\n 'STCGROUP',\n 'STOCKHOLM',\n 'STORAGE',\n 'STORE',\n 'STREAM',\n 'STUDIO',\n 'STUDY',\n 'STYLE',\n 'SU',\n 'SUCKS',\n 'SUPPLIES',\n 'SUPPLY',\n 'SUPPORT',\n 'SURF',\n 'SURGERY',\n 'SUZUKI',\n 'SV',\n 'SWATCH',\n 'SWISS',\n 'SX',\n 'SY',\n 'SYDNEY',\n 'SYSTEMS',\n 'SZ',\n 'TAB',\n 'TAIPEI',\n 'TALK',\n 'TAOBAO',\n 'TARGET',\n 'TATAMOTORS',\n 'TATAR',\n 'TATTOO',\n 'TAX',\n 'TAXI',\n 'TC',\n 'TCI',\n 'TD',\n 'TDK',\n 'TEAM',\n 'TECH',\n 'TECHNOLOGY',\n 'TEL',\n 'TEMASEK',\n 'TENNIS',\n 'TEVA',\n 'TF',\n 'TG',\n 'TH',\n 'THD',\n 'THEATER',\n 'THEATRE',\n 'TIAA',\n 'TICKETS',\n 'TIENDA',\n 'TIPS',\n 'TIRES',\n 'TIROL',\n 'TJ',\n 'TJMAXX',\n 'TJX',\n 'TK',\n 'TKMAXX',\n 'TL',\n 'TM',\n 'TMALL',\n 'TN',\n 'TO',\n 'TODAY',\n 'TOKYO',\n 'TOOLS',\n 'TOP',\n 'TORAY',\n 'TOSHIBA',\n 'TOTAL',\n 'TOURS',\n 'TOWN',\n 'TOYOTA',\n 'TOYS',\n 'TR',\n 'TRADE',\n 'TRADING',\n 'TRAINING',\n 'TRAVEL',\n 'TRAVELERS',\n 'TRAVELERSINSURANCE',\n 'TRUST',\n 'TRV',\n 'TT',\n 'TUBE',\n 'TUI',\n 'TUNES',\n 'TUSHU',\n 'TV',\n 'TVS',\n 'TW',\n 'TZ',\n 'UA',\n 'UBANK',\n 'UBS',\n 'UG',\n 'UK',\n 'UNICOM',\n 'UNIVERSITY',\n 'UNO',\n 'UOL',\n 'UPS',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VACATIONS',\n 'VANA',\n 'VANGUARD',\n 'VC',\n 'VE',\n 'VEGAS',\n 'VENTURES',\n 'VERISIGN',\n 'VERSICHERUNG',\n 'VET',\n 'VG',\n 'VI',\n 'VIAJES',\n 'VIDEO',\n 'VIG',\n 'VIKING',\n 'VILLAS',\n 'VIN',\n 'VIP',\n 'VIRGIN',\n 'VISA',\n 'VISION',\n 'VIVA',\n 'VIVO',\n 'VLAANDEREN',\n 'VN',\n 'VODKA',\n 'VOLVO',\n 'VOTE',\n 'VOTING',\n 'VOTO',\n 'VOYAGE',\n 'VU',\n 'WALES',\n 'WALMART',\n 'WALTER',\n 'WANG',\n 'WANGGOU',\n 'WATCH',\n 'WATCHES',\n 'WEATHER',\n 'WEATHERCHANNEL',\n 'WEBCAM',\n 'WEBER',\n 'WEBSITE',\n 'WED',\n 'WEDDING',\n 'WEIBO',\n 'WEIR',\n 'WF',\n 'WHOSWHO',\n 'WIEN',\n 'WIKI',\n 'WILLIAMHILL',\n 'WIN',\n 'WINDOWS',\n 'WINE',\n 'WINNERS',\n 'WME',\n 'WOLTERSKLUWER',\n 'WOODSIDE',\n 'WORK',\n 'WORKS',\n 'WORLD',\n 'WOW',\n 'WS',\n 'WTC',\n 'WTF',\n 'XBOX',\n 'XEROX',\n 'XIHUAN',\n 'XIN',\n 'XN--11B4C3D',\n 'XN--1CK2E1B',\n 'XN--1QQW23A',\n 'XN--2SCRJ9C',\n 'XN--30RR7Y',\n 'XN--3BST00M',\n 'XN--3DS443G',\n 'XN--3E0B707E',\n 'XN--3HCRJ9C',\n 'XN--3PXU8K',\n 'XN--42C2D9A',\n 'XN--45BR5CYL',\n 'XN--45BRJ9C',\n 'XN--45Q11C',\n 'XN--4DBRK0CE',\n 'XN--4GBRIM',\n 'XN--54B7FTA0CC',\n 'XN--55QW42G',\n 'XN--55QX5D',\n 'XN--5SU34J936BGSG',\n 'XN--5TZM5G',\n 'XN--6FRZ82G',\n 'XN--6QQ986B3XL',\n 'XN--80ADXHKS',\n 'XN--80AO21A',\n 'XN--80AQECDR1A',\n 'XN--80ASEHDB',\n 'XN--80ASWG',\n 'XN--8Y0A063A',\n 'XN--90A3AC',\n 'XN--90AE',\n 'XN--90AIS',\n 'XN--9DBQ2A',\n 'XN--9ET52U',\n 'XN--9KRT00A',\n 'XN--B4W605FERD',\n 'XN--BCK1B9A5DRE4C',\n 'XN--C1AVG',\n 'XN--C2BR7G',\n 'XN--CCK2B3B',\n 'XN--CCKWCXETD',\n 'XN--CG4BKI',\n 'XN--CLCHC0EA0B2G2A9GCD',\n 'XN--CZR694B',\n 'XN--CZRS0T',\n 'XN--CZRU2D',\n 'XN--D1ACJ3B',\n 'XN--D1ALF',\n 'XN--E1A4C',\n 'XN--ECKVDTC9D',\n 'XN--EFVY88H',\n 'XN--FCT429K',\n 'XN--FHBEI',\n 'XN--FIQ228C5HS',\n 'XN--FIQ64B',\n 'XN--FIQS8S',\n 'XN--FIQZ9S',\n 'XN--FJQ720A',\n 'XN--FLW351E',\n 'XN--FPCRJ9C3D',\n 'XN--FZC2C9E2C',\n 'XN--FZYS8D69UVGM',\n 'XN--G2XX48C',\n 'XN--GCKR3F0F',\n 'XN--GECRJ9C',\n 'XN--GK3AT1E',\n 'XN--H2BREG3EVE',\n 'XN--H2BRJ9C',\n 'XN--H2BRJ9C8C',\n 'XN--HXT814E',\n 'XN--I1B6B1A6A2E',\n 'XN--IMR513N',\n 'XN--IO0A7I',\n 'XN--J1AEF',\n 'XN--J1AMH',\n 'XN--J6W193G',\n 'XN--JLQ480N2RG',\n 'XN--JVR189M',\n 'XN--KCRX77D1X4A',\n 'XN--KPRW13D',\n 'XN--KPRY57D',\n 'XN--KPUT3I',\n 'XN--L1ACC',\n 'XN--LGBBAT1AD8J',\n 'XN--MGB9AWBF',\n 'XN--MGBA3A3EJT',\n 'XN--MGBA3A4F16A',\n 'XN--MGBA7C0BBN0A',\n 'XN--MGBAAM7A8H',\n 'XN--MGBAB2BD',\n 'XN--MGBAH1A3HJKRD',\n 'XN--MGBAI9AZGQP6J',\n 'XN--MGBAYH7GPA',\n 'XN--MGBBH1A',\n 'XN--MGBBH1A71E',\n 'XN--MGBC0A9AZCG',\n 'XN--MGBCA7DZDO',\n 'XN--MGBCPQ6GPA1A',\n 'XN--MGBERP4A5D4AR',\n 'XN--MGBGU82A',\n 'XN--MGBI4ECEXP',\n 'XN--MGBPL2FH',\n 'XN--MGBT3DHD',\n 'XN--MGBTX2B',\n 'XN--MGBX4CD0AB',\n 'XN--MIX891F',\n 'XN--MK1BU44C',\n 'XN--MXTQ1M',\n 'XN--NGBC5AZD',\n 'XN--NGBE9E0A',\n 'XN--NGBRX',\n 'XN--NODE',\n 'XN--NQV7F',\n 'XN--NQV7FS00EMA',\n 'XN--NYQY26A',\n 'XN--O3CW4H',\n 'XN--OGBPF8FL',\n 'XN--OTU796D',\n 'XN--P1ACF',\n 'XN--P1AI',\n 'XN--PGBS0DH',\n 'XN--PSSY2U',\n 'XN--Q7CE6A',\n 'XN--Q9JYB4C',\n 'XN--QCKA1PMC',\n 'XN--QXA6A',\n 'XN--QXAM',\n 'XN--RHQV96G',\n 'XN--ROVU88B',\n 'XN--RVC1E0AM3E',\n 'XN--S9BRJ9C',\n 'XN--SES554G',\n 'XN--T60B56A',\n 'XN--TCKWE',\n 'XN--TIQ49XQYJ',\n 'XN--UNUP4Y',\n 'XN--VERMGENSBERATER-CTB',\n 'XN--VERMGENSBERATUNG-PWB',\n 'XN--VHQUV',\n 'XN--VUQ861B',\n 'XN--W4R85EL8FHU5DNRA',\n 'XN--W4RS40L',\n 'XN--WGBH1C',\n 'XN--WGBL6A',\n 'XN--XHQ521B',\n 'XN--XKC2AL3HYE2A',\n 'XN--XKC2DL3A5EE0H',\n 'XN--Y9A3AQ',\n 'XN--YFRO4I67O',\n 'XN--YGBI2AMMX',\n 'XN--ZFR164B',\n 'XXX',\n 'XYZ',\n 'YACHTS',\n 'YAHOO',\n 'YAMAXUN',\n 'YANDEX',\n 'YE',\n 'YODOBASHI',\n 'YOGA',\n 'YOKOHAMA',\n 'YOU',\n 'YOUTUBE',\n 'YT',\n 'YUN',\n 'ZA',\n 'ZAPPOS',\n 'ZARA',\n 'ZERO',\n 'ZIP',\n 'ZM',\n 'ZONE',\n 'ZUERICH',\n 'ZW',\n];\n","import { tlds } from './tlds-list';\n\nconst tldRegex = tlds.join('|');\nconst urlRegex = new RegExp(`\\\\b.*\\\\s*\\\\.\\\\s*(${tldRegex})\\\\b`, 'gi');\n\nconst spamWords = ['won', 'win', 'click'];\nexport const spamReplacement = 'Suspicious token';\n\nfunction spamUrlFilter(input: string) {\n return input.match(urlRegex);\n}\n\nfunction spamWordFilter(input: string): boolean {\n function containsSpam(element: string) {\n return input.toLowerCase().includes(element);\n }\n return spamWords.some(containsSpam);\n}\n\ninterface SpamFilterArgs {\n input: string;\n whitelist: string[];\n}\n\nexport function spamFilter({ input, whitelist }: SpamFilterArgs): string {\n if (whitelist.includes(input)) return input;\n\n const urlFound = spamUrlFilter(input);\n const spamWordsFound = spamWordFilter(input);\n\n if (urlFound || spamWordsFound) {\n return spamReplacement;\n }\n\n return input;\n}\n","export function extractPhraseFromString(value: string) {\n const clean = value.trim();\n const words = clean.match(/\\S+/g);\n if (words?.length) {\n return words\n .map(word => (word.match(/[^0-9]+/g) ? word : null))\n .filter(Boolean)\n .join(' ');\n } else {\n return clean;\n }\n}\n","export function pxStringToNumber(pxString: string): number {\n if (!/^\\d+px$/.test(pxString)) {\n throw new Error('Invalid pixel string format');\n }\n return +pxString.replace('px', '');\n}\n","import DOMPurify from 'dompurify';\n\n/**\n * Universal sanitizer for dynamic HTML content.\n * Uses DOMPurify in the browser, and a safe fallback for SSR (returns plain text).\n */\nexport function sanitizeContent(dirty: string): string {\n if (typeof window !== 'undefined' && typeof DOMPurify !== 'undefined') {\n return DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });\n }\n // SSR fallback: escape HTML tags to prevent injection\n return String(dirty)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { KEBAB_REGEX } from '@leather.io/constants';\nimport type { NetworkModes } from '@leather.io/models';\n\nexport { createCounter } from './counter';\nexport * from './math';\nexport * from './money';\nexport * from './accounts/account-addresses';\nexport * from './assets/sort-assets';\nexport * from './assets/asset-display-name';\nexport * from './assets/balance-helpers';\nexport * from './assets/inscription-helpers';\nexport * from './assets/asset-id';\nexport * from './truncate-middle';\nexport * from './time';\nexport * from './market-data';\nexport * from './currency-formatter/currency-formatter';\nexport * from './flatten-object';\nexport * from './special-char';\n\nexport { spamFilter } from './spam-filter/spam-filter';\nexport { extractPhraseFromString } from './extract-phrase-from-string/extract-phrase-from-string';\nexport { pxStringToNumber } from './px-string-to-number/px-string-to-number';\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isEmptyString(value: unknown): value is '' {\n return isString(value) && value === '';\n}\n\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n\nexport function isFunction(value: unknown): value is () => void {\n return typeof value === 'function';\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object';\n}\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error;\n}\n\nexport function isEmpty(value: object) {\n return Object.keys(value).length === 0;\n}\n\nexport function isDefined<T>(argument: T | undefined): argument is T {\n return !isUndefined(argument);\n}\n\nexport function isTypedArray(val: unknown): val is Uint8Array {\n const TypedArray = Object.getPrototypeOf(Uint8Array);\n return val instanceof TypedArray;\n}\n\nexport function noop() {\n // expected to be empty\n}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function undefinedIfLengthZero<T extends any[]>(arr: T) {\n return arr.length ? arr : undefined;\n}\n\ntype NetworkMap<T> = Record<NetworkModes, T>;\n\nexport function whenNetwork(mode: NetworkModes) {\n return <T extends NetworkMap<unknown>>(networkMap: T) => networkMap[mode] as T[NetworkModes];\n}\n\nexport function isEmptyArray(data: unknown[]) {\n return data.length === 0;\n}\n\n// TODO: extension concept, remove remove from utils\nexport const defaultWalletKeyId = 'default';\n\nexport function reverseBytes(bytes: Buffer): Buffer;\nexport function reverseBytes(bytes: Uint8Array): Uint8Array;\nexport function reverseBytes(bytes: Buffer | Uint8Array): Buffer | Uint8Array {\n if (Buffer.isBuffer(bytes)) return Buffer.from(bytes).reverse();\n return new Uint8Array(bytes.slice().reverse());\n}\n\nexport function makeNumberRange(num: number) {\n return [...Array(num).keys()];\n}\n\nexport function createNumArrayOfRange(fromIndex: number, toIndex: number) {\n const result = [];\n for (let i = fromIndex; i <= toIndex; i++) {\n result.push(i);\n }\n return result;\n}\n\nexport async function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nexport function isFulfilled<T>(p: PromiseSettledResult<T>): p is PromiseFulfilledResult<T> {\n return p.status === 'fulfilled';\n}\n\nexport function isRejected<T>(p: PromiseSettledResult<T>): p is PromiseRejectedResult {\n return p.status === 'rejected';\n}\n\nexport function createNullArrayOfLength(length: number) {\n return new Array(length).fill(null);\n}\n\nexport function safelyFormatHexTxid(id: string) {\n const prefix = '0x';\n if (id.startsWith(prefix)) return id;\n return prefix + id;\n}\n\nfunction kebabCase(str: string) {\n return str.replace(KEBAB_REGEX, match => '-' + match.toLowerCase());\n}\n\nfunction getLetters(string: string, offset = 1) {\n return string.slice(0, offset);\n}\n\nexport function getTicker(value: string) {\n let name = kebabCase(value);\n if (name.includes('-')) {\n const words = name.split('-');\n if (words.length >= 3) {\n name = `${getLetters(words[0])}${getLetters(words[1])}${getLetters(words[2])}`;\n } else {\n name = `${getLetters(words[0])}${getLetters(words[1], 2)}`;\n }\n } else if (name.length >= 3) {\n name = getLetters(name, 3);\n }\n return name.toUpperCase();\n}\n\nexport function propIfDefined(prop: string, value: any) {\n return isBoolean(value) ? { [prop]: value } : {};\n}\n\nexport function isHexString(value: string) {\n return /^[0-9a-fA-F]+$/.test(value);\n}\n\nexport function toHexString(value: number) {\n return value.toString(16);\n}\n\nexport function hexToNumber(hex: string) {\n return parseInt(hex, 16);\n}\n\ntype MapFunction<T, U> = (value: T[keyof T], key: string) => U;\n\nexport function mapObject<T extends object, U>(\n obj: T,\n mapFn: MapFunction<T, U>\n): { [K in keyof T]: U } {\n const result: Partial<{ [K in keyof T]: U }> = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = mapFn(obj[key], key);\n }\n }\n\n return result as { [K in keyof T]: U };\n}\n\nexport function assertIsTruthy<T>(val: T): asserts val is NonNullable<T> {\n if (!val) throw new Error(`expected: true, actual: ${val}`);\n}\n\n/**\n * Ensure all cases in a control flow are handled by asserting a value is `never`.\n *\n * Typically used in `switch` statements to enforce exhaustiveness.\n * TypeScript's type checking will catch unhandled cases at compile time.\n */\nexport function assertUnreachable(value: never): never {\n throw new Error(`Unexpected value: ${JSON.stringify(value)}`);\n}\n\nexport function assertExistence<T>(value: T, message: string): asserts value is NonNullable<T> {\n if (value === null || value === undefined) {\n throw new Error(message);\n }\n}\n\nexport function capitalize(val: string) {\n return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nexport function uniqueArray<T>(arr: T[]) {\n return Array.from(new Set(arr));\n}\n\nexport function removeTrailingNullCharacters(s: string) {\n return s.replace(/\\0*$/g, '');\n}\n\nexport function isNumberOrNumberList(value: unknown): value is number | number[] {\n if (Array.isArray(value)) return value.every(item => isNumber(item));\n return isNumber(value);\n}\n\nexport { sanitizeContent } from './sanitize-content';\n"],"mappings":"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b;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EAC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KAAK,IAAI,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GACpB;AAC1C,SAAO,OAAO,QAAQ,UAAU;GAChC;KAEF,QAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,WAAW;EAE9C,MAAM,YAAY,cAAc,OADjB,WAAW,KAAK,MAAM,GAAG,OAAO,GAAG,MACJ;AAC9C,SAAO,OAAO,QAAQ,UAAU;GAChC;AAGJ,QAAO;;;;;ACnDT,MAAa,YAAY;;;;ACFzB,MAAa,OAAO;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAC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"}
1
+ {"version":3,"file":"index.js","names":["BigNumber","accountAddresses: AccountAddresses","BigNumber","currencyFormatterPresets: Record<\n CurrencyFormatterPreset,\n CurrencyFormatterPresetValue\n>","options: CurrencyFormatterPresetResult","locale","formatterOptions: Intl.NumberFormatOptions","result: string","result: FlattenedObject","BigNumber","result: Partial<{ [K in keyof T]: U }>"],"sources":["../src/counter.ts","../src/math/helpers.ts","../src/math/calculate-averages.ts","../src/math/fibonacci.ts","../src/math/scale-value.ts","../src/money/create-money.ts","../src/money/is-money.ts","../src/money/calculate-money.ts","../src/fiat-metadata.ts","../src/money/is-fiat-currency-code.ts","../src/money/unit-conversion.ts","../src/accounts/account-addresses.ts","../src/assets/sort-assets.ts","../src/assets/asset-display-name.ts","../src/assets/balance-helpers.ts","../src/time.ts","../src/assets/inscription-helpers.ts","../src/assets/asset-id.ts","../src/truncate-middle.ts","../src/market-data.ts","../src/currency-formatter/currency-formatter-presets.ts","../src/currency-formatter/currency-formatter.ts","../src/flatten-object.ts","../src/special-char.ts","../src/spam-filter/tlds-list.ts","../src/spam-filter/spam-filter.ts","../src/extract-phrase-from-string/extract-phrase-from-string.ts","../src/px-string-to-number/px-string-to-number.ts","../src/sanitize-content.ts","../src/index.ts"],"sourcesContent":["export function createCounter(startPosition = 0) {\n let count = startPosition;\n return {\n getValue() {\n return count;\n },\n increment() {\n return (count += 1);\n },\n incrementBy(amount: number) {\n return (count += amount);\n },\n decrement() {\n return (count -= 1);\n },\n };\n}\n","import BigNumber from 'bignumber.js';\n\nimport { isBigInt } from '..';\n\nexport function initBigNumber(num: string | number | BigNumber | bigint) {\n if (BigNumber.isBigNumber(num)) return num;\n return isBigInt(num) ? new BigNumber(num.toString()) : new BigNumber(num);\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nfunction isMultipleOf(multiple: number) {\n return (num: number) => num % multiple === 0;\n}\n\nexport function isEven(num: number) {\n return isMultipleOf(2)(num);\n}\n\nexport function countDecimals(num: string | number | BigNumber) {\n const LARGE_NUMBER_OF_DECIMALS = 100;\n BigNumber.config({ DECIMAL_PLACES: LARGE_NUMBER_OF_DECIMALS });\n const amount = initBigNumber(num);\n const decimals = amount.toString(10).split('.')[1];\n return decimals ? decimals.length : 0;\n}\n\nexport function increaseValueByOneMicroStx(value: string | number | BigNumber) {\n return new BigNumber(value).plus(0.000001).toNumber();\n}\n","import BigNumber from 'bignumber.js';\n\nimport { initBigNumber } from './helpers';\n\nexport function calculateMeanAverage(numbers: BigNumber[] | number[]) {\n if (numbers.length === 0) return new BigNumber(0);\n return numbers\n .map(initBigNumber)\n .reduce((acc, price) => acc.plus(price), new BigNumber(0))\n .dividedBy(numbers.length);\n}\n","function fibonacci(n = 0): number {\n if (n < 0) throw new Error('Cannot calculate from negative number');\n if (n < 2) return n;\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function* fibonacciGenerator(startIndex = 0): IterableIterator<number> {\n let index = startIndex;\n while (index < Infinity) yield fibonacci(index++);\n return Infinity;\n}\n","export function scaleValue(num: number): number {\n if (num === 0) return 0;\n const absNum = Math.abs(num);\n const exponent = Math.floor(Math.log10(absNum));\n const scale = Math.pow(10, exponent);\n const msd = Math.floor(absNum / scale);\n const result = msd * scale;\n // Fix floating point precision issues by rounding to 12 decimal places\n const rounded = Math.round(result * 1e12) / 1e12;\n return num < 0 ? -rounded : rounded;\n}\n","import BigNumber from 'bignumber.js';\n\nimport { currencyDecimalsMap } from '@leather.io/constants';\nimport type { Currency, Money, NumType } from '@leather.io/models';\n\nimport { isBigInt, isUndefined } from '..';\n\ntype KnownCurrencyDecimals = keyof typeof currencyDecimalsMap;\n\nfunction isResolutionOfCurrencyKnown(symbol: Currency): symbol is KnownCurrencyDecimals {\n return symbol in currencyDecimalsMap;\n}\n\nfunction getDecimalsOfSymbolIfKnown(symbol: Currency) {\n if (isResolutionOfCurrencyKnown(symbol)) return currencyDecimalsMap[symbol];\n return null;\n}\n\nfunction throwWhenDecimalUnknown(symbol: Currency, decimals?: number): asserts decimals is number {\n if (isUndefined(decimals) && isUndefined(getDecimalsOfSymbolIfKnown(symbol)))\n throw new Error(`Resolution of currency ${symbol} is unknown, must be described`);\n}\n\n/**\n * @param value Amount described in currency's primary unit\n * @param symbol Identifying letter code, e.g., EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoneyFromDecimal(\n value: NumType,\n symbol: Currency,\n resolution?: number\n): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value).shiftedBy(decimals);\n return Object.freeze({ amount, symbol, decimals });\n}\n\n/**\n * @param value Amount described in currency's fractional base unit, e.g., cents for USD amounts\n * @param symbol Identifying letter code, e.g., EUR\n * @param resolution Optional, required if value not known at build-time\n */\nexport function createMoney(value: NumType, symbol: Currency, resolution?: number): Money {\n throwWhenDecimalUnknown(symbol, resolution);\n const decimals = getDecimalsOfSymbolIfKnown(symbol) ?? resolution;\n const amount = new BigNumber(isBigInt(value) ? value.toString() : value);\n return Object.freeze({ amount, symbol, decimals });\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\n\nimport { isObject } from '..';\n\nexport function isMoney(val: unknown): val is Money {\n if (!isObject(val)) return false;\n return 'amount' in val && 'symbol' in val && 'decimals' in val;\n}\n\nexport function isMoneyGreaterThanZero(money: Money) {\n if (!BigNumber.isBigNumber(money.amount)) return;\n return !(money.amount.isNaN() || money.amount.isZero());\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { type MarketData, type Money, type NumType, formatMarketPair } from '@leather.io/models';\n\nimport { isNumber } from '..';\nimport { initBigNumber } from '../math/helpers';\nimport { createMoney } from './create-money';\nimport { isMoney } from './is-money';\n\nexport function baseCurrencyAmountInQuoteWithFallback(quantity: Money, marketData?: MarketData) {\n return marketData ? baseCurrencyAmountInQuote(quantity, marketData) : createMoney(0, 'USD');\n}\n\nexport function baseCurrencyAmountInQuote(quantity: Money, { pair, price }: MarketData) {\n if (quantity.symbol !== pair.base)\n throw new Error(\n `Cannot calculate value of ${quantity.amount.toString()} ${quantity.symbol} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n return createMoney(\n convertAmountToFractionalUnit(\n convertAmountToBaseUnit(quantity).times(convertAmountToBaseUnit(price)),\n price.decimals\n ),\n pair.quote\n );\n}\n\nexport function quoteCurrencyAmountToBase(\n quantity: Money,\n { pair, price }: MarketData,\n decimals: number\n) {\n if (quantity.symbol !== pair.quote)\n throw new Error(\n `Cannot calculate value of ${quantity.amount.toString()} ${quantity.symbol} with market pair of ${formatMarketPair(\n pair\n )}`\n );\n\n const baseAmount = quantity.amount\n .dividedBy(price.amount)\n .shiftedBy(decimals)\n .integerValue(BigNumber.ROUND_FLOOR);\n\n return createMoney(baseAmount, pair.base, decimals);\n}\n\nexport function convertAmountToFractionalUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(decimals);\n}\n\nexport function convertToMoneyTypeWithDefaultOfZero(\n symbol: string,\n num?: NumType,\n decimals?: number\n) {\n return createMoney(initBigNumber(num ?? 0), symbol.toUpperCase(), decimals);\n}\n\nexport function convertAmountToBaseUnit(num: Money | BigNumber, decimals?: number) {\n if (isMoney(num)) return num.amount.shiftedBy(-num.decimals);\n if (!isNumber(decimals)) throw new Error('Must define decimal of given currency');\n return num.shiftedBy(-decimals);\n}\n\nexport function subtractMoney(xAmount: Money, yAmount: Money) {\n if (xAmount.symbol !== yAmount.symbol) throw new Error('Cannot subtract different currencies');\n return createMoney(xAmount.amount.minus(yAmount.amount), xAmount.symbol, xAmount.decimals);\n}\n\nexport function sumMoney(moneysArr: Money[]) {\n if (moneysArr.some(item => item.symbol !== moneysArr[0].symbol))\n throw new Error('Cannot sum different currencies');\n\n const sum = moneysArr.reduce((acc, item) => acc.plus(item.amount), new BigNumber(0));\n return createMoney(sum, moneysArr[0].symbol, moneysArr[0].decimals);\n}\n\nexport function minMoney(moneyArr: Money[]) {\n if (moneyArr.length === 0) throw new Error('Cannot calculate min of empty array');\n\n const currency = moneyArr[0].symbol;\n if (!moneyArr.every(money => money.symbol === currency)) {\n throw new Error('Cannot calculate min of different currencies');\n }\n\n return moneyArr.reduce((smallest: Money, current: Money) => {\n return current.amount.isLessThan(smallest.amount) ? current : smallest;\n }, moneyArr[0]);\n}\n\nexport function maxMoney(moneyArr: Money[]) {\n if (moneyArr.length === 0) throw new Error('Cannot calculate max of empty array');\n\n const currency = moneyArr[0].symbol;\n if (!moneyArr.every(money => money.symbol === currency)) {\n throw new Error('Cannot calculate max of different currencies');\n }\n\n return moneyArr.reduce((largest: Money, current: Money) => {\n return current.amount.isGreaterThan(largest.amount) ? current : largest;\n }, moneyArr[0]);\n}\n","export const FIAT_METADATA = [\n {\n name: 'US Dollar',\n symbol: '$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'USD',\n namePlural: 'US dollars',\n },\n {\n name: 'Canadian Dollar',\n symbol: 'CA$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'CAD',\n namePlural: 'Canadian dollars',\n },\n {\n name: 'Euro',\n symbol: '€',\n symbolNative: '€',\n decimalDigits: 2,\n rounding: 0,\n code: 'EUR',\n namePlural: 'euros',\n },\n {\n name: 'United Arab Emirates Dirham',\n symbol: 'AED',\n symbolNative: 'د.إ.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'AED',\n namePlural: 'UAE dirhams',\n },\n {\n name: 'Afghan Afghani',\n symbol: 'Af',\n symbolNative: '؋',\n decimalDigits: 0,\n rounding: 0,\n code: 'AFN',\n namePlural: 'Afghan Afghanis',\n },\n {\n name: 'Albanian Lek',\n symbol: 'ALL',\n symbolNative: 'Lek',\n decimalDigits: 0,\n rounding: 0,\n code: 'ALL',\n namePlural: 'Albanian lekë',\n },\n {\n name: 'Armenian Dram',\n symbol: 'AMD',\n symbolNative: 'դր.',\n decimalDigits: 0,\n rounding: 0,\n code: 'AMD',\n namePlural: 'Armenian drams',\n },\n {\n name: 'Argentine Peso',\n symbol: 'AR$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'ARS',\n namePlural: 'Argentine pesos',\n },\n {\n name: 'Australian Dollar',\n symbol: 'AU$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'AUD',\n namePlural: 'Australian dollars',\n },\n {\n name: 'Azerbaijani Manat',\n symbol: 'man.',\n symbolNative: 'ман.',\n decimalDigits: 2,\n rounding: 0,\n code: 'AZN',\n namePlural: 'Azerbaijani manats',\n },\n {\n name: 'Bosnia-Herzegovina Convertible Mark',\n symbol: 'KM',\n symbolNative: 'KM',\n decimalDigits: 2,\n rounding: 0,\n code: 'BAM',\n namePlural: 'Bosnia-Herzegovina convertible marks',\n },\n {\n name: 'Bangladeshi Taka',\n symbol: 'Tk',\n symbolNative: '৳',\n decimalDigits: 2,\n rounding: 0,\n code: 'BDT',\n namePlural: 'Bangladeshi takas',\n },\n {\n name: 'Bulgarian Lev',\n symbol: 'BGN',\n symbolNative: 'лв.',\n decimalDigits: 2,\n rounding: 0,\n code: 'BGN',\n namePlural: 'Bulgarian leva',\n },\n {\n name: 'Bahraini Dinar',\n symbol: 'BD',\n symbolNative: 'د.ب.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'BHD',\n namePlural: 'Bahraini dinars',\n },\n {\n name: 'Burundian Franc',\n symbol: 'FBu',\n symbolNative: 'FBu',\n decimalDigits: 0,\n rounding: 0,\n code: 'BIF',\n namePlural: 'Burundian francs',\n },\n {\n name: 'Brunei Dollar',\n symbol: 'BN$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BND',\n namePlural: 'Brunei dollars',\n },\n {\n name: 'Bolivian Boliviano',\n symbol: 'Bs',\n symbolNative: 'Bs',\n decimalDigits: 2,\n rounding: 0,\n code: 'BOB',\n namePlural: 'Bolivian bolivianos',\n },\n {\n name: 'Brazilian Real',\n symbol: 'R$',\n symbolNative: 'R$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BRL',\n namePlural: 'Brazilian reals',\n },\n {\n name: 'Botswanan Pula',\n symbol: 'BWP',\n symbolNative: 'P',\n decimalDigits: 2,\n rounding: 0,\n code: 'BWP',\n namePlural: 'Botswanan pulas',\n },\n {\n name: 'Belarusian Ruble',\n symbol: 'Br',\n symbolNative: 'руб.',\n decimalDigits: 2,\n rounding: 0,\n code: 'BYN',\n namePlural: 'Belarusian rubles',\n },\n {\n name: 'Belize Dollar',\n symbol: 'BZ$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'BZD',\n namePlural: 'Belize dollars',\n },\n {\n name: 'Congolese Franc',\n symbol: 'CDF',\n symbolNative: 'FrCD',\n decimalDigits: 2,\n rounding: 0,\n code: 'CDF',\n namePlural: 'Congolese francs',\n },\n {\n name: 'Swiss Franc',\n symbol: 'CHF',\n symbolNative: 'CHF',\n decimalDigits: 2,\n rounding: 0.05,\n code: 'CHF',\n namePlural: 'Swiss francs',\n },\n {\n name: 'Chilean Peso',\n symbol: 'CL$',\n symbolNative: '$',\n decimalDigits: 0,\n rounding: 0,\n code: 'CLP',\n namePlural: 'Chilean pesos',\n },\n {\n name: 'Chinese Yuan',\n symbol: 'CN¥',\n symbolNative: 'CN¥',\n decimalDigits: 2,\n rounding: 0,\n code: 'CNY',\n namePlural: 'Chinese yuan',\n },\n {\n name: 'Colombian Peso',\n symbol: 'CO$',\n symbolNative: '$',\n decimalDigits: 0,\n rounding: 0,\n code: 'COP',\n namePlural: 'Colombian pesos',\n },\n {\n name: 'Costa Rican Colón',\n symbol: '₡',\n symbolNative: '₡',\n decimalDigits: 0,\n rounding: 0,\n code: 'CRC',\n namePlural: 'Costa Rican colóns',\n },\n {\n name: 'Cape Verdean Escudo',\n symbol: 'CV$',\n symbolNative: 'CV$',\n decimalDigits: 2,\n rounding: 0,\n code: 'CVE',\n namePlural: 'Cape Verdean escudos',\n },\n {\n name: 'Czech Republic Koruna',\n symbol: 'Kč',\n symbolNative: 'Kč',\n decimalDigits: 2,\n rounding: 0,\n code: 'CZK',\n namePlural: 'Czech Republic korunas',\n },\n {\n name: 'Djiboutian Franc',\n symbol: 'Fdj',\n symbolNative: 'Fdj',\n decimalDigits: 0,\n rounding: 0,\n code: 'DJF',\n namePlural: 'Djiboutian francs',\n },\n {\n name: 'Danish Krone',\n symbol: 'Dkr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'DKK',\n namePlural: 'Danish kroner',\n },\n {\n name: 'Dominican Peso',\n symbol: 'RD$',\n symbolNative: 'RD$',\n decimalDigits: 2,\n rounding: 0,\n code: 'DOP',\n namePlural: 'Dominican pesos',\n },\n {\n name: 'Algerian Dinar',\n symbol: 'DA',\n symbolNative: 'د.ج.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'DZD',\n namePlural: 'Algerian dinars',\n },\n {\n name: 'Estonian Kroon',\n symbol: 'Ekr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'EEK',\n namePlural: 'Estonian kroons',\n },\n {\n name: 'Egyptian Pound',\n symbol: 'EGP',\n symbolNative: 'ج.م.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'EGP',\n namePlural: 'Egyptian pounds',\n },\n {\n name: 'Eritrean Nakfa',\n symbol: 'Nfk',\n symbolNative: 'Nfk',\n decimalDigits: 2,\n rounding: 0,\n code: 'ERN',\n namePlural: 'Eritrean nakfas',\n },\n {\n name: 'Ethiopian Birr',\n symbol: 'Br',\n symbolNative: 'Br',\n decimalDigits: 2,\n rounding: 0,\n code: 'ETB',\n namePlural: 'Ethiopian birrs',\n },\n {\n name: 'British Pound Sterling',\n symbol: '£',\n symbolNative: '£',\n decimalDigits: 2,\n rounding: 0,\n code: 'GBP',\n namePlural: 'British pounds sterling',\n },\n {\n name: 'Georgian Lari',\n symbol: 'GEL',\n symbolNative: 'GEL',\n decimalDigits: 2,\n rounding: 0,\n code: 'GEL',\n namePlural: 'Georgian laris',\n },\n {\n name: 'Ghanaian Cedi',\n symbol: 'GH₵',\n symbolNative: 'GH₵',\n decimalDigits: 2,\n rounding: 0,\n code: 'GHS',\n namePlural: 'Ghanaian cedis',\n },\n {\n name: 'Guinean Franc',\n symbol: 'FG',\n symbolNative: 'FG',\n decimalDigits: 0,\n rounding: 0,\n code: 'GNF',\n namePlural: 'Guinean francs',\n },\n {\n name: 'Guatemalan Quetzal',\n symbol: 'GTQ',\n symbolNative: 'Q',\n decimalDigits: 2,\n rounding: 0,\n code: 'GTQ',\n namePlural: 'Guatemalan quetzals',\n },\n {\n name: 'Hong Kong Dollar',\n symbol: 'HK$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'HKD',\n namePlural: 'Hong Kong dollars',\n },\n {\n name: 'Honduran Lempira',\n symbol: 'HNL',\n symbolNative: 'L',\n decimalDigits: 2,\n rounding: 0,\n code: 'HNL',\n namePlural: 'Honduran lempiras',\n },\n {\n name: 'Croatian Kuna',\n symbol: 'kn',\n symbolNative: 'kn',\n decimalDigits: 2,\n rounding: 0,\n code: 'HRK',\n namePlural: 'Croatian kunas',\n },\n {\n name: 'Hungarian Forint',\n symbol: 'Ft',\n symbolNative: 'Ft',\n decimalDigits: 0,\n rounding: 0,\n code: 'HUF',\n namePlural: 'Hungarian forints',\n },\n {\n name: 'Indonesian Rupiah',\n symbol: 'Rp',\n symbolNative: 'Rp',\n decimalDigits: 0,\n rounding: 0,\n code: 'IDR',\n namePlural: 'Indonesian rupiahs',\n },\n {\n name: 'Israeli New Sheqel',\n symbol: '₪',\n symbolNative: '₪',\n decimalDigits: 2,\n rounding: 0,\n code: 'ILS',\n namePlural: 'Israeli new sheqels',\n },\n {\n name: 'Indian Rupee',\n symbol: '₹',\n symbolNative: 'টকা',\n decimalDigits: 2,\n rounding: 0,\n code: 'INR',\n namePlural: 'Indian rupees',\n },\n {\n name: 'Iraqi Dinar',\n symbol: 'IQD',\n symbolNative: 'د.ع.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'IQD',\n namePlural: 'Iraqi dinars',\n },\n {\n name: 'Iranian Rial',\n symbol: 'IRR',\n symbolNative: '﷼',\n decimalDigits: 0,\n rounding: 0,\n code: 'IRR',\n namePlural: 'Iranian rials',\n },\n {\n name: 'Icelandic Króna',\n symbol: 'Ikr',\n symbolNative: 'kr',\n decimalDigits: 0,\n rounding: 0,\n code: 'ISK',\n namePlural: 'Icelandic krónur',\n },\n {\n name: 'Jamaican Dollar',\n symbol: 'J$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'JMD',\n namePlural: 'Jamaican dollars',\n },\n {\n name: 'Jordanian Dinar',\n symbol: 'JD',\n symbolNative: 'د.أ.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'JOD',\n namePlural: 'Jordanian dinars',\n },\n {\n name: 'Japanese Yen',\n symbol: '¥',\n symbolNative: '¥',\n decimalDigits: 0,\n rounding: 0,\n code: 'JPY',\n namePlural: 'Japanese yen',\n },\n {\n name: 'Kenyan Shilling',\n symbol: 'Ksh',\n symbolNative: 'Ksh',\n decimalDigits: 2,\n rounding: 0,\n code: 'KES',\n namePlural: 'Kenyan shillings',\n },\n {\n name: 'Cambodian Riel',\n symbol: 'KHR',\n symbolNative: '៛',\n decimalDigits: 2,\n rounding: 0,\n code: 'KHR',\n namePlural: 'Cambodian riels',\n },\n {\n name: 'Comorian Franc',\n symbol: 'CF',\n symbolNative: 'FC',\n decimalDigits: 0,\n rounding: 0,\n code: 'KMF',\n namePlural: 'Comorian francs',\n },\n {\n name: 'South Korean Won',\n symbol: '₩',\n symbolNative: '₩',\n decimalDigits: 0,\n rounding: 0,\n code: 'KRW',\n namePlural: 'South Korean won',\n },\n {\n name: 'Kuwaiti Dinar',\n symbol: 'KD',\n symbolNative: 'د.ك.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'KWD',\n namePlural: 'Kuwaiti dinars',\n },\n {\n name: 'Kazakhstani Tenge',\n symbol: 'KZT',\n symbolNative: 'тңг.',\n decimalDigits: 2,\n rounding: 0,\n code: 'KZT',\n namePlural: 'Kazakhstani tenges',\n },\n {\n name: 'Lebanese Pound',\n symbol: 'LB£',\n symbolNative: 'ل.ل.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'LBP',\n namePlural: 'Lebanese pounds',\n },\n {\n name: 'Sri Lankan Rupee',\n symbol: 'SLRs',\n symbolNative: 'SL Re',\n decimalDigits: 2,\n rounding: 0,\n code: 'LKR',\n namePlural: 'Sri Lankan rupees',\n },\n {\n name: 'Lithuanian Litas',\n symbol: 'Lt',\n symbolNative: 'Lt',\n decimalDigits: 2,\n rounding: 0,\n code: 'LTL',\n namePlural: 'Lithuanian litai',\n },\n {\n name: 'Latvian Lats',\n symbol: 'Ls',\n symbolNative: 'Ls',\n decimalDigits: 2,\n rounding: 0,\n code: 'LVL',\n namePlural: 'Latvian lati',\n },\n {\n name: 'Libyan Dinar',\n symbol: 'LD',\n symbolNative: 'د.ل.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'LYD',\n namePlural: 'Libyan dinars',\n },\n {\n name: 'Moroccan Dirham',\n symbol: 'MAD',\n symbolNative: 'د.م.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'MAD',\n namePlural: 'Moroccan dirhams',\n },\n {\n name: 'Moldovan Leu',\n symbol: 'MDL',\n symbolNative: 'MDL',\n decimalDigits: 2,\n rounding: 0,\n code: 'MDL',\n namePlural: 'Moldovan lei',\n },\n {\n name: 'Malagasy Ariary',\n symbol: 'MGA',\n symbolNative: 'MGA',\n decimalDigits: 0,\n rounding: 0,\n code: 'MGA',\n namePlural: 'Malagasy Ariaries',\n },\n {\n name: 'Macedonian Denar',\n symbol: 'MKD',\n symbolNative: 'MKD',\n decimalDigits: 2,\n rounding: 0,\n code: 'MKD',\n namePlural: 'Macedonian denari',\n },\n {\n name: 'Myanma Kyat',\n symbol: 'MMK',\n symbolNative: 'K',\n decimalDigits: 0,\n rounding: 0,\n code: 'MMK',\n namePlural: 'Myanma kyats',\n },\n {\n name: 'Macanese Pataca',\n symbol: 'MOP$',\n symbolNative: 'MOP$',\n decimalDigits: 2,\n rounding: 0,\n code: 'MOP',\n namePlural: 'Macanese patacas',\n },\n {\n name: 'Mauritian Rupee',\n symbol: 'MURs',\n symbolNative: 'MURs',\n decimalDigits: 0,\n rounding: 0,\n code: 'MUR',\n namePlural: 'Mauritian rupees',\n },\n {\n name: 'Mexican Peso',\n symbol: 'MX$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'MXN',\n namePlural: 'Mexican pesos',\n },\n {\n name: 'Malaysian Ringgit',\n symbol: 'RM',\n symbolNative: 'RM',\n decimalDigits: 2,\n rounding: 0,\n code: 'MYR',\n namePlural: 'Malaysian ringgits',\n },\n {\n name: 'Mozambican Metical',\n symbol: 'MTn',\n symbolNative: 'MTn',\n decimalDigits: 2,\n rounding: 0,\n code: 'MZN',\n namePlural: 'Mozambican meticals',\n },\n {\n name: 'Namibian Dollar',\n symbol: 'N$',\n symbolNative: 'N$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NAD',\n namePlural: 'Namibian dollars',\n },\n {\n name: 'Nigerian Naira',\n symbol: '₦',\n symbolNative: '₦',\n decimalDigits: 2,\n rounding: 0,\n code: 'NGN',\n namePlural: 'Nigerian nairas',\n },\n {\n name: 'Nicaraguan Córdoba',\n symbol: 'C$',\n symbolNative: 'C$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NIO',\n namePlural: 'Nicaraguan córdobas',\n },\n {\n name: 'Norwegian Krone',\n symbol: 'Nkr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'NOK',\n namePlural: 'Norwegian kroner',\n },\n {\n name: 'Nepalese Rupee',\n symbol: 'NPRs',\n symbolNative: 'नेरू',\n decimalDigits: 2,\n rounding: 0,\n code: 'NPR',\n namePlural: 'Nepalese rupees',\n },\n {\n name: 'New Zealand Dollar',\n symbol: 'NZ$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'NZD',\n namePlural: 'New Zealand dollars',\n },\n {\n name: 'Omani Rial',\n symbol: 'OMR',\n symbolNative: 'ر.ع.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'OMR',\n namePlural: 'Omani rials',\n },\n {\n name: 'Panamanian Balboa',\n symbol: 'B/.',\n symbolNative: 'B/.',\n decimalDigits: 2,\n rounding: 0,\n code: 'PAB',\n namePlural: 'Panamanian balboas',\n },\n {\n name: 'Peruvian Nuevo Sol',\n symbol: 'S/.',\n symbolNative: 'S/.',\n decimalDigits: 2,\n rounding: 0,\n code: 'PEN',\n namePlural: 'Peruvian nuevos soles',\n },\n {\n name: 'Philippine Peso',\n symbol: '₱',\n symbolNative: '₱',\n decimalDigits: 2,\n rounding: 0,\n code: 'PHP',\n namePlural: 'Philippine pesos',\n },\n {\n name: 'Pakistani Rupee',\n symbol: 'PKRs',\n symbolNative: '₨',\n decimalDigits: 0,\n rounding: 0,\n code: 'PKR',\n namePlural: 'Pakistani rupees',\n },\n {\n name: 'Polish Zloty',\n symbol: 'zł',\n symbolNative: 'zł',\n decimalDigits: 2,\n rounding: 0,\n code: 'PLN',\n namePlural: 'Polish zlotys',\n },\n {\n name: 'Paraguayan Guarani',\n symbol: '₲',\n symbolNative: '₲',\n decimalDigits: 0,\n rounding: 0,\n code: 'PYG',\n namePlural: 'Paraguayan guaranis',\n },\n {\n name: 'Qatari Rial',\n symbol: 'QR',\n symbolNative: 'ر.ق.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'QAR',\n namePlural: 'Qatari rials',\n },\n {\n name: 'Romanian Leu',\n symbol: 'RON',\n symbolNative: 'RON',\n decimalDigits: 2,\n rounding: 0,\n code: 'RON',\n namePlural: 'Romanian lei',\n },\n {\n name: 'Serbian Dinar',\n symbol: 'din.',\n symbolNative: 'дин.',\n decimalDigits: 0,\n rounding: 0,\n code: 'RSD',\n namePlural: 'Serbian dinars',\n },\n {\n name: 'Russian Ruble',\n symbol: 'RUB',\n symbolNative: '₽.',\n decimalDigits: 2,\n rounding: 0,\n code: 'RUB',\n namePlural: 'Russian rubles',\n },\n {\n name: 'Rwandan Franc',\n symbol: 'RWF',\n symbolNative: 'FR',\n decimalDigits: 0,\n rounding: 0,\n code: 'RWF',\n namePlural: 'Rwandan francs',\n },\n {\n name: 'Saudi Riyal',\n symbol: 'SR',\n symbolNative: 'ر.س.‏',\n decimalDigits: 2,\n rounding: 0,\n code: 'SAR',\n namePlural: 'Saudi riyals',\n },\n {\n name: 'Sudanese Pound',\n symbol: 'SDG',\n symbolNative: 'SDG',\n decimalDigits: 2,\n rounding: 0,\n code: 'SDG',\n namePlural: 'Sudanese pounds',\n },\n {\n name: 'Swedish Krona',\n symbol: 'Skr',\n symbolNative: 'kr',\n decimalDigits: 2,\n rounding: 0,\n code: 'SEK',\n namePlural: 'Swedish kronor',\n },\n {\n name: 'Singapore Dollar',\n symbol: 'S$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'SGD',\n namePlural: 'Singapore dollars',\n },\n {\n name: 'Somali Shilling',\n symbol: 'Ssh',\n symbolNative: 'Ssh',\n decimalDigits: 0,\n rounding: 0,\n code: 'SOS',\n namePlural: 'Somali shillings',\n },\n {\n name: 'Syrian Pound',\n symbol: 'SY£',\n symbolNative: 'ل.س.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'SYP',\n namePlural: 'Syrian pounds',\n },\n {\n name: 'Thai Baht',\n symbol: '฿',\n symbolNative: '฿',\n decimalDigits: 2,\n rounding: 0,\n code: 'THB',\n namePlural: 'Thai baht',\n },\n {\n name: 'Tunisian Dinar',\n symbol: 'DT',\n symbolNative: 'د.ت.‏',\n decimalDigits: 3,\n rounding: 0,\n code: 'TND',\n namePlural: 'Tunisian dinars',\n },\n {\n name: 'Tongan Paʻanga',\n symbol: 'T$',\n symbolNative: 'T$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TOP',\n namePlural: 'Tongan paʻanga',\n },\n {\n name: 'Turkish Lira',\n symbol: 'TL',\n symbolNative: 'TL',\n decimalDigits: 2,\n rounding: 0,\n code: 'TRY',\n namePlural: 'Turkish Lira',\n },\n {\n name: 'Trinidad and Tobago Dollar',\n symbol: 'TT$',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TTD',\n namePlural: 'Trinidad and Tobago dollars',\n },\n {\n name: 'New Taiwan Dollar',\n symbol: 'NT$',\n symbolNative: 'NT$',\n decimalDigits: 2,\n rounding: 0,\n code: 'TWD',\n namePlural: 'New Taiwan dollars',\n },\n {\n name: 'Tanzanian Shilling',\n symbol: 'TSh',\n symbolNative: 'TSh',\n decimalDigits: 0,\n rounding: 0,\n code: 'TZS',\n namePlural: 'Tanzanian shillings',\n },\n {\n name: 'Ukrainian Hryvnia',\n symbol: '₴',\n symbolNative: '₴',\n decimalDigits: 2,\n rounding: 0,\n code: 'UAH',\n namePlural: 'Ukrainian hryvnias',\n },\n {\n name: 'Ugandan Shilling',\n symbol: 'USh',\n symbolNative: 'USh',\n decimalDigits: 0,\n rounding: 0,\n code: 'UGX',\n namePlural: 'Ugandan shillings',\n },\n {\n name: 'Uruguayan Peso',\n symbol: '$U',\n symbolNative: '$',\n decimalDigits: 2,\n rounding: 0,\n code: 'UYU',\n namePlural: 'Uruguayan pesos',\n },\n {\n name: 'Uzbekistan Som',\n symbol: 'UZS',\n symbolNative: 'UZS',\n decimalDigits: 0,\n rounding: 0,\n code: 'UZS',\n namePlural: 'Uzbekistan som',\n },\n {\n name: 'Venezuelan Bolívar',\n symbol: 'Bs.F.',\n symbolNative: 'Bs.F.',\n decimalDigits: 2,\n rounding: 0,\n code: 'VEF',\n namePlural: 'Venezuelan bolívars',\n },\n {\n name: 'Vietnamese Dong',\n symbol: '₫',\n symbolNative: '₫',\n decimalDigits: 0,\n rounding: 0,\n code: 'VND',\n namePlural: 'Vietnamese dong',\n },\n {\n name: 'CFA Franc BEAC',\n symbol: 'FCFA',\n symbolNative: 'FCFA',\n decimalDigits: 0,\n rounding: 0,\n code: 'XAF',\n namePlural: 'CFA francs BEAC',\n },\n {\n name: 'CFA Franc BCEAO',\n symbol: 'CFA',\n symbolNative: 'CFA',\n decimalDigits: 0,\n rounding: 0,\n code: 'XOF',\n namePlural: 'CFA francs BCEAO',\n },\n {\n name: 'Yemeni Rial',\n symbol: 'YR',\n symbolNative: 'ر.ي.‏',\n decimalDigits: 0,\n rounding: 0,\n code: 'YER',\n namePlural: 'Yemeni rials',\n },\n {\n name: 'South African Rand',\n symbol: 'R',\n symbolNative: 'R',\n decimalDigits: 2,\n rounding: 0,\n code: 'ZAR',\n namePlural: 'South African rand',\n },\n {\n name: 'Zambian Kwacha',\n symbol: 'ZK',\n symbolNative: 'ZK',\n decimalDigits: 0,\n rounding: 0,\n code: 'ZMK',\n namePlural: 'Zambian kwachas',\n },\n {\n name: 'Zimbabwean Dollar',\n symbol: 'ZWL$',\n symbolNative: 'ZWL$',\n decimalDigits: 0,\n rounding: 0,\n code: 'ZWL',\n namePlural: 'Zimbabwean Dollar',\n },\n];\n","import { FIAT_METADATA } from '../fiat-metadata';\n\nconst fiatCurrencyCodeList = new Set(FIAT_METADATA.map(currency => currency.code));\n\nexport function isFiatCurrencyCode(code: string) {\n return fiatCurrencyCodeList.has(code);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { BTC_DECIMALS, STX_DECIMALS } from '@leather.io/constants';\nimport { Money } from '@leather.io/models';\n\nimport { initBigNumber } from '../math/helpers';\n\nfunction fractionalUnitToUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(-decimals);\n };\n}\n\nexport function unitToFractionalUnit(decimals: number) {\n return (unit: number | string | BigNumber) => {\n const unitBigNumber = initBigNumber(unit);\n return unitBigNumber.shiftedBy(decimals);\n };\n}\n\nexport const satToBtc = fractionalUnitToUnit(BTC_DECIMALS);\nexport const btcToSat = unitToFractionalUnit(BTC_DECIMALS);\n\nexport const microStxToStx = fractionalUnitToUnit(STX_DECIMALS);\nexport const stxToMicroStx = unitToFractionalUnit(STX_DECIMALS);\n\nexport function moneyToBaseUnit(sum: Money) {\n return fractionalUnitToUnit(sum.decimals)(sum.amount);\n}\n","import {\n AccountAddresses,\n AccountId,\n BitcoinAddressInfo,\n StacksAddressInfo,\n} from '@leather.io/models';\n\nexport function createAccountAddresses(\n accountId: AccountId,\n btcDescriptors: string[] = [],\n stxAddress?: string\n): AccountAddresses {\n const accountAddresses: AccountAddresses = { id: accountId };\n const taprootDescriptor = btcDescriptors.find(desc => desc.startsWith('tr('));\n const nativeSegwitDescriptor = btcDescriptors.find(desc => desc.startsWith('wpkh('));\n if (taprootDescriptor && nativeSegwitDescriptor) {\n accountAddresses.bitcoin = {\n taprootDescriptor,\n nativeSegwitDescriptor,\n };\n }\n if (stxAddress) {\n accountAddresses.stacks = { stxAddress };\n }\n return accountAddresses;\n}\n\nexport function hasBitcoinAddress(\n account: AccountAddresses\n): account is AccountAddresses & { bitcoin: BitcoinAddressInfo } {\n return account.bitcoin !== undefined;\n}\n\nexport function hasStacksAddress(\n account: AccountAddresses\n): account is AccountAddresses & { stacks: StacksAddressInfo } {\n return account.stacks !== undefined;\n}\n","import type { Money } from '@leather.io/models';\n\nexport function sortAssetsByName<T extends { name: string }[]>(assets: T) {\n return assets\n .sort((a, b) => {\n if (a.name < b.name) return -1;\n if (a.name > b.name) return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'STX') return -1;\n if (b.name !== 'STX') return 1;\n return 0;\n })\n .sort((a, b) => {\n if (a.name === 'BTC') return -1;\n if (b.name !== 'BTC') return 1;\n return 0;\n });\n}\n\nexport function migratePositiveAssetBalancesToTop<T extends { balance: Money }[]>(assets: T) {\n const assetsWithPositiveBalance = assets.filter(asset => asset.balance.amount.isGreaterThan(0));\n const assetsWithZeroBalance = assets.filter(asset => asset.balance.amount.isEqualTo(0));\n return [...assetsWithPositiveBalance, ...assetsWithZeroBalance] as T;\n}\n","import { CryptoAsset } from '@leather.io/models';\n\nimport { assertUnreachable } from '../index';\n\nexport function getAssetDisplayName(asset: CryptoAsset) {\n const { protocol } = asset;\n\n switch (protocol) {\n case 'nativeBtc':\n return 'bitcoin';\n case 'nativeStx':\n return 'stacks';\n case 'brc20':\n return 'brc-20';\n case 'inscription':\n return 'inscription';\n case 'rune':\n return 'rune';\n case 'sip10':\n return asset.name;\n case 'sip9':\n return asset.name;\n case 'stamp':\n return 'stamp';\n case 'src20':\n return 'src-20';\n default:\n assertUnreachable(protocol);\n }\n}\n","import { BaseCryptoAssetBalance, BtcBalance, Money, StxBalance } from '@leather.io/models';\n\nimport { createMoney, subtractMoney, sumMoney } from '../money';\n\nexport function createBaseCryptoAssetBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money\n): BaseCryptoAssetBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n return {\n totalBalance,\n inboundBalance,\n outboundBalance,\n pendingBalance: subtractMoney(sumMoney([totalBalance, inboundBalance]), outboundBalance),\n availableBalance: subtractMoney(totalBalance, outboundBalance),\n };\n}\n\nexport function createBtcBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money,\n protectedBal?: Money,\n dustBal?: Money,\n unspendableBal?: Money\n): BtcBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n const protectedBalance = protectedBal ?? zeroBalance;\n const dustBalance = dustBal ?? zeroBalance;\n const unspendableBalance = unspendableBal ?? zeroBalance;\n const baseBalance = createBaseCryptoAssetBalance(totalBalance, inboundBalance, outboundBalance);\n return {\n ...baseBalance,\n protectedBalance,\n dustBalance,\n availableBalance: subtractMoney(totalBalance, unspendableBalance),\n unspendableBalance,\n };\n}\n\nexport function createStxBalance(\n totalBalance: Money,\n inboundBal?: Money,\n outboundBal?: Money,\n lockedBal?: Money\n): StxBalance {\n const zeroBalance = createMoney(0, totalBalance.symbol);\n const inboundBalance = inboundBal ?? zeroBalance;\n const outboundBalance = outboundBal ?? zeroBalance;\n const lockedBalance = lockedBal ?? zeroBalance;\n const baseBalance = createBaseCryptoAssetBalance(totalBalance, inboundBalance, outboundBalance);\n const availableBalance = subtractMoney(totalBalance, outboundBalance);\n return {\n ...baseBalance,\n lockedBalance,\n unlockedBalance: subtractMoney(totalBalance, lockedBalance),\n availableBalance,\n availableUnlockedBalance: subtractMoney(availableBalance, lockedBalance),\n };\n}\n\nexport function aggregateBaseCryptoAssetBalances(\n balances: BaseCryptoAssetBalance[]\n): BaseCryptoAssetBalance {\n return createBaseCryptoAssetBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance))\n );\n}\n\nexport function aggregateBtcBalances(balances: BtcBalance[]): BtcBalance {\n return createBtcBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance)),\n sumMoney(balances.map(b => b.protectedBalance)),\n sumMoney(balances.map(b => b.dustBalance)),\n sumMoney(balances.map(b => b.unspendableBalance))\n );\n}\n\nexport function aggregateStxBalances(balances: StxBalance[]): StxBalance {\n return createStxBalance(\n sumMoney(balances.map(b => b.totalBalance)),\n sumMoney(balances.map(b => b.inboundBalance)),\n sumMoney(balances.map(b => b.outboundBalance)),\n sumMoney(balances.map(b => b.lockedBalance))\n );\n}\n","// WARNING: When using `setTimeout` method, there is an upper maximum\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#maximum_delay_value\nexport const oneMinInMs = 60 * 1000;\nexport const fiveMinInMs = 5 * oneMinInMs;\nexport const oneDayInMs = 24 * 60 * 60 * 1000;\nexport const oneWeekInMs = 7 * oneDayInMs;\n\nexport function dateToUnixTimestamp(date: Date): number {\n return Math.floor(date.getTime() / 1000);\n}\n\nexport function weeksInMs(weeks: number) {\n return daysInMs(weeks * 7);\n}\n\nexport function daysInMs(days: number) {\n return hoursInMs(days * 24);\n}\n\nexport function hoursInMs(hours: number) {\n return minutesInMs(hours * 60);\n}\n\nexport function minutesInMs(minutes: number) {\n return secondsInMs(minutes * 60);\n}\n\nexport function secondsInMs(seconds: number) {\n return seconds * 1000;\n}\n\nexport function weeksInSec(weeks: number) {\n return daysInSec(weeks * 7);\n}\n\nexport function daysInSec(days: number) {\n return hoursInSec(days * 24);\n}\n\nexport function hoursInSec(hours: number) {\n return minutesInSec(hours * 60);\n}\n\nexport function minutesInSec(minutes: number) {\n return minutes * 60;\n}\n","import { ORD_IO_URL } from '@leather.io/constants';\nimport {\n CryptoAssetCategories,\n CryptoAssetChains,\n CryptoAssetProtocols,\n InscriptionAsset,\n InscriptionMimeType,\n} from '@leather.io/models';\n\nimport { dateToUnixTimestamp } from '../time';\n\nexport function whenInscriptionMimeType<T>(\n mimeType: string,\n branches: { [k in InscriptionMimeType]?: () => T }\n) {\n if (mimeType.startsWith('audio/') && branches.audio) {\n return branches.audio();\n }\n if (mimeType.startsWith('text/html') && branches.html) {\n return branches.html();\n }\n if (mimeType.startsWith('image/svg') && branches.svg) {\n return branches.svg();\n }\n if (mimeType.startsWith('image/') && branches.image) {\n return branches.image();\n }\n if (mimeType.startsWith('text') && branches.text) {\n return branches.text();\n }\n if (mimeType.startsWith('video/') && branches.video) {\n return branches.video();\n }\n if (mimeType.startsWith('model/gltf') && branches.gltf) {\n return branches.gltf();\n }\n if (branches.other) return branches.other();\n\n throw new Error('Unhandled inscription type');\n}\n\nexport interface CreateInscriptionData {\n readonly id: string;\n readonly number: number;\n readonly contentSrc: string;\n readonly mimeType?: string;\n readonly ownerAddress: string;\n readonly satPoint: string;\n readonly genesisBlockHash: string;\n readonly genesisTimestamp: string | number;\n readonly genesisBlockHeight: number;\n readonly outputValue: string;\n readonly thumbnailSrc?: string;\n}\n\nexport function createInscriptionAsset(data: CreateInscriptionData): InscriptionAsset {\n const ordinalPreviewSrc = `https://ordinals.com/preview/${data.id}`;\n const ordIoSrc = `${ORD_IO_URL}/content/${data.id}`;\n const thumbnailSrc = data.thumbnailSrc ?? ordinalPreviewSrc;\n const primarySrc = data.contentSrc || ordinalPreviewSrc;\n const preview = `https://ordinals.hiro.so/inscription/${data.id}`;\n const title = `Inscription ${data.number}`;\n const [txid, output, offset] = data.satPoint.split(':');\n\n const sharedInfo = {\n chain: CryptoAssetChains.bitcoin,\n category: CryptoAssetCategories.nft,\n protocol: CryptoAssetProtocols.inscription,\n id: data.id,\n number: data.number,\n output,\n txid,\n offset,\n address: data.ownerAddress,\n preview,\n title,\n genesisBlockHeight: data.genesisBlockHeight,\n genesisBlockHash: data.genesisBlockHash,\n genesisTimestamp: dateToUnixTimestamp(new Date(data.genesisTimestamp)),\n value: data.outputValue,\n thumbnailSrc,\n };\n\n if (!data.mimeType) {\n return {\n ...sharedInfo,\n mimeType: 'other',\n src: '',\n };\n }\n\n return whenInscriptionMimeType<InscriptionAsset>(data.mimeType, {\n audio: () => ({\n ...sharedInfo,\n mimeType: 'audio',\n name: 'inscription',\n src: primarySrc,\n }),\n gltf: () => ({\n ...sharedInfo,\n mimeType: 'gltf',\n name: 'inscription',\n src: primarySrc,\n }),\n html: () => ({\n ...sharedInfo,\n mimeType: 'html',\n name: 'inscription',\n thumbnailSrc: ordIoSrc,\n src: primarySrc,\n }),\n image: () => ({\n ...sharedInfo,\n mimeType: 'image',\n name: 'inscription',\n thumbnailSrc: ordIoSrc,\n src: primarySrc,\n }),\n svg: () => ({\n ...sharedInfo,\n mimeType: 'svg',\n name: 'inscription',\n src: primarySrc,\n }),\n text: () => ({\n ...sharedInfo,\n mimeType: 'text',\n name: 'inscription',\n src: data.contentSrc,\n }),\n video: () => ({\n ...sharedInfo,\n mimeType: 'video',\n name: 'inscription',\n src: primarySrc,\n }),\n other: () => ({\n ...sharedInfo,\n mimeType: 'other',\n name: 'inscription',\n src: data.contentSrc ?? '',\n }),\n });\n}\n","import {\n CryptoAsset,\n CryptoAssetId,\n CryptoAssetProtocol,\n CryptoAssetProtocols,\n Sip9Asset,\n} from '@leather.io/models';\n\nimport { assertUnreachable } from '../index';\n\nexport function matchesAssetId(asset: CryptoAsset, assetId: CryptoAssetId) {\n const assetIdentifier = getAssetId(asset);\n return isSameAssetId(assetIdentifier, assetId);\n}\n\nexport function isSameAssetId(assetId1: CryptoAssetId, assetId2: CryptoAssetId) {\n return assetId1.protocol === assetId2.protocol && assetId1.id === assetId2.id;\n}\n\nexport function isSameAsset(asset1: CryptoAsset, asset2: CryptoAsset) {\n return isSameAssetId(getAssetId(asset1), getAssetId(asset2));\n}\n\nexport function getAssetId(asset: CryptoAsset): CryptoAssetId {\n switch (asset.protocol) {\n case 'nativeBtc':\n return {\n protocol: 'nativeBtc',\n id: asset.symbol,\n };\n case 'nativeStx':\n return {\n protocol: 'nativeStx',\n id: asset.symbol,\n };\n case 'sip10':\n return {\n protocol: 'sip10',\n id: asset.assetId,\n };\n case 'rune':\n return {\n protocol: 'rune',\n id: asset.runeName,\n };\n case 'brc20':\n return {\n protocol: 'brc20',\n id: asset.symbol,\n };\n case 'src20':\n return {\n protocol: 'src20',\n id: asset.id,\n };\n case 'inscription':\n return {\n protocol: 'inscription',\n id: asset.id,\n };\n case 'stamp':\n return {\n protocol: 'stamp',\n id: asset.stamp.toString(),\n };\n case 'sip9':\n return createSip9AssetId(asset);\n default:\n assertUnreachable(asset);\n }\n}\n\nexport function createSip9AssetId(asset: Sip9Asset): CryptoAssetId {\n return {\n protocol: asset.protocol,\n id: formatSip9IdField(asset),\n };\n}\n\nexport function formatSip9IdField(asset: Sip9Asset) {\n return `${asset.assetId}|${asset.tokenId}`;\n}\n\nexport function parseSip9IdField(id: string) {\n const [assetId, tokenId] = id.split('|');\n return { assetId, tokenId: Number(tokenId) };\n}\n\nexport type SerializedCryptoAssetId = `${string}|${string}`;\n\nexport function serializeAssetId(assetId: CryptoAssetId): SerializedCryptoAssetId {\n return `${assetId.protocol}|${assetId.id}`;\n}\n\nexport function deserializeAssetId(serializedAssetId: SerializedCryptoAssetId): CryptoAssetId {\n const [protocol, ...idParts] = serializedAssetId.split('|');\n const id = idParts.join('|');\n if (!Object.keys(CryptoAssetProtocols).includes(protocol)) {\n throw new Error(`Unrecognized Asset Protocol: ${protocol}`);\n }\n\n return {\n protocol: protocol as CryptoAssetProtocol,\n id,\n };\n}\n","function truncateHex(hex: string, offset = 5): string {\n return `${hex.substring(0, offset + 2)}…${hex.substring(hex.length - offset)}`;\n}\n\nexport function truncateMiddle(input: string, offset = 5): string {\n if (!input) return '';\n // Hex\n if (input.startsWith('0x')) {\n return truncateHex(input, offset);\n }\n // For contracts\n if (input.includes('.')) {\n const parts = input.split('.');\n const start = parts[0]?.substring(0, offset);\n const end = parts[0]?.substring(parts[0].length - offset, parts[0].length);\n return `${start}…${end}.${parts[1]}`;\n } else {\n // Everything else\n const start = input?.substring(0, offset);\n const end = input?.substring(input.length - offset, input.length);\n return `${start}…${end}`;\n }\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { currencyDecimalsMap, currencyNameMap } from '@leather.io/constants';\nimport { type MarketData, createMarketData, createMarketPair } from '@leather.io/models';\n\nimport { convertAmountToBaseUnit, convertAmountToFractionalUnit } from './money/calculate-money';\nimport { createMoney } from './money/create-money';\n\n/**\n * Rebases MarketData to a different quote currency using exchange rate.\n *\n * @param marketData - e.g. STX/USD\n * @param exchangeRate - e.g. EUR/USD (EUR is target quote currency)\n * @returns e.g. STX/EUR\n */\nexport function rebaseMarketData(marketData: MarketData, exchangeRate: MarketData): MarketData {\n if (exchangeRate.pair.quote !== marketData.pair.quote) {\n throw new Error(\n `Exchange rate quote currency (${exchangeRate.pair.quote}) must match original quote currency (${marketData.pair.quote})`\n );\n }\n\n const targetQuoteCurrency = exchangeRate.pair.base;\n if (!(targetQuoteCurrency in currencyNameMap)) {\n throw new Error(`Target currency must be a supported quote currency: ${targetQuoteCurrency}`);\n }\n\n const rebasedPrice = createMoney(\n convertAmountToFractionalUnit(\n marketData.price.amount.dividedBy(exchangeRate.price.amount),\n currencyDecimalsMap[targetQuoteCurrency]\n ),\n targetQuoteCurrency\n );\n\n return createMarketData(\n createMarketPair(marketData.pair.base, targetQuoteCurrency),\n rebasedPrice\n );\n}\n\n/**\n * Inverts exchange rate market data by swapping base/quote currencies (e.g. USD/EUR -> EUR/USD)\n */\nexport function invertExchangeRate(exchangeRate: MarketData): MarketData {\n if (!(exchangeRate.pair.base in currencyNameMap)) {\n throw new Error(`Base currency must be a supported quote currency: ${exchangeRate.pair.base}`);\n }\n\n const invertedPrice = createMoney(\n convertAmountToFractionalUnit(\n new BigNumber(1).dividedBy(convertAmountToBaseUnit(exchangeRate.price)),\n currencyDecimalsMap[exchangeRate.pair.base]\n ),\n exchangeRate.pair.base\n );\n\n return createMarketData(\n createMarketPair(exchangeRate.pair.quote, exchangeRate.pair.base),\n invertedPrice\n );\n}\n","import { isFiatCurrencyCode } from '../money';\nimport {\n CurrencyFormatterPreset,\n CurrencyFormatterPresetResult,\n CurrencyFormatterPresetValue,\n} from './currency-formatter.types';\n\nexport const currencyFormatterPresets: Record<\n CurrencyFormatterPreset,\n CurrencyFormatterPresetValue\n> = {\n price: input => {\n const options: CurrencyFormatterPresetResult = {\n compactThreshold: Infinity,\n approximateDust: false,\n showCurrency: true,\n numberFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n } as const;\n\n if (input.amount >= 0 && input.amount <= 99) {\n options.numberFormatOptions = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 6,\n };\n }\n\n return options;\n },\n 'shorthand-balance': input => {\n function getMaximumFractionDigits() {\n if (isFiatCurrencyCode(input.currencyCode)) {\n return 2;\n }\n\n return input.amount < 0.001 ? input.decimals : 4;\n }\n\n return {\n showCurrency: isFiatCurrencyCode(input.currencyCode),\n numberFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: getMaximumFractionDigits(),\n },\n };\n },\n 'pad-decimals': input => ({\n compactThreshold: Infinity,\n numberFormatOptions: {\n minimumFractionDigits: input.decimals,\n maximumFractionDigits: input.decimals,\n },\n }),\n};\n","import { isFiatCurrencyCode } from '../money';\nimport { currencyFormatterPresets } from './currency-formatter-presets';\nimport {\n CurrencyFormatterPreset,\n FormatAmountCustomOptions,\n FormatAmountInput,\n FormatAmountOptions,\n} from './currency-formatter.types';\n\ninterface CreateCurrencyFormatterParams {\n locale: string;\n onError?(error: unknown, context: { locale: string; options: Intl.NumberFormatOptions }): void;\n}\n\nconst fallback = '';\nconst defaultCompactThreshold = 1_000_000;\nconst thinSpace = '\\u2009';\nconst defaultCustomOptions = {\n compactThreshold: defaultCompactThreshold,\n showCurrency: true,\n approximateDust: true,\n};\n\nexport function createCurrencyFormatter({ locale, onError }: CreateCurrencyFormatterParams) {\n function safeInitializeNumberFormat(locale: string, options: Intl.NumberFormatOptions) {\n try {\n return new Intl.NumberFormat(locale, options);\n } catch (e) {\n onError?.(e, { locale, options });\n return null;\n }\n }\n\n function formatAmount(input: FormatAmountInput, options: FormatAmountOptions = {}) {\n return formatAmountWithMeta(input, options).result;\n }\n\n function formatAmountWithMeta(input: FormatAmountInput, options: FormatAmountOptions = {}) {\n const { amount, currencyCode, decimals } = input;\n const { preset, numberFormatOptions = {}, ...customOptions } = options;\n const { numberFormatOptions: presetNumberFormatOptions = {}, ...presetCustomOptions } =\n getPresetResult(preset, input);\n const { compactThreshold, showCurrency, approximateDust } = mergeCustomOptions(\n presetCustomOptions,\n customOptions\n );\n const shouldCompact = evaluateCompactNotation(compactThreshold, amount);\n const isFiatCurrency = isFiatCurrencyCode(currencyCode);\n const isDust = isFiatCurrency && isSmallerThanMinorUnit(amount, decimals);\n const { minimumFractionDigits, maximumFractionDigits } = deriveFractionOptions(\n amount,\n decimals,\n shouldCompact,\n presetNumberFormatOptions,\n numberFormatOptions\n );\n const formatterOptions: Intl.NumberFormatOptions = {\n minimumFractionDigits,\n maximumFractionDigits,\n ...(shouldCompact && { notation: 'compact' }),\n ...omitFractionOptions(presetNumberFormatOptions),\n ...omitFractionOptions(numberFormatOptions),\n };\n\n if (isFiatCurrency && showCurrency) {\n formatterOptions.style = 'currency';\n formatterOptions.currency = currencyCode;\n } else {\n formatterOptions.style = 'decimal';\n }\n\n const formatter = safeInitializeNumberFormat(locale, formatterOptions);\n\n if (!formatter)\n return {\n valid: false,\n result: fallback,\n parts: [],\n resolvedOptions: {},\n };\n\n let result: string;\n\n if (isDust && approximateDust) {\n const smallestUnit = getSmallestUnit(decimals);\n const multiplier = amount < 0 ? -1 : 1;\n result = `<${thinSpace}${formatter.format(smallestUnit * multiplier)}`;\n } else {\n result = formatter.format(amount);\n }\n\n if (!isFiatCurrency && showCurrency) {\n result += `\\u00A0${currencyCode}`;\n }\n\n return {\n valid: true,\n result,\n parts: buildParts({\n formatter,\n amount,\n isDust,\n approximateDust,\n decimals,\n currencyCode,\n isFiatCurrency,\n showCurrency,\n }),\n resolvedOptions: formatter.resolvedOptions(),\n };\n }\n\n function formatPercentage(amount: number, decimals = 2) {\n const formatter = safeInitializeNumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n\n if (!formatter) return fallback;\n\n return formatter.format(amount);\n }\n\n return {\n formatAmount,\n formatAmountWithMeta,\n formatPercentage,\n };\n}\n\nexport { type FormatAmountOptions };\n\n// -----------------------------------------------------------------------------\n//\n// Helpers\n//\n// -----------------------------------------------------------------------------\n// Amend NumberFormat's formatToParts with crypto and approximate dust display\nfunction buildParts({\n formatter,\n amount,\n isDust,\n approximateDust,\n decimals,\n currencyCode,\n isFiatCurrency,\n showCurrency,\n}: {\n formatter: Intl.NumberFormat;\n amount: number;\n isDust: boolean;\n approximateDust: boolean;\n decimals: number;\n currencyCode: string;\n isFiatCurrency: boolean;\n showCurrency: boolean;\n}): Intl.NumberFormatPart[] {\n if (typeof formatter.formatToParts !== 'function') return [];\n\n const baseAmount =\n isDust && approximateDust ? getSmallestUnit(decimals) * (amount < 0 ? -1 : 1) : amount;\n\n const parts = formatter.formatToParts(baseAmount);\n\n if (isDust && approximateDust) {\n parts.unshift({ type: 'unknown', value: '<' }, { type: 'literal', value: thinSpace });\n }\n\n if (!isFiatCurrency && showCurrency) {\n parts.push({ type: 'literal', value: '\\u00A0' }, { type: 'currency', value: currencyCode });\n }\n\n return parts;\n}\n\nfunction getPresetResult(preset: CurrencyFormatterPreset | undefined, input: FormatAmountInput) {\n if (!preset) return {};\n\n if (typeof currencyFormatterPresets[preset] === 'function') {\n return currencyFormatterPresets[preset](input);\n }\n\n return currencyFormatterPresets[preset];\n}\n\nfunction mergeCustomOptions(\n presetCustomOptions: FormatAmountCustomOptions,\n customOptions: FormatAmountCustomOptions\n) {\n return {\n ...defaultCustomOptions,\n ...presetCustomOptions,\n ...customOptions,\n };\n}\n\nfunction evaluateCompactNotation(compactThreshold: number, amount: number) {\n return Math.abs(amount) >= compactThreshold;\n}\n\nfunction getSmallestUnit(decimals: number) {\n return 1 / 10 ** decimals;\n}\n\nfunction isSmallerThanMinorUnit(value: number, decimals: number): boolean {\n if (value === 0) return false;\n const unit = 1 / 10 ** decimals;\n return Math.abs(value) < unit;\n}\n\nfunction omitFractionOptions(options: Intl.NumberFormatOptions) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minimumFractionDigits, maximumFractionDigits, ...rest } = options;\n return rest;\n}\n\nfunction deriveFractionOptions(\n amount: number,\n decimals: number,\n compact: boolean,\n presetNumberFormatOptions: Intl.NumberFormatOptions,\n numberFormatOptions: Intl.NumberFormatOptions\n) {\n const defaultMinimumFractionDigits = 2;\n\n function getMaximumFractionDigits() {\n if (compact && !numberFormatOptions.maximumFractionDigits) {\n return defaultMinimumFractionDigits;\n }\n\n if (\n !presetNumberFormatOptions.maximumFractionDigits &&\n !numberFormatOptions.maximumFractionDigits\n ) {\n if (amount >= 1000 && amount <= 999999) {\n return Math.min(decimals, defaultMinimumFractionDigits);\n }\n }\n\n return (\n numberFormatOptions.maximumFractionDigits ??\n presetNumberFormatOptions.maximumFractionDigits ??\n decimals\n );\n }\n\n const maximumFractionDigits = getMaximumFractionDigits();\n // Ensure final minimumFractionDigits <= maximumFractionDigits to avoid Intl.NumberFormat RangeError\n const minimumFractionDigits = Math.min(\n numberFormatOptions.minimumFractionDigits ??\n presetNumberFormatOptions.minimumFractionDigits ??\n defaultMinimumFractionDigits,\n maximumFractionDigits\n );\n\n return {\n maximumFractionDigits,\n minimumFractionDigits,\n };\n}\n","type ObjectValue = string | number | boolean | null | NestedObject | ObjectValue[];\ninterface NestedObject {\n [key: string]: ObjectValue;\n}\n\ninterface FlattenedObject {\n [key: string]: string | number | boolean | null;\n}\n\n/**\n * Flattens a nested object or array into a flat object with dot-notation key paths.\n *\n * @param input - The object or array to flatten\n * @param prefix - Internal parameter for recursion, represents the current key path\n * @returns A flat object where keys represent the path to the original nested value\n *\n * @example\n * ```typescript\n * // Object example\n * flattenObject({ layer1: { layer2: 'value' } })\n * // Returns: { 'layer1.layer2': 'value' }\n *\n * // Array example\n * flattenObject([{ key: 'value' }])\n * // Returns: { '[0].key': 'value' }\n *\n * // Mixed example\n * flattenObject({ users: [{ name: 'John', age: 30 }] })\n * // Returns: { 'users[0].name': 'John', 'users[0].age': 30 }\n * ```\n */\nexport function flattenObject(input: ObjectValue, prefix = ''): FlattenedObject {\n const result: FlattenedObject = {};\n\n if (input === null || typeof input !== 'object') {\n if (prefix === '') return { value: input };\n return { [prefix]: input };\n }\n\n if (Array.isArray(input)) {\n input.forEach((item, index) => {\n const key = prefix === '' ? `[${index}]` : `${prefix}[${index}]`;\n const flattened = flattenObject(item, key);\n Object.assign(result, flattened);\n });\n } else {\n Object.entries(input).forEach(([key, value]) => {\n const newKey = prefix === '' ? key : `${prefix}.${key}`;\n const flattened = flattenObject(value, newKey);\n Object.assign(result, flattened);\n });\n }\n\n return result;\n}\n","// A minus sign is a wider character than a hyphen, and should be used in\n// numerical contexts\nexport const minusSign = '−';\n","export const tlds = [\n 'AAA',\n 'AARP',\n 'ABB',\n 'ABBOTT',\n 'ABBVIE',\n 'ABC',\n 'ABLE',\n 'ABOGADO',\n 'ABUDHABI',\n 'AC',\n 'ACADEMY',\n 'ACCENTURE',\n 'ACCOUNTANT',\n 'ACCOUNTANTS',\n 'ACO',\n 'ACTOR',\n 'AD',\n 'ADS',\n 'ADULT',\n 'AE',\n 'AEG',\n 'AERO',\n 'AETNA',\n 'AF',\n 'AFL',\n 'AFRICA',\n 'AG',\n 'AGAKHAN',\n 'AGENCY',\n 'AI',\n 'AIG',\n 'AIRBUS',\n 'AIRFORCE',\n 'AIRTEL',\n 'AKDN',\n 'AL',\n 'ALIBABA',\n 'ALIPAY',\n 'ALLFINANZ',\n 'ALLSTATE',\n 'ALLY',\n 'ALSACE',\n 'ALSTOM',\n 'AM',\n 'AMAZON',\n 'AMERICANEXPRESS',\n 'AMERICANFAMILY',\n 'AMEX',\n 'AMFAM',\n 'AMICA',\n 'AMSTERDAM',\n 'ANALYTICS',\n 'ANDROID',\n 'ANQUAN',\n 'ANZ',\n 'AO',\n 'AOL',\n 'APARTMENTS',\n 'APP',\n 'APPLE',\n 'AQ',\n 'AQUARELLE',\n 'AR',\n 'ARAB',\n 'ARAMCO',\n 'ARCHI',\n 'ARMY',\n 'ARPA',\n 'ART',\n 'ARTE',\n 'AS',\n 'ASDA',\n 'ASIA',\n 'ASSOCIATES',\n 'AT',\n 'ATHLETA',\n 'ATTORNEY',\n 'AU',\n 'AUCTION',\n 'AUDI',\n 'AUDIBLE',\n 'AUDIO',\n 'AUSPOST',\n 'AUTHOR',\n 'AUTO',\n 'AUTOS',\n 'AW',\n 'AWS',\n 'AX',\n 'AXA',\n 'AZ',\n 'AZURE',\n 'BA',\n 'BABY',\n 'BAIDU',\n 'BANAMEX',\n 'BAND',\n 'BANK',\n 'BAR',\n 'BARCELONA',\n 'BARCLAYCARD',\n 'BARCLAYS',\n 'BAREFOOT',\n 'BARGAINS',\n 'BASEBALL',\n 'BASKETBALL',\n 'BAUHAUS',\n 'BAYERN',\n 'BB',\n 'BBC',\n 'BBT',\n 'BBVA',\n 'BCG',\n 'BCN',\n 'BD',\n 'BE',\n 'BEATS',\n 'BEAUTY',\n 'BEER',\n 'BENTLEY',\n 'BERLIN',\n 'BEST',\n 'BESTBUY',\n 'BET',\n 'BF',\n 'BG',\n 'BH',\n 'BHARTI',\n 'BI',\n 'BIBLE',\n 'BID',\n 'BIKE',\n 'BING',\n 'BINGO',\n 'BIO',\n 'BIZ',\n 'BJ',\n 'BLACK',\n 'BLACKFRIDAY',\n 'BLOCKBUSTER',\n 'BLOG',\n 'BLOOMBERG',\n 'BLUE',\n 'BM',\n 'BMS',\n 'BMW',\n 'BN',\n 'BNPPARIBAS',\n 'BO',\n 'BOATS',\n 'BOEHRINGER',\n 'BOFA',\n 'BOM',\n 'BOND',\n 'BOO',\n 'BOOK',\n 'BOOKING',\n 'BOSCH',\n 'BOSTIK',\n 'BOSTON',\n 'BOT',\n 'BOUTIQUE',\n 'BOX',\n 'BR',\n 'BRADESCO',\n 'BRIDGESTONE',\n 'BROADWAY',\n 'BROKER',\n 'BROTHER',\n 'BRUSSELS',\n 'BS',\n 'BT',\n 'BUILD',\n 'BUILDERS',\n 'BUSINESS',\n 'BUY',\n 'BUZZ',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'BZH',\n 'CA',\n 'CAB',\n 'CAFE',\n 'CAL',\n 'CALL',\n 'CALVINKLEIN',\n 'CAM',\n 'CAMERA',\n 'CAMP',\n 'CANON',\n 'CAPETOWN',\n 'CAPITAL',\n 'CAPITALONE',\n 'CAR',\n 'CARAVAN',\n 'CARDS',\n 'CARE',\n 'CAREER',\n 'CAREERS',\n 'CARS',\n 'CASA',\n 'CASE',\n 'CASH',\n 'CASINO',\n 'CAT',\n 'CATERING',\n 'CATHOLIC',\n 'CBA',\n 'CBN',\n 'CBRE',\n 'CC',\n 'CD',\n 'CENTER',\n 'CEO',\n 'CERN',\n 'CF',\n 'CFA',\n 'CFD',\n 'CG',\n 'CH',\n 'CHANEL',\n 'CHANNEL',\n 'CHARITY',\n 'CHASE',\n 'CHAT',\n 'CHEAP',\n 'CHINTAI',\n 'CHRISTMAS',\n 'CHROME',\n 'CHURCH',\n 'CI',\n 'CIPRIANI',\n 'CIRCLE',\n 'CISCO',\n 'CITADEL',\n 'CITI',\n 'CITIC',\n 'CITY',\n 'CK',\n 'CL',\n 'CLAIMS',\n 'CLEANING',\n 'CLICK',\n 'CLINIC',\n 'CLINIQUE',\n 'CLOTHING',\n 'CLOUD',\n 'CLUB',\n 'CLUBMED',\n 'CM',\n 'CN',\n 'CO',\n 'COACH',\n 'CODES',\n 'COFFEE',\n 'COLLEGE',\n 'COLOGNE',\n 'COM',\n 'COMMBANK',\n 'COMMUNITY',\n 'COMPANY',\n 'COMPARE',\n 'COMPUTER',\n 'COMSEC',\n 'CONDOS',\n 'CONSTRUCTION',\n 'CONSULTING',\n 'CONTACT',\n 'CONTRACTORS',\n 'COOKING',\n 'COOL',\n 'COOP',\n 'CORSICA',\n 'COUNTRY',\n 'COUPON',\n 'COUPONS',\n 'COURSES',\n 'CPA',\n 'CR',\n 'CREDIT',\n 'CREDITCARD',\n 'CREDITUNION',\n 'CRICKET',\n 'CROWN',\n 'CRS',\n 'CRUISE',\n 'CRUISES',\n 'CU',\n 'CUISINELLA',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CYMRU',\n 'CYOU',\n 'CZ',\n 'DAD',\n 'DANCE',\n 'DATA',\n 'DATE',\n 'DATING',\n 'DATSUN',\n 'DAY',\n 'DCLK',\n 'DDS',\n 'DE',\n 'DEAL',\n 'DEALER',\n 'DEALS',\n 'DEGREE',\n 'DELIVERY',\n 'DELL',\n 'DELOITTE',\n 'DELTA',\n 'DEMOCRAT',\n 'DENTAL',\n 'DENTIST',\n 'DESI',\n 'DESIGN',\n 'DEV',\n 'DHL',\n 'DIAMONDS',\n 'DIET',\n 'DIGITAL',\n 'DIRECT',\n 'DIRECTORY',\n 'DISCOUNT',\n 'DISCOVER',\n 'DISH',\n 'DIY',\n 'DJ',\n 'DK',\n 'DM',\n 'DNP',\n 'DO',\n 'DOCS',\n 'DOCTOR',\n 'DOG',\n 'DOMAINS',\n 'DOT',\n 'DOWNLOAD',\n 'DRIVE',\n 'DTV',\n 'DUBAI',\n 'DUNLOP',\n 'DUPONT',\n 'DURBAN',\n 'DVAG',\n 'DVR',\n 'DZ',\n 'EARTH',\n 'EAT',\n 'EC',\n 'ECO',\n 'EDEKA',\n 'EDU',\n 'EDUCATION',\n 'EE',\n 'EG',\n 'EMAIL',\n 'EMERCK',\n 'ENERGY',\n 'ENGINEER',\n 'ENGINEERING',\n 'ENTERPRISES',\n 'EPSON',\n 'EQUIPMENT',\n 'ER',\n 'ERICSSON',\n 'ERNI',\n 'ES',\n 'ESQ',\n 'ESTATE',\n 'ET',\n 'EU',\n 'EUROVISION',\n 'EUS',\n 'EVENTS',\n 'EXCHANGE',\n 'EXPERT',\n 'EXPOSED',\n 'EXPRESS',\n 'EXTRASPACE',\n 'FAGE',\n 'FAIL',\n 'FAIRWINDS',\n 'FAITH',\n 'FAMILY',\n 'FAN',\n 'FANS',\n 'FARM',\n 'FARMERS',\n 'FASHION',\n 'FAST',\n 'FEDEX',\n 'FEEDBACK',\n 'FERRARI',\n 'FERRERO',\n 'FI',\n 'FIDELITY',\n 'FIDO',\n 'FILM',\n 'FINAL',\n 'FINANCE',\n 'FINANCIAL',\n 'FIRE',\n 'FIRESTONE',\n 'FIRMDALE',\n 'FISH',\n 'FISHING',\n 'FIT',\n 'FITNESS',\n 'FJ',\n 'FK',\n 'FLICKR',\n 'FLIGHTS',\n 'FLIR',\n 'FLORIST',\n 'FLOWERS',\n 'FLY',\n 'FM',\n 'FO',\n 'FOO',\n 'FOOD',\n 'FOOTBALL',\n 'FORD',\n 'FOREX',\n 'FORSALE',\n 'FORUM',\n 'FOUNDATION',\n 'FOX',\n 'FR',\n 'FREE',\n 'FRESENIUS',\n 'FRL',\n 'FROGANS',\n 'FRONTIER',\n 'FTR',\n 'FUJITSU',\n 'FUN',\n 'FUND',\n 'FURNITURE',\n 'FUTBOL',\n 'FYI',\n 'GA',\n 'GAL',\n 'GALLERY',\n 'GALLO',\n 'GALLUP',\n 'GAME',\n 'GAMES',\n 'GAP',\n 'GARDEN',\n 'GAY',\n 'GB',\n 'GBIZ',\n 'GD',\n 'GDN',\n 'GE',\n 'GEA',\n 'GENT',\n 'GENTING',\n 'GEORGE',\n 'GF',\n 'GG',\n 'GGEE',\n 'GH',\n 'GI',\n 'GIFT',\n 'GIFTS',\n 'GIVES',\n 'GIVING',\n 'GL',\n 'GLASS',\n 'GLE',\n 'GLOBAL',\n 'GLOBO',\n 'GM',\n 'GMAIL',\n 'GMBH',\n 'GMO',\n 'GMX',\n 'GN',\n 'GODADDY',\n 'GOLD',\n 'GOLDPOINT',\n 'GOLF',\n 'GOO',\n 'GOODYEAR',\n 'GOOG',\n 'GOOGLE',\n 'GOP',\n 'GOT',\n 'GOV',\n 'GP',\n 'GQ',\n 'GR',\n 'GRAINGER',\n 'GRAPHICS',\n 'GRATIS',\n 'GREEN',\n 'GRIPE',\n 'GROCERY',\n 'GROUP',\n 'GS',\n 'GT',\n 'GU',\n 'GUCCI',\n 'GUGE',\n 'GUIDE',\n 'GUITARS',\n 'GURU',\n 'GW',\n 'GY',\n 'HAIR',\n 'HAMBURG',\n 'HANGOUT',\n 'HAUS',\n 'HBO',\n 'HDFC',\n 'HDFCBANK',\n 'HEALTH',\n 'HEALTHCARE',\n 'HELP',\n 'HELSINKI',\n 'HERE',\n 'HERMES',\n 'HIPHOP',\n 'HISAMITSU',\n 'HITACHI',\n 'HIV',\n 'HK',\n 'HKT',\n 'HM',\n 'HN',\n 'HOCKEY',\n 'HOLDINGS',\n 'HOLIDAY',\n 'HOMEDEPOT',\n 'HOMEGOODS',\n 'HOMES',\n 'HOMESENSE',\n 'HONDA',\n 'HORSE',\n 'HOSPITAL',\n 'HOST',\n 'HOSTING',\n 'HOT',\n 'HOTELS',\n 'HOTMAIL',\n 'HOUSE',\n 'HOW',\n 'HR',\n 'HSBC',\n 'HT',\n 'HU',\n 'HUGHES',\n 'HYATT',\n 'HYUNDAI',\n 'IBM',\n 'ICBC',\n 'ICE',\n 'ICU',\n 'ID',\n 'IE',\n 'IEEE',\n 'IFM',\n 'IKANO',\n 'IL',\n 'IM',\n 'IMAMAT',\n 'IMDB',\n 'IMMO',\n 'IMMOBILIEN',\n 'IN',\n 'INC',\n 'INDUSTRIES',\n 'INFINITI',\n 'INFO',\n 'ING',\n 'INK',\n 'INSTITUTE',\n 'INSURANCE',\n 'INSURE',\n 'INT',\n 'INTERNATIONAL',\n 'INTUIT',\n 'INVESTMENTS',\n 'IO',\n 'IPIRANGA',\n 'IQ',\n 'IR',\n 'IRISH',\n 'IS',\n 'ISMAILI',\n 'IST',\n 'ISTANBUL',\n 'IT',\n 'ITAU',\n 'ITV',\n 'JAGUAR',\n 'JAVA',\n 'JCB',\n 'JE',\n 'JEEP',\n 'JETZT',\n 'JEWELRY',\n 'JIO',\n 'JLL',\n 'JM',\n 'JMP',\n 'JNJ',\n 'JO',\n 'JOBS',\n 'JOBURG',\n 'JOT',\n 'JOY',\n 'JP',\n 'JPMORGAN',\n 'JPRS',\n 'JUEGOS',\n 'JUNIPER',\n 'KAUFEN',\n 'KDDI',\n 'KE',\n 'KERRYHOTELS',\n 'KERRYLOGISTICS',\n 'KERRYPROPERTIES',\n 'KFH',\n 'KG',\n 'KH',\n 'KI',\n 'KIA',\n 'KIDS',\n 'KIM',\n 'KINDLE',\n 'KITCHEN',\n 'KIWI',\n 'KM',\n 'KN',\n 'KOELN',\n 'KOMATSU',\n 'KOSHER',\n 'KP',\n 'KPMG',\n 'KPN',\n 'KR',\n 'KRD',\n 'KRED',\n 'KUOKGROUP',\n 'KW',\n 'KY',\n 'KYOTO',\n 'KZ',\n 'LA',\n 'LACAIXA',\n 'LAMBORGHINI',\n 'LAMER',\n 'LANCASTER',\n 'LAND',\n 'LANDROVER',\n 'LANXESS',\n 'LASALLE',\n 'LAT',\n 'LATINO',\n 'LATROBE',\n 'LAW',\n 'LAWYER',\n 'LB',\n 'LC',\n 'LDS',\n 'LEASE',\n 'LECLERC',\n 'LEFRAK',\n 'LEGAL',\n 'LEGO',\n 'LEXUS',\n 'LGBT',\n 'LI',\n 'LIDL',\n 'LIFE',\n 'LIFEINSURANCE',\n 'LIFESTYLE',\n 'LIGHTING',\n 'LIKE',\n 'LILLY',\n 'LIMITED',\n 'LIMO',\n 'LINCOLN',\n 'LINK',\n 'LIPSY',\n 'LIVE',\n 'LIVING',\n 'LK',\n 'LLC',\n 'LLP',\n 'LOAN',\n 'LOANS',\n 'LOCKER',\n 'LOCUS',\n 'LOL',\n 'LONDON',\n 'LOTTE',\n 'LOTTO',\n 'LOVE',\n 'LPL',\n 'LPLFINANCIAL',\n 'LR',\n 'LS',\n 'LT',\n 'LTD',\n 'LTDA',\n 'LU',\n 'LUNDBECK',\n 'LUXE',\n 'LUXURY',\n 'LV',\n 'LY',\n 'MA',\n 'MADRID',\n 'MAIF',\n 'MAISON',\n 'MAKEUP',\n 'MAN',\n 'MANAGEMENT',\n 'MANGO',\n 'MAP',\n 'MARKET',\n 'MARKETING',\n 'MARKETS',\n 'MARRIOTT',\n 'MARSHALLS',\n 'MATTEL',\n 'MBA',\n 'MC',\n 'MCKINSEY',\n 'MD',\n 'ME',\n 'MED',\n 'MEDIA',\n 'MEET',\n 'MELBOURNE',\n 'MEME',\n 'MEMORIAL',\n 'MEN',\n 'MENU',\n 'MERCKMSD',\n 'MG',\n 'MH',\n 'MIAMI',\n 'MICROSOFT',\n 'MIL',\n 'MINI',\n 'MINT',\n 'MIT',\n 'MITSUBISHI',\n 'MK',\n 'ML',\n 'MLB',\n 'MLS',\n 'MM',\n 'MMA',\n 'MN',\n 'MO',\n 'MOBI',\n 'MOBILE',\n 'MODA',\n 'MOE',\n 'MOI',\n 'MOM',\n 'MONASH',\n 'MONEY',\n 'MONSTER',\n 'MORMON',\n 'MORTGAGE',\n 'MOSCOW',\n 'MOTO',\n 'MOTORCYCLES',\n 'MOV',\n 'MOVIE',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MSD',\n 'MT',\n 'MTN',\n 'MTR',\n 'MU',\n 'MUSEUM',\n 'MUSIC',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NAB',\n 'NAGOYA',\n 'NAME',\n 'NAVY',\n 'NBA',\n 'NC',\n 'NE',\n 'NEC',\n 'NET',\n 'NETBANK',\n 'NETFLIX',\n 'NETWORK',\n 'NEUSTAR',\n 'NEW',\n 'NEWS',\n 'NEXT',\n 'NEXTDIRECT',\n 'NEXUS',\n 'NF',\n 'NFL',\n 'NG',\n 'NGO',\n 'NHK',\n 'NI',\n 'NICO',\n 'NIKE',\n 'NIKON',\n 'NINJA',\n 'NISSAN',\n 'NISSAY',\n 'NL',\n 'NO',\n 'NOKIA',\n 'NORTON',\n 'NOW',\n 'NOWRUZ',\n 'NOWTV',\n 'NP',\n 'NR',\n 'NRA',\n 'NRW',\n 'NTT',\n 'NU',\n 'NYC',\n 'NZ',\n 'OBI',\n 'OBSERVER',\n 'OFFICE',\n 'OKINAWA',\n 'OLAYAN',\n 'OLAYANGROUP',\n 'OLLO',\n 'OM',\n 'OMEGA',\n 'ONE',\n 'ONG',\n 'ONL',\n 'ONLINE',\n 'OOO',\n 'OPEN',\n 'ORACLE',\n 'ORANGE',\n 'ORG',\n 'ORGANIC',\n 'ORIGINS',\n 'OSAKA',\n 'OTSUKA',\n 'OTT',\n 'OVH',\n 'PA',\n 'PAGE',\n 'PANASONIC',\n 'PARIS',\n 'PARS',\n 'PARTNERS',\n 'PARTS',\n 'PARTY',\n 'PAY',\n 'PCCW',\n 'PE',\n 'PET',\n 'PF',\n 'PFIZER',\n 'PG',\n 'PH',\n 'PHARMACY',\n 'PHD',\n 'PHILIPS',\n 'PHONE',\n 'PHOTO',\n 'PHOTOGRAPHY',\n 'PHOTOS',\n 'PHYSIO',\n 'PICS',\n 'PICTET',\n 'PICTURES',\n 'PID',\n 'PIN',\n 'PING',\n 'PINK',\n 'PIONEER',\n 'PIZZA',\n 'PK',\n 'PL',\n 'PLACE',\n 'PLAY',\n 'PLAYSTATION',\n 'PLUMBING',\n 'PLUS',\n 'PM',\n 'PN',\n 'PNC',\n 'POHL',\n 'POKER',\n 'POLITIE',\n 'PORN',\n 'POST',\n 'PR',\n 'PRAMERICA',\n 'PRAXI',\n 'PRESS',\n 'PRIME',\n 'PRO',\n 'PROD',\n 'PRODUCTIONS',\n 'PROF',\n 'PROGRESSIVE',\n 'PROMO',\n 'PROPERTIES',\n 'PROPERTY',\n 'PROTECTION',\n 'PRU',\n 'PRUDENTIAL',\n 'PS',\n 'PT',\n 'PUB',\n 'PW',\n 'PWC',\n 'PY',\n 'QA',\n 'QPON',\n 'QUEBEC',\n 'QUEST',\n 'RACING',\n 'RADIO',\n 'RE',\n 'READ',\n 'REALESTATE',\n 'REALTOR',\n 'REALTY',\n 'RECIPES',\n 'RED',\n 'REDSTONE',\n 'REDUMBRELLA',\n 'REHAB',\n 'REISE',\n 'REISEN',\n 'REIT',\n 'RELIANCE',\n 'REN',\n 'RENT',\n 'RENTALS',\n 'REPAIR',\n 'REPORT',\n 'REPUBLICAN',\n 'REST',\n 'RESTAURANT',\n 'REVIEW',\n 'REVIEWS',\n 'REXROTH',\n 'RICH',\n 'RICHARDLI',\n 'RICOH',\n 'RIL',\n 'RIO',\n 'RIP',\n 'RO',\n 'ROCKS',\n 'RODEO',\n 'ROGERS',\n 'ROOM',\n 'RS',\n 'RSVP',\n 'RU',\n 'RUGBY',\n 'RUHR',\n 'RUN',\n 'RW',\n 'RWE',\n 'RYUKYU',\n 'SA',\n 'SAARLAND',\n 'SAFE',\n 'SAFETY',\n 'SAKURA',\n 'SALE',\n 'SALON',\n 'SAMSCLUB',\n 'SAMSUNG',\n 'SANDVIK',\n 'SANDVIKCOROMANT',\n 'SANOFI',\n 'SAP',\n 'SARL',\n 'SAS',\n 'SAVE',\n 'SAXO',\n 'SB',\n 'SBI',\n 'SBS',\n 'SC',\n 'SCB',\n 'SCHAEFFLER',\n 'SCHMIDT',\n 'SCHOLARSHIPS',\n 'SCHOOL',\n 'SCHULE',\n 'SCHWARZ',\n 'SCIENCE',\n 'SCOT',\n 'SD',\n 'SE',\n 'SEARCH',\n 'SEAT',\n 'SECURE',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SENER',\n 'SERVICES',\n 'SEVEN',\n 'SEW',\n 'SEX',\n 'SEXY',\n 'SFR',\n 'SG',\n 'SH',\n 'SHANGRILA',\n 'SHARP',\n 'SHELL',\n 'SHIA',\n 'SHIKSHA',\n 'SHOES',\n 'SHOP',\n 'SHOPPING',\n 'SHOUJI',\n 'SHOW',\n 'SI',\n 'SILK',\n 'SINA',\n 'SINGLES',\n 'SITE',\n 'SJ',\n 'SK',\n 'SKI',\n 'SKIN',\n 'SKY',\n 'SKYPE',\n 'SL',\n 'SLING',\n 'SM',\n 'SMART',\n 'SMILE',\n 'SN',\n 'SNCF',\n 'SO',\n 'SOCCER',\n 'SOCIAL',\n 'SOFTBANK',\n 'SOFTWARE',\n 'SOHU',\n 'SOLAR',\n 'SOLUTIONS',\n 'SONG',\n 'SONY',\n 'SOY',\n 'SPA',\n 'SPACE',\n 'SPORT',\n 'SPOT',\n 'SR',\n 'SRL',\n 'SS',\n 'ST',\n 'STADA',\n 'STAPLES',\n 'STAR',\n 'STATEBANK',\n 'STATEFARM',\n 'STC',\n 'STCGROUP',\n 'STOCKHOLM',\n 'STORAGE',\n 'STORE',\n 'STREAM',\n 'STUDIO',\n 'STUDY',\n 'STYLE',\n 'SU',\n 'SUCKS',\n 'SUPPLIES',\n 'SUPPLY',\n 'SUPPORT',\n 'SURF',\n 'SURGERY',\n 'SUZUKI',\n 'SV',\n 'SWATCH',\n 'SWISS',\n 'SX',\n 'SY',\n 'SYDNEY',\n 'SYSTEMS',\n 'SZ',\n 'TAB',\n 'TAIPEI',\n 'TALK',\n 'TAOBAO',\n 'TARGET',\n 'TATAMOTORS',\n 'TATAR',\n 'TATTOO',\n 'TAX',\n 'TAXI',\n 'TC',\n 'TCI',\n 'TD',\n 'TDK',\n 'TEAM',\n 'TECH',\n 'TECHNOLOGY',\n 'TEL',\n 'TEMASEK',\n 'TENNIS',\n 'TEVA',\n 'TF',\n 'TG',\n 'TH',\n 'THD',\n 'THEATER',\n 'THEATRE',\n 'TIAA',\n 'TICKETS',\n 'TIENDA',\n 'TIPS',\n 'TIRES',\n 'TIROL',\n 'TJ',\n 'TJMAXX',\n 'TJX',\n 'TK',\n 'TKMAXX',\n 'TL',\n 'TM',\n 'TMALL',\n 'TN',\n 'TO',\n 'TODAY',\n 'TOKYO',\n 'TOOLS',\n 'TOP',\n 'TORAY',\n 'TOSHIBA',\n 'TOTAL',\n 'TOURS',\n 'TOWN',\n 'TOYOTA',\n 'TOYS',\n 'TR',\n 'TRADE',\n 'TRADING',\n 'TRAINING',\n 'TRAVEL',\n 'TRAVELERS',\n 'TRAVELERSINSURANCE',\n 'TRUST',\n 'TRV',\n 'TT',\n 'TUBE',\n 'TUI',\n 'TUNES',\n 'TUSHU',\n 'TV',\n 'TVS',\n 'TW',\n 'TZ',\n 'UA',\n 'UBANK',\n 'UBS',\n 'UG',\n 'UK',\n 'UNICOM',\n 'UNIVERSITY',\n 'UNO',\n 'UOL',\n 'UPS',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VACATIONS',\n 'VANA',\n 'VANGUARD',\n 'VC',\n 'VE',\n 'VEGAS',\n 'VENTURES',\n 'VERISIGN',\n 'VERSICHERUNG',\n 'VET',\n 'VG',\n 'VI',\n 'VIAJES',\n 'VIDEO',\n 'VIG',\n 'VIKING',\n 'VILLAS',\n 'VIN',\n 'VIP',\n 'VIRGIN',\n 'VISA',\n 'VISION',\n 'VIVA',\n 'VIVO',\n 'VLAANDEREN',\n 'VN',\n 'VODKA',\n 'VOLVO',\n 'VOTE',\n 'VOTING',\n 'VOTO',\n 'VOYAGE',\n 'VU',\n 'WALES',\n 'WALMART',\n 'WALTER',\n 'WANG',\n 'WANGGOU',\n 'WATCH',\n 'WATCHES',\n 'WEATHER',\n 'WEATHERCHANNEL',\n 'WEBCAM',\n 'WEBER',\n 'WEBSITE',\n 'WED',\n 'WEDDING',\n 'WEIBO',\n 'WEIR',\n 'WF',\n 'WHOSWHO',\n 'WIEN',\n 'WIKI',\n 'WILLIAMHILL',\n 'WIN',\n 'WINDOWS',\n 'WINE',\n 'WINNERS',\n 'WME',\n 'WOLTERSKLUWER',\n 'WOODSIDE',\n 'WORK',\n 'WORKS',\n 'WORLD',\n 'WOW',\n 'WS',\n 'WTC',\n 'WTF',\n 'XBOX',\n 'XEROX',\n 'XIHUAN',\n 'XIN',\n 'XN--11B4C3D',\n 'XN--1CK2E1B',\n 'XN--1QQW23A',\n 'XN--2SCRJ9C',\n 'XN--30RR7Y',\n 'XN--3BST00M',\n 'XN--3DS443G',\n 'XN--3E0B707E',\n 'XN--3HCRJ9C',\n 'XN--3PXU8K',\n 'XN--42C2D9A',\n 'XN--45BR5CYL',\n 'XN--45BRJ9C',\n 'XN--45Q11C',\n 'XN--4DBRK0CE',\n 'XN--4GBRIM',\n 'XN--54B7FTA0CC',\n 'XN--55QW42G',\n 'XN--55QX5D',\n 'XN--5SU34J936BGSG',\n 'XN--5TZM5G',\n 'XN--6FRZ82G',\n 'XN--6QQ986B3XL',\n 'XN--80ADXHKS',\n 'XN--80AO21A',\n 'XN--80AQECDR1A',\n 'XN--80ASEHDB',\n 'XN--80ASWG',\n 'XN--8Y0A063A',\n 'XN--90A3AC',\n 'XN--90AE',\n 'XN--90AIS',\n 'XN--9DBQ2A',\n 'XN--9ET52U',\n 'XN--9KRT00A',\n 'XN--B4W605FERD',\n 'XN--BCK1B9A5DRE4C',\n 'XN--C1AVG',\n 'XN--C2BR7G',\n 'XN--CCK2B3B',\n 'XN--CCKWCXETD',\n 'XN--CG4BKI',\n 'XN--CLCHC0EA0B2G2A9GCD',\n 'XN--CZR694B',\n 'XN--CZRS0T',\n 'XN--CZRU2D',\n 'XN--D1ACJ3B',\n 'XN--D1ALF',\n 'XN--E1A4C',\n 'XN--ECKVDTC9D',\n 'XN--EFVY88H',\n 'XN--FCT429K',\n 'XN--FHBEI',\n 'XN--FIQ228C5HS',\n 'XN--FIQ64B',\n 'XN--FIQS8S',\n 'XN--FIQZ9S',\n 'XN--FJQ720A',\n 'XN--FLW351E',\n 'XN--FPCRJ9C3D',\n 'XN--FZC2C9E2C',\n 'XN--FZYS8D69UVGM',\n 'XN--G2XX48C',\n 'XN--GCKR3F0F',\n 'XN--GECRJ9C',\n 'XN--GK3AT1E',\n 'XN--H2BREG3EVE',\n 'XN--H2BRJ9C',\n 'XN--H2BRJ9C8C',\n 'XN--HXT814E',\n 'XN--I1B6B1A6A2E',\n 'XN--IMR513N',\n 'XN--IO0A7I',\n 'XN--J1AEF',\n 'XN--J1AMH',\n 'XN--J6W193G',\n 'XN--JLQ480N2RG',\n 'XN--JVR189M',\n 'XN--KCRX77D1X4A',\n 'XN--KPRW13D',\n 'XN--KPRY57D',\n 'XN--KPUT3I',\n 'XN--L1ACC',\n 'XN--LGBBAT1AD8J',\n 'XN--MGB9AWBF',\n 'XN--MGBA3A3EJT',\n 'XN--MGBA3A4F16A',\n 'XN--MGBA7C0BBN0A',\n 'XN--MGBAAM7A8H',\n 'XN--MGBAB2BD',\n 'XN--MGBAH1A3HJKRD',\n 'XN--MGBAI9AZGQP6J',\n 'XN--MGBAYH7GPA',\n 'XN--MGBBH1A',\n 'XN--MGBBH1A71E',\n 'XN--MGBC0A9AZCG',\n 'XN--MGBCA7DZDO',\n 'XN--MGBCPQ6GPA1A',\n 'XN--MGBERP4A5D4AR',\n 'XN--MGBGU82A',\n 'XN--MGBI4ECEXP',\n 'XN--MGBPL2FH',\n 'XN--MGBT3DHD',\n 'XN--MGBTX2B',\n 'XN--MGBX4CD0AB',\n 'XN--MIX891F',\n 'XN--MK1BU44C',\n 'XN--MXTQ1M',\n 'XN--NGBC5AZD',\n 'XN--NGBE9E0A',\n 'XN--NGBRX',\n 'XN--NODE',\n 'XN--NQV7F',\n 'XN--NQV7FS00EMA',\n 'XN--NYQY26A',\n 'XN--O3CW4H',\n 'XN--OGBPF8FL',\n 'XN--OTU796D',\n 'XN--P1ACF',\n 'XN--P1AI',\n 'XN--PGBS0DH',\n 'XN--PSSY2U',\n 'XN--Q7CE6A',\n 'XN--Q9JYB4C',\n 'XN--QCKA1PMC',\n 'XN--QXA6A',\n 'XN--QXAM',\n 'XN--RHQV96G',\n 'XN--ROVU88B',\n 'XN--RVC1E0AM3E',\n 'XN--S9BRJ9C',\n 'XN--SES554G',\n 'XN--T60B56A',\n 'XN--TCKWE',\n 'XN--TIQ49XQYJ',\n 'XN--UNUP4Y',\n 'XN--VERMGENSBERATER-CTB',\n 'XN--VERMGENSBERATUNG-PWB',\n 'XN--VHQUV',\n 'XN--VUQ861B',\n 'XN--W4R85EL8FHU5DNRA',\n 'XN--W4RS40L',\n 'XN--WGBH1C',\n 'XN--WGBL6A',\n 'XN--XHQ521B',\n 'XN--XKC2AL3HYE2A',\n 'XN--XKC2DL3A5EE0H',\n 'XN--Y9A3AQ',\n 'XN--YFRO4I67O',\n 'XN--YGBI2AMMX',\n 'XN--ZFR164B',\n 'XXX',\n 'XYZ',\n 'YACHTS',\n 'YAHOO',\n 'YAMAXUN',\n 'YANDEX',\n 'YE',\n 'YODOBASHI',\n 'YOGA',\n 'YOKOHAMA',\n 'YOU',\n 'YOUTUBE',\n 'YT',\n 'YUN',\n 'ZA',\n 'ZAPPOS',\n 'ZARA',\n 'ZERO',\n 'ZIP',\n 'ZM',\n 'ZONE',\n 'ZUERICH',\n 'ZW',\n];\n","import { tlds } from './tlds-list';\n\nconst tldRegex = tlds.join('|');\nconst urlRegex = new RegExp(`\\\\b.*\\\\s*\\\\.\\\\s*(${tldRegex})\\\\b`, 'gi');\n\nconst spamWords = ['won', 'win', 'click'];\nexport const spamReplacement = 'Suspicious token';\n\nfunction spamUrlFilter(input: string) {\n return input.match(urlRegex);\n}\n\nfunction spamWordFilter(input: string): boolean {\n function containsSpam(element: string) {\n return input.toLowerCase().includes(element);\n }\n return spamWords.some(containsSpam);\n}\n\ninterface SpamFilterArgs {\n input: string;\n whitelist: string[];\n}\n\nexport function spamFilter({ input, whitelist }: SpamFilterArgs): string {\n if (whitelist.includes(input)) return input;\n\n const urlFound = spamUrlFilter(input);\n const spamWordsFound = spamWordFilter(input);\n\n if (urlFound || spamWordsFound) {\n return spamReplacement;\n }\n\n return input;\n}\n","export function extractPhraseFromString(value: string) {\n const clean = value.trim();\n const words = clean.match(/\\S+/g);\n if (words?.length) {\n return words\n .map(word => (word.match(/[^0-9]+/g) ? word : null))\n .filter(Boolean)\n .join(' ');\n } else {\n return clean;\n }\n}\n","export function pxStringToNumber(pxString: string): number {\n if (!/^\\d+px$/.test(pxString)) {\n throw new Error('Invalid pixel string format');\n }\n return +pxString.replace('px', '');\n}\n","import DOMPurify from 'dompurify';\n\n/**\n * Universal sanitizer for dynamic HTML content.\n * Uses DOMPurify in the browser, and a safe fallback for SSR (returns plain text).\n */\nexport function sanitizeContent(dirty: string): string {\n if (typeof window !== 'undefined' && typeof DOMPurify !== 'undefined') {\n return DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });\n }\n // SSR fallback: escape HTML tags to prevent injection\n return String(dirty)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n","import { BigNumber } from 'bignumber.js';\n\nimport { KEBAB_REGEX } from '@leather.io/constants';\nimport type { NetworkModes } from '@leather.io/models';\n\nexport { createCounter } from './counter';\nexport * from './math';\nexport * from './money';\nexport * from './accounts/account-addresses';\nexport * from './assets/sort-assets';\nexport * from './assets/asset-display-name';\nexport * from './assets/balance-helpers';\nexport * from './assets/inscription-helpers';\nexport * from './assets/asset-id';\nexport * from './truncate-middle';\nexport * from './time';\nexport * from './market-data';\nexport * from './currency-formatter/currency-formatter';\nexport * from './flatten-object';\nexport * from './special-char';\n\nexport { spamFilter } from './spam-filter/spam-filter';\nexport { extractPhraseFromString } from './extract-phrase-from-string/extract-phrase-from-string';\nexport { pxStringToNumber } from './px-string-to-number/px-string-to-number';\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isEmptyString(value: unknown): value is '' {\n return isString(value) && value === '';\n}\n\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n\nexport function isFunction(value: unknown): value is () => void {\n return typeof value === 'function';\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object';\n}\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error;\n}\n\nexport function isEmpty(value: object) {\n return Object.keys(value).length === 0;\n}\n\nexport function isDefined<T>(argument: T | undefined): argument is T {\n return !isUndefined(argument);\n}\n\nexport function isTypedArray(val: unknown): val is Uint8Array {\n const TypedArray = Object.getPrototypeOf(Uint8Array);\n return val instanceof TypedArray;\n}\n\nexport function noop() {\n // expected to be empty\n}\n\nexport function ensureArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function undefinedIfLengthZero<T extends any[]>(arr: T) {\n return arr.length ? arr : undefined;\n}\n\ntype NetworkMap<T> = Record<NetworkModes, T>;\n\nexport function whenNetwork(mode: NetworkModes) {\n return <T extends NetworkMap<unknown>>(networkMap: T) => networkMap[mode] as T[NetworkModes];\n}\n\nexport function isEmptyArray(data: unknown[]) {\n return data.length === 0;\n}\n\n// TODO: extension concept, remove remove from utils\nexport const defaultWalletKeyId = 'default';\n\nexport function reverseBytes(bytes: Buffer): Buffer;\nexport function reverseBytes(bytes: Uint8Array): Uint8Array;\nexport function reverseBytes(bytes: Buffer | Uint8Array): Buffer | Uint8Array {\n if (Buffer.isBuffer(bytes)) return Buffer.from(bytes).reverse();\n return new Uint8Array(bytes.slice().reverse());\n}\n\nexport function makeNumberRange(num: number) {\n return [...Array(num).keys()];\n}\n\nexport function createNumArrayOfRange(fromIndex: number, toIndex: number) {\n const result = [];\n for (let i = fromIndex; i <= toIndex; i++) {\n result.push(i);\n }\n return result;\n}\n\nexport async function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function sumNumbers(nums: number[]) {\n return nums.reduce((acc, num) => acc.plus(num), new BigNumber(0));\n}\n\nexport function isFulfilled<T>(p: PromiseSettledResult<T>): p is PromiseFulfilledResult<T> {\n return p.status === 'fulfilled';\n}\n\nexport function isRejected<T>(p: PromiseSettledResult<T>): p is PromiseRejectedResult {\n return p.status === 'rejected';\n}\n\nexport function createNullArrayOfLength(length: number) {\n return new Array(length).fill(null);\n}\n\nexport function safelyFormatHexTxid(id: string) {\n const prefix = '0x';\n if (id.startsWith(prefix)) return id;\n return prefix + id;\n}\n\nfunction kebabCase(str: string) {\n return str.replace(KEBAB_REGEX, match => '-' + match.toLowerCase());\n}\n\nfunction getLetters(string: string, offset = 1) {\n return string.slice(0, offset);\n}\n\nexport function getTicker(value: string) {\n let name = kebabCase(value);\n if (name.includes('-')) {\n const words = name.split('-');\n if (words.length >= 3) {\n name = `${getLetters(words[0])}${getLetters(words[1])}${getLetters(words[2])}`;\n } else {\n name = `${getLetters(words[0])}${getLetters(words[1], 2)}`;\n }\n } else if (name.length >= 3) {\n name = getLetters(name, 3);\n }\n return name.toUpperCase();\n}\n\nexport function propIfDefined(prop: string, value: any) {\n return isBoolean(value) ? { [prop]: value } : {};\n}\n\nexport function isHexString(value: string) {\n return /^[0-9a-fA-F]+$/.test(value);\n}\n\nexport function toHexString(value: number) {\n return value.toString(16);\n}\n\nexport function hexToNumber(hex: string) {\n return parseInt(hex, 16);\n}\n\ntype MapFunction<T, U> = (value: T[keyof T], key: string) => U;\n\nexport function mapObject<T extends object, U>(\n obj: T,\n mapFn: MapFunction<T, U>\n): { [K in keyof T]: U } {\n const result: Partial<{ [K in keyof T]: U }> = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = mapFn(obj[key], key);\n }\n }\n\n return result as { [K in keyof T]: U };\n}\n\nexport function assertIsTruthy<T>(val: T): asserts val is NonNullable<T> {\n if (!val) throw new Error(`expected: true, actual: ${val}`);\n}\n\n/**\n * Ensure all cases in a control flow are handled by asserting a value is `never`.\n *\n * Typically used in `switch` statements to enforce exhaustiveness.\n * TypeScript's type checking will catch unhandled cases at compile time.\n */\nexport function assertUnreachable(value: never): never {\n throw new Error(`Unexpected value: ${JSON.stringify(value)}`);\n}\n\nexport function assertExistence<T>(value: T, message: string): asserts value is NonNullable<T> {\n if (value === null || value === undefined) {\n throw new Error(message);\n }\n}\n\nexport function capitalize(val: string) {\n return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nexport function uniqueArray<T>(arr: T[]) {\n return Array.from(new Set(arr));\n}\n\nexport function removeTrailingNullCharacters(s: string) {\n return s.replace(/\\0*$/g, '');\n}\n\nexport function isNumberOrNumberList(value: unknown): value is number | number[] {\n if (Array.isArray(value)) return value.every(item => isNumber(item));\n return isNumber(value);\n}\n\nexport { sanitizeContent } from './sanitize-content';\n"],"mappings":"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b;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,MAAM;EACN,YAAY;EAC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U;GAChC;KAEF,QAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,WAAW;EAE9C,MAAM,YAAY,cAAc,OADjB,WAAW,KAAK,MAAM,GAAG,OAAO,GAAG,MACJ;AAC9C,SAAO,OAAO,QAAQ,UAAU;GAChC;AAGJ,QAAO;;;;;ACnDT,MAAa,YAAY;;;;ACFzB,MAAa,OAAO;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAC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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@leather.io/utils",
3
3
  "author": "Leather.io contact@leather.io",
4
4
  "description": "Shared bitcoin utilities",
5
- "version": "0.49.4",
5
+ "version": "0.49.7",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/leather-io/mono/tree/dev/packages/utils",
8
8
  "repository": {
@@ -19,8 +19,8 @@
19
19
  "dependencies": {
20
20
  "bignumber.js": "9.1.2",
21
21
  "dompurify": "3.2.4",
22
- "@leather.io/constants": "0.28.4",
23
- "@leather.io/models": "0.51.0"
22
+ "@leather.io/constants": "0.30.0",
23
+ "@leather.io/models": "0.52.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/dompurify": "3.0.5",
@@ -28,9 +28,9 @@
28
28
  "tsdown": "0.16.5",
29
29
  "typescript": "5.9.3",
30
30
  "vitest": "2.1.9",
31
- "@leather.io/tsconfig-config": "0.11.1",
32
31
  "@leather.io/prettier-config": "0.9.0",
33
- "@leather.io/test-config": "0.1.2"
32
+ "@leather.io/test-config": "0.1.2",
33
+ "@leather.io/tsconfig-config": "0.11.1"
34
34
  },
35
35
  "keywords": [
36
36
  "leather",
@@ -44,7 +44,7 @@
44
44
  "types": "./dist/index.d.ts",
45
45
  "scripts": {
46
46
  "build": "tsdown",
47
- "build:watch": "tsdown --watch",
47
+ "build:watch": "tsdown --no-clean --watch",
48
48
  "format": "prettier . --write --ignore-path ../../.prettierignore",
49
49
  "format:check": "prettier . --check --ignore-path ../../.prettierignore",
50
50
  "lint": "eslint --cache --max-warnings 0",
@@ -24,8 +24,6 @@ export function getAssetDisplayName(asset: CryptoAsset) {
24
24
  return 'stamp';
25
25
  case 'src20':
26
26
  return 'src-20';
27
- case 'stx20':
28
- return 'stx-20';
29
27
  default:
30
28
  assertUnreachable(protocol);
31
29
  }
@@ -53,11 +53,6 @@ export function getAssetId(asset: CryptoAsset): CryptoAssetId {
53
53
  protocol: 'src20',
54
54
  id: asset.id,
55
55
  };
56
- case 'stx20':
57
- return {
58
- protocol: 'stx20',
59
- id: asset.symbol,
60
- };
61
56
  case 'inscription':
62
57
  return {
63
58
  protocol: 'inscription',