@drift-labs/common 1.0.59 → 1.0.60

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 (282) hide show
  1. package/lib/_deprecated/common-math.d.ts +10 -0
  2. package/lib/_deprecated/common-math.js +9 -0
  3. package/lib/_deprecated/common-math.js.map +1 -0
  4. package/lib/_deprecated/common-ui-utils.d.ts +248 -0
  5. package/lib/_deprecated/common-ui-utils.js +59 -0
  6. package/lib/_deprecated/common-ui-utils.js.map +1 -0
  7. package/lib/_deprecated/equality-checks.d.ts +2 -0
  8. package/lib/_deprecated/equality-checks.js +7 -0
  9. package/lib/_deprecated/equality-checks.js.map +1 -0
  10. package/lib/{common-ui-utils/market.d.ts → _deprecated/market-utils.d.ts} +5 -7
  11. package/lib/_deprecated/market-utils.js +18 -0
  12. package/lib/_deprecated/market-utils.js.map +1 -0
  13. package/lib/_deprecated/order-utils.d.ts +12 -0
  14. package/lib/_deprecated/order-utils.js +18 -0
  15. package/lib/_deprecated/order-utils.js.map +1 -0
  16. package/lib/_deprecated/trading-utils.d.ts +52 -0
  17. package/lib/_deprecated/trading-utils.js +27 -0
  18. package/lib/_deprecated/trading-utils.js.map +1 -0
  19. package/lib/_deprecated/user-utils.d.ts +17 -0
  20. package/lib/_deprecated/user-utils.js +12 -0
  21. package/lib/_deprecated/user-utils.js.map +1 -0
  22. package/lib/_deprecated/utils.d.ts +40 -0
  23. package/lib/_deprecated/utils.js +47 -0
  24. package/lib/_deprecated/utils.js.map +1 -0
  25. package/lib/clients/tvFeed.js +2 -2
  26. package/lib/clients/tvFeed.js.map +1 -1
  27. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +8 -8
  28. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -1
  29. package/lib/drift/Drift/clients/AuthorityDrift/index.js +9 -9
  30. package/lib/drift/Drift/clients/AuthorityDrift/index.js.map +1 -1
  31. package/lib/drift/Drift/clients/CentralServerDrift/index.js +2 -2
  32. package/lib/drift/Drift/clients/CentralServerDrift/index.js.map +1 -1
  33. package/lib/drift/base/actions/trade/editOrder.d.ts +1 -1
  34. package/lib/drift/base/actions/trade/editOrder.js.map +1 -1
  35. package/lib/drift/base/actions/trade/margin.js +4 -4
  36. package/lib/drift/base/actions/trade/margin.js.map +1 -1
  37. package/lib/drift/base/actions/trade/openPerpOrder/auction.d.ts +1 -1
  38. package/lib/drift/base/actions/trade/openPerpOrder/auction.js +4 -3
  39. package/lib/drift/base/actions/trade/openPerpOrder/auction.js.map +1 -1
  40. package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js +2 -2
  41. package/lib/drift/base/actions/trade/openPerpOrder/dlobServer/index.js.map +1 -1
  42. package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js +2 -2
  43. package/lib/drift/base/actions/trade/openPerpOrder/isolatedPositionDeposit.js.map +1 -1
  44. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.d.ts +1 -1
  45. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +4 -4
  46. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -1
  47. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.d.ts +1 -1
  48. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +2 -2
  49. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -1
  50. package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js +4 -3
  51. package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js.map +1 -1
  52. package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js +2 -2
  53. package/lib/drift/base/actions/trade/openPerpOrder/positionMaxLeverage.js.map +1 -1
  54. package/lib/drift/base/actions/user/create.js +2 -2
  55. package/lib/drift/base/actions/user/create.js.map +1 -1
  56. package/lib/drift/base/details/user/balances.js +2 -2
  57. package/lib/drift/base/details/user/balances.js.map +1 -1
  58. package/lib/drift/base/details/user/positions.js +2 -2
  59. package/lib/drift/base/details/user/positions.js.map +1 -1
  60. package/lib/index.d.ts +28 -28
  61. package/lib/index.js +44 -29
  62. package/lib/index.js.map +1 -1
  63. package/lib/utils/accounts/index.d.ts +6 -0
  64. package/lib/utils/accounts/index.js +23 -0
  65. package/lib/utils/accounts/index.js.map +1 -0
  66. package/lib/utils/accounts/init.d.ts +22 -0
  67. package/lib/utils/accounts/init.js +90 -0
  68. package/lib/utils/accounts/init.js.map +1 -0
  69. package/lib/utils/accounts/keys.d.ts +22 -0
  70. package/lib/utils/accounts/keys.js +36 -0
  71. package/lib/utils/accounts/keys.js.map +1 -0
  72. package/lib/utils/accounts/multiple.d.ts +14 -0
  73. package/lib/utils/accounts/multiple.js +45 -0
  74. package/lib/utils/accounts/multiple.js.map +1 -0
  75. package/lib/utils/accounts/signature.d.ts +6 -0
  76. package/lib/utils/accounts/signature.js +53 -0
  77. package/lib/utils/accounts/signature.js.map +1 -0
  78. package/lib/utils/accounts/subaccounts.d.ts +8 -0
  79. package/lib/utils/accounts/subaccounts.js +31 -0
  80. package/lib/utils/accounts/subaccounts.js.map +1 -0
  81. package/lib/utils/{WalletConnectionState.d.ts → accounts/wallet.d.ts} +7 -1
  82. package/lib/utils/{WalletConnectionState.js → accounts/wallet.js} +32 -2
  83. package/lib/utils/accounts/wallet.js.map +1 -0
  84. package/lib/utils/core/arrays.d.ts +2 -0
  85. package/lib/utils/core/arrays.js +25 -0
  86. package/lib/utils/core/arrays.js.map +1 -0
  87. package/lib/utils/core/async.d.ts +5 -0
  88. package/lib/utils/core/async.js +17 -0
  89. package/lib/utils/core/async.js.map +1 -0
  90. package/lib/utils/core/cache.d.ts +1 -0
  91. package/lib/utils/core/cache.js +40 -0
  92. package/lib/utils/core/cache.js.map +1 -0
  93. package/lib/utils/core/data-structures.d.ts +30 -0
  94. package/lib/utils/core/data-structures.js +84 -0
  95. package/lib/utils/core/data-structures.js.map +1 -0
  96. package/lib/utils/{equalityChecks.d.ts → core/equality.d.ts} +1 -1
  97. package/lib/utils/{equalityChecks.js → core/equality.js} +3 -3
  98. package/lib/utils/core/equality.js.map +1 -0
  99. package/lib/utils/core/fetch.js.map +1 -0
  100. package/lib/utils/core/index.d.ts +7 -0
  101. package/lib/utils/core/index.js +24 -0
  102. package/lib/utils/core/index.js.map +1 -0
  103. package/lib/utils/core/serialization.d.ts +30 -0
  104. package/lib/utils/core/serialization.js +92 -0
  105. package/lib/utils/core/serialization.js.map +1 -0
  106. package/lib/utils/{enum.js → enum/index.js} +1 -1
  107. package/lib/utils/enum/index.js.map +1 -0
  108. package/lib/utils/index.d.ts +11 -176
  109. package/lib/utils/index.js +25 -594
  110. package/lib/utils/index.js.map +1 -1
  111. package/lib/utils/markets/balances.d.ts +6 -0
  112. package/lib/utils/markets/balances.js +29 -0
  113. package/lib/utils/markets/balances.js.map +1 -0
  114. package/lib/utils/markets/config.d.ts +5 -0
  115. package/lib/utils/markets/config.js +24 -0
  116. package/lib/utils/markets/config.js.map +1 -0
  117. package/lib/utils/markets/index.d.ts +6 -0
  118. package/lib/utils/markets/index.js +23 -0
  119. package/lib/utils/markets/index.js.map +1 -0
  120. package/lib/utils/markets/interest.d.ts +25 -0
  121. package/lib/utils/markets/interest.js +65 -0
  122. package/lib/utils/markets/interest.js.map +1 -0
  123. package/lib/utils/markets/leverage.d.ts +12 -0
  124. package/lib/utils/markets/leverage.js +60 -0
  125. package/lib/utils/markets/leverage.js.map +1 -0
  126. package/lib/utils/markets/operations.d.ts +21 -0
  127. package/lib/utils/markets/operations.js +59 -0
  128. package/lib/utils/markets/operations.js.map +1 -0
  129. package/lib/utils/math/bignum.d.ts +3 -0
  130. package/lib/utils/math/bignum.js +16 -0
  131. package/lib/utils/math/bignum.js.map +1 -0
  132. package/lib/utils/math/bn.d.ts +7 -0
  133. package/lib/utils/math/bn.js +58 -0
  134. package/lib/utils/math/bn.js.map +1 -0
  135. package/lib/utils/math/index.d.ts +7 -0
  136. package/lib/utils/math/index.js +24 -0
  137. package/lib/utils/math/index.js.map +1 -0
  138. package/lib/utils/math/numbers.d.ts +13 -0
  139. package/lib/utils/math/numbers.js +56 -0
  140. package/lib/utils/math/numbers.js.map +1 -0
  141. package/lib/utils/math/precision.d.ts +19 -0
  142. package/lib/utils/math/precision.js +73 -0
  143. package/lib/utils/math/precision.js.map +1 -0
  144. package/lib/utils/math/price.d.ts +12 -0
  145. package/lib/utils/math/price.js +45 -0
  146. package/lib/utils/math/price.js.map +1 -0
  147. package/lib/utils/math/sort.d.ts +13 -0
  148. package/lib/utils/math/sort.js +33 -0
  149. package/lib/utils/math/sort.js.map +1 -0
  150. package/lib/utils/math/spread.d.ts +8 -0
  151. package/lib/utils/math/spread.js +87 -0
  152. package/lib/utils/math/spread.js.map +1 -0
  153. package/lib/utils/orderbook/index.js +4 -4
  154. package/lib/utils/orderbook/index.js.map +1 -1
  155. package/lib/utils/orders/filters.d.ts +7 -0
  156. package/lib/utils/orders/filters.js +31 -0
  157. package/lib/utils/orders/filters.js.map +1 -0
  158. package/lib/utils/orders/flags.d.ts +12 -0
  159. package/lib/utils/orders/flags.js +44 -0
  160. package/lib/utils/orders/flags.js.map +1 -0
  161. package/lib/utils/orders/index.d.ts +6 -0
  162. package/lib/utils/orders/index.js +23 -0
  163. package/lib/utils/orders/index.js.map +1 -0
  164. package/lib/utils/orders/labels.d.ts +4 -0
  165. package/lib/utils/orders/labels.js +122 -0
  166. package/lib/utils/orders/labels.js.map +1 -0
  167. package/lib/utils/orders/misc.d.ts +11 -0
  168. package/lib/utils/orders/misc.js +27 -0
  169. package/lib/utils/orders/misc.js.map +1 -0
  170. package/lib/utils/orders/oracle.d.ts +5 -0
  171. package/lib/utils/orders/oracle.js +23 -0
  172. package/lib/utils/orders/oracle.js.map +1 -0
  173. package/lib/utils/orders/sort.d.ts +38 -0
  174. package/lib/utils/orders/sort.js +83 -0
  175. package/lib/utils/orders/sort.js.map +1 -0
  176. package/lib/utils/positions/index.d.ts +2 -0
  177. package/lib/{common-ui-utils → utils/positions}/index.js +1 -5
  178. package/lib/utils/positions/index.js.map +1 -0
  179. package/lib/utils/positions/open.d.ts +4 -0
  180. package/lib/{common-ui-utils/user.js → utils/positions/open.js} +10 -81
  181. package/lib/utils/positions/open.js.map +1 -0
  182. package/lib/utils/positions/user.d.ts +37 -0
  183. package/lib/utils/positions/user.js +74 -0
  184. package/lib/utils/positions/user.js.map +1 -0
  185. package/lib/utils/settings/settings.js.map +1 -0
  186. package/lib/utils/strings/convert.d.ts +11 -0
  187. package/lib/utils/{strings.js → strings/convert.js} +2 -51
  188. package/lib/utils/strings/convert.js.map +1 -0
  189. package/lib/utils/strings/format.d.ts +14 -0
  190. package/lib/utils/strings/format.js +61 -0
  191. package/lib/utils/strings/format.js.map +1 -0
  192. package/lib/utils/strings/index.d.ts +4 -0
  193. package/lib/utils/strings/index.js +21 -0
  194. package/lib/utils/strings/index.js.map +1 -0
  195. package/lib/utils/strings/parse.d.ts +4 -0
  196. package/lib/utils/strings/parse.js +25 -0
  197. package/lib/utils/strings/parse.js.map +1 -0
  198. package/lib/utils/strings/status.d.ts +15 -0
  199. package/lib/utils/strings/status.js +21 -0
  200. package/lib/utils/strings/status.js.map +1 -0
  201. package/lib/utils/token/account.d.ts +16 -0
  202. package/lib/utils/token/account.js +36 -0
  203. package/lib/utils/token/account.js.map +1 -0
  204. package/lib/utils/{token.d.ts → token/address.d.ts} +2 -7
  205. package/lib/utils/token/address.js +30 -0
  206. package/lib/utils/token/address.js.map +1 -0
  207. package/lib/utils/token/index.d.ts +3 -0
  208. package/lib/utils/token/index.js +20 -0
  209. package/lib/utils/token/index.js.map +1 -0
  210. package/lib/utils/token/instructions.d.ts +3 -0
  211. package/lib/utils/token/instructions.js +17 -0
  212. package/lib/utils/token/instructions.js.map +1 -0
  213. package/lib/utils/trading/auction.d.ts +82 -0
  214. package/lib/utils/trading/auction.js +208 -0
  215. package/lib/utils/trading/auction.js.map +1 -0
  216. package/lib/utils/trading/index.d.ts +7 -0
  217. package/lib/utils/trading/index.js +24 -0
  218. package/lib/utils/trading/index.js.map +1 -0
  219. package/lib/utils/trading/leverage.d.ts +18 -0
  220. package/lib/utils/trading/leverage.js +79 -0
  221. package/lib/utils/trading/leverage.js.map +1 -0
  222. package/lib/utils/trading/liquidation.d.ts +22 -0
  223. package/lib/utils/trading/liquidation.js +67 -0
  224. package/lib/utils/trading/liquidation.js.map +1 -0
  225. package/lib/utils/trading/lp.d.ts +4 -0
  226. package/lib/utils/trading/lp.js +20 -0
  227. package/lib/utils/trading/lp.js.map +1 -0
  228. package/lib/utils/trading/pnl.d.ts +34 -0
  229. package/lib/utils/trading/pnl.js +88 -0
  230. package/lib/utils/trading/pnl.js.map +1 -0
  231. package/lib/utils/trading/price.d.ts +12 -0
  232. package/lib/utils/trading/price.js +36 -0
  233. package/lib/utils/trading/price.js.map +1 -0
  234. package/lib/utils/trading/size.d.ts +27 -0
  235. package/lib/utils/trading/size.js +83 -0
  236. package/lib/utils/trading/size.js.map +1 -0
  237. package/lib/utils/{validation.d.ts → validation/address.d.ts} +1 -2
  238. package/lib/utils/{validation.js → validation/address.js} +4 -6
  239. package/lib/utils/validation/address.js.map +1 -0
  240. package/lib/utils/validation/index.d.ts +3 -0
  241. package/lib/utils/validation/index.js +20 -0
  242. package/lib/utils/validation/index.js.map +1 -0
  243. package/lib/utils/validation/input.d.ts +3 -0
  244. package/lib/utils/validation/input.js +33 -0
  245. package/lib/utils/validation/input.js.map +1 -0
  246. package/lib/utils/validation/notional.d.ts +2 -0
  247. package/lib/utils/validation/notional.js +8 -0
  248. package/lib/utils/validation/notional.js.map +1 -0
  249. package/package.json +90 -3
  250. package/lib/common-ui-utils/commonUiUtils.d.ts +0 -251
  251. package/lib/common-ui-utils/commonUiUtils.js +0 -647
  252. package/lib/common-ui-utils/commonUiUtils.js.map +0 -1
  253. package/lib/common-ui-utils/index.d.ts +0 -6
  254. package/lib/common-ui-utils/index.js.map +0 -1
  255. package/lib/common-ui-utils/market.js +0 -134
  256. package/lib/common-ui-utils/market.js.map +0 -1
  257. package/lib/common-ui-utils/order.d.ts +0 -25
  258. package/lib/common-ui-utils/order.js +0 -191
  259. package/lib/common-ui-utils/order.js.map +0 -1
  260. package/lib/common-ui-utils/settings/settings.js.map +0 -1
  261. package/lib/common-ui-utils/trading.d.ts +0 -79
  262. package/lib/common-ui-utils/trading.js +0 -313
  263. package/lib/common-ui-utils/trading.js.map +0 -1
  264. package/lib/common-ui-utils/user.d.ts +0 -18
  265. package/lib/common-ui-utils/user.js.map +0 -1
  266. package/lib/utils/WalletConnectionState.js.map +0 -1
  267. package/lib/utils/enum.js.map +0 -1
  268. package/lib/utils/equalityChecks.js.map +0 -1
  269. package/lib/utils/fetch.js.map +0 -1
  270. package/lib/utils/math.d.ts +0 -31
  271. package/lib/utils/math.js +0 -181
  272. package/lib/utils/math.js.map +0 -1
  273. package/lib/utils/strings.d.ts +0 -34
  274. package/lib/utils/strings.js.map +0 -1
  275. package/lib/utils/token.js +0 -45
  276. package/lib/utils/token.js.map +0 -1
  277. package/lib/utils/validation.js.map +0 -1
  278. /package/lib/utils/{fetch.d.ts → core/fetch.d.ts} +0 -0
  279. /package/lib/utils/{fetch.js → core/fetch.js} +0 -0
  280. /package/lib/utils/{enum.d.ts → enum/index.d.ts} +0 -0
  281. /package/lib/{common-ui-utils → utils}/settings/settings.d.ts +0 -0
  282. /package/lib/{common-ui-utils → utils}/settings/settings.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"positions.js","sourceRoot":"","sources":["../../../../../src/drift/base/details/user/positions.ts"],"names":[],"mappings":";;;AAAA,yCAoByB;AACzB,iEAAoE;AACpE,6CAA+C;AAC/C,qDAG+B;AAqB/B;;;;;;;;;;;GAWG;AACI,MAAM,yBAAyB,GAAG,CACxC,WAAwB,EACxB,YAA0B,EAC1B,cAAkB,EAClB,eAAwB,EACC,EAAE;IAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACrC,MAAM,UAAU,GAAG,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,oBAAoB,GAAG,YAAM,CAAC,IAAI,CAAC,cAAc,EAAE,yBAAmB,CAAC,CAAC;IAE9E,YAAY;IACZ,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAC9C,MAAM,cAAc,GAAG,YAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,wBAAkB,CAAC,CAAC;IAEvE,cAAc;IACd,MAAM,YAAY,GAAG,IAAA,yBAAmB,EAAC,YAAY,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,YAAM,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAmB,CAAC,CAAC;IAExE,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEzC,yCAAyC;IACzC,MAAM,kBAAkB,GAAG,kBAAU,CAAC,KAAK,CAC1C,UAAU,CAAC,YAAY,EACvB,kBAAY,CAAC,UAAU,CACvB,CAAC;IAEF,qBAAqB;IACrB,6CAA6C;IAC7C,IAAI,kBAAkB,EAAE,CAAC;QACxB,MAAM,UAAU,GACf,kBAAU,CAAC,KAAK,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE,kBAAY,CAAC,UAAU,CAAC;YAC7D,kBAAU,CAAC,KAAK,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE,kBAAY,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAC9C,UAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CACtC,CAAC;YAEF,MAAM,KAAK,GAAG,YAAY;gBACzB,CAAC,CAAC,UAAI,CAAC,GAAG,CAAC,qBAAe,CAAC;gBAC3B,CAAC,CAAC,SAAG,CAAC,GAAG,CAAC,qBAAe,CAAC,CAAC;YAE5B,cAAc,GAAG,KAAK,CAAC;QACxB,CAAC;IACF,CAAC;IAED,eAAe;IACf,MAAM,qBAAqB,GAAG,uBAAa,CAAC,wBAAwB,CAAC;QACpE,mBAAmB,EAAE,cAAc;QACnC,wBAAwB,EAAE,eAAe;YACxC,CAAC,CAAC,uBAAiB,CAAC,KAAK;YACzB,CAAC,CAAC,uBAAiB,CAAC,IAAI;QACzB,yBAAyB,EAAE,YAAM,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAmB,CAAC;QACzE,cAAc,EAAE,eAAe;YAC9B,CAAC,CAAC,uBAAiB,CAAC,IAAI;YACxB,CAAC,CAAC,uBAAiB,CAAC,KAAK;QAC1B,YAAY,EAAE,cAAc;QAC5B,SAAS,EAAE,oBAAoB;QAC/B,WAAW,EAAE,CAAC;KACd,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,yBAAmB,CAAC,CAAC,GAAG,CAAC;IACpD,MAAM,yBAAyB,GAAG,YAAM,CAAC,IAAI,CAC5C,qBAAqB,EACrB,yBAAmB,CACnB,CAAC;IAEF,0EAA0E;IAC1E,MAAM,sBAAsB,GAAG,kBAAkB,IAAI,eAAe,CAAC;IAErE,uDAAuD;IACvD,MAAM,iCAAiC,GAAG,sBAAsB;QAC/D,CAAC,CAAC,wCAA4B,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,GAAG;QAC5D,CAAC,CAAC,cAAc,CAAC;IAElB,MAAM,qBAAqB,GAAG,kBAAkB;QAC/C,CAAC,CAAC,YAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,yBAAmB,CAAC;aAClE,GAAG,CAAC,gBAAgB,CAAC;aACrB,GAAG,CAAC,qBAAe,CAAC;aACpB,GAAG,CAAC,YAAY,CAAC;aACjB,KAAK,EAAE;YACR,GAAG;YACH,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,CAAC,GAAG,EAAE;gBACN,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBAExD,IAAI,WAAW,CAAC,EAAE,CAAC,UAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;gBAEnC,MAAM,MAAM,GACX,yBAAyB,CAAC,GAAG;qBAC3B,GAAG,CAAC,IAAI,QAAE,CAAC,KAAM,CAAC,CAAC;qBACnB,GAAG,CAAC,WAAW,CAAC;qBAChB,QAAQ,EAAE,GAAG,OAAS,CAAC;gBAC1B,OAAO,MAAM,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,EAAE;YACN,CAAC,CAAC,CAAC,CAAC;IAEL,OAAO;QACN,mBAAmB,EAAE,yBAAyB;QAC9C,qBAAqB;KACrB,CAAC;AACH,CAAC,CAAC;AApGW,QAAA,yBAAyB,6BAoGpC;AAyCK,MAAM,eAAe,GAAG,CAC9B,WAAwB,EACxB,IAAU,EACV,YAA0B,EAC1B,WAAe,EACf,SAAa,EACM,EAAE;IACrB,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IAErC,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAC9C,MAAM,cAAc,GAAG,YAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,wBAAkB,CAAC,CAAC;IAEvE,MAAM,kBAAkB,GAAG,YAAM,CAAC,IAAI,CACrC,IAAI;SACF,oBAAoB,CAAC,YAAY,CAAC,WAAW,EAAE;QAC/C,KAAK,EAAE,WAAW;KAClB,CAAC;SACD,GAAG,EAAE,EACP,yBAAmB,CACnB,CAAC;IAEF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,EAAE;QACzC,CAAC,CAAC,uBAAiB,CAAC,KAAK;QACzB,CAAC,CAAC,uBAAiB,CAAC,IAAI,CAAC;IAE1B,MAAM,UAAU,GAAG,IAAA,yBAAmB,EAAC,YAAY,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,YAAM,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAmB,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,YAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,yBAAmB,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,uBAAuB,GAAG,YAAM,CAAC,IAAI,CAC1C,IAAA,gCAA0B,EAAC,UAAU,EAAE,YAAY,CAAC,EACpD,yBAAmB,CACnB,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;IACtD,MAAM,uBAAuB,GAAG,IAAA,iCAAyB,EACxD,WAAW,EACX,YAAY,EACZ,WAAW,EACX,eAAe,CACf,CAAC;IACF,MAAM,qBAAqB,GAAG,IAAA,iCAAyB,EACtD,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,CACf,CAAC;IAEF,MAAM,sBAAsB,GAAG,YAAM,CAAC,IAAI,CACzC,YAAY,CAAC,gBAAgB,EAC7B,yBAAmB,CACnB,CAAC;IACF,MAAM,0BAA0B,GAAG,YAAM,CAAC,IAAI,CAC7C,YAAY,CAAC,oBAAoB,EACjC,yBAAmB,CACnB,CAAC;IAEF,MAAM,wBAAwB,GAAG,YAAM,CAAC,IAAI,CAC3C,IAAA,0BAAoB,EAAC,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE;QACpD,KAAK,EAAE,WAAW;KAClB,CAAC,EACF,yBAAmB,CACnB,CAAC;IACF,MAAM,qBAAqB,GAAG,WAAW,CAAC,oBAAoB,CAC7D,kCAAsB,CACtB,CAAC;IACF,MAAM,uBAAuB,GAAG,YAAM,CAAC,IAAI,CAC1C,IAAA,2BAAqB,EAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE;QACtE,KAAK,EAAE,WAAW;KAClB,CAAC,EACF,yBAAmB,CACnB,CAAC;IACF,MAAM,yBAAyB,GAAG,YAAM,CAAC,IAAI,CAC5C,IAAA,kCAA4B,EAAC,UAAU,EAAE,YAAY,CAAC,EACtD,yBAAmB,CACnB,CAAC;IACF,MAAM,qBAAqB,GAAG,YAAM,CAAC,IAAI,CACxC,YAAY,CAAC,UAAU,EACvB,yBAAmB,CACnB,CAAC;IAEF,OAAO;QACN,WAAW;QACX,QAAQ,EAAE,cAAc;QACxB,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,UAAU,EAAE,gBAAgB;QAC5B,gBAAgB,EAAE,cAAc;QAChC,iBAAiB,EAAE,uBAAuB;QAC1C,WAAW,EAAE;YACZ,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,qBAAqB;SAChC;QACD,SAAS,EAAE,sBAAsB;QACjC,oBAAoB,EAAE,0BAA0B;QAChD,mBAAmB,EAAE,yBAAyB;QAC9C,iBAAiB,EAAE,wBAAwB;QAC3C,iBAAiB,EAAE,uBAAuB;QAC1C,eAAe,EAAE,qBAAqB;KACtC,CAAC;AACH,CAAC,CAAC;AAvGW,QAAA,eAAe,mBAuG1B","sourcesContent":["import {\n\tBASE_PRECISION_EXP,\n\tBN,\n\tBigNum,\n\tContractType,\n\tDriftClient,\n\tMarketStatus,\n\tONE,\n\tPRICE_PRECISION,\n\tPRICE_PRECISION_EXP,\n\tPerpPosition,\n\tPositionDirection,\n\tQUOTE_PRECISION_EXP,\n\tUser,\n\tZERO,\n\tcalculateClaimablePnl,\n\tcalculateEntryPrice,\n\tcalculateFeesAndFundingPnl,\n\tcalculatePositionPNL,\n\tcalculateUnsettledFundingPnl,\n} from '@drift-labs/sdk';\nimport { TRADING_UTILS } from '../../../../common-ui-utils/trading';\nimport { ENUM_UTILS } from '../../../../utils';\nimport {\n\tMAX_PREDICTION_PRICE_BIG_NUM,\n\tUSDC_SPOT_MARKET_INDEX,\n} from '../../../../constants';\n\n/**\n * Comprehensive position information derived from a PerpPosition at a specific reference price.\n * This interface contains all the key metrics needed for position display and analysis.\n */\nexport interface PriceBasedPositionInfo {\n\t/**\n\t * Position PnL in notional terms based on the reference price.\n\t * This does NOT include funding PnL - only the price-based profit/loss.\n\t */\n\tpositionNotionalPnl: BigNum;\n\n\t/**\n\t * Position PnL as a percentage.\n\t * For prediction markets: calculated based on price movement relative to entry.\n\t * For regular markets: calculated as (PnL / quote entry amount) * account leverage.\n\t */\n\tpositionPnlPercentage: number;\n}\n\n/**\n * Derives the user-understandable position display information from a User's PerpPosition and the reference price.\n * The reference price can be the mark price or the oracle price.\n *\n * @param driftClient - The DriftClient instance.\n * @param user - The User instance.\n * @param perpPosition - The PerpPosition instance.\n * @param referencePrice - The reference price. This can be the mark price or the oracle price.\n * @param accountLeverage - The account leverage.\n *\n * @returns The PositionDisplayInfo object. Note that position pnl does not include funding pnl.\n */\nexport const getPriceBasedPositionInfo = (\n\tdriftClient: DriftClient,\n\tperpPosition: PerpPosition,\n\treferencePrice: BN,\n\taccountLeverage?: number\n): PriceBasedPositionInfo => {\n\tconst { marketIndex } = perpPosition;\n\tconst perpMarket = driftClient.getPerpMarketAccount(marketIndex);\n\tconst referencePriceBigNum = BigNum.from(referencePrice, PRICE_PRECISION_EXP);\n\n\t// Base Size\n\tconst baseSize = perpPosition.baseAssetAmount;\n\tconst baseSizeBigNum = BigNum.from(baseSize.abs(), BASE_PRECISION_EXP);\n\n\t// Entry Price\n\tconst entryPriceBN = calculateEntryPrice(perpPosition);\n\tconst entryPriceBigNum = BigNum.from(entryPriceBN, PRICE_PRECISION_EXP);\n\n\tconst isShortPosition = baseSize.isNeg();\n\n\t// Market and prediction market detection\n\tconst isPredictionMarket = ENUM_UTILS.match(\n\t\tperpMarket.contractType,\n\t\tContractType.PREDICTION\n\t);\n\n\t// Price calculations\n\t// Handle prediction market resolution prices\n\tif (isPredictionMarket) {\n\t\tconst isResolved =\n\t\t\tENUM_UTILS.match(perpMarket?.status, MarketStatus.SETTLEMENT) ||\n\t\t\tENUM_UTILS.match(perpMarket?.status, MarketStatus.DELISTED);\n\n\t\tif (isResolved) {\n\t\t\tconst resolvedToNo = perpMarket.expiryPrice.lte(\n\t\t\t\tZERO.add(perpMarket.amm.orderTickSize)\n\t\t\t);\n\n\t\t\tconst price = resolvedToNo\n\t\t\t\t? ZERO.mul(PRICE_PRECISION)\n\t\t\t\t: ONE.mul(PRICE_PRECISION);\n\n\t\t\treferencePrice = price;\n\t\t}\n\t}\n\n\t// position pnl\n\tconst positionNotionalPnlBN = TRADING_UTILS.calculatePotentialProfit({\n\t\tcurrentPositionSize: baseSizeBigNum,\n\t\tcurrentPositionDirection: isShortPosition\n\t\t\t? PositionDirection.SHORT\n\t\t\t: PositionDirection.LONG,\n\t\tcurrentPositionEntryPrice: BigNum.from(entryPriceBN, PRICE_PRECISION_EXP),\n\t\ttradeDirection: isShortPosition\n\t\t\t? PositionDirection.LONG\n\t\t\t: PositionDirection.SHORT,\n\t\texitBaseSize: baseSizeBigNum,\n\t\texitPrice: referencePriceBigNum,\n\t\ttakerFeeBps: 0,\n\t}).estimatedProfit.shiftTo(QUOTE_PRECISION_EXP).val;\n\tconst positionNotionalPnlBigNum = BigNum.from(\n\t\tpositionNotionalPnlBN,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\t// Determine if this is a sell-side prediction market for price adjustment\n\tconst isSellPredictionMarket = isPredictionMarket && isShortPosition;\n\n\t// Apply prediction market price adjustment for display\n\tconst markPriceToUseForPredictionMarket = isSellPredictionMarket\n\t\t? MAX_PREDICTION_PRICE_BIG_NUM.sub(referencePriceBigNum).val\n\t\t: referencePrice;\n\n\tconst positionPnlPercentage = isPredictionMarket\n\t\t? BigNum.from(markPriceToUseForPredictionMarket, PRICE_PRECISION_EXP)\n\t\t\t\t.sub(entryPriceBigNum)\n\t\t\t\t.mul(PRICE_PRECISION)\n\t\t\t\t.div(entryPriceBN)\n\t\t\t\t.toNum() *\n\t\t 100 *\n\t\t (isShortPosition ? -1 : 1)\n\t\t: accountLeverage\n\t\t? (() => {\n\t\t\t\tconst quoteAmount = perpPosition.quoteEntryAmount.abs();\n\n\t\t\t\tif (quoteAmount.eq(ZERO)) return 0;\n\n\t\t\t\tconst pnlPct =\n\t\t\t\t\tpositionNotionalPnlBigNum.val\n\t\t\t\t\t\t.mul(new BN(10_000))\n\t\t\t\t\t\t.div(quoteAmount)\n\t\t\t\t\t\t.toNumber() / 1_000_000;\n\t\t\t\treturn pnlPct * (accountLeverage || 1);\n\t\t })()\n\t\t: 0;\n\n\treturn {\n\t\tpositionNotionalPnl: positionNotionalPnlBigNum,\n\t\tpositionPnlPercentage,\n\t};\n};\n\nexport type PerpPositionInfo = {\n\tmarketIndex: number;\n\t/** Absolute base size of the position. */\n\tbaseSize: BigNum;\n\t/** Notional value of the position based on oracle price */\n\tnotionalSize: BigNum;\n\t/** Direction of the position */\n\tdirection: PositionDirection;\n\t/** Position entry price.*/\n\tentryPrice: BigNum;\n\t/**\n\t * Price at which the position would be liquidated.\n\t * Returns zero if liquidation price cannot be calculated.\n\t */\n\tliquidationPrice: BigNum;\n\t/**\n\t * Cumulative funding and fees PnL for this position.\n\t * This is separate from positionNotionalPnl to allow granular PnL breakdown.\n\t */\n\tfeesAndFundingPnl: BigNum;\n\t/** Position P&L information based on the oracle price and the mark price as reference prices. This does not include fees and funding PnL. */\n\tpositionPnl: {\n\t\toracleBased: PriceBasedPositionInfo;\n\t\tmarkBased: PriceBasedPositionInfo;\n\t};\n\t/** The quote amount that was used to enter the position. */\n\tcostBasis: BigNum;\n\t/** The quote amount that the position needs to be at, to breakeven. This is net of fees and funding, hence why it is different from quoteEntryAmount. */\n\tquoteBreakEvenAmount: BigNum;\n\t/** This is the total of unsettled pnl and unsettled funding. */\n\ttotalUnsettledPnl: BigNum;\n\t/** This is the total of unsettled pnl and unsettled funding that is claimable from the P&L pool. */\n\ttotalClaimablePnl: BigNum;\n\t/** This is the unsettled funding pnl. */\n\tunsettledFundingPnl: BigNum;\n\t/** This is the total of settled pnl and settled funding. */\n\ttotalSettledPnl: BigNum;\n};\n\nexport const getPositionInfo = (\n\tdriftClient: DriftClient,\n\tuser: User,\n\tperpPosition: PerpPosition,\n\toraclePrice: BN,\n\tmarkPrice: BN\n): PerpPositionInfo => {\n\tconst { marketIndex } = perpPosition;\n\n\tconst baseSize = perpPosition.baseAssetAmount;\n\tconst baseSizeBigNum = BigNum.from(baseSize.abs(), BASE_PRECISION_EXP);\n\n\tconst notionalSizeBigNum = BigNum.from(\n\t\tuser\n\t\t\t.getPerpPositionValue(perpPosition.marketIndex, {\n\t\t\t\tprice: oraclePrice,\n\t\t\t})\n\t\t\t.abs(),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst positionDirection = baseSize.isNeg()\n\t\t? PositionDirection.SHORT\n\t\t: PositionDirection.LONG;\n\n\tconst entryPrice = calculateEntryPrice(perpPosition);\n\tconst entryPriceBigNum = BigNum.from(entryPrice, PRICE_PRECISION_EXP);\n\n\tconst liqPrice = user.liquidationPrice(marketIndex);\n\tconst liqPriceBigNum = BigNum.from(liqPrice, PRICE_PRECISION_EXP);\n\n\tconst perpMarket = driftClient.getPerpMarketAccount(marketIndex);\n\tconst feesAndFundingPnlBigNum = BigNum.from(\n\t\tcalculateFeesAndFundingPnl(perpMarket, perpPosition),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst accountLeverage = user.getLeverage().toNumber();\n\tconst oracleBasedPositionInfo = getPriceBasedPositionInfo(\n\t\tdriftClient,\n\t\tperpPosition,\n\t\toraclePrice,\n\t\taccountLeverage\n\t);\n\tconst markBasedPositionInfo = getPriceBasedPositionInfo(\n\t\tdriftClient,\n\t\tperpPosition,\n\t\tmarkPrice,\n\t\taccountLeverage\n\t);\n\n\tconst quoteEntryAmountBigNum = BigNum.from(\n\t\tperpPosition.quoteEntryAmount,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst quoteBreakEvenAmountBigNum = BigNum.from(\n\t\tperpPosition.quoteBreakEvenAmount,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst totalUnrealizedPnlBigNum = BigNum.from(\n\t\tcalculatePositionPNL(perpMarket, perpPosition, true, {\n\t\t\tprice: oraclePrice,\n\t\t}),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst usdcSpotMarketAccount = driftClient.getSpotMarketAccount(\n\t\tUSDC_SPOT_MARKET_INDEX\n\t);\n\tconst totalClaimablePnlBigNum = BigNum.from(\n\t\tcalculateClaimablePnl(perpMarket, usdcSpotMarketAccount, perpPosition, {\n\t\t\tprice: oraclePrice,\n\t\t}),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst unsettledFundingPnlBigNum = BigNum.from(\n\t\tcalculateUnsettledFundingPnl(perpMarket, perpPosition),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst totalSettledPnlBigNum = BigNum.from(\n\t\tperpPosition.settledPnl,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\treturn {\n\t\tmarketIndex,\n\t\tbaseSize: baseSizeBigNum,\n\t\tnotionalSize: notionalSizeBigNum,\n\t\tdirection: positionDirection,\n\t\tentryPrice: entryPriceBigNum,\n\t\tliquidationPrice: liqPriceBigNum,\n\t\tfeesAndFundingPnl: feesAndFundingPnlBigNum,\n\t\tpositionPnl: {\n\t\t\toracleBased: oracleBasedPositionInfo,\n\t\t\tmarkBased: markBasedPositionInfo,\n\t\t},\n\t\tcostBasis: quoteEntryAmountBigNum,\n\t\tquoteBreakEvenAmount: quoteBreakEvenAmountBigNum,\n\t\tunsettledFundingPnl: unsettledFundingPnlBigNum,\n\t\ttotalUnsettledPnl: totalUnrealizedPnlBigNum,\n\t\ttotalClaimablePnl: totalClaimablePnlBigNum,\n\t\ttotalSettledPnl: totalSettledPnlBigNum,\n\t};\n};\n"]}
1
+ {"version":3,"file":"positions.js","sourceRoot":"","sources":["../../../../../src/drift/base/details/user/positions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBASE_PRECISION_EXP,\n\tBN,\n\tBigNum,\n\tContractType,\n\tDriftClient,\n\tMarketStatus,\n\tONE,\n\tPRICE_PRECISION,\n\tPRICE_PRECISION_EXP,\n\tPerpPosition,\n\tPositionDirection,\n\tQUOTE_PRECISION_EXP,\n\tUser,\n\tZERO,\n\tcalculateClaimablePnl,\n\tcalculateEntryPrice,\n\tcalculateFeesAndFundingPnl,\n\tcalculatePositionPNL,\n\tcalculateUnsettledFundingPnl,\n} from '@drift-labs/sdk';\nimport { TRADING_UTILS } from '../../../../_deprecated/trading-utils';\nimport { ENUM_UTILS } from '../../../../utils';\nimport {\n\tMAX_PREDICTION_PRICE_BIG_NUM,\n\tUSDC_SPOT_MARKET_INDEX,\n} from '../../../../constants';\n\n/**\n * Comprehensive position information derived from a PerpPosition at a specific reference price.\n * This interface contains all the key metrics needed for position display and analysis.\n */\nexport interface PriceBasedPositionInfo {\n\t/**\n\t * Position PnL in notional terms based on the reference price.\n\t * This does NOT include funding PnL - only the price-based profit/loss.\n\t */\n\tpositionNotionalPnl: BigNum;\n\n\t/**\n\t * Position PnL as a percentage.\n\t * For prediction markets: calculated based on price movement relative to entry.\n\t * For regular markets: calculated as (PnL / quote entry amount) * account leverage.\n\t */\n\tpositionPnlPercentage: number;\n}\n\n/**\n * Derives the user-understandable position display information from a User's PerpPosition and the reference price.\n * The reference price can be the mark price or the oracle price.\n *\n * @param driftClient - The DriftClient instance.\n * @param user - The User instance.\n * @param perpPosition - The PerpPosition instance.\n * @param referencePrice - The reference price. This can be the mark price or the oracle price.\n * @param accountLeverage - The account leverage.\n *\n * @returns The PositionDisplayInfo object. Note that position pnl does not include funding pnl.\n */\nexport const getPriceBasedPositionInfo = (\n\tdriftClient: DriftClient,\n\tperpPosition: PerpPosition,\n\treferencePrice: BN,\n\taccountLeverage?: number\n): PriceBasedPositionInfo => {\n\tconst { marketIndex } = perpPosition;\n\tconst perpMarket = driftClient.getPerpMarketAccount(marketIndex);\n\tconst referencePriceBigNum = BigNum.from(referencePrice, PRICE_PRECISION_EXP);\n\n\t// Base Size\n\tconst baseSize = perpPosition.baseAssetAmount;\n\tconst baseSizeBigNum = BigNum.from(baseSize.abs(), BASE_PRECISION_EXP);\n\n\t// Entry Price\n\tconst entryPriceBN = calculateEntryPrice(perpPosition);\n\tconst entryPriceBigNum = BigNum.from(entryPriceBN, PRICE_PRECISION_EXP);\n\n\tconst isShortPosition = baseSize.isNeg();\n\n\t// Market and prediction market detection\n\tconst isPredictionMarket = ENUM_UTILS.match(\n\t\tperpMarket.contractType,\n\t\tContractType.PREDICTION\n\t);\n\n\t// Price calculations\n\t// Handle prediction market resolution prices\n\tif (isPredictionMarket) {\n\t\tconst isResolved =\n\t\t\tENUM_UTILS.match(perpMarket?.status, MarketStatus.SETTLEMENT) ||\n\t\t\tENUM_UTILS.match(perpMarket?.status, MarketStatus.DELISTED);\n\n\t\tif (isResolved) {\n\t\t\tconst resolvedToNo = perpMarket.expiryPrice.lte(\n\t\t\t\tZERO.add(perpMarket.amm.orderTickSize)\n\t\t\t);\n\n\t\t\tconst price = resolvedToNo\n\t\t\t\t? ZERO.mul(PRICE_PRECISION)\n\t\t\t\t: ONE.mul(PRICE_PRECISION);\n\n\t\t\treferencePrice = price;\n\t\t}\n\t}\n\n\t// position pnl\n\tconst positionNotionalPnlBN = TRADING_UTILS.calculatePotentialProfit({\n\t\tcurrentPositionSize: baseSizeBigNum,\n\t\tcurrentPositionDirection: isShortPosition\n\t\t\t? PositionDirection.SHORT\n\t\t\t: PositionDirection.LONG,\n\t\tcurrentPositionEntryPrice: BigNum.from(entryPriceBN, PRICE_PRECISION_EXP),\n\t\ttradeDirection: isShortPosition\n\t\t\t? PositionDirection.LONG\n\t\t\t: PositionDirection.SHORT,\n\t\texitBaseSize: baseSizeBigNum,\n\t\texitPrice: referencePriceBigNum,\n\t\ttakerFeeBps: 0,\n\t}).estimatedProfit.shiftTo(QUOTE_PRECISION_EXP).val;\n\tconst positionNotionalPnlBigNum = BigNum.from(\n\t\tpositionNotionalPnlBN,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\t// Determine if this is a sell-side prediction market for price adjustment\n\tconst isSellPredictionMarket = isPredictionMarket && isShortPosition;\n\n\t// Apply prediction market price adjustment for display\n\tconst markPriceToUseForPredictionMarket = isSellPredictionMarket\n\t\t? MAX_PREDICTION_PRICE_BIG_NUM.sub(referencePriceBigNum).val\n\t\t: referencePrice;\n\n\tconst positionPnlPercentage = isPredictionMarket\n\t\t? BigNum.from(markPriceToUseForPredictionMarket, PRICE_PRECISION_EXP)\n\t\t\t\t.sub(entryPriceBigNum)\n\t\t\t\t.mul(PRICE_PRECISION)\n\t\t\t\t.div(entryPriceBN)\n\t\t\t\t.toNum() *\n\t\t 100 *\n\t\t (isShortPosition ? -1 : 1)\n\t\t: accountLeverage\n\t\t? (() => {\n\t\t\t\tconst quoteAmount = perpPosition.quoteEntryAmount.abs();\n\n\t\t\t\tif (quoteAmount.eq(ZERO)) return 0;\n\n\t\t\t\tconst pnlPct =\n\t\t\t\t\tpositionNotionalPnlBigNum.val\n\t\t\t\t\t\t.mul(new BN(10_000))\n\t\t\t\t\t\t.div(quoteAmount)\n\t\t\t\t\t\t.toNumber() / 1_000_000;\n\t\t\t\treturn pnlPct * (accountLeverage || 1);\n\t\t })()\n\t\t: 0;\n\n\treturn {\n\t\tpositionNotionalPnl: positionNotionalPnlBigNum,\n\t\tpositionPnlPercentage,\n\t};\n};\n\nexport type PerpPositionInfo = {\n\tmarketIndex: number;\n\t/** Absolute base size of the position. */\n\tbaseSize: BigNum;\n\t/** Notional value of the position based on oracle price */\n\tnotionalSize: BigNum;\n\t/** Direction of the position */\n\tdirection: PositionDirection;\n\t/** Position entry price.*/\n\tentryPrice: BigNum;\n\t/**\n\t * Price at which the position would be liquidated.\n\t * Returns zero if liquidation price cannot be calculated.\n\t */\n\tliquidationPrice: BigNum;\n\t/**\n\t * Cumulative funding and fees PnL for this position.\n\t * This is separate from positionNotionalPnl to allow granular PnL breakdown.\n\t */\n\tfeesAndFundingPnl: BigNum;\n\t/** Position P&L information based on the oracle price and the mark price as reference prices. This does not include fees and funding PnL. */\n\tpositionPnl: {\n\t\toracleBased: PriceBasedPositionInfo;\n\t\tmarkBased: PriceBasedPositionInfo;\n\t};\n\t/** The quote amount that was used to enter the position. */\n\tcostBasis: BigNum;\n\t/** The quote amount that the position needs to be at, to breakeven. This is net of fees and funding, hence why it is different from quoteEntryAmount. */\n\tquoteBreakEvenAmount: BigNum;\n\t/** This is the total of unsettled pnl and unsettled funding. */\n\ttotalUnsettledPnl: BigNum;\n\t/** This is the total of unsettled pnl and unsettled funding that is claimable from the P&L pool. */\n\ttotalClaimablePnl: BigNum;\n\t/** This is the unsettled funding pnl. */\n\tunsettledFundingPnl: BigNum;\n\t/** This is the total of settled pnl and settled funding. */\n\ttotalSettledPnl: BigNum;\n};\n\nexport const getPositionInfo = (\n\tdriftClient: DriftClient,\n\tuser: User,\n\tperpPosition: PerpPosition,\n\toraclePrice: BN,\n\tmarkPrice: BN\n): PerpPositionInfo => {\n\tconst { marketIndex } = perpPosition;\n\n\tconst baseSize = perpPosition.baseAssetAmount;\n\tconst baseSizeBigNum = BigNum.from(baseSize.abs(), BASE_PRECISION_EXP);\n\n\tconst notionalSizeBigNum = BigNum.from(\n\t\tuser\n\t\t\t.getPerpPositionValue(perpPosition.marketIndex, {\n\t\t\t\tprice: oraclePrice,\n\t\t\t})\n\t\t\t.abs(),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst positionDirection = baseSize.isNeg()\n\t\t? PositionDirection.SHORT\n\t\t: PositionDirection.LONG;\n\n\tconst entryPrice = calculateEntryPrice(perpPosition);\n\tconst entryPriceBigNum = BigNum.from(entryPrice, PRICE_PRECISION_EXP);\n\n\tconst liqPrice = user.liquidationPrice(marketIndex);\n\tconst liqPriceBigNum = BigNum.from(liqPrice, PRICE_PRECISION_EXP);\n\n\tconst perpMarket = driftClient.getPerpMarketAccount(marketIndex);\n\tconst feesAndFundingPnlBigNum = BigNum.from(\n\t\tcalculateFeesAndFundingPnl(perpMarket, perpPosition),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst accountLeverage = user.getLeverage().toNumber();\n\tconst oracleBasedPositionInfo = getPriceBasedPositionInfo(\n\t\tdriftClient,\n\t\tperpPosition,\n\t\toraclePrice,\n\t\taccountLeverage\n\t);\n\tconst markBasedPositionInfo = getPriceBasedPositionInfo(\n\t\tdriftClient,\n\t\tperpPosition,\n\t\tmarkPrice,\n\t\taccountLeverage\n\t);\n\n\tconst quoteEntryAmountBigNum = BigNum.from(\n\t\tperpPosition.quoteEntryAmount,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst quoteBreakEvenAmountBigNum = BigNum.from(\n\t\tperpPosition.quoteBreakEvenAmount,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\tconst totalUnrealizedPnlBigNum = BigNum.from(\n\t\tcalculatePositionPNL(perpMarket, perpPosition, true, {\n\t\t\tprice: oraclePrice,\n\t\t}),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst usdcSpotMarketAccount = driftClient.getSpotMarketAccount(\n\t\tUSDC_SPOT_MARKET_INDEX\n\t);\n\tconst totalClaimablePnlBigNum = BigNum.from(\n\t\tcalculateClaimablePnl(perpMarket, usdcSpotMarketAccount, perpPosition, {\n\t\t\tprice: oraclePrice,\n\t\t}),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst unsettledFundingPnlBigNum = BigNum.from(\n\t\tcalculateUnsettledFundingPnl(perpMarket, perpPosition),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\tconst totalSettledPnlBigNum = BigNum.from(\n\t\tperpPosition.settledPnl,\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\treturn {\n\t\tmarketIndex,\n\t\tbaseSize: baseSizeBigNum,\n\t\tnotionalSize: notionalSizeBigNum,\n\t\tdirection: positionDirection,\n\t\tentryPrice: entryPriceBigNum,\n\t\tliquidationPrice: liqPriceBigNum,\n\t\tfeesAndFundingPnl: feesAndFundingPnlBigNum,\n\t\tpositionPnl: {\n\t\t\toracleBased: oracleBasedPositionInfo,\n\t\t\tmarkBased: markBasedPositionInfo,\n\t\t},\n\t\tcostBasis: quoteEntryAmountBigNum,\n\t\tquoteBreakEvenAmount: quoteBreakEvenAmountBigNum,\n\t\tunsettledFundingPnl: unsettledFundingPnlBigNum,\n\t\ttotalUnsettledPnl: totalUnrealizedPnlBigNum,\n\t\ttotalClaimablePnl: totalClaimablePnlBigNum,\n\t\ttotalSettledPnl: totalSettledPnlBigNum,\n\t};\n};\n"]}
package/lib/index.d.ts CHANGED
@@ -1,49 +1,49 @@
1
- export * from './Config';
2
- export * from './chartConstants';
3
- export * from './types';
4
- export * from './EnvironmentConstants';
5
1
  export * from './utils';
6
- export * from './utils/index';
7
- export * from './utils/s3Buckets';
8
- export * from './serializableTypes';
9
- export * from './utils/candles/Candle';
2
+ export * from './utils/logger';
10
3
  export * from './utils/featureFlags';
11
- export * from './utils/WalletConnectionState';
4
+ export * from './utils/candles/Candle';
12
5
  export * from './utils/rpcLatency';
13
- export * from './utils/token';
14
- export * from './utils/math';
15
- export * from './utils/logger';
16
- export * from './utils/equalityChecks';
17
- export * from './common-ui-utils';
18
- export * from './constants';
19
- export * from './actions/actionHelpers/actionHelpers';
20
6
  export * from './utils/SharedInterval';
21
7
  export * from './utils/Stopwatch';
22
8
  export * from './utils/priority-fees';
23
9
  export * from './utils/superstake';
24
- export * from './utils/fetch';
25
10
  export * from './utils/priceImpact';
26
11
  export * from './utils/dlob-server/DlobServerWebsocketUtils';
27
- export * from './common-ui-utils/settings/settings';
28
- export * from './utils/priority-fees';
29
12
  export * from './utils/orderbook';
30
- export * from './clients/candleClient';
31
- export * from './clients/marketDataFeed';
32
- export * from './clients/swiftClient';
33
- export * from './clients/tvFeed';
34
- export * from './clients/DlobWebsocketClient';
35
13
  export * from './utils/pollingSequenceGuard';
36
14
  export * from './utils/driftEvents';
37
- export * from './utils/MultiplexWebSocket';
38
15
  export * from './utils/SlotBasedResultValidator';
39
16
  export * from './utils/CircularBuffers';
40
17
  export * from './utils/rxjs';
41
18
  export * from './utils/priorityFees';
42
19
  export * from './utils/NumLib';
43
- export * from './utils/strings';
44
- export * from './utils/validation';
20
+ export * from './utils/s3Buckets';
21
+ export * from './utils/insuranceFund';
22
+ export * from './utils/settings/settings';
45
23
  export { default as millify } from './utils/millify';
46
- export * from './utils/markets/precisions';
24
+ export { getSwiftConfirmationTimeoutMs } from './utils/signedMsgs';
25
+ export { ResultSlotIncrementer } from './utils/ResultSlotIncrementer';
26
+ export { MultiplexWebSocket } from './utils/MultiplexWebSocket';
27
+ export { COMMON_UTILS } from './_deprecated/utils';
28
+ export { COMMON_UI_UTILS } from './_deprecated/common-ui-utils';
29
+ export { COMMON_MATH } from './_deprecated/common-math';
30
+ export { EQUALITY_CHECKS } from './_deprecated/equality-checks';
31
+ export { TRADING_UTILS } from './_deprecated/trading-utils';
32
+ export { MARKET_UTILS } from './_deprecated/market-utils';
33
+ export { ORDER_COMMON_UTILS } from './_deprecated/order-utils';
34
+ export { USER_UTILS } from './_deprecated/user-utils';
35
+ export * from './Config';
36
+ export * from './chartConstants';
37
+ export * from './types';
38
+ export * from './EnvironmentConstants';
39
+ export * from './serializableTypes';
40
+ export * from './constants';
41
+ export * from './actions/actionHelpers/actionHelpers';
42
+ export * from './clients/candleClient';
43
+ export * from './clients/marketDataFeed';
44
+ export * from './clients/swiftClient';
45
+ export * from './clients/tvFeed';
46
+ export * from './clients/DlobWebsocketClient';
47
47
  export * from './drift';
48
48
  import JupV4Errors from './constants/autogenerated/jup-v4-error-codes.json';
49
49
  import JupV6Errors from './constants/autogenerated/jup-v6-error-codes.json';
package/lib/index.js CHANGED
@@ -17,54 +17,69 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.DriftErrors = exports.JupV6Errors = exports.JupV4Errors = exports.millify = void 0;
21
- __exportStar(require("./Config"), exports);
22
- __exportStar(require("./chartConstants"), exports);
23
- __exportStar(require("./types"), exports);
24
- __exportStar(require("./EnvironmentConstants"), exports);
20
+ exports.DriftErrors = exports.JupV6Errors = exports.JupV4Errors = exports.USER_UTILS = exports.ORDER_COMMON_UTILS = exports.MARKET_UTILS = exports.TRADING_UTILS = exports.EQUALITY_CHECKS = exports.COMMON_MATH = exports.COMMON_UI_UTILS = exports.COMMON_UTILS = exports.MultiplexWebSocket = exports.ResultSlotIncrementer = exports.getSwiftConfirmationTimeoutMs = exports.millify = void 0;
21
+ // Domain modules (via utils barrel)
25
22
  __exportStar(require("./utils"), exports);
26
- __exportStar(require("./utils/index"), exports);
27
- __exportStar(require("./utils/s3Buckets"), exports);
28
- __exportStar(require("./serializableTypes"), exports);
29
- __exportStar(require("./utils/candles/Candle"), exports);
23
+ // Non-domain utils that stay at utils/ level
24
+ __exportStar(require("./utils/logger"), exports);
30
25
  __exportStar(require("./utils/featureFlags"), exports);
31
- __exportStar(require("./utils/WalletConnectionState"), exports);
26
+ __exportStar(require("./utils/candles/Candle"), exports);
32
27
  __exportStar(require("./utils/rpcLatency"), exports);
33
- __exportStar(require("./utils/token"), exports);
34
- __exportStar(require("./utils/math"), exports);
35
- __exportStar(require("./utils/logger"), exports);
36
- __exportStar(require("./utils/equalityChecks"), exports);
37
- __exportStar(require("./common-ui-utils"), exports);
38
- __exportStar(require("./constants"), exports);
39
- __exportStar(require("./actions/actionHelpers/actionHelpers"), exports);
40
28
  __exportStar(require("./utils/SharedInterval"), exports);
41
29
  __exportStar(require("./utils/Stopwatch"), exports);
42
30
  __exportStar(require("./utils/priority-fees"), exports);
43
31
  __exportStar(require("./utils/superstake"), exports);
44
- __exportStar(require("./utils/fetch"), exports);
45
32
  __exportStar(require("./utils/priceImpact"), exports);
46
33
  __exportStar(require("./utils/dlob-server/DlobServerWebsocketUtils"), exports);
47
- __exportStar(require("./common-ui-utils/settings/settings"), exports);
48
- __exportStar(require("./utils/priority-fees"), exports);
49
34
  __exportStar(require("./utils/orderbook"), exports);
50
- __exportStar(require("./clients/candleClient"), exports);
51
- __exportStar(require("./clients/marketDataFeed"), exports);
52
- __exportStar(require("./clients/swiftClient"), exports);
53
- __exportStar(require("./clients/tvFeed"), exports);
54
- __exportStar(require("./clients/DlobWebsocketClient"), exports);
55
35
  __exportStar(require("./utils/pollingSequenceGuard"), exports);
56
36
  __exportStar(require("./utils/driftEvents"), exports);
57
- __exportStar(require("./utils/MultiplexWebSocket"), exports);
58
37
  __exportStar(require("./utils/SlotBasedResultValidator"), exports);
59
38
  __exportStar(require("./utils/CircularBuffers"), exports);
60
39
  __exportStar(require("./utils/rxjs"), exports);
61
40
  __exportStar(require("./utils/priorityFees"), exports);
62
41
  __exportStar(require("./utils/NumLib"), exports);
63
- __exportStar(require("./utils/strings"), exports);
64
- __exportStar(require("./utils/validation"), exports);
42
+ __exportStar(require("./utils/s3Buckets"), exports);
43
+ __exportStar(require("./utils/insuranceFund"), exports);
44
+ __exportStar(require("./utils/settings/settings"), exports);
65
45
  var millify_1 = require("./utils/millify");
66
46
  Object.defineProperty(exports, "millify", { enumerable: true, get: function () { return __importDefault(millify_1).default; } });
67
- __exportStar(require("./utils/markets/precisions"), exports);
47
+ var signedMsgs_1 = require("./utils/signedMsgs");
48
+ Object.defineProperty(exports, "getSwiftConfirmationTimeoutMs", { enumerable: true, get: function () { return signedMsgs_1.getSwiftConfirmationTimeoutMs; } });
49
+ var ResultSlotIncrementer_1 = require("./utils/ResultSlotIncrementer");
50
+ Object.defineProperty(exports, "ResultSlotIncrementer", { enumerable: true, get: function () { return ResultSlotIncrementer_1.ResultSlotIncrementer; } });
51
+ var MultiplexWebSocket_1 = require("./utils/MultiplexWebSocket");
52
+ Object.defineProperty(exports, "MultiplexWebSocket", { enumerable: true, get: function () { return MultiplexWebSocket_1.MultiplexWebSocket; } });
53
+ // Deprecation facades
54
+ var utils_1 = require("./_deprecated/utils");
55
+ Object.defineProperty(exports, "COMMON_UTILS", { enumerable: true, get: function () { return utils_1.COMMON_UTILS; } });
56
+ var common_ui_utils_1 = require("./_deprecated/common-ui-utils");
57
+ Object.defineProperty(exports, "COMMON_UI_UTILS", { enumerable: true, get: function () { return common_ui_utils_1.COMMON_UI_UTILS; } });
58
+ var common_math_1 = require("./_deprecated/common-math");
59
+ Object.defineProperty(exports, "COMMON_MATH", { enumerable: true, get: function () { return common_math_1.COMMON_MATH; } });
60
+ var equality_checks_1 = require("./_deprecated/equality-checks");
61
+ Object.defineProperty(exports, "EQUALITY_CHECKS", { enumerable: true, get: function () { return equality_checks_1.EQUALITY_CHECKS; } });
62
+ var trading_utils_1 = require("./_deprecated/trading-utils");
63
+ Object.defineProperty(exports, "TRADING_UTILS", { enumerable: true, get: function () { return trading_utils_1.TRADING_UTILS; } });
64
+ var market_utils_1 = require("./_deprecated/market-utils");
65
+ Object.defineProperty(exports, "MARKET_UTILS", { enumerable: true, get: function () { return market_utils_1.MARKET_UTILS; } });
66
+ var order_utils_1 = require("./_deprecated/order-utils");
67
+ Object.defineProperty(exports, "ORDER_COMMON_UTILS", { enumerable: true, get: function () { return order_utils_1.ORDER_COMMON_UTILS; } });
68
+ var user_utils_1 = require("./_deprecated/user-utils");
69
+ Object.defineProperty(exports, "USER_UTILS", { enumerable: true, get: function () { return user_utils_1.USER_UTILS; } });
70
+ // Non-utils modules
71
+ __exportStar(require("./Config"), exports);
72
+ __exportStar(require("./chartConstants"), exports);
73
+ __exportStar(require("./types"), exports);
74
+ __exportStar(require("./EnvironmentConstants"), exports);
75
+ __exportStar(require("./serializableTypes"), exports);
76
+ __exportStar(require("./constants"), exports);
77
+ __exportStar(require("./actions/actionHelpers/actionHelpers"), exports);
78
+ __exportStar(require("./clients/candleClient"), exports);
79
+ __exportStar(require("./clients/marketDataFeed"), exports);
80
+ __exportStar(require("./clients/swiftClient"), exports);
81
+ __exportStar(require("./clients/tvFeed"), exports);
82
+ __exportStar(require("./clients/DlobWebsocketClient"), exports);
68
83
  __exportStar(require("./drift"), exports);
69
84
  // External Program Errors
70
85
  const jup_v4_error_codes_json_1 = __importDefault(require("./constants/autogenerated/jup-v4-error-codes.json"));
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,mDAAiC;AACjC,0CAAwB;AACxB,yDAAuC;AACvC,0CAAwB;AACxB,gDAA8B;AAC9B,oDAAkC;AAClC,sDAAoC;AACpC,yDAAuC;AACvC,uDAAqC;AACrC,gEAA8C;AAC9C,qDAAmC;AACnC,gDAA8B;AAC9B,+CAA6B;AAC7B,iDAA+B;AAC/B,yDAAuC;AACvC,oDAAkC;AAClC,8CAA4B;AAC5B,wEAAsD;AACtD,yDAAuC;AACvC,oDAAkC;AAClC,wDAAsC;AACtC,qDAAmC;AACnC,gDAA8B;AAC9B,sDAAoC;AACpC,+EAA6D;AAC7D,sEAAoD;AACpD,wDAAsC;AACtC,oDAAkC;AAClC,yDAAuC;AACvC,2DAAyC;AACzC,wDAAsC;AACtC,mDAAiC;AACjC,gEAA8C;AAC9C,+DAA6C;AAC7C,sDAAoC;AACpC,6DAA2C;AAC3C,mEAAiD;AACjD,0DAAwC;AACxC,+CAA6B;AAC7B,uDAAqC;AACrC,iDAA+B;AAC/B,kDAAgC;AAChC,qDAAmC;AACnC,2CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAC3B,6DAA2C;AAC3C,0CAAwB;AAExB,0BAA0B;AAC1B,gHAA4E;AAEnE,sBAFF,iCAAW,CAEE;AADpB,gHAA4E;AACtD,sBADf,iCAAW,CACe;AAEjC,kGAAqE;AAC5D,sBADF,0BAAW,CACE","sourcesContent":["export * from './Config';\nexport * from './chartConstants';\nexport * from './types';\nexport * from './EnvironmentConstants';\nexport * from './utils';\nexport * from './utils/index';\nexport * from './utils/s3Buckets';\nexport * from './serializableTypes';\nexport * from './utils/candles/Candle';\nexport * from './utils/featureFlags';\nexport * from './utils/WalletConnectionState';\nexport * from './utils/rpcLatency';\nexport * from './utils/token';\nexport * from './utils/math';\nexport * from './utils/logger';\nexport * from './utils/equalityChecks';\nexport * from './common-ui-utils';\nexport * from './constants';\nexport * from './actions/actionHelpers/actionHelpers';\nexport * from './utils/SharedInterval';\nexport * from './utils/Stopwatch';\nexport * from './utils/priority-fees';\nexport * from './utils/superstake';\nexport * from './utils/fetch';\nexport * from './utils/priceImpact';\nexport * from './utils/dlob-server/DlobServerWebsocketUtils';\nexport * from './common-ui-utils/settings/settings';\nexport * from './utils/priority-fees';\nexport * from './utils/orderbook';\nexport * from './clients/candleClient';\nexport * from './clients/marketDataFeed';\nexport * from './clients/swiftClient';\nexport * from './clients/tvFeed';\nexport * from './clients/DlobWebsocketClient';\nexport * from './utils/pollingSequenceGuard';\nexport * from './utils/driftEvents';\nexport * from './utils/MultiplexWebSocket';\nexport * from './utils/SlotBasedResultValidator';\nexport * from './utils/CircularBuffers';\nexport * from './utils/rxjs';\nexport * from './utils/priorityFees';\nexport * from './utils/NumLib';\nexport * from './utils/strings';\nexport * from './utils/validation';\nexport { default as millify } from './utils/millify';\nexport * from './utils/markets/precisions';\nexport * from './drift';\n\n// External Program Errors\nimport JupV4Errors from './constants/autogenerated/jup-v4-error-codes.json';\nimport JupV6Errors from './constants/autogenerated/jup-v6-error-codes.json';\nexport { JupV4Errors, JupV6Errors };\n\nimport DriftErrors from './constants/autogenerated/driftErrors.json';\nexport { DriftErrors };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,0CAAwB;AAExB,6CAA6C;AAC7C,iDAA+B;AAC/B,uDAAqC;AACrC,yDAAuC;AACvC,qDAAmC;AACnC,yDAAuC;AACvC,oDAAkC;AAClC,wDAAsC;AACtC,qDAAmC;AACnC,sDAAoC;AACpC,+EAA6D;AAC7D,oDAAkC;AAClC,+DAA6C;AAC7C,sDAAoC;AACpC,mEAAiD;AACjD,0DAAwC;AACxC,+CAA6B;AAC7B,uDAAqC;AACrC,iDAA+B;AAC/B,oDAAkC;AAClC,wDAAsC;AACtC,4DAA0C;AAC1C,2CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAC3B,iDAAmE;AAA1D,2HAAA,6BAA6B,OAAA;AACtC,uEAAsE;AAA7D,8HAAA,qBAAqB,OAAA;AAC9B,iEAAgE;AAAvD,wHAAA,kBAAkB,OAAA;AAE3B,sBAAsB;AACtB,6CAAmD;AAA1C,qGAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,6DAA4D;AAAnD,8GAAA,aAAa,OAAA;AACtB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AACrB,yDAA+D;AAAtD,iHAAA,kBAAkB,OAAA;AAC3B,uDAAsD;AAA7C,wGAAA,UAAU,OAAA;AAEnB,oBAAoB;AACpB,2CAAyB;AACzB,mDAAiC;AACjC,0CAAwB;AACxB,yDAAuC;AACvC,sDAAoC;AACpC,8CAA4B;AAC5B,wEAAsD;AACtD,yDAAuC;AACvC,2DAAyC;AACzC,wDAAsC;AACtC,mDAAiC;AACjC,gEAA8C;AAC9C,0CAAwB;AAExB,0BAA0B;AAC1B,gHAA4E;AAEnE,sBAFF,iCAAW,CAEE;AADpB,gHAA4E;AACtD,sBADf,iCAAW,CACe;AAEjC,kGAAqE;AAC5D,sBADF,0BAAW,CACE","sourcesContent":["// Domain modules (via utils barrel)\nexport * from './utils';\n\n// Non-domain utils that stay at utils/ level\nexport * from './utils/logger';\nexport * from './utils/featureFlags';\nexport * from './utils/candles/Candle';\nexport * from './utils/rpcLatency';\nexport * from './utils/SharedInterval';\nexport * from './utils/Stopwatch';\nexport * from './utils/priority-fees';\nexport * from './utils/superstake';\nexport * from './utils/priceImpact';\nexport * from './utils/dlob-server/DlobServerWebsocketUtils';\nexport * from './utils/orderbook';\nexport * from './utils/pollingSequenceGuard';\nexport * from './utils/driftEvents';\nexport * from './utils/SlotBasedResultValidator';\nexport * from './utils/CircularBuffers';\nexport * from './utils/rxjs';\nexport * from './utils/priorityFees';\nexport * from './utils/NumLib';\nexport * from './utils/s3Buckets';\nexport * from './utils/insuranceFund';\nexport * from './utils/settings/settings';\nexport { default as millify } from './utils/millify';\nexport { getSwiftConfirmationTimeoutMs } from './utils/signedMsgs';\nexport { ResultSlotIncrementer } from './utils/ResultSlotIncrementer';\nexport { MultiplexWebSocket } from './utils/MultiplexWebSocket';\n\n// Deprecation facades\nexport { COMMON_UTILS } from './_deprecated/utils';\nexport { COMMON_UI_UTILS } from './_deprecated/common-ui-utils';\nexport { COMMON_MATH } from './_deprecated/common-math';\nexport { EQUALITY_CHECKS } from './_deprecated/equality-checks';\nexport { TRADING_UTILS } from './_deprecated/trading-utils';\nexport { MARKET_UTILS } from './_deprecated/market-utils';\nexport { ORDER_COMMON_UTILS } from './_deprecated/order-utils';\nexport { USER_UTILS } from './_deprecated/user-utils';\n\n// Non-utils modules\nexport * from './Config';\nexport * from './chartConstants';\nexport * from './types';\nexport * from './EnvironmentConstants';\nexport * from './serializableTypes';\nexport * from './constants';\nexport * from './actions/actionHelpers/actionHelpers';\nexport * from './clients/candleClient';\nexport * from './clients/marketDataFeed';\nexport * from './clients/swiftClient';\nexport * from './clients/tvFeed';\nexport * from './clients/DlobWebsocketClient';\nexport * from './drift';\n\n// External Program Errors\nimport JupV4Errors from './constants/autogenerated/jup-v4-error-codes.json';\nimport JupV6Errors from './constants/autogenerated/jup-v6-error-codes.json';\nexport { JupV4Errors, JupV6Errors };\n\nimport DriftErrors from './constants/autogenerated/driftErrors.json';\nexport { DriftErrors };\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './init';
2
+ export * from './keys';
3
+ export * from './subaccounts';
4
+ export * from './wallet';
5
+ export * from './signature';
6
+ export * from './multiple';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./init"), exports);
18
+ __exportStar(require("./keys"), exports);
19
+ __exportStar(require("./subaccounts"), exports);
20
+ __exportStar(require("./wallet"), exports);
21
+ __exportStar(require("./signature"), exports);
22
+ __exportStar(require("./multiple"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/accounts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yCAAuB;AACvB,gDAA8B;AAC9B,2CAAyB;AACzB,8CAA4B;AAC5B,6CAA2B","sourcesContent":["export * from './init';\nexport * from './keys';\nexport * from './subaccounts';\nexport * from './wallet';\nexport * from './signature';\nexport * from './multiple';\n"]}
@@ -0,0 +1,22 @@
1
+ import { DriftClient, PublicKey } from '@drift-labs/sdk';
2
+ declare const ACCOUNT_INITIALIZATION_RETRY_DELAY_MS = 1000;
3
+ declare const ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS = 5;
4
+ declare const awaitAccountInitializationChainState: (driftClient: DriftClient, userId: number, authority: PublicKey) => Promise<boolean>;
5
+ /**
6
+ * Using your own callback to do the account initialization, this method will run the initialization step, switch to the drift user, await for the account to be available on chain, subscribe to the user account, and switch to the user account using the drift client.
7
+ *
8
+ * It provides extra callbacks to handle steps directly after the initialiation tx, and after fully initializing+subscribing to the account.
9
+ *
10
+ * Callbacks available:
11
+ * - initializationStep: This callback should send the transaction to initialize the user account
12
+ * - postInitializationStep: This callback will run after the successful initialization transaction, but before trying to load/subscribe to the new account
13
+ * - handleSuccessStep: This callback will run after everything has initialized+subscribed successfully
14
+ *
15
+ * // TODO : Need to do the subscription step
16
+ */
17
+ declare const initializeAndSubscribeToNewUserAccount: (driftClient: DriftClient, userIdToInit: number, authority: PublicKey, callbacks: {
18
+ initializationStep: () => Promise<boolean>;
19
+ postInitializationStep?: () => Promise<boolean>;
20
+ handleSuccessStep?: (accountAlreadyExisted: boolean) => Promise<boolean>;
21
+ }) => Promise<'ok' | 'failed_initializationStep' | 'failed_postInitializationStep' | 'failed_awaitAccountInitializationChainState' | 'failed_handleSuccessStep'>;
22
+ export { ACCOUNT_INITIALIZATION_RETRY_DELAY_MS, ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS, awaitAccountInitializationChainState, initializeAndSubscribeToNewUserAccount, };
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeAndSubscribeToNewUserAccount = exports.awaitAccountInitializationChainState = exports.ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS = exports.ACCOUNT_INITIALIZATION_RETRY_DELAY_MS = void 0;
4
+ const async_1 = require("../core/async");
5
+ // When creating an account, try 5 times over 5 seconds to wait for the new account to hit the blockchain.
6
+ const ACCOUNT_INITIALIZATION_RETRY_DELAY_MS = 1000;
7
+ exports.ACCOUNT_INITIALIZATION_RETRY_DELAY_MS = ACCOUNT_INITIALIZATION_RETRY_DELAY_MS;
8
+ const ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS = 5;
9
+ exports.ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS = ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS;
10
+ const awaitAccountInitializationChainState = async (driftClient, userId, authority) => {
11
+ var _a;
12
+ const user = driftClient.getUser(userId, authority);
13
+ if (!user.isSubscribed) {
14
+ await user.subscribe();
15
+ }
16
+ let retryCount = 0;
17
+ do {
18
+ try {
19
+ await updateUserAccount(user);
20
+ if (((_a = user === null || user === void 0 ? void 0 : user.getUserAccountAndSlot()) === null || _a === void 0 ? void 0 : _a.data) !== undefined) {
21
+ return true;
22
+ }
23
+ }
24
+ catch (err) {
25
+ retryCount++;
26
+ await (0, async_1.sleep)(ACCOUNT_INITIALIZATION_RETRY_DELAY_MS);
27
+ }
28
+ } while (retryCount < ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS);
29
+ throw new Error('awaitAccountInitializationFailed');
30
+ };
31
+ exports.awaitAccountInitializationChainState = awaitAccountInitializationChainState;
32
+ /**
33
+ * Using your own callback to do the account initialization, this method will run the initialization step, switch to the drift user, await for the account to be available on chain, subscribe to the user account, and switch to the user account using the drift client.
34
+ *
35
+ * It provides extra callbacks to handle steps directly after the initialiation tx, and after fully initializing+subscribing to the account.
36
+ *
37
+ * Callbacks available:
38
+ * - initializationStep: This callback should send the transaction to initialize the user account
39
+ * - postInitializationStep: This callback will run after the successful initialization transaction, but before trying to load/subscribe to the new account
40
+ * - handleSuccessStep: This callback will run after everything has initialized+subscribed successfully
41
+ *
42
+ * // TODO : Need to do the subscription step
43
+ */
44
+ const initializeAndSubscribeToNewUserAccount = async (driftClient, userIdToInit, authority, callbacks) => {
45
+ var _a;
46
+ await driftClient.addUser(userIdToInit, authority);
47
+ const accountAlreadyExisted = await ((_a = driftClient
48
+ .getUser(userIdToInit)) === null || _a === void 0 ? void 0 : _a.exists());
49
+ // Do the account initialization step
50
+ let result = await callbacks.initializationStep();
51
+ // Fetch account to make sure it's loaded
52
+ await updateUserAccount(driftClient.getUser(userIdToInit));
53
+ if (!result) {
54
+ return 'failed_initializationStep';
55
+ }
56
+ // Do the post-initialization step
57
+ result = callbacks.postInitializationStep
58
+ ? await callbacks.postInitializationStep()
59
+ : result;
60
+ if (!result) {
61
+ return 'failed_postInitializationStep';
62
+ }
63
+ // Await the account initialization step to update the blockchain
64
+ result = await awaitAccountInitializationChainState(driftClient, userIdToInit, authority);
65
+ if (!result) {
66
+ return 'failed_awaitAccountInitializationChainState';
67
+ }
68
+ await driftClient.switchActiveUser(userIdToInit, authority);
69
+ // Do the subscription step
70
+ // Run the success handler
71
+ result = callbacks.handleSuccessStep
72
+ ? await callbacks.handleSuccessStep(accountAlreadyExisted)
73
+ : result;
74
+ if (!result) {
75
+ return 'failed_handleSuccessStep';
76
+ }
77
+ return 'ok';
78
+ };
79
+ exports.initializeAndSubscribeToNewUserAccount = initializeAndSubscribeToNewUserAccount;
80
+ async function updateUserAccount(user) {
81
+ const publicKey = user.userAccountPublicKey;
82
+ try {
83
+ const dataAndContext = await user.driftClient.program.account.user.fetchAndContext(publicKey, 'processed');
84
+ user.accountSubscriber.updateData(dataAndContext.data, dataAndContext.context.slot);
85
+ }
86
+ catch (e) {
87
+ // noop
88
+ }
89
+ }
90
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/utils/accounts/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { DriftClient, PublicKey, User, UserAccount } from '@drift-labs/sdk';\nimport { sleep } from '../core/async';\n\n// When creating an account, try 5 times over 5 seconds to wait for the new account to hit the blockchain.\nconst ACCOUNT_INITIALIZATION_RETRY_DELAY_MS = 1000;\nconst ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS = 5;\n\nconst awaitAccountInitializationChainState = async (\n\tdriftClient: DriftClient,\n\tuserId: number,\n\tauthority: PublicKey\n) => {\n\tconst user = driftClient.getUser(userId, authority);\n\n\tif (!user.isSubscribed) {\n\t\tawait user.subscribe();\n\t}\n\n\tlet retryCount = 0;\n\n\tdo {\n\t\ttry {\n\t\t\tawait updateUserAccount(user);\n\t\t\tif (user?.getUserAccountAndSlot()?.data !== undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tretryCount++;\n\t\t\tawait sleep(ACCOUNT_INITIALIZATION_RETRY_DELAY_MS);\n\t\t}\n\t} while (retryCount < ACCOUNT_INITIALIZATION_RETRY_ATTEMPTS);\n\n\tthrow new Error('awaitAccountInitializationFailed');\n};\n\n/**\n * Using your own callback to do the account initialization, this method will run the initialization step, switch to the drift user, await for the account to be available on chain, subscribe to the user account, and switch to the user account using the drift client.\n *\n * It provides extra callbacks to handle steps directly after the initialiation tx, and after fully initializing+subscribing to the account.\n *\n * Callbacks available:\n * - initializationStep: This callback should send the transaction to initialize the user account\n * - postInitializationStep: This callback will run after the successful initialization transaction, but before trying to load/subscribe to the new account\n * - handleSuccessStep: This callback will run after everything has initialized+subscribed successfully\n *\n * // TODO : Need to do the subscription step\n */\nconst initializeAndSubscribeToNewUserAccount = async (\n\tdriftClient: DriftClient,\n\tuserIdToInit: number,\n\tauthority: PublicKey,\n\tcallbacks: {\n\t\tinitializationStep: () => Promise<boolean>;\n\t\tpostInitializationStep?: () => Promise<boolean>;\n\t\thandleSuccessStep?: (accountAlreadyExisted: boolean) => Promise<boolean>;\n\t}\n): Promise<\n\t| 'ok'\n\t| 'failed_initializationStep'\n\t| 'failed_postInitializationStep'\n\t| 'failed_awaitAccountInitializationChainState'\n\t| 'failed_handleSuccessStep'\n> => {\n\tawait driftClient.addUser(userIdToInit, authority);\n\n\tconst accountAlreadyExisted = await driftClient\n\t\t.getUser(userIdToInit)\n\t\t?.exists();\n\n\t// Do the account initialization step\n\tlet result = await callbacks.initializationStep();\n\n\t// Fetch account to make sure it's loaded\n\tawait updateUserAccount(driftClient.getUser(userIdToInit));\n\n\tif (!result) {\n\t\treturn 'failed_initializationStep';\n\t}\n\n\t// Do the post-initialization step\n\tresult = callbacks.postInitializationStep\n\t\t? await callbacks.postInitializationStep()\n\t\t: result;\n\n\tif (!result) {\n\t\treturn 'failed_postInitializationStep';\n\t}\n\n\t// Await the account initialization step to update the blockchain\n\tresult = await awaitAccountInitializationChainState(\n\t\tdriftClient,\n\t\tuserIdToInit,\n\t\tauthority\n\t);\n\n\tif (!result) {\n\t\treturn 'failed_awaitAccountInitializationChainState';\n\t}\n\n\tawait driftClient.switchActiveUser(userIdToInit, authority);\n\n\t// Do the subscription step\n\n\t// Run the success handler\n\tresult = callbacks.handleSuccessStep\n\t\t? await callbacks.handleSuccessStep(accountAlreadyExisted)\n\t\t: result;\n\n\tif (!result) {\n\t\treturn 'failed_handleSuccessStep';\n\t}\n\n\treturn 'ok';\n};\n\nasync function updateUserAccount(user: User): Promise<void> {\n\tconst publicKey = user.userAccountPublicKey;\n\ttry {\n\t\tconst dataAndContext =\n\t\t\tawait user.driftClient.program.account.user.fetchAndContext(\n\t\t\t\tpublicKey,\n\t\t\t\t'processed'\n\t\t\t);\n\t\tuser.accountSubscriber.updateData(\n\t\t\tdataAndContext.data as UserAccount,\n\t\t\tdataAndContext.context.slot\n\t\t);\n\t} catch (e) {\n\t\t// noop\n\t}\n}\n\nexport {\n\tACCOUNT_INITIALIZATION_RETRY_DELAY_MS,\n\tACCOUNT_INITIALIZATION_RETRY_ATTEMPTS,\n\tawaitAccountInitializationChainState,\n\tinitializeAndSubscribeToNewUserAccount,\n};\n"]}
@@ -0,0 +1,22 @@
1
+ import { MarketType, PublicKey } from '@drift-labs/sdk';
2
+ /**
3
+ * Get a unique key for an authority's subaccount
4
+ * @param userId
5
+ * @param authority
6
+ * @returns
7
+ */
8
+ declare const getUserKey: (userId: number, authority: PublicKey) => string;
9
+ /**
10
+ * Get the authority and subAccountId from a user's account key
11
+ * @param key
12
+ * @returns
13
+ */
14
+ declare const getIdAndAuthorityFromKey: (key: string) => {
15
+ userId: number;
16
+ userAuthority: PublicKey;
17
+ } | {
18
+ userId: undefined;
19
+ userAuthority: undefined;
20
+ };
21
+ declare const getMarketKey: (marketIndex: number, marketType: MarketType) => string;
22
+ export { getUserKey, getIdAndAuthorityFromKey, getMarketKey };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMarketKey = exports.getIdAndAuthorityFromKey = exports.getUserKey = void 0;
4
+ const sdk_1 = require("@drift-labs/sdk");
5
+ const cache_1 = require("../core/cache");
6
+ const enum_1 = require("../enum");
7
+ /**
8
+ * Get a unique key for an authority's subaccount
9
+ * @param userId
10
+ * @param authority
11
+ * @returns
12
+ */
13
+ const getUserKey = (userId, authority) => {
14
+ if (userId == undefined || !authority)
15
+ return '';
16
+ return (0, cache_1.getCachedUiString)('userKey', userId, authority.toString());
17
+ };
18
+ exports.getUserKey = getUserKey;
19
+ /**
20
+ * Get the authority and subAccountId from a user's account key
21
+ * @param key
22
+ * @returns
23
+ */
24
+ const getIdAndAuthorityFromKey = (key) => {
25
+ const splitKey = key === null || key === void 0 ? void 0 : key.split('_');
26
+ if (!splitKey || splitKey.length !== 2)
27
+ return { userId: undefined, userAuthority: undefined };
28
+ return {
29
+ userId: Number(splitKey[0]),
30
+ userAuthority: new sdk_1.PublicKey(splitKey[1]),
31
+ };
32
+ };
33
+ exports.getIdAndAuthorityFromKey = getIdAndAuthorityFromKey;
34
+ const getMarketKey = (marketIndex, marketType) => (0, cache_1.getCachedUiString)('marketKey', enum_1.ENUM_UTILS.toStr(marketType), marketIndex);
35
+ exports.getMarketKey = getMarketKey;
36
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/utils/accounts/keys.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AACxD,yCAAkD;AAClD,kCAAqC;AAErC;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,SAAoB,EAAE,EAAE;IAC3D,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IACjD,OAAO,IAAA,yBAAiB,EAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AA0BO,gCAAU;AAxBnB;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,CAChC,GAAW,EAGuC,EAAE;IACpD,MAAM,QAAQ,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAExD,OAAO;QACN,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,aAAa,EAAE,IAAI,eAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACzC,CAAC;AACH,CAAC,CAAC;AAKmB,4DAAwB;AAH7C,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,UAAsB,EAAE,EAAE,CACpE,IAAA,yBAAiB,EAAC,WAAW,EAAE,iBAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AAE5B,oCAAY","sourcesContent":["import { MarketType, PublicKey } from '@drift-labs/sdk';\nimport { getCachedUiString } from '../core/cache';\nimport { ENUM_UTILS } from '../enum';\n\n/**\n * Get a unique key for an authority's subaccount\n * @param userId\n * @param authority\n * @returns\n */\nconst getUserKey = (userId: number, authority: PublicKey) => {\n\tif (userId == undefined || !authority) return '';\n\treturn getCachedUiString('userKey', userId, authority.toString());\n};\n\n/**\n * Get the authority and subAccountId from a user's account key\n * @param key\n * @returns\n */\nconst getIdAndAuthorityFromKey = (\n\tkey: string\n):\n\t| { userId: number; userAuthority: PublicKey }\n\t| { userId: undefined; userAuthority: undefined } => {\n\tconst splitKey = key?.split('_');\n\n\tif (!splitKey || splitKey.length !== 2)\n\t\treturn { userId: undefined, userAuthority: undefined };\n\n\treturn {\n\t\tuserId: Number(splitKey[0]),\n\t\tuserAuthority: new PublicKey(splitKey[1]),\n\t};\n};\n\nconst getMarketKey = (marketIndex: number, marketType: MarketType) =>\n\tgetCachedUiString('marketKey', ENUM_UTILS.toStr(marketType), marketIndex);\n\nexport { getUserKey, getIdAndAuthorityFromKey, getMarketKey };\n"]}
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { PublicKey } from '@drift-labs/sdk';
4
+ import { AccountInfo, Connection } from '@solana/web3.js';
5
+ declare const getMultipleAccounts: (connection: any, keys: string[], commitment: string) => Promise<{
6
+ keys: string[];
7
+ array: AccountInfo<Buffer>[];
8
+ }>;
9
+ declare const getMultipleAccountsCore: (connection: any, keys: string[], commitment: string) => Promise<{
10
+ keys: string[];
11
+ array: AccountInfo<string[]>[];
12
+ }>;
13
+ declare const getMultipleAccountsInfoChunked: (connection: Connection, accounts: PublicKey[]) => Promise<(AccountInfo<Buffer> | null)[]>;
14
+ export { getMultipleAccounts, getMultipleAccountsCore, getMultipleAccountsInfoChunked, };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMultipleAccountsInfoChunked = exports.getMultipleAccountsCore = exports.getMultipleAccounts = void 0;
4
+ const arrays_1 = require("../core/arrays");
5
+ const getMultipleAccounts = async (connection, keys, commitment) => {
6
+ const result = await Promise.all((0, arrays_1.chunks)(keys, 99).map((chunk) => getMultipleAccountsCore(connection, chunk, commitment)));
7
+ const array = result
8
+ .map((a) => a.array
9
+ .map((acc) => {
10
+ if (!acc) {
11
+ return undefined;
12
+ }
13
+ const { data, ...rest } = acc;
14
+ const obj = {
15
+ ...rest,
16
+ data: Buffer.from(data[0], 'base64'),
17
+ };
18
+ return obj;
19
+ })
20
+ .filter((_) => _))
21
+ .flat();
22
+ return { keys, array };
23
+ };
24
+ exports.getMultipleAccounts = getMultipleAccounts;
25
+ const getMultipleAccountsCore = async (connection, keys, commitment) => {
26
+ const args = connection._buildArgs([keys], commitment, 'base64');
27
+ const unsafeRes = await connection._rpcRequest('getMultipleAccounts', args);
28
+ if (unsafeRes.error) {
29
+ throw new Error('failed to get info about account ' + unsafeRes.error.message);
30
+ }
31
+ if (unsafeRes.result.value) {
32
+ const array = unsafeRes.result.value;
33
+ return { keys, array };
34
+ }
35
+ // TODO: fix
36
+ throw new Error();
37
+ };
38
+ exports.getMultipleAccountsCore = getMultipleAccountsCore;
39
+ const getMultipleAccountsInfoChunked = async (connection, accounts) => {
40
+ const accountChunks = (0, arrays_1.chunks)(accounts, 100); // 100 is limit for getMultipleAccountsInfo
41
+ const responses = await Promise.all(accountChunks.map((chunk) => connection.getMultipleAccountsInfo(chunk)));
42
+ return responses.flat();
43
+ };
44
+ exports.getMultipleAccountsInfoChunked = getMultipleAccountsInfoChunked;
45
+ //# sourceMappingURL=multiple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple.js","sourceRoot":"","sources":["../../../src/utils/accounts/multiple.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AAExC,MAAM,mBAAmB,GAAG,KAAK,EAChC,UAAe,EACf,IAAc,EACd,UAAkB,EACjB,EAAE;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAA,eAAM,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CACtD,CACD,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM;SAClB,GAAG,CACH,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,KAAK;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACZ,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,GAAG,GAAG;YACX,GAAG,IAAI;YACP,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;SACb,CAAC;QACzB,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAA0B,CAC5C;SACA,IAAI,EAAE,CAAC;IACT,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC,CAAC;AAqCD,kDAAmB;AAnCpB,MAAM,uBAAuB,GAAG,KAAK,EACpC,UAAe,EACf,IAAc,EACd,UAAkB,EACjB,EAAE;IACH,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAC5E,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACd,mCAAmC,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAC7D,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAgC,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,YAAY;IACZ,MAAM,IAAI,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC;AAeD,0DAAuB;AAbxB,MAAM,8BAA8B,GAAG,KAAK,EAC3C,UAAsB,EACtB,QAAqB,EACqB,EAAE;IAC5C,MAAM,aAAa,GAAG,IAAA,eAAM,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,2CAA2C;IACxF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CACvE,CAAC;IACF,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC,CAAC;AAKD,wEAA8B","sourcesContent":["import { PublicKey } from '@drift-labs/sdk';\nimport { AccountInfo, Connection } from '@solana/web3.js';\nimport { chunks } from '../core/arrays';\n\nconst getMultipleAccounts = async (\n\tconnection: any,\n\tkeys: string[],\n\tcommitment: string\n) => {\n\tconst result = await Promise.all(\n\t\tchunks(keys, 99).map((chunk) =>\n\t\t\tgetMultipleAccountsCore(connection, chunk, commitment)\n\t\t)\n\t);\n\n\tconst array = result\n\t\t.map(\n\t\t\t(a) =>\n\t\t\t\ta.array\n\t\t\t\t\t.map((acc) => {\n\t\t\t\t\t\tif (!acc) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { data, ...rest } = acc;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\t...rest,\n\t\t\t\t\t\t\tdata: Buffer.from(data[0], 'base64'),\n\t\t\t\t\t\t} as AccountInfo<Buffer>;\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((_) => _) as AccountInfo<Buffer>[]\n\t\t)\n\t\t.flat();\n\treturn { keys, array };\n};\n\nconst getMultipleAccountsCore = async (\n\tconnection: any,\n\tkeys: string[],\n\tcommitment: string\n) => {\n\tconst args = connection._buildArgs([keys], commitment, 'base64');\n\n\tconst unsafeRes = await connection._rpcRequest('getMultipleAccounts', args);\n\tif (unsafeRes.error) {\n\t\tthrow new Error(\n\t\t\t'failed to get info about account ' + unsafeRes.error.message\n\t\t);\n\t}\n\n\tif (unsafeRes.result.value) {\n\t\tconst array = unsafeRes.result.value as AccountInfo<string[]>[];\n\t\treturn { keys, array };\n\t}\n\n\t// TODO: fix\n\tthrow new Error();\n};\n\nconst getMultipleAccountsInfoChunked = async (\n\tconnection: Connection,\n\taccounts: PublicKey[]\n): Promise<(AccountInfo<Buffer> | null)[]> => {\n\tconst accountChunks = chunks(accounts, 100); // 100 is limit for getMultipleAccountsInfo\n\tconst responses = await Promise.all(\n\t\taccountChunks.map((chunk) => connection.getMultipleAccountsInfo(chunk))\n\t);\n\treturn responses.flat();\n};\n\nexport {\n\tgetMultipleAccounts,\n\tgetMultipleAccountsCore,\n\tgetMultipleAccountsInfoChunked,\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import { PublicKey } from '@drift-labs/sdk';
2
+ declare const getSignatureVerificationMessageForSettings: (authority: PublicKey, signTs: number) => Uint8Array;
3
+ declare const verifySignature: (signature: Uint8Array, message: Uint8Array, pubKey: PublicKey) => boolean;
4
+ declare const hashSignature: (signature: string) => Promise<string>;
5
+ declare const compareSignatures: (original: string, hashed: string) => Promise<boolean>;
6
+ export { getSignatureVerificationMessageForSettings, verifySignature, hashSignature, compareSignatures, };