@mezo-org/passport 0.5.1 → 0.5.2-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/src/api/portal.d.ts +3 -7
  2. package/dist/src/api/portal.d.ts.map +1 -1
  3. package/dist/src/api/portal.js +1 -1
  4. package/dist/src/api/portal.js.map +1 -1
  5. package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -1
  6. package/dist/src/hooks/useAssetsConversionRates.js +11 -38
  7. package/dist/src/hooks/useAssetsConversionRates.js.map +1 -1
  8. package/dist/src/hooks/useBorrowData.d.ts +0 -15
  9. package/dist/src/hooks/useBorrowData.d.ts.map +1 -1
  10. package/dist/src/hooks/useBorrowData.js +3 -25
  11. package/dist/src/hooks/useBorrowData.js.map +1 -1
  12. package/dist/src/hooks/useCollateralPrice.d.ts +17 -0
  13. package/dist/src/hooks/useCollateralPrice.d.ts.map +1 -0
  14. package/dist/src/hooks/useCollateralPrice.js +56 -0
  15. package/dist/src/hooks/useCollateralPrice.js.map +1 -0
  16. package/dist/src/hooks/useTokensBalances copy.d.ts +74 -0
  17. package/dist/src/hooks/useTokensBalances copy.d.ts.map +1 -0
  18. package/dist/src/hooks/useTokensBalances copy.js +206 -0
  19. package/dist/src/hooks/useTokensBalances copy.js.map +1 -0
  20. package/dist/src/lib/contracts/index.d.ts +1 -1
  21. package/dist/src/lib/contracts/index.d.ts.map +1 -1
  22. package/dist/src/lib/contracts/index.js +0 -1
  23. package/dist/src/lib/contracts/index.js.map +1 -1
  24. package/dist/src/utils/number2.test.d.ts +2 -0
  25. package/dist/src/utils/number2.test.d.ts.map +1 -0
  26. package/dist/src/utils/number2.test.js +223 -0
  27. package/dist/src/utils/number2.test.js.map +1 -0
  28. package/dist/src/utils/numbers.test.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/api/portal.ts +4 -8
  31. package/src/hooks/useAssetsConversionRates.ts +14 -43
  32. package/src/hooks/useBorrowData.ts +5 -27
  33. package/src/hooks/useCollateralPrice.ts +64 -0
  34. package/src/hooks/useTokensBalances copy.ts +289 -0
  35. package/src/lib/contracts/index.ts +0 -2
  36. package/src/utils/number2.test.ts +309 -0
  37. package/src/utils/numbers.test.ts +1 -0
  38. package/dist/src/lib/contracts/priceOracle.d.ts +0 -43
  39. package/dist/src/lib/contracts/priceOracle.d.ts.map +0 -1
  40. package/dist/src/lib/contracts/priceOracle.js +0 -52
  41. package/dist/src/lib/contracts/priceOracle.js.map +0 -1
  42. package/src/lib/contracts/priceOracle.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,WAAW,GACX,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,oBAAoB,GACpB,WAAW,CAAA;AAEf,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAC1C,CAAC,EACD;IACE,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CACF,CAAA;AAED,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,WAAW,GACX,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,oBAAoB,GACpB,WAAW,CAAA;AAEf,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAC1C,CAAC,EACD;IACE,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CACF,CAAA;AAED,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA"}
@@ -62,5 +62,4 @@ export const testnetBorrowContracts = {
62
62
  BorrowerOperations: borrowerOperationsTestnet,
63
63
  PriceFeed: priceFeedTestnet,
64
64
  };
65
- export { default as priceOracleContract } from "./priceOracle";
66
65
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAE5G,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAC5G,OAAO,SAAS,MAAM,6DAA6D,CAAA;AACnF,OAAO,gBAAgB,MAAM,6DAA6D,CAAA;AA8B1F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,SAAS;CAC0B,CAAA;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,gBAAgB;CACmB,CAAA;AAEhD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAE5G,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAC5G,OAAO,SAAS,MAAM,6DAA6D,CAAA;AACnF,OAAO,gBAAgB,MAAM,6DAA6D,CAAA;AA8B1F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,SAAS;CAC0B,CAAA;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,gBAAgB;CACmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=number2.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number2.test.d.ts","sourceRoot":"","sources":["../../../src/utils/number2.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,223 @@
1
+ import { bigIntToFloat, bigIntToHumanReadableFormat, floatToBigInt, floatToHumanReadableFormat, multiplyBigIntWithDecimal, normalizeDecimalNumber, trimBeforeDecimals, trimDecimals, } from "./number2";
2
+ describe("floatToBigInt", () => {
3
+ it("should convert integer string to bigint with default decimals", () => {
4
+ expect(floatToBigInt({ amount: "1" })).toBe(1000000000000000000n);
5
+ });
6
+ it("should convert float string to bigint with default decimals", () => {
7
+ expect(floatToBigInt({ amount: "1.23" })).toBe(1230000000000000000n);
8
+ });
9
+ it("should convert float string to bigint with custom decimals", () => {
10
+ expect(floatToBigInt({ amount: "1.23", decimals: 2 })).toBe(123n);
11
+ expect(floatToBigInt({ amount: "1.2345", decimals: 2 })).toBe(123n);
12
+ expect(floatToBigInt({ amount: "1.2345", decimals: 6 })).toBe(1234500n);
13
+ });
14
+ it("should handle numbers as input", () => {
15
+ expect(floatToBigInt({ amount: 2.5 })).toBe(2500000000000000000n);
16
+ });
17
+ it("should handle zero", () => {
18
+ expect(floatToBigInt({ amount: "0" })).toBe(0n);
19
+ expect(floatToBigInt({ amount: 0 })).toBe(0n);
20
+ });
21
+ it("should handle negative numbers", () => {
22
+ expect(floatToBigInt({ amount: "-1.5" })).toBe(-1500000000000000000n);
23
+ });
24
+ it("should handle numbers with thousands separator", () => {
25
+ expect(floatToBigInt({ amount: "1,234.56" })).toBe(1234560000000000000000n);
26
+ });
27
+ it("should return 0n for invalid input", () => {
28
+ expect(floatToBigInt({ amount: "abc" })).toBe(0n);
29
+ expect(floatToBigInt({ amount: "1.2.3" })).toBe(0n);
30
+ expect(floatToBigInt({ amount: "" })).toBe(0n);
31
+ });
32
+ });
33
+ describe("bigIntToFloat", () => {
34
+ it("should convert bigint to float string with default decimals", () => {
35
+ expect(bigIntToFloat({ amount: 1000000000000000000n })).toBe("1");
36
+ expect(bigIntToFloat({ amount: 1230000000000000000n })).toBe("1.23");
37
+ });
38
+ it("should convert bigint to float string with custom decimals", () => {
39
+ expect(bigIntToFloat({ amount: 123n, decimals: 2 })).toBe("1.23");
40
+ expect(bigIntToFloat({ amount: 1234500n, decimals: 6 })).toBe("1.2345");
41
+ });
42
+ it("should handle desiredDecimals less than decimals", () => {
43
+ expect(bigIntToFloat({
44
+ amount: 1234567890000000000n,
45
+ decimals: 18,
46
+ desiredDecimals: 2,
47
+ })).toBe("1.23");
48
+ expect(bigIntToFloat({
49
+ amount: 1234567890000000000n,
50
+ decimals: 18,
51
+ desiredDecimals: 6,
52
+ })).toBe("1.234568");
53
+ });
54
+ it("should handle zero", () => {
55
+ expect(bigIntToFloat({ amount: 0n })).toBe("0");
56
+ });
57
+ it("should handle negative numbers", () => {
58
+ expect(bigIntToFloat({ amount: -1500000000000000000n })).toBe("-1.5");
59
+ });
60
+ it("should handle rounding up", () => {
61
+ expect(bigIntToFloat({
62
+ amount: 1249999999999999999n,
63
+ decimals: 18,
64
+ desiredDecimals: 2,
65
+ })).toBe("1.25");
66
+ expect(bigIntToFloat({
67
+ amount: 1234567890000000000n,
68
+ decimals: 18,
69
+ desiredDecimals: 4,
70
+ })).toBe("1.2346");
71
+ });
72
+ it("should handle large numbers", () => {
73
+ expect(bigIntToFloat({
74
+ amount: 123456789012345678901234567890n,
75
+ decimals: 18,
76
+ desiredDecimals: 2,
77
+ })).toBe("123456789012.35");
78
+ });
79
+ });
80
+ describe("floatToHumanReadableFormat", () => {
81
+ it("should format number with thousands separator and default decimals", () => {
82
+ expect(floatToHumanReadableFormat({ amount: 1234567.891 })).toBe("1,234,567.89");
83
+ expect(floatToHumanReadableFormat({ amount: "1234567.891" })).toBe("1,234,567.89");
84
+ });
85
+ it("should format with custom decimals", () => {
86
+ expect(floatToHumanReadableFormat({ amount: 1234567.891, desiredDecimals: 3 })).toBe("1,234,567.891");
87
+ expect(floatToHumanReadableFormat({ amount: 1234567.8, desiredDecimals: 0 })).toBe("1,234,568");
88
+ });
89
+ it("should format with minDecimals", () => {
90
+ expect(floatToHumanReadableFormat({
91
+ amount: 1234.5,
92
+ desiredDecimals: 2,
93
+ minDecimals: 1,
94
+ })).toBe("1,234.5");
95
+ expect(floatToHumanReadableFormat({
96
+ amount: 1234.5,
97
+ desiredDecimals: 2,
98
+ minDecimals: 2,
99
+ })).toBe("1,234.50");
100
+ expect(floatToHumanReadableFormat({
101
+ amount: 1234.5,
102
+ desiredDecimals: 2,
103
+ minDecimals: 4,
104
+ })).toBe("1,234.5000");
105
+ });
106
+ it("should return '0' for invalid input", () => {
107
+ expect(floatToHumanReadableFormat({ amount: "abc" })).toBe("0");
108
+ });
109
+ });
110
+ describe("bigIntToHumanReadableFormat", () => {
111
+ it("should format bigint to human readable string", () => {
112
+ expect(bigIntToHumanReadableFormat({
113
+ amount: 1234567890000000000n,
114
+ decimals: 18,
115
+ desiredDecimals: 2,
116
+ })).toBe("1.23");
117
+ expect(bigIntToHumanReadableFormat({
118
+ amount: 1234567890000000000n,
119
+ decimals: 18,
120
+ desiredDecimals: 6,
121
+ })).toBe("1.234568");
122
+ });
123
+ it("should handle negative values", () => {
124
+ expect(bigIntToHumanReadableFormat({
125
+ amount: -1234567890000000000n,
126
+ decimals: 18,
127
+ desiredDecimals: 2,
128
+ })).toBe("-1.23");
129
+ });
130
+ it("should show <0.01 for very small nonzero values", () => {
131
+ expect(bigIntToHumanReadableFormat({
132
+ amount: 1n,
133
+ decimals: 18,
134
+ desiredDecimals: 2,
135
+ })).toBe("<0.01");
136
+ expect(bigIntToHumanReadableFormat({
137
+ amount: -1n,
138
+ decimals: 18,
139
+ desiredDecimals: 2,
140
+ })).toBe("<0.01");
141
+ });
142
+ it("should format with minDecimals", () => {
143
+ expect(bigIntToHumanReadableFormat({
144
+ amount: 1234000000000000000n,
145
+ decimals: 18,
146
+ desiredDecimals: 2,
147
+ minDecimals: 3,
148
+ })).toBe("1.234");
149
+ expect(bigIntToHumanReadableFormat({
150
+ amount: 1234000000000000000n,
151
+ decimals: 18,
152
+ desiredDecimals: 3,
153
+ minDecimals: 2,
154
+ })).toBe("1.234");
155
+ expect(bigIntToHumanReadableFormat({
156
+ amount: 1234000000000000000n,
157
+ decimals: 18,
158
+ desiredDecimals: 2,
159
+ minDecimals: 4,
160
+ })).toBe("1.2340");
161
+ });
162
+ });
163
+ describe("multiplyBigIntWithDecimal", () => {
164
+ it("should multiply bigint by integer", () => {
165
+ expect(multiplyBigIntWithDecimal(10n, 2)).toBe(20n);
166
+ });
167
+ it("should multiply bigint by decimal", () => {
168
+ expect(multiplyBigIntWithDecimal(100n, 0.5)).toBe(50n);
169
+ expect(multiplyBigIntWithDecimal(100n, 1.25)).toBe(125n);
170
+ });
171
+ it("should handle scientific notation", () => {
172
+ expect(multiplyBigIntWithDecimal(100n, 1e-2)).toBe(1n);
173
+ });
174
+ it("should handle zero", () => {
175
+ expect(multiplyBigIntWithDecimal(0n, 1.5)).toBe(0n);
176
+ });
177
+ });
178
+ describe("trimDecimals", () => {
179
+ it("should trim decimals to specified precision", () => {
180
+ expect(trimDecimals("1.23456", 2)).toBe("1.23");
181
+ expect(trimDecimals("1.2", 4)).toBe("1.2");
182
+ expect(trimDecimals("1", 2)).toBe("1");
183
+ });
184
+ });
185
+ describe("trimBeforeDecimals", () => {
186
+ it("should trim integer part to specified length", () => {
187
+ expect(trimBeforeDecimals("12345.67", 3)).toBe("123.67");
188
+ expect(trimBeforeDecimals("12.34", 5)).toBe("12.34");
189
+ expect(trimBeforeDecimals("123456", 2)).toBe("12.");
190
+ });
191
+ });
192
+ describe("normalizeDecimalNumber", () => {
193
+ it("should remove invalid characters", () => {
194
+ expect(normalizeDecimalNumber("12a3.4b5")).toBe("123.45");
195
+ });
196
+ it("should prevent multiple dots", () => {
197
+ expect(normalizeDecimalNumber("1.2.3")).toBe("12.3");
198
+ expect(normalizeDecimalNumber("1..1.2")).toBe("11.2");
199
+ });
200
+ it("should allow only digits and one dot", () => {
201
+ expect(normalizeDecimalNumber("abc")).toBe("");
202
+ expect(normalizeDecimalNumber("123")).toBe("123");
203
+ });
204
+ it("should handle leading and trailing spaces", () => {
205
+ expect(normalizeDecimalNumber(" 1.23 ")).toBe("1.23");
206
+ expect(normalizeDecimalNumber(" 1.2.3 ")).toBe("12.3");
207
+ });
208
+ it("should handle empty input", () => {
209
+ expect(normalizeDecimalNumber("")).toBe("");
210
+ expect(normalizeDecimalNumber(" ")).toBe("");
211
+ });
212
+ it("should handle numbers with thousands separator", () => {
213
+ expect(normalizeDecimalNumber("1,234.56")).toBe("1234.56");
214
+ expect(normalizeDecimalNumber("1,234,567.89")).toBe("1234567.89");
215
+ });
216
+ it("should handle scientific notation", () => {
217
+ // This function does not support scientific notation as our input is expected
218
+ // to accept only decimal numbers
219
+ expect(normalizeDecimalNumber("1e3")).toBe("13");
220
+ expect(normalizeDecimalNumber("1.23e2")).toBe("1.232");
221
+ });
222
+ });
223
+ //# sourceMappingURL=number2.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number2.test.js","sourceRoot":"","sources":["../../../src/utils/number2.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"numbers.test.js","sourceRoot":"","sources":["../../../src/utils/numbers.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"numbers.test.js","sourceRoot":"","sources":["../../../src/utils/numbers.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mezo-org/passport",
3
- "version": "0.5.1",
3
+ "version": "0.5.2-dev.0",
4
4
  "main": "dist/src/index.js",
5
5
  "license": "GPL-3.0-only",
6
6
  "scripts": {
package/src/api/portal.ts CHANGED
@@ -1,13 +1,9 @@
1
1
  import { ApiClient } from "./client"
2
2
 
3
3
  type PortalStatistics = {
4
- hodlers: number
5
- depositedBitcoin: string
6
- tvl: number
7
- currentUsdPerBtc: string
8
- currentUsdPerEth: string
9
- currentUsdPerTToken: string
10
- usdPerBtc24hChange: string
4
+ btcPrice: number
5
+ tTokenPrice: number
6
+ usersCount: number
11
7
  }
12
8
 
13
9
  type PortalMats = {
@@ -33,7 +29,7 @@ export class PortalApiClient extends ApiClient {
33
29
  }
34
30
 
35
31
  async getPortalStatistics() {
36
- const data = await this.handleRequest<PortalStatistics>("/v1/statistics", {
32
+ const data = await this.handleRequest<PortalStatistics>("/v2/statistics", {
37
33
  method: "GET",
38
34
  })
39
35
 
@@ -1,13 +1,8 @@
1
1
  import { useQuery } from "@tanstack/react-query"
2
- import { useConfig } from "wagmi"
3
- import { readContract } from "wagmi/actions"
4
2
  import { parseUnits } from "viem"
5
3
  import { ONE_SECOND_MS } from "../utils/time"
6
4
  import { usePortalApiClient } from "./usePortalApiClient"
7
- import { priceOracleContract } from "../lib/contracts"
8
- import { CHAIN_ID } from "../constants"
9
- import { usePassportContext } from "./usePassportContext"
10
- import { normalizePrecision } from "../utils/numbers"
5
+ import { useCollateralPrice } from "./useCollateralPrice"
11
6
 
12
7
  export const CONVERSION_RATE_DECIMALS = 18
13
8
 
@@ -26,54 +21,30 @@ export const QUERY_KEY = "passport.assetsConversionRates"
26
21
  */
27
22
  export function useAssetsConversionRates() {
28
23
  const portalApiClient = usePortalApiClient()
29
- const { environment = "mainnet" } = usePassportContext()
30
- const config = useConfig()
24
+ const { data: collateralPriceData } = useCollateralPrice()
31
25
 
32
- return useQuery({
33
- queryKey: [QUERY_KEY],
34
- queryFn: async () =>
35
- Promise.all([
36
- portalApiClient.getPortalStatistics(),
37
- readContract(config, {
38
- ...priceOracleContract,
39
- functionName: "latestRoundData",
40
- chainId: CHAIN_ID[environment],
41
- }),
42
- ]),
43
- select: ([portalStatistics, btcPriceData]) => {
44
- const tTokenConversionRate = portalStatistics.currentUsdPerTToken
45
- const [, btcConversionRate] = btcPriceData
26
+ const collateralPrice = collateralPriceData?.toString()
46
27
 
47
- const tPrice = parseUnits(tTokenConversionRate, CONVERSION_RATE_DECIMALS)
48
- const btcPrice = normalizePrecision(
49
- btcConversionRate,
28
+ return useQuery({
29
+ queryKey: [QUERY_KEY, collateralPrice],
30
+ queryFn: async () => Promise.all([portalApiClient.getPortalStatistics()]),
31
+ enabled: !!collateralPrice,
32
+ select: ([portalStatistics]) => {
33
+ const tTokenConversionRate = portalStatistics.tTokenPrice
34
+
35
+ const tPrice = parseUnits(
36
+ tTokenConversionRate.toString(),
50
37
  CONVERSION_RATE_DECIMALS,
51
38
  )
52
39
 
53
40
  return {
54
41
  rates: {
55
42
  mT: tPrice,
56
- BTC: btcPrice,
43
+ BTC: BigInt(collateralPrice!),
57
44
  },
58
45
  decimals: CONVERSION_RATE_DECIMALS,
59
46
  }
60
47
  },
61
- refetchInterval: ({ state }) => {
62
- if (!state.data) return MAX_PRICE_DELAY
63
-
64
- const [, btcPriceData] = state.data
65
- const [, , , updatedAt] = btcPriceData
66
-
67
- if (!updatedAt) return MAX_PRICE_DELAY
68
-
69
- const age = Date.now() - Number(updatedAt) * 1000
70
-
71
- return age > MAX_PRICE_DELAY
72
- ? // If the data is stale, we want to refetch as soon as possible, but
73
- // not faster than once per second, to avoid excessive requests.
74
- // Math.max ensures the interval is at least 1 second.
75
- Math.max(ONE_SECOND_MS, MAX_PRICE_DELAY - age)
76
- : MAX_PRICE_DELAY - age
77
- },
48
+ refetchInterval: MAX_PRICE_DELAY,
78
49
  })
79
50
  }
@@ -13,6 +13,7 @@ import { bigIntMax, normalizePrecision } from "../utils/numbers"
13
13
  import useWalletAccount from "./useWalletAccount"
14
14
  import { getAsset } from "../utils/assets"
15
15
  import { convertToUsd } from "../utils/currency"
16
+ import { useCollateralPrice } from "./useCollateralPrice"
16
17
 
17
18
  const DEBT_AND_COLL_PRECISION = 18
18
19
 
@@ -85,22 +86,6 @@ const BORROWER_OPERATIONS_ABI = [
85
86
  },
86
87
  ] as const
87
88
 
88
- const PRICE_FEED_ABI = [
89
- {
90
- inputs: [],
91
- name: "fetchPrice",
92
- outputs: [
93
- {
94
- internalType: "uint256",
95
- name: "",
96
- type: "uint256",
97
- },
98
- ],
99
- stateMutability: "view",
100
- type: "function",
101
- },
102
- ] as const
103
-
104
89
  /**
105
90
  * Query hook for getting borrow data. Returns collateral and trove debt for the
106
91
  * connected account, based on it's evm address.
@@ -110,18 +95,18 @@ export function useBorrowData(queryOptions = {}) {
110
95
  const { environment = "mainnet" } = usePassportContext()
111
96
  const walletAccount = useWalletAccount()
112
97
 
98
+ const { data: collateralPrice } = useCollateralPrice()
99
+
113
100
  const contractAddress = useMemo(() => {
114
101
  if (environment === "mainnet") {
115
102
  return {
116
103
  troveManager: mainnetBorrowContracts.TroveManager.address,
117
104
  borrowerOperations: mainnetBorrowContracts.BorrowerOperations.address,
118
- priceFeed: mainnetBorrowContracts.PriceFeed.address,
119
105
  }
120
106
  }
121
107
  return {
122
108
  troveManager: testnetBorrowContracts.TroveManager.address,
123
109
  borrowerOperations: testnetBorrowContracts.BorrowerOperations.address,
124
- priceFeed: testnetBorrowContracts.PriceFeed.address,
125
110
  }
126
111
  }, [environment])
127
112
 
@@ -144,15 +129,9 @@ export function useBorrowData(queryOptions = {}) {
144
129
  functionName: "MUSD_GAS_COMPENSATION",
145
130
  chainId,
146
131
  },
147
- {
148
- abi: PRICE_FEED_ABI,
149
- address: contractAddress.priceFeed,
150
- functionName: "fetchPrice",
151
- chainId,
152
- },
153
132
  ],
154
133
  query: {
155
- enabled: !!walletAccount.accountAddress,
134
+ enabled: !!walletAccount.accountAddress && !!collateralPrice?.toString,
156
135
  staleTime: 5 * ONE_MINUTE_MS,
157
136
  retry: 1,
158
137
  select: (data) => {
@@ -161,7 +140,6 @@ export function useBorrowData(queryOptions = {}) {
161
140
 
162
141
  const [rawCollateral, principal, interest] = data[0].result!
163
142
  const gasCompensation = data[1].result!
164
- const collateralPrice = data[2].result!
165
143
 
166
144
  const btcDetails = getAsset("BTC")
167
145
 
@@ -173,7 +151,7 @@ export function useBorrowData(queryOptions = {}) {
173
151
  usd: convertToUsd(
174
152
  rawCollateral,
175
153
  DEBT_AND_COLL_PRECISION,
176
- collateralPrice,
154
+ collateralPrice!,
177
155
  DEBT_AND_COLL_PRECISION,
178
156
  ),
179
157
  }
@@ -0,0 +1,64 @@
1
+ import { useReadContract } from "wagmi"
2
+ import { useMemo } from "react"
3
+ import { ONE_MINUTE_MS } from "../utils/time"
4
+ import {
5
+ mainnetBorrowContracts,
6
+ testnetBorrowContracts,
7
+ } from "../lib/contracts"
8
+ import { usePassportContext } from "./usePassportContext"
9
+ import { CHAIN_ID } from "../constants"
10
+ import useWalletAccount from "./useWalletAccount"
11
+
12
+ // Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
13
+ // support importing JSON as const yet so types cannot be inferred from the
14
+ // imported contract. As a workaround there is minimal ABI definition that can
15
+ // be asserted types from.
16
+ // Ref: https://wagmi.sh/core/typescript#const-assert-abis-typed-data
17
+
18
+ const PRICE_FEED_ABI = [
19
+ {
20
+ inputs: [],
21
+ name: "fetchPrice",
22
+ outputs: [
23
+ {
24
+ internalType: "uint256",
25
+ name: "",
26
+ type: "uint256",
27
+ },
28
+ ],
29
+ stateMutability: "view",
30
+ type: "function",
31
+ },
32
+ ] as const
33
+
34
+ /**
35
+ * Query hook for getting borrow data. Returns collateral and trove debt for the
36
+ * connected account, based on it's evm address.
37
+ * @param queryOptions Query options passed to the underlying `useQuery` hook.
38
+ */
39
+ export function useCollateralPrice(queryOptions = {}) {
40
+ const { environment = "mainnet" } = usePassportContext()
41
+ const walletAccount = useWalletAccount()
42
+
43
+ const priceFeedContractAddress = useMemo(() => {
44
+ if (environment === "mainnet") {
45
+ return mainnetBorrowContracts.PriceFeed.address
46
+ }
47
+ return testnetBorrowContracts.PriceFeed.address
48
+ }, [environment])
49
+
50
+ const chainId = CHAIN_ID[environment]
51
+
52
+ return useReadContract({
53
+ abi: PRICE_FEED_ABI,
54
+ address: priceFeedContractAddress,
55
+ functionName: "fetchPrice",
56
+ chainId,
57
+ query: {
58
+ enabled: !!walletAccount.accountAddress,
59
+ staleTime: 5 * ONE_MINUTE_MS,
60
+ retry: 1,
61
+ ...queryOptions,
62
+ },
63
+ })
64
+ }