@drift-labs/common 1.0.59 → 1.0.61

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 (284) 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 +5 -4
  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 +4 -4
  48. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +60 -32
  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/trade/openPerpOrder/types.d.ts +5 -0
  55. package/lib/drift/base/actions/trade/openPerpOrder/types.js.map +1 -1
  56. package/lib/drift/base/actions/user/create.js +2 -2
  57. package/lib/drift/base/actions/user/create.js.map +1 -1
  58. package/lib/drift/base/details/user/balances.js +2 -2
  59. package/lib/drift/base/details/user/balances.js.map +1 -1
  60. package/lib/drift/base/details/user/positions.js +2 -2
  61. package/lib/drift/base/details/user/positions.js.map +1 -1
  62. package/lib/index.d.ts +28 -28
  63. package/lib/index.js +44 -29
  64. package/lib/index.js.map +1 -1
  65. package/lib/utils/accounts/index.d.ts +6 -0
  66. package/lib/utils/accounts/index.js +23 -0
  67. package/lib/utils/accounts/index.js.map +1 -0
  68. package/lib/utils/accounts/init.d.ts +22 -0
  69. package/lib/utils/accounts/init.js +90 -0
  70. package/lib/utils/accounts/init.js.map +1 -0
  71. package/lib/utils/accounts/keys.d.ts +22 -0
  72. package/lib/utils/accounts/keys.js +36 -0
  73. package/lib/utils/accounts/keys.js.map +1 -0
  74. package/lib/utils/accounts/multiple.d.ts +14 -0
  75. package/lib/utils/accounts/multiple.js +45 -0
  76. package/lib/utils/accounts/multiple.js.map +1 -0
  77. package/lib/utils/accounts/signature.d.ts +6 -0
  78. package/lib/utils/accounts/signature.js +53 -0
  79. package/lib/utils/accounts/signature.js.map +1 -0
  80. package/lib/utils/accounts/subaccounts.d.ts +8 -0
  81. package/lib/utils/accounts/subaccounts.js +31 -0
  82. package/lib/utils/accounts/subaccounts.js.map +1 -0
  83. package/lib/utils/{WalletConnectionState.d.ts → accounts/wallet.d.ts} +7 -1
  84. package/lib/utils/{WalletConnectionState.js → accounts/wallet.js} +32 -2
  85. package/lib/utils/accounts/wallet.js.map +1 -0
  86. package/lib/utils/core/arrays.d.ts +2 -0
  87. package/lib/utils/core/arrays.js +25 -0
  88. package/lib/utils/core/arrays.js.map +1 -0
  89. package/lib/utils/core/async.d.ts +5 -0
  90. package/lib/utils/core/async.js +17 -0
  91. package/lib/utils/core/async.js.map +1 -0
  92. package/lib/utils/core/cache.d.ts +1 -0
  93. package/lib/utils/core/cache.js +40 -0
  94. package/lib/utils/core/cache.js.map +1 -0
  95. package/lib/utils/core/data-structures.d.ts +30 -0
  96. package/lib/utils/core/data-structures.js +84 -0
  97. package/lib/utils/core/data-structures.js.map +1 -0
  98. package/lib/utils/{equalityChecks.d.ts → core/equality.d.ts} +1 -1
  99. package/lib/utils/{equalityChecks.js → core/equality.js} +3 -3
  100. package/lib/utils/core/equality.js.map +1 -0
  101. package/lib/utils/core/fetch.js.map +1 -0
  102. package/lib/utils/core/index.d.ts +7 -0
  103. package/lib/utils/core/index.js +24 -0
  104. package/lib/utils/core/index.js.map +1 -0
  105. package/lib/utils/core/serialization.d.ts +30 -0
  106. package/lib/utils/core/serialization.js +92 -0
  107. package/lib/utils/core/serialization.js.map +1 -0
  108. package/lib/utils/{enum.js → enum/index.js} +1 -1
  109. package/lib/utils/enum/index.js.map +1 -0
  110. package/lib/utils/index.d.ts +11 -176
  111. package/lib/utils/index.js +25 -594
  112. package/lib/utils/index.js.map +1 -1
  113. package/lib/utils/markets/balances.d.ts +6 -0
  114. package/lib/utils/markets/balances.js +29 -0
  115. package/lib/utils/markets/balances.js.map +1 -0
  116. package/lib/utils/markets/config.d.ts +5 -0
  117. package/lib/utils/markets/config.js +24 -0
  118. package/lib/utils/markets/config.js.map +1 -0
  119. package/lib/utils/markets/index.d.ts +6 -0
  120. package/lib/utils/markets/index.js +23 -0
  121. package/lib/utils/markets/index.js.map +1 -0
  122. package/lib/utils/markets/interest.d.ts +25 -0
  123. package/lib/utils/markets/interest.js +65 -0
  124. package/lib/utils/markets/interest.js.map +1 -0
  125. package/lib/utils/markets/leverage.d.ts +12 -0
  126. package/lib/utils/markets/leverage.js +60 -0
  127. package/lib/utils/markets/leverage.js.map +1 -0
  128. package/lib/utils/markets/operations.d.ts +21 -0
  129. package/lib/utils/markets/operations.js +59 -0
  130. package/lib/utils/markets/operations.js.map +1 -0
  131. package/lib/utils/math/bignum.d.ts +3 -0
  132. package/lib/utils/math/bignum.js +16 -0
  133. package/lib/utils/math/bignum.js.map +1 -0
  134. package/lib/utils/math/bn.d.ts +7 -0
  135. package/lib/utils/math/bn.js +58 -0
  136. package/lib/utils/math/bn.js.map +1 -0
  137. package/lib/utils/math/index.d.ts +7 -0
  138. package/lib/utils/math/index.js +24 -0
  139. package/lib/utils/math/index.js.map +1 -0
  140. package/lib/utils/math/numbers.d.ts +13 -0
  141. package/lib/utils/math/numbers.js +56 -0
  142. package/lib/utils/math/numbers.js.map +1 -0
  143. package/lib/utils/math/precision.d.ts +19 -0
  144. package/lib/utils/math/precision.js +73 -0
  145. package/lib/utils/math/precision.js.map +1 -0
  146. package/lib/utils/math/price.d.ts +12 -0
  147. package/lib/utils/math/price.js +45 -0
  148. package/lib/utils/math/price.js.map +1 -0
  149. package/lib/utils/math/sort.d.ts +13 -0
  150. package/lib/utils/math/sort.js +33 -0
  151. package/lib/utils/math/sort.js.map +1 -0
  152. package/lib/utils/math/spread.d.ts +8 -0
  153. package/lib/utils/math/spread.js +87 -0
  154. package/lib/utils/math/spread.js.map +1 -0
  155. package/lib/utils/orderbook/index.js +4 -4
  156. package/lib/utils/orderbook/index.js.map +1 -1
  157. package/lib/utils/orders/filters.d.ts +7 -0
  158. package/lib/utils/orders/filters.js +31 -0
  159. package/lib/utils/orders/filters.js.map +1 -0
  160. package/lib/utils/orders/flags.d.ts +12 -0
  161. package/lib/utils/orders/flags.js +44 -0
  162. package/lib/utils/orders/flags.js.map +1 -0
  163. package/lib/utils/orders/index.d.ts +6 -0
  164. package/lib/utils/orders/index.js +23 -0
  165. package/lib/utils/orders/index.js.map +1 -0
  166. package/lib/utils/orders/labels.d.ts +4 -0
  167. package/lib/utils/orders/labels.js +122 -0
  168. package/lib/utils/orders/labels.js.map +1 -0
  169. package/lib/utils/orders/misc.d.ts +11 -0
  170. package/lib/utils/orders/misc.js +27 -0
  171. package/lib/utils/orders/misc.js.map +1 -0
  172. package/lib/utils/orders/oracle.d.ts +5 -0
  173. package/lib/utils/orders/oracle.js +23 -0
  174. package/lib/utils/orders/oracle.js.map +1 -0
  175. package/lib/utils/orders/sort.d.ts +38 -0
  176. package/lib/utils/orders/sort.js +83 -0
  177. package/lib/utils/orders/sort.js.map +1 -0
  178. package/lib/utils/positions/index.d.ts +2 -0
  179. package/lib/{common-ui-utils → utils/positions}/index.js +1 -5
  180. package/lib/utils/positions/index.js.map +1 -0
  181. package/lib/utils/positions/open.d.ts +4 -0
  182. package/lib/{common-ui-utils/user.js → utils/positions/open.js} +10 -81
  183. package/lib/utils/positions/open.js.map +1 -0
  184. package/lib/utils/positions/user.d.ts +37 -0
  185. package/lib/utils/positions/user.js +74 -0
  186. package/lib/utils/positions/user.js.map +1 -0
  187. package/lib/utils/settings/settings.js.map +1 -0
  188. package/lib/utils/strings/convert.d.ts +11 -0
  189. package/lib/utils/{strings.js → strings/convert.js} +2 -51
  190. package/lib/utils/strings/convert.js.map +1 -0
  191. package/lib/utils/strings/format.d.ts +14 -0
  192. package/lib/utils/strings/format.js +61 -0
  193. package/lib/utils/strings/format.js.map +1 -0
  194. package/lib/utils/strings/index.d.ts +4 -0
  195. package/lib/utils/strings/index.js +21 -0
  196. package/lib/utils/strings/index.js.map +1 -0
  197. package/lib/utils/strings/parse.d.ts +4 -0
  198. package/lib/utils/strings/parse.js +25 -0
  199. package/lib/utils/strings/parse.js.map +1 -0
  200. package/lib/utils/strings/status.d.ts +15 -0
  201. package/lib/utils/strings/status.js +21 -0
  202. package/lib/utils/strings/status.js.map +1 -0
  203. package/lib/utils/token/account.d.ts +16 -0
  204. package/lib/utils/token/account.js +36 -0
  205. package/lib/utils/token/account.js.map +1 -0
  206. package/lib/utils/{token.d.ts → token/address.d.ts} +2 -7
  207. package/lib/utils/token/address.js +30 -0
  208. package/lib/utils/token/address.js.map +1 -0
  209. package/lib/utils/token/index.d.ts +3 -0
  210. package/lib/utils/token/index.js +20 -0
  211. package/lib/utils/token/index.js.map +1 -0
  212. package/lib/utils/token/instructions.d.ts +3 -0
  213. package/lib/utils/token/instructions.js +17 -0
  214. package/lib/utils/token/instructions.js.map +1 -0
  215. package/lib/utils/trading/auction.d.ts +82 -0
  216. package/lib/utils/trading/auction.js +208 -0
  217. package/lib/utils/trading/auction.js.map +1 -0
  218. package/lib/utils/trading/index.d.ts +7 -0
  219. package/lib/utils/trading/index.js +24 -0
  220. package/lib/utils/trading/index.js.map +1 -0
  221. package/lib/utils/trading/leverage.d.ts +18 -0
  222. package/lib/utils/trading/leverage.js +79 -0
  223. package/lib/utils/trading/leverage.js.map +1 -0
  224. package/lib/utils/trading/liquidation.d.ts +22 -0
  225. package/lib/utils/trading/liquidation.js +67 -0
  226. package/lib/utils/trading/liquidation.js.map +1 -0
  227. package/lib/utils/trading/lp.d.ts +4 -0
  228. package/lib/utils/trading/lp.js +20 -0
  229. package/lib/utils/trading/lp.js.map +1 -0
  230. package/lib/utils/trading/pnl.d.ts +34 -0
  231. package/lib/utils/trading/pnl.js +88 -0
  232. package/lib/utils/trading/pnl.js.map +1 -0
  233. package/lib/utils/trading/price.d.ts +12 -0
  234. package/lib/utils/trading/price.js +36 -0
  235. package/lib/utils/trading/price.js.map +1 -0
  236. package/lib/utils/trading/size.d.ts +27 -0
  237. package/lib/utils/trading/size.js +83 -0
  238. package/lib/utils/trading/size.js.map +1 -0
  239. package/lib/utils/{validation.d.ts → validation/address.d.ts} +1 -2
  240. package/lib/utils/{validation.js → validation/address.js} +4 -6
  241. package/lib/utils/validation/address.js.map +1 -0
  242. package/lib/utils/validation/index.d.ts +3 -0
  243. package/lib/utils/validation/index.js +20 -0
  244. package/lib/utils/validation/index.js.map +1 -0
  245. package/lib/utils/validation/input.d.ts +3 -0
  246. package/lib/utils/validation/input.js +33 -0
  247. package/lib/utils/validation/input.js.map +1 -0
  248. package/lib/utils/validation/notional.d.ts +2 -0
  249. package/lib/utils/validation/notional.js +8 -0
  250. package/lib/utils/validation/notional.js.map +1 -0
  251. package/package.json +90 -3
  252. package/lib/common-ui-utils/commonUiUtils.d.ts +0 -251
  253. package/lib/common-ui-utils/commonUiUtils.js +0 -647
  254. package/lib/common-ui-utils/commonUiUtils.js.map +0 -1
  255. package/lib/common-ui-utils/index.d.ts +0 -6
  256. package/lib/common-ui-utils/index.js.map +0 -1
  257. package/lib/common-ui-utils/market.js +0 -134
  258. package/lib/common-ui-utils/market.js.map +0 -1
  259. package/lib/common-ui-utils/order.d.ts +0 -25
  260. package/lib/common-ui-utils/order.js +0 -191
  261. package/lib/common-ui-utils/order.js.map +0 -1
  262. package/lib/common-ui-utils/settings/settings.js.map +0 -1
  263. package/lib/common-ui-utils/trading.d.ts +0 -79
  264. package/lib/common-ui-utils/trading.js +0 -313
  265. package/lib/common-ui-utils/trading.js.map +0 -1
  266. package/lib/common-ui-utils/user.d.ts +0 -18
  267. package/lib/common-ui-utils/user.js.map +0 -1
  268. package/lib/utils/WalletConnectionState.js.map +0 -1
  269. package/lib/utils/enum.js.map +0 -1
  270. package/lib/utils/equalityChecks.js.map +0 -1
  271. package/lib/utils/fetch.js.map +0 -1
  272. package/lib/utils/math.d.ts +0 -31
  273. package/lib/utils/math.js +0 -181
  274. package/lib/utils/math.js.map +0 -1
  275. package/lib/utils/strings.d.ts +0 -34
  276. package/lib/utils/strings.js.map +0 -1
  277. package/lib/utils/token.js +0 -45
  278. package/lib/utils/token.js.map +0 -1
  279. package/lib/utils/validation.js.map +0 -1
  280. /package/lib/utils/{fetch.d.ts → core/fetch.d.ts} +0 -0
  281. /package/lib/utils/{fetch.js → core/fetch.js} +0 -0
  282. /package/lib/utils/{enum.d.ts → enum/index.d.ts} +0 -0
  283. /package/lib/{common-ui-utils → utils}/settings/settings.d.ts +0 -0
  284. /package/lib/{common-ui-utils → utils}/settings/settings.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"commonUiUtils.js","sourceRoot":"","sources":["../../src/common-ui-utils/commonUiUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAMM_RESERVE_PRECISION_EXP,\n\tAMM_TO_QUOTE_PRECISION_RATIO,\n\tBASE_PRECISION_EXP,\n\tBN,\n\tBigNum,\n\tDriftClient,\n\tIWalletV2,\n\tMarketType,\n\tOptionalOrderParams,\n\tOrderType,\n\tPRICE_PRECISION,\n\tPRICE_PRECISION_EXP,\n\tPositionDirection,\n\tPublicKey,\n\tQUOTE_PRECISION_EXP,\n\tSpotMarketConfig,\n\tUser,\n\tUserAccount,\n\tZERO,\n\tderiveOracleAuctionParams,\n\tgetMarketOrderParams,\n\tisVariant,\n} from '@drift-labs/sdk';\nimport { ENUM_UTILS, sleep } from '../utils';\nimport {\n\tAccountInfo,\n\tConnection,\n\tKeypair,\n\tParsedAccountData,\n} from '@solana/web3.js';\nimport bcrypt from 'bcryptjs-react';\nimport nacl, { sign } from 'tweetnacl';\nimport { getAssociatedTokenAddress } from '@solana/spl-token';\nimport { AuctionParams, TradeOffsetPrice } from 'src/types';\nimport { USER_UTILS } from './user';\nimport { TRADING_UTILS } from './trading';\nimport { MARKET_UTILS } from './market';\nimport { ORDER_COMMON_UTILS } from './order';\nimport { EMPTY_AUCTION_PARAMS } from '../constants/trade';\n\n// Cache for common UI string patterns to reduce memory allocation\nconst uiStringCache = new Map<string, string>();\nconst MAX_UI_STRING_CACHE_SIZE = 2000;\n\n// Helper function to cache common string patterns\nfunction getCachedUiString(\n\tpattern: string,\n\t...values: (string | number)[]\n): string {\n\tconst cacheKey = `${pattern}:${values.join(':')}`;\n\n\tif (uiStringCache.has(cacheKey)) {\n\t\treturn uiStringCache.get(cacheKey)!;\n\t}\n\n\tlet result: string;\n\tswitch (pattern) {\n\t\tcase 'abbreviate': {\n\t\t\tconst [authString, length] = values as [string, number];\n\t\t\tresult = `${authString.slice(0, length)}\\u2026${authString.slice(\n\t\t\t\t-length\n\t\t\t)}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'userKey': {\n\t\t\tconst [userId, authority] = values as [number, string];\n\t\t\tresult = `${userId}_${authority}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'marketKey': {\n\t\t\tconst [marketType, marketIndex] = values as [string, number];\n\t\t\tresult = `${marketType}_${marketIndex}`;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tresult = values.join('_');\n\t}\n\n\t// Cache if not too large\n\tif (uiStringCache.size < MAX_UI_STRING_CACHE_SIZE) {\n\t\tuiStringCache.set(cacheKey, result);\n\t}\n\n\treturn result;\n}\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\nexport const abbreviateAddress = (address: string | PublicKey, length = 4) => {\n\tif (!address) return '';\n\tconst authString = address.toString();\n\treturn getCachedUiString('abbreviate', authString, length);\n};\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 fetchCurrentSubaccounts = (driftClient: DriftClient): UserAccount[] => {\n\treturn driftClient.getUsers().map((user) => user.getUserAccount());\n};\n\nconst fetchUserClientsAndAccounts = (\n\tdriftClient: DriftClient\n): { user: User; userAccount: UserAccount }[] => {\n\tconst accounts = fetchCurrentSubaccounts(driftClient);\n\tconst allUsersAndUserAccounts = accounts.map((acct) => {\n\t\treturn {\n\t\t\tuser: driftClient.getUser(acct.subAccountId, acct.authority),\n\t\t\tuserAccount: acct,\n\t\t};\n\t});\n\n\treturn allUsersAndUserAccounts;\n};\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\nconst getMarketKey = (marketIndex: number, marketType: MarketType) =>\n\tgetCachedUiString('marketKey', ENUM_UTILS.toStr(marketType), marketIndex);\n\n/**\n * Creates an IWallet wrapper, with redundant methods. If a `walletPubKey` is passed in,\n * the `publicKey` will be based on that.\n */\nconst createPlaceholderIWallet = (walletPubKey?: PublicKey) => {\n\tconst newKeypair = walletPubKey\n\t\t? new Keypair({\n\t\t\t\tpublicKey: walletPubKey.toBytes(),\n\t\t\t\tsecretKey: new Keypair().publicKey.toBytes(),\n\t\t })\n\t\t: new Keypair();\n\n\tconst newWallet: IWalletV2 = {\n\t\tpublicKey: newKeypair.publicKey,\n\t\t//@ts-ignore\n\t\tsignTransaction: () => {\n\t\t\treturn Promise.resolve();\n\t\t},\n\t\t//@ts-ignore\n\t\tsignAllTransactions: () => {\n\t\t\treturn Promise.resolve();\n\t\t},\n\t\t//@ts-ignore\n\t\tsignMessage: () => {\n\t\t\treturn Promise.resolve();\n\t\t},\n\t};\n\n\treturn newWallet;\n};\n\nconst getSignatureVerificationMessageForSettings = (\n\tauthority: PublicKey,\n\tsignTs: number\n): Uint8Array => {\n\treturn new TextEncoder().encode(\n\t\t`Verify you are the owner of this wallet to update trade settings: \\n${authority.toBase58()}\\n\\nThis signature will be valid for the next 30 minutes.\\n\\nTS: ${signTs.toString()}`\n\t);\n};\n\nconst verifySignature = (\n\tsignature: Uint8Array,\n\tmessage: Uint8Array,\n\tpubKey: PublicKey\n): boolean => {\n\treturn sign.detached.verify(message, signature, pubKey.toBytes());\n};\n\nconst hashSignature = async (signature: string): Promise<string> => {\n\tbcrypt.setRandomFallback((num: number) => {\n\t\treturn Array.from(nacl.randomBytes(num));\n\t});\n\tconst hashedSignature = await bcrypt.hash(signature, bcrypt.genSaltSync(10));\n\treturn hashedSignature;\n};\n\nconst compareSignatures = async (\n\toriginal: string,\n\thashed: string\n): Promise<boolean> => {\n\tconst signaturesMatch = await bcrypt.compare(original, hashed);\n\treturn signaturesMatch;\n};\n\n/* Trading-related helper functions */\n\nconst calculateAverageEntryPrice = (\n\tquoteAssetAmount: BigNum,\n\tbaseAssetAmount: BigNum\n): BigNum => {\n\tif (baseAssetAmount.eqZero()) return BigNum.zero();\n\n\treturn BigNum.from(\n\t\tquoteAssetAmount.val\n\t\t\t.mul(PRICE_PRECISION)\n\t\t\t.mul(AMM_TO_QUOTE_PRECISION_RATIO)\n\t\t\t.div(baseAssetAmount.shiftTo(BASE_PRECISION_EXP).val)\n\t\t\t.abs(),\n\t\tPRICE_PRECISION_EXP\n\t);\n};\n\nconst getMarketOrderLimitPrice = ({\n\tdirection,\n\tbaselinePrice,\n\tslippageTolerance,\n}: {\n\tdirection: PositionDirection;\n\tbaselinePrice: BN;\n\tslippageTolerance: number;\n}): BN => {\n\tlet limitPrice;\n\n\tif (!baselinePrice) return ZERO;\n\n\tif (slippageTolerance === 0) return baselinePrice;\n\n\t// infinite slippage capped at 15% currently\n\tif (slippageTolerance == undefined) slippageTolerance = 15;\n\n\t// if manually entered, cap at 99%\n\tif (slippageTolerance > 99) slippageTolerance = 99;\n\n\tlet limitPricePctDiff;\n\tif (isVariant(direction, 'long')) {\n\t\tlimitPricePctDiff = PRICE_PRECISION.add(\n\t\t\tnew BN(slippageTolerance * PRICE_PRECISION.toNumber()).div(new BN(100))\n\t\t);\n\t\tlimitPrice = baselinePrice.mul(limitPricePctDiff).div(PRICE_PRECISION);\n\t} else {\n\t\tlimitPricePctDiff = PRICE_PRECISION.sub(\n\t\t\tnew BN(slippageTolerance * PRICE_PRECISION.toNumber()).div(new BN(100))\n\t\t);\n\t\tlimitPrice = baselinePrice.mul(limitPricePctDiff).div(PRICE_PRECISION);\n\t}\n\n\treturn limitPrice;\n};\n\nconst getMarketAuctionParams = ({\n\tdirection,\n\tstartPriceFromSettings,\n\tendPriceFromSettings,\n\tlimitPrice,\n\tduration,\n\tauctionStartPriceOffset,\n\tauctionEndPriceOffset,\n\tadditionalEndPriceBuffer,\n\tforceUpToSlippage,\n\tbestBidPrice,\n\tbestAskPrice,\n\tensureCrossingEndPrice,\n}: {\n\tdirection: PositionDirection;\n\tstartPriceFromSettings: BN;\n\tendPriceFromSettings: BN;\n\t/**\n\t * Limit price is the oracle limit price - market orders use the oracle order type under the hood on Drift UI\n\t * So oracle limit price is the oracle price + oracle offset\n\t */\n\tlimitPrice: BN;\n\tduration: number;\n\tauctionStartPriceOffset: number;\n\tauctionEndPriceOffset: number;\n\tadditionalEndPriceBuffer?: BN;\n\tforceUpToSlippage?: boolean;\n\tbestBidPrice?: BN;\n\tbestAskPrice?: BN;\n\tensureCrossingEndPrice?: boolean;\n}): AuctionParams => {\n\tlet auctionStartPrice: BN;\n\tlet auctionEndPrice: BN;\n\tlet constrainedBySlippage: boolean;\n\n\tconst auctionEndPriceBuffer = BigNum.from(PRICE_PRECISION).scale(\n\t\tMath.abs(auctionEndPriceOffset * 100),\n\t\t10000\n\t).val;\n\n\tconst auctionStartPriceBuffer = BigNum.from(startPriceFromSettings).scale(\n\t\tMath.abs(auctionStartPriceOffset * 100),\n\t\t10000\n\t).val;\n\n\tif (isVariant(direction, 'long')) {\n\t\tauctionStartPrice = startPriceFromSettings.sub(auctionStartPriceBuffer);\n\n\t\tconst worstPriceToUse = BN.max(\n\t\t\tendPriceFromSettings,\n\t\t\tstartPriceFromSettings\n\t\t); // Handles edge cases like if the worst price on the book was better than the oracle price, and the settings are asking to be relative to the oracle price\n\n\t\tauctionEndPrice = PRICE_PRECISION.add(auctionEndPriceBuffer)\n\t\t\t.mul(worstPriceToUse)\n\t\t\t.div(PRICE_PRECISION);\n\n\t\tconstrainedBySlippage = limitPrice.lt(auctionEndPrice);\n\n\t\t// if forceUpToSlippage is passed, use max slippage price as end price\n\t\tif (forceUpToSlippage) {\n\t\t\tauctionEndPrice = limitPrice;\n\t\t\tconstrainedBySlippage = false;\n\t\t} else {\n\t\t\t// use BEST (limit price, auction end price) as end price\n\t\t\tauctionEndPrice = BN.min(limitPrice, auctionEndPrice);\n\t\t}\n\n\t\t// apply additional buffer if provided\n\t\tif (additionalEndPriceBuffer) {\n\t\t\tauctionEndPrice = auctionEndPrice.add(additionalEndPriceBuffer);\n\t\t\tconstrainedBySlippage = limitPrice.lt(auctionEndPrice);\n\t\t}\n\n\t\t// if ensureCrossingEndPrice is passed, ensure auction end price crosses bestAskPrice\n\t\tif (ensureCrossingEndPrice && bestAskPrice) {\n\t\t\tauctionEndPrice = BN.max(\n\t\t\t\tauctionEndPrice,\n\t\t\t\tbestAskPrice.add(auctionEndPriceBuffer)\n\t\t\t);\n\t\t}\n\n\t\tauctionStartPrice = BN.min(auctionStartPrice, auctionEndPrice);\n\t} else {\n\t\tauctionStartPrice = startPriceFromSettings.add(auctionStartPriceBuffer);\n\n\t\tconst worstPriceToUse = BN.min(\n\t\t\tendPriceFromSettings,\n\t\t\tstartPriceFromSettings\n\t\t); // Handles edge cases like if the worst price on the book was better than the oracle price, and the settings are asking to be relative to the oracle price\n\n\t\tauctionEndPrice = PRICE_PRECISION.sub(auctionEndPriceBuffer)\n\t\t\t.mul(worstPriceToUse)\n\t\t\t.div(PRICE_PRECISION);\n\n\t\tconstrainedBySlippage = limitPrice.gt(auctionEndPrice);\n\n\t\t// if forceUpToSlippage is passed, use max slippage price as end price\n\t\tif (forceUpToSlippage) {\n\t\t\tauctionEndPrice = limitPrice;\n\t\t\tconstrainedBySlippage = false;\n\t\t} else {\n\t\t\t// use BEST (limit price, auction end price) as end price\n\t\t\tauctionEndPrice = BN.max(limitPrice, auctionEndPrice);\n\t\t}\n\n\t\t// apply additional buffer if provided\n\t\tif (additionalEndPriceBuffer) {\n\t\t\tauctionEndPrice = auctionEndPrice.sub(additionalEndPriceBuffer);\n\t\t\tconstrainedBySlippage = limitPrice.gt(auctionEndPrice);\n\t\t}\n\n\t\t// if ensureCrossingEndPrice is passed, ensure auction end price crosses bestBidPrice\n\t\tif (ensureCrossingEndPrice && bestBidPrice) {\n\t\t\tauctionEndPrice = BN.min(\n\t\t\t\tauctionEndPrice,\n\t\t\t\tbestBidPrice.sub(auctionEndPriceBuffer)\n\t\t\t);\n\t\t}\n\n\t\tauctionStartPrice = BN.max(auctionStartPrice, auctionEndPrice);\n\t}\n\n\treturn {\n\t\tauctionStartPrice,\n\t\tauctionEndPrice,\n\t\tauctionDuration: duration,\n\t\tconstrainedBySlippage,\n\t};\n};\n\n/**\n * Helper function which derived market order params from the CORE data that is used to create them.\n * @param param0\n * @returns\n */\nconst deriveMarketOrderParams = ({\n\tmarketType,\n\tmarketIndex,\n\tdirection,\n\tmaxLeverageSelected,\n\tmaxLeverageOrderSize,\n\tbaseAmount,\n\treduceOnly,\n\tallowInfSlippage,\n\toraclePrice,\n\tbestPrice,\n\tentryPrice,\n\tworstPrice,\n\tmarkPrice,\n\tauctionDuration,\n\tauctionStartPriceOffset,\n\tauctionEndPriceOffset,\n\tauctionStartPriceOffsetFrom,\n\tauctionEndPriceOffsetFrom,\n\tauctionPriceCaps,\n\tslippageTolerance,\n\tisOracleOrder,\n\tadditionalEndPriceBuffer,\n\tforceUpToSlippage,\n\tbestBidPrice,\n\tbestAskPrice,\n\tensureCrossingEndPrice,\n}: {\n\tmarketType: MarketType;\n\tmarketIndex: number;\n\tdirection: PositionDirection;\n\tmaxLeverageSelected: boolean;\n\tmaxLeverageOrderSize: BN;\n\tbaseAmount: BN;\n\treduceOnly: boolean;\n\tallowInfSlippage: boolean;\n\toraclePrice: BN;\n\tbestPrice: BN;\n\tentryPrice: BN;\n\tworstPrice: BN;\n\tmarkPrice: BN;\n\tauctionDuration: number;\n\tauctionStartPriceOffset: number;\n\tauctionEndPriceOffset: number;\n\tauctionPriceCaps?: {\n\t\tmin: BN;\n\t\tmax: BN;\n\t};\n\tauctionStartPriceOffsetFrom: TradeOffsetPrice;\n\tauctionEndPriceOffsetFrom: TradeOffsetPrice;\n\tslippageTolerance: number;\n\tisOracleOrder?: boolean;\n\tadditionalEndPriceBuffer?: BN;\n\tforceUpToSlippage?: boolean;\n\tbestBidPrice?: BN;\n\tbestAskPrice?: BN;\n\tensureCrossingEndPrice?: boolean;\n}): OptionalOrderParams & { constrainedBySlippage?: boolean } => {\n\tconst priceObject = getPriceObject({\n\t\toraclePrice,\n\t\tmarkPrice,\n\t\tbestOffer: bestPrice,\n\t\tentryPrice,\n\t\tworstPrice,\n\t\tdirection,\n\t});\n\n\t// max slippage price\n\tlet limitPrice = getMarketOrderLimitPrice({\n\t\tdirection,\n\t\tbaselinePrice: priceObject[auctionStartPriceOffsetFrom],\n\t\tslippageTolerance: allowInfSlippage ? undefined : slippageTolerance,\n\t});\n\n\tif (additionalEndPriceBuffer) {\n\t\tlimitPrice = isVariant(direction, 'long')\n\t\t\t? limitPrice.add(additionalEndPriceBuffer)\n\t\t\t: limitPrice.sub(additionalEndPriceBuffer);\n\t}\n\n\tconst auctionParams = getMarketAuctionParams({\n\t\tdirection,\n\t\tstartPriceFromSettings: priceObject[auctionStartPriceOffsetFrom],\n\t\tendPriceFromSettings: priceObject[auctionEndPriceOffsetFrom],\n\t\tlimitPrice,\n\t\tduration: auctionDuration,\n\t\tauctionStartPriceOffset: auctionStartPriceOffset,\n\t\tauctionEndPriceOffset: auctionEndPriceOffset,\n\t\tadditionalEndPriceBuffer,\n\t\tforceUpToSlippage,\n\t\tbestBidPrice,\n\t\tbestAskPrice,\n\t\tensureCrossingEndPrice,\n\t});\n\n\tlet orderParams = getMarketOrderParams({\n\t\tmarketType,\n\t\tmarketIndex,\n\t\tdirection,\n\t\tbaseAssetAmount: maxLeverageSelected ? maxLeverageOrderSize : baseAmount,\n\t\treduceOnly,\n\t\tprice: allowInfSlippage ? undefined : limitPrice,\n\t\t...auctionParams,\n\t});\n\n\tif (isOracleOrder) {\n\t\t// wont work if oracle is zero\n\t\tif (!oraclePrice.eq(ZERO)) {\n\t\t\tconst oracleAuctionParams = deriveOracleAuctionParams({\n\t\t\t\tdirection: direction,\n\t\t\t\toraclePrice,\n\t\t\t\tauctionStartPrice: auctionParams.auctionStartPrice,\n\t\t\t\tauctionEndPrice: auctionParams.auctionEndPrice,\n\t\t\t\tlimitPrice: auctionParams.auctionEndPrice,\n\t\t\t\tauctionPriceCaps: auctionPriceCaps,\n\t\t\t});\n\n\t\t\torderParams = {\n\t\t\t\t...orderParams,\n\t\t\t\t...oracleAuctionParams,\n\t\t\t\tprice: undefined,\n\t\t\t\torderType: OrderType.ORACLE,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn orderParams;\n};\n\nconst getLimitAuctionParams = ({\n\tdirection,\n\tinputPrice,\n\tstartPriceFromSettings,\n\tduration,\n\tauctionStartPriceOffset,\n\toraclePriceBands,\n}: {\n\tdirection: PositionDirection;\n\tinputPrice: BigNum;\n\tstartPriceFromSettings: BN;\n\tduration: number;\n\tauctionStartPriceOffset: number;\n\toraclePriceBands?: [BN, BN];\n}): AuctionParams => {\n\tlet limitAuctionParams = EMPTY_AUCTION_PARAMS;\n\n\tconst auctionStartPriceBuffer = inputPrice.scale(\n\t\tMath.abs(auctionStartPriceOffset * 100),\n\t\t10000\n\t).val;\n\n\tif (\n\t\tisVariant(direction, 'long') &&\n\t\tstartPriceFromSettings &&\n\t\tstartPriceFromSettings.lt(inputPrice.val) &&\n\t\tstartPriceFromSettings.gt(ZERO)\n\t) {\n\t\tlimitAuctionParams = {\n\t\t\tauctionStartPrice: startPriceFromSettings.sub(auctionStartPriceBuffer),\n\t\t\tauctionEndPrice: inputPrice.val,\n\t\t\tauctionDuration: duration,\n\t\t};\n\t} else if (\n\t\tisVariant(direction, 'short') &&\n\t\tstartPriceFromSettings &&\n\t\tstartPriceFromSettings.gt(ZERO) &&\n\t\tstartPriceFromSettings.gt(inputPrice.val)\n\t) {\n\t\tlimitAuctionParams = {\n\t\t\tauctionStartPrice: startPriceFromSettings.add(auctionStartPriceBuffer),\n\t\t\tauctionEndPrice: inputPrice.val,\n\t\t\tauctionDuration: duration,\n\t\t};\n\t}\n\n\tif (oraclePriceBands && limitAuctionParams.auctionDuration) {\n\t\tconst [minPrice, maxPrice] = oraclePriceBands;\n\n\t\t// start and end price cant be outside of the oracle price bands\n\t\tlimitAuctionParams.auctionStartPrice = BN.max(\n\t\t\tBN.min(limitAuctionParams.auctionStartPrice, maxPrice),\n\t\t\tminPrice\n\t\t);\n\n\t\tlimitAuctionParams.auctionEndPrice = BN.max(\n\t\t\tBN.min(limitAuctionParams.auctionEndPrice, maxPrice),\n\t\t\tminPrice\n\t\t);\n\t}\n\n\treturn limitAuctionParams;\n};\n\nconst getPriceObject = ({\n\toraclePrice,\n\tbestOffer,\n\tentryPrice,\n\tworstPrice,\n\tmarkPrice,\n\tdirection,\n}: {\n\toraclePrice: BN;\n\tbestOffer: BN;\n\tentryPrice: BN;\n\tworstPrice: BN;\n\tmarkPrice: BN;\n\tdirection: PositionDirection;\n}) => {\n\tlet best: BN;\n\n\tconst nonZeroOptions = [oraclePrice, bestOffer, markPrice].filter(\n\t\t(price) => price !== undefined && price?.gt(ZERO)\n\t);\n\n\tif (nonZeroOptions.length === 0) {\n\t\t// console.error('Unable to create valid auction params');\n\t\treturn {\n\t\t\toracle: ZERO,\n\t\t\tbestOffer: ZERO,\n\t\t\tentry: ZERO,\n\t\t\tbest: ZERO,\n\t\t\tworst: ZERO,\n\t\t\tmark: ZERO,\n\t\t};\n\t}\n\n\tif (isVariant(direction, 'long')) {\n\t\tbest = nonZeroOptions.reduce((a, b) => (a.lt(b) ? a : b)); // lowest price\n\t} else {\n\t\tbest = nonZeroOptions.reduce((a, b) => (a.gt(b) ? a : b)); // highest price\n\t}\n\n\t// if zero values come through, fallback to nonzero value\n\treturn {\n\t\toracle: oraclePrice?.gt(ZERO) ? oraclePrice : best,\n\t\tbestOffer: bestOffer?.gt(ZERO) ? bestOffer : best,\n\t\tentry: entryPrice,\n\t\tbest,\n\t\tworst: worstPrice,\n\t\tmark: markPrice?.gt(ZERO) ? markPrice : best,\n\t};\n};\n\n/* LP Utils */\nconst getLpSharesAmountForQuote = (\n\tdriftClient: DriftClient,\n\tmarketIndex: number,\n\tquoteAmount: BN\n): BigNum => {\n\tconst tenMillionBigNum = BigNum.fromPrint('10000000', QUOTE_PRECISION_EXP);\n\n\tconst pricePerLpShare = BigNum.from(\n\t\tdriftClient.getQuoteValuePerLpShare(marketIndex),\n\t\tQUOTE_PRECISION_EXP\n\t);\n\n\treturn BigNum.from(quoteAmount, QUOTE_PRECISION_EXP)\n\t\t.scale(\n\t\t\ttenMillionBigNum.toNum(),\n\t\t\tpricePerLpShare.mul(tenMillionBigNum).toNum()\n\t\t)\n\t\t.shiftTo(AMM_RESERVE_PRECISION_EXP);\n};\n\nconst getQuoteValueForLpShares = (\n\tdriftClient: DriftClient,\n\tmarketIndex: number,\n\tsharesAmount: BN\n): BigNum => {\n\tconst pricePerLpShare = BigNum.from(\n\t\tdriftClient.getQuoteValuePerLpShare(marketIndex),\n\t\tQUOTE_PRECISION_EXP\n\t).shiftTo(AMM_RESERVE_PRECISION_EXP);\n\tconst lpSharesBigNum = BigNum.from(sharesAmount, AMM_RESERVE_PRECISION_EXP);\n\treturn lpSharesBigNum.mul(pricePerLpShare).shiftTo(QUOTE_PRECISION_EXP);\n};\n\nconst getTokenAddress = (\n\tmintAddress: PublicKey,\n\tuserPubKey: PublicKey\n): Promise<PublicKey> => {\n\treturn getAssociatedTokenAddress(mintAddress, userPubKey, true);\n};\n\nconst getBalanceFromTokenAccountResult = (account: {\n\tpubkey: PublicKey;\n\taccount: AccountInfo<ParsedAccountData>;\n}) => {\n\treturn account?.account.data?.parsed?.info?.tokenAmount?.uiAmount;\n};\n\nconst getTokenAccount = async (\n\tconnection: Connection,\n\tmintAddress: PublicKey,\n\tuserPubKey: PublicKey\n): Promise<{\n\ttokenAccount: {\n\t\tpubkey: PublicKey;\n\t\taccount: import('@solana/web3.js').AccountInfo<\n\t\t\timport('@solana/web3.js').ParsedAccountData\n\t\t>;\n\t};\n\ttokenAccountWarning: boolean;\n}> => {\n\tconst tokenAccounts = await connection.getParsedTokenAccountsByOwner(\n\t\tuserPubKey,\n\t\t{ mint: mintAddress }\n\t);\n\n\tconst associatedAddress = await getAssociatedTokenAddress(\n\t\tmintAddress,\n\t\tuserPubKey,\n\t\ttrue\n\t);\n\n\tconst targetAccount =\n\t\ttokenAccounts.value.filter((account) =>\n\t\t\taccount.pubkey.equals(associatedAddress)\n\t\t)[0] || tokenAccounts.value[0];\n\n\tconst anotherBalanceExists = tokenAccounts.value.find((account) => {\n\t\treturn (\n\t\t\t!!getBalanceFromTokenAccountResult(account) &&\n\t\t\t!account.pubkey.equals(targetAccount.pubkey)\n\t\t);\n\t});\n\n\tlet tokenAccountWarning = false;\n\n\tif (anotherBalanceExists) {\n\t\ttokenAccountWarning = true;\n\t}\n\n\treturn {\n\t\ttokenAccount: targetAccount,\n\t\ttokenAccountWarning,\n\t};\n};\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 userExists = async (\n\tdriftClient: DriftClient,\n\tuserId: number,\n\tauthority: PublicKey\n) => {\n\tlet userAccountExists = false;\n\n\ttry {\n\t\tconst user = driftClient.getUser(userId, authority);\n\t\tuserAccountExists = await user.exists();\n\t} catch (e) {\n\t\t// user account does not exist so we leave userAccountExists false\n\t}\n\n\treturn userAccountExists;\n};\n\nfunction chunks<T>(array: T[], size: number): T[][] {\n\treturn Array.apply(0, new Array(Math.ceil(array.length / size))).map(\n\t\t(_, index) => array.slice(index * size, (index + 1) * size)\n\t);\n}\n\n/**\n * Trim trailing zeros from a numerical string\n * @param str - numerical string to format\n * @param zerosToShow - max number of zeros to show after the decimal. Similar to number.toFixed() but won't trim non-zero values. Optional, default value is 1\n */\nconst trimTrailingZeros = (str: string, zerosToShow = 1) => {\n\t// Ignore strings with no decimal point\n\tif (!str.includes('.')) return str;\n\n\tconst sides = str.split('.');\n\n\tsides[1] = sides[1].replace(/0+$/, '');\n\n\tif (sides[1].length < zerosToShow) {\n\t\tconst zerosToAdd = zerosToShow - sides[1].length;\n\t\tsides[1] = `${sides[1]}${Array(zerosToAdd).fill('0').join('')}`;\n\t}\n\n\tif (sides[1].length === 0) {\n\t\treturn sides[0];\n\t} else {\n\t\treturn sides.join('.');\n\t}\n};\n\nconst formatTokenInputCurried =\n\t(setAmount: (amount: string) => void, spotMarketConfig: SpotMarketConfig) =>\n\t(newAmount: string) => {\n\t\tif (isNaN(+newAmount)) return;\n\n\t\tif (newAmount === '') {\n\t\t\tsetAmount('');\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastChar = newAmount[newAmount.length - 1];\n\n\t\t// if last char of string is a decimal point, don't format\n\t\tif (lastChar === '.') {\n\t\t\tsetAmount(newAmount);\n\t\t\treturn;\n\t\t}\n\n\t\tif (lastChar === '0') {\n\t\t\t// if last char of string is a zero in the decimal places, cut it off if it exceeds precision\n\t\t\tconst numOfDigitsAfterDecimal = newAmount.split('.')[1]?.length ?? 0;\n\t\t\tif (numOfDigitsAfterDecimal > spotMarketConfig.precisionExp.toNumber()) {\n\t\t\t\tsetAmount(newAmount.slice(0, -1));\n\t\t\t} else {\n\t\t\t\tsetAmount(newAmount);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst formattedAmount = Number(\n\t\t\t(+newAmount).toFixed(spotMarketConfig.precisionExp.toNumber())\n\t\t);\n\t\tsetAmount(formattedAmount.toString());\n\t};\n\n// --- Export The Utils\n\nexport const COMMON_UI_UTILS = {\n\tabbreviateAddress,\n\tcalculateAverageEntryPrice,\n\tchunks,\n\tcompareSignatures,\n\tcreatePlaceholderIWallet,\n\tderiveMarketOrderParams,\n\tfetchCurrentSubaccounts,\n\tfetchUserClientsAndAccounts,\n\tformatTokenInputCurried,\n\tgetBalanceFromTokenAccountResult,\n\tgetIdAndAuthorityFromKey,\n\tgetLimitAuctionParams,\n\tgetLpSharesAmountForQuote,\n\tgetMarketAuctionParams,\n\tgetMarketKey,\n\tgetMarketOrderLimitPrice,\n\tgetMultipleAccounts,\n\tgetMultipleAccountsCore,\n\tgetPriceObject,\n\tgetQuoteValueForLpShares,\n\tgetSignatureVerificationMessageForSettings,\n\tgetTokenAccount,\n\tgetTokenAddress,\n\tgetUserKey,\n\thashSignature,\n\tinitializeAndSubscribeToNewUserAccount,\n\tuserExists,\n\tverifySignature,\n\ttrimTrailingZeros,\n\t...USER_UTILS,\n\t...TRADING_UTILS,\n\t...MARKET_UTILS,\n\t...ORDER_COMMON_UTILS,\n};\n"]}
@@ -1,6 +0,0 @@
1
- export * from './commonUiUtils';
2
- export * from './market';
3
- export * from './order';
4
- export * from './trading';
5
- export * from './user';
6
- export * from './settings/settings';
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common-ui-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,yCAAuB;AACvB,sDAAoC","sourcesContent":["export * from './commonUiUtils';\nexport * from './market';\nexport * from './order';\nexport * from './trading';\nexport * from './user';\nexport * from './settings/settings';\n"]}
@@ -1,134 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MARKET_UTILS = void 0;
4
- const sdk_1 = require("@drift-labs/sdk");
5
- const utils_1 = require("../utils");
6
- const markets_1 = require("../constants/markets");
7
- const getBaseAssetSymbol = (marketName, removePrefix = false) => {
8
- let baseAssetSymbol = marketName.replace('-PERP', '').replace('/USDC', '');
9
- if (removePrefix) {
10
- baseAssetSymbol = baseAssetSymbol.replace('1K', '').replace('1M', '');
11
- }
12
- return baseAssetSymbol;
13
- };
14
- const PerpOperationsMap = {
15
- UPDATE_FUNDING: 'Funding',
16
- AMM_FILL: 'AMM Fills',
17
- FILL: 'Fills',
18
- SETTLE_PNL: 'Settle P&L',
19
- SETTLE_PNL_WITH_POSITION: 'Settle P&L With Open Position',
20
- };
21
- const SpotOperationsMap = {
22
- UPDATE_CUMULATIVE_INTEREST: 'Update Cumulative Interest',
23
- FILL: 'Fills',
24
- WITHDRAW: 'Withdrawals',
25
- };
26
- const InsuranceFundOperationsMap = {
27
- INIT: 'Initialize IF',
28
- ADD: 'Deposit To IF',
29
- REQUEST_REMOVE: 'Request Withdrawal From IF',
30
- REMOVE: 'Withdraw From IF',
31
- };
32
- const getPausedOperations = (marketAccount) => {
33
- if (!marketAccount)
34
- return [];
35
- const pausedOperations = [];
36
- //@ts-ignore
37
- const isPerp = !!marketAccount.amm;
38
- // check perp operations
39
- if (isPerp) {
40
- Object.keys(sdk_1.PerpOperation)
41
- .filter((operation) => (0, sdk_1.isOperationPaused)(marketAccount.pausedOperations, sdk_1.PerpOperation[operation]))
42
- .forEach((pausedOperation) => {
43
- pausedOperations.push(PerpOperationsMap[pausedOperation]);
44
- });
45
- }
46
- else {
47
- // check spot operations
48
- Object.keys(sdk_1.SpotOperation)
49
- .filter((operation) => (0, sdk_1.isOperationPaused)(marketAccount.pausedOperations, sdk_1.SpotOperation[operation]))
50
- .forEach((pausedOperation) => {
51
- pausedOperations.push(SpotOperationsMap[pausedOperation]);
52
- });
53
- // check IF operations
54
- Object.keys(sdk_1.InsuranceFundOperation)
55
- .filter((operation) => (0, sdk_1.isOperationPaused)(
56
- //@ts-ignore
57
- marketAccount.ifPausedOperations, sdk_1.InsuranceFundOperation[operation]))
58
- .forEach((pausedOperation) => {
59
- pausedOperations.push(InsuranceFundOperationsMap[pausedOperation]);
60
- });
61
- }
62
- return pausedOperations;
63
- };
64
- function getMarketConfig(driftEnv, marketType, marketIndex) {
65
- const isPerp = utils_1.ENUM_UTILS.match(marketType, sdk_1.MarketType.PERP);
66
- if (isPerp) {
67
- return sdk_1.PerpMarkets[driftEnv][marketIndex];
68
- }
69
- else {
70
- return sdk_1.SpotMarkets[driftEnv][marketIndex];
71
- }
72
- }
73
- const getMaxLeverageForMarketAccount = (marketType, marketAccount) => {
74
- const isPerp = utils_1.ENUM_UTILS.match(marketType, sdk_1.MarketType.PERP);
75
- try {
76
- if (isPerp) {
77
- const perpMarketAccount = marketAccount;
78
- const maxLeverage = parseFloat((1 /
79
- (((perpMarketAccount === null || perpMarketAccount === void 0 ? void 0 : perpMarketAccount.marginRatioInitial)
80
- ? perpMarketAccount.marginRatioInitial
81
- : 10000 / markets_1.DEFAULT_MAX_MARKET_LEVERAGE) /
82
- 10000)).toFixed(2));
83
- const marketHasHighLeverageMode = !!(perpMarketAccount === null || perpMarketAccount === void 0 ? void 0 : perpMarketAccount.highLeverageMarginRatioInitial);
84
- const highLeverageMaxLeverage = marketHasHighLeverageMode
85
- ? parseFloat((1 /
86
- (((perpMarketAccount === null || perpMarketAccount === void 0 ? void 0 : perpMarketAccount.highLeverageMarginRatioInitial)
87
- ? perpMarketAccount === null || perpMarketAccount === void 0 ? void 0 : perpMarketAccount.highLeverageMarginRatioInitial
88
- : 10000 / markets_1.DEFAULT_MAX_MARKET_LEVERAGE) /
89
- 10000)).toFixed(1))
90
- : 0;
91
- return {
92
- maxLeverage,
93
- highLeverageMaxLeverage,
94
- hasHighLeverage: marketHasHighLeverageMode,
95
- };
96
- }
97
- else {
98
- const spotMarketAccount = marketAccount;
99
- const liabilityWeight = spotMarketAccount
100
- ? spotMarketAccount.initialLiabilityWeight / 10000
101
- : 0;
102
- return {
103
- maxLeverage: parseFloat((1 / (liabilityWeight - 1)).toFixed(2)),
104
- highLeverageMaxLeverage: 0,
105
- hasHighLeverage: false,
106
- };
107
- }
108
- }
109
- catch (e) {
110
- console.error(e);
111
- return {
112
- maxLeverage: 0,
113
- highLeverageMaxLeverage: 0,
114
- hasHighLeverage: false,
115
- };
116
- }
117
- };
118
- const getMaxLeverageForMarket = (marketType, marketIndex, driftClient) => {
119
- const marketAccount = utils_1.ENUM_UTILS.match(marketType, sdk_1.MarketType.PERP)
120
- ? driftClient.getPerpMarketAccount(marketIndex)
121
- : driftClient.getSpotMarketAccount(marketIndex);
122
- return getMaxLeverageForMarketAccount(marketType, marketAccount);
123
- };
124
- exports.MARKET_UTILS = {
125
- getBaseAssetSymbol,
126
- getPausedOperations,
127
- PerpOperationsMap,
128
- SpotOperationsMap,
129
- InsuranceFundOperationsMap,
130
- getMarketConfig,
131
- getMaxLeverageForMarket,
132
- getMaxLeverageForMarketAccount,
133
- };
134
- //# sourceMappingURL=market.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/common-ui-utils/market.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tPerpMarketAccount,\n\tPerpOperation,\n\tSpotMarketAccount,\n\tSpotOperation,\n\tisOperationPaused,\n\tInsuranceFundOperation,\n\tMarketType,\n\tSpotMarketConfig,\n\tDriftEnv,\n\tPerpMarketConfig,\n\tPerpMarkets,\n\tSpotMarkets,\n\tDriftClient,\n} from '@drift-labs/sdk';\nimport { ENUM_UTILS } from '../utils';\nimport { DEFAULT_MAX_MARKET_LEVERAGE } from '../constants/markets';\n\nconst getBaseAssetSymbol = (marketName: string, removePrefix = false) => {\n\tlet baseAssetSymbol = marketName.replace('-PERP', '').replace('/USDC', '');\n\n\tif (removePrefix) {\n\t\tbaseAssetSymbol = baseAssetSymbol.replace('1K', '').replace('1M', '');\n\t}\n\n\treturn baseAssetSymbol;\n};\n\nconst PerpOperationsMap = {\n\tUPDATE_FUNDING: 'Funding',\n\tAMM_FILL: 'AMM Fills',\n\tFILL: 'Fills',\n\tSETTLE_PNL: 'Settle P&L',\n\tSETTLE_PNL_WITH_POSITION: 'Settle P&L With Open Position',\n};\n\nconst SpotOperationsMap = {\n\tUPDATE_CUMULATIVE_INTEREST: 'Update Cumulative Interest',\n\tFILL: 'Fills',\n\tWITHDRAW: 'Withdrawals',\n};\n\nconst InsuranceFundOperationsMap = {\n\tINIT: 'Initialize IF',\n\tADD: 'Deposit To IF',\n\tREQUEST_REMOVE: 'Request Withdrawal From IF',\n\tREMOVE: 'Withdraw From IF',\n};\n\nconst getPausedOperations = (\n\tmarketAccount: PerpMarketAccount | SpotMarketAccount\n): string[] => {\n\tif (!marketAccount) return [];\n\n\tconst pausedOperations = [];\n\t//@ts-ignore\n\tconst isPerp = !!marketAccount.amm;\n\n\t// check perp operations\n\tif (isPerp) {\n\t\tObject.keys(PerpOperation)\n\t\t\t.filter((operation) =>\n\t\t\t\tisOperationPaused(\n\t\t\t\t\tmarketAccount.pausedOperations,\n\t\t\t\t\tPerpOperation[operation]\n\t\t\t\t)\n\t\t\t)\n\t\t\t.forEach((pausedOperation) => {\n\t\t\t\tpausedOperations.push(PerpOperationsMap[pausedOperation]);\n\t\t\t});\n\t} else {\n\t\t// check spot operations\n\t\tObject.keys(SpotOperation)\n\t\t\t.filter((operation) =>\n\t\t\t\tisOperationPaused(\n\t\t\t\t\tmarketAccount.pausedOperations,\n\t\t\t\t\tSpotOperation[operation]\n\t\t\t\t)\n\t\t\t)\n\t\t\t.forEach((pausedOperation) => {\n\t\t\t\tpausedOperations.push(SpotOperationsMap[pausedOperation]);\n\t\t\t});\n\n\t\t// check IF operations\n\t\tObject.keys(InsuranceFundOperation)\n\t\t\t.filter((operation) =>\n\t\t\t\tisOperationPaused(\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmarketAccount.ifPausedOperations,\n\t\t\t\t\tInsuranceFundOperation[operation]\n\t\t\t\t)\n\t\t\t)\n\t\t\t.forEach((pausedOperation) => {\n\t\t\t\tpausedOperations.push(InsuranceFundOperationsMap[pausedOperation]);\n\t\t\t});\n\t}\n\n\treturn pausedOperations;\n};\n\nfunction getMarketConfig(\n\tdriftEnv: DriftEnv,\n\tmarketType: typeof MarketType.PERP,\n\tmarketIndex: number\n): PerpMarketConfig;\nfunction getMarketConfig(\n\tdriftEnv: DriftEnv,\n\tmarketType: typeof MarketType.SPOT,\n\tmarketIndex: number\n): SpotMarketConfig;\nfunction getMarketConfig(\n\tdriftEnv: DriftEnv,\n\tmarketType: MarketType,\n\tmarketIndex: number\n): PerpMarketConfig | SpotMarketConfig {\n\tconst isPerp = ENUM_UTILS.match(marketType, MarketType.PERP);\n\n\tif (isPerp) {\n\t\treturn PerpMarkets[driftEnv][marketIndex];\n\t} else {\n\t\treturn SpotMarkets[driftEnv][marketIndex];\n\t}\n}\n\nconst getMaxLeverageForMarketAccount = (\n\tmarketType: MarketType,\n\tmarketAccount: PerpMarketAccount | SpotMarketAccount\n): {\n\tmaxLeverage: number;\n\thighLeverageMaxLeverage: number;\n\thasHighLeverage: boolean;\n} => {\n\tconst isPerp = ENUM_UTILS.match(marketType, MarketType.PERP);\n\n\ttry {\n\t\tif (isPerp) {\n\t\t\tconst perpMarketAccount = marketAccount as PerpMarketAccount;\n\n\t\t\tconst maxLeverage = parseFloat(\n\t\t\t\t(\n\t\t\t\t\t1 /\n\t\t\t\t\t((perpMarketAccount?.marginRatioInitial\n\t\t\t\t\t\t? perpMarketAccount.marginRatioInitial\n\t\t\t\t\t\t: 10000 / DEFAULT_MAX_MARKET_LEVERAGE) /\n\t\t\t\t\t\t10000)\n\t\t\t\t).toFixed(2)\n\t\t\t);\n\n\t\t\tconst marketHasHighLeverageMode =\n\t\t\t\t!!perpMarketAccount?.highLeverageMarginRatioInitial;\n\n\t\t\tconst highLeverageMaxLeverage = marketHasHighLeverageMode\n\t\t\t\t? parseFloat(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t1 /\n\t\t\t\t\t\t\t((perpMarketAccount?.highLeverageMarginRatioInitial\n\t\t\t\t\t\t\t\t? perpMarketAccount?.highLeverageMarginRatioInitial\n\t\t\t\t\t\t\t\t: 10000 / DEFAULT_MAX_MARKET_LEVERAGE) /\n\t\t\t\t\t\t\t\t10000)\n\t\t\t\t\t\t).toFixed(1)\n\t\t\t\t )\n\t\t\t\t: 0;\n\n\t\t\treturn {\n\t\t\t\tmaxLeverage,\n\t\t\t\thighLeverageMaxLeverage,\n\t\t\t\thasHighLeverage: marketHasHighLeverageMode,\n\t\t\t};\n\t\t} else {\n\t\t\tconst spotMarketAccount = marketAccount as SpotMarketAccount;\n\n\t\t\tconst liabilityWeight = spotMarketAccount\n\t\t\t\t? spotMarketAccount.initialLiabilityWeight / 10000\n\t\t\t\t: 0;\n\n\t\t\treturn {\n\t\t\t\tmaxLeverage: parseFloat((1 / (liabilityWeight - 1)).toFixed(2)),\n\t\t\t\thighLeverageMaxLeverage: 0,\n\t\t\t\thasHighLeverage: false,\n\t\t\t};\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn {\n\t\t\tmaxLeverage: 0,\n\t\t\thighLeverageMaxLeverage: 0,\n\t\t\thasHighLeverage: false,\n\t\t};\n\t}\n};\n\nconst getMaxLeverageForMarket = (\n\tmarketType: MarketType,\n\tmarketIndex: number,\n\tdriftClient: DriftClient\n): {\n\tmaxLeverage: number;\n\thighLeverageMaxLeverage: number;\n\thasHighLeverage: boolean;\n} => {\n\tconst marketAccount = ENUM_UTILS.match(marketType, MarketType.PERP)\n\t\t? driftClient.getPerpMarketAccount(marketIndex)\n\t\t: driftClient.getSpotMarketAccount(marketIndex);\n\n\treturn getMaxLeverageForMarketAccount(marketType, marketAccount);\n};\n\nexport const MARKET_UTILS = {\n\tgetBaseAssetSymbol,\n\tgetPausedOperations,\n\tPerpOperationsMap,\n\tSpotOperationsMap,\n\tInsuranceFundOperationsMap,\n\tgetMarketConfig,\n\tgetMaxLeverageForMarket,\n\tgetMaxLeverageForMarketAccount,\n};\n"]}
@@ -1,25 +0,0 @@
1
- import { OrderType, OrderTriggerCondition, PositionDirection, BigNum, ContractTier, BN, DriftClient, User } from '@drift-labs/sdk';
2
- import { UISerializableOrder } from '../serializableTypes';
3
- import { AuctionParams } from '../types';
4
- declare function isAuctionEmpty(auctionParams: AuctionParams): boolean;
5
- declare function getPerpAuctionDuration(priceDiff: BN, price: BN, contractTier: ContractTier): number;
6
- export type HighLeverageOptions = {
7
- numOfOpenHighLeverageSpots?: number;
8
- enterHighLeverageModeBufferPct?: number;
9
- };
10
- /**
11
- * Mainly checks if the user will be entering high leverage mode through this order.
12
- */
13
- declare function getPerpOrderParamsBitFlags(marketIndex: number, driftClient: DriftClient, userAccount: User, attemptedLeverage: number, highLeverageOptions?: {
14
- numOfOpenHighLeverageSpots?: number;
15
- }): number | undefined;
16
- export declare const ORDER_COMMON_UTILS: {
17
- getOrderLabelFromOrderDetails: (orderDetails: Pick<UISerializableOrder, 'orderType' | 'oraclePriceOffset' | 'direction' | 'triggerCondition' | 'existingPositionDirection'>) => string;
18
- getLimitPriceFromOracleOffset: (order: UISerializableOrder, oraclePrice: BigNum) => BigNum;
19
- isAuctionEmpty: typeof isAuctionEmpty;
20
- getUIOrderTypeFromSdkOrderType: (orderType: OrderType, triggerCondition: OrderTriggerCondition, direction: PositionDirection, oracleOffset: BigNum | undefined) => import("../types").UIOrderTypeValue;
21
- getPerpAuctionDuration: typeof getPerpAuctionDuration;
22
- getPerpOrderParamsBitFlags: typeof getPerpOrderParamsBitFlags;
23
- isOrderTriggered: (order: Pick<UISerializableOrder, 'orderType' | 'triggerCondition' | 'status'>) => boolean;
24
- };
25
- export {};
@@ -1,191 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ORDER_COMMON_UTILS = void 0;
4
- const sdk_1 = require("@drift-labs/sdk");
5
- const orders_1 = require("../constants/orders");
6
- const utils_1 = require("../utils");
7
- const trade_1 = require("../constants/trade");
8
- const market_1 = require("./market");
9
- const getOrderLabelFromOrderDetails = (orderDetails) => {
10
- var _a;
11
- if ((0, utils_1.matchEnum)(orderDetails.orderType, sdk_1.OrderType.MARKET))
12
- return orders_1.UI_ORDER_TYPES.market.label;
13
- if ((0, utils_1.matchEnum)(orderDetails.orderType, sdk_1.OrderType.LIMIT))
14
- return `${orderDetails.oraclePriceOffset &&
15
- !((_a = orderDetails.oraclePriceOffset) === null || _a === void 0 ? void 0 : _a.eqZero())
16
- ? 'Oracle '
17
- : ''}${orders_1.UI_ORDER_TYPES.limit.label}`;
18
- if ((0, utils_1.matchEnum)(orderDetails.orderType, sdk_1.OrderType.ORACLE))
19
- return orders_1.UI_ORDER_TYPES.oracle.label;
20
- if ((0, utils_1.matchEnum)(orderDetails.orderType, sdk_1.OrderType.TRIGGER_MARKET)) {
21
- const isTriggered = (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE) ||
22
- (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_BELOW);
23
- if (isTriggered) {
24
- return 'Market (Triggered)';
25
- }
26
- const isTriggerAbove = (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.ABOVE);
27
- const isOrderDirectionShort = (0, utils_1.matchEnum)(orderDetails.direction, sdk_1.PositionDirection.SHORT);
28
- if (isTriggerAbove) {
29
- return isOrderDirectionShort
30
- ? orders_1.UI_ORDER_TYPES.takeProfitMarket.label
31
- : orders_1.UI_ORDER_TYPES.stopMarket.label;
32
- }
33
- else {
34
- return isOrderDirectionShort
35
- ? orders_1.UI_ORDER_TYPES.stopMarket.label
36
- : orders_1.UI_ORDER_TYPES.takeProfitMarket.label;
37
- }
38
- }
39
- if ((0, utils_1.matchEnum)(orderDetails.orderType, sdk_1.OrderType.TRIGGER_LIMIT)) {
40
- const isTriggered = (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE) ||
41
- (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_BELOW);
42
- const isTriggerAbove = (0, utils_1.matchEnum)(orderDetails.triggerCondition, sdk_1.OrderTriggerCondition.ABOVE);
43
- const isOrderDirectionShort = (0, utils_1.matchEnum)(orderDetails.direction, sdk_1.PositionDirection.SHORT);
44
- if (isTriggered) {
45
- return 'Limit (Triggered)';
46
- }
47
- if (isTriggerAbove) {
48
- return isOrderDirectionShort
49
- ? orders_1.UI_ORDER_TYPES.takeProfitLimit.label
50
- : orders_1.UI_ORDER_TYPES.stopLimit.label;
51
- }
52
- else {
53
- return isOrderDirectionShort
54
- ? orders_1.UI_ORDER_TYPES.stopLimit.label
55
- : orders_1.UI_ORDER_TYPES.takeProfitLimit.label;
56
- }
57
- }
58
- return '-';
59
- };
60
- const getLimitPriceFromOracleOffset = (order, oraclePrice) => {
61
- if ((order.price && !order.price.eqZero()) ||
62
- !order.oraclePriceOffset ||
63
- order.oraclePriceOffset.eqZero() ||
64
- !oraclePrice ||
65
- (oraclePrice === null || oraclePrice === void 0 ? void 0 : oraclePrice.eqZero())) {
66
- return order.price;
67
- }
68
- return oraclePrice.add(order.oraclePriceOffset);
69
- };
70
- function isAuctionEmpty(auctionParams) {
71
- return (auctionParams.auctionStartPrice ===
72
- trade_1.EMPTY_AUCTION_PARAMS.auctionStartPrice &&
73
- auctionParams.auctionEndPrice === trade_1.EMPTY_AUCTION_PARAMS.auctionEndPrice &&
74
- auctionParams.auctionDuration === trade_1.EMPTY_AUCTION_PARAMS.auctionDuration);
75
- }
76
- const getUIOrderTypeFromSdkOrderType = (orderType, triggerCondition, direction, oracleOffset) => {
77
- const isLong = utils_1.ENUM_UTILS.match(direction, sdk_1.PositionDirection.LONG);
78
- const triggerAbove = (0, utils_1.matchEnum)(triggerCondition, sdk_1.OrderTriggerCondition.ABOVE) ||
79
- (0, utils_1.matchEnum)(triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE);
80
- const triggerBelow = (0, utils_1.matchEnum)(triggerCondition, sdk_1.OrderTriggerCondition.BELOW) ||
81
- (0, utils_1.matchEnum)(triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_BELOW);
82
- // Buy side + trigger below: take profit for a short position
83
- // Buy side + trigger above: stop loss for a short position
84
- // Sell side + trigger above: take profit for a long position
85
- // Sell side + trigger below: stop loss for a long position
86
- if ((0, utils_1.matchEnum)(orderType, sdk_1.OrderType.MARKET)) {
87
- return orders_1.MARKET_ORDER_TYPE_CONFIG;
88
- }
89
- else if ((0, utils_1.matchEnum)(orderType, sdk_1.OrderType.LIMIT)) {
90
- if (oracleOffset && !oracleOffset.eq(sdk_1.ZERO)) {
91
- return orders_1.ORACLE_LIMIT_ORDER_TYPE_CONFIG;
92
- }
93
- else {
94
- return orders_1.LIMIT_ORDER_TYPE_CONFIG;
95
- }
96
- }
97
- else if ((0, utils_1.matchEnum)(orderType, sdk_1.OrderType.TRIGGER_MARKET)) {
98
- if (isLong) {
99
- if (triggerAbove) {
100
- return orders_1.STOP_MARKET_ORDER_TYPE_CONFIG;
101
- }
102
- else if (triggerBelow) {
103
- return orders_1.TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;
104
- }
105
- }
106
- else {
107
- if (triggerAbove) {
108
- return orders_1.TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;
109
- }
110
- else if (triggerBelow) {
111
- return orders_1.STOP_MARKET_ORDER_TYPE_CONFIG;
112
- }
113
- }
114
- }
115
- else if ((0, utils_1.matchEnum)(orderType, sdk_1.OrderType.TRIGGER_LIMIT)) {
116
- if (isLong) {
117
- if (triggerAbove) {
118
- return orders_1.STOP_LIMIT_ORDER_TYPE_CONFIG;
119
- }
120
- else if (triggerBelow) {
121
- return orders_1.TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;
122
- }
123
- }
124
- else {
125
- if (triggerAbove) {
126
- return orders_1.TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;
127
- }
128
- else if (triggerBelow) {
129
- return orders_1.STOP_LIMIT_ORDER_TYPE_CONFIG;
130
- }
131
- }
132
- }
133
- else if ((0, utils_1.matchEnum)(orderType, sdk_1.OrderType.ORACLE)) {
134
- return orders_1.ORACLE_MARKET_ORDER_TYPE_CONFIG;
135
- }
136
- throw new Error('Invalid order type');
137
- };
138
- function getPerpAuctionDuration(priceDiff, price, contractTier) {
139
- const percentDiff = priceDiff.mul(sdk_1.PERCENTAGE_PRECISION).div(price);
140
- const slotsPerBp = (0, sdk_1.isOneOfVariant)(contractTier, ['a', 'b'])
141
- ? new sdk_1.BN(100)
142
- : new sdk_1.BN(60);
143
- const rawSlots = percentDiff
144
- .mul(slotsPerBp)
145
- .div(sdk_1.PERCENTAGE_PRECISION.divn(100));
146
- const clamped = sdk_1.BN.min(sdk_1.BN.max(rawSlots, new sdk_1.BN(5)), new sdk_1.BN(180));
147
- return clamped.toNumber();
148
- }
149
- /**
150
- * Mainly checks if the user will be entering high leverage mode through this order.
151
- */
152
- function getPerpOrderParamsBitFlags(marketIndex, driftClient, userAccount, attemptedLeverage, highLeverageOptions) {
153
- if (attemptedLeverage < 5) {
154
- // there is no high leverage mode leverage that is higher than 4
155
- return undefined;
156
- }
157
- const { numOfOpenHighLeverageSpots = Number.MAX_SAFE_INTEGER } = highLeverageOptions || {};
158
- if (numOfOpenHighLeverageSpots <= 0) {
159
- return undefined;
160
- }
161
- const { hasHighLeverage: isMarketAHighLeverageMarket, maxLeverage: regularMaxLeverage, } = market_1.MARKET_UTILS.getMaxLeverageForMarket(sdk_1.MarketType.PERP, marketIndex, driftClient);
162
- if (!isMarketAHighLeverageMarket) {
163
- return undefined;
164
- }
165
- // Check if user is already in high leverage mode
166
- if (userAccount.isHighLeverageMode('Initial')) {
167
- return undefined;
168
- }
169
- if (attemptedLeverage > regularMaxLeverage) {
170
- return sdk_1.OrderParamsBitFlag.UpdateHighLeverageMode;
171
- }
172
- return undefined;
173
- }
174
- const isOrderTriggered = (order) => {
175
- const isTriggerOrderType = utils_1.ENUM_UTILS.match(order.orderType, sdk_1.OrderType.TRIGGER_MARKET) ||
176
- utils_1.ENUM_UTILS.match(order.orderType, sdk_1.OrderType.TRIGGER_LIMIT);
177
- const orderWasCancelled = utils_1.ENUM_UTILS.match(order.status, sdk_1.OrderStatus.CANCELED);
178
- const orderWasTriggered = utils_1.ENUM_UTILS.match(order.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE) ||
179
- utils_1.ENUM_UTILS.match(order.triggerCondition, sdk_1.OrderTriggerCondition.TRIGGERED_BELOW);
180
- return isTriggerOrderType && orderWasTriggered && !orderWasCancelled;
181
- };
182
- exports.ORDER_COMMON_UTILS = {
183
- getOrderLabelFromOrderDetails,
184
- getLimitPriceFromOracleOffset,
185
- isAuctionEmpty,
186
- getUIOrderTypeFromSdkOrderType,
187
- getPerpAuctionDuration,
188
- getPerpOrderParamsBitFlags,
189
- isOrderTriggered,
190
- };
191
- //# sourceMappingURL=order.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/common-ui-utils/order.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tOrderType,\n\tOrderTriggerCondition,\n\tOrderStatus,\n\tPositionDirection,\n\tBigNum,\n\tZERO,\n\tContractTier,\n\tBN,\n\tPERCENTAGE_PRECISION,\n\tisOneOfVariant,\n\tMarketType,\n\tDriftClient,\n\tUser,\n\tOrderParamsBitFlag,\n} from '@drift-labs/sdk';\nimport {\n\tLIMIT_ORDER_TYPE_CONFIG,\n\tMARKET_ORDER_TYPE_CONFIG,\n\tORACLE_LIMIT_ORDER_TYPE_CONFIG,\n\tORACLE_MARKET_ORDER_TYPE_CONFIG,\n\tSTOP_LIMIT_ORDER_TYPE_CONFIG,\n\tSTOP_MARKET_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG,\n\tTAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG,\n\tUI_ORDER_TYPES,\n} from '../constants/orders';\nimport { UISerializableOrder } from '../serializableTypes';\nimport { ENUM_UTILS, matchEnum } from '../utils';\nimport { AuctionParams } from '../types';\nimport { EMPTY_AUCTION_PARAMS } from '../constants/trade';\nimport { MARKET_UTILS } from './market';\n\nconst getOrderLabelFromOrderDetails = (\n\torderDetails: Pick<\n\t\tUISerializableOrder,\n\t\t| 'orderType'\n\t\t| 'oraclePriceOffset'\n\t\t| 'direction'\n\t\t| 'triggerCondition'\n\t\t| 'existingPositionDirection'\n\t>\n) => {\n\tif (matchEnum(orderDetails.orderType, OrderType.MARKET))\n\t\treturn UI_ORDER_TYPES.market.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.LIMIT))\n\t\treturn `${\n\t\t\torderDetails.oraclePriceOffset &&\n\t\t\t!orderDetails.oraclePriceOffset?.eqZero()\n\t\t\t\t? 'Oracle '\n\t\t\t\t: ''\n\t\t}${UI_ORDER_TYPES.limit.label}`;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.ORACLE))\n\t\treturn UI_ORDER_TYPES.oracle.label;\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_MARKET)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\t\tif (isTriggered) {\n\t\t\treturn 'Market (Triggered)';\n\t\t}\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitMarket.label\n\t\t\t\t: UI_ORDER_TYPES.stopMarket.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopMarket.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitMarket.label;\n\t\t}\n\t}\n\n\tif (matchEnum(orderDetails.orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tconst isTriggered =\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t\t) ||\n\t\t\tmatchEnum(\n\t\t\t\torderDetails.triggerCondition,\n\t\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t\t);\n\n\t\tconst isTriggerAbove = matchEnum(\n\t\t\torderDetails.triggerCondition,\n\t\t\tOrderTriggerCondition.ABOVE\n\t\t);\n\t\tconst isOrderDirectionShort = matchEnum(\n\t\t\torderDetails.direction,\n\t\t\tPositionDirection.SHORT\n\t\t);\n\n\t\tif (isTriggered) {\n\t\t\treturn 'Limit (Triggered)';\n\t\t}\n\n\t\tif (isTriggerAbove) {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.takeProfitLimit.label\n\t\t\t\t: UI_ORDER_TYPES.stopLimit.label;\n\t\t} else {\n\t\t\treturn isOrderDirectionShort\n\t\t\t\t? UI_ORDER_TYPES.stopLimit.label\n\t\t\t\t: UI_ORDER_TYPES.takeProfitLimit.label;\n\t\t}\n\t}\n\n\treturn '-';\n};\n\nconst getLimitPriceFromOracleOffset = (\n\torder: UISerializableOrder,\n\toraclePrice: BigNum\n): BigNum => {\n\tif (\n\t\t(order.price && !order.price.eqZero()) ||\n\t\t!order.oraclePriceOffset ||\n\t\torder.oraclePriceOffset.eqZero() ||\n\t\t!oraclePrice ||\n\t\toraclePrice?.eqZero()\n\t) {\n\t\treturn order.price;\n\t}\n\treturn oraclePrice.add(order.oraclePriceOffset);\n};\n\nfunction isAuctionEmpty(auctionParams: AuctionParams) {\n\treturn (\n\t\tauctionParams.auctionStartPrice ===\n\t\t\tEMPTY_AUCTION_PARAMS.auctionStartPrice &&\n\t\tauctionParams.auctionEndPrice === EMPTY_AUCTION_PARAMS.auctionEndPrice &&\n\t\tauctionParams.auctionDuration === EMPTY_AUCTION_PARAMS.auctionDuration\n\t);\n}\n\nconst getUIOrderTypeFromSdkOrderType = (\n\torderType: OrderType,\n\ttriggerCondition: OrderTriggerCondition,\n\tdirection: PositionDirection,\n\toracleOffset: BigNum | undefined\n) => {\n\tconst isLong = ENUM_UTILS.match(direction, PositionDirection.LONG);\n\tconst triggerAbove =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.ABOVE) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_ABOVE);\n\n\tconst triggerBelow =\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.BELOW) ||\n\t\tmatchEnum(triggerCondition, OrderTriggerCondition.TRIGGERED_BELOW);\n\n\t// Buy side + trigger below: take profit for a short position\n\t// Buy side + trigger above: stop loss for a short position\n\t// Sell side + trigger above: take profit for a long position\n\t// Sell side + trigger below: stop loss for a long position\n\n\tif (matchEnum(orderType, OrderType.MARKET)) {\n\t\treturn MARKET_ORDER_TYPE_CONFIG;\n\t} else if (matchEnum(orderType, OrderType.LIMIT)) {\n\t\tif (oracleOffset && !oracleOffset.eq(ZERO)) {\n\t\t\treturn ORACLE_LIMIT_ORDER_TYPE_CONFIG;\n\t\t} else {\n\t\t\treturn LIMIT_ORDER_TYPE_CONFIG;\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_MARKET)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_MARKET_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.TRIGGER_LIMIT)) {\n\t\tif (isLong) {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t} else {\n\t\t\tif (triggerAbove) {\n\t\t\t\treturn TAKE_PROFIT_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t} else if (triggerBelow) {\n\t\t\t\treturn STOP_LIMIT_ORDER_TYPE_CONFIG;\n\t\t\t}\n\t\t}\n\t} else if (matchEnum(orderType, OrderType.ORACLE)) {\n\t\treturn ORACLE_MARKET_ORDER_TYPE_CONFIG;\n\t}\n\tthrow new Error('Invalid order type');\n};\n\nfunction getPerpAuctionDuration(\n\tpriceDiff: BN,\n\tprice: BN,\n\tcontractTier: ContractTier\n): number {\n\tconst percentDiff = priceDiff.mul(PERCENTAGE_PRECISION).div(price);\n\n\tconst slotsPerBp = isOneOfVariant(contractTier, ['a', 'b'])\n\t\t? new BN(100)\n\t\t: new BN(60);\n\n\tconst rawSlots = percentDiff\n\t\t.mul(slotsPerBp)\n\t\t.div(PERCENTAGE_PRECISION.divn(100));\n\n\tconst clamped = BN.min(BN.max(rawSlots, new BN(5)), new BN(180));\n\n\treturn clamped.toNumber();\n}\n\nexport type HighLeverageOptions = {\n\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\tenterHighLeverageModeBufferPct?: number;\n};\n\n/**\n * Mainly checks if the user will be entering high leverage mode through this order.\n */\nfunction getPerpOrderParamsBitFlags(\n\tmarketIndex: number,\n\tdriftClient: DriftClient,\n\tuserAccount: User,\n\tattemptedLeverage: number,\n\thighLeverageOptions?: {\n\t\tnumOfOpenHighLeverageSpots?: number; // if not provided, the method will assume that there is spots open\n\t}\n): number | undefined {\n\tif (attemptedLeverage < 5) {\n\t\t// there is no high leverage mode leverage that is higher than 4\n\t\treturn undefined;\n\t}\n\n\tconst { numOfOpenHighLeverageSpots = Number.MAX_SAFE_INTEGER } =\n\t\thighLeverageOptions || {};\n\n\tif (numOfOpenHighLeverageSpots <= 0) {\n\t\treturn undefined;\n\t}\n\n\tconst {\n\t\thasHighLeverage: isMarketAHighLeverageMarket,\n\t\tmaxLeverage: regularMaxLeverage,\n\t} = MARKET_UTILS.getMaxLeverageForMarket(\n\t\tMarketType.PERP,\n\t\tmarketIndex,\n\t\tdriftClient\n\t);\n\n\tif (!isMarketAHighLeverageMarket) {\n\t\treturn undefined;\n\t}\n\n\t// Check if user is already in high leverage mode\n\tif (userAccount.isHighLeverageMode('Initial')) {\n\t\treturn undefined;\n\t}\n\n\tif (attemptedLeverage > regularMaxLeverage) {\n\t\treturn OrderParamsBitFlag.UpdateHighLeverageMode;\n\t}\n\n\treturn undefined;\n}\n\nconst isOrderTriggered = (\n\torder: Pick<UISerializableOrder, 'orderType' | 'triggerCondition' | 'status'>\n): boolean => {\n\tconst isTriggerOrderType =\n\t\tENUM_UTILS.match(order.orderType, OrderType.TRIGGER_MARKET) ||\n\t\tENUM_UTILS.match(order.orderType, OrderType.TRIGGER_LIMIT);\n\n\tconst orderWasCancelled = ENUM_UTILS.match(\n\t\torder.status,\n\t\tOrderStatus.CANCELED\n\t);\n\n\tconst orderWasTriggered =\n\t\tENUM_UTILS.match(\n\t\t\torder.triggerCondition,\n\t\t\tOrderTriggerCondition.TRIGGERED_ABOVE\n\t\t) ||\n\t\tENUM_UTILS.match(\n\t\t\torder.triggerCondition,\n\t\t\tOrderTriggerCondition.TRIGGERED_BELOW\n\t\t);\n\n\treturn isTriggerOrderType && orderWasTriggered && !orderWasCancelled;\n};\n\nexport const ORDER_COMMON_UTILS = {\n\tgetOrderLabelFromOrderDetails,\n\tgetLimitPriceFromOracleOffset,\n\tisAuctionEmpty,\n\tgetUIOrderTypeFromSdkOrderType,\n\tgetPerpAuctionDuration,\n\tgetPerpOrderParamsBitFlags,\n\tisOrderTriggered,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/common-ui-utils/settings/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { Draft, produce } from 'immer';\n\nexport declare type TransformerFunction<S> = (draft: Draft<S>) => {\n\ttransformationWasApplied: boolean;\n};\n\ntype VersionedSettings = Record<string, unknown> & {\n\tversion?: number;\n};\n\nexport enum SettingHandlerType {\n\tAdditive = 'additive',\n\tSubtractive = 'subtractive',\n\tTransformative = 'transformative',\n}\n\nexport type SettingsVersionRule<T = VersionedSettings> = {\n\tminVersionDiscriminator: number;\n\tsetting: keyof T;\n\thandler: TransformerFunction<T>;\n\ttype: SettingHandlerType;\n\tlongChangeDescription: string;\n\tshortChangeDescription: string;\n};\n\n/**\n *\n * @param minVersionDiscriminator\n * @param setting\n * @param handler\n * @param type\n * @param longChangeDescription : This description will be returned if this was the ONLY transformation rule that needed to apply. E.g. : \"Priority fee upgrades were recently release, and your priority fee settings were recently reset to defaults.\"\n * @param shortChangeDescription : This description will be returned if this was one of many transformation rules that needed to apply, they will be presented in a list. E.g. : \"Your priority fee settings were recently reset to defaults.\" => \"The following settings were changed to support new features : 'Your priority fee settings were recently reset to defaults.', '{something else}', etc.\"\"\n * @returns\n */\nexport const VersionedSettingsRuleFactory = <T = VersionedSettings>(\n\tminVersionDiscriminator: number,\n\tsetting: keyof T,\n\thandler: TransformerFunction<T>,\n\ttype: SettingHandlerType,\n\tlongChangeDescription: string,\n\tshortChangeDescription: string\n): SettingsVersionRule<T> => ({\n\tminVersionDiscriminator,\n\tsetting,\n\thandler,\n\ttype,\n\tlongChangeDescription,\n\tshortChangeDescription,\n});\n\nexport type VersionedSettingsRules<T extends VersionedSettings> =\n\tSettingsVersionRule<T>[];\n\n/**\n * The versioned settings handler ensures that old settings can be upgraded into newer versioned settings. It reports back on any changes if they were applied.\n */\nexport class VersionedSettingsHandler<T extends VersionedSettings> {\n\tprivate rules: VersionedSettingsRules<T>;\n\n\t/**\n\t * Applies each of the handlers in order, depending on the version of the incoming settings.\n\t *\n\t * Returns the new settings, with a list of change descriptions and an updated version number.\n\t * @param settings\n\t */\n\tapply(settings: T) {\n\t\tconst sortedRules = this.rules.sort(\n\t\t\t(a, b) => a.minVersionDiscriminator - b.minVersionDiscriminator\n\t\t);\n\n\t\tconst rulesToApply = sortedRules.filter((rule) => {\n\t\t\tif (!settings[rule.setting] || !settings.version) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn rule.minVersionDiscriminator > settings?.version;\n\t\t});\n\n\t\tconst maxVersion = Math.max(\n\t\t\t...sortedRules.map((rule) => rule.minVersionDiscriminator),\n\t\t\tsettings.version ?? -1\n\t\t);\n\n\t\tconst newSettings = { current: settings };\n\n\t\tconst transformsApplied: SettingsVersionRule<T>[] = [];\n\n\t\trulesToApply.forEach((rule) => {\n\t\t\tnewSettings.current = produce(newSettings.current, (draft) => {\n\t\t\t\tconst { transformationWasApplied: ruleTransformApplied } =\n\t\t\t\t\trule.handler(draft);\n\n\t\t\t\tif (ruleTransformApplied) {\n\t\t\t\t\ttransformsApplied.push(rule);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst aTransformWasApplied = transformsApplied.length > 0;\n\n\t\tnewSettings.current = produce(newSettings.current, (draft) => {\n\t\t\tdraft.version = maxVersion;\n\t\t});\n\n\t\tlet transformationDescription = '';\n\n\t\tif (transformsApplied.length === 1) {\n\t\t\ttransformationDescription = transformsApplied[0].longChangeDescription;\n\t\t}\n\n\t\tif (transformsApplied.length > 1) {\n\t\t\ttransformationDescription = `The following settings were changed to support new features : ${transformsApplied\n\t\t\t\t.map((rule) => rule.shortChangeDescription)\n\t\t\t\t.join(', ')}`;\n\t\t}\n\n\t\treturn {\n\t\t\ttransformationWasApplied: aTransformWasApplied,\n\t\t\ttransformedSettings: newSettings.current,\n\t\t\ttransformationDescription,\n\t\t};\n\t}\n\n\tconstructor(rules: VersionedSettingsRules<T>) {\n\t\tthis.rules = rules;\n\t}\n}\n"]}