@lifi/perps-sdk 23.1.0 → 25.0.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 (305) hide show
  1. package/README.md +102 -56
  2. package/dist/cjs/client/PerpsClient.d.ts +3 -2
  3. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  4. package/dist/cjs/client/PerpsClient.js +16 -9
  5. package/dist/cjs/client/PerpsClient.js.map +1 -1
  6. package/dist/cjs/decimal/arithmetic.d.ts +15 -0
  7. package/dist/cjs/decimal/arithmetic.d.ts.map +1 -0
  8. package/dist/cjs/decimal/arithmetic.js +53 -0
  9. package/dist/cjs/decimal/arithmetic.js.map +1 -0
  10. package/dist/cjs/decimal/big.d.ts +0 -1
  11. package/dist/cjs/decimal/big.d.ts.map +1 -1
  12. package/dist/cjs/decimal/big.js +0 -4
  13. package/dist/cjs/decimal/big.js.map +1 -1
  14. package/dist/cjs/decimal/compare.d.ts +6 -2
  15. package/dist/cjs/decimal/compare.d.ts.map +1 -1
  16. package/dist/cjs/decimal/compare.js +15 -2
  17. package/dist/cjs/decimal/compare.js.map +1 -1
  18. package/dist/cjs/decimal/convert.d.ts +10 -6
  19. package/dist/cjs/decimal/convert.d.ts.map +1 -1
  20. package/dist/cjs/decimal/convert.js +34 -21
  21. package/dist/cjs/decimal/convert.js.map +1 -1
  22. package/dist/cjs/decimal/decimalStringToBig.d.ts +5 -0
  23. package/dist/cjs/decimal/decimalStringToBig.d.ts.map +1 -0
  24. package/dist/cjs/decimal/decimalStringToBig.js +25 -0
  25. package/dist/cjs/decimal/decimalStringToBig.js.map +1 -0
  26. package/dist/cjs/decimal/format.d.ts.map +1 -1
  27. package/dist/cjs/decimal/format.js +70 -52
  28. package/dist/cjs/decimal/format.js.map +1 -1
  29. package/dist/cjs/decimal/parse.d.ts +5 -4
  30. package/dist/cjs/decimal/parse.d.ts.map +1 -1
  31. package/dist/cjs/decimal/parse.js +43 -25
  32. package/dist/cjs/decimal/parse.js.map +1 -1
  33. package/dist/cjs/errors/invalidInput.d.ts +3 -0
  34. package/dist/cjs/errors/invalidInput.d.ts.map +1 -0
  35. package/dist/cjs/errors/invalidInput.js +9 -0
  36. package/dist/cjs/errors/invalidInput.js.map +1 -0
  37. package/dist/cjs/index.d.ts +15 -12
  38. package/dist/cjs/index.d.ts.map +1 -1
  39. package/dist/cjs/index.js +69 -9
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/cjs/math/fills.d.ts +1 -1
  42. package/dist/cjs/math/fills.d.ts.map +1 -1
  43. package/dist/cjs/math/fills.js +28 -13
  44. package/dist/cjs/math/fills.js.map +1 -1
  45. package/dist/cjs/math/order.d.ts +27 -16
  46. package/dist/cjs/math/order.d.ts.map +1 -1
  47. package/dist/cjs/math/order.js +131 -134
  48. package/dist/cjs/math/order.js.map +1 -1
  49. package/dist/cjs/math/position.d.ts +85 -35
  50. package/dist/cjs/math/position.d.ts.map +1 -1
  51. package/dist/cjs/math/position.js +93 -94
  52. package/dist/cjs/math/position.js.map +1 -1
  53. package/dist/cjs/services/getGasRecommendation.js +1 -1
  54. package/dist/cjs/services/getGasRecommendation.js.map +1 -1
  55. package/dist/cjs/services/getQuote.d.ts +1 -1
  56. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -1
  57. package/dist/cjs/services/resolveSubscribeQuote.js +3 -2
  58. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -1
  59. package/dist/cjs/transport/request.d.ts +1 -0
  60. package/dist/cjs/transport/request.d.ts.map +1 -1
  61. package/dist/cjs/transport/request.js +2 -2
  62. package/dist/cjs/transport/request.js.map +1 -1
  63. package/dist/cjs/types/api.d.ts +4 -0
  64. package/dist/cjs/types/api.d.ts.map +1 -1
  65. package/dist/cjs/types/provider.d.ts +9 -5
  66. package/dist/cjs/types/provider.d.ts.map +1 -1
  67. package/dist/cjs/types/withdrawal.d.ts +12 -4
  68. package/dist/cjs/types/withdrawal.d.ts.map +1 -1
  69. package/dist/cjs/utils/createSafeFunction.d.ts +2 -0
  70. package/dist/cjs/utils/createSafeFunction.d.ts.map +1 -0
  71. package/dist/cjs/utils/createSafeFunction.js +15 -0
  72. package/dist/cjs/utils/createSafeFunction.js.map +1 -0
  73. package/dist/cjs/utils/timestampToIsoString.d.ts +3 -0
  74. package/dist/cjs/utils/timestampToIsoString.d.ts.map +1 -0
  75. package/dist/cjs/utils/timestampToIsoString.js +16 -0
  76. package/dist/cjs/utils/timestampToIsoString.js.map +1 -0
  77. package/dist/cjs/utils/warnOnce.d.ts +6 -0
  78. package/dist/cjs/utils/warnOnce.d.ts.map +1 -1
  79. package/dist/cjs/utils/warnOnce.js +19 -1
  80. package/dist/cjs/utils/warnOnce.js.map +1 -1
  81. package/dist/cjs/version.d.ts +1 -1
  82. package/dist/cjs/version.js +1 -1
  83. package/dist/cjs/websocket/PerpsWsClient.d.ts +2 -0
  84. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
  85. package/dist/cjs/websocket/PerpsWsClient.js +14 -1
  86. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
  87. package/dist/cjs/websocket/wsLog.d.ts +2 -0
  88. package/dist/cjs/websocket/wsLog.d.ts.map +1 -1
  89. package/dist/cjs/websocket/wsLog.js +9 -0
  90. package/dist/cjs/websocket/wsLog.js.map +1 -1
  91. package/dist/cjs/wire/orderAmounts.d.ts +3 -2
  92. package/dist/cjs/wire/orderAmounts.d.ts.map +1 -1
  93. package/dist/cjs/wire/orderAmounts.js +22 -21
  94. package/dist/cjs/wire/orderAmounts.js.map +1 -1
  95. package/dist/cjs/wire/refuel.d.ts +4 -1
  96. package/dist/cjs/wire/refuel.d.ts.map +1 -1
  97. package/dist/cjs/wire/refuel.js +23 -6
  98. package/dist/cjs/wire/refuel.js.map +1 -1
  99. package/dist/cjs/wire/transferable.js +3 -3
  100. package/dist/cjs/wire/transferable.js.map +1 -1
  101. package/dist/cjs/wire/withdraw.d.ts.map +1 -1
  102. package/dist/cjs/wire/withdraw.js +3 -3
  103. package/dist/cjs/wire/withdraw.js.map +1 -1
  104. package/dist/esm/client/PerpsClient.d.ts +17 -4
  105. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  106. package/dist/esm/client/PerpsClient.js +30 -8
  107. package/dist/esm/client/PerpsClient.js.map +1 -1
  108. package/dist/esm/decimal/arithmetic.d.ts +98 -0
  109. package/dist/esm/decimal/arithmetic.d.ts.map +1 -0
  110. package/dist/esm/decimal/arithmetic.js +126 -0
  111. package/dist/esm/decimal/arithmetic.js.map +1 -0
  112. package/dist/esm/decimal/big.d.ts +0 -2
  113. package/dist/esm/decimal/big.d.ts.map +1 -1
  114. package/dist/esm/decimal/big.js +0 -4
  115. package/dist/esm/decimal/big.js.map +1 -1
  116. package/dist/esm/decimal/compare.d.ts +40 -6
  117. package/dist/esm/decimal/compare.d.ts.map +1 -1
  118. package/dist/esm/decimal/compare.js +46 -6
  119. package/dist/esm/decimal/compare.js.map +1 -1
  120. package/dist/esm/decimal/convert.d.ts +50 -36
  121. package/dist/esm/decimal/convert.d.ts.map +1 -1
  122. package/dist/esm/decimal/convert.js +64 -42
  123. package/dist/esm/decimal/convert.js.map +1 -1
  124. package/dist/esm/decimal/decimalStringToBig.d.ts +25 -0
  125. package/dist/esm/decimal/decimalStringToBig.d.ts.map +1 -0
  126. package/dist/esm/decimal/decimalStringToBig.js +37 -0
  127. package/dist/esm/decimal/decimalStringToBig.js.map +1 -0
  128. package/dist/esm/decimal/format.d.ts +4 -1
  129. package/dist/esm/decimal/format.d.ts.map +1 -1
  130. package/dist/esm/decimal/format.js +71 -70
  131. package/dist/esm/decimal/format.js.map +1 -1
  132. package/dist/esm/decimal/parse.d.ts +29 -13
  133. package/dist/esm/decimal/parse.d.ts.map +1 -1
  134. package/dist/esm/decimal/parse.js +61 -44
  135. package/dist/esm/decimal/parse.js.map +1 -1
  136. package/dist/esm/errors/invalidInput.d.ts +4 -0
  137. package/dist/esm/errors/invalidInput.d.ts.map +1 -0
  138. package/dist/esm/errors/invalidInput.js +7 -0
  139. package/dist/esm/errors/invalidInput.js.map +1 -0
  140. package/dist/esm/index.d.ts +15 -12
  141. package/dist/esm/index.d.ts.map +1 -1
  142. package/dist/esm/index.js +11 -8
  143. package/dist/esm/index.js.map +1 -1
  144. package/dist/esm/math/fills.d.ts +6 -3
  145. package/dist/esm/math/fills.d.ts.map +1 -1
  146. package/dist/esm/math/fills.js +31 -16
  147. package/dist/esm/math/fills.js.map +1 -1
  148. package/dist/esm/math/order.d.ts +84 -66
  149. package/dist/esm/math/order.d.ts.map +1 -1
  150. package/dist/esm/math/order.js +178 -175
  151. package/dist/esm/math/order.js.map +1 -1
  152. package/dist/esm/math/position.d.ts +155 -98
  153. package/dist/esm/math/position.d.ts.map +1 -1
  154. package/dist/esm/math/position.js +160 -156
  155. package/dist/esm/math/position.js.map +1 -1
  156. package/dist/esm/services/getGasRecommendation.js +1 -1
  157. package/dist/esm/services/getGasRecommendation.js.map +1 -1
  158. package/dist/esm/services/getQuote.d.ts +2 -2
  159. package/dist/esm/services/getQuote.js +1 -1
  160. package/dist/esm/services/resolveSubscribeQuote.d.ts +1 -1
  161. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -1
  162. package/dist/esm/services/resolveSubscribeQuote.js +4 -3
  163. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -1
  164. package/dist/esm/transport/request.d.ts +5 -0
  165. package/dist/esm/transport/request.d.ts.map +1 -1
  166. package/dist/esm/transport/request.js +2 -2
  167. package/dist/esm/transport/request.js.map +1 -1
  168. package/dist/esm/types/api.d.ts +9 -0
  169. package/dist/esm/types/api.d.ts.map +1 -1
  170. package/dist/esm/types/provider.d.ts +30 -16
  171. package/dist/esm/types/provider.d.ts.map +1 -1
  172. package/dist/esm/types/withdrawal.d.ts +32 -7
  173. package/dist/esm/types/withdrawal.d.ts.map +1 -1
  174. package/dist/esm/utils/createSafeFunction.d.ts +9 -0
  175. package/dist/esm/utils/createSafeFunction.d.ts.map +1 -0
  176. package/dist/esm/utils/createSafeFunction.js +19 -0
  177. package/dist/esm/utils/createSafeFunction.js.map +1 -0
  178. package/dist/esm/utils/timestampToIsoString.d.ts +15 -0
  179. package/dist/esm/utils/timestampToIsoString.d.ts.map +1 -0
  180. package/dist/esm/utils/timestampToIsoString.js +24 -0
  181. package/dist/esm/utils/timestampToIsoString.js.map +1 -0
  182. package/dist/esm/utils/warnOnce.d.ts +27 -0
  183. package/dist/esm/utils/warnOnce.d.ts.map +1 -1
  184. package/dist/esm/utils/warnOnce.js +36 -0
  185. package/dist/esm/utils/warnOnce.js.map +1 -1
  186. package/dist/esm/version.d.ts +1 -1
  187. package/dist/esm/version.js +1 -1
  188. package/dist/esm/websocket/PerpsWsClient.d.ts +7 -0
  189. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
  190. package/dist/esm/websocket/PerpsWsClient.js +20 -2
  191. package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
  192. package/dist/esm/websocket/wsLog.d.ts +12 -0
  193. package/dist/esm/websocket/wsLog.d.ts.map +1 -1
  194. package/dist/esm/websocket/wsLog.js +19 -0
  195. package/dist/esm/websocket/wsLog.js.map +1 -1
  196. package/dist/esm/wire/orderAmounts.d.ts +9 -7
  197. package/dist/esm/wire/orderAmounts.d.ts.map +1 -1
  198. package/dist/esm/wire/orderAmounts.js +24 -20
  199. package/dist/esm/wire/orderAmounts.js.map +1 -1
  200. package/dist/esm/wire/refuel.d.ts +24 -14
  201. package/dist/esm/wire/refuel.d.ts.map +1 -1
  202. package/dist/esm/wire/refuel.js +38 -17
  203. package/dist/esm/wire/refuel.js.map +1 -1
  204. package/dist/esm/wire/transferable.d.ts +2 -2
  205. package/dist/esm/wire/transferable.js +5 -5
  206. package/dist/esm/wire/transferable.js.map +1 -1
  207. package/dist/esm/wire/withdraw.d.ts.map +1 -1
  208. package/dist/esm/wire/withdraw.js +3 -3
  209. package/dist/esm/wire/withdraw.js.map +1 -1
  210. package/dist/types/client/PerpsClient.d.ts +17 -4
  211. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  212. package/dist/types/decimal/arithmetic.d.ts +98 -0
  213. package/dist/types/decimal/arithmetic.d.ts.map +1 -0
  214. package/dist/types/decimal/big.d.ts +0 -2
  215. package/dist/types/decimal/big.d.ts.map +1 -1
  216. package/dist/types/decimal/compare.d.ts +40 -6
  217. package/dist/types/decimal/compare.d.ts.map +1 -1
  218. package/dist/types/decimal/convert.d.ts +50 -36
  219. package/dist/types/decimal/convert.d.ts.map +1 -1
  220. package/dist/types/decimal/decimalStringToBig.d.ts +25 -0
  221. package/dist/types/decimal/decimalStringToBig.d.ts.map +1 -0
  222. package/dist/types/decimal/format.d.ts +4 -1
  223. package/dist/types/decimal/format.d.ts.map +1 -1
  224. package/dist/types/decimal/parse.d.ts +29 -13
  225. package/dist/types/decimal/parse.d.ts.map +1 -1
  226. package/dist/types/errors/invalidInput.d.ts +4 -0
  227. package/dist/types/errors/invalidInput.d.ts.map +1 -0
  228. package/dist/types/index.d.ts +15 -12
  229. package/dist/types/index.d.ts.map +1 -1
  230. package/dist/types/math/fills.d.ts +6 -3
  231. package/dist/types/math/fills.d.ts.map +1 -1
  232. package/dist/types/math/order.d.ts +84 -66
  233. package/dist/types/math/order.d.ts.map +1 -1
  234. package/dist/types/math/position.d.ts +155 -98
  235. package/dist/types/math/position.d.ts.map +1 -1
  236. package/dist/types/services/getQuote.d.ts +2 -2
  237. package/dist/types/services/resolveSubscribeQuote.d.ts +1 -1
  238. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -1
  239. package/dist/types/transport/request.d.ts +5 -0
  240. package/dist/types/transport/request.d.ts.map +1 -1
  241. package/dist/types/types/api.d.ts +9 -0
  242. package/dist/types/types/api.d.ts.map +1 -1
  243. package/dist/types/types/provider.d.ts +30 -16
  244. package/dist/types/types/provider.d.ts.map +1 -1
  245. package/dist/types/types/withdrawal.d.ts +32 -7
  246. package/dist/types/types/withdrawal.d.ts.map +1 -1
  247. package/dist/types/utils/createSafeFunction.d.ts +9 -0
  248. package/dist/types/utils/createSafeFunction.d.ts.map +1 -0
  249. package/dist/types/utils/timestampToIsoString.d.ts +15 -0
  250. package/dist/types/utils/timestampToIsoString.d.ts.map +1 -0
  251. package/dist/types/utils/warnOnce.d.ts +27 -0
  252. package/dist/types/utils/warnOnce.d.ts.map +1 -1
  253. package/dist/types/version.d.ts +1 -1
  254. package/dist/types/websocket/PerpsWsClient.d.ts +7 -0
  255. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
  256. package/dist/types/websocket/wsLog.d.ts +12 -0
  257. package/dist/types/websocket/wsLog.d.ts.map +1 -1
  258. package/dist/types/wire/orderAmounts.d.ts +9 -7
  259. package/dist/types/wire/orderAmounts.d.ts.map +1 -1
  260. package/dist/types/wire/refuel.d.ts +24 -14
  261. package/dist/types/wire/refuel.d.ts.map +1 -1
  262. package/dist/types/wire/transferable.d.ts +2 -2
  263. package/dist/types/wire/withdraw.d.ts.map +1 -1
  264. package/package.json +2 -2
  265. package/src/client/PerpsClient.ts +48 -10
  266. package/src/decimal/arithmetic.ts +170 -0
  267. package/src/decimal/big.ts +0 -5
  268. package/src/decimal/compare.ts +61 -11
  269. package/src/decimal/convert.ts +105 -63
  270. package/src/decimal/decimalStringToBig.ts +42 -0
  271. package/src/decimal/format.ts +81 -72
  272. package/src/decimal/parse.ts +78 -57
  273. package/src/errors/invalidInput.ts +10 -0
  274. package/src/index.ts +80 -12
  275. package/src/math/fills.ts +32 -17
  276. package/src/math/order.ts +279 -226
  277. package/src/math/position.ts +280 -196
  278. package/src/services/getGasRecommendation.ts +1 -1
  279. package/src/services/getQuote.ts +2 -2
  280. package/src/services/resolveSubscribeQuote.ts +4 -3
  281. package/src/transport/request.ts +7 -2
  282. package/src/types/api.ts +10 -0
  283. package/src/types/provider.ts +39 -16
  284. package/src/types/withdrawal.ts +35 -8
  285. package/src/utils/createSafeFunction.ts +20 -0
  286. package/src/utils/timestampToIsoString.ts +31 -0
  287. package/src/utils/warnOnce.ts +60 -0
  288. package/src/version.ts +1 -1
  289. package/src/websocket/PerpsWsClient.ts +25 -2
  290. package/src/websocket/wsLog.ts +44 -0
  291. package/src/wire/orderAmounts.ts +45 -26
  292. package/src/wire/refuel.ts +56 -20
  293. package/src/wire/transferable.ts +5 -5
  294. package/src/wire/withdraw.ts +3 -5
  295. package/dist/cjs/decimal/requireDecimal.d.ts +0 -4
  296. package/dist/cjs/decimal/requireDecimal.d.ts.map +0 -1
  297. package/dist/cjs/decimal/requireDecimal.js +0 -12
  298. package/dist/cjs/decimal/requireDecimal.js.map +0 -1
  299. package/dist/esm/decimal/requireDecimal.d.ts +0 -5
  300. package/dist/esm/decimal/requireDecimal.d.ts.map +0 -1
  301. package/dist/esm/decimal/requireDecimal.js +0 -7
  302. package/dist/esm/decimal/requireDecimal.js.map +0 -1
  303. package/dist/types/decimal/requireDecimal.d.ts +0 -5
  304. package/dist/types/decimal/requireDecimal.d.ts.map +0 -1
  305. package/src/decimal/requireDecimal.ts +0 -8
@@ -1,32 +1,55 @@
1
1
  import { type DecimalString, PerpsErrorCode } from '@lifi/perps-types'
2
+ import type Big from 'big.js'
2
3
  import { DivBig } from '../decimal/big.js'
3
- import { requireDecimal } from '../decimal/requireDecimal.js'
4
+ import { BASE_UNITS_PATTERN } from '../decimal/convert.js'
5
+ import { decimalStringToDivBig } from '../decimal/decimalStringToBig.js'
4
6
  import { PerpsError } from '../errors/PerpsError.js'
5
7
 
8
+ /**
9
+ * Headroom, in percent, that {@link calculateRefuelAmount} adds over the gas
10
+ * deficit to pay the refuel route's own swap and bridge fees.
11
+ *
12
+ * @public
13
+ */
14
+ export const REFUEL_FEE_MARGIN_PERCENT = 20
15
+
6
16
  /** @public */
7
17
  export interface RefuelAmountInput {
8
- /** USD value of the gas the route recommends. */
9
- gasUsd: DecimalString
18
+ /** Native gas amount the LI.FI gas suggestion recommends, in base units. */
19
+ recommendedAmount: DecimalString
20
+ /** USD value of `recommendedAmount`. */
21
+ recommendedUsd: DecimalString
22
+ /** Native balance the wallet holds on the recommendation's chain, in base units. */
23
+ nativeBalance: DecimalString
10
24
  /** USD price of one whole source token. */
11
25
  priceUsd: DecimalString
12
26
  /** Decimals of the source token, which the result is spelled to exactly. */
13
27
  decimals: number
14
28
  }
15
29
 
30
+ function requireBaseUnits(value: DecimalString, field: string): Big {
31
+ if (!BASE_UNITS_PATTERN.test(value)) {
32
+ throw new PerpsError(
33
+ PerpsErrorCode.ValidationError,
34
+ `Invalid \`${field}\`: '${value}' is not an integer base-unit string.`
35
+ )
36
+ }
37
+ return new DivBig(value)
38
+ }
39
+
16
40
  /**
17
- * Source-token amount whose USD value covers `gasUsd`, rounded **up** onto
18
- * the token's decimal grid so a refuel never lands short of the
19
- * recommendation. The result keeps trailing zeros to `decimals`, so it seeds
20
- * an amount input at the token's own precision.
21
- *
22
- * The quotient does not terminate for most prices, which is why this is a
23
- * big.js primitive: an 18-decimal token needs a ceiling at 10^-18, far past
24
- * what a `number` can carry.
41
+ * Source-token amount that buys the native gas the wallet lacks: the part of
42
+ * the recommendation above `nativeBalance`, valued pro rata on
43
+ * `recommendedUsd`, plus {@link REFUEL_FEE_MARGIN_PERCENT}. Rounded **up**
44
+ * onto the token's decimal grid so a refuel never lands short, and spelled
45
+ * with trailing zeros to `decimals` to seed an amount input.
25
46
  *
26
- * @returns `undefined` when `gasUsd` or `priceUsd` is not greater than zero,
27
- * which is a route with nothing to refuel rather than a failure.
28
- * @throws {PerpsError} `ValidationError` when `gasUsd` or `priceUsd` is not a
29
- * {@link DecimalString}, or when `decimals` is not a non-negative integer.
47
+ * @returns `undefined` when the wallet already holds the recommendation, or
48
+ * when `recommendedAmount`, `recommendedUsd` or `priceUsd` is not greater
49
+ * than zero: a route with nothing to refuel, not a failure.
50
+ * @throws {PerpsError} `ValidationError` when a base-unit field is not an
51
+ * integer string, a USD field does not match the decimal pattern, or `decimals`
52
+ * is not a non-negative integer.
30
53
  * @public
31
54
  */
32
55
  export function calculateRefuelAmount(
@@ -39,13 +62,26 @@ export function calculateRefuelAmount(
39
62
  `Invalid \`decimals\` for a refuel amount: ${decimals}`
40
63
  )
41
64
  }
42
- const gasUsd = requireDecimal(input.gasUsd, 'gasUsd')
43
- const priceUsd = requireDecimal(input.priceUsd, 'priceUsd')
44
- if (!gasUsd.gt(0) || !priceUsd.gt(0)) {
65
+ const recommended = requireBaseUnits(
66
+ input.recommendedAmount,
67
+ 'recommendedAmount'
68
+ )
69
+ const balance = requireBaseUnits(input.nativeBalance, 'nativeBalance')
70
+ const recommendedUsd = decimalStringToDivBig(input.recommendedUsd)
71
+ const priceUsd = decimalStringToDivBig(input.priceUsd)
72
+ const deficit = recommended.minus(balance)
73
+ if (
74
+ !recommended.gt(0) ||
75
+ !recommendedUsd.gt(0) ||
76
+ !priceUsd.gt(0) ||
77
+ !deficit.gt(0)
78
+ ) {
45
79
  return undefined
46
80
  }
47
- return new DivBig(gasUsd)
48
- .div(priceUsd)
81
+ return recommendedUsd
82
+ .times(deficit)
83
+ .times(100 + REFUEL_FEE_MARGIN_PERCENT)
84
+ .div(recommended.times(100).times(priceUsd))
49
85
  .round(decimals, DivBig.roundUp)
50
86
  .toFixed(decimals)
51
87
  }
@@ -1,5 +1,5 @@
1
1
  import type { DecimalString } from '@lifi/perps-types'
2
- import { requireDecimal } from '../decimal/requireDecimal.js'
2
+ import { decimalStringToBig } from '../decimal/decimalStringToBig.js'
3
3
 
4
4
  /**
5
5
  * The part of `units` that a venue-wide free figure releases: never below
@@ -9,16 +9,16 @@ import { requireDecimal } from '../decimal/requireDecimal.js'
9
9
  * @param venueFigure - The venue's free figure for the category, which can
10
10
  * exceed `units` or fall below zero.
11
11
  * @param units - Units held in the category, the upper bound of the clamp.
12
- * @throws {PerpsError} `ValidationError` when either input is not a
13
- * {@link DecimalString}, naming the field.
12
+ * @throws {PerpsError} `ValidationError` when either input does not match the
13
+ * decimal pattern, naming the field.
14
14
  * @public
15
15
  */
16
16
  export function calculateTransferable(
17
17
  venueFigure: DecimalString,
18
18
  units: DecimalString
19
19
  ): DecimalString {
20
- const figure = requireDecimal(venueFigure, 'venueFigure')
21
- const held = requireDecimal(units, 'units')
20
+ const figure = decimalStringToBig(venueFigure)
21
+ const held = decimalStringToBig(units)
22
22
  if (figure.lt(0)) {
23
23
  return '0'
24
24
  }
@@ -1,5 +1,5 @@
1
1
  import type { DecimalString } from '@lifi/perps-types'
2
- import { requireDecimal } from '../decimal/requireDecimal.js'
2
+ import { decimalStringToBig } from '../decimal/decimalStringToBig.js'
3
3
  import type { WithdrawableBalance } from '../types/withdrawal.js'
4
4
 
5
5
  /**
@@ -18,12 +18,10 @@ export function calculateWithdrawMax(
18
18
  'available' | 'withdrawalFee' | 'isFeeDeducted'
19
19
  >
20
20
  ): DecimalString {
21
- const available = requireDecimal(row.available, 'available')
21
+ const available = decimalStringToBig(row.available)
22
22
  if (row.isFeeDeducted !== false || row.withdrawalFee === undefined) {
23
23
  return available.toFixed()
24
24
  }
25
- const funded = available.minus(
26
- requireDecimal(row.withdrawalFee, 'withdrawalFee')
27
- )
25
+ const funded = available.minus(decimalStringToBig(row.withdrawalFee))
28
26
  return funded.gt(0) ? funded.toFixed() : '0'
29
27
  }
@@ -1,4 +0,0 @@
1
- import type { DecimalString } from '@lifi/perps-types';
2
- import Big from 'big.js';
3
- export declare function requireDecimal(value: DecimalString, field: string): Big;
4
- //# sourceMappingURL=requireDecimal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requireDecimal.d.ts","sourceRoot":"","sources":["../../../src/decimal/requireDecimal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,GAAG,MAAM,QAAQ,CAAA;AAIxB,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAEvE"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.requireDecimal = requireDecimal;
7
- const big_js_1 = __importDefault(require("big.js"));
8
- const parse_js_1 = require("./parse.js");
9
- function requireDecimal(value, field) {
10
- return new big_js_1.default((0, parse_js_1.validateDecimalString)(value, field));
11
- }
12
- //# sourceMappingURL=requireDecimal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requireDecimal.js","sourceRoot":"","sources":["../../../src/decimal/requireDecimal.ts"],"names":[],"mappings":";;;;;AAKA,wCAEC;AAND,oDAAwB;AACxB,yCAAkD;AAGlD,SAAgB,cAAc,CAAC,KAAoB,EAAE,KAAa;IAChE,OAAO,IAAI,gBAAG,CAAC,IAAA,gCAAqB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AACrD,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { DecimalString } from '@lifi/perps-types';
2
- import Big from 'big.js';
3
- /** Parse a decimal input after {@link validateDecimalString} accepts it. */
4
- export declare function requireDecimal(value: DecimalString, field: string): Big;
5
- //# sourceMappingURL=requireDecimal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requireDecimal.d.ts","sourceRoot":"","sources":["../../../src/decimal/requireDecimal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAEvE"}
@@ -1,7 +0,0 @@
1
- import Big from 'big.js';
2
- import { validateDecimalString } from './parse.js';
3
- /** Parse a decimal input after {@link validateDecimalString} accepts it. */
4
- export function requireDecimal(value, field) {
5
- return new Big(validateDecimalString(value, field));
6
- }
7
- //# sourceMappingURL=requireDecimal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requireDecimal.js","sourceRoot":"","sources":["../../../src/decimal/requireDecimal.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAElD,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,KAAa;IAChE,OAAO,IAAI,GAAG,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AACrD,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { DecimalString } from '@lifi/perps-types';
2
- import Big from 'big.js';
3
- /** Parse a decimal input after {@link validateDecimalString} accepts it. */
4
- export declare function requireDecimal(value: DecimalString, field: string): Big;
5
- //# sourceMappingURL=requireDecimal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requireDecimal.d.ts","sourceRoot":"","sources":["../../../src/decimal/requireDecimal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAEvE"}
@@ -1,8 +0,0 @@
1
- import type { DecimalString } from '@lifi/perps-types'
2
- import Big from 'big.js'
3
- import { validateDecimalString } from './parse.js'
4
-
5
- /** Parse a decimal input after {@link validateDecimalString} accepts it. */
6
- export function requireDecimal(value: DecimalString, field: string): Big {
7
- return new Big(validateDecimalString(value, field))
8
- }