@velocity-exchange/sdk 0.1.0 → 0.2.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 (676) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/bun.lock +23 -1
  3. package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +5 -3
  4. package/lib/browser/accounts/basicUserAccountSubscriber.js +4 -3
  5. package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  6. package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +4 -3
  7. package/lib/browser/accounts/bulkAccountLoader.d.ts +5 -5
  8. package/lib/browser/accounts/bulkAccountLoader.js +12 -1
  9. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +2 -1
  10. package/lib/browser/accounts/grpcAccountSubscriber.js +8 -2
  11. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  12. package/lib/browser/accounts/grpcMultiAccountSubscriber.js +13 -5
  13. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  14. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  15. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  16. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +8 -2
  17. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +18 -3
  18. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -1
  19. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +40 -17
  20. package/lib/browser/accounts/laserProgramAccountSubscriber.js +3 -0
  21. package/lib/browser/accounts/oneShotUserAccountSubscriber.js +4 -3
  22. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  23. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  24. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  25. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  26. package/lib/browser/accounts/pollingOracleAccountSubscriber.js +16 -5
  27. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  28. package/lib/browser/accounts/pollingTokenAccountSubscriber.js +16 -5
  29. package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  30. package/lib/browser/accounts/pollingUserAccountSubscriber.js +17 -11
  31. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  32. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  33. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -1
  34. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +64 -28
  35. package/lib/browser/accounts/types.d.ts +4 -4
  36. package/lib/browser/accounts/utils.d.ts +1 -0
  37. package/lib/browser/accounts/utils.js +8 -1
  38. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +4 -2
  39. package/lib/browser/accounts/webSocketAccountSubscriber.js +17 -5
  40. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  41. package/lib/browser/accounts/webSocketAccountSubscriberV2.js +17 -6
  42. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  43. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  44. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  45. package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +14 -3
  46. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  47. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  48. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  49. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  50. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  51. package/lib/browser/accounts/webSocketUserAccountSubscriber.js +9 -0
  52. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  53. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  54. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -4
  55. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +48 -20
  56. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -3
  57. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +45 -14
  58. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  59. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  60. package/lib/browser/addresses/marketAddresses.js +3 -2
  61. package/lib/browser/addresses/pda.d.ts +0 -2
  62. package/lib/browser/addresses/pda.js +1 -14
  63. package/lib/browser/adminClient.d.ts +24 -28
  64. package/lib/browser/adminClient.js +156 -157
  65. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +1 -1
  66. package/lib/browser/auctionSubscriber/auctionSubscriber.js +6 -4
  67. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -1
  68. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +9 -4
  69. package/lib/browser/bankrun/bankrunConnection.d.ts +6 -4
  70. package/lib/browser/bankrun/bankrunConnection.js +69 -31
  71. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  72. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  73. package/lib/browser/clock/clockSubscriber.d.ts +6 -6
  74. package/lib/browser/clock/clockSubscriber.js +4 -3
  75. package/lib/browser/config.d.ts +1 -1
  76. package/lib/browser/config.js +8 -4
  77. package/lib/browser/constants/index.d.ts +1 -2
  78. package/lib/browser/constants/index.js +1 -2
  79. package/lib/browser/constants/numericConstants.d.ts +1 -3
  80. package/lib/browser/constants/numericConstants.js +3 -5
  81. package/lib/browser/constituentMap/constituentMap.js +5 -1
  82. package/lib/browser/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  83. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  84. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  85. package/lib/browser/core/instructions/perpOrders.d.ts +14 -0
  86. package/lib/browser/core/instructions/perpOrders.js +14 -0
  87. package/lib/browser/core/remainingAccounts.d.ts +2 -2
  88. package/lib/browser/core/remainingAccounts.js +2 -2
  89. package/lib/browser/decode/user.js +9 -1
  90. package/lib/browser/dlob/DLOB.d.ts +6 -1
  91. package/lib/browser/dlob/DLOB.js +201 -138
  92. package/lib/browser/dlob/DLOBNode.d.ts +5 -2
  93. package/lib/browser/dlob/DLOBNode.js +7 -0
  94. package/lib/browser/dlob/DLOBSubscriber.js +37 -32
  95. package/lib/browser/dlob/NodeList.js +8 -7
  96. package/lib/browser/dlob/orderBookLevels.js +19 -12
  97. package/lib/browser/events/eventList.js +4 -1
  98. package/lib/browser/events/eventSubscriber.d.ts +5 -2
  99. package/lib/browser/events/eventSubscriber.js +75 -26
  100. package/lib/browser/events/eventsServerLogProvider.d.ts +1 -1
  101. package/lib/browser/events/eventsServerLogProvider.js +15 -8
  102. package/lib/browser/events/fetchLogs.d.ts +1 -1
  103. package/lib/browser/events/fetchLogs.js +4 -2
  104. package/lib/browser/events/pollingLogProvider.d.ts +1 -1
  105. package/lib/browser/events/pollingLogProvider.js +1 -0
  106. package/lib/browser/events/txEventCache.js +6 -2
  107. package/lib/browser/events/types.d.ts +2 -4
  108. package/lib/browser/events/types.js +0 -2
  109. package/lib/browser/events/webSocketLogProvider.d.ts +1 -1
  110. package/lib/browser/events/webSocketLogProvider.js +5 -2
  111. package/lib/browser/factory/bigNum.js +1 -1
  112. package/lib/browser/idl/velocity.d.ts +1243 -1586
  113. package/lib/browser/idl/velocity.json +1234 -1577
  114. package/lib/browser/index.d.ts +0 -2
  115. package/lib/browser/index.js +0 -2
  116. package/lib/browser/jupiter/jupiterClient.d.ts +1 -1
  117. package/lib/browser/jupiter/jupiterClient.js +18 -8
  118. package/lib/browser/marginCalculation.js +1 -0
  119. package/lib/browser/math/amm.d.ts +31 -13
  120. package/lib/browser/math/amm.js +77 -22
  121. package/lib/browser/math/bankruptcy.js +1 -1
  122. package/lib/browser/math/funding.js +6 -6
  123. package/lib/browser/math/insurance.d.ts +1 -1
  124. package/lib/browser/math/insurance.js +4 -5
  125. package/lib/browser/math/margin.d.ts +1 -9
  126. package/lib/browser/math/margin.js +3 -62
  127. package/lib/browser/math/market.d.ts +4 -12
  128. package/lib/browser/math/market.js +6 -40
  129. package/lib/browser/math/oracles.d.ts +0 -3
  130. package/lib/browser/math/oracles.js +1 -14
  131. package/lib/browser/math/orders.d.ts +0 -5
  132. package/lib/browser/math/orders.js +2 -74
  133. package/lib/browser/math/position.d.ts +0 -4
  134. package/lib/browser/math/position.js +5 -10
  135. package/lib/browser/math/repeg.d.ts +0 -1
  136. package/lib/browser/math/repeg.js +1 -23
  137. package/lib/browser/math/spotBalance.d.ts +4 -4
  138. package/lib/browser/math/spotBalance.js +6 -6
  139. package/lib/browser/math/spotMarket.d.ts +0 -6
  140. package/lib/browser/math/spotMarket.js +1 -16
  141. package/lib/browser/math/spotPosition.d.ts +4 -4
  142. package/lib/browser/math/state.d.ts +0 -2
  143. package/lib/browser/math/state.js +1 -9
  144. package/lib/browser/math/superStake.d.ts +3 -53
  145. package/lib/browser/math/superStake.js +16 -13
  146. package/lib/browser/math/trade.js +6 -6
  147. package/lib/browser/memcmp.d.ts +0 -1
  148. package/lib/browser/memcmp.js +1 -10
  149. package/lib/browser/oracles/prelaunchOracleClient.js +3 -2
  150. package/lib/browser/oracles/pythClient.js +9 -3
  151. package/lib/browser/oracles/pythLazerClient.js +3 -2
  152. package/lib/browser/oracles/utils.d.ts +4 -0
  153. package/lib/browser/oracles/utils.js +9 -1
  154. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -1
  155. package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -2
  156. package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
  157. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +1 -1
  158. package/lib/browser/priorityFee/priorityFeeSubscriber.js +32 -8
  159. package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  160. package/lib/browser/pyth/types.d.ts +0 -1
  161. package/lib/browser/slot/SlotSubscriber.d.ts +1 -1
  162. package/lib/browser/slot/SlotSubscriber.js +2 -1
  163. package/lib/browser/slot/SlothashSubscriber.d.ts +3 -2
  164. package/lib/browser/slot/SlothashSubscriber.js +11 -4
  165. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  166. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  167. package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +3 -2
  168. package/lib/browser/swift/signedMsgUserAccountSubscriber.js +13 -5
  169. package/lib/browser/swift/swiftOrderSubscriber.d.ts +1 -1
  170. package/lib/browser/swift/swiftOrderSubscriber.js +10 -5
  171. package/lib/browser/testClient.js +3 -2
  172. package/lib/browser/tokenFaucet.js +16 -2
  173. package/lib/browser/tx/baseTxSender.d.ts +4 -4
  174. package/lib/browser/tx/baseTxSender.js +5 -4
  175. package/lib/browser/tx/fastSingleTxSender.d.ts +3 -3
  176. package/lib/browser/tx/fastSingleTxSender.js +9 -5
  177. package/lib/browser/tx/reportTransactionError.d.ts +2 -2
  178. package/lib/browser/tx/reportTransactionError.js +5 -1
  179. package/lib/browser/tx/retryTxSender.d.ts +1 -1
  180. package/lib/browser/tx/retryTxSender.js +4 -2
  181. package/lib/browser/tx/txHandler.d.ts +7 -1
  182. package/lib/browser/tx/txHandler.js +54 -40
  183. package/lib/browser/tx/txParamProcessor.d.ts +4 -1
  184. package/lib/browser/tx/txParamProcessor.js +6 -0
  185. package/lib/browser/tx/types.d.ts +1 -1
  186. package/lib/browser/tx/whileValidTxSender.d.ts +1 -6
  187. package/lib/browser/tx/whileValidTxSender.js +35 -13
  188. package/lib/browser/types.d.ts +27 -70
  189. package/lib/browser/types.js +2 -2
  190. package/lib/browser/user.d.ts +21 -7
  191. package/lib/browser/user.js +156 -132
  192. package/lib/browser/userMap/WebsocketSubscription.d.ts +1 -1
  193. package/lib/browser/userMap/grpcSubscription.d.ts +1 -1
  194. package/lib/browser/userMap/referrerMap.js +10 -3
  195. package/lib/browser/userMap/revenueShareEscrowMap.js +4 -0
  196. package/lib/browser/userMap/userMap.d.ts +1 -1
  197. package/lib/browser/userMap/userMap.js +36 -23
  198. package/lib/browser/userMap/userStatsMap.d.ts +1 -1
  199. package/lib/browser/userMap/userStatsMap.js +18 -13
  200. package/lib/browser/userStats.d.ts +7 -2
  201. package/lib/browser/userStats.js +18 -4
  202. package/lib/browser/util/TransactionConfirmationManager.js +4 -2
  203. package/lib/browser/util/chainClock.d.ts +1 -1
  204. package/lib/browser/util/computeUnits.d.ts +1 -1
  205. package/lib/browser/util/computeUnits.js +6 -1
  206. package/lib/browser/velocityClient.d.ts +92 -34
  207. package/lib/browser/velocityClient.js +414 -280
  208. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +5 -3
  209. package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
  210. package/lib/node/accounts/basicUserAccountSubscriber.js +4 -3
  211. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  212. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
  213. package/lib/node/accounts/basicUserStatsAccountSubscriber.js +4 -3
  214. package/lib/node/accounts/bulkAccountLoader.d.ts +5 -5
  215. package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
  216. package/lib/node/accounts/bulkAccountLoader.js +12 -1
  217. package/lib/node/accounts/grpcAccountSubscriber.d.ts +2 -1
  218. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  219. package/lib/node/accounts/grpcAccountSubscriber.js +8 -2
  220. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  221. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  222. package/lib/node/accounts/grpcMultiAccountSubscriber.js +13 -5
  223. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  224. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  225. package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  226. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  227. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  228. package/lib/node/accounts/grpcProgramAccountSubscriber.js +8 -2
  229. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  230. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +18 -3
  231. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -1
  232. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  233. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +40 -17
  234. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  235. package/lib/node/accounts/laserProgramAccountSubscriber.js +3 -0
  236. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  237. package/lib/node/accounts/oneShotUserAccountSubscriber.js +4 -3
  238. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  239. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  240. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  241. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  242. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  243. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  244. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  245. package/lib/node/accounts/pollingOracleAccountSubscriber.js +16 -5
  246. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  247. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  248. package/lib/node/accounts/pollingTokenAccountSubscriber.js +16 -5
  249. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  250. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
  251. package/lib/node/accounts/pollingUserAccountSubscriber.js +17 -11
  252. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  253. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  254. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  255. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -1
  256. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  257. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +64 -28
  258. package/lib/node/accounts/types.d.ts +4 -4
  259. package/lib/node/accounts/types.d.ts.map +1 -1
  260. package/lib/node/accounts/utils.d.ts +1 -0
  261. package/lib/node/accounts/utils.d.ts.map +1 -1
  262. package/lib/node/accounts/utils.js +8 -1
  263. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +4 -2
  264. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  265. package/lib/node/accounts/webSocketAccountSubscriber.js +17 -5
  266. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  267. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  268. package/lib/node/accounts/webSocketAccountSubscriberV2.js +17 -6
  269. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  270. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  271. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  272. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  273. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  274. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +14 -3
  275. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  276. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  277. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  278. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  279. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  280. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  281. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  282. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  283. package/lib/node/accounts/webSocketUserAccountSubscriber.js +9 -0
  284. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  285. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  286. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  287. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -4
  288. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  289. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +48 -20
  290. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -3
  291. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  292. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +45 -14
  293. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  294. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  295. package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  296. package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
  297. package/lib/node/addresses/marketAddresses.js +3 -2
  298. package/lib/node/addresses/pda.d.ts +0 -2
  299. package/lib/node/addresses/pda.d.ts.map +1 -1
  300. package/lib/node/addresses/pda.js +1 -14
  301. package/lib/node/adminClient.d.ts +24 -28
  302. package/lib/node/adminClient.d.ts.map +1 -1
  303. package/lib/node/adminClient.js +156 -157
  304. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +1 -1
  305. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  306. package/lib/node/auctionSubscriber/auctionSubscriber.js +6 -4
  307. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -1
  308. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  309. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +9 -4
  310. package/lib/node/bankrun/bankrunConnection.d.ts +6 -4
  311. package/lib/node/bankrun/bankrunConnection.d.ts.map +1 -1
  312. package/lib/node/bankrun/bankrunConnection.js +69 -31
  313. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  314. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  315. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  316. package/lib/node/clock/clockSubscriber.d.ts +6 -6
  317. package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
  318. package/lib/node/clock/clockSubscriber.js +4 -3
  319. package/lib/node/config.d.ts +1 -1
  320. package/lib/node/config.d.ts.map +1 -1
  321. package/lib/node/config.js +8 -4
  322. package/lib/node/constants/index.d.ts +1 -2
  323. package/lib/node/constants/index.d.ts.map +1 -1
  324. package/lib/node/constants/index.js +1 -2
  325. package/lib/node/constants/numericConstants.d.ts +1 -3
  326. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  327. package/lib/node/constants/numericConstants.js +3 -5
  328. package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
  329. package/lib/node/constituentMap/constituentMap.js +5 -1
  330. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts.map +1 -1
  331. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  332. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  333. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts.map +1 -1
  334. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  335. package/lib/node/core/instructions/perpOrders.d.ts +14 -0
  336. package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
  337. package/lib/node/core/instructions/perpOrders.js +14 -0
  338. package/lib/node/core/remainingAccounts.d.ts +2 -2
  339. package/lib/node/core/remainingAccounts.d.ts.map +1 -1
  340. package/lib/node/core/remainingAccounts.js +2 -2
  341. package/lib/node/decode/user.d.ts.map +1 -1
  342. package/lib/node/decode/user.js +9 -1
  343. package/lib/node/dlob/DLOB.d.ts +6 -1
  344. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  345. package/lib/node/dlob/DLOB.js +201 -138
  346. package/lib/node/dlob/DLOBNode.d.ts +5 -2
  347. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  348. package/lib/node/dlob/DLOBNode.js +7 -0
  349. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  350. package/lib/node/dlob/DLOBSubscriber.js +37 -32
  351. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  352. package/lib/node/dlob/NodeList.js +8 -7
  353. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  354. package/lib/node/dlob/orderBookLevels.js +19 -12
  355. package/lib/node/events/eventList.d.ts +3 -3
  356. package/lib/node/events/eventList.d.ts.map +1 -1
  357. package/lib/node/events/eventList.js +4 -1
  358. package/lib/node/events/eventSubscriber.d.ts +5 -2
  359. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  360. package/lib/node/events/eventSubscriber.js +75 -26
  361. package/lib/node/events/eventsServerLogProvider.d.ts +2 -2
  362. package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
  363. package/lib/node/events/eventsServerLogProvider.js +15 -8
  364. package/lib/node/events/fetchLogs.d.ts +1 -1
  365. package/lib/node/events/fetchLogs.d.ts.map +1 -1
  366. package/lib/node/events/fetchLogs.js +4 -2
  367. package/lib/node/events/pollingLogProvider.d.ts +2 -2
  368. package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
  369. package/lib/node/events/pollingLogProvider.js +1 -0
  370. package/lib/node/events/txEventCache.d.ts +3 -3
  371. package/lib/node/events/txEventCache.d.ts.map +1 -1
  372. package/lib/node/events/txEventCache.js +6 -2
  373. package/lib/node/events/types.d.ts +2 -4
  374. package/lib/node/events/types.d.ts.map +1 -1
  375. package/lib/node/events/types.js +0 -2
  376. package/lib/node/events/webSocketLogProvider.d.ts +2 -2
  377. package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
  378. package/lib/node/events/webSocketLogProvider.js +5 -2
  379. package/lib/node/factory/bigNum.js +1 -1
  380. package/lib/node/idl/velocity.d.ts +1243 -1586
  381. package/lib/node/idl/velocity.d.ts.map +1 -1
  382. package/lib/node/idl/velocity.json +1234 -1577
  383. package/lib/node/index.d.ts +0 -2
  384. package/lib/node/index.d.ts.map +1 -1
  385. package/lib/node/index.js +0 -2
  386. package/lib/node/jupiter/jupiterClient.d.ts +1 -1
  387. package/lib/node/jupiter/jupiterClient.d.ts.map +1 -1
  388. package/lib/node/jupiter/jupiterClient.js +18 -8
  389. package/lib/node/marginCalculation.d.ts.map +1 -1
  390. package/lib/node/marginCalculation.js +1 -0
  391. package/lib/node/math/amm.d.ts +31 -13
  392. package/lib/node/math/amm.d.ts.map +1 -1
  393. package/lib/node/math/amm.js +77 -22
  394. package/lib/node/math/bankruptcy.js +1 -1
  395. package/lib/node/math/funding.d.ts.map +1 -1
  396. package/lib/node/math/funding.js +6 -6
  397. package/lib/node/math/insurance.d.ts +1 -1
  398. package/lib/node/math/insurance.d.ts.map +1 -1
  399. package/lib/node/math/insurance.js +4 -5
  400. package/lib/node/math/margin.d.ts +1 -9
  401. package/lib/node/math/margin.d.ts.map +1 -1
  402. package/lib/node/math/margin.js +3 -62
  403. package/lib/node/math/market.d.ts +4 -12
  404. package/lib/node/math/market.d.ts.map +1 -1
  405. package/lib/node/math/market.js +6 -40
  406. package/lib/node/math/oracles.d.ts +0 -3
  407. package/lib/node/math/oracles.d.ts.map +1 -1
  408. package/lib/node/math/oracles.js +1 -14
  409. package/lib/node/math/orders.d.ts +0 -5
  410. package/lib/node/math/orders.d.ts.map +1 -1
  411. package/lib/node/math/orders.js +2 -74
  412. package/lib/node/math/position.d.ts +1 -5
  413. package/lib/node/math/position.d.ts.map +1 -1
  414. package/lib/node/math/position.js +5 -10
  415. package/lib/node/math/repeg.d.ts +0 -1
  416. package/lib/node/math/repeg.d.ts.map +1 -1
  417. package/lib/node/math/repeg.js +1 -23
  418. package/lib/node/math/spotBalance.d.ts +4 -4
  419. package/lib/node/math/spotBalance.d.ts.map +1 -1
  420. package/lib/node/math/spotBalance.js +6 -6
  421. package/lib/node/math/spotMarket.d.ts +0 -6
  422. package/lib/node/math/spotMarket.d.ts.map +1 -1
  423. package/lib/node/math/spotMarket.js +1 -16
  424. package/lib/node/math/spotPosition.d.ts +4 -4
  425. package/lib/node/math/spotPosition.d.ts.map +1 -1
  426. package/lib/node/math/state.d.ts +0 -2
  427. package/lib/node/math/state.d.ts.map +1 -1
  428. package/lib/node/math/state.js +1 -9
  429. package/lib/node/math/superStake.d.ts +3 -53
  430. package/lib/node/math/superStake.d.ts.map +1 -1
  431. package/lib/node/math/superStake.js +16 -13
  432. package/lib/node/math/trade.d.ts +2 -2
  433. package/lib/node/math/trade.d.ts.map +1 -1
  434. package/lib/node/math/trade.js +6 -6
  435. package/lib/node/memcmp.d.ts +0 -1
  436. package/lib/node/memcmp.d.ts.map +1 -1
  437. package/lib/node/memcmp.js +1 -10
  438. package/lib/node/oracles/oracleClientCache.d.ts +1 -1
  439. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  440. package/lib/node/oracles/prelaunchOracleClient.js +3 -2
  441. package/lib/node/oracles/pythClient.d.ts.map +1 -1
  442. package/lib/node/oracles/pythClient.js +9 -3
  443. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  444. package/lib/node/oracles/pythLazerClient.js +3 -2
  445. package/lib/node/oracles/utils.d.ts +4 -0
  446. package/lib/node/oracles/utils.d.ts.map +1 -1
  447. package/lib/node/oracles/utils.js +9 -1
  448. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -1
  449. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  450. package/lib/node/orderSubscriber/OrderSubscriber.js +8 -2
  451. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
  452. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts.map +1 -1
  453. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +1 -1
  454. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  455. package/lib/node/priorityFee/priorityFeeSubscriber.js +32 -8
  456. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  457. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
  458. package/lib/node/pyth/types.d.ts +0 -1
  459. package/lib/node/pyth/types.d.ts.map +1 -1
  460. package/lib/node/slot/SlotSubscriber.d.ts +1 -1
  461. package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
  462. package/lib/node/slot/SlotSubscriber.js +2 -1
  463. package/lib/node/slot/SlothashSubscriber.d.ts +3 -2
  464. package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
  465. package/lib/node/slot/SlothashSubscriber.js +11 -4
  466. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  467. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts.map +1 -1
  468. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  469. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +3 -2
  470. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
  471. package/lib/node/swift/signedMsgUserAccountSubscriber.js +13 -5
  472. package/lib/node/swift/swiftOrderSubscriber.d.ts +1 -1
  473. package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
  474. package/lib/node/swift/swiftOrderSubscriber.js +10 -5
  475. package/lib/node/testClient.js +3 -2
  476. package/lib/node/tokenFaucet.d.ts.map +1 -1
  477. package/lib/node/tokenFaucet.js +16 -2
  478. package/lib/node/tx/baseTxSender.d.ts +4 -4
  479. package/lib/node/tx/baseTxSender.d.ts.map +1 -1
  480. package/lib/node/tx/baseTxSender.js +5 -4
  481. package/lib/node/tx/fastSingleTxSender.d.ts +3 -3
  482. package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
  483. package/lib/node/tx/fastSingleTxSender.js +9 -5
  484. package/lib/node/tx/reportTransactionError.d.ts +2 -2
  485. package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
  486. package/lib/node/tx/reportTransactionError.js +5 -1
  487. package/lib/node/tx/retryTxSender.d.ts +1 -1
  488. package/lib/node/tx/retryTxSender.d.ts.map +1 -1
  489. package/lib/node/tx/retryTxSender.js +4 -2
  490. package/lib/node/tx/txHandler.d.ts +9 -3
  491. package/lib/node/tx/txHandler.d.ts.map +1 -1
  492. package/lib/node/tx/txHandler.js +54 -40
  493. package/lib/node/tx/txParamProcessor.d.ts +4 -1
  494. package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
  495. package/lib/node/tx/txParamProcessor.js +6 -0
  496. package/lib/node/tx/types.d.ts +1 -1
  497. package/lib/node/tx/types.d.ts.map +1 -1
  498. package/lib/node/tx/whileValidTxSender.d.ts +1 -6
  499. package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
  500. package/lib/node/tx/whileValidTxSender.js +35 -13
  501. package/lib/node/types.d.ts +25 -68
  502. package/lib/node/types.d.ts.map +1 -1
  503. package/lib/node/types.js +2 -2
  504. package/lib/node/user.d.ts +21 -7
  505. package/lib/node/user.d.ts.map +1 -1
  506. package/lib/node/user.js +156 -132
  507. package/lib/node/userMap/WebsocketSubscription.d.ts +1 -1
  508. package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
  509. package/lib/node/userMap/grpcSubscription.d.ts +1 -1
  510. package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
  511. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  512. package/lib/node/userMap/referrerMap.js +10 -3
  513. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  514. package/lib/node/userMap/revenueShareEscrowMap.js +4 -0
  515. package/lib/node/userMap/userMap.d.ts +1 -1
  516. package/lib/node/userMap/userMap.d.ts.map +1 -1
  517. package/lib/node/userMap/userMap.js +36 -23
  518. package/lib/node/userMap/userStatsMap.d.ts +1 -1
  519. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  520. package/lib/node/userMap/userStatsMap.js +18 -13
  521. package/lib/node/userStats.d.ts +7 -2
  522. package/lib/node/userStats.d.ts.map +1 -1
  523. package/lib/node/userStats.js +18 -4
  524. package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
  525. package/lib/node/util/TransactionConfirmationManager.js +4 -2
  526. package/lib/node/util/chainClock.d.ts +1 -1
  527. package/lib/node/util/chainClock.d.ts.map +1 -1
  528. package/lib/node/util/computeUnits.d.ts +1 -1
  529. package/lib/node/util/computeUnits.d.ts.map +1 -1
  530. package/lib/node/util/computeUnits.js +6 -1
  531. package/lib/node/velocityClient.d.ts +93 -35
  532. package/lib/node/velocityClient.d.ts.map +1 -1
  533. package/lib/node/velocityClient.js +414 -280
  534. package/package.json +5 -3
  535. package/src/accounts/basicUserAccountSubscriber.ts +7 -5
  536. package/src/accounts/basicUserStatsAccountSubscriber.ts +9 -5
  537. package/src/accounts/bulkAccountLoader.ts +20 -7
  538. package/src/accounts/grpcAccountSubscriber.ts +11 -3
  539. package/src/accounts/grpcMultiAccountSubscriber.ts +24 -9
  540. package/src/accounts/grpcMultiUserAccountSubscriber.ts +16 -12
  541. package/src/accounts/grpcProgramAccountSubscriber.ts +11 -3
  542. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +17 -7
  543. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +66 -39
  544. package/src/accounts/laserProgramAccountSubscriber.ts +3 -0
  545. package/src/accounts/oneShotUserAccountSubscriber.ts +5 -3
  546. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +8 -3
  547. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +11 -5
  548. package/src/accounts/pollingOracleAccountSubscriber.ts +17 -10
  549. package/src/accounts/pollingTokenAccountSubscriber.ts +17 -10
  550. package/src/accounts/pollingUserAccountSubscriber.ts +26 -20
  551. package/src/accounts/pollingUserStatsAccountSubscriber.ts +12 -10
  552. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +76 -30
  553. package/src/accounts/types.ts +6 -4
  554. package/src/accounts/utils.ts +10 -0
  555. package/src/accounts/webSocketAccountSubscriber.ts +23 -10
  556. package/src/accounts/webSocketAccountSubscriberV2.ts +23 -8
  557. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +17 -2
  558. package/src/accounts/webSocketProgramAccountSubscriber.ts +29 -4
  559. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +30 -4
  560. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +29 -4
  561. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -2
  562. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +15 -2
  563. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +76 -48
  564. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +74 -35
  565. package/src/accounts/websocketProgramUserAccountSubscriber.ts +1 -6
  566. package/src/addresses/marketAddresses.ts +3 -2
  567. package/src/addresses/pda.ts +0 -25
  568. package/src/adminClient.ts +273 -303
  569. package/src/auctionSubscriber/auctionSubscriber.ts +7 -5
  570. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +12 -5
  571. package/src/bankrun/bankrunConnection.ts +83 -39
  572. package/src/blockhashSubscriber/BlockhashSubscriber.ts +5 -4
  573. package/src/clock/clockSubscriber.ts +10 -9
  574. package/src/config.ts +8 -3
  575. package/src/constants/index.ts +1 -2
  576. package/src/constants/numericConstants.ts +3 -3
  577. package/src/constituentMap/constituentMap.ts +8 -1
  578. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +4 -2
  579. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +13 -4
  580. package/src/core/instructions/perpOrders.ts +14 -0
  581. package/src/core/remainingAccounts.ts +4 -4
  582. package/src/decode/user.ts +8 -1
  583. package/src/dlob/DLOB.ts +296 -172
  584. package/src/dlob/DLOBNode.ts +23 -3
  585. package/src/dlob/DLOBSubscriber.ts +51 -34
  586. package/src/dlob/NodeList.ts +8 -7
  587. package/src/dlob/orderBookLevels.ts +45 -25
  588. package/src/events/eventList.ts +4 -1
  589. package/src/events/eventSubscriber.ts +107 -49
  590. package/src/events/eventsServerLogProvider.ts +22 -13
  591. package/src/events/fetchLogs.ts +3 -3
  592. package/src/events/pollingLogProvider.ts +2 -2
  593. package/src/events/txEventCache.ts +8 -2
  594. package/src/events/types.ts +0 -8
  595. package/src/events/webSocketLogProvider.ts +5 -3
  596. package/src/factory/bigNum.ts +2 -2
  597. package/src/idl/velocity.json +1234 -1577
  598. package/src/idl/velocity.ts +1234 -1577
  599. package/src/index.ts +0 -2
  600. package/src/jupiter/jupiterClient.ts +30 -10
  601. package/src/marginCalculation.ts +1 -0
  602. package/src/math/amm.ts +188 -33
  603. package/src/math/bankruptcy.ts +1 -1
  604. package/src/math/funding.ts +7 -6
  605. package/src/math/insurance.ts +6 -8
  606. package/src/math/margin.ts +5 -112
  607. package/src/math/market.ts +6 -96
  608. package/src/math/oracles.ts +0 -17
  609. package/src/math/orders.ts +1 -110
  610. package/src/math/position.ts +4 -16
  611. package/src/math/repeg.ts +0 -29
  612. package/src/math/spotBalance.ts +14 -10
  613. package/src/math/spotMarket.ts +2 -28
  614. package/src/math/spotPosition.ts +4 -4
  615. package/src/math/state.ts +0 -8
  616. package/src/math/superStake.ts +19 -65
  617. package/src/math/trade.ts +2 -6
  618. package/src/memcmp.ts +0 -9
  619. package/src/oracles/prelaunchOracleClient.ts +7 -2
  620. package/src/oracles/pythClient.ts +12 -3
  621. package/src/oracles/pythLazerClient.ts +7 -2
  622. package/src/oracles/utils.ts +15 -0
  623. package/src/orderSubscriber/OrderSubscriber.ts +10 -4
  624. package/src/priorityFee/heliusPriorityFeeMethod.ts +1 -1
  625. package/src/priorityFee/priorityFeeSubscriber.ts +45 -9
  626. package/src/priorityFee/solanaPriorityFeeMethod.ts +1 -1
  627. package/src/pyth/types.ts +0 -2
  628. package/src/slot/SlotSubscriber.ts +3 -3
  629. package/src/slot/SlothashSubscriber.ts +17 -6
  630. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +5 -6
  631. package/src/swift/signedMsgUserAccountSubscriber.ts +16 -8
  632. package/src/swift/swiftOrderSubscriber.ts +10 -9
  633. package/src/testClient.ts +2 -2
  634. package/src/tokenFaucet.ts +22 -3
  635. package/src/tx/baseTxSender.ts +10 -10
  636. package/src/tx/fastSingleTxSender.ts +12 -8
  637. package/src/tx/reportTransactionError.ts +12 -7
  638. package/src/tx/retryTxSender.ts +6 -4
  639. package/src/tx/txHandler.ts +88 -43
  640. package/src/tx/txParamProcessor.ts +18 -3
  641. package/src/tx/types.ts +1 -1
  642. package/src/tx/whileValidTxSender.ts +51 -22
  643. package/src/types.ts +39 -75
  644. package/src/user.ts +200 -152
  645. package/src/userMap/WebsocketSubscription.ts +1 -1
  646. package/src/userMap/grpcSubscription.ts +1 -1
  647. package/src/userMap/referrerMap.ts +13 -9
  648. package/src/userMap/revenueShareEscrowMap.ts +6 -1
  649. package/src/userMap/userMap.ts +43 -25
  650. package/src/userMap/userStatsMap.ts +32 -19
  651. package/src/userStats.ts +21 -8
  652. package/src/util/TransactionConfirmationManager.ts +10 -2
  653. package/src/util/chainClock.ts +1 -1
  654. package/src/util/computeUnits.ts +7 -3
  655. package/src/velocityClient.ts +536 -383
  656. package/tests/amm/test.ts +138 -0
  657. package/tests/dlob/helpers.ts +6 -1
  658. package/tsconfig.json +1 -0
  659. package/lib/browser/constants/insuranceFund.d.ts +0 -5
  660. package/lib/browser/constants/insuranceFund.js +0 -9
  661. package/lib/browser/tx/forwardOnlyTxSender.d.ts +0 -37
  662. package/lib/browser/tx/forwardOnlyTxSender.js +0 -92
  663. package/lib/browser/util/tps.d.ts +0 -2
  664. package/lib/browser/util/tps.js +0 -16
  665. package/lib/node/constants/insuranceFund.d.ts +0 -6
  666. package/lib/node/constants/insuranceFund.d.ts.map +0 -1
  667. package/lib/node/constants/insuranceFund.js +0 -9
  668. package/lib/node/tx/forwardOnlyTxSender.d.ts +0 -38
  669. package/lib/node/tx/forwardOnlyTxSender.d.ts.map +0 -1
  670. package/lib/node/tx/forwardOnlyTxSender.js +0 -92
  671. package/lib/node/util/tps.d.ts +0 -3
  672. package/lib/node/util/tps.d.ts.map +0 -1
  673. package/lib/node/util/tps.js +0 -16
  674. package/src/constants/insuranceFund.ts +0 -8
  675. package/src/tx/forwardOnlyTxSender.ts +0 -145
  676. package/src/util/tps.ts +0 -27
@@ -1,7 +1,7 @@
1
1
  import StrictEventEmitter from 'strict-event-emitter-types';
2
2
  import { EventEmitter } from 'events';
3
3
  import { OracleInfo, OraclePriceData } from '../oracles/types';
4
- import { PublicKey } from '@solana/web3.js';
4
+ import { AccountInfo, PublicKey } from '@solana/web3.js';
5
5
  import { findAllMarketAndOracles, VelocityProgram } from '../config';
6
6
  import {
7
7
  getVelocityStateAccountPublicKey,
@@ -70,8 +70,8 @@ export class grpcVelocityClientAccountSubscriberV2
70
70
  oracleClientCache = new OracleClientCache();
71
71
  private resubOpts?: ResubOpts;
72
72
 
73
- private subscriptionPromise: Promise<boolean>;
74
- protected subscriptionPromiseResolver: (val: boolean) => void;
73
+ private subscriptionPromiseResolver: (val: boolean) => void = () => {};
74
+ private subscriptionPromise: Promise<boolean> = Promise.resolve(false);
75
75
 
76
76
  constructor(
77
77
  grpcConfigs: GrpcConfigs,
@@ -130,7 +130,9 @@ export class grpcVelocityClientAccountSubscriberV2
130
130
  ).flat();
131
131
  this.initialPerpMarketAccountData = new Map(
132
132
  perpMarketAccountInfos
133
- .filter((accountInfo) => !!accountInfo)
133
+ .filter(
134
+ (accountInfo): accountInfo is AccountInfo<Buffer> => !!accountInfo
135
+ )
134
136
  .map((accountInfo) => {
135
137
  const perpMarket = this.program.coder.accounts.decode(
136
138
  'perpMarket',
@@ -158,7 +160,9 @@ export class grpcVelocityClientAccountSubscriberV2
158
160
  ).flat();
159
161
  this.initialSpotMarketAccountData = new Map(
160
162
  spotMarketAccountInfos
161
- .filter((accountInfo) => !!accountInfo)
163
+ .filter(
164
+ (accountInfo): accountInfo is AccountInfo<Buffer> => !!accountInfo
165
+ )
162
166
  .map((accountInfo) => {
163
167
  const spotMarket = this.program.coder.accounts.decode(
164
168
  'spotMarket',
@@ -181,24 +185,31 @@ export class grpcVelocityClientAccountSubscriberV2
181
185
  )
182
186
  ).flat();
183
187
  this.initialOraclePriceData = new Map(
184
- this.oracleInfos.reduce((result, oracleInfo, i) => {
185
- if (!oracleAccountInfos[i]) {
188
+ this.oracleInfos.reduce<[string, OraclePriceData][]>(
189
+ (result, oracleInfo, i) => {
190
+ const oracleAccountInfo = oracleAccountInfos[i];
191
+ if (!oracleAccountInfo) {
192
+ return result;
193
+ }
194
+ const oracleClient = this.oracleClientCache.get(
195
+ oracleInfo.source,
196
+ connection,
197
+ this.program
198
+ );
199
+ if (!oracleClient) {
200
+ return result;
201
+ }
202
+ const oraclePriceData = oracleClient.getOraclePriceDataFromBuffer(
203
+ oracleAccountInfo.data
204
+ );
205
+ result.push([
206
+ getOracleId(oracleInfo.publicKey, oracleInfo.source),
207
+ oraclePriceData,
208
+ ]);
186
209
  return result;
187
- }
188
- const oracleClient = this.oracleClientCache.get(
189
- oracleInfo.source,
190
- connection,
191
- this.program
192
- );
193
- const oraclePriceData = oracleClient.getOraclePriceDataFromBuffer(
194
- oracleAccountInfos[i].data
195
- );
196
- result.push([
197
- getOracleId(oracleInfo.publicKey, oracleInfo.source),
198
- oraclePriceData,
199
- ]);
200
- return result;
201
- }, [])
210
+ },
211
+ []
212
+ )
202
213
  );
203
214
  }
204
215
 
@@ -334,7 +345,7 @@ export class grpcVelocityClientAccountSubscriberV2
334
345
 
335
346
  public getStateAccountAndSlot(): DataAndSlot<StateAccount> {
336
347
  this.assertIsSubscribed();
337
- return this.stateAccountSubscriber.dataAndSlot;
348
+ return this.stateAccountSubscriber!.dataAndSlot!;
338
349
  }
339
350
 
340
351
  public getMarketAccountsAndSlots(): DataAndSlot<PerpMarketAccount>[] {
@@ -350,17 +361,23 @@ export class grpcVelocityClientAccountSubscriberV2
350
361
  getMarketAccountAndSlot(
351
362
  marketIndex: number
352
363
  ): DataAndSlot<PerpMarketAccount> | undefined {
353
- return this.perpMarketsSubscriber?.getAccountData(
354
- this.perpMarketIndexToAccountPubkeyMap.get(marketIndex)
355
- );
364
+ const accountPubkey =
365
+ this.perpMarketIndexToAccountPubkeyMap.get(marketIndex);
366
+ if (!accountPubkey) {
367
+ return undefined;
368
+ }
369
+ return this.perpMarketsSubscriber?.getAccountData(accountPubkey);
356
370
  }
357
371
 
358
372
  getSpotMarketAccountAndSlot(
359
373
  marketIndex: number
360
374
  ): DataAndSlot<SpotMarketAccount> | undefined {
361
- return this.spotMarketsSubscriber?.getAccountData(
362
- this.spotMarketIndexToAccountPubkeyMap.get(marketIndex)
363
- );
375
+ const accountPubkey =
376
+ this.spotMarketIndexToAccountPubkeyMap.get(marketIndex);
377
+ if (!accountPubkey) {
378
+ return undefined;
379
+ }
380
+ return this.spotMarketsSubscriber?.getAccountData(accountPubkey);
364
381
  }
365
382
 
366
383
  public getOraclePriceDataAndSlot(
@@ -382,8 +399,8 @@ export class grpcVelocityClientAccountSubscriberV2
382
399
  return undefined;
383
400
  }
384
401
 
385
- if (!perpMarketAccount.data.oracle.equals(oracle)) {
386
- // If the oracle has changed, we need to update the oracle map in background
402
+ if (!oracle || !perpMarketAccount.data.oracle.equals(oracle)) {
403
+ // If the oracle has changed (or not yet cached), update the oracle map in background
387
404
  this.setPerpOracleMap();
388
405
  }
389
406
 
@@ -400,8 +417,8 @@ export class grpcVelocityClientAccountSubscriberV2
400
417
  return undefined;
401
418
  }
402
419
 
403
- if (!spotMarketAccount.data.oracle.equals(oracle)) {
404
- // If the oracle has changed, we need to update the oracle map in background
420
+ if (!oracle || !spotMarketAccount.data.oracle.equals(oracle)) {
421
+ // If the oracle has changed (or not yet cached), update the oracle map in background
405
422
  this.setSpotOracleMap();
406
423
  }
407
424
 
@@ -410,7 +427,7 @@ export class grpcVelocityClientAccountSubscriberV2
410
427
 
411
428
  async setPerpOracleMap() {
412
429
  const perpMarketsMap = this.perpMarketsSubscriber?.getAccountDataMap();
413
- const perpMarkets = Array.from(perpMarketsMap.values());
430
+ const perpMarkets = Array.from(perpMarketsMap?.values() ?? []);
414
431
  const addOraclePromises = [];
415
432
  for (const perpMarket of perpMarkets) {
416
433
  if (!perpMarket || !perpMarket.data) {
@@ -436,7 +453,7 @@ export class grpcVelocityClientAccountSubscriberV2
436
453
 
437
454
  async setSpotOracleMap() {
438
455
  const spotMarketsMap = this.spotMarketsSubscriber?.getAccountDataMap();
439
- const spotMarkets = Array.from(spotMarketsMap.values());
456
+ const spotMarkets = Array.from(spotMarketsMap?.values() ?? []);
440
457
  const addOraclePromises = [];
441
458
  for (const spotMarket of spotMarkets) {
442
459
  if (!spotMarket || !spotMarket.data) {
@@ -604,7 +621,7 @@ export class grpcVelocityClientAccountSubscriberV2
604
621
  if (!oraclePubkeyToInfosMap.has(pubkey)) {
605
622
  oraclePubkeyToInfosMap.set(pubkey, []);
606
623
  }
607
- oraclePubkeyToInfosMap.get(pubkey).push(info);
624
+ oraclePubkeyToInfosMap.get(pubkey)!.push(info);
608
625
  }
609
626
 
610
627
  const oraclePubkeys = Array.from(
@@ -623,11 +640,18 @@ export class grpcVelocityClientAccountSubscriberV2
623
640
  throw new Error('Oracle pubkey missing in decode');
624
641
  }
625
642
 
643
+ if (!accountProps) {
644
+ throw new Error('Oracle accountProps missing in decode');
645
+ }
646
+
626
647
  const client = this.oracleClientCache.get(
627
648
  accountProps.source,
628
649
  this.program.provider.connection,
629
650
  this.program
630
651
  );
652
+ if (!client) {
653
+ throw new Error('Oracle client missing in decode');
654
+ }
631
655
  const price = client.getOraclePriceDataFromBuffer(buffer);
632
656
  return price;
633
657
  },
@@ -660,6 +684,9 @@ export class grpcVelocityClientAccountSubscriberV2
660
684
  await this.oracleMultiSubscriber.subscribe(
661
685
  oraclePubkeys,
662
686
  (accountId, data, context, _b, accountProps) => {
687
+ if (accountProps === undefined) {
688
+ return;
689
+ }
663
690
  const oracleId = getOracleId(accountId, accountProps.source);
664
691
  this.oracleIdToOracleDataMap.set(oracleId, {
665
692
  data,
@@ -698,21 +725,21 @@ export class grpcVelocityClientAccountSubscriberV2
698
725
  this.perpMarketIndexToAccountPubkeyMap.get(marketIndex);
699
726
  return pubkeyString ? new PublicKey(pubkeyString) : null;
700
727
  })
701
- .filter((pubkey) => pubkey !== null) as PublicKey[];
728
+ .filter((pubkey): pubkey is PublicKey => pubkey !== null);
702
729
 
703
730
  // Build array of oracle pubkeys to remove
704
731
  const oraclePubkeysToRemove = oracles.map((oracle) => oracle.publicKey);
705
732
 
706
733
  // Remove accounts in batches - perp markets
707
734
  if (perpMarketPubkeysToRemove.length > 0) {
708
- await this.perpMarketsSubscriber.removeAccounts(
735
+ await this.perpMarketsSubscriber?.removeAccounts(
709
736
  perpMarketPubkeysToRemove
710
737
  );
711
738
  }
712
739
 
713
740
  // Remove accounts in batches - oracles
714
741
  if (oraclePubkeysToRemove.length > 0) {
715
- await this.oracleMultiSubscriber.removeAccounts(oraclePubkeysToRemove);
742
+ await this.oracleMultiSubscriber?.removeAccounts(oraclePubkeysToRemove);
716
743
  }
717
744
  }
718
745
 
@@ -152,6 +152,9 @@ export class LaserstreamProgramAccountSubscriber<
152
152
  if (update.account) {
153
153
  const slot = Number(update.account.slot);
154
154
  const acc = update.account.account;
155
+ if (!acc) {
156
+ return;
157
+ }
155
158
 
156
159
  const accountInfo = {
157
160
  owner: new PublicKey(acc.owner),
@@ -30,7 +30,7 @@ export class OneShotUserAccountSubscriber
30
30
 
31
31
  async subscribe(userAccount?: UserAccount): Promise<boolean> {
32
32
  if (userAccount) {
33
- this.user = { data: userAccount, slot: this.user.slot };
33
+ this.user = { data: userAccount, slot: this.user?.slot ?? 0 };
34
34
  return true;
35
35
  }
36
36
 
@@ -42,7 +42,7 @@ export class OneShotUserAccountSubscriber
42
42
  }
43
43
 
44
44
  async fetchIfUnloaded(): Promise<void> {
45
- if (this.user.data === undefined) {
45
+ if (!this.user) {
46
46
  await this.fetch();
47
47
  }
48
48
  }
@@ -60,7 +60,9 @@ export class OneShotUserAccountSubscriber
60
60
  }
61
61
  } catch (e) {
62
62
  console.error(
63
- `OneShotUserAccountSubscriber.fetch() UserAccount does not exist: ${e.message}`
63
+ `OneShotUserAccountSubscriber.fetch() UserAccount does not exist: ${
64
+ e instanceof Error ? e.message : String(e)
65
+ }`
64
66
  );
65
67
  }
66
68
  }
@@ -30,7 +30,10 @@ export class OneShotUserStatsAccountSubscriber
30
30
 
31
31
  async subscribe(userStatsAccount?: UserStatsAccount): Promise<boolean> {
32
32
  if (userStatsAccount) {
33
- this.userStats = { data: userStatsAccount, slot: this.userStats.slot };
33
+ this.userStats = {
34
+ data: userStatsAccount,
35
+ slot: this.userStats?.slot ?? 0,
36
+ };
34
37
  return true;
35
38
  }
36
39
 
@@ -42,7 +45,7 @@ export class OneShotUserStatsAccountSubscriber
42
45
  }
43
46
 
44
47
  async fetchIfUnloaded(): Promise<void> {
45
- if (this.userStats.data === undefined) {
48
+ if (!this.userStats) {
46
49
  await this.fetch();
47
50
  }
48
51
  }
@@ -63,7 +66,9 @@ export class OneShotUserStatsAccountSubscriber
63
66
  }
64
67
  } catch (e) {
65
68
  console.error(
66
- `OneShotUserStatsAccountSubscriber.fetch() UserStatsAccount does not exist: ${e.message}`
69
+ `OneShotUserStatsAccountSubscriber.fetch() UserStatsAccount does not exist: ${
70
+ e instanceof Error ? e.message : String(e)
71
+ }`
67
72
  );
68
73
  }
69
74
  }
@@ -48,7 +48,7 @@ export class PollingInsuranceFundStakeAccountSubscriber
48
48
  if (insuranceFundStake) {
49
49
  this.insuranceFundStakeAccountAndSlot = {
50
50
  data: insuranceFundStake,
51
- slot: undefined,
51
+ slot: 0,
52
52
  };
53
53
  }
54
54
 
@@ -97,7 +97,7 @@ export class PollingInsuranceFundStakeAccountSubscriber
97
97
  }
98
98
 
99
99
  async fetchIfUnloaded(): Promise<void> {
100
- if (this.insuranceFundStakeAccountAndSlot === undefined) {
100
+ if (!this.doesAccountExist()) {
101
101
  await this.fetch();
102
102
  }
103
103
  }
@@ -121,12 +121,16 @@ export class PollingInsuranceFundStakeAccountSubscriber
121
121
  }
122
122
  } catch (e) {
123
123
  console.log(
124
- `PollingInsuranceFundStakeAccountSubscriber.fetch() InsuranceFundStake does not exist: ${e.message}`
124
+ `PollingInsuranceFundStakeAccountSubscriber.fetch() InsuranceFundStake does not exist: ${
125
+ e instanceof Error ? e.message : String(e)
126
+ }`
125
127
  );
126
128
  }
127
129
  }
128
130
 
129
- doesAccountExist(): boolean {
131
+ doesAccountExist(): this is {
132
+ insuranceFundStakeAccountAndSlot: DataAndSlot<InsuranceFundStake>;
133
+ } {
130
134
  return this.insuranceFundStakeAccountAndSlot !== undefined;
131
135
  }
132
136
 
@@ -155,7 +159,9 @@ export class PollingInsuranceFundStakeAccountSubscriber
155
159
  }
156
160
  }
157
161
 
158
- public getInsuranceFundStakeAccountAndSlot(): DataAndSlot<InsuranceFundStake> {
162
+ public getInsuranceFundStakeAccountAndSlot():
163
+ | DataAndSlot<InsuranceFundStake>
164
+ | undefined {
159
165
  this.assertIsSubscribed();
160
166
  return this.insuranceFundStakeAccountAndSlot;
161
167
  }
@@ -9,11 +9,9 @@ import { EventEmitter } from 'events';
9
9
  import { PublicKey } from '@solana/web3.js';
10
10
  import { BulkAccountLoader } from './bulkAccountLoader';
11
11
  import { OracleClient, OraclePriceData } from '../oracles/types';
12
- import { VelocityProgram } from '../config';
13
12
 
14
13
  export class PollingOracleAccountSubscriber implements OracleAccountSubscriber {
15
14
  isSubscribed: boolean;
16
- program: VelocityProgram;
17
15
  eventEmitter: StrictEventEmitter<EventEmitter, OracleEvents>;
18
16
  publicKey: PublicKey;
19
17
 
@@ -83,9 +81,14 @@ export class PollingOracleAccountSubscriber implements OracleAccountSubscriber {
83
81
 
84
82
  async fetch(): Promise<void> {
85
83
  await this.accountLoader.load();
86
- const { buffer, slot } = this.accountLoader.getBufferAndSlot(
87
- this.publicKey
88
- );
84
+ const bufferAndSlot = this.accountLoader.getBufferAndSlot(this.publicKey);
85
+ if (!bufferAndSlot) {
86
+ return;
87
+ }
88
+ const { buffer, slot } = bufferAndSlot;
89
+ if (!buffer) {
90
+ return;
91
+ }
89
92
  this.oraclePriceData = {
90
93
  data: await this.oracleClient.getOraclePriceDataFromBuffer(buffer),
91
94
  slot,
@@ -97,11 +100,15 @@ export class PollingOracleAccountSubscriber implements OracleAccountSubscriber {
97
100
  return;
98
101
  }
99
102
 
100
- this.accountLoader.removeAccount(this.publicKey, this.callbackId);
101
- this.callbackId = undefined;
103
+ if (this.callbackId) {
104
+ this.accountLoader.removeAccount(this.publicKey, this.callbackId);
105
+ this.callbackId = undefined;
106
+ }
102
107
 
103
- this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
104
- this.errorCallbackId = undefined;
108
+ if (this.errorCallbackId) {
109
+ this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
110
+ this.errorCallbackId = undefined;
111
+ }
105
112
 
106
113
  this.isSubscribed = false;
107
114
  }
@@ -116,7 +123,7 @@ export class PollingOracleAccountSubscriber implements OracleAccountSubscriber {
116
123
 
117
124
  public getOraclePriceData(): DataAndSlot<OraclePriceData> {
118
125
  this.assertIsSubscribed();
119
- return this.oraclePriceData;
126
+ return this.oraclePriceData!;
120
127
  }
121
128
 
122
129
  didSubscriptionSucceed(): boolean {
@@ -10,11 +10,9 @@ import { PublicKey } from '@solana/web3.js';
10
10
  import { BulkAccountLoader } from './bulkAccountLoader';
11
11
  import { Account } from '@solana/spl-token';
12
12
  import { parseTokenAccount } from '../token';
13
- import { VelocityProgram } from '../config';
14
13
 
15
14
  export class PollingTokenAccountSubscriber implements TokenAccountSubscriber {
16
15
  isSubscribed: boolean;
17
- program: VelocityProgram;
18
16
  eventEmitter: StrictEventEmitter<EventEmitter, TokenAccountEvents>;
19
17
  publicKey: PublicKey;
20
18
 
@@ -76,9 +74,14 @@ export class PollingTokenAccountSubscriber implements TokenAccountSubscriber {
76
74
 
77
75
  async fetch(): Promise<void> {
78
76
  await this.accountLoader.load();
79
- const { buffer, slot } = this.accountLoader.getBufferAndSlot(
80
- this.publicKey
81
- );
77
+ const bufferAndSlot = this.accountLoader.getBufferAndSlot(this.publicKey);
78
+ if (!bufferAndSlot) {
79
+ return;
80
+ }
81
+ const { buffer, slot } = bufferAndSlot;
82
+ if (!buffer) {
83
+ return;
84
+ }
82
85
  this.tokenAccountAndSlot = {
83
86
  data: parseTokenAccount(buffer, this.publicKey),
84
87
  slot,
@@ -90,11 +93,15 @@ export class PollingTokenAccountSubscriber implements TokenAccountSubscriber {
90
93
  return;
91
94
  }
92
95
 
93
- this.accountLoader.removeAccount(this.publicKey, this.callbackId);
94
- this.callbackId = undefined;
96
+ if (this.callbackId) {
97
+ this.accountLoader.removeAccount(this.publicKey, this.callbackId);
98
+ this.callbackId = undefined;
99
+ }
95
100
 
96
- this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
97
- this.errorCallbackId = undefined;
101
+ if (this.errorCallbackId) {
102
+ this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
103
+ this.errorCallbackId = undefined;
104
+ }
98
105
 
99
106
  this.isSubscribed = false;
100
107
  }
@@ -109,7 +116,7 @@ export class PollingTokenAccountSubscriber implements TokenAccountSubscriber {
109
116
 
110
117
  public getTokenAccountAndSlot(): DataAndSlot<Account> {
111
118
  this.assertIsSubscribed();
112
- return this.tokenAccountAndSlot;
119
+ return this.tokenAccountAndSlot!;
113
120
  }
114
121
 
115
122
  didSubscriptionSucceed(): boolean {
@@ -21,7 +21,7 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
21
21
  callbackId?: string;
22
22
  errorCallbackId?: string;
23
23
 
24
- decode: (name, buffer) => UserAccount;
24
+ decode: (name: string, buffer: Buffer) => UserAccount;
25
25
 
26
26
  user?: DataAndSlot<UserAccount>;
27
27
 
@@ -29,7 +29,7 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
29
29
  connection: Connection,
30
30
  userAccountPublicKey: PublicKey,
31
31
  accountLoader: BulkAccountLoader,
32
- decode: (name, buffer) => UserAccount
32
+ decode: (name: string, buffer: Buffer) => UserAccount
33
33
  ) {
34
34
  this.isSubscribed = false;
35
35
  this.connection = connection;
@@ -45,7 +45,9 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
45
45
  }
46
46
 
47
47
  if (userAccount) {
48
- this.user = { data: userAccount, slot: undefined };
48
+ // `slot: 0` keeps {data, slot} atomic: a seeded account always carries a
49
+ // slot (0 = oldest-possible sentinel, overwritten by the first real fetch).
50
+ this.user = { data: userAccount, slot: 0 };
49
51
  }
50
52
 
51
53
  await this.addToAccountLoader();
@@ -88,7 +90,7 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
88
90
  }
89
91
 
90
92
  async fetchIfUnloaded(): Promise<void> {
91
- if (this.user === undefined) {
93
+ if (!this.doesAccountExist()) {
92
94
  await this.fetch();
93
95
  }
94
96
  }
@@ -99,20 +101,24 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
99
101
  this.userAccountPublicKey,
100
102
  this.accountLoader.commitment
101
103
  );
102
- if (dataAndContext.context.slot > (this.user?.slot ?? 0)) {
104
+ if (
105
+ dataAndContext.value !== null &&
106
+ dataAndContext.context.slot > (this.user?.slot ?? 0)
107
+ ) {
103
108
  this.user = {
104
109
  data: this.decode('user', dataAndContext.value.data),
105
110
  slot: dataAndContext.context.slot,
106
111
  };
107
112
  }
108
113
  } catch (e) {
114
+ const err = e instanceof Error ? e : new Error(String(e));
109
115
  console.log(
110
- `PollingUserAccountSubscriber.fetch() UserAccount does not exist: ${e.message}-${e.stack}`
116
+ `PollingUserAccountSubscriber.fetch() UserAccount does not exist: ${err.message}-${err.stack}`
111
117
  );
112
118
  }
113
119
  }
114
120
 
115
- doesAccountExist(): boolean {
121
+ doesAccountExist(): this is { user: DataAndSlot<UserAccount> } {
116
122
  return this.user !== undefined;
117
123
  }
118
124
 
@@ -121,14 +127,18 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
121
127
  return;
122
128
  }
123
129
 
124
- this.accountLoader.removeAccount(
125
- this.userAccountPublicKey,
126
- this.callbackId
127
- );
128
- this.callbackId = undefined;
130
+ if (this.callbackId) {
131
+ this.accountLoader.removeAccount(
132
+ this.userAccountPublicKey,
133
+ this.callbackId
134
+ );
135
+ this.callbackId = undefined;
136
+ }
129
137
 
130
- this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
131
- this.errorCallbackId = undefined;
138
+ if (this.errorCallbackId) {
139
+ this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
140
+ this.errorCallbackId = undefined;
141
+ }
132
142
 
133
143
  this.isSubscribed = false;
134
144
  }
@@ -141,12 +151,8 @@ export class PollingUserAccountSubscriber implements UserAccountSubscriber {
141
151
  }
142
152
  }
143
153
 
144
- public getUserAccountAndSlot(): DataAndSlot<UserAccount> {
145
- if (!this.doesAccountExist()) {
146
- throw new NotSubscribedError(
147
- 'You must call `subscribe` or `fetch` before using this function'
148
- );
149
- }
154
+ public getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined {
155
+ this.assertIsSubscribed();
150
156
  return this.user;
151
157
  }
152
158
 
@@ -43,7 +43,9 @@ export class PollingUserStatsAccountSubscriber
43
43
  }
44
44
 
45
45
  if (userStatsAccount) {
46
- this.userStats = { data: userStatsAccount, slot: undefined };
46
+ // `slot: 0` keeps {data, slot} atomic: a seeded account always carries a
47
+ // slot (0 = oldest-possible sentinel, overwritten by the first real fetch).
48
+ this.userStats = { data: userStatsAccount, slot: 0 };
47
49
  }
48
50
 
49
51
  await this.addToAccountLoader();
@@ -90,7 +92,7 @@ export class PollingUserStatsAccountSubscriber
90
92
  }
91
93
 
92
94
  async fetchIfUnloaded(): Promise<void> {
93
- if (this.userStats === undefined) {
95
+ if (!this.doesAccountExist()) {
94
96
  await this.fetch();
95
97
  }
96
98
  }
@@ -111,12 +113,14 @@ export class PollingUserStatsAccountSubscriber
111
113
  }
112
114
  } catch (e) {
113
115
  console.log(
114
- `PollingUserStatsAccountSubscriber.fetch() UserStatsAccount does not exist: ${e.message}`
116
+ `PollingUserStatsAccountSubscriber.fetch() UserStatsAccount does not exist: ${
117
+ e instanceof Error ? e.message : String(e)
118
+ }`
115
119
  );
116
120
  }
117
121
  }
118
122
 
119
- doesAccountExist(): boolean {
123
+ doesAccountExist(): this is { userStats: DataAndSlot<UserStatsAccount> } {
120
124
  return this.userStats !== undefined;
121
125
  }
122
126
 
@@ -145,12 +149,10 @@ export class PollingUserStatsAccountSubscriber
145
149
  }
146
150
  }
147
151
 
148
- public getUserStatsAccountAndSlot(): DataAndSlot<UserStatsAccount> {
149
- if (!this.doesAccountExist()) {
150
- throw new NotSubscribedError(
151
- 'You must call `subscribe` or `fetch` before using this function'
152
- );
153
- }
152
+ public getUserStatsAccountAndSlot():
153
+ | DataAndSlot<UserStatsAccount>
154
+ | undefined {
155
+ this.assertIsSubscribed();
154
156
  return this.userStats;
155
157
  }
156
158
  }