@lifi/perps-sdk 23.1.0 → 24.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 (289) hide show
  1. package/README.md +85 -45
  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 +13 -0
  7. package/dist/cjs/decimal/arithmetic.d.ts.map +1 -0
  8. package/dist/cjs/decimal/arithmetic.js +48 -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 +12 -6
  19. package/dist/cjs/decimal/convert.d.ts.map +1 -1
  20. package/dist/cjs/decimal/convert.js +36 -14
  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 +27 -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 +4 -4
  30. package/dist/cjs/decimal/parse.d.ts.map +1 -1
  31. package/dist/cjs/decimal/parse.js +42 -25
  32. package/dist/cjs/decimal/parse.js.map +1 -1
  33. package/dist/cjs/index.d.ts +13 -11
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +64 -8
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/math/fills.d.ts +1 -1
  38. package/dist/cjs/math/fills.d.ts.map +1 -1
  39. package/dist/cjs/math/fills.js +28 -13
  40. package/dist/cjs/math/fills.js.map +1 -1
  41. package/dist/cjs/math/order.d.ts +27 -16
  42. package/dist/cjs/math/order.d.ts.map +1 -1
  43. package/dist/cjs/math/order.js +106 -122
  44. package/dist/cjs/math/order.js.map +1 -1
  45. package/dist/cjs/math/position.d.ts +85 -35
  46. package/dist/cjs/math/position.d.ts.map +1 -1
  47. package/dist/cjs/math/position.js +88 -91
  48. package/dist/cjs/math/position.js.map +1 -1
  49. package/dist/cjs/services/getGasRecommendation.js +1 -1
  50. package/dist/cjs/services/getGasRecommendation.js.map +1 -1
  51. package/dist/cjs/services/getQuote.d.ts +1 -1
  52. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -1
  53. package/dist/cjs/services/resolveSubscribeQuote.js +3 -2
  54. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -1
  55. package/dist/cjs/transport/request.d.ts +1 -0
  56. package/dist/cjs/transport/request.d.ts.map +1 -1
  57. package/dist/cjs/transport/request.js +2 -2
  58. package/dist/cjs/transport/request.js.map +1 -1
  59. package/dist/cjs/types/api.d.ts +4 -0
  60. package/dist/cjs/types/api.d.ts.map +1 -1
  61. package/dist/cjs/types/provider.d.ts +9 -5
  62. package/dist/cjs/types/provider.d.ts.map +1 -1
  63. package/dist/cjs/types/withdrawal.d.ts +12 -4
  64. package/dist/cjs/types/withdrawal.d.ts.map +1 -1
  65. package/dist/cjs/utils/createSafeFunction.d.ts +2 -0
  66. package/dist/cjs/utils/createSafeFunction.d.ts.map +1 -0
  67. package/dist/cjs/utils/createSafeFunction.js +15 -0
  68. package/dist/cjs/utils/createSafeFunction.js.map +1 -0
  69. package/dist/cjs/utils/timestampToIsoString.d.ts +3 -0
  70. package/dist/cjs/utils/timestampToIsoString.d.ts.map +1 -0
  71. package/dist/cjs/utils/timestampToIsoString.js +16 -0
  72. package/dist/cjs/utils/timestampToIsoString.js.map +1 -0
  73. package/dist/cjs/utils/warnOnce.d.ts +2 -0
  74. package/dist/cjs/utils/warnOnce.d.ts.map +1 -1
  75. package/dist/cjs/utils/warnOnce.js +13 -1
  76. package/dist/cjs/utils/warnOnce.js.map +1 -1
  77. package/dist/cjs/version.d.ts +1 -1
  78. package/dist/cjs/version.js +1 -1
  79. package/dist/cjs/websocket/PerpsWsClient.d.ts +2 -0
  80. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
  81. package/dist/cjs/websocket/PerpsWsClient.js +14 -1
  82. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
  83. package/dist/cjs/websocket/wsLog.d.ts +2 -0
  84. package/dist/cjs/websocket/wsLog.d.ts.map +1 -1
  85. package/dist/cjs/websocket/wsLog.js +8 -0
  86. package/dist/cjs/websocket/wsLog.js.map +1 -1
  87. package/dist/cjs/wire/orderAmounts.d.ts.map +1 -1
  88. package/dist/cjs/wire/orderAmounts.js +6 -9
  89. package/dist/cjs/wire/orderAmounts.js.map +1 -1
  90. package/dist/cjs/wire/refuel.d.ts +4 -1
  91. package/dist/cjs/wire/refuel.d.ts.map +1 -1
  92. package/dist/cjs/wire/refuel.js +23 -6
  93. package/dist/cjs/wire/refuel.js.map +1 -1
  94. package/dist/cjs/wire/transferable.js +3 -3
  95. package/dist/cjs/wire/transferable.js.map +1 -1
  96. package/dist/cjs/wire/withdraw.d.ts.map +1 -1
  97. package/dist/cjs/wire/withdraw.js +3 -3
  98. package/dist/cjs/wire/withdraw.js.map +1 -1
  99. package/dist/esm/client/PerpsClient.d.ts +17 -4
  100. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  101. package/dist/esm/client/PerpsClient.js +30 -8
  102. package/dist/esm/client/PerpsClient.js.map +1 -1
  103. package/dist/esm/decimal/arithmetic.d.ts +84 -0
  104. package/dist/esm/decimal/arithmetic.d.ts.map +1 -0
  105. package/dist/esm/decimal/arithmetic.js +110 -0
  106. package/dist/esm/decimal/arithmetic.js.map +1 -0
  107. package/dist/esm/decimal/big.d.ts +0 -2
  108. package/dist/esm/decimal/big.d.ts.map +1 -1
  109. package/dist/esm/decimal/big.js +0 -4
  110. package/dist/esm/decimal/big.js.map +1 -1
  111. package/dist/esm/decimal/compare.d.ts +39 -5
  112. package/dist/esm/decimal/compare.d.ts.map +1 -1
  113. package/dist/esm/decimal/compare.js +45 -5
  114. package/dist/esm/decimal/compare.js.map +1 -1
  115. package/dist/esm/decimal/convert.d.ts +62 -26
  116. package/dist/esm/decimal/convert.d.ts.map +1 -1
  117. package/dist/esm/decimal/convert.js +76 -25
  118. package/dist/esm/decimal/convert.js.map +1 -1
  119. package/dist/esm/decimal/decimalStringToBig.d.ts +26 -0
  120. package/dist/esm/decimal/decimalStringToBig.d.ts.map +1 -0
  121. package/dist/esm/decimal/decimalStringToBig.js +40 -0
  122. package/dist/esm/decimal/decimalStringToBig.js.map +1 -0
  123. package/dist/esm/decimal/format.d.ts +4 -1
  124. package/dist/esm/decimal/format.d.ts.map +1 -1
  125. package/dist/esm/decimal/format.js +71 -70
  126. package/dist/esm/decimal/format.js.map +1 -1
  127. package/dist/esm/decimal/parse.d.ts +22 -13
  128. package/dist/esm/decimal/parse.d.ts.map +1 -1
  129. package/dist/esm/decimal/parse.js +56 -46
  130. package/dist/esm/decimal/parse.js.map +1 -1
  131. package/dist/esm/index.d.ts +13 -11
  132. package/dist/esm/index.d.ts.map +1 -1
  133. package/dist/esm/index.js +9 -7
  134. package/dist/esm/index.js.map +1 -1
  135. package/dist/esm/math/fills.d.ts +6 -3
  136. package/dist/esm/math/fills.d.ts.map +1 -1
  137. package/dist/esm/math/fills.js +31 -16
  138. package/dist/esm/math/fills.js.map +1 -1
  139. package/dist/esm/math/order.d.ts +85 -65
  140. package/dist/esm/math/order.d.ts.map +1 -1
  141. package/dist/esm/math/order.js +158 -166
  142. package/dist/esm/math/order.js.map +1 -1
  143. package/dist/esm/math/position.d.ts +155 -98
  144. package/dist/esm/math/position.d.ts.map +1 -1
  145. package/dist/esm/math/position.js +157 -155
  146. package/dist/esm/math/position.js.map +1 -1
  147. package/dist/esm/services/getGasRecommendation.js +1 -1
  148. package/dist/esm/services/getGasRecommendation.js.map +1 -1
  149. package/dist/esm/services/getQuote.d.ts +2 -2
  150. package/dist/esm/services/getQuote.js +1 -1
  151. package/dist/esm/services/resolveSubscribeQuote.d.ts +1 -1
  152. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -1
  153. package/dist/esm/services/resolveSubscribeQuote.js +4 -3
  154. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -1
  155. package/dist/esm/transport/request.d.ts +5 -0
  156. package/dist/esm/transport/request.d.ts.map +1 -1
  157. package/dist/esm/transport/request.js +2 -2
  158. package/dist/esm/transport/request.js.map +1 -1
  159. package/dist/esm/types/api.d.ts +9 -0
  160. package/dist/esm/types/api.d.ts.map +1 -1
  161. package/dist/esm/types/provider.d.ts +26 -13
  162. package/dist/esm/types/provider.d.ts.map +1 -1
  163. package/dist/esm/types/withdrawal.d.ts +32 -7
  164. package/dist/esm/types/withdrawal.d.ts.map +1 -1
  165. package/dist/esm/utils/createSafeFunction.d.ts +9 -0
  166. package/dist/esm/utils/createSafeFunction.d.ts.map +1 -0
  167. package/dist/esm/utils/createSafeFunction.js +19 -0
  168. package/dist/esm/utils/createSafeFunction.js.map +1 -0
  169. package/dist/esm/utils/timestampToIsoString.d.ts +15 -0
  170. package/dist/esm/utils/timestampToIsoString.d.ts.map +1 -0
  171. package/dist/esm/utils/timestampToIsoString.js +24 -0
  172. package/dist/esm/utils/timestampToIsoString.js.map +1 -0
  173. package/dist/esm/utils/warnOnce.d.ts +16 -0
  174. package/dist/esm/utils/warnOnce.d.ts.map +1 -1
  175. package/dist/esm/utils/warnOnce.js +24 -0
  176. package/dist/esm/utils/warnOnce.js.map +1 -1
  177. package/dist/esm/version.d.ts +1 -1
  178. package/dist/esm/version.js +1 -1
  179. package/dist/esm/websocket/PerpsWsClient.d.ts +7 -0
  180. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
  181. package/dist/esm/websocket/PerpsWsClient.js +20 -2
  182. package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
  183. package/dist/esm/websocket/wsLog.d.ts +12 -0
  184. package/dist/esm/websocket/wsLog.d.ts.map +1 -1
  185. package/dist/esm/websocket/wsLog.js +18 -0
  186. package/dist/esm/websocket/wsLog.js.map +1 -1
  187. package/dist/esm/wire/orderAmounts.d.ts.map +1 -1
  188. package/dist/esm/wire/orderAmounts.js +2 -2
  189. package/dist/esm/wire/orderAmounts.js.map +1 -1
  190. package/dist/esm/wire/refuel.d.ts +24 -14
  191. package/dist/esm/wire/refuel.d.ts.map +1 -1
  192. package/dist/esm/wire/refuel.js +38 -17
  193. package/dist/esm/wire/refuel.js.map +1 -1
  194. package/dist/esm/wire/transferable.js +3 -3
  195. package/dist/esm/wire/transferable.js.map +1 -1
  196. package/dist/esm/wire/withdraw.d.ts.map +1 -1
  197. package/dist/esm/wire/withdraw.js +3 -3
  198. package/dist/esm/wire/withdraw.js.map +1 -1
  199. package/dist/types/client/PerpsClient.d.ts +17 -4
  200. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  201. package/dist/types/decimal/arithmetic.d.ts +84 -0
  202. package/dist/types/decimal/arithmetic.d.ts.map +1 -0
  203. package/dist/types/decimal/big.d.ts +0 -2
  204. package/dist/types/decimal/big.d.ts.map +1 -1
  205. package/dist/types/decimal/compare.d.ts +39 -5
  206. package/dist/types/decimal/compare.d.ts.map +1 -1
  207. package/dist/types/decimal/convert.d.ts +62 -26
  208. package/dist/types/decimal/convert.d.ts.map +1 -1
  209. package/dist/types/decimal/decimalStringToBig.d.ts +26 -0
  210. package/dist/types/decimal/decimalStringToBig.d.ts.map +1 -0
  211. package/dist/types/decimal/format.d.ts +4 -1
  212. package/dist/types/decimal/format.d.ts.map +1 -1
  213. package/dist/types/decimal/parse.d.ts +22 -13
  214. package/dist/types/decimal/parse.d.ts.map +1 -1
  215. package/dist/types/index.d.ts +13 -11
  216. package/dist/types/index.d.ts.map +1 -1
  217. package/dist/types/math/fills.d.ts +6 -3
  218. package/dist/types/math/fills.d.ts.map +1 -1
  219. package/dist/types/math/order.d.ts +85 -65
  220. package/dist/types/math/order.d.ts.map +1 -1
  221. package/dist/types/math/position.d.ts +155 -98
  222. package/dist/types/math/position.d.ts.map +1 -1
  223. package/dist/types/services/getQuote.d.ts +2 -2
  224. package/dist/types/services/resolveSubscribeQuote.d.ts +1 -1
  225. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -1
  226. package/dist/types/transport/request.d.ts +5 -0
  227. package/dist/types/transport/request.d.ts.map +1 -1
  228. package/dist/types/types/api.d.ts +9 -0
  229. package/dist/types/types/api.d.ts.map +1 -1
  230. package/dist/types/types/provider.d.ts +26 -13
  231. package/dist/types/types/provider.d.ts.map +1 -1
  232. package/dist/types/types/withdrawal.d.ts +32 -7
  233. package/dist/types/types/withdrawal.d.ts.map +1 -1
  234. package/dist/types/utils/createSafeFunction.d.ts +9 -0
  235. package/dist/types/utils/createSafeFunction.d.ts.map +1 -0
  236. package/dist/types/utils/timestampToIsoString.d.ts +15 -0
  237. package/dist/types/utils/timestampToIsoString.d.ts.map +1 -0
  238. package/dist/types/utils/warnOnce.d.ts +16 -0
  239. package/dist/types/utils/warnOnce.d.ts.map +1 -1
  240. package/dist/types/version.d.ts +1 -1
  241. package/dist/types/websocket/PerpsWsClient.d.ts +7 -0
  242. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
  243. package/dist/types/websocket/wsLog.d.ts +12 -0
  244. package/dist/types/websocket/wsLog.d.ts.map +1 -1
  245. package/dist/types/wire/orderAmounts.d.ts.map +1 -1
  246. package/dist/types/wire/refuel.d.ts +24 -14
  247. package/dist/types/wire/refuel.d.ts.map +1 -1
  248. package/dist/types/wire/withdraw.d.ts.map +1 -1
  249. package/package.json +2 -2
  250. package/src/client/PerpsClient.ts +48 -10
  251. package/src/decimal/arithmetic.ts +144 -0
  252. package/src/decimal/big.ts +0 -5
  253. package/src/decimal/compare.ts +60 -10
  254. package/src/decimal/convert.ts +123 -44
  255. package/src/decimal/decimalStringToBig.ts +47 -0
  256. package/src/decimal/format.ts +81 -72
  257. package/src/decimal/parse.ts +71 -61
  258. package/src/index.ts +73 -10
  259. package/src/math/fills.ts +32 -17
  260. package/src/math/order.ts +261 -216
  261. package/src/math/position.ts +277 -194
  262. package/src/services/getGasRecommendation.ts +1 -1
  263. package/src/services/getQuote.ts +2 -2
  264. package/src/services/resolveSubscribeQuote.ts +4 -3
  265. package/src/transport/request.ts +7 -2
  266. package/src/types/api.ts +10 -0
  267. package/src/types/provider.ts +35 -13
  268. package/src/types/withdrawal.ts +35 -8
  269. package/src/utils/createSafeFunction.ts +20 -0
  270. package/src/utils/timestampToIsoString.ts +31 -0
  271. package/src/utils/warnOnce.ts +44 -0
  272. package/src/version.ts +1 -1
  273. package/src/websocket/PerpsWsClient.ts +25 -2
  274. package/src/websocket/wsLog.ts +31 -0
  275. package/src/wire/orderAmounts.ts +3 -2
  276. package/src/wire/refuel.ts +56 -20
  277. package/src/wire/transferable.ts +3 -3
  278. package/src/wire/withdraw.ts +3 -5
  279. package/dist/cjs/decimal/requireDecimal.d.ts +0 -4
  280. package/dist/cjs/decimal/requireDecimal.d.ts.map +0 -1
  281. package/dist/cjs/decimal/requireDecimal.js +0 -12
  282. package/dist/cjs/decimal/requireDecimal.js.map +0 -1
  283. package/dist/esm/decimal/requireDecimal.d.ts +0 -5
  284. package/dist/esm/decimal/requireDecimal.d.ts.map +0 -1
  285. package/dist/esm/decimal/requireDecimal.js +0 -7
  286. package/dist/esm/decimal/requireDecimal.js.map +0 -1
  287. package/dist/types/decimal/requireDecimal.d.ts +0 -5
  288. package/dist/types/decimal/requireDecimal.d.ts.map +0 -1
  289. package/src/decimal/requireDecimal.ts +0 -8
@@ -1,189 +1,184 @@
1
1
  /**
2
- * Display-tier order formulas. Every function takes and gives `number`;
3
- * exact decimal arithmetic happens internally with `DivBig`.
2
+ * Display-tier order formulas. Every function takes and gives decimal
3
+ * strings; arithmetic is exact Big.js, with division to 40 decimal places.
4
+ * Each formula throws `ValidationError` on an input that is not a decimal
5
+ * string and has a `safe*` pair that gives `undefined` in place of the throw.
4
6
  */
5
7
  import { OrderSide, OrderStatus, PerpsErrorCode, PositionSide, } from '@lifi/perps-types';
6
- import { areFinite, DivBig } from '../decimal/big.js';
7
- import { numberToDecimalString } from '../decimal/convert.js';
8
+ import { DivBig } from '../decimal/big.js';
9
+ import { bigToDecimalString, decimalStringToBig, decimalStringToDivBig, } from '../decimal/decimalStringToBig.js';
8
10
  import { PerpsError } from '../errors/PerpsError.js';
11
+ import { createSafeFunction } from '../utils/createSafeFunction.js';
9
12
  import { isActiveOrderStatus, isRegularOrder, isTriggerOrder, } from '../utils/orderClassification.js';
10
13
  import { calculateRealizedPnl } from './position.js';
11
14
  /**
12
- * Calculate position size in asset units from margin.
15
+ * Position size in asset units from margin: `marginUsd × leverage ÷ price`.
13
16
  *
14
- * @param marginUsd - Margin amount in USD
15
- * @param leverage - Position leverage
16
- * @param price - Current asset price
17
- * @returns Position size in asset units
18
17
  * @example
19
18
  * ```ts
20
- * calculateSize(100, 10, 2000) // 0.5 (ETH at $2000)
19
+ * calculateSize('100', '10', '2000') // '0.5' (ETH at $2000)
21
20
  * ```
21
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string
22
+ * or `price` is zero.
22
23
  * @public
23
24
  */
24
25
  export function calculateSize(marginUsd, leverage, price) {
25
- if (price === 0) {
26
- return (marginUsd * leverage) / price;
26
+ const notional = decimalStringToDivBig(marginUsd).times(decimalStringToBig(leverage));
27
+ const priceBig = decimalStringToBig(price);
28
+ if (priceBig.eq(0)) {
29
+ throw new PerpsError(PerpsErrorCode.ValidationError, 'Price must not be zero.');
27
30
  }
28
- if (!areFinite(marginUsd, leverage, price)) {
29
- return Number.NaN;
30
- }
31
- return new DivBig(marginUsd).times(leverage).div(price).toNumber();
31
+ return bigToDecimalString(notional.div(priceBig));
32
32
  }
33
+ /** @public */
34
+ export const safeCalculateSize = createSafeFunction('calculateSize', calculateSize);
33
35
  /**
34
- * Estimate trading fees.
36
+ * Estimated trading fee in USD: `sizeUsd × feeRate`.
35
37
  *
36
- * @param sizeUsd - Position size in USD (notional value)
37
- * @param feeRate - Fee rate as decimal (e.g., 0.00035 for 0.035%)
38
- * @returns Estimated fee in USD
38
+ * @param feeRate - Fee rate as a fraction (`'0.00035'` for 0.035%).
39
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
39
40
  * @public
40
41
  */
41
42
  export function estimateFees(sizeUsd, feeRate) {
42
- if (!areFinite(sizeUsd, feeRate)) {
43
- return Number.NaN;
44
- }
45
- return new DivBig(sizeUsd).times(feeRate).toNumber();
43
+ return bigToDecimalString(decimalStringToBig(sizeUsd).times(decimalStringToBig(feeRate)));
46
44
  }
45
+ /** @public */
46
+ export const safeEstimateFees = createSafeFunction('estimateFees', estimateFees);
47
47
  /**
48
- * Apply slippage to a price for order execution.
48
+ * Apply slippage to an order-entry price with exact decimal math: a buy
49
+ * multiplies by `1 + slippagePercent / 100`, a sell divides by it. The result
50
+ * is not rounded; snap it to the market tick before it goes to a venue.
49
51
  *
50
- * @param price - Base price
51
- * @param slippagePercent - Slippage tolerance as percentage (e.g., 0.5 for 0.5%)
52
- * @param isBuy - True if buying (price goes up), false if selling (price goes down)
53
- * @returns Price adjusted for slippage
52
+ * @param slippagePercent - Slippage tolerance as a percentage (`'0.5'` is 0.5%).
53
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal
54
+ * string, or `slippagePercent` is -100 or less.
54
55
  * @public
55
56
  */
56
- export function applySlippage(price, slippagePercent, isBuy) {
57
- if (!areFinite(price, slippagePercent)) {
58
- return Number.NaN;
59
- }
60
- const multiplier = new DivBig(slippagePercent).div(100).plus(1);
61
- if (isBuy) {
62
- return new DivBig(price).times(multiplier).toNumber();
57
+ export function applySlippageToPrice(price, slippagePercent, isBuy) {
58
+ const base = decimalStringToDivBig(price);
59
+ const slippage = decimalStringToBig(slippagePercent);
60
+ if (slippage.lte(-100)) {
61
+ throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid \`slippagePercent\`: ${slippagePercent}.`);
63
62
  }
64
- if (multiplier.eq(0)) {
65
- return price / multiplier.toNumber();
66
- }
67
- return new DivBig(price).div(multiplier).toNumber();
63
+ const multiplier = new DivBig(slippage).div(100).plus(1);
64
+ return bigToDecimalString(isBuy ? base.times(multiplier) : base.div(multiplier));
68
65
  }
66
+ /** @public */
67
+ export const safeApplySlippageToPrice = createSafeFunction('applySlippageToPrice', applySlippageToPrice);
69
68
  /**
70
- * Calculate expected gain/loss for a TP or SL trigger price.
71
- * Returns signed values — positive means profit, negative means loss.
69
+ * Expected gain or loss for a TP or SL trigger price. Positive is a profit,
70
+ * negative a loss.
72
71
  *
73
- * @param triggerPrice - The TP or SL target price
74
- * @param entryPrice - Position entry / current market price
75
- * @param leverage - Position leverage multiplier
76
- * @param isLong - True for long positions, false for short
77
- * @param margin - Margin amount in USD
72
+ * @param entryPrice - Position entry or current market price.
73
+ * @param margin - Margin amount in USD.
74
+ * @returns The expected PnL, or `null` when `triggerPrice`, `entryPrice` or
75
+ * `margin` is zero.
76
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
78
77
  * @public
79
78
  */
80
79
  export function calculateExpectedPnl(triggerPrice, entryPrice, leverage, isLong, margin) {
81
- if (!triggerPrice || entryPrice === 0 || margin === 0) {
80
+ const trigger = decimalStringToDivBig(triggerPrice);
81
+ const entry = decimalStringToBig(entryPrice);
82
+ const leverageBig = decimalStringToBig(leverage);
83
+ const marginBig = decimalStringToBig(margin);
84
+ if (trigger.eq(0) || entry.eq(0) || marginBig.eq(0)) {
82
85
  return null;
83
86
  }
84
- if (!areFinite(triggerPrice, entryPrice, leverage, margin)) {
85
- return { amount: Number.NaN, percent: Number.NaN };
86
- }
87
87
  const priceDiff = isLong
88
- ? new DivBig(triggerPrice).minus(entryPrice)
89
- : new DivBig(entryPrice).minus(triggerPrice);
90
- const percent = priceDiff.div(entryPrice).times(leverage).times(100);
91
- const amount = percent.times(margin).div(100);
92
- return { amount: amount.toNumber(), percent: percent.toNumber() };
88
+ ? trigger.minus(entry)
89
+ : trigger.times(-1).plus(entry);
90
+ const percent = priceDiff.div(entry).times(leverageBig).times(100);
91
+ const amount = percent.times(marginBig).div(100);
92
+ return {
93
+ amount: bigToDecimalString(amount),
94
+ percent: bigToDecimalString(percent),
95
+ };
93
96
  }
97
+ /** @public */
98
+ export const safeCalculateExpectedPnl = createSafeFunction('calculateExpectedPnl', calculateExpectedPnl);
94
99
  /**
95
- * Calculate the trigger price that realises a percentage gain/loss.
100
+ * Trigger price that realises a percentage gain or loss. A zero `entryPrice`
101
+ * or `leverage` gives `'0'`.
96
102
  *
97
- * @param percent - Target gain/loss percentage (positive = profitable direction)
98
- * @param entryPrice - Position entry price
99
- * @param leverage - Position leverage multiplier
100
- * @param isLong - True for long positions, false for short
103
+ * @param percent - Target gain or loss percentage (positive = profitable
104
+ * direction).
105
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
101
106
  * @public
102
107
  */
103
108
  export function calculateTriggerPrice(percent, entryPrice, leverage, isLong) {
104
- if (entryPrice === 0 || leverage === 0) {
105
- return 0;
109
+ const percentBig = decimalStringToDivBig(percent);
110
+ const entry = decimalStringToBig(entryPrice);
111
+ const leverageBig = decimalStringToBig(leverage);
112
+ if (entry.eq(0) || leverageBig.eq(0)) {
113
+ return '0';
106
114
  }
107
- if (!areFinite(percent, entryPrice, leverage)) {
108
- return Number.NaN;
109
- }
110
- const priceDelta = new DivBig(percent)
111
- .times(entryPrice)
112
- .div(new DivBig(leverage).times(100));
113
- const entry = new DivBig(entryPrice);
114
- return (isLong ? entry.plus(priceDelta) : entry.minus(priceDelta)).toNumber();
115
+ const priceDelta = percentBig.times(entry).div(leverageBig.times(100));
116
+ return bigToDecimalString(isLong ? entry.plus(priceDelta) : entry.minus(priceDelta));
115
117
  }
118
+ /** @public */
119
+ export const safeCalculateTriggerPrice = createSafeFunction('calculateTriggerPrice', calculateTriggerPrice);
116
120
  /**
117
- * Calculate the percentage gain/loss a trigger price realises.
121
+ * Percentage gain or loss that a trigger price realises. A zero `entryPrice`
122
+ * or `leverage` gives `'0'`.
118
123
  *
119
- * @param price - Target price
120
- * @param entryPrice - Position entry price
121
- * @param leverage - Position leverage multiplier
122
- * @param isLong - True for long positions, false for short
124
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
123
125
  * @public
124
126
  */
125
127
  export function calculateTriggerPercent(price, entryPrice, leverage, isLong) {
126
- if (entryPrice === 0 || leverage === 0) {
127
- return 0;
128
- }
129
- if (!areFinite(price, entryPrice, leverage)) {
130
- return Number.NaN;
128
+ const priceBig = decimalStringToDivBig(price);
129
+ const entry = decimalStringToBig(entryPrice);
130
+ const leverageBig = decimalStringToBig(leverage);
131
+ if (entry.eq(0) || leverageBig.eq(0)) {
132
+ return '0';
131
133
  }
132
134
  const priceDiff = isLong
133
- ? new DivBig(price).minus(entryPrice)
134
- : new DivBig(entryPrice).minus(price);
135
- return priceDiff.div(entryPrice).times(leverage).times(100).toNumber();
135
+ ? priceBig.minus(entry)
136
+ : priceBig.times(-1).plus(entry);
137
+ return bigToDecimalString(priceDiff.div(entry).times(leverageBig).times(100));
136
138
  }
139
+ /** @public */
140
+ export const safeCalculateTriggerPercent = createSafeFunction('calculateTriggerPercent', calculateTriggerPercent);
137
141
  /**
138
- * Calculate realized PnL as a percentage of position value at close.
142
+ * Realized PnL as a percentage of the position value at close:
143
+ * `realizedPnl ÷ (|size| × price) × 100`. A zero position value gives `'0'`.
139
144
  *
140
- * @param realizedPnl - The realized profit/loss in USD
141
- * @param size - Position size in asset units at close
142
- * @param price - Price at close
143
- * @returns PnL as a percentage of position value
145
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
144
146
  * @public
145
147
  */
146
148
  export function calculateRealizedPnlPercent(realizedPnl, size, price) {
147
- if (!areFinite(realizedPnl, size, price)) {
148
- return Number.NaN;
149
- }
150
- const positionValue = new DivBig(size).abs().times(price);
149
+ const pnl = decimalStringToDivBig(realizedPnl);
150
+ const positionValue = decimalStringToBig(size)
151
+ .abs()
152
+ .times(decimalStringToBig(price));
151
153
  if (positionValue.eq(0)) {
152
- return 0;
154
+ return '0';
153
155
  }
154
- return new DivBig(realizedPnl).div(positionValue).times(100).toNumber();
156
+ return bigToDecimalString(pnl.div(positionValue).times(100));
155
157
  }
158
+ /** @public */
159
+ export const safeCalculateRealizedPnlPercent = createSafeFunction('calculateRealizedPnlPercent', calculateRealizedPnlPercent);
156
160
  /**
157
161
  * Walk one side of an orderbook to fill `sizeUsd` notional, accumulating base
158
162
  * size and notional level-by-level to derive the VWAP fill. Levels are consumed
159
163
  * in array order — the caller passes asks for a buy and bids for a sell, each
160
164
  * already ordered best-price-first. When the book cannot absorb the full
161
165
  * notional, the walk stops at the last level and flags `insufficientLiquidity`,
162
- * returning the best obtainable fill. A non-finite `sizeUsd` gives NaN fill
163
- * fields with `insufficientLiquidity` set.
166
+ * returning the best obtainable fill.
164
167
  *
165
- * @throws {PerpsError} `ValidationError` when a level's `price` or `size`
166
- * does not parse to a finite number.
168
+ * @throws {PerpsError} `ValidationError` when `sizeUsd` or a level's `price`
169
+ * or `size` is not a decimal string.
167
170
  * @public
168
171
  */
169
172
  export function walkOrderbook(levels, sizeUsd) {
170
- if (!Number.isFinite(sizeUsd)) {
171
- return {
172
- baseSize: Number.NaN,
173
- filledNotional: Number.NaN,
174
- vwap: Number.NaN,
175
- insufficientLiquidity: true,
176
- };
177
- }
178
- let remaining = new DivBig(sizeUsd);
173
+ let remaining = decimalStringToDivBig(sizeUsd);
179
174
  let baseSize = new DivBig(0);
180
175
  let filledNotional = new DivBig(0);
181
176
  for (const level of levels) {
182
177
  if (remaining.lte(0)) {
183
178
  break;
184
179
  }
185
- const { price, size } = parseLevel(level);
186
- const levelNotional = size.times(price);
180
+ const price = decimalStringToDivBig(level.price);
181
+ const levelNotional = decimalStringToBig(level.size).times(price);
187
182
  const take = remaining.lt(levelNotional) ? remaining : levelNotional;
188
183
  if (take.eq(0)) {
189
184
  continue;
@@ -193,20 +188,16 @@ export function walkOrderbook(levels, sizeUsd) {
193
188
  remaining = remaining.minus(take);
194
189
  }
195
190
  return {
196
- baseSize: baseSize.toNumber(),
197
- filledNotional: filledNotional.toNumber(),
198
- vwap: baseSize.eq(0) ? 0 : filledNotional.div(baseSize).toNumber(),
191
+ baseSize: bigToDecimalString(baseSize),
192
+ filledNotional: bigToDecimalString(filledNotional),
193
+ vwap: baseSize.eq(0)
194
+ ? '0'
195
+ : bigToDecimalString(filledNotional.div(baseSize)),
199
196
  insufficientLiquidity: remaining.gt(0),
200
197
  };
201
198
  }
202
- function parseLevel(level) {
203
- try {
204
- return { price: new DivBig(level.price), size: new DivBig(level.size) };
205
- }
206
- catch {
207
- throw new PerpsError(PerpsErrorCode.ValidationError, `Malformed orderbook level: price='${level.price}', size='${level.size}'`);
208
- }
209
- }
199
+ /** @public */
200
+ export const safeWalkOrderbook = createSafeFunction('walkOrderbook', walkOrderbook);
210
201
  /**
211
202
  * Build a {@link Quote} from a resolved market, its live {@link MarketContext},
212
203
  * and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
@@ -214,39 +205,40 @@ function parseLevel(level) {
214
205
  * versus mark, applies the base taker fee on the filled notional, and carries
215
206
  * the market's `funding` (`null` for spot, which has none).
216
207
  *
217
- * @throws {PerpsError} `ValidationError` when a book level does not parse to
218
- * a finite number — see {@link walkOrderbook} — or when a quoted figure is
219
- * not finite (a non-finite `sizeUsd`, mark price or taker fee).
208
+ * @throws {PerpsError} `ValidationError` when `sizeUsd`, the mark price, the
209
+ * taker fee or a book level is not a decimal string.
220
210
  * @public
221
211
  */
222
212
  export function buildQuote(input) {
223
213
  const { market, price, side, sizeUsd, feeTier } = input;
224
- const markPrice = Number.parseFloat(price.markPrice);
214
+ const markPrice = decimalStringToDivBig(price.markPrice);
225
215
  const levels = side === 'buy' ? input.asks : input.bids;
226
216
  const walk = walkOrderbook(levels, sizeUsd);
227
- const priceImpactBps = markPrice === 0 || walk.vwap === 0
228
- ? 0
229
- : Math.abs((walk.vwap - markPrice) / markPrice) * 10_000;
230
- const feeUsd = estimateFees(walk.filledNotional, Number.parseFloat(feeTier.taker));
217
+ const vwap = decimalStringToBig(walk.vwap);
218
+ const priceImpactBps = markPrice.eq(0) || vwap.eq(0)
219
+ ? '0'
220
+ : bigToDecimalString(vwap.minus(markPrice).div(markPrice).abs().times(10_000));
231
221
  return {
232
222
  provider: input.provider,
233
223
  symbol: input.symbol,
234
224
  marketId: market.id,
235
225
  type: input.type,
236
226
  side,
237
- sizeUsd: numberToDecimalString(sizeUsd),
238
- baseSize: numberToDecimalString(walk.baseSize),
227
+ sizeUsd: bigToDecimalString(decimalStringToBig(sizeUsd)),
228
+ baseSize: walk.baseSize,
239
229
  markPrice: price.markPrice,
240
- expectedFillPrice: numberToDecimalString(walk.vwap),
241
- priceImpactBps: numberToDecimalString(priceImpactBps),
230
+ expectedFillPrice: walk.vwap,
231
+ priceImpactBps,
242
232
  feeTier,
243
233
  isDefaultFeeTier: true,
244
- feeUsd: numberToDecimalString(feeUsd),
234
+ feeUsd: estimateFees(walk.filledNotional, feeTier.taker),
245
235
  funding: price.funding ?? null,
246
236
  insufficientLiquidity: walk.insufficientLiquidity,
247
237
  timestamp: input.timestamp,
248
238
  };
249
239
  }
240
+ /** @public */
241
+ export const safeBuildQuote = createSafeFunction('buildQuote', buildQuote);
250
242
  /**
251
243
  * Pick the matching open position for an order's market, if any.
252
244
  *
@@ -265,14 +257,20 @@ export function findMatchingPosition(marketId, positions) {
265
257
  * position can only close what's open.
266
258
  *
267
259
  * Inputs are non-negative magnitudes.
260
+ *
261
+ * @throws {PerpsError} `ValidationError` when an input is not a decimal string.
268
262
  * @public
269
263
  */
270
264
  export function resolveCloseSize(orderSize, positionSize) {
271
- if (orderSize === 0) {
272
- return positionSize;
265
+ const order = decimalStringToBig(orderSize);
266
+ const position = decimalStringToBig(positionSize);
267
+ if (order.eq(0)) {
268
+ return bigToDecimalString(position);
273
269
  }
274
- return Math.min(orderSize, positionSize);
270
+ return bigToDecimalString(order.lt(position) ? order : position);
275
271
  }
272
+ /** @public */
273
+ export const safeResolveCloseSize = createSafeFunction('resolveCloseSize', resolveCloseSize);
276
274
  /**
277
275
  * Expected rPnL for a resting limit order against a matching position.
278
276
  *
@@ -292,34 +290,31 @@ function regularOrderRealizedPnl(order, position) {
292
290
  if (!reducesPosition) {
293
291
  return null;
294
292
  }
295
- const limitPrice = Number.parseFloat(order.price ?? '');
296
- const entryPrice = Number.parseFloat(position.entryPrice);
297
- const orderSize = Math.abs(Number.parseFloat(order.remainingSize));
298
- const positionSize = Math.abs(Number.parseFloat(position.size));
299
- if (!Number.isFinite(limitPrice) ||
300
- !Number.isFinite(entryPrice) ||
301
- !Number.isFinite(orderSize) ||
302
- !Number.isFinite(positionSize) ||
303
- positionSize <= 0) {
293
+ if (order.price === undefined) {
294
+ return null;
295
+ }
296
+ const orderSize = decimalStringToBig(order.remainingSize).abs();
297
+ const positionSize = decimalStringToBig(position.size).abs();
298
+ if (positionSize.lte(0)) {
304
299
  return null;
305
300
  }
306
301
  // `resolveCloseSize` reads a zero size as "close the whole position", a
307
302
  // convention that belongs to an order's submitted size. `remainingSize` is
308
303
  // the unfilled quantity, so zero means nothing is left to fill.
309
- if (orderSize === 0) {
304
+ if (orderSize.eq(0)) {
310
305
  return null;
311
306
  }
312
- const closeSize = resolveCloseSize(orderSize, positionSize);
313
307
  return calculateRealizedPnl({
314
- entryPrice,
315
- closePrice: limitPrice,
316
- closeSize,
308
+ entryPrice: position.entryPrice,
309
+ closePrice: order.price,
310
+ closeSize: resolveCloseSize(bigToDecimalString(orderSize), bigToDecimalString(positionSize)),
317
311
  isLong,
318
312
  });
319
313
  }
320
314
  /** Project the unfilled closing quantity of an active trigger at its trigger price. */
321
315
  function triggerOrderRealizedPnl(order, position) {
322
316
  if (!position ||
317
+ order.triggerPrice === undefined ||
323
318
  !isActiveOrderStatus(order.status) ||
324
319
  order.status === OrderStatus.PENDING) {
325
320
  return null;
@@ -329,26 +324,19 @@ function triggerOrderRealizedPnl(order, position) {
329
324
  (!isLong && order.side !== OrderSide.BUY)) {
330
325
  return null;
331
326
  }
332
- const triggerPrice = Number.parseFloat(order.triggerPrice);
333
- const entryPrice = Number.parseFloat(position.entryPrice);
334
- const orderSize = Math.abs(Number.parseFloat(order.remainingSize));
335
- const positionSize = Math.abs(Number.parseFloat(position.size));
336
- if (!Number.isFinite(triggerPrice) ||
337
- !Number.isFinite(entryPrice) ||
338
- !Number.isFinite(orderSize) ||
339
- !Number.isFinite(positionSize) ||
340
- positionSize <= 0) {
327
+ const orderSize = decimalStringToBig(order.remainingSize).abs();
328
+ const positionSize = decimalStringToBig(position.size).abs();
329
+ if (positionSize.lte(0)) {
341
330
  return null;
342
331
  }
343
- if (orderSize === 0 &&
344
- (Number.parseFloat(order.originalSize) !== 0 || !order.reduceOnly)) {
332
+ if (orderSize.eq(0) &&
333
+ (!decimalStringToBig(order.originalSize).eq(0) || !order.reduceOnly)) {
345
334
  return null;
346
335
  }
347
- const closeSize = resolveCloseSize(orderSize, positionSize);
348
336
  return calculateRealizedPnl({
349
- entryPrice,
350
- closePrice: triggerPrice,
351
- closeSize,
337
+ entryPrice: position.entryPrice,
338
+ closePrice: order.triggerPrice,
339
+ closeSize: resolveCloseSize(bigToDecimalString(orderSize), bigToDecimalString(positionSize)),
352
340
  isLong,
353
341
  });
354
342
  }
@@ -360,6 +348,8 @@ function triggerOrderRealizedPnl(order, position) {
360
348
  *
361
349
  * @returns Realised PnL if the order would reduce the position, otherwise
362
350
  * `null`.
351
+ * @throws {PerpsError} `ValidationError` when a price or size on the order or
352
+ * the position is not a decimal string.
363
353
  * @public
364
354
  */
365
355
  export function estimateRealizedPnl(order, position) {
@@ -371,4 +361,6 @@ export function estimateRealizedPnl(order, position) {
371
361
  }
372
362
  return null;
373
363
  }
364
+ /** @public */
365
+ export const safeEstimateRealizedPnl = createSafeFunction('estimateRealizedPnl', estimateRealizedPnl);
374
366
  //# sourceMappingURL=order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"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"}