@velocity-exchange/sdk 0.2.5 → 0.4.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 (1057) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +3 -3
  3. package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +18 -0
  4. package/lib/browser/accounts/basicUserAccountSubscriber.js +18 -0
  5. package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +18 -0
  6. package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +18 -0
  7. package/lib/browser/accounts/bulkAccountLoader.d.ts +52 -0
  8. package/lib/browser/accounts/bulkAccountLoader.js +51 -0
  9. package/lib/browser/accounts/bulkUserStatsSubscription.d.ts +9 -2
  10. package/lib/browser/accounts/bulkUserStatsSubscription.js +9 -2
  11. package/lib/browser/accounts/bulkUserSubscription.d.ts +8 -2
  12. package/lib/browser/accounts/bulkUserSubscription.js +8 -2
  13. package/lib/browser/accounts/customizedCadenceBulkAccountLoader.d.ts +37 -0
  14. package/lib/browser/accounts/customizedCadenceBulkAccountLoader.js +37 -0
  15. package/lib/browser/accounts/fetch.d.ts +59 -2
  16. package/lib/browser/accounts/fetch.js +57 -2
  17. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +30 -0
  18. package/lib/browser/accounts/grpcAccountSubscriber.js +30 -0
  19. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +16 -0
  20. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.js +16 -0
  21. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +60 -1
  22. package/lib/browser/accounts/grpcMultiAccountSubscriber.js +118 -37
  23. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +32 -0
  24. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +40 -12
  25. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +33 -0
  26. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +33 -0
  27. package/lib/browser/accounts/grpcUserAccountSubscriber.d.ts +15 -0
  28. package/lib/browser/accounts/grpcUserAccountSubscriber.js +15 -0
  29. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.d.ts +15 -0
  30. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.js +15 -0
  31. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +41 -0
  32. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +41 -0
  33. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +116 -0
  34. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +152 -1
  35. package/lib/browser/accounts/laserProgramAccountSubscriber.d.ts +34 -0
  36. package/lib/browser/accounts/laserProgramAccountSubscriber.js +34 -0
  37. package/lib/browser/accounts/oneShotUserAccountSubscriber.d.ts +19 -0
  38. package/lib/browser/accounts/oneShotUserAccountSubscriber.js +19 -0
  39. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.d.ts +19 -0
  40. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +19 -0
  41. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +31 -0
  42. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +31 -0
  43. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +19 -0
  44. package/lib/browser/accounts/pollingOracleAccountSubscriber.js +21 -2
  45. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +22 -0
  46. package/lib/browser/accounts/pollingTokenAccountSubscriber.js +22 -0
  47. package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +32 -0
  48. package/lib/browser/accounts/pollingUserAccountSubscriber.js +32 -0
  49. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +22 -0
  50. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +22 -0
  51. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +83 -0
  52. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +84 -1
  53. package/lib/browser/accounts/testBulkAccountLoader.d.ts +8 -0
  54. package/lib/browser/accounts/testBulkAccountLoader.js +8 -0
  55. package/lib/browser/accounts/types.d.ts +149 -0
  56. package/lib/browser/accounts/types.js +13 -0
  57. package/lib/browser/accounts/utils.d.ts +18 -0
  58. package/lib/browser/accounts/utils.js +32 -16
  59. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +41 -0
  60. package/lib/browser/accounts/webSocketAccountSubscriber.js +41 -0
  61. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +31 -0
  62. package/lib/browser/accounts/webSocketAccountSubscriberV2.js +31 -23
  63. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +27 -0
  64. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +27 -0
  65. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +36 -0
  66. package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +36 -0
  67. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +21 -0
  68. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +25 -0
  69. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +21 -0
  70. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +21 -0
  71. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +26 -0
  72. package/lib/browser/accounts/webSocketUserAccountSubscriber.js +26 -0
  73. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  74. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +20 -0
  75. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +121 -0
  76. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +123 -2
  77. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +96 -0
  78. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +108 -0
  79. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +28 -0
  80. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +33 -0
  81. package/lib/browser/addresses/marketAddresses.d.ts +10 -0
  82. package/lib/browser/addresses/marketAddresses.js +10 -0
  83. package/lib/browser/addresses/pda.d.ts +214 -2
  84. package/lib/browser/addresses/pda.js +217 -5
  85. package/lib/browser/adminClient.d.ts +2139 -5
  86. package/lib/browser/adminClient.js +2173 -11
  87. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +15 -0
  88. package/lib/browser/auctionSubscriber/auctionSubscriber.js +15 -0
  89. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +19 -0
  90. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +19 -0
  91. package/lib/browser/auctionSubscriber/index.d.ts +6 -0
  92. package/lib/browser/auctionSubscriber/index.js +6 -0
  93. package/lib/browser/auctionSubscriber/types.d.ts +7 -0
  94. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +33 -0
  95. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +33 -0
  96. package/lib/browser/blockhashSubscriber/index.d.ts +5 -0
  97. package/lib/browser/blockhashSubscriber/index.js +5 -0
  98. package/lib/browser/blockhashSubscriber/types.d.ts +5 -0
  99. package/lib/browser/clock/clockSubscriber.d.ts +24 -0
  100. package/lib/browser/clock/clockSubscriber.js +22 -0
  101. package/lib/browser/config.d.ts +58 -4
  102. package/lib/browser/config.js +88 -21
  103. package/lib/browser/constants/numericConstants.d.ts +67 -0
  104. package/lib/browser/constants/numericConstants.js +68 -1
  105. package/lib/browser/constants/perpMarkets.d.ts +10 -0
  106. package/lib/browser/constants/perpMarkets.js +40 -908
  107. package/lib/browser/constants/spotMarkets.d.ts +13 -0
  108. package/lib/browser/constants/spotMarkets.js +16 -742
  109. package/lib/browser/constants/txConstants.d.ts +1 -0
  110. package/lib/browser/constants/txConstants.js +1 -0
  111. package/lib/browser/core/VelocityCore.d.ts +285 -8
  112. package/lib/browser/core/VelocityCore.js +281 -8
  113. package/lib/browser/core/instructions/deposit.d.ts +22 -0
  114. package/lib/browser/core/instructions/deposit.js +22 -0
  115. package/lib/browser/core/instructions/fill.d.ts +17 -0
  116. package/lib/browser/core/instructions/fill.js +17 -0
  117. package/lib/browser/core/instructions/funding.d.ts +12 -0
  118. package/lib/browser/core/instructions/funding.js +12 -0
  119. package/lib/browser/core/instructions/liquidation.d.ts +18 -0
  120. package/lib/browser/core/instructions/liquidation.js +18 -0
  121. package/lib/browser/core/instructions/orders.d.ts +28 -0
  122. package/lib/browser/core/instructions/orders.js +28 -0
  123. package/lib/browser/core/instructions/perpOrders.d.ts +106 -0
  124. package/lib/browser/core/instructions/perpOrders.js +106 -0
  125. package/lib/browser/core/instructions/settlement.d.ts +14 -0
  126. package/lib/browser/core/instructions/settlement.js +14 -0
  127. package/lib/browser/core/instructions/trigger.d.ts +15 -0
  128. package/lib/browser/core/instructions/trigger.js +15 -0
  129. package/lib/browser/core/instructions/withdraw.d.ts +21 -0
  130. package/lib/browser/core/instructions/withdraw.js +21 -0
  131. package/lib/browser/core/remainingAccounts.d.ts +47 -3
  132. package/lib/browser/core/remainingAccounts.js +20 -0
  133. package/lib/browser/core/signedMsg.d.ts +38 -0
  134. package/lib/browser/core/signedMsg.js +33 -0
  135. package/lib/browser/decode/customCoder.d.ts +39 -3
  136. package/lib/browser/decode/customCoder.js +45 -3
  137. package/lib/browser/decode/user.d.ts +22 -0
  138. package/lib/browser/decode/user.js +22 -0
  139. package/lib/browser/dlob/DLOB.d.ts +502 -53
  140. package/lib/browser/dlob/DLOB.js +540 -98
  141. package/lib/browser/dlob/DLOBNode.d.ts +86 -4
  142. package/lib/browser/dlob/DLOBNode.js +37 -4
  143. package/lib/browser/dlob/DLOBSubscriber.d.ts +39 -12
  144. package/lib/browser/dlob/DLOBSubscriber.js +42 -12
  145. package/lib/browser/dlob/NodeList.d.ts +69 -0
  146. package/lib/browser/dlob/NodeList.js +66 -0
  147. package/lib/browser/dlob/orderBookLevels.d.ts +106 -13
  148. package/lib/browser/dlob/orderBookLevels.js +84 -14
  149. package/lib/browser/dlob/types.d.ts +15 -0
  150. package/lib/browser/events/eventList.d.ts +14 -0
  151. package/lib/browser/events/eventList.js +14 -0
  152. package/lib/browser/events/eventSubscriber.d.ts +87 -10
  153. package/lib/browser/events/eventSubscriber.js +93 -8
  154. package/lib/browser/events/eventsServerLogProvider.d.ts +22 -0
  155. package/lib/browser/events/eventsServerLogProvider.js +27 -0
  156. package/lib/browser/events/fetchLogs.d.ts +31 -0
  157. package/lib/browser/events/fetchLogs.js +46 -1
  158. package/lib/browser/events/parse.d.ts +23 -0
  159. package/lib/browser/events/parse.js +23 -0
  160. package/lib/browser/events/pollingLogProvider.d.ts +24 -0
  161. package/lib/browser/events/pollingLogProvider.js +24 -0
  162. package/lib/browser/events/sort.d.ts +11 -0
  163. package/lib/browser/events/sort.js +12 -0
  164. package/lib/browser/events/txEventCache.d.ts +13 -3
  165. package/lib/browser/events/txEventCache.js +19 -7
  166. package/lib/browser/events/types.d.ts +118 -2
  167. package/lib/browser/events/types.js +11 -0
  168. package/lib/browser/events/webSocketLogProvider.d.ts +23 -0
  169. package/lib/browser/events/webSocketLogProvider.js +28 -0
  170. package/lib/browser/factory/oracleClient.js +2 -2
  171. package/lib/browser/idl/velocity.d.ts +50 -1
  172. package/lib/browser/idl/velocity.json +50 -1
  173. package/lib/browser/keypair.d.ts +8 -0
  174. package/lib/browser/keypair.js +8 -0
  175. package/lib/browser/marginCalculation.d.ts +134 -2
  176. package/lib/browser/marginCalculation.js +121 -0
  177. package/lib/browser/math/amm.d.ts +348 -29
  178. package/lib/browser/math/amm.js +310 -32
  179. package/lib/browser/math/auction.d.ts +95 -19
  180. package/lib/browser/math/auction.js +118 -28
  181. package/lib/browser/math/bankruptcy.d.ts +46 -0
  182. package/lib/browser/math/bankruptcy.js +89 -1
  183. package/lib/browser/math/builder.d.ts +64 -8
  184. package/lib/browser/math/builder.js +71 -9
  185. package/lib/browser/math/conversion.d.ts +21 -0
  186. package/lib/browser/math/conversion.js +21 -0
  187. package/lib/browser/math/exchangeStatus.d.ts +92 -0
  188. package/lib/browser/math/exchangeStatus.js +111 -1
  189. package/lib/browser/math/funding.d.ts +57 -20
  190. package/lib/browser/math/funding.js +63 -23
  191. package/lib/browser/math/insurance.d.ts +62 -0
  192. package/lib/browser/math/insurance.js +62 -0
  193. package/lib/browser/math/liquidation.d.ts +127 -11
  194. package/lib/browser/math/liquidation.js +182 -19
  195. package/lib/browser/math/margin.d.ts +79 -13
  196. package/lib/browser/math/margin.js +80 -14
  197. package/lib/browser/math/market.d.ts +135 -15
  198. package/lib/browser/math/market.js +145 -17
  199. package/lib/browser/math/oracles.d.ts +113 -0
  200. package/lib/browser/math/oracles.js +118 -1
  201. package/lib/browser/math/orders.d.ts +115 -7
  202. package/lib/browser/math/orders.js +133 -18
  203. package/lib/browser/math/position.d.ts +80 -33
  204. package/lib/browser/math/position.js +80 -33
  205. package/lib/browser/math/repeg.d.ts +48 -10
  206. package/lib/browser/math/repeg.js +48 -10
  207. package/lib/browser/math/spotBalance.d.ts +200 -5
  208. package/lib/browser/math/spotBalance.js +239 -10
  209. package/lib/browser/math/spotMarket.d.ts +36 -3
  210. package/lib/browser/math/spotMarket.js +36 -3
  211. package/lib/browser/math/spotPosition.d.ts +72 -0
  212. package/lib/browser/math/spotPosition.js +62 -0
  213. package/lib/browser/math/state.d.ts +31 -0
  214. package/lib/browser/math/state.js +32 -1
  215. package/lib/browser/math/superStake.d.ts +126 -2
  216. package/lib/browser/math/superStake.js +123 -3
  217. package/lib/browser/math/tiers.d.ts +29 -0
  218. package/lib/browser/math/tiers.js +29 -0
  219. package/lib/browser/math/trade.d.ts +102 -51
  220. package/lib/browser/math/trade.js +101 -55
  221. package/lib/browser/math/utils.d.ts +71 -9
  222. package/lib/browser/math/utils.js +71 -9
  223. package/lib/browser/memcmp.d.ts +94 -0
  224. package/lib/browser/memcmp.js +129 -7
  225. package/lib/browser/oracles/oracleClientCache.d.ts +16 -0
  226. package/lib/browser/oracles/oracleClientCache.js +16 -0
  227. package/lib/browser/oracles/oracleId.d.ts +31 -0
  228. package/lib/browser/oracles/oracleId.js +39 -8
  229. package/lib/browser/oracles/prelaunchOracleClient.d.ts +20 -0
  230. package/lib/browser/oracles/prelaunchOracleClient.js +20 -0
  231. package/lib/browser/oracles/pythClient.d.ts +31 -0
  232. package/lib/browser/oracles/pythClient.js +32 -1
  233. package/lib/browser/oracles/pythLazerClient.d.ts +34 -0
  234. package/lib/browser/oracles/pythLazerClient.js +35 -1
  235. package/lib/browser/oracles/quoteAssetOracleClient.d.ts +18 -0
  236. package/lib/browser/oracles/quoteAssetOracleClient.js +18 -0
  237. package/lib/browser/oracles/strictOraclePrice.d.ts +21 -0
  238. package/lib/browser/oracles/strictOraclePrice.js +21 -0
  239. package/lib/browser/oracles/types.d.ts +45 -0
  240. package/lib/browser/oracles/utils.d.ts +20 -0
  241. package/lib/browser/oracles/utils.js +20 -0
  242. package/lib/browser/orderParams.d.ts +42 -4
  243. package/lib/browser/orderParams.js +42 -4
  244. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +56 -0
  245. package/lib/browser/orderSubscriber/OrderSubscriber.js +67 -2
  246. package/lib/browser/orderSubscriber/PollingSubscription.d.ts +11 -0
  247. package/lib/browser/orderSubscriber/PollingSubscription.js +11 -0
  248. package/lib/browser/orderSubscriber/WebsocketSubscription.d.ts +18 -0
  249. package/lib/browser/orderSubscriber/WebsocketSubscription.js +18 -0
  250. package/lib/browser/orderSubscriber/grpcSubscription.d.ts +16 -0
  251. package/lib/browser/orderSubscriber/grpcSubscription.js +16 -0
  252. package/lib/browser/orderSubscriber/types.d.ts +9 -0
  253. package/lib/browser/priorityFee/averageOverSlotsStrategy.d.ts +1 -0
  254. package/lib/browser/priorityFee/averageOverSlotsStrategy.js +1 -0
  255. package/lib/browser/priorityFee/averageStrategy.d.ts +1 -0
  256. package/lib/browser/priorityFee/averageStrategy.js +1 -0
  257. package/lib/browser/priorityFee/ewmaStrategy.d.ts +10 -0
  258. package/lib/browser/priorityFee/ewmaStrategy.js +10 -0
  259. package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +13 -0
  260. package/lib/browser/priorityFee/heliusPriorityFeeMethod.js +9 -2
  261. package/lib/browser/priorityFee/maxOverSlotsStrategy.d.ts +1 -0
  262. package/lib/browser/priorityFee/maxOverSlotsStrategy.js +1 -0
  263. package/lib/browser/priorityFee/maxStrategy.d.ts +1 -0
  264. package/lib/browser/priorityFee/maxStrategy.js +1 -0
  265. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +39 -0
  266. package/lib/browser/priorityFee/priorityFeeSubscriber.js +39 -0
  267. package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +20 -1
  268. package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +21 -2
  269. package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +12 -0
  270. package/lib/browser/priorityFee/solanaPriorityFeeMethod.js +10 -0
  271. package/lib/browser/priorityFee/types.d.ts +32 -0
  272. package/lib/browser/priorityFee/types.js +5 -0
  273. package/lib/browser/priorityFee/velocityPriorityFeeMethod.d.ts +11 -0
  274. package/lib/browser/priorityFee/velocityPriorityFeeMethod.js +8 -0
  275. package/lib/browser/slot/SlotSubscriber.d.ts +18 -0
  276. package/lib/browser/slot/SlotSubscriber.js +16 -0
  277. package/lib/browser/slot/SlothashSubscriber.d.ts +26 -0
  278. package/lib/browser/slot/SlothashSubscriber.js +25 -1
  279. package/lib/browser/swift/swiftOrderSubscriber.js +2 -2
  280. package/lib/browser/tokenFaucet.d.ts +2 -2
  281. package/lib/browser/tokenFaucet.js +11 -4
  282. package/lib/browser/tx/baseTxSender.d.ts +163 -0
  283. package/lib/browser/tx/baseTxSender.js +174 -6
  284. package/lib/browser/tx/blockhashFetcher/baseBlockhashFetcher.d.ts +12 -0
  285. package/lib/browser/tx/blockhashFetcher/baseBlockhashFetcher.js +12 -0
  286. package/lib/browser/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts +15 -0
  287. package/lib/browser/tx/blockhashFetcher/cachedBlockhashFetcher.js +15 -0
  288. package/lib/browser/tx/blockhashFetcher/types.d.ts +4 -0
  289. package/lib/browser/tx/fastSingleTxSender.d.ts +47 -0
  290. package/lib/browser/tx/fastSingleTxSender.js +48 -1
  291. package/lib/browser/tx/forwardOnlyTxSender.d.ts +48 -0
  292. package/lib/browser/tx/forwardOnlyTxSender.js +48 -0
  293. package/lib/browser/tx/reportTransactionError.d.ts +18 -6
  294. package/lib/browser/tx/reportTransactionError.js +18 -6
  295. package/lib/browser/tx/retryTxSender.d.ts +40 -0
  296. package/lib/browser/tx/retryTxSender.js +39 -0
  297. package/lib/browser/tx/txHandler.d.ts +146 -35
  298. package/lib/browser/tx/txHandler.js +132 -32
  299. package/lib/browser/tx/txParamProcessor.d.ts +47 -0
  300. package/lib/browser/tx/txParamProcessor.js +47 -0
  301. package/lib/browser/tx/types.d.ts +46 -0
  302. package/lib/browser/tx/types.js +5 -0
  303. package/lib/browser/tx/utils.d.ts +26 -0
  304. package/lib/browser/tx/utils.js +26 -0
  305. package/lib/browser/tx/whileValidTxSender.d.ts +82 -0
  306. package/lib/browser/tx/whileValidTxSender.js +81 -0
  307. package/lib/browser/types.d.ts +786 -13
  308. package/lib/browser/types.js +133 -9
  309. package/lib/browser/user.d.ts +645 -84
  310. package/lib/browser/user.js +779 -96
  311. package/lib/browser/userMap/PollingSubscription.d.ts +10 -0
  312. package/lib/browser/userMap/PollingSubscription.js +14 -2
  313. package/lib/browser/userMap/WebsocketSubscription.d.ts +9 -0
  314. package/lib/browser/userMap/WebsocketSubscription.js +9 -0
  315. package/lib/browser/userMap/grpcSubscription.d.ts +8 -0
  316. package/lib/browser/userMap/grpcSubscription.js +8 -0
  317. package/lib/browser/userMap/referrerMap.d.ts +72 -2
  318. package/lib/browser/userMap/referrerMap.js +84 -2
  319. package/lib/browser/userMap/revenueShareEscrowMap.d.ts +37 -10
  320. package/lib/browser/userMap/revenueShareEscrowMap.js +38 -11
  321. package/lib/browser/userMap/userMap.d.ts +81 -3
  322. package/lib/browser/userMap/userMap.js +81 -4
  323. package/lib/browser/userMap/userMapConfig.d.ts +23 -0
  324. package/lib/browser/userMap/userStatsMap.d.ts +22 -0
  325. package/lib/browser/userMap/userStatsMap.js +22 -0
  326. package/lib/browser/userName.d.ts +16 -0
  327. package/lib/browser/userName.js +16 -0
  328. package/lib/browser/userStats.d.ts +28 -1
  329. package/lib/browser/userStats.js +28 -1
  330. package/lib/browser/util/TransactionConfirmationManager.d.ts +33 -0
  331. package/lib/browser/util/TransactionConfirmationManager.js +33 -0
  332. package/lib/browser/util/chainClock.d.ts +24 -0
  333. package/lib/browser/util/chainClock.js +20 -0
  334. package/lib/browser/util/computeUnits.d.ts +32 -0
  335. package/lib/browser/util/computeUnits.js +32 -0
  336. package/lib/browser/util/digest.d.ts +17 -0
  337. package/lib/browser/util/digest.js +17 -0
  338. package/lib/browser/util/ed25519Utils.d.ts +12 -2
  339. package/lib/browser/util/ed25519Utils.js +12 -2
  340. package/lib/browser/util/promiseTimeout.d.ts +9 -0
  341. package/lib/browser/util/promiseTimeout.js +9 -0
  342. package/lib/browser/velocityClient.d.ts +3323 -216
  343. package/lib/browser/velocityClient.js +3428 -249
  344. package/lib/browser/wallet.d.ts +37 -0
  345. package/lib/browser/wallet.js +37 -0
  346. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +18 -0
  347. package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
  348. package/lib/node/accounts/basicUserAccountSubscriber.js +18 -0
  349. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +18 -0
  350. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
  351. package/lib/node/accounts/basicUserStatsAccountSubscriber.js +18 -0
  352. package/lib/node/accounts/bulkAccountLoader.d.ts +52 -0
  353. package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
  354. package/lib/node/accounts/bulkAccountLoader.js +51 -0
  355. package/lib/node/accounts/bulkUserStatsSubscription.d.ts +9 -2
  356. package/lib/node/accounts/bulkUserStatsSubscription.d.ts.map +1 -1
  357. package/lib/node/accounts/bulkUserStatsSubscription.js +9 -2
  358. package/lib/node/accounts/bulkUserSubscription.d.ts +8 -2
  359. package/lib/node/accounts/bulkUserSubscription.d.ts.map +1 -1
  360. package/lib/node/accounts/bulkUserSubscription.js +8 -2
  361. package/lib/node/accounts/customizedCadenceBulkAccountLoader.d.ts +37 -0
  362. package/lib/node/accounts/customizedCadenceBulkAccountLoader.d.ts.map +1 -1
  363. package/lib/node/accounts/customizedCadenceBulkAccountLoader.js +37 -0
  364. package/lib/node/accounts/fetch.d.ts +59 -2
  365. package/lib/node/accounts/fetch.d.ts.map +1 -1
  366. package/lib/node/accounts/fetch.js +57 -2
  367. package/lib/node/accounts/grpcAccountSubscriber.d.ts +30 -0
  368. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  369. package/lib/node/accounts/grpcAccountSubscriber.js +30 -0
  370. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +16 -0
  371. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  372. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.js +16 -0
  373. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +60 -1
  374. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  375. package/lib/node/accounts/grpcMultiAccountSubscriber.js +118 -37
  376. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +32 -0
  377. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  378. package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +40 -12
  379. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +33 -0
  380. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  381. package/lib/node/accounts/grpcProgramAccountSubscriber.js +33 -0
  382. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts +15 -0
  383. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts.map +1 -1
  384. package/lib/node/accounts/grpcUserAccountSubscriber.js +15 -0
  385. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts +15 -0
  386. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts.map +1 -1
  387. package/lib/node/accounts/grpcUserStatsAccountSubscriber.js +15 -0
  388. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts +41 -0
  389. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  390. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +41 -0
  391. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +116 -0
  392. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  393. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +152 -1
  394. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts +34 -0
  395. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  396. package/lib/node/accounts/laserProgramAccountSubscriber.js +34 -0
  397. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts +19 -0
  398. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  399. package/lib/node/accounts/oneShotUserAccountSubscriber.js +19 -0
  400. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts +19 -0
  401. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  402. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +19 -0
  403. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +31 -0
  404. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  405. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +31 -0
  406. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +19 -0
  407. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  408. package/lib/node/accounts/pollingOracleAccountSubscriber.js +21 -2
  409. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +22 -0
  410. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  411. package/lib/node/accounts/pollingTokenAccountSubscriber.js +22 -0
  412. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +32 -0
  413. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
  414. package/lib/node/accounts/pollingUserAccountSubscriber.js +32 -0
  415. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +22 -0
  416. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  417. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +22 -0
  418. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +83 -0
  419. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  420. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +84 -1
  421. package/lib/node/accounts/testBulkAccountLoader.d.ts +8 -0
  422. package/lib/node/accounts/testBulkAccountLoader.d.ts.map +1 -1
  423. package/lib/node/accounts/testBulkAccountLoader.js +8 -0
  424. package/lib/node/accounts/types.d.ts +149 -0
  425. package/lib/node/accounts/types.d.ts.map +1 -1
  426. package/lib/node/accounts/types.js +13 -0
  427. package/lib/node/accounts/utils.d.ts +18 -0
  428. package/lib/node/accounts/utils.d.ts.map +1 -1
  429. package/lib/node/accounts/utils.js +32 -16
  430. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +41 -0
  431. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  432. package/lib/node/accounts/webSocketAccountSubscriber.js +41 -0
  433. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +31 -0
  434. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  435. package/lib/node/accounts/webSocketAccountSubscriberV2.js +31 -23
  436. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +27 -0
  437. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  438. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +27 -0
  439. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +36 -0
  440. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  441. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +36 -0
  442. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +21 -0
  443. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  444. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +25 -0
  445. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +21 -0
  446. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  447. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +21 -0
  448. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +26 -0
  449. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  450. package/lib/node/accounts/webSocketUserAccountSubscriber.js +26 -0
  451. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  452. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  453. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +20 -0
  454. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +121 -0
  455. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  456. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +123 -2
  457. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +96 -0
  458. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  459. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +108 -0
  460. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +28 -0
  461. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  462. package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +33 -0
  463. package/lib/node/addresses/marketAddresses.d.ts +10 -0
  464. package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
  465. package/lib/node/addresses/marketAddresses.js +10 -0
  466. package/lib/node/addresses/pda.d.ts +214 -2
  467. package/lib/node/addresses/pda.d.ts.map +1 -1
  468. package/lib/node/addresses/pda.js +217 -5
  469. package/lib/node/adminClient.d.ts +2139 -5
  470. package/lib/node/adminClient.d.ts.map +1 -1
  471. package/lib/node/adminClient.js +2173 -11
  472. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +15 -0
  473. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  474. package/lib/node/auctionSubscriber/auctionSubscriber.js +15 -0
  475. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +19 -0
  476. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  477. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +19 -0
  478. package/lib/node/auctionSubscriber/index.d.ts +6 -0
  479. package/lib/node/auctionSubscriber/index.d.ts.map +1 -1
  480. package/lib/node/auctionSubscriber/index.js +6 -0
  481. package/lib/node/auctionSubscriber/types.d.ts +7 -0
  482. package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
  483. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +33 -0
  484. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  485. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +33 -0
  486. package/lib/node/blockhashSubscriber/index.d.ts +5 -0
  487. package/lib/node/blockhashSubscriber/index.d.ts.map +1 -1
  488. package/lib/node/blockhashSubscriber/index.js +5 -0
  489. package/lib/node/blockhashSubscriber/types.d.ts +5 -0
  490. package/lib/node/blockhashSubscriber/types.d.ts.map +1 -1
  491. package/lib/node/clock/clockSubscriber.d.ts +24 -0
  492. package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
  493. package/lib/node/clock/clockSubscriber.js +22 -0
  494. package/lib/node/config.d.ts +58 -4
  495. package/lib/node/config.d.ts.map +1 -1
  496. package/lib/node/config.js +88 -21
  497. package/lib/node/constants/numericConstants.d.ts +67 -0
  498. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  499. package/lib/node/constants/numericConstants.js +68 -1
  500. package/lib/node/constants/perpMarkets.d.ts +10 -0
  501. package/lib/node/constants/perpMarkets.d.ts.map +1 -1
  502. package/lib/node/constants/perpMarkets.js +40 -908
  503. package/lib/node/constants/spotMarkets.d.ts +13 -0
  504. package/lib/node/constants/spotMarkets.d.ts.map +1 -1
  505. package/lib/node/constants/spotMarkets.js +16 -742
  506. package/lib/node/constants/txConstants.d.ts +1 -0
  507. package/lib/node/constants/txConstants.d.ts.map +1 -1
  508. package/lib/node/constants/txConstants.js +1 -0
  509. package/lib/node/core/VelocityCore.d.ts +285 -8
  510. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  511. package/lib/node/core/VelocityCore.js +281 -8
  512. package/lib/node/core/instructions/deposit.d.ts +22 -0
  513. package/lib/node/core/instructions/deposit.d.ts.map +1 -1
  514. package/lib/node/core/instructions/deposit.js +22 -0
  515. package/lib/node/core/instructions/fill.d.ts +17 -0
  516. package/lib/node/core/instructions/fill.d.ts.map +1 -1
  517. package/lib/node/core/instructions/fill.js +17 -0
  518. package/lib/node/core/instructions/funding.d.ts +12 -0
  519. package/lib/node/core/instructions/funding.d.ts.map +1 -1
  520. package/lib/node/core/instructions/funding.js +12 -0
  521. package/lib/node/core/instructions/liquidation.d.ts +18 -0
  522. package/lib/node/core/instructions/liquidation.d.ts.map +1 -1
  523. package/lib/node/core/instructions/liquidation.js +18 -0
  524. package/lib/node/core/instructions/orders.d.ts +28 -0
  525. package/lib/node/core/instructions/orders.d.ts.map +1 -1
  526. package/lib/node/core/instructions/orders.js +28 -0
  527. package/lib/node/core/instructions/perpOrders.d.ts +106 -0
  528. package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
  529. package/lib/node/core/instructions/perpOrders.js +106 -0
  530. package/lib/node/core/instructions/settlement.d.ts +14 -0
  531. package/lib/node/core/instructions/settlement.d.ts.map +1 -1
  532. package/lib/node/core/instructions/settlement.js +14 -0
  533. package/lib/node/core/instructions/trigger.d.ts +15 -0
  534. package/lib/node/core/instructions/trigger.d.ts.map +1 -1
  535. package/lib/node/core/instructions/trigger.js +15 -0
  536. package/lib/node/core/instructions/withdraw.d.ts +21 -0
  537. package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
  538. package/lib/node/core/instructions/withdraw.js +21 -0
  539. package/lib/node/core/remainingAccounts.d.ts +47 -3
  540. package/lib/node/core/remainingAccounts.d.ts.map +1 -1
  541. package/lib/node/core/remainingAccounts.js +20 -0
  542. package/lib/node/core/signedMsg.d.ts +38 -0
  543. package/lib/node/core/signedMsg.d.ts.map +1 -1
  544. package/lib/node/core/signedMsg.js +33 -0
  545. package/lib/node/decode/customCoder.d.ts +39 -3
  546. package/lib/node/decode/customCoder.d.ts.map +1 -1
  547. package/lib/node/decode/customCoder.js +45 -3
  548. package/lib/node/decode/user.d.ts +22 -0
  549. package/lib/node/decode/user.d.ts.map +1 -1
  550. package/lib/node/decode/user.js +22 -0
  551. package/lib/node/dlob/DLOB.d.ts +502 -53
  552. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  553. package/lib/node/dlob/DLOB.js +540 -98
  554. package/lib/node/dlob/DLOBNode.d.ts +86 -4
  555. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  556. package/lib/node/dlob/DLOBNode.js +37 -4
  557. package/lib/node/dlob/DLOBSubscriber.d.ts +39 -12
  558. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  559. package/lib/node/dlob/DLOBSubscriber.js +42 -12
  560. package/lib/node/dlob/NodeList.d.ts +69 -0
  561. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  562. package/lib/node/dlob/NodeList.js +66 -0
  563. package/lib/node/dlob/orderBookLevels.d.ts +106 -13
  564. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  565. package/lib/node/dlob/orderBookLevels.js +84 -14
  566. package/lib/node/dlob/types.d.ts +15 -0
  567. package/lib/node/dlob/types.d.ts.map +1 -1
  568. package/lib/node/events/eventList.d.ts +14 -0
  569. package/lib/node/events/eventList.d.ts.map +1 -1
  570. package/lib/node/events/eventList.js +14 -0
  571. package/lib/node/events/eventSubscriber.d.ts +87 -10
  572. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  573. package/lib/node/events/eventSubscriber.js +93 -8
  574. package/lib/node/events/eventsServerLogProvider.d.ts +22 -0
  575. package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
  576. package/lib/node/events/eventsServerLogProvider.js +27 -0
  577. package/lib/node/events/fetchLogs.d.ts +31 -0
  578. package/lib/node/events/fetchLogs.d.ts.map +1 -1
  579. package/lib/node/events/fetchLogs.js +46 -1
  580. package/lib/node/events/parse.d.ts +23 -0
  581. package/lib/node/events/parse.d.ts.map +1 -1
  582. package/lib/node/events/parse.js +23 -0
  583. package/lib/node/events/pollingLogProvider.d.ts +24 -0
  584. package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
  585. package/lib/node/events/pollingLogProvider.js +24 -0
  586. package/lib/node/events/sort.d.ts +11 -0
  587. package/lib/node/events/sort.d.ts.map +1 -1
  588. package/lib/node/events/sort.js +12 -0
  589. package/lib/node/events/txEventCache.d.ts +13 -3
  590. package/lib/node/events/txEventCache.d.ts.map +1 -1
  591. package/lib/node/events/txEventCache.js +19 -7
  592. package/lib/node/events/types.d.ts +118 -2
  593. package/lib/node/events/types.d.ts.map +1 -1
  594. package/lib/node/events/types.js +11 -0
  595. package/lib/node/events/webSocketLogProvider.d.ts +23 -0
  596. package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
  597. package/lib/node/events/webSocketLogProvider.js +28 -0
  598. package/lib/node/factory/oracleClient.js +2 -2
  599. package/lib/node/idl/velocity.d.ts +50 -1
  600. package/lib/node/idl/velocity.d.ts.map +1 -1
  601. package/lib/node/idl/velocity.json +50 -1
  602. package/lib/node/keypair.d.ts +8 -0
  603. package/lib/node/keypair.d.ts.map +1 -1
  604. package/lib/node/keypair.js +8 -0
  605. package/lib/node/marginCalculation.d.ts +134 -2
  606. package/lib/node/marginCalculation.d.ts.map +1 -1
  607. package/lib/node/marginCalculation.js +121 -0
  608. package/lib/node/math/amm.d.ts +348 -29
  609. package/lib/node/math/amm.d.ts.map +1 -1
  610. package/lib/node/math/amm.js +310 -32
  611. package/lib/node/math/auction.d.ts +95 -19
  612. package/lib/node/math/auction.d.ts.map +1 -1
  613. package/lib/node/math/auction.js +118 -28
  614. package/lib/node/math/bankruptcy.d.ts +46 -0
  615. package/lib/node/math/bankruptcy.d.ts.map +1 -1
  616. package/lib/node/math/bankruptcy.js +89 -1
  617. package/lib/node/math/builder.d.ts +64 -8
  618. package/lib/node/math/builder.d.ts.map +1 -1
  619. package/lib/node/math/builder.js +71 -9
  620. package/lib/node/math/conversion.d.ts +21 -0
  621. package/lib/node/math/conversion.d.ts.map +1 -1
  622. package/lib/node/math/conversion.js +21 -0
  623. package/lib/node/math/exchangeStatus.d.ts +92 -0
  624. package/lib/node/math/exchangeStatus.d.ts.map +1 -1
  625. package/lib/node/math/exchangeStatus.js +111 -1
  626. package/lib/node/math/funding.d.ts +57 -20
  627. package/lib/node/math/funding.d.ts.map +1 -1
  628. package/lib/node/math/funding.js +63 -23
  629. package/lib/node/math/insurance.d.ts +62 -0
  630. package/lib/node/math/insurance.d.ts.map +1 -1
  631. package/lib/node/math/insurance.js +62 -0
  632. package/lib/node/math/liquidation.d.ts +127 -11
  633. package/lib/node/math/liquidation.d.ts.map +1 -1
  634. package/lib/node/math/liquidation.js +182 -19
  635. package/lib/node/math/margin.d.ts +79 -13
  636. package/lib/node/math/margin.d.ts.map +1 -1
  637. package/lib/node/math/margin.js +80 -14
  638. package/lib/node/math/market.d.ts +135 -15
  639. package/lib/node/math/market.d.ts.map +1 -1
  640. package/lib/node/math/market.js +145 -17
  641. package/lib/node/math/oracles.d.ts +113 -0
  642. package/lib/node/math/oracles.d.ts.map +1 -1
  643. package/lib/node/math/oracles.js +118 -1
  644. package/lib/node/math/orders.d.ts +115 -7
  645. package/lib/node/math/orders.d.ts.map +1 -1
  646. package/lib/node/math/orders.js +133 -18
  647. package/lib/node/math/position.d.ts +80 -33
  648. package/lib/node/math/position.d.ts.map +1 -1
  649. package/lib/node/math/position.js +80 -33
  650. package/lib/node/math/repeg.d.ts +48 -10
  651. package/lib/node/math/repeg.d.ts.map +1 -1
  652. package/lib/node/math/repeg.js +48 -10
  653. package/lib/node/math/spotBalance.d.ts +200 -5
  654. package/lib/node/math/spotBalance.d.ts.map +1 -1
  655. package/lib/node/math/spotBalance.js +239 -10
  656. package/lib/node/math/spotMarket.d.ts +36 -3
  657. package/lib/node/math/spotMarket.d.ts.map +1 -1
  658. package/lib/node/math/spotMarket.js +36 -3
  659. package/lib/node/math/spotPosition.d.ts +72 -0
  660. package/lib/node/math/spotPosition.d.ts.map +1 -1
  661. package/lib/node/math/spotPosition.js +62 -0
  662. package/lib/node/math/state.d.ts +31 -0
  663. package/lib/node/math/state.d.ts.map +1 -1
  664. package/lib/node/math/state.js +32 -1
  665. package/lib/node/math/superStake.d.ts +126 -2
  666. package/lib/node/math/superStake.d.ts.map +1 -1
  667. package/lib/node/math/superStake.js +123 -3
  668. package/lib/node/math/tiers.d.ts +29 -0
  669. package/lib/node/math/tiers.d.ts.map +1 -1
  670. package/lib/node/math/tiers.js +29 -0
  671. package/lib/node/math/trade.d.ts +102 -51
  672. package/lib/node/math/trade.d.ts.map +1 -1
  673. package/lib/node/math/trade.js +101 -55
  674. package/lib/node/math/utils.d.ts +71 -9
  675. package/lib/node/math/utils.d.ts.map +1 -1
  676. package/lib/node/math/utils.js +71 -9
  677. package/lib/node/memcmp.d.ts +94 -0
  678. package/lib/node/memcmp.d.ts.map +1 -1
  679. package/lib/node/memcmp.js +129 -7
  680. package/lib/node/oracles/oracleClientCache.d.ts +16 -0
  681. package/lib/node/oracles/oracleClientCache.d.ts.map +1 -1
  682. package/lib/node/oracles/oracleClientCache.js +16 -0
  683. package/lib/node/oracles/oracleId.d.ts +31 -0
  684. package/lib/node/oracles/oracleId.d.ts.map +1 -1
  685. package/lib/node/oracles/oracleId.js +39 -8
  686. package/lib/node/oracles/prelaunchOracleClient.d.ts +20 -0
  687. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  688. package/lib/node/oracles/prelaunchOracleClient.js +20 -0
  689. package/lib/node/oracles/pythClient.d.ts +31 -0
  690. package/lib/node/oracles/pythClient.d.ts.map +1 -1
  691. package/lib/node/oracles/pythClient.js +32 -1
  692. package/lib/node/oracles/pythLazerClient.d.ts +34 -0
  693. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  694. package/lib/node/oracles/pythLazerClient.js +35 -1
  695. package/lib/node/oracles/quoteAssetOracleClient.d.ts +18 -0
  696. package/lib/node/oracles/quoteAssetOracleClient.d.ts.map +1 -1
  697. package/lib/node/oracles/quoteAssetOracleClient.js +18 -0
  698. package/lib/node/oracles/strictOraclePrice.d.ts +21 -0
  699. package/lib/node/oracles/strictOraclePrice.d.ts.map +1 -1
  700. package/lib/node/oracles/strictOraclePrice.js +21 -0
  701. package/lib/node/oracles/types.d.ts +45 -0
  702. package/lib/node/oracles/types.d.ts.map +1 -1
  703. package/lib/node/oracles/utils.d.ts +20 -0
  704. package/lib/node/oracles/utils.d.ts.map +1 -1
  705. package/lib/node/oracles/utils.js +20 -0
  706. package/lib/node/orderParams.d.ts +42 -4
  707. package/lib/node/orderParams.d.ts.map +1 -1
  708. package/lib/node/orderParams.js +42 -4
  709. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +56 -0
  710. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  711. package/lib/node/orderSubscriber/OrderSubscriber.js +67 -2
  712. package/lib/node/orderSubscriber/PollingSubscription.d.ts +11 -0
  713. package/lib/node/orderSubscriber/PollingSubscription.d.ts.map +1 -1
  714. package/lib/node/orderSubscriber/PollingSubscription.js +11 -0
  715. package/lib/node/orderSubscriber/WebsocketSubscription.d.ts +18 -0
  716. package/lib/node/orderSubscriber/WebsocketSubscription.d.ts.map +1 -1
  717. package/lib/node/orderSubscriber/WebsocketSubscription.js +18 -0
  718. package/lib/node/orderSubscriber/grpcSubscription.d.ts +16 -0
  719. package/lib/node/orderSubscriber/grpcSubscription.d.ts.map +1 -1
  720. package/lib/node/orderSubscriber/grpcSubscription.js +16 -0
  721. package/lib/node/orderSubscriber/types.d.ts +9 -0
  722. package/lib/node/orderSubscriber/types.d.ts.map +1 -1
  723. package/lib/node/priorityFee/averageOverSlotsStrategy.d.ts +1 -0
  724. package/lib/node/priorityFee/averageOverSlotsStrategy.d.ts.map +1 -1
  725. package/lib/node/priorityFee/averageOverSlotsStrategy.js +1 -0
  726. package/lib/node/priorityFee/averageStrategy.d.ts +1 -0
  727. package/lib/node/priorityFee/averageStrategy.d.ts.map +1 -1
  728. package/lib/node/priorityFee/averageStrategy.js +1 -0
  729. package/lib/node/priorityFee/ewmaStrategy.d.ts +10 -0
  730. package/lib/node/priorityFee/ewmaStrategy.d.ts.map +1 -1
  731. package/lib/node/priorityFee/ewmaStrategy.js +10 -0
  732. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +13 -0
  733. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts.map +1 -1
  734. package/lib/node/priorityFee/heliusPriorityFeeMethod.js +9 -2
  735. package/lib/node/priorityFee/maxOverSlotsStrategy.d.ts +1 -0
  736. package/lib/node/priorityFee/maxOverSlotsStrategy.d.ts.map +1 -1
  737. package/lib/node/priorityFee/maxOverSlotsStrategy.js +1 -0
  738. package/lib/node/priorityFee/maxStrategy.d.ts +1 -0
  739. package/lib/node/priorityFee/maxStrategy.d.ts.map +1 -1
  740. package/lib/node/priorityFee/maxStrategy.js +1 -0
  741. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +39 -0
  742. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  743. package/lib/node/priorityFee/priorityFeeSubscriber.js +39 -0
  744. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +20 -1
  745. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts.map +1 -1
  746. package/lib/node/priorityFee/priorityFeeSubscriberMap.js +21 -2
  747. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +12 -0
  748. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
  749. package/lib/node/priorityFee/solanaPriorityFeeMethod.js +10 -0
  750. package/lib/node/priorityFee/types.d.ts +32 -0
  751. package/lib/node/priorityFee/types.d.ts.map +1 -1
  752. package/lib/node/priorityFee/types.js +5 -0
  753. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts +11 -0
  754. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts.map +1 -1
  755. package/lib/node/priorityFee/velocityPriorityFeeMethod.js +8 -0
  756. package/lib/node/slot/SlotSubscriber.d.ts +18 -0
  757. package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
  758. package/lib/node/slot/SlotSubscriber.js +16 -0
  759. package/lib/node/slot/SlothashSubscriber.d.ts +26 -0
  760. package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
  761. package/lib/node/slot/SlothashSubscriber.js +25 -1
  762. package/lib/node/swift/swiftOrderSubscriber.js +2 -2
  763. package/lib/node/tokenFaucet.d.ts +2 -2
  764. package/lib/node/tokenFaucet.d.ts.map +1 -1
  765. package/lib/node/tokenFaucet.js +11 -4
  766. package/lib/node/tx/baseTxSender.d.ts +163 -0
  767. package/lib/node/tx/baseTxSender.d.ts.map +1 -1
  768. package/lib/node/tx/baseTxSender.js +174 -6
  769. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.d.ts +12 -0
  770. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.d.ts.map +1 -1
  771. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.js +12 -0
  772. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts +15 -0
  773. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts.map +1 -1
  774. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.js +15 -0
  775. package/lib/node/tx/blockhashFetcher/types.d.ts +4 -0
  776. package/lib/node/tx/blockhashFetcher/types.d.ts.map +1 -1
  777. package/lib/node/tx/fastSingleTxSender.d.ts +47 -0
  778. package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
  779. package/lib/node/tx/fastSingleTxSender.js +48 -1
  780. package/lib/node/tx/forwardOnlyTxSender.d.ts +48 -0
  781. package/lib/node/tx/forwardOnlyTxSender.d.ts.map +1 -1
  782. package/lib/node/tx/forwardOnlyTxSender.js +48 -0
  783. package/lib/node/tx/reportTransactionError.d.ts +18 -6
  784. package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
  785. package/lib/node/tx/reportTransactionError.js +18 -6
  786. package/lib/node/tx/retryTxSender.d.ts +40 -0
  787. package/lib/node/tx/retryTxSender.d.ts.map +1 -1
  788. package/lib/node/tx/retryTxSender.js +39 -0
  789. package/lib/node/tx/txHandler.d.ts +146 -35
  790. package/lib/node/tx/txHandler.d.ts.map +1 -1
  791. package/lib/node/tx/txHandler.js +132 -32
  792. package/lib/node/tx/txParamProcessor.d.ts +47 -0
  793. package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
  794. package/lib/node/tx/txParamProcessor.js +47 -0
  795. package/lib/node/tx/types.d.ts +46 -0
  796. package/lib/node/tx/types.d.ts.map +1 -1
  797. package/lib/node/tx/types.js +5 -0
  798. package/lib/node/tx/utils.d.ts +26 -0
  799. package/lib/node/tx/utils.d.ts.map +1 -1
  800. package/lib/node/tx/utils.js +26 -0
  801. package/lib/node/tx/whileValidTxSender.d.ts +82 -0
  802. package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
  803. package/lib/node/tx/whileValidTxSender.js +81 -0
  804. package/lib/node/types.d.ts +786 -13
  805. package/lib/node/types.d.ts.map +1 -1
  806. package/lib/node/types.js +133 -9
  807. package/lib/node/user.d.ts +645 -84
  808. package/lib/node/user.d.ts.map +1 -1
  809. package/lib/node/user.js +779 -96
  810. package/lib/node/userMap/PollingSubscription.d.ts +10 -0
  811. package/lib/node/userMap/PollingSubscription.d.ts.map +1 -1
  812. package/lib/node/userMap/PollingSubscription.js +14 -2
  813. package/lib/node/userMap/WebsocketSubscription.d.ts +9 -0
  814. package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
  815. package/lib/node/userMap/WebsocketSubscription.js +9 -0
  816. package/lib/node/userMap/grpcSubscription.d.ts +8 -0
  817. package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
  818. package/lib/node/userMap/grpcSubscription.js +8 -0
  819. package/lib/node/userMap/referrerMap.d.ts +72 -2
  820. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  821. package/lib/node/userMap/referrerMap.js +84 -2
  822. package/lib/node/userMap/revenueShareEscrowMap.d.ts +37 -10
  823. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  824. package/lib/node/userMap/revenueShareEscrowMap.js +38 -11
  825. package/lib/node/userMap/userMap.d.ts +81 -3
  826. package/lib/node/userMap/userMap.d.ts.map +1 -1
  827. package/lib/node/userMap/userMap.js +81 -4
  828. package/lib/node/userMap/userMapConfig.d.ts +23 -0
  829. package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
  830. package/lib/node/userMap/userStatsMap.d.ts +22 -0
  831. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  832. package/lib/node/userMap/userStatsMap.js +22 -0
  833. package/lib/node/userName.d.ts +16 -0
  834. package/lib/node/userName.d.ts.map +1 -1
  835. package/lib/node/userName.js +16 -0
  836. package/lib/node/userStats.d.ts +28 -1
  837. package/lib/node/userStats.d.ts.map +1 -1
  838. package/lib/node/userStats.js +28 -1
  839. package/lib/node/util/TransactionConfirmationManager.d.ts +33 -0
  840. package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
  841. package/lib/node/util/TransactionConfirmationManager.js +33 -0
  842. package/lib/node/util/chainClock.d.ts +24 -0
  843. package/lib/node/util/chainClock.d.ts.map +1 -1
  844. package/lib/node/util/chainClock.js +20 -0
  845. package/lib/node/util/computeUnits.d.ts +32 -0
  846. package/lib/node/util/computeUnits.d.ts.map +1 -1
  847. package/lib/node/util/computeUnits.js +32 -0
  848. package/lib/node/util/digest.d.ts +17 -0
  849. package/lib/node/util/digest.d.ts.map +1 -1
  850. package/lib/node/util/digest.js +17 -0
  851. package/lib/node/util/ed25519Utils.d.ts +12 -2
  852. package/lib/node/util/ed25519Utils.d.ts.map +1 -1
  853. package/lib/node/util/ed25519Utils.js +12 -2
  854. package/lib/node/util/promiseTimeout.d.ts +9 -0
  855. package/lib/node/util/promiseTimeout.d.ts.map +1 -1
  856. package/lib/node/util/promiseTimeout.js +9 -0
  857. package/lib/node/velocityClient.d.ts +3323 -216
  858. package/lib/node/velocityClient.d.ts.map +1 -1
  859. package/lib/node/velocityClient.js +3428 -249
  860. package/lib/node/wallet.d.ts +37 -0
  861. package/lib/node/wallet.d.ts.map +1 -1
  862. package/lib/node/wallet.js +37 -0
  863. package/package.json +2 -1
  864. package/src/accounts/basicUserAccountSubscriber.ts +18 -0
  865. package/src/accounts/basicUserStatsAccountSubscriber.ts +18 -0
  866. package/src/accounts/bulkAccountLoader.ts +52 -0
  867. package/src/accounts/bulkUserStatsSubscription.ts +9 -2
  868. package/src/accounts/bulkUserSubscription.ts +8 -2
  869. package/src/accounts/customizedCadenceBulkAccountLoader.ts +37 -0
  870. package/src/accounts/fetch.ts +59 -2
  871. package/src/accounts/grpcAccountSubscriber.ts +30 -0
  872. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +16 -0
  873. package/src/accounts/grpcMultiAccountSubscriber.ts +121 -38
  874. package/src/accounts/grpcMultiUserAccountSubscriber.ts +49 -11
  875. package/src/accounts/grpcProgramAccountSubscriber.ts +33 -0
  876. package/src/accounts/grpcUserAccountSubscriber.ts +15 -0
  877. package/src/accounts/grpcUserStatsAccountSubscriber.ts +15 -0
  878. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +41 -0
  879. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +160 -1
  880. package/src/accounts/laserProgramAccountSubscriber.ts +34 -0
  881. package/src/accounts/oneShotUserAccountSubscriber.ts +19 -0
  882. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +19 -0
  883. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +31 -0
  884. package/src/accounts/pollingOracleAccountSubscriber.ts +21 -2
  885. package/src/accounts/pollingTokenAccountSubscriber.ts +22 -0
  886. package/src/accounts/pollingUserAccountSubscriber.ts +32 -0
  887. package/src/accounts/pollingUserStatsAccountSubscriber.ts +22 -0
  888. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +84 -1
  889. package/src/accounts/testBulkAccountLoader.ts +8 -0
  890. package/src/accounts/types.ts +149 -0
  891. package/src/accounts/utils.ts +42 -24
  892. package/src/accounts/webSocketAccountSubscriber.ts +41 -0
  893. package/src/accounts/webSocketAccountSubscriberV2.ts +31 -23
  894. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +27 -0
  895. package/src/accounts/webSocketProgramAccountSubscriber.ts +36 -0
  896. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +26 -0
  897. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +21 -0
  898. package/src/accounts/webSocketUserAccountSubscriber.ts +26 -0
  899. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +20 -0
  900. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +127 -2
  901. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +110 -0
  902. package/src/accounts/websocketProgramUserAccountSubscriber.ts +33 -0
  903. package/src/addresses/marketAddresses.ts +10 -0
  904. package/src/addresses/pda.ts +228 -12
  905. package/src/adminClient.ts +2184 -4
  906. package/src/auctionSubscriber/auctionSubscriber.ts +15 -0
  907. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +19 -0
  908. package/src/auctionSubscriber/index.ts +6 -0
  909. package/src/auctionSubscriber/types.ts +7 -0
  910. package/src/blockhashSubscriber/BlockhashSubscriber.ts +33 -0
  911. package/src/blockhashSubscriber/index.ts +5 -0
  912. package/src/blockhashSubscriber/types.ts +5 -4
  913. package/src/clock/clockSubscriber.ts +24 -0
  914. package/src/config.ts +109 -22
  915. package/src/constants/numericConstants.ts +70 -0
  916. package/src/constants/perpMarkets.ts +45 -960
  917. package/src/constants/spotMarkets.ts +23 -793
  918. package/src/constants/txConstants.ts +1 -0
  919. package/src/core/VelocityCore.ts +286 -8
  920. package/src/core/instructions/deposit.ts +22 -0
  921. package/src/core/instructions/fill.ts +17 -0
  922. package/src/core/instructions/funding.ts +12 -0
  923. package/src/core/instructions/liquidation.ts +18 -0
  924. package/src/core/instructions/orders.ts +28 -0
  925. package/src/core/instructions/perpOrders.ts +106 -0
  926. package/src/core/instructions/settlement.ts +14 -0
  927. package/src/core/instructions/trigger.ts +15 -0
  928. package/src/core/instructions/withdraw.ts +21 -0
  929. package/src/core/remainingAccounts.ts +47 -3
  930. package/src/core/signedMsg.ts +38 -0
  931. package/src/decode/customCoder.ts +46 -3
  932. package/src/decode/user.ts +22 -0
  933. package/src/dlob/DLOB.ts +668 -97
  934. package/src/dlob/DLOBNode.ts +98 -6
  935. package/src/dlob/DLOBSubscriber.ts +49 -12
  936. package/src/dlob/NodeList.ts +69 -0
  937. package/src/dlob/orderBookLevels.ts +108 -14
  938. package/src/dlob/types.ts +15 -0
  939. package/src/events/eventList.ts +14 -0
  940. package/src/events/eventSubscriber.ts +100 -19
  941. package/src/events/eventsServerLogProvider.ts +28 -0
  942. package/src/events/fetchLogs.ts +52 -2
  943. package/src/events/parse.ts +23 -0
  944. package/src/events/pollingLogProvider.ts +24 -0
  945. package/src/events/sort.ts +12 -0
  946. package/src/events/txEventCache.ts +19 -7
  947. package/src/events/types.ts +131 -11
  948. package/src/events/webSocketLogProvider.ts +29 -0
  949. package/src/factory/oracleClient.ts +2 -2
  950. package/src/idl/velocity.json +50 -1
  951. package/src/idl/velocity.ts +50 -1
  952. package/src/keypair.ts +8 -0
  953. package/src/marginCalculation.ts +153 -2
  954. package/src/math/amm.ts +371 -36
  955. package/src/math/auction.ts +139 -30
  956. package/src/math/bankruptcy.ts +104 -1
  957. package/src/math/builder.ts +74 -8
  958. package/src/math/conversion.ts +21 -0
  959. package/src/math/exchangeStatus.ts +125 -0
  960. package/src/math/funding.ts +63 -23
  961. package/src/math/insurance.ts +62 -0
  962. package/src/math/liquidation.ts +227 -17
  963. package/src/math/margin.ts +80 -14
  964. package/src/math/market.ts +148 -17
  965. package/src/math/oracles.ts +124 -0
  966. package/src/math/orders.ts +144 -18
  967. package/src/math/position.ts +80 -33
  968. package/src/math/repeg.ts +48 -10
  969. package/src/math/spotBalance.ts +252 -12
  970. package/src/math/spotMarket.ts +36 -3
  971. package/src/math/spotPosition.ts +72 -0
  972. package/src/math/state.ts +32 -1
  973. package/src/math/superStake.ts +126 -3
  974. package/src/math/tiers.ts +29 -0
  975. package/src/math/trade.ts +125 -55
  976. package/src/math/utils.ts +71 -9
  977. package/src/memcmp.ts +131 -7
  978. package/src/oracles/oracleClientCache.ts +16 -0
  979. package/src/oracles/oracleId.ts +39 -6
  980. package/src/oracles/prelaunchOracleClient.ts +20 -0
  981. package/src/oracles/pythClient.ts +32 -1
  982. package/src/oracles/pythLazerClient.ts +35 -1
  983. package/src/oracles/quoteAssetOracleClient.ts +18 -0
  984. package/src/oracles/strictOraclePrice.ts +21 -0
  985. package/src/oracles/types.ts +45 -0
  986. package/src/oracles/utils.ts +20 -0
  987. package/src/orderParams.ts +42 -4
  988. package/src/orderSubscriber/OrderSubscriber.ts +74 -2
  989. package/src/orderSubscriber/PollingSubscription.ts +11 -0
  990. package/src/orderSubscriber/WebsocketSubscription.ts +18 -0
  991. package/src/orderSubscriber/grpcSubscription.ts +16 -0
  992. package/src/orderSubscriber/types.ts +9 -0
  993. package/src/priorityFee/averageOverSlotsStrategy.ts +1 -0
  994. package/src/priorityFee/averageStrategy.ts +1 -0
  995. package/src/priorityFee/ewmaStrategy.ts +10 -0
  996. package/src/priorityFee/heliusPriorityFeeMethod.ts +13 -2
  997. package/src/priorityFee/maxOverSlotsStrategy.ts +1 -0
  998. package/src/priorityFee/maxStrategy.ts +1 -0
  999. package/src/priorityFee/priorityFeeSubscriber.ts +39 -0
  1000. package/src/priorityFee/priorityFeeSubscriberMap.ts +21 -2
  1001. package/src/priorityFee/solanaPriorityFeeMethod.ts +12 -0
  1002. package/src/priorityFee/types.ts +33 -15
  1003. package/src/priorityFee/velocityPriorityFeeMethod.ts +11 -0
  1004. package/src/slot/SlotSubscriber.ts +18 -0
  1005. package/src/slot/SlothashSubscriber.ts +27 -1
  1006. package/src/swift/swiftOrderSubscriber.ts +2 -2
  1007. package/src/tokenFaucet.ts +10 -7
  1008. package/src/tx/baseTxSender.ts +185 -5
  1009. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +12 -0
  1010. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +15 -0
  1011. package/src/tx/blockhashFetcher/types.ts +4 -0
  1012. package/src/tx/fastSingleTxSender.ts +58 -4
  1013. package/src/tx/forwardOnlyTxSender.ts +48 -0
  1014. package/src/tx/reportTransactionError.ts +18 -6
  1015. package/src/tx/retryTxSender.ts +40 -0
  1016. package/src/tx/txHandler.ts +146 -35
  1017. package/src/tx/txParamProcessor.ts +47 -0
  1018. package/src/tx/types.ts +46 -0
  1019. package/src/tx/utils.ts +26 -0
  1020. package/src/tx/whileValidTxSender.ts +82 -0
  1021. package/src/types.ts +783 -22
  1022. package/src/user.ts +869 -110
  1023. package/src/userMap/PollingSubscription.ts +16 -2
  1024. package/src/userMap/WebsocketSubscription.ts +9 -0
  1025. package/src/userMap/grpcSubscription.ts +8 -0
  1026. package/src/userMap/referrerMap.ts +92 -3
  1027. package/src/userMap/revenueShareEscrowMap.ts +38 -11
  1028. package/src/userMap/userMap.ts +82 -4
  1029. package/src/userMap/userMapConfig.ts +23 -10
  1030. package/src/userMap/userStatsMap.ts +22 -0
  1031. package/src/userName.ts +16 -0
  1032. package/src/userStats.ts +28 -1
  1033. package/src/util/TransactionConfirmationManager.ts +33 -0
  1034. package/src/util/chainClock.ts +24 -0
  1035. package/src/util/computeUnits.ts +32 -0
  1036. package/src/util/digest.ts +17 -0
  1037. package/src/util/ed25519Utils.ts +12 -2
  1038. package/src/util/promiseTimeout.ts +9 -0
  1039. package/src/velocityClient.ts +3456 -254
  1040. package/src/wallet.ts +37 -0
  1041. package/tests/VelocityCore/builder_escrow.test.ts +121 -0
  1042. package/tests/amm/test.ts +102 -0
  1043. package/tests/builder/builderFee.test.ts +42 -0
  1044. package/tests/dlob/helpers.ts +1 -0
  1045. package/tests/dlob/tickSizeStandardization.ts +545 -0
  1046. package/tests/exchangeStatus/test.ts +45 -0
  1047. package/tests/liquidation/test.ts +125 -0
  1048. package/tests/oracles/mmOracleGate.test.ts +379 -0
  1049. package/tests/oracles/pythPegSnap.test.ts +76 -0
  1050. package/tests/sdkParity/enumParity.test.ts +84 -0
  1051. package/tests/sdkParity/marginCategoryFill.test.ts +143 -0
  1052. package/tests/sdkParity/memcmpOffsets.test.ts +139 -0
  1053. package/tests/spot/test.ts +55 -0
  1054. package/tests/user/bankruptcy.ts +165 -0
  1055. package/tests/user/feeAndWithdrawLimits.ts +284 -0
  1056. package/tests/user/getMarginCalculation.ts +226 -1
  1057. package/tests/user/test.ts +8 -4
@@ -9,14 +9,14 @@
9
9
  * - Health factor and liquidation threshold checks.
10
10
  * - Subscribes to and caches the latest `User` account state from chain.
11
11
  *
12
- * To send instructions (deposit, place order, etc.) use {@link VelocityClient}.
13
- * For referral/volume stats see {@link UserStats} (userStats.ts).
12
+ * To send instructions (deposit, place order, etc.) use `VelocityClient`.
13
+ * For referral/volume stats see `UserStats` (userStats.ts).
14
14
  */
15
15
  import { PublicKey } from '@solana/web3.js';
16
16
  import { EventEmitter } from 'events';
17
17
  import StrictEventEmitter from 'strict-event-emitter-types';
18
18
  import { VelocityClient } from './velocityClient';
19
- import { HealthComponent, HealthComponents, MarginCategory, Order, PerpMarketAccount, PerpPosition, SpotPosition, UserAccount, UserStatus, UserStatsAccount, AccountLiquidatableStatus } from './types';
19
+ import { HealthComponent, HealthComponents, MarginCategory, Order, OrderParams, PerpMarketAccount, PerpPosition, SpotPosition, UserAccount, UserStatus, UserStatsAccount, AccountLiquidatableStatus } from './types';
20
20
  import { DataAndSlot, UserAccountEvents, UserAccountSubscriber } from './accounts/types';
21
21
  import { BN } from './isomorphic/anchor';
22
22
  import { MarketType, PositionDirection, SpotMarketAccount } from './types';
@@ -31,24 +31,29 @@ export declare class User {
31
31
  accountSubscriber: UserAccountSubscriber;
32
32
  _isSubscribed: boolean;
33
33
  eventEmitter: StrictEventEmitter<EventEmitter, UserAccountEvents>;
34
+ /** True only when both `subscribe()` has completed and the underlying `accountSubscriber` itself reports subscribed. */
34
35
  get isSubscribed(): boolean;
35
36
  set isSubscribed(val: boolean);
37
+ /** Constructs a `User` for the account at `config.userAccountPublicKey`, wiring up the account subscriber selected by `config.accountSubscription` (`'websocket'`/`'polling'`/`'grpc'`/`'custom'`). Does not fetch or subscribe — call `subscribe()` next. */
36
38
  constructor(config: UserConfig);
37
39
  /**
38
- * Subscribe to User state accounts
39
- * @returns SusbcriptionSuccess result
40
+ * Subscribes to this `User` account (websocket/polling/gRPC/custom per
41
+ * `UserConfig.accountSubscription`) and awaits the initial account fetch.
42
+ * Must resolve before any `get*`/margin/PnL accessor is called — those
43
+ * throw `NotSubscribedError` until this has completed.
44
+ * @param userAccount Optional pre-fetched account to seed the subscriber with, skipping the initial RPC fetch.
45
+ * @returns True once the underlying subscriber reports subscribed.
40
46
  */
41
47
  subscribe(userAccount?: UserAccount): Promise<boolean>;
42
- /**
43
- * Forces the accountSubscriber to fetch account updates from rpc
44
- */
48
+ /** Forces the account subscriber to re-fetch the `User` account from RPC (bypassing any push/poll cadence). */
45
49
  fetchAccounts(): Promise<void>;
50
+ /** Removes all event listeners and tears down the account subscription. */
46
51
  unsubscribe(): Promise<void>;
47
52
  /**
48
53
  * Returns the cached user account.
49
54
  *
50
55
  * - **Throws** `NotSubscribedError` if the subscriber has not been subscribed
51
- * yet — reading the account before {@link subscribe} resolves is a
56
+ * yet — reading the account before `subscribe()` resolves is a
52
57
  * programming error, not a missing-account condition.
53
58
  * - Returns `undefined` when subscribed but no account was found on chain.
54
59
  * Because `subscribe()` awaits the initial fetch, an `undefined` here means
@@ -57,24 +62,46 @@ export declare class User {
57
62
  */
58
63
  getUserAccount(): UserAccount | undefined;
59
64
  /**
60
- * Like {@link getUserAccount} but throws instead of returning `undefined`
65
+ * Like `getUserAccount` but throws instead of returning `undefined`
61
66
  * when the account was not found. Use at call sites that structurally
62
67
  * require the account to exist. (Still propagates `NotSubscribedError` when
63
68
  * called before subscribing.)
64
69
  *
65
- * Delegates to {@link getUserAccount} (rather than the subscriber directly)
70
+ * Delegates to `getUserAccount` (rather than the subscriber directly)
66
71
  * so callers that override `getUserAccount` see the override here too.
72
+ * @returns The current `UserAccount`.
67
73
  */
68
74
  getUserAccountOrThrow(): UserAccount;
75
+ /**
76
+ * Bypasses the cached subscriber state and force-fetches the `User` account
77
+ * directly from the RPC (via `fetchAccounts`), then returns the freshly
78
+ * cached value. Useful right after sending a transaction, when the
79
+ * websocket/polling subscriber may not yet have observed the update.
80
+ * @returns The freshly fetched `UserAccount`, or `undefined` if the account does not exist on chain.
81
+ */
69
82
  forceGetUserAccount(): Promise<UserAccount | undefined>;
83
+ /**
84
+ * Returns the cached user account together with the slot at which it was
85
+ * last observed. Same `undefined`/`NotSubscribedError` contract as `getUserAccount`.
86
+ */
70
87
  getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined;
71
88
  /**
72
- * Like {@link getUserAccountAndSlot} but throws instead of returning
89
+ * Like `getUserAccountAndSlot` but throws instead of returning
73
90
  * `undefined` when the account was not found. Use at call sites that
74
91
  * structurally require the account to exist. (Still propagates
75
92
  * `NotSubscribedError` when called before subscribing.)
76
93
  */
77
94
  getUserAccountAndSlotOrThrow(): DataAndSlot<UserAccount>;
95
+ /**
96
+ * Finds the perp position for `marketIndex` on an explicit `userAccount`
97
+ * snapshot rather than the cached account. Only matches "active" positions
98
+ * (see `getActivePerpPositionsForUserAccount`) — a market the user has never
99
+ * touched (or has fully closed and settled) returns `undefined` even though
100
+ * the on-chain array always has a fixed-size slot for every market.
101
+ * @param userAccount Account snapshot to search (does not have to be the subscribed account).
102
+ * @param marketIndex Perp market index to look up.
103
+ * @returns The matching `PerpPosition`, or `undefined` if the user has no active position in that market.
104
+ */
78
105
  getPerpPositionForUserAccount(userAccount: UserAccount, marketIndex: number): PerpPosition | undefined;
79
106
  /**
80
107
  * Gets the user's current position for a given perp market. If the user has no position returns undefined
@@ -82,9 +109,31 @@ export declare class User {
82
109
  * @returns userPerpPosition
83
110
  */
84
111
  getPerpPosition(marketIndex: number): PerpPosition | undefined;
112
+ /**
113
+ * Like `getPerpPosition`, but returns a zeroed-out placeholder position
114
+ * (see `getEmptyPosition`) instead of `undefined` when the user has no
115
+ * active position in `marketIndex`. Convenient for math helpers that need a
116
+ * `PerpPosition` shape unconditionally (e.g. buying-power/leverage calcs).
117
+ */
85
118
  getPerpPositionOrEmpty(marketIndex: number): PerpPosition;
119
+ /**
120
+ * Like `getPerpPosition`, but throws instead of returning `undefined` when
121
+ * the user has no active position in `marketIndex`.
122
+ */
86
123
  getPerpPositionOrThrow(marketIndex: number): PerpPosition;
124
+ /**
125
+ * Like `getPerpPosition`, but also returns the slot at which the underlying
126
+ * `UserAccount` was observed.
127
+ */
87
128
  getPerpPositionAndSlot(marketIndex: number): DataAndSlot<PerpPosition | undefined>;
129
+ /**
130
+ * Finds the spot position for `marketIndex` on an explicit `userAccount`
131
+ * snapshot. Unlike `getPerpPositionForUserAccount`, this does not filter to
132
+ * "active" positions first — it returns whatever fixed-size slot entry
133
+ * exists for that market index, even if the position is empty/available.
134
+ * @param userAccount Account snapshot to search (does not have to be the subscribed account).
135
+ * @param marketIndex Spot market index to look up.
136
+ */
88
137
  getSpotPositionForUserAccount(userAccount: UserAccount, marketIndex: number): SpotPosition | undefined;
89
138
  /**
90
139
  * Gets the user's current position for a given spot market. If the user has no position returns undefined
@@ -92,58 +141,125 @@ export declare class User {
92
141
  * @returns userSpotPosition
93
142
  */
94
143
  getSpotPosition(marketIndex: number): SpotPosition | undefined;
144
+ /**
145
+ * Like `getSpotPosition`, but also returns the slot at which the underlying
146
+ * `UserAccount` was observed.
147
+ */
95
148
  getSpotPositionAndSlot(marketIndex: number): DataAndSlot<SpotPosition | undefined>;
149
+ /** Returns a zeroed-out (no deposit/borrow) placeholder `SpotPosition` for `marketIndex`. */
96
150
  getEmptySpotPosition(marketIndex: number): SpotPosition;
97
151
  /**
98
152
  * Returns the token amount for a given market. The spot market precision is based on the token mint decimals.
99
153
  * Positive if it is a deposit, negative if it is a borrow.
100
154
  *
101
155
  * @param marketIndex
156
+ * @returns Signed token amount, in the spot market's own token decimals (not QUOTE_PRECISION). `ZERO` if the user has no position in the market.
102
157
  */
103
158
  getTokenAmount(marketIndex: number): BN;
159
+ /** Returns a zeroed-out placeholder `PerpPosition` for `marketIndex` (no size, no orders, cross margin). */
104
160
  getEmptyPosition(marketIndex: number): PerpPosition;
161
+ /** Returns true if `position` has no size and no open orders (a market slot that can be treated as unused). */
105
162
  isPositionEmpty(position: PerpPosition): boolean;
163
+ /**
164
+ * Returns the isolated-margin quote deposit backing a given perp position,
165
+ * i.e. `PerpPosition.isolatedPositionScaledBalance` converted to a token
166
+ * amount. This is the collateral segregated to that single isolated
167
+ * position, separate from the user's cross-margin free collateral.
168
+ * @param perpMarketIndex
169
+ * @returns Quote token amount (the quote spot market's own decimals). `ZERO` if the user has no position or no isolated deposit in the market.
170
+ */
106
171
  getIsolatePerpPositionTokenAmount(perpMarketIndex: number): BN;
107
172
  /**
108
173
  * Returns the total USD value of deposits across all isolated perp positions.
174
+ * @returns Precision QUOTE_PRECISION (1e6).
109
175
  */
110
176
  getTotalIsolatedPositionDeposits(): BN;
177
+ /** Returns a shallow copy of `position`. Mutating the clone does not affect the cached account. */
111
178
  getClonedPosition(position: PerpPosition): PerpPosition;
179
+ /** Finds an order by its program-assigned `orderId` on an explicit `userAccount` snapshot. */
112
180
  getOrderForUserAccount(userAccount: UserAccount, orderId: number): Order | undefined;
113
181
  /**
182
+ * Finds an order in the cached `UserAccount` by its program-assigned `orderId`.
114
183
  * @param orderId
115
- * @returns Order
184
+ * @returns The matching `Order`, or `undefined` if no order with that id exists.
116
185
  */
117
186
  getOrder(orderId: number): Order | undefined;
187
+ /** Like `getOrder`, but also returns the slot at which the underlying `UserAccount` was observed. */
118
188
  getOrderAndSlot(orderId: number): DataAndSlot<Order | undefined>;
189
+ /**
190
+ * Finds an order by its caller-assigned `userOrderId` (a client-chosen tag,
191
+ * distinct from the program-assigned `orderId`) on an explicit `userAccount`
192
+ * snapshot.
193
+ */
119
194
  getOrderByUserIdForUserAccount(userAccount: UserAccount, userOrderId: number): Order | undefined;
120
195
  /**
196
+ * Finds an order in the cached `UserAccount` by its caller-assigned
197
+ * `userOrderId` (a client-chosen tag, distinct from the program-assigned `orderId`).
121
198
  * @param userOrderId
122
- * @returns Order
199
+ * @returns The matching `Order`, or `undefined` if no order with that tag exists.
123
200
  */
124
201
  getOrderByUserOrderId(userOrderId: number): Order | undefined;
202
+ /** Like `getOrderByUserOrderId`, but also returns the slot at which the underlying `UserAccount` was observed. */
125
203
  getOrderByUserOrderIdAndSlot(userOrderId: number): DataAndSlot<Order | undefined>;
204
+ /**
205
+ * Filters an explicit `userAccount` snapshot's orders down to those with
206
+ * `OrderStatus.Open`.
207
+ * @returns `undefined` if `userAccount` is `undefined` (i.e. no account loaded), otherwise the array of open orders (possibly empty).
208
+ */
126
209
  getOpenOrdersForUserAccount(userAccount?: UserAccount): Order[] | undefined;
210
+ /** Returns all of the user's orders with `OrderStatus.Open`. Empty array (not `undefined`) if there are none or no account is loaded. */
127
211
  getOpenOrders(): Order[];
212
+ /** Like `getOpenOrders`, but also returns the slot at which the underlying `UserAccount` was observed. */
128
213
  getOpenOrdersAndSlot(): DataAndSlot<Order[]>;
214
+ /** Returns this `User`'s account address (does not require the account to be subscribed or to exist on chain). */
129
215
  getUserAccountPublicKey(): PublicKey;
216
+ /** Checks directly via RPC (bypassing the subscriber cache) whether the `User` account exists on chain. */
130
217
  exists(): Promise<boolean>;
131
218
  /**
132
- * calculates the total open bids/asks in a perp market (including lps)
133
- * @returns : open bids
134
- * @returns : open asks
219
+ * Returns the position's total resting open-order bid/ask size in a perp market.
220
+ * @param marketIndex
221
+ * @returns Tuple of `[openBids, openAsks]`, both `BASE_PRECISION` (1e9). Throws (via `getPerpPositionOrThrow`) if the user has no active position in `marketIndex`.
135
222
  */
136
223
  getPerpBidAsks(marketIndex: number): [BN, BN];
137
224
  /**
138
225
  * calculates Buying Power = free collateral / initial margin ratio
139
- * @returns : Precision QUOTE_PRECISION
226
+ *
227
+ * For `positionType: 'isolated'`, the buying power is capped by the
228
+ * lesser of (a) the user's cross free collateral and (b) the free quote
229
+ * asset value in the perp's quote spot market — mirroring that an isolated
230
+ * position can only draw down as much quote collateral as is actually
231
+ * available to isolate into it.
232
+ * @param marketIndex Perp market to size buying power for.
233
+ * @param collateralBuffer Amount (QUOTE_PRECISION) subtracted from free collateral before sizing, e.g. to reserve for fees. Defaults to zero.
234
+ * @param maxMarginRatio Optional override for the max margin ratio component (see `resolveMaxMarginRatio`); defaults to the position's/user's configured ratio.
235
+ * @param positionType Whether to size for a cross or isolated-margin position. Defaults to `'cross'`.
236
+ * @returns Precision QUOTE_PRECISION (1e6).
140
237
  */
141
238
  getPerpBuyingPower(marketIndex: number, collateralBuffer?: BN, maxMarginRatio?: number | undefined, positionType?: 'isolated' | 'cross'): BN;
142
239
  private resolveMaxMarginRatio;
240
+ /**
241
+ * Converts a free-collateral amount directly into buying power for a perp
242
+ * market, given the (hypothetical) resulting base position size — used
243
+ * internally so the margin ratio (which can vary with position size via the
244
+ * IMF factor) reflects the post-trade size rather than the current size.
245
+ * @param marketIndex
246
+ * @param freeCollateral QUOTE_PRECISION (1e6).
247
+ * @param baseAssetAmount Base size, BASE_PRECISION (1e9), used only to select the applicable margin ratio.
248
+ * @param perpMarketMaxMarginRatio Optional max-margin-ratio override, see `resolveMaxMarginRatio`.
249
+ * @returns Precision QUOTE_PRECISION (1e6).
250
+ */
143
251
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex: number, freeCollateral: BN, baseAssetAmount: BN, perpMarketMaxMarginRatio?: number | undefined): BN;
144
252
  /**
145
253
  * calculates Free Collateral = Total collateral - margin requirement
146
- * @returns : Precision QUOTE_PRECISION
254
+ *
255
+ * When `perpMarketIndex` is provided, returns the free collateral scoped to
256
+ * that market's isolated margin bucket (the isolated quote deposit plus its
257
+ * unrealized PnL, minus its own margin requirement) rather than the user's
258
+ * cross-margin free collateral. If the user has no isolated position open in
259
+ * that market, returns `ZERO` rather than throwing.
260
+ * @param marginCategory `'Initial'` or `'Maintenance'`. Defaults to `'Initial'`; `'Initial'` also enables strict (TWAP-bounded) oracle pricing.
261
+ * @param perpMarketIndex Optional isolated perp market to scope the calculation to; omit for cross margin.
262
+ * @returns Precision QUOTE_PRECISION (1e6). Can be negative (deficit).
147
263
  */
148
264
  getFreeCollateral(marginCategory?: MarginCategory, perpMarketIndex?: number): BN;
149
265
  /**
@@ -153,134 +269,330 @@ export declare class User {
153
269
  /**
154
270
  * Calculates the margin requirement based on the specified parameters.
155
271
  *
272
+ * When `perpMarketIndex` is passed, returns the isolated margin requirement
273
+ * for that market's isolated position only (`ZERO` if none exists) rather
274
+ * than the cross-margin requirement. `liquidationBuffer`, when non-zero,
275
+ * selects the buffered variant (`marginRequirementPlusBuffer` /
276
+ * `MarginContext.liquidation`), which pads the requirement to build in the
277
+ * state account's `liquidationMarginBufferRatio` — the same buffer keepers
278
+ * apply so a position doesn't get flagged for liquidation and immediately
279
+ * clear again.
280
+ *
156
281
  * @param marginCategory - The category of margin to calculate ('Initial' or 'Maintenance').
157
- * @param liquidationBuffer - Optional buffer amount to consider during liquidation scenarios.
158
- * @param strict - Optional flag to enforce strict margin calculations.
159
- * @param includeOpenOrders - Optional flag to include open orders in the margin calculation.
160
- * @param perpMarketIndex - Optional index of the perpetual market. Required if marginType is 'Isolated'.
282
+ * @param liquidationBuffer - Optional buffer amount (MARGIN_PRECISION, 1e4, added to the margin ratio) to consider during liquidation scenarios.
283
+ * @param strict - Optional flag to enforce strict (TWAP-bounded) oracle pricing.
284
+ * @param includeOpenOrders - Optional flag to include open orders' worst-case margin impact.
285
+ * @param perpMarketIndex - Optional index of the perpetual market. Scopes the result to that market's isolated position.
161
286
  *
162
- * @returns The calculated margin requirement as a BN (BigNumber).
287
+ * @returns The calculated margin requirement, QUOTE_PRECISION (1e6).
163
288
  */
164
289
  getMarginRequirement(marginCategory: MarginCategory, liquidationBuffer?: BN, strict?: boolean, includeOpenOrders?: boolean, perpMarketIndex?: number): BN;
165
290
  /**
166
- * @returns The initial margin requirement in USDC. : QUOTE_PRECISION
291
+ * Initial margin requirement the collateral needed to open/maintain a
292
+ * position at initial (as opposed to maintenance) margin ratios, using
293
+ * strict (TWAP-bounded) oracle pricing. This is what gates new orders and
294
+ * increases in leverage.
295
+ * @param perpMarketIndex Optional isolated perp market to scope to; omit for the cross-margin requirement.
296
+ * @returns The initial margin requirement in USDC. : QUOTE_PRECISION (1e6)
167
297
  */
168
298
  getInitialMarginRequirement(perpMarketIndex?: number): BN;
169
299
  /**
170
- * @returns The maintenance margin requirement in USDC. : QUOTE_PRECISION
300
+ * Maintenance margin requirement the minimum collateral below which the
301
+ * position becomes eligible for liquidation. Uses non-strict oracle pricing
302
+ * and includes open orders' worst-case impact by default.
303
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4) added to the margin ratio, mirroring the state account's `liquidationMarginBufferRatio`.
304
+ * @param perpMarketIndex Optional isolated perp market to scope to; omit for the cross-margin requirement.
305
+ * @returns The maintenance margin requirement in USDC. : QUOTE_PRECISION (1e6)
171
306
  */
172
307
  getMaintenanceMarginRequirement(liquidationBuffer?: BN, perpMarketIndex?: number): BN;
308
+ /**
309
+ * Filters an explicit `userAccount` snapshot's fixed-size perp position
310
+ * array down to slots that are actually "active": nonzero base or quote
311
+ * amount, an outstanding open order count, or a nonzero isolated-margin
312
+ * quote deposit (a position can be flat but still isolated-funded).
313
+ */
173
314
  getActivePerpPositionsForUserAccount(userAccount: UserAccount): PerpPosition[];
315
+ /** Returns the cached account's active perp positions. See `getActivePerpPositionsForUserAccount` for the activity criteria. */
174
316
  getActivePerpPositions(): PerpPosition[];
317
+ /** Like `getActivePerpPositions`, but also returns the slot at which the underlying `UserAccount` was observed. */
175
318
  getActivePerpPositionsAndSlot(): DataAndSlot<PerpPosition[]>;
319
+ /** Filters an explicit `userAccount` snapshot's spot positions to those that are not `isSpotPositionAvailable` (i.e. have a nonzero balance, orders, or cumulative deposits). */
176
320
  getActiveSpotPositionsForUserAccount(userAccount: UserAccount): SpotPosition[];
321
+ /** Returns the cached account's active spot positions. See `getActiveSpotPositionsForUserAccount` for the activity criteria. */
177
322
  getActiveSpotPositions(): SpotPosition[];
323
+ /** Like `getActiveSpotPositions`, but also returns the slot at which the underlying `UserAccount` was observed. */
178
324
  getActiveSpotPositionsAndSlot(): DataAndSlot<SpotPosition[]>;
179
325
  /**
180
- * calculates unrealized position price pnl
181
- * @returns : Precision QUOTE_PRECISION
326
+ * Calculates unrealized position price PnL, summed across all active perp
327
+ * positions (or a single one if `marketIndex` is given).
328
+ *
329
+ * When `withWeightMarginCategory` is supplied, the PnL is asset-weighted
330
+ * for margin purposes: profitable positions are scaled down by
331
+ * `calculateUnrealizedAssetWeight` (an unrealized gain is a less-trusted
332
+ * asset than settled collateral), and — for `'Initial'` margin specifically
333
+ * — the *per-position* weighted gain is additionally capped at
334
+ * `MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN` (**$100**, QUOTE_PRECISION), a
335
+ * safety guard against a single dangerously-configured or manipulated
336
+ * market inflating buying power. Losses are never capped, and a
337
+ * `liquidationBuffer` (if provided) further inflates negative PnL to
338
+ * mirror the on-chain liquidation-buffer treatment.
339
+ * @param withFunding If true, includes unsettled funding in each position's PnL.
340
+ * @param marketIndex Optional single perp market to scope to; omit to sum across all active positions.
341
+ * @param withWeightMarginCategory Optional `'Initial'` or `'Maintenance'` — applies the asset-weighting (and, for `'Initial'`, the $100-per-position cap) described above. Omit for raw, unweighted PnL.
342
+ * @param strict Use the worse of live oracle price vs 5-minute TWAP per position (gains use the lower price, losses use the higher price). Defaults to false.
343
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4) that further penalizes negative PnL; only applied when `withWeightMarginCategory` is set.
344
+ * @returns : Precision QUOTE_PRECISION (1e6)
182
345
  */
183
346
  getUnrealizedPNL(withFunding?: boolean, marketIndex?: number, withWeightMarginCategory?: MarginCategory, strict?: boolean, liquidationBuffer?: BN): BN;
184
347
  /**
185
- * calculates unrealized funding payment pnl
186
- * @returns : Precision QUOTE_PRECISION
348
+ * Calculates unrealized funding payment PnL — the funding accrued since
349
+ * each position's `lastCumulativeFundingRate` was last settled, not yet
350
+ * reflected in `quoteAssetAmount`.
351
+ * @param marketIndex Optional single perp market to scope to; omit to sum across all positions.
352
+ * @returns : Precision QUOTE_PRECISION (1e6)
187
353
  */
188
354
  getUnrealizedFundingPNL(marketIndex?: number): BN;
355
+ /**
356
+ * Computes the combined weighted asset value and weighted liability value
357
+ * across the user's spot positions (worst-case, including open-order
358
+ * exposure by default), plus the net quote balance. This is the core spot
359
+ * side of the margin system that `getTotalCollateral`/`getMarginRequirement`
360
+ * build on.
361
+ * @param marketIndex Optional single spot market to scope to; omit to sum across all spot markets.
362
+ * @param marginCategory `'Initial'` or `'Maintenance'` asset/liability weights; omit for unweighted (100%) values.
363
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4) added to the liability weight side.
364
+ * @param includeOpenOrders If false, ignores open bids/asks and only counts the current balance (faster, less conservative).
365
+ * @param strict Use the worse of live oracle price vs 5-minute TWAP. Defaults to false.
366
+ * @param now Unix timestamp (seconds) used for TWAP staleness when `strict` is set; defaults to current time.
367
+ * @returns `{ totalAssetValue, totalLiabilityValue }`, both QUOTE_PRECISION (1e6) and non-negative.
368
+ */
189
369
  getSpotMarketAssetAndLiabilityValue(marketIndex?: number, marginCategory?: MarginCategory, liquidationBuffer?: BN, includeOpenOrders?: boolean, strict?: boolean, now?: BN): {
190
370
  totalAssetValue: BN;
191
371
  totalLiabilityValue: BN;
192
372
  };
373
+ /** Convenience wrapper around `getSpotMarketAssetAndLiabilityValue` returning only `totalLiabilityValue`. See that method for parameter semantics. Returns QUOTE_PRECISION (1e6). */
193
374
  getSpotMarketLiabilityValue(marketIndex?: number, marginCategory?: MarginCategory, liquidationBuffer?: BN, includeOpenOrders?: boolean, strict?: boolean, now?: BN): BN;
375
+ /** Thin wrapper around the `math/spotBalance` `getSpotLiabilityValue` helper that supplies the user's `maxMarginRatio`. Returns QUOTE_PRECISION (1e6), negative. */
194
376
  getSpotLiabilityValue(tokenAmount: BN, strictOraclePrice: StrictOraclePrice, spotMarketAccount: SpotMarketAccount, marginCategory?: MarginCategory, liquidationBuffer?: BN): BN;
377
+ /** Convenience wrapper around `getSpotMarketAssetAndLiabilityValue` returning only `totalAssetValue`. See that method for parameter semantics. Returns QUOTE_PRECISION (1e6), non-negative. */
195
378
  getSpotMarketAssetValue(marketIndex?: number, marginCategory?: MarginCategory, includeOpenOrders?: boolean, strict?: boolean, now?: BN): BN;
379
+ /** Thin wrapper around the `math/spotBalance` `getSpotAssetValue` helper that supplies the user's `maxMarginRatio`. Returns QUOTE_PRECISION (1e6), non-negative. */
196
380
  getSpotAssetValue(tokenAmount: BN, strictOraclePrice: StrictOraclePrice, spotMarketAccount: SpotMarketAccount, marginCategory?: MarginCategory): BN;
381
+ /** Net spot value (`totalAssetValue - totalLiabilityValue`) for a single spot market. See `getSpotMarketAssetAndLiabilityValue` for parameter semantics. Returns QUOTE_PRECISION (1e6), can be negative. */
197
382
  getSpotPositionValue(marketIndex: number, marginCategory?: MarginCategory, includeOpenOrders?: boolean, strict?: boolean, now?: BN): BN;
383
+ /**
384
+ * Net spot value (`totalAssetValue - totalLiabilityValue`) across all spot
385
+ * markets combined.
386
+ * @param withWeightMarginCategory Optional `'Initial'`/`'Maintenance'` weighting; omit for unweighted values.
387
+ * @returns Precision QUOTE_PRECISION (1e6), can be negative.
388
+ */
198
389
  getNetSpotMarketValue(withWeightMarginCategory?: MarginCategory): BN;
199
390
  /**
200
391
  * calculates TotalCollateral: collateral + unrealized pnl
201
392
  * @returns : Precision QUOTE_PRECISION
202
393
  */
394
+ /**
395
+ * Calculates Total Collateral: net spot collateral value plus weighted
396
+ * unrealized perp PnL (see `getUnrealizedPNL`'s `$100`-per-position cap
397
+ * under `'Initial'` margin). This is the numerator side of the margin
398
+ * system; `getFreeCollateral`/`getMarginRequirement` are derived from it.
399
+ *
400
+ * When `perpMarketIndex` is provided, returns the isolated total collateral
401
+ * for that market's isolated position bucket instead of the cross-margin
402
+ * total — and **throws** if the user has no isolated margin calculation for
403
+ * that market (unlike `getFreeCollateral`, which swallows the same case and
404
+ * returns `ZERO`).
405
+ * @param marginCategory `'Initial'` or `'Maintenance'`. Defaults to `'Initial'`.
406
+ * @param strict Use TWAP-bounded oracle pricing. Defaults to false.
407
+ * @param includeOpenOrders Include open orders' worst-case impact. Defaults to true.
408
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4); selects the buffered collateral variant when non-zero.
409
+ * @param perpMarketIndex Optional isolated perp market to scope to.
410
+ * @returns Precision QUOTE_PRECISION (1e6).
411
+ */
203
412
  getTotalCollateral(marginCategory?: MarginCategory, strict?: boolean, includeOpenOrders?: boolean, liquidationBuffer?: BN, perpMarketIndex?: number): BN;
413
+ /**
414
+ * Builds the liquidation-buffer map to pass into margin calculations while
415
+ * a liquidation is in progress: `'cross'` is set to the state account's
416
+ * `liquidationMarginBufferRatio` if cross margin is being liquidated, and
417
+ * each isolated perp position currently flagged `BeingLiquidated` or
418
+ * `Bankruptcy` gets the same buffer under its market index. Positions not
419
+ * currently being liquidated are omitted (no buffer applied).
420
+ * @returns Map from `'cross'` or a perp market index to the buffer amount (MARGIN_PRECISION, 1e4).
421
+ */
204
422
  getLiquidationBuffer(): Map<number | 'cross', BN>;
205
423
  /**
206
- * calculates User Health by comparing total collateral and maint. margin requirement
207
- * @returns : number (value from [0, 100])
424
+ * Calculates a user's health score by comparing total collateral against
425
+ * the maintenance margin requirement: `100 * (1 - maintenanceMarginReq / totalCollateral)`,
426
+ * clamped to `[0, 100]` and rounded to the nearest integer. `100` means no
427
+ * maintenance requirement (or a requirement of zero with non-negative
428
+ * collateral); `0` means at or past the maintenance threshold (liquidatable)
429
+ * or that collateral is non-positive.
430
+ *
431
+ * Short-circuits to `0` if the relevant scope is already flagged as being
432
+ * liquidated: cross margin via `isCrossMarginBeingLiquidated` (when
433
+ * `perpMarketIndex` is omitted), or the specific isolated position via
434
+ * `isIsolatedPositionBeingLiquidated` (when `perpMarketIndex` is given).
435
+ * @param perpMarketIndex Optional isolated perp market to scope health to; omit for the cross-margin account's health.
436
+ * @returns Health, an integer in `[0, 100]`.
208
437
  */
209
438
  getHealth(perpMarketIndex?: number): number;
439
+ /**
440
+ * Computes a single perp position's margin-weighted liability value: worst-case
441
+ * (or current, if `includeOpenOrders` is false) base amount, valued at the
442
+ * oracle price (or `expiryPrice` if the market is in settlement, which also
443
+ * zeroes the margin ratio), scaled by the applicable margin ratio for
444
+ * `marginCategory`. Underlies `getPerpMarketLiabilityValue`,
445
+ * `getTotalPerpPositionLiability`, and the leverage/liquidation-price math.
446
+ * @returns Precision QUOTE_PRECISION (1e6); unweighted (raw notional, no margin ratio applied) if `marginCategory` is omitted.
447
+ */
210
448
  calculateWeightedPerpPositionLiability(perpPosition: PerpPosition, marginCategory?: MarginCategory, liquidationBuffer?: BN, includeOpenOrders?: boolean, strict?: boolean): BN;
211
449
  /**
212
- * calculates position value of a single perp market in margin system
213
- * @returns : Precision QUOTE_PRECISION
450
+ * Margin-weighted liability value of a single perp position. Thin wrapper
451
+ * around `calculateWeightedPerpPositionLiability` for the position in
452
+ * `marketIndex`; see that method for the worst-case/margin-ratio semantics.
453
+ * @param marketIndex
454
+ * @param marginCategory `'Initial'`/`'Maintenance'` margin ratio to apply; omit for the raw unweighted notional.
455
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4) added to the margin ratio.
456
+ * @param includeOpenOrders If true (recommended for margin checks), uses the worst-case base amount including open bids/asks.
457
+ * @param strict Use TWAP-bounded quote pricing. Defaults to false.
458
+ * @returns Precision QUOTE_PRECISION (1e6). Throws (via `getPerpPositionOrThrow`) if the user has no active position in `marketIndex`.
214
459
  */
215
460
  getPerpMarketLiabilityValue(marketIndex: number, marginCategory?: MarginCategory, liquidationBuffer?: BN, includeOpenOrders?: boolean, strict?: boolean): BN;
216
461
  /**
217
- * calculates sum of position value across all positions in margin system
218
- * @returns : Precision QUOTE_PRECISION
462
+ * Sums `calculateWeightedPerpPositionLiability` across every active perp
463
+ * position the perp side of the margin requirement (see `getMarginRequirement`).
464
+ * @param marginCategory `'Initial'`/`'Maintenance'` margin ratio to apply; omit for the raw unweighted notional.
465
+ * @param liquidationBuffer Optional buffer (MARGIN_PRECISION, 1e4) added to the margin ratio.
466
+ * @param includeOpenOrders If true, uses each position's worst-case base amount including open bids/asks.
467
+ * @param strict Use TWAP-bounded quote pricing. Defaults to false.
468
+ * @returns Precision QUOTE_PRECISION (1e6).
219
469
  */
220
470
  getTotalPerpPositionLiability(marginCategory?: MarginCategory, liquidationBuffer?: BN, includeOpenOrders?: boolean, strict?: boolean): BN;
221
471
  /**
222
- * calculates position value based on oracle
223
- * @returns : Precision QUOTE_PRECISION
472
+ * Values a perp position's base-asset notional at a caller-supplied oracle
473
+ * price rather than looking one up internally — useful for pricing against
474
+ * a simulated/custom price. Returns `ZERO` (via `getPerpPositionOrEmpty`) if
475
+ * the user has no position in `marketIndex`.
476
+ * @param marketIndex
477
+ * @param oraclePriceData Price to value the position at, PRICE_PRECISION (1e6). Caller-supplied so callers can pass a custom/simulated price.
478
+ * @param includeOpenOrders If true, uses the worst-case base amount (including open bids/asks) instead of the current position size. Defaults to false.
479
+ * @returns Precision QUOTE_PRECISION (1e6).
224
480
  */
225
481
  getPerpPositionValue(marketIndex: number, oraclePriceData: Pick<OraclePriceData, 'price'>, includeOpenOrders?: boolean): BN;
226
482
  /**
227
- * calculates position liabiltiy value in margin system
228
- * @returns : Precision QUOTE_PRECISION
483
+ * Unweighted (no margin ratio applied) perp liability notional at a
484
+ * caller-supplied oracle price. Returns `ZERO` (via `getPerpPositionOrEmpty`)
485
+ * if the user has no position in `marketIndex`.
486
+ * @param marketIndex
487
+ * @param oraclePriceData Price to value the position at, PRICE_PRECISION (1e6).
488
+ * @param includeOpenOrders If true, uses the worst-case (including open bids/asks) liability value; otherwise just the current position. Defaults to false.
489
+ * @returns Precision QUOTE_PRECISION (1e6).
229
490
  */
230
491
  getPerpLiabilityValue(marketIndex: number, oraclePriceData: OraclePriceData, includeOpenOrders?: boolean): BN;
492
+ /** Returns `PositionDirection.LONG`/`SHORT` from the sign of `baseAssetAmount`, or `undefined` if the position is flat. */
231
493
  getPositionSide(currentPosition: Pick<PerpPosition, 'baseAssetAmount'>): PositionDirection | undefined;
232
494
  /**
233
495
  * calculates average exit price (optionally for closing up to 100% of position)
234
- * @returns : Precision PRICE_PRECISION
496
+ * @param position Position to estimate the close for.
497
+ * @param amountToClose Optional base amount (BASE_PRECISION, 1e9) to simulate closing; if omitted, closes the full position. Passing `ZERO` returns the current reserve price with zero PnL.
498
+ * @param useAMMClose If true, values the close against the AMM's own reserves (`calculateBaseAssetValue`) instead of the oracle-referenced value (`calculateBaseAssetValueWithOracle`). Defaults to false.
499
+ * @returns Tuple of `[exitPrice, pnl]` — exitPrice is PRICE_PRECISION (1e6), pnl is QUOTE_PRECISION (1e6).
235
500
  */
236
501
  getPositionEstimatedExitPriceAndPnl(position: PerpPosition, amountToClose?: BN, useAMMClose?: boolean): [BN, BN];
237
502
  /**
238
503
  * calculates current user leverage which is (total liability size) / (net asset value)
239
- * @returns : Precision TEN_THOUSAND
504
+ * @param includeOpenOrders If true, sizes the perp liability using worst-case open-order exposure. Defaults to true.
505
+ * @param perpMarketIndex Optional single isolated perp market to scope leverage to (uses that position's own isolated deposit + PnL as its asset value); omit for account-wide leverage.
506
+ * @returns : Precision TEN_THOUSAND (1e4, i.e. `10000` = 1x leverage). `ZERO` if net asset value is zero.
240
507
  */
241
508
  getLeverage(includeOpenOrders?: boolean, perpMarketIndex?: number): BN;
509
+ /** Combines the components from `getLeverageComponents` into a single leverage ratio: `(perpLiability + spotLiability) / (spotAsset + perpPnl - spotLiability)`. Returns TEN_THOUSAND (1e4) precision; `ZERO` if net asset value is zero. */
242
510
  calculateLeverageFromComponents({ perpLiabilityValue, perpPnl, spotAssetValue, spotLiabilityValue, }: {
243
511
  perpLiabilityValue: BN;
244
512
  perpPnl: BN;
245
513
  spotAssetValue: BN;
246
514
  spotLiabilityValue: BN;
247
515
  }): BN;
516
+ /**
517
+ * Gathers the four raw components (`perpLiabilityValue`, `perpPnl`,
518
+ * `spotAssetValue`, `spotLiabilityValue`, all QUOTE_PRECISION/1e6) that
519
+ * `calculateLeverageFromComponents` combines into a leverage ratio.
520
+ *
521
+ * When `perpMarketIndex` is given, scopes to a single isolated position:
522
+ * `spotAssetValue` becomes that position's isolated quote deposit and
523
+ * `spotLiabilityValue` is `ZERO` (isolated positions carry no spot
524
+ * liability of their own). Otherwise sums across the whole account, and
525
+ * folds in `getTotalIsolatedPositionDeposits` as additional spot asset
526
+ * value when `marginCategory` is unweighted.
527
+ */
248
528
  getLeverageComponents(includeOpenOrders?: boolean, marginCategory?: MarginCategory | undefined, perpMarketIndex?: number): {
249
529
  perpLiabilityValue: BN;
250
530
  perpPnl: BN;
251
531
  spotAssetValue: BN;
252
532
  spotLiabilityValue: BN;
253
533
  };
534
+ /**
535
+ * Returns true if the user's deposit position in `spotMarketAccount` is
536
+ * non-empty but worth less than `DUST_POSITION_SIZE` (QUOTE_PRECISION) —
537
+ * i.e. too small to be economically worth withdrawing/settling. Only
538
+ * evaluates deposits (returns false for borrows or an empty position).
539
+ * @throws If the user has no spot position slot for the market (should not happen for a valid `SpotMarketAccount`).
540
+ */
254
541
  isDustDepositPosition(spotMarketAccount: SpotMarketAccount): boolean;
542
+ /** Returns every spot market where the user holds a dust-sized deposit; see `isDustDepositPosition`. */
255
543
  getSpotMarketAccountsWithDustPosition(): SpotMarketAccount[];
544
+ /**
545
+ * Sum of the user's total perp position liability (worst-case, open orders
546
+ * included) and total spot liability value (worst-case, open orders included).
547
+ * @param marginCategory Optional `'Initial'`/`'Maintenance'` weighting; omit for unweighted values.
548
+ * @returns Precision QUOTE_PRECISION (1e6), non-negative.
549
+ */
256
550
  getTotalLiabilityValue(marginCategory?: MarginCategory): BN;
551
+ /**
552
+ * Sum of the user's total spot asset value and total unrealized perp PnL
553
+ * (with funding). When `marginCategory` is omitted (unweighted), also
554
+ * includes `getTotalIsolatedPositionDeposits`.
555
+ * @param marginCategory Optional `'Initial'`/`'Maintenance'` weighting; omit for unweighted values.
556
+ * @returns Precision QUOTE_PRECISION (1e6), non-negative.
557
+ */
257
558
  getTotalAssetValue(marginCategory?: MarginCategory): BN;
559
+ /**
560
+ * Unweighted net USD value of the account: net spot market value, plus
561
+ * unrealized (funding-inclusive) perp PnL, plus isolated position deposits.
562
+ * @returns Precision QUOTE_PRECISION (1e6), can be negative.
563
+ */
258
564
  getNetUsdValue(): BN;
259
565
  /**
260
- * Calculates the all time P&L of the user.
261
- *
262
- * Net withdraws + Net spot market value + Net unrealized P&L -
566
+ * Calculates the all-time P&L of the user: current net USD value
567
+ * (`getNetUsdValue`), plus lifetime total withdraws, minus lifetime total
568
+ * deposits. Equivalent to "everything the account is worth now, plus
569
+ * everything ever taken out, minus everything ever put in".
570
+ * @returns Precision QUOTE_PRECISION (1e6), can be negative.
263
571
  */
264
572
  getTotalAllTimePnl(): BN;
265
573
  /**
266
574
  * calculates max allowable leverage exceeding hitting requirement category
267
575
  * for large sizes where imf factor activates, result is a lower bound
268
- * @param marginCategory {Initial, Maintenance}
269
- * @returns : Precision TEN_THOUSAND
576
+ * @param marginCategory {Initial, Maintenance} — currently unused; the calculation always uses the max-tradeable-size ('Initial') buying power.
577
+ * @returns : Precision TEN_THOUSAND (1e4, i.e. `10000` = 1x)
270
578
  */
271
579
  getMaxLeverageForPerp(perpMarketIndex: number, _marginCategory?: MarginCategory): BN;
272
580
  /**
273
581
  * calculates max allowable leverage exceeding hitting requirement category
274
582
  * @param spotMarketIndex
275
- * @param direction
276
- * @returns : Precision TEN_THOUSAND
583
+ * @param direction Whether to simulate a long (deposit-increasing) or short (borrow-increasing) trade.
584
+ * @returns : Precision TEN_THOUSAND (1e4, i.e. `10000` = 1x)
277
585
  */
278
586
  getMaxLeverageForSpot(spotMarketIndex: number, direction: PositionDirection): BN;
279
587
  /**
280
588
  * calculates margin ratio: 1 / leverage
281
- * @returns : Precision TEN_THOUSAND
589
+ * @returns : Precision TEN_THOUSAND (1e4, i.e. `10000` = 100% margin ratio / 1x leverage). Returns `BN_MAX` if the account has no liabilities.
282
590
  */
283
591
  getMarginRatio(): BN;
592
+ /**
593
+ * @deprecated Use `getLiquidationStatuses` for the full cross + per-isolated-market breakdown. This method returns only the cross-margin status (plus the same isolated map, for convenience) for backward compatibility.
594
+ * @returns The cross-margin `AccountLiquidatableStatus`, plus `isolatedPositions` mapping each isolated perp market index to its own status.
595
+ */
284
596
  canBeLiquidated(): AccountLiquidatableStatus & {
285
597
  isolatedPositions: Map<number, AccountLiquidatableStatus>;
286
598
  };
@@ -289,52 +601,125 @@ export declare class User {
289
601
  * Map keys:
290
602
  * - 'cross' for cross margin
291
603
  * - marketIndex (number) for each isolated perp position
604
+ *
605
+ * Each `canBeLiquidated` compares maintenance total collateral against the
606
+ * maintenance margin requirement for that scope. If `marginCalc` is not
607
+ * supplied, one is computed under `'Maintenance'` with the account's
608
+ * current `getLiquidationBuffer()` applied — i.e. this defaults to the same
609
+ * buffered check the on-chain liquidation instructions use, not a bare
610
+ * maintenance-margin comparison.
611
+ * @param marginCalc Optional pre-computed `MarginCalculation` to reuse (avoids recomputing margin across repeated calls).
292
612
  */
293
613
  getLiquidationStatuses(marginCalc?: MarginCalculation): Map<'cross' | number, AccountLiquidatableStatus>;
614
+ /** Returns true if cross margin or any isolated perp position is currently flagged as being liquidated or bankrupt. */
294
615
  isBeingLiquidated(): boolean;
616
+ /** Returns true if the account-level `UserStatus` has `BEING_LIQUIDATED` or `BANKRUPT` set (cross margin, not per-isolated-position). */
295
617
  isCrossMarginBeingLiquidated(): boolean;
296
618
  /** Returns true if cross margin is currently below maintenance requirement (no buffer). */
297
619
  canCrossMarginBeLiquidated(marginCalc?: MarginCalculation): boolean;
620
+ /** Returns true if any active perp position has `PositionFlag.BeingLiquidated` or `PositionFlag.Bankruptcy` set. */
298
621
  hasIsolatedPositionBeingLiquidated(): boolean;
622
+ /** Returns true if the specific perp position in `perpMarketIndex` has `PositionFlag.BeingLiquidated` or `PositionFlag.Bankruptcy` set. False (not throw) if the user has no position there. */
299
623
  isIsolatedPositionBeingLiquidated(perpMarketIndex: number): boolean;
300
624
  /** Returns true if any isolated perp position is currently below its maintenance requirement (no buffer). */
301
625
  getLiquidatableIsolatedPositions(marginCalc?: MarginCalculation): number[];
626
+ /** Returns true if `isolatedMarginCalculation`'s collateral is below its margin requirement (no buffer). */
302
627
  canIsolatedPositionMarginBeLiquidated(isolatedMarginCalculation: IsolatedMarginCalculation): boolean;
628
+ /** Returns true if the account's `UserStatus` bitmask has `status` set. */
303
629
  hasStatus(status: UserStatus): boolean;
630
+ /** Returns true if the account's `UserStatus` has `BANKRUPT` set (equity insufficient to cover liabilities; awaiting bankruptcy resolution). */
304
631
  isBankrupt(): boolean;
305
632
  /**
306
633
  * Checks if any user position cumulative funding differs from respective market cumulative funding
307
- * @returns
634
+ * @returns True if at least one non-flat perp position has stale `lastCumulativeFundingRate` relative to the market's current long/short cumulative funding rate.
308
635
  */
309
636
  needsToSettleFundingPayment(): boolean;
310
637
  /**
311
- * Calculate the liquidation price of a spot position
312
- * @param marketIndex
313
- * @returns Precision : PRICE_PRECISION
638
+ * Calculate the liquidation price of a spot position — the oracle price at
639
+ * which maintenance free collateral would hit zero, extrapolating linearly
640
+ * from the current free collateral and the position's per-unit-price
641
+ * sensitivity (`calculateFreeCollateralDeltaForSpot`). If a perp market
642
+ * shares the same oracle as this spot market, that perp position's
643
+ * sensitivity is folded in too (scaled for any oracle-source unit
644
+ * difference), since a single price move affects both simultaneously.
645
+ * @param marketIndex Spot market to compute the liquidation price for.
646
+ * @param positionBaseSizeChange Optional simulated change to the position size, in the spot market's own token decimals. Defaults to no change.
647
+ * @returns Precision PRICE_PRECISION (1e6). Returns `new BN(-1)` as a sentinel when there is no position, the position (after `positionBaseSizeChange`) is flat, the price sensitivity is zero, or the computed liquidation price would be negative (position cannot be liquidated by a price move alone).
314
648
  */
315
649
  spotLiquidationPrice(marketIndex: number, positionBaseSizeChange?: BN): BN;
316
650
  /**
317
- * Calculate the liquidation price of a perp position, with optional parameter to calculate the liquidation price after a trade
651
+ * Calculate the liquidation price of a perp position, with optional parameter to calculate the liquidation price after a trade.
652
+ *
653
+ * Like `spotLiquidationPrice`, this extrapolates linearly from current free
654
+ * collateral (`totalCollateral - marginRequirement`, plus `offsetCollateral`)
655
+ * and the position's price sensitivity; if a spot market shares the same
656
+ * oracle, its sensitivity is folded in too. When `marginType === 'Isolated'`,
657
+ * free collateral and the margin requirement are scoped to that market's
658
+ * isolated bucket instead of the cross-margin account (and the spot-oracle
659
+ * cross-contribution above is skipped).
318
660
  * @param marketIndex
319
- * @param positionBaseSizeChange // change in position size to calculate liquidation price for : Precision 10^9
320
- * @param estimatedEntryPrice
321
- * @param marginCategory // allow Initial to be passed in if we are trying to calculate price for DLP de-risking
322
- * @param includeOpenOrders
323
- * @param offsetCollateral // allows calculating the liquidation price after this offset collateral is added to the user's account (e.g. : what will the liquidation price be for this position AFTER I deposit $x worth of collateral)
324
- * @returns Precision : PRICE_PRECISION
661
+ * @param positionBaseSizeChange Change in position size to calculate the liquidation price for, standardized to the market's order step size. Precision BASE_PRECISION (1e9).
662
+ * @param estimatedEntryPrice Entry price for `positionBaseSizeChange`, PRICE_PRECISION (1e6); only affects the result under `marginCategory: 'Maintenance'` (it adjusts free collateral for the estimated realized PnL and taker fee of entering at this price rather than at the oracle price).
663
+ * @param marginCategory Allow `'Initial'` to be passed in if we are trying to calculate price for DLP de-risking. Defaults to `'Maintenance'` (the actual liquidation threshold).
664
+ * @param includeOpenOrders Include open orders' worst-case exposure when sizing the position. Defaults to false.
665
+ * @param offsetCollateral Allows calculating the liquidation price after this offset collateral (QUOTE_PRECISION, 1e6) is added to the user's account (e.g. : what will the liquidation price be for this position AFTER I deposit $x worth of collateral). Defaults to zero.
666
+ * @param marginType `'Isolated'` to scope the calculation to `marketIndex`'s isolated margin bucket; omit/`'Cross'` for the cross-margin account.
667
+ * @returns Precision : PRICE_PRECISION (1e6). Returns `new BN(-1)` as a sentinel when there is no isolated margin calculation for the market (isolated mode), the price sensitivity is zero, or the computed price would be negative (position cannot be liquidated by a price move alone).
325
668
  */
326
669
  liquidationPrice(marketIndex: number, positionBaseSizeChange?: BN, estimatedEntryPrice?: BN, marginCategory?: MarginCategory, includeOpenOrders?: boolean, offsetCollateral?: BN, marginType?: MarginType): BN;
670
+ /**
671
+ * Helper for `liquidationPrice`: estimates the net change to free collateral
672
+ * from simultaneously (a) realizing PnL on `positionBaseSizeChange` entered
673
+ * at `estimatedEntryPrice` (assuming the worst/taker fee tier) versus the
674
+ * oracle price, and (b) the resulting change in margin requirement from the
675
+ * new position size. Only component (a) applies under `'Maintenance'`
676
+ * (matching `liquidationPrice`'s default); under other margin categories
677
+ * only the margin-requirement delta is applied.
678
+ * @returns Precision QUOTE_PRECISION (1e6); can be negative.
679
+ */
327
680
  calculateEntriesEffectOnFreeCollateral(market: PerpMarketAccount, oraclePrice: BN, perpPosition: PerpPosition, positionBaseSizeChange: BN, estimatedEntryPrice: BN, includeOpenOrders: boolean, marginCategory?: MarginCategory): BN;
681
+ /**
682
+ * Helper for `liquidationPrice`: the derivative of free collateral with
683
+ * respect to the perp market's oracle price, for the proposed post-trade
684
+ * position (`positionBaseSizeChange` applied to the current, or worst-case
685
+ * if `includeOpenOrders`, base amount). Used as the linear-extrapolation
686
+ * slope to solve for the price at which free collateral hits zero.
687
+ * @returns Precision QUOTE_PRECISION (1e6) per unit of PRICE_PRECISION move, or `undefined` if the proposed position is flat (no defined liquidation price).
688
+ */
328
689
  calculateFreeCollateralDeltaForPerp(market: PerpMarketAccount, perpPosition: PerpPosition, positionBaseSizeChange: BN, oraclePrice: BN, marginCategory?: MarginCategory, includeOpenOrders?: boolean): BN | undefined;
690
+ /**
691
+ * Helper for `spotLiquidationPrice`/`liquidationPrice`: the derivative of
692
+ * free collateral with respect to the spot market's oracle price, for a
693
+ * position of `signedTokenAmount` (positive = deposit, negative = borrow).
694
+ * @returns Precision QUOTE_PRECISION (1e6) per unit of PRICE_PRECISION move.
695
+ */
329
696
  calculateFreeCollateralDeltaForSpot(market: SpotMarketAccount, signedTokenAmount: BN, marginCategory?: MarginCategory): BN;
330
697
  /**
331
698
  * Calculates the estimated liquidation price for a position after closing a quote amount of the position.
332
699
  * @param positionMarketIndex
333
- * @param closeQuoteAmount
334
- * @returns : Precision PRICE_PRECISION
700
+ * @param closeQuoteAmount Quote-denominated amount of the position to close, QUOTE_PRECISION (1e6). Converted proportionally to a base-size reduction via the position's current cost basis.
701
+ * @param estimatedEntryPrice Forwarded to `liquidationPrice` as the entry price for the (negative, i.e. closing) size change. PRICE_PRECISION (1e6). Defaults to zero.
702
+ * @returns : Precision PRICE_PRECISION (1e6). See `liquidationPrice` for the `-1` sentinel cases.
335
703
  */
336
704
  liquidationPriceAfterClose(positionMarketIndex: number, closeQuoteAmount: BN, estimatedEntryPrice?: BN): BN;
705
+ /**
706
+ * Calculates the margin required to open a trade of `baseSize` in `targetMarketIndex`, scalar only — does not account for trade direction or existing positions/whether the trade is actually risk-increasing.
707
+ * @param baseSize BASE_PRECISION (1e9).
708
+ * @param estEntryPrice Optional entry price to value the trade at, PRICE_PRECISION (1e6); defaults to the oracle price.
709
+ * @param perpMarketMaxMarginRatio Optional max-margin-ratio override, see `resolveMaxMarginRatio`.
710
+ * @returns Precision QUOTE_PRECISION (1e6).
711
+ */
337
712
  getMarginUSDCRequiredForTrade(targetMarketIndex: number, baseSize: BN, estEntryPrice?: BN, perpMarketMaxMarginRatio?: number): BN;
713
+ /**
714
+ * Converts `getMarginUSDCRequiredForTrade`'s USDC margin requirement into
715
+ * how much of `collateralIndex`'s token a user would need to deposit to
716
+ * cover it, accounting for that collateral's scaled initial asset weight
717
+ * (a lower-weighted asset requires proportionally more deposited).
718
+ * @param baseSize BASE_PRECISION (1e9).
719
+ * @param collateralIndex Spot market to size the deposit in.
720
+ * @param perpMarketMaxMarginRatio Optional max-margin-ratio override, see `resolveMaxMarginRatio`.
721
+ * @returns Token amount in `collateralIndex`'s own decimals.
722
+ */
338
723
  getCollateralDepositRequiredForTrade(targetMarketIndex: number, baseSize: BN, collateralIndex: number, perpMarketMaxMarginRatio?: number): BN;
339
724
  /**
340
725
  * Separates the max trade size into two parts:
@@ -342,7 +727,9 @@ export declare class User {
342
727
  * - oppositeSideTradeSize: the trade size for closing the opposite direction
343
728
  * @param targetMarketIndex
344
729
  * @param tradeSide
345
- * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION
730
+ * @param maxMarginRatio Optional max-margin-ratio override, see `resolveMaxMarginRatio`.
731
+ * @param positionType Whether to size for a cross or isolated-margin position (forwarded to `getPerpBuyingPower`). Defaults to `'cross'`.
732
+ * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION (1e6)
346
733
  */
347
734
  getMaxTradeSizeUSDCForPerp(targetMarketIndex: number, tradeSide: PositionDirection, maxMarginRatio?: number | undefined, positionType?: 'isolated' | 'cross'): {
348
735
  tradeSize: BN;
@@ -352,10 +739,10 @@ export declare class User {
352
739
  * Get the maximum trade size for a given market, taking into account the user's current leverage, positions, collateral, etc.
353
740
  *
354
741
  * @param targetMarketIndex
355
- * @param direction
356
- * @param currentQuoteAssetValue
357
- * @param currentSpotMarketNetValue
358
- * @returns tradeSizeAllowed : Precision QUOTE_PRECISION
742
+ * @param direction Long (increase deposit / reduce borrow) or short (increase borrow / reduce deposit).
743
+ * @param currentQuoteAssetValue Ignored — always recomputed internally from `getSpotMarketAssetValue(QUOTE_SPOT_MARKET_INDEX)`.
744
+ * @param currentSpotMarketNetValue Optional pre-computed net value for `targetMarketIndex` (QUOTE_PRECISION, 1e6); if omitted, computed via `getSpotPositionValue`.
745
+ * @returns tradeSizeAllowed : Precision QUOTE_PRECISION (1e6)
359
746
  */
360
747
  getMaxTradeSizeUSDCForSpot(targetMarketIndex: number, direction: PositionDirection, currentQuoteAssetValue?: BN, currentSpotMarketNetValue?: BN): BN;
361
748
  /**
@@ -364,8 +751,9 @@ export declare class User {
364
751
  *
365
752
  * @param inMarketIndex
366
753
  * @param outMarketIndex
367
- * @param calculateSwap function to similate in to out swa
368
- * @param iterationLimit how long to run appromixation before erroring out
754
+ * @param calculateSwap Optional function to simulate the in-to-out conversion (e.g. to model swap fees/slippage); defaults to a 1:1 oracle-price conversion.
755
+ * @param iterationLimit How many binary-search iterations to run before erroring out. Defaults to 1000.
756
+ * @returns `inAmount`/`outAmount` in each market's own token decimals, and the resulting `leverage` (TEN_THOUSAND, 1e4 precision) after the swap.
369
757
  */
370
758
  getMaxSwapAmount({ inMarketIndex, outMarketIndex, calculateSwap, iterationLimit, }: {
371
759
  inMarketIndex: number;
@@ -377,18 +765,28 @@ export declare class User {
377
765
  outAmount: BN;
378
766
  leverage: BN;
379
767
  };
768
+ /**
769
+ * Returns a cloned `SpotPosition` with `tokenAmount` (signed, positive =
770
+ * deposit / negative = borrow) applied on top of the existing balance —
771
+ * used to simulate the post-trade/post-swap position without mutating the
772
+ * cached account.
773
+ * @param tokenAmount Signed delta in `market`'s own token decimals.
774
+ */
380
775
  cloneAndUpdateSpotPosition(position: SpotPosition, tokenAmount: BN, market: SpotMarketAccount): SpotPosition;
776
+ /** Worst-case free-collateral contribution (under `'Initial'` margin) of a single spot position. Returns QUOTE_PRECISION (1e6). */
381
777
  calculateSpotPositionFreeCollateralContribution(spotPosition: SpotPosition, strictOraclePrice: StrictOraclePrice): BN;
778
+ /** Worst-case (under `'Initial'` margin) asset/liability value split of a single spot position, for use in leverage calculations. Both fields QUOTE_PRECISION (1e6), non-negative. */
382
779
  calculateSpotPositionLeverageContribution(spotPosition: SpotPosition, strictOraclePrice: StrictOraclePrice): {
383
780
  totalAssetValue: BN;
384
781
  totalLiabilityValue: BN;
385
782
  };
386
783
  /**
387
784
  * Estimates what the user leverage will be after swap
388
- * @param inMarketIndex
389
- * @param outMarketIndex
390
- * @param inAmount
391
- * @param outAmount
785
+ * @param inMarketIndex Market being sold/paid from.
786
+ * @param outMarketIndex Market being bought/received.
787
+ * @param inAmount Amount removed from `inMarketIndex`, that market's own token decimals.
788
+ * @param outAmount Amount added to `outMarketIndex`, that market's own token decimals.
789
+ * @returns Precision TEN_THOUSAND (1e4, i.e. `10000` = 1x).
392
790
  */
393
791
  accountLeverageAfterSwap({ inMarketIndex, outMarketIndex, inAmount, outAmount, }: {
394
792
  inMarketIndex: number;
@@ -399,42 +797,146 @@ export declare class User {
399
797
  /**
400
798
  * Returns the leverage ratio for the account after adding (or subtracting) the given quote size to the given position
401
799
  * @param targetMarketIndex
402
- * @param: targetMarketType
403
- * @param tradeQuoteAmount
404
- * @param tradeSide
405
- * @param includeOpenOrders
406
- * @returns leverageRatio : Precision TEN_THOUSAND
800
+ * @param targetMarketType Whether the trade is on a perp or spot market — the two use different valuation paths.
801
+ * @param tradeQuoteAmount Quote size of the simulated trade, QUOTE_PRECISION (1e6).
802
+ * @param tradeSide Direction of the simulated trade.
803
+ * @param includeOpenOrders Include existing open orders' worst-case impact in both the before/after values. Defaults to true.
804
+ * @returns leverageRatio : Precision TEN_THOUSAND (1e4, i.e. `10000` = 1x)
407
805
  */
408
806
  accountLeverageRatioAfterTrade(targetMarketIndex: number, targetMarketType: MarketType, tradeQuoteAmount: BN, tradeSide: PositionDirection, includeOpenOrders?: boolean): BN;
807
+ /**
808
+ * Looks up the user's fee tier from the state account's fee structure.
809
+ *
810
+ * For perp markets, the tier is selected by the user's rolling 30-day
811
+ * volume (`getUser30dRollingVolumeEstimate`, QUOTE_PRECISION) against fixed
812
+ * breakpoints — $2M, $10M, $20M, $80M, $200M — picking the lowest-index
813
+ * tier whose breakpoint the user's volume is still under (tier 5, the
814
+ * lowest fees, if volume meets or exceeds the top breakpoint). Spot markets
815
+ * always use tier 0 (no volume-based discount).
816
+ * @param marketType `MarketType.PERP` or `MarketType.SPOT`.
817
+ * @param now Optional unix timestamp (seconds) to evaluate the rolling volume window as of; defaults to current time.
818
+ * @returns The matching `FeeTier` (numerator/denominator fee fractions and referee-discount fractions).
819
+ */
409
820
  getUserFeeTier(marketType: MarketType, now?: BN): import("./types").FeeTier;
410
821
  /**
411
- * Calculates how much perp fee will be taken for a given sized trade
412
- * @param quoteAmount
413
- * @returns feeForQuote : Precision QUOTE_PRECISION
822
+ * Calculates how much perp fee will be taken for a given sized trade.
823
+ *
824
+ * When `marketIndex` is provided, delegates to `VelocityClient.getMarketFees`
825
+ * for that specific market's taker-fee multiplier (which itself applies the
826
+ * market's `feeAdjustment`, the referee discount, and — when `builderInfo` is
827
+ * passed — the builder fee). Otherwise uses the volume-based fee tier from
828
+ * `getUserFeeTier(MarketType.PERP)`; if the user is a referee (determined
829
+ * from `UserStats.referrerStatus`'s `IsReferred` flag unless `isReferee` is
830
+ * explicitly passed), the tier's `refereeFeeNumerator`/`refereeFeeDenominator`
831
+ * proportion is subtracted from the fee as a discount, and — when `builderInfo`
832
+ * carries a builder code — the builder fee (`quoteAmount * builderFeeTenthBps /
833
+ * 100_000`) is added on top, mirroring the program's `builder_fee` (`math/fees.rs`).
834
+ * @param quoteAmount Trade size, QUOTE_PRECISION (1e6).
835
+ * @param marketIndex Optional perp market to use `VelocityClient.getMarketFees` for instead of the volume-tier fee structure.
836
+ * @param isReferee Optional override for whether the referee discount applies; defaults to the user's actual `UserStats` referred status. Ignored on the `marketIndex` path (which reads referee status inside `getMarketFees`).
837
+ * @param builderInfo Optional builder code; when it carries `builderIdx` + `builderFeeTenthBps`, the builder fee is added on top of the tiered fee.
838
+ * @returns feeForQuote : Precision QUOTE_PRECISION (1e6)
414
839
  */
415
- calculateFeeForQuoteAmount(quoteAmount: BN, marketIndex?: number): BN;
840
+ calculatePerpTakerFee(quoteAmount: BN, marketIndex?: number, isReferee?: boolean, builderInfo?: Pick<OrderParams, 'builderIdx' | 'builderFeeTenthBps'>): BN;
416
841
  /**
417
842
  * Calculates a user's max withdrawal amounts for a spot market. If reduceOnly is true,
418
- * it will return the max withdrawal amount without opening a liability for the user
843
+ * it will return the max withdrawal amount without opening a liability for the user.
844
+ *
845
+ * Combines three caps: the market-wide withdraw/borrow guard
846
+ * (`calculateWithdrawLimit`, a rolling-window rate limit on the spot
847
+ * market), the user's own deposit balance, and how much their free
848
+ * collateral supports withdrawing/borrowing. If `canBypassWithdrawLimits`
849
+ * returns `canBypass: true` (see that method), the market-wide withdraw
850
+ * limit floor is raised to the user's full deposit amount — letting a
851
+ * small, healthy, always-net-positive depositor withdraw in full even if
852
+ * the market-wide guard would otherwise throttle them.
419
853
  * @param marketIndex
854
+ * @param reduceOnly If true, caps the result so the withdrawal cannot open a borrow (never exceeds the user's current deposit). If false/omitted, may return an amount larger than the deposit, up to the user's max allowed new liability.
420
855
  * @returns withdrawalLimit : Precision is the token precision for the chosen SpotMarket
421
856
  */
422
857
  getWithdrawalLimit(marketIndex: number, reduceOnly?: boolean): BN;
858
+ /**
859
+ * Determines whether the user can bypass the spot market's rolling
860
+ * withdraw-guard limit for `marketIndex`. `canBypass` is true only when
861
+ * **all** of the following hold:
862
+ * - The user currently holds a deposit (not a borrow) in the market.
863
+ * - Their lifetime net deposits (`totalDeposits - totalWithdraws`) are
864
+ * non-negative — they have never net-withdrawn more than they net-deposited.
865
+ * - Their `cumulativeDeposits` for the position has never gone negative
866
+ * (no history of having borrowed and repaid in this market).
867
+ * - Their current deposit amount is below `maxDepositAmount`, i.e. 10% of
868
+ * the spot market's `withdrawGuardThreshold`.
869
+ *
870
+ * This lets a small, well-behaved depositor withdraw their own funds in
871
+ * full even while the market-wide withdraw guard is actively throttling
872
+ * larger movements. Used by `getWithdrawalLimit`.
873
+ * @param marketIndex
874
+ * @returns `canBypass`; `netDeposits` (lifetime `totalDeposits - totalWithdraws`, QUOTE_PRECISION, 1e6); `depositAmount` and `maxDepositAmount`, both in the spot market's own token decimals.
875
+ */
423
876
  canBypassWithdrawLimits(marketIndex: number): {
424
877
  canBypass: boolean;
425
878
  netDeposits: BN;
426
879
  depositAmount: BN;
427
880
  maxDepositAmount: BN;
428
881
  };
882
+ /**
883
+ * Determines whether the user can be marked idle (excluded from userMap
884
+ * subscriptions by default, and skipped by most keeper crank passes) as of
885
+ * `slot`. Requires: not already idle; inactive for the required window
886
+ * since `lastActiveSlot` (1 hour / 9,000 slots if equity is under $1,000,
887
+ * otherwise 1 week / 1,512,000 slots); not currently being liquidated; and
888
+ * no open perp positions, borrows, spot open orders, or open orders of any kind.
889
+ * @param slot Current slot to evaluate inactivity against.
890
+ */
429
891
  canMakeIdle(slot: BN): boolean;
892
+ /**
893
+ * Determines whether this `User` (sub)account can be deleted (checked
894
+ * before sending a delete-user instruction, to give a friendlier error than
895
+ * an on-chain revert). Returns `canDelete: false` with a `reason` string if
896
+ * any of the following hold: it's a referrer's sub-account 0 (referrers
897
+ * cannot delete their primary account); the account is bankrupt or being
898
+ * liquidated; it has any non-empty perp/spot position or open order; or
899
+ * (when the state account charges an initialize-user fee) the account is a
900
+ * "fresh" account — younger than `ACCOUNT_AGE_DELETION_CUTOFF_SECONDS`,
901
+ * measured from its earliest recorded filler/maker/taker volume timestamp —
902
+ * that is not currently idle.
903
+ * @param userStatsAccount Optional pre-fetched `UserStatsAccount`; defaults to `VelocityClient.getUserStatsOrThrow().getAccount()`.
904
+ * @param now Optional unix timestamp (seconds) to evaluate account age against; defaults to current time.
905
+ */
430
906
  canBeDeleted(userStatsAccount?: UserStatsAccount, now?: BN): {
431
907
  canDelete: boolean;
432
908
  reason?: string;
433
909
  };
910
+ /**
911
+ * Returns the numerically-lowest (i.e. safest) contract/asset tier across
912
+ * the user's active positions — perp tiers from active perp positions,
913
+ * spot tiers only from spot **borrows** (deposits are skipped, since asset
914
+ * tier only restricts borrowing exposure). Defaults to `4` (the
915
+ * second-riskiest tier index) when the user has no positions of that kind —
916
+ * this is a permissive default intended for callers doing tier-safety
917
+ * comparisons (see `perpTierIsAsSafeAs` in `math/tiers`), not a claim that
918
+ * "no position" is itself a risky tier.
919
+ * @returns Lower `perpTier`/`spotTier` numbers indicate a safer tier; see `math/tiers` (`getPerpMarketTierNumber`/`getSpotMarketTierNumber`) for the numbering.
920
+ */
434
921
  getSafestTiers(): {
435
922
  perpTier: number;
436
923
  spotTier: number;
437
924
  };
925
+ /**
926
+ * Breaks down a single perp position's contribution to the margin system
927
+ * as a `HealthComponent`: worst-case base size, its unweighted liability
928
+ * value, the applicable margin ratio (`weight`), and the resulting
929
+ * weighted margin requirement (`weightedValue`, which includes the
930
+ * position's open-order margin add-on). Used to build up
931
+ * `getHealthComponents`' `perpPositions` array (e.g. for UI breakdowns of
932
+ * "what's consuming my margin").
933
+ * @param marginCategory `'Initial'` or `'Maintenance'`.
934
+ * @param perpPosition Position to evaluate.
935
+ * @param oraclePriceData Optional oracle price override for the perp market; defaults to the live oracle price.
936
+ * @param quoteOraclePriceData Optional oracle price override for the quote spot market; defaults to the live oracle price.
937
+ * @param includeOpenOrders Include worst-case open-order exposure. Defaults to true.
938
+ * @returns `size` is BASE_PRECISION (1e9); `value`/`weightedValue` are QUOTE_PRECISION (1e6); `weight` is MARGIN_PRECISION (1e4).
939
+ */
438
940
  getPerpPositionHealth({ marginCategory, perpPosition, oraclePriceData, quoteOraclePriceData, includeOpenOrders, }: {
439
941
  marginCategory: MarginCategory;
440
942
  perpPosition: PerpPosition;
@@ -442,6 +944,18 @@ export declare class User {
442
944
  quoteOraclePriceData?: OraclePriceData;
443
945
  includeOpenOrders?: boolean;
444
946
  }): HealthComponent;
947
+ /**
948
+ * Builds a full breakdown of every component feeding into the user's
949
+ * margin calculation, for UI/diagnostic display: `deposits` and `borrows`
950
+ * (one `HealthComponent` per non-quote spot market with a nonzero
951
+ * worst-case position, plus a synthetic entry for the net quote balance),
952
+ * `perpPositions` (via `getPerpPositionHealth`, one per active perp
953
+ * position), and `perpPnl` (each position's weighted unrealized PnL — see
954
+ * `getUnrealizedPNL` for the `'Initial'`-margin $100 cap that also applies
955
+ * here).
956
+ * @param marginCategory `'Initial'` or `'Maintenance'` — determines which asset/liability weights are applied.
957
+ * @returns `HealthComponents` with `size`/`value`/`weightedValue` in each entry using the same precisions as `getPerpPositionHealth`.
958
+ */
445
959
  getHealthComponents({ marginCategory, }: {
446
960
  marginCategory: MarginCategory;
447
961
  }): HealthComponents;
@@ -456,6 +970,7 @@ export declare class User {
456
970
  private getOracleDataForSpotMarket;
457
971
  /**
458
972
  * Get the active perp and spot positions of the user.
973
+ * @returns Market indices only (not full position objects); see `getActivePerpPositions`/`getActiveSpotPositions` for the "active" criteria.
459
974
  */
460
975
  getActivePositions(): {
461
976
  activePerpPositions: number[];
@@ -465,11 +980,57 @@ export declare class User {
465
980
  * Compute the full margin calculation for the user's account.
466
981
  * Prioritize using this function instead of calling getMarginRequirement or getTotalCollateral multiple times.
467
982
  * Consumers can use this to avoid duplicating work across separate calls.
983
+ *
984
+ * Mirrors the on-chain margin accumulation in `math/margin.rs`, splitting
985
+ * contributions into cross-margin and per-market isolated buckets
986
+ * (`MarginCalculation.isolatedMarginCalculations`, keyed by perp market
987
+ * index — see `isPerpPositionIsolated`) and tracking whether the account
988
+ * holds any isolated-tier liability (`withPerpIsolatedLiability` /
989
+ * `withSpotIsolatedLiability`, consumed by
990
+ * `validateAnyIsolatedTierRequirements`). A perp position's isolated
991
+ * quote-deposit collateral only counts toward that position's own isolated
992
+ * bucket, never the cross-margin total.
993
+ *
994
+ * Also enforces pool-id consistency: every spot/perp position's market must
995
+ * match the user's `poolId`, **except** a pool-1 user is allowed to hold a
996
+ * quote-asset deposit (not borrow) even though the quote spot market itself
997
+ * belongs to pool 0 — throws `InvalidPoolId: ...` otherwise.
998
+ * @param marginCategory `'Initial'` or `'Maintenance'`. Defaults to `'Initial'`.
999
+ * @param opts.strict Apply TWAP-bounded (`StrictOraclePrice`) oracle pricing, mirroring the on-chain strict-price gating. Defaults to false.
1000
+ * @param opts.includeOpenOrders Include open orders' worst-case impact. Defaults to true.
1001
+ * @param opts.liquidationBufferMap Per-scope buffer (MARGIN_PRECISION, 1e4) to pad margin requirements with — `'cross'` for the cross-margin bucket, or a perp market index for that market's isolated bucket. See `getLiquidationBuffer`.
468
1002
  */
469
1003
  getMarginCalculation(marginCategory?: MarginCategory, opts?: {
470
1004
  strict?: boolean;
471
1005
  includeOpenOrders?: boolean;
472
1006
  liquidationBufferMap?: Map<number | 'cross', BN>;
473
1007
  }): MarginCalculation;
1008
+ /**
1009
+ * Returns true if `perpPosition` was opened/is held under isolated margin
1010
+ * (`PositionFlag.IsolatedPosition` set) — segregated to its own margin
1011
+ * bucket (see `getMarginCalculation`) rather than sharing cross-margin
1012
+ * collateral with the rest of the account.
1013
+ */
474
1014
  isPerpPositionIsolated(perpPosition: PerpPosition): boolean;
1015
+ /**
1016
+ * Pre-flight check for `IsolatedAssetTierViolation`: mirrors
1017
+ * `validate_any_isolated_tier_requirements` in `math/margin.rs`. A user
1018
+ * holding an isolated-tier perp or spot liability may not simultaneously
1019
+ * carry other liabilities (besides a single usdc borrow, for a perp
1020
+ * isolated liability), unless they are reduce-only.
1021
+ *
1022
+ * Specifically, if `calculation.withPerpIsolatedLiability` is set (an
1023
+ * isolated-*contract-tier* perp liability exists) and the user is not
1024
+ * `UserStatus.REDUCE_ONLY`: more than one perp liability is invalid; margin
1025
+ * trading enabled is invalid; and any spot liability other than a single
1026
+ * USDC borrow is invalid. If `calculation.withSpotIsolatedLiability` is set
1027
+ * (an isolated-*asset-tier* spot liability exists) and not reduce-only: any
1028
+ * perp liability, or more than the one isolated-tier spot liability, is invalid.
1029
+ * @param calculation A `MarginCalculation` from `getMarginCalculation` (any margin category — only the isolated-liability flags and liability counts are read).
1030
+ * @returns `{ valid: true }` if the account satisfies isolated-tier requirements, else `{ valid: false, reason }` with a human-readable reason.
1031
+ */
1032
+ validateAnyIsolatedTierRequirements(calculation: MarginCalculation): {
1033
+ valid: boolean;
1034
+ reason?: string;
1035
+ };
475
1036
  }