@metamask-previews/perps-controller 13.1.0-preview-8c2a2eeb2 → 13.1.0-preview-4f4c98e

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 (716) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/{PerpsController-method-action-types.d.mts → PerpsController-method-action-types.d.ts} +2 -2
  3. package/dist/PerpsController-method-action-types.d.ts.map +1 -0
  4. package/dist/{PerpsController-method-action-types.mjs → PerpsController-method-action-types.js} +1 -1
  5. package/dist/PerpsController-method-action-types.js.map +1 -0
  6. package/dist/{PerpsController.d.mts → PerpsController.d.ts} +17 -17
  7. package/dist/PerpsController.d.ts.map +1 -0
  8. package/dist/{PerpsController.mjs → PerpsController.js} +33 -31
  9. package/dist/PerpsController.js.map +1 -0
  10. package/dist/aggregation/{SubscriptionMultiplexer.d.cts → SubscriptionMultiplexer.d.ts} +2 -2
  11. package/dist/aggregation/SubscriptionMultiplexer.d.ts.map +1 -0
  12. package/dist/aggregation/{SubscriptionMultiplexer.mjs → SubscriptionMultiplexer.js} +3 -3
  13. package/dist/aggregation/SubscriptionMultiplexer.js.map +1 -0
  14. package/dist/aggregation/index.d.ts +6 -0
  15. package/dist/aggregation/index.d.ts.map +1 -0
  16. package/dist/aggregation/index.js +5 -0
  17. package/dist/aggregation/index.js.map +1 -0
  18. package/dist/constants/{chartConfig.d.mts → chartConfig.d.ts} +34 -34
  19. package/dist/constants/chartConfig.d.ts.map +1 -0
  20. package/dist/constants/{chartConfig.mjs → chartConfig.js} +1 -1
  21. package/dist/constants/chartConfig.js.map +1 -0
  22. package/dist/constants/eventNames.d.ts +555 -0
  23. package/dist/constants/eventNames.d.ts.map +1 -0
  24. package/dist/constants/{eventNames.mjs → eventNames.js} +1 -1
  25. package/dist/constants/eventNames.js.map +1 -0
  26. package/dist/constants/{hyperLiquidConfig.d.cts → hyperLiquidConfig.d.ts} +12 -12
  27. package/dist/constants/hyperLiquidConfig.d.ts.map +1 -0
  28. package/dist/constants/{hyperLiquidConfig.mjs → hyperLiquidConfig.js} +4 -4
  29. package/dist/constants/hyperLiquidConfig.js.map +1 -0
  30. package/dist/constants/index.d.ts +12 -0
  31. package/dist/constants/index.d.ts.map +1 -0
  32. package/dist/constants/index.js +12 -0
  33. package/dist/constants/index.js.map +1 -0
  34. package/dist/constants/{myxConfig.d.mts → myxConfig.d.ts} +9 -8
  35. package/dist/constants/myxConfig.d.ts.map +1 -0
  36. package/dist/constants/{myxConfig.mjs → myxConfig.js} +2 -2
  37. package/dist/constants/myxConfig.js.map +1 -0
  38. package/dist/constants/{orderTypes.d.cts → orderTypes.d.ts} +7 -7
  39. package/dist/constants/orderTypes.d.ts.map +1 -0
  40. package/dist/constants/{orderTypes.mjs → orderTypes.js} +1 -1
  41. package/dist/constants/orderTypes.js.map +1 -0
  42. package/dist/constants/{performanceMetrics.d.cts → performanceMetrics.d.ts} +1 -1
  43. package/dist/constants/performanceMetrics.d.ts.map +1 -0
  44. package/dist/constants/{performanceMetrics.mjs → performanceMetrics.js} +1 -1
  45. package/dist/constants/performanceMetrics.js.map +1 -0
  46. package/dist/constants/{perpsConfig.d.mts → perpsConfig.d.ts} +56 -56
  47. package/dist/constants/perpsConfig.d.ts.map +1 -0
  48. package/dist/constants/{perpsConfig.mjs → perpsConfig.js} +1 -1
  49. package/dist/constants/perpsConfig.js.map +1 -0
  50. package/dist/constants/{transactionsHistoryConfig.d.cts → transactionsHistoryConfig.d.ts} +1 -1
  51. package/dist/constants/transactionsHistoryConfig.d.ts.map +1 -0
  52. package/dist/constants/{transactionsHistoryConfig.mjs → transactionsHistoryConfig.js} +1 -1
  53. package/dist/constants/transactionsHistoryConfig.js.map +1 -0
  54. package/dist/{index.d.mts → index.d.ts} +64 -64
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/{index.mjs → index.js} +41 -41
  57. package/dist/index.js.map +1 -0
  58. package/dist/perpsErrorCodes.d.ts +104 -0
  59. package/dist/perpsErrorCodes.d.ts.map +1 -0
  60. package/dist/{perpsErrorCodes.mjs → perpsErrorCodes.js} +1 -1
  61. package/dist/perpsErrorCodes.js.map +1 -0
  62. package/dist/providers/{AggregatedPerpsProvider.d.cts → AggregatedPerpsProvider.d.ts} +5 -5
  63. package/dist/providers/AggregatedPerpsProvider.d.ts.map +1 -0
  64. package/dist/providers/{AggregatedPerpsProvider.mjs → AggregatedPerpsProvider.js} +5 -5
  65. package/dist/providers/AggregatedPerpsProvider.js.map +1 -0
  66. package/dist/providers/{HyperLiquidProvider.d.mts → HyperLiquidProvider.d.ts} +7 -7
  67. package/dist/providers/HyperLiquidProvider.d.ts.map +1 -0
  68. package/dist/providers/{HyperLiquidProvider.mjs → HyperLiquidProvider.js} +48 -50
  69. package/dist/providers/HyperLiquidProvider.js.map +1 -0
  70. package/dist/routing/{ProviderRouter.d.mts → ProviderRouter.d.ts} +2 -2
  71. package/dist/routing/ProviderRouter.d.ts.map +1 -0
  72. package/dist/routing/{ProviderRouter.mjs → ProviderRouter.js} +1 -1
  73. package/dist/routing/ProviderRouter.js.map +1 -0
  74. package/dist/routing/index.d.ts +6 -0
  75. package/dist/routing/index.d.ts.map +1 -0
  76. package/dist/routing/index.js +5 -0
  77. package/dist/routing/index.js.map +1 -0
  78. package/dist/{selectors.d.mts → selectors.d.ts} +97 -97
  79. package/dist/selectors.d.ts.map +1 -0
  80. package/dist/{selectors.mjs → selectors.js} +4 -4
  81. package/dist/selectors.js.map +1 -0
  82. package/dist/services/{AccountService.d.cts → AccountService.d.ts} +4 -4
  83. package/dist/services/AccountService.d.ts.map +1 -0
  84. package/dist/services/{AccountService.mjs → AccountService.js} +9 -9
  85. package/dist/services/AccountService.js.map +1 -0
  86. package/dist/services/{AggregatedOrderBookConnection.d.cts → AggregatedOrderBookConnection.d.ts} +2 -2
  87. package/dist/services/AggregatedOrderBookConnection.d.ts.map +1 -0
  88. package/dist/services/{AggregatedOrderBookConnection.mjs → AggregatedOrderBookConnection.js} +3 -3
  89. package/dist/services/AggregatedOrderBookConnection.js.map +1 -0
  90. package/dist/services/{DataLakeService.d.cts → DataLakeService.d.ts} +4 -4
  91. package/dist/services/DataLakeService.d.ts.map +1 -0
  92. package/dist/services/{DataLakeService.mjs → DataLakeService.js} +7 -7
  93. package/dist/services/DataLakeService.js.map +1 -0
  94. package/dist/services/{DepositService.d.cts → DepositService.d.ts} +4 -4
  95. package/dist/services/DepositService.d.ts.map +1 -0
  96. package/dist/services/{DepositService.mjs → DepositService.js} +7 -7
  97. package/dist/services/DepositService.js.map +1 -0
  98. package/dist/services/{DexDiscoveryCacheManager.d.cts → DexDiscoveryCacheManager.d.ts} +2 -2
  99. package/dist/services/DexDiscoveryCacheManager.d.ts.map +1 -0
  100. package/dist/services/{DexDiscoveryCacheManager.mjs → DexDiscoveryCacheManager.js} +2 -2
  101. package/dist/services/DexDiscoveryCacheManager.js.map +1 -0
  102. package/dist/services/{EligibilityService.d.cts → EligibilityService.d.ts} +2 -2
  103. package/dist/services/EligibilityService.d.ts.map +1 -0
  104. package/dist/services/{EligibilityService.mjs → EligibilityService.js} +3 -3
  105. package/dist/services/EligibilityService.js.map +1 -0
  106. package/dist/services/{FeatureFlagConfigurationService.d.cts → FeatureFlagConfigurationService.d.ts} +3 -3
  107. package/dist/services/FeatureFlagConfigurationService.d.ts.map +1 -0
  108. package/dist/services/{FeatureFlagConfigurationService.mjs → FeatureFlagConfigurationService.js} +7 -7
  109. package/dist/services/FeatureFlagConfigurationService.js.map +1 -0
  110. package/dist/services/{HyperLiquidClientService.d.cts → HyperLiquidClientService.d.ts} +10 -10
  111. package/dist/services/HyperLiquidClientService.d.ts.map +1 -0
  112. package/dist/services/{HyperLiquidClientService.mjs → HyperLiquidClientService.js} +11 -11
  113. package/dist/services/HyperLiquidClientService.js.map +1 -0
  114. package/dist/services/{HyperLiquidSubscriptionService.d.cts → HyperLiquidSubscriptionService.d.ts} +6 -6
  115. package/dist/services/HyperLiquidSubscriptionService.d.ts.map +1 -0
  116. package/dist/services/{HyperLiquidSubscriptionService.mjs → HyperLiquidSubscriptionService.js} +12 -12
  117. package/dist/services/HyperLiquidSubscriptionService.js.map +1 -0
  118. package/dist/services/{HyperLiquidWalletService.d.cts → HyperLiquidWalletService.d.ts} +4 -4
  119. package/dist/services/HyperLiquidWalletService.d.ts.map +1 -0
  120. package/dist/services/{HyperLiquidWalletService.mjs → HyperLiquidWalletService.js} +5 -5
  121. package/dist/services/HyperLiquidWalletService.js.map +1 -0
  122. package/dist/services/{MarketDataService.d.cts → MarketDataService.d.ts} +5 -5
  123. package/dist/services/MarketDataService.d.ts.map +1 -0
  124. package/dist/services/{MarketDataService.mjs → MarketDataService.js} +9 -9
  125. package/dist/services/MarketDataService.js.map +1 -0
  126. package/dist/services/{RewardsIntegrationService.d.cts → RewardsIntegrationService.d.ts} +3 -3
  127. package/dist/services/RewardsIntegrationService.d.ts.map +1 -0
  128. package/dist/services/{RewardsIntegrationService.mjs → RewardsIntegrationService.js} +6 -6
  129. package/dist/services/RewardsIntegrationService.js.map +1 -0
  130. package/dist/services/{ServiceContext.d.cts → ServiceContext.d.ts} +3 -3
  131. package/dist/services/ServiceContext.d.ts.map +1 -0
  132. package/dist/services/ServiceContext.js +2 -0
  133. package/dist/services/ServiceContext.js.map +1 -0
  134. package/dist/services/{TerminalMarketService.d.cts → TerminalMarketService.d.ts} +2 -2
  135. package/dist/services/TerminalMarketService.d.ts.map +1 -0
  136. package/dist/services/{TerminalMarketService.mjs → TerminalMarketService.js} +9 -9
  137. package/dist/services/TerminalMarketService.js.map +1 -0
  138. package/dist/services/{TradingReadinessCache.d.mts → TradingReadinessCache.d.ts} +1 -1
  139. package/dist/services/TradingReadinessCache.d.ts.map +1 -0
  140. package/dist/services/{TradingReadinessCache.mjs → TradingReadinessCache.js} +1 -1
  141. package/dist/services/TradingReadinessCache.js.map +1 -0
  142. package/dist/services/{TradingService.d.cts → TradingService.d.ts} +4 -4
  143. package/dist/services/TradingService.d.ts.map +1 -0
  144. package/dist/services/{TradingService.mjs → TradingService.js} +10 -10
  145. package/dist/services/TradingService.js.map +1 -0
  146. package/dist/types/{config.d.cts → config.d.ts} +2 -2
  147. package/dist/types/config.d.ts.map +1 -0
  148. package/dist/types/config.js +2 -0
  149. package/dist/types/config.js.map +1 -0
  150. package/dist/types/{hyperliquid-types.d.cts → hyperliquid-types.d.ts} +6 -6
  151. package/dist/types/hyperliquid-types.d.ts.map +1 -0
  152. package/dist/types/{hyperliquid-types.mjs → hyperliquid-types.js} +1 -1
  153. package/dist/types/hyperliquid-types.js.map +1 -0
  154. package/dist/types/{index.d.cts → index.d.ts} +41 -41
  155. package/dist/types/index.d.ts.map +1 -0
  156. package/dist/types/{index.mjs → index.js} +3 -3
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/types/{messenger.d.mts → messenger.d.ts} +11 -11
  159. package/dist/types/messenger.d.ts.map +1 -0
  160. package/dist/types/messenger.js +2 -0
  161. package/dist/types/messenger.js.map +1 -0
  162. package/dist/types/{myx-types.d.mts → myx-types.d.ts} +16 -16
  163. package/dist/types/myx-types.d.ts.map +1 -0
  164. package/dist/types/{myx-types.mjs → myx-types.js} +3 -3
  165. package/dist/types/myx-types.js.map +1 -0
  166. package/dist/types/{perps-types.d.cts → perps-types.d.ts} +4 -4
  167. package/dist/types/perps-types.d.ts.map +1 -0
  168. package/dist/types/perps-types.js +2 -0
  169. package/dist/types/perps-types.js.map +1 -0
  170. package/dist/types/{token.d.cts → token.d.ts} +2 -2
  171. package/dist/types/token.d.ts.map +1 -0
  172. package/dist/types/token.js +2 -0
  173. package/dist/types/token.js.map +1 -0
  174. package/dist/types/{transactionTypes.d.cts → transactionTypes.d.ts} +1 -1
  175. package/dist/types/transactionTypes.d.ts.map +1 -0
  176. package/dist/types/{transactionTypes.mjs → transactionTypes.js} +2 -2
  177. package/dist/types/transactionTypes.js.map +1 -0
  178. package/dist/utils/{accountUtils.d.cts → accountUtils.d.ts} +4 -4
  179. package/dist/utils/accountUtils.d.ts.map +1 -0
  180. package/dist/utils/{accountUtils.mjs → accountUtils.js} +2 -2
  181. package/dist/utils/accountUtils.js.map +1 -0
  182. package/dist/utils/{capabilitySymbols.d.mts → capabilitySymbols.d.ts} +1 -1
  183. package/dist/utils/capabilitySymbols.d.ts.map +1 -0
  184. package/dist/utils/{capabilitySymbols.mjs → capabilitySymbols.js} +1 -1
  185. package/dist/utils/capabilitySymbols.js.map +1 -0
  186. package/dist/utils/{coalescePerpsRestRequest.d.cts → coalescePerpsRestRequest.d.ts} +1 -1
  187. package/dist/utils/coalescePerpsRestRequest.d.ts.map +1 -0
  188. package/dist/utils/{coalescePerpsRestRequest.mjs → coalescePerpsRestRequest.js} +2 -2
  189. package/dist/utils/coalescePerpsRestRequest.js.map +1 -0
  190. package/dist/utils/{errorUtils.d.mts → errorUtils.d.ts} +1 -1
  191. package/dist/utils/errorUtils.d.ts.map +1 -0
  192. package/dist/utils/{errorUtils.mjs → errorUtils.js} +3 -3
  193. package/dist/utils/errorUtils.js.map +1 -0
  194. package/dist/utils/{hyperLiquidAbstraction.d.cts → hyperLiquidAbstraction.d.ts} +2 -2
  195. package/dist/utils/hyperLiquidAbstraction.d.ts.map +1 -0
  196. package/dist/utils/{hyperLiquidAbstraction.mjs → hyperLiquidAbstraction.js} +1 -1
  197. package/dist/utils/hyperLiquidAbstraction.js.map +1 -0
  198. package/dist/utils/{hyperLiquidAdapter.d.cts → hyperLiquidAdapter.d.ts} +4 -4
  199. package/dist/utils/hyperLiquidAdapter.d.ts.map +1 -0
  200. package/dist/utils/{hyperLiquidAdapter.mjs → hyperLiquidAdapter.js} +9 -9
  201. package/dist/utils/hyperLiquidAdapter.js.map +1 -0
  202. package/dist/utils/{hyperLiquidOrderBookProcessor.d.mts → hyperLiquidOrderBookProcessor.d.ts} +3 -3
  203. package/dist/utils/hyperLiquidOrderBookProcessor.d.ts.map +1 -0
  204. package/dist/utils/{hyperLiquidOrderBookProcessor.mjs → hyperLiquidOrderBookProcessor.js} +1 -1
  205. package/dist/utils/hyperLiquidOrderBookProcessor.js.map +1 -0
  206. package/dist/utils/{hyperLiquidValidation.d.cts → hyperLiquidValidation.d.ts} +4 -4
  207. package/dist/utils/hyperLiquidValidation.d.ts.map +1 -0
  208. package/dist/utils/{hyperLiquidValidation.mjs → hyperLiquidValidation.js} +6 -6
  209. package/dist/utils/hyperLiquidValidation.js.map +1 -0
  210. package/dist/utils/{idUtils.d.cts → idUtils.d.ts} +1 -1
  211. package/dist/utils/idUtils.d.ts.map +1 -0
  212. package/dist/utils/{idUtils.mjs → idUtils.js} +2 -2
  213. package/dist/utils/idUtils.js.map +1 -0
  214. package/dist/utils/index.d.ts +28 -0
  215. package/dist/utils/index.d.ts.map +1 -0
  216. package/dist/utils/{index.mjs → index.js} +21 -21
  217. package/dist/utils/index.js.map +1 -0
  218. package/dist/utils/{marketDataTransform.d.cts → marketDataTransform.d.ts} +3 -3
  219. package/dist/utils/marketDataTransform.d.ts.map +1 -0
  220. package/dist/utils/{marketDataTransform.mjs → marketDataTransform.js} +5 -5
  221. package/dist/utils/marketDataTransform.js.map +1 -0
  222. package/dist/utils/{marketSearch.d.cts → marketSearch.d.ts} +2 -2
  223. package/dist/utils/marketSearch.d.ts.map +1 -0
  224. package/dist/utils/{marketSearch.mjs → marketSearch.js} +1 -1
  225. package/dist/utils/marketSearch.js.map +1 -0
  226. package/dist/utils/{marketUtils.d.cts → marketUtils.d.ts} +3 -3
  227. package/dist/utils/marketUtils.d.ts.map +1 -0
  228. package/dist/utils/{marketUtils.mjs → marketUtils.js} +2 -2
  229. package/dist/utils/marketUtils.js.map +1 -0
  230. package/dist/utils/{myxAdapter.d.cts → myxAdapter.d.ts} +3 -3
  231. package/dist/utils/myxAdapter.d.ts.map +1 -0
  232. package/dist/utils/{myxAdapter.mjs → myxAdapter.js} +3 -3
  233. package/dist/utils/myxAdapter.js.map +1 -0
  234. package/dist/utils/{orderCalculations.d.cts → orderCalculations.d.ts} +4 -4
  235. package/dist/utils/orderCalculations.d.ts.map +1 -0
  236. package/dist/utils/{orderCalculations.mjs → orderCalculations.js} +6 -6
  237. package/dist/utils/orderCalculations.js.map +1 -0
  238. package/dist/utils/{orderTypes.d.mts → orderTypes.d.ts} +3 -3
  239. package/dist/utils/orderTypes.d.ts.map +1 -0
  240. package/dist/utils/{orderTypes.mjs → orderTypes.js} +1 -1
  241. package/dist/utils/orderTypes.js.map +1 -0
  242. package/dist/utils/{perpsConnectionAttemptContext.d.mts → perpsConnectionAttemptContext.d.ts} +1 -1
  243. package/dist/utils/perpsConnectionAttemptContext.d.ts.map +1 -0
  244. package/dist/utils/{perpsConnectionAttemptContext.mjs → perpsConnectionAttemptContext.js} +1 -1
  245. package/dist/utils/perpsConnectionAttemptContext.js.map +1 -0
  246. package/dist/utils/{perpsDiskPersistence.d.cts → perpsDiskPersistence.d.ts} +2 -2
  247. package/dist/utils/perpsDiskPersistence.d.ts.map +1 -0
  248. package/dist/utils/{perpsDiskPersistence.mjs → perpsDiskPersistence.js} +2 -2
  249. package/dist/utils/perpsDiskPersistence.js.map +1 -0
  250. package/dist/utils/{perpsFormatters.d.cts → perpsFormatters.d.ts} +1 -1
  251. package/dist/utils/perpsFormatters.d.ts.map +1 -0
  252. package/dist/utils/{perpsFormatters.mjs → perpsFormatters.js} +2 -2
  253. package/dist/utils/perpsFormatters.js.map +1 -0
  254. package/dist/utils/{rewardsUtils.d.cts → rewardsUtils.d.ts} +4 -4
  255. package/dist/utils/rewardsUtils.d.ts.map +1 -0
  256. package/dist/utils/{rewardsUtils.mjs → rewardsUtils.js} +4 -4
  257. package/dist/utils/rewardsUtils.js.map +1 -0
  258. package/dist/utils/{significantFigures.d.cts → significantFigures.d.ts} +1 -1
  259. package/dist/utils/significantFigures.d.ts.map +1 -0
  260. package/dist/utils/{significantFigures.mjs → significantFigures.js} +2 -2
  261. package/dist/utils/significantFigures.js.map +1 -0
  262. package/dist/utils/{sortMarkets.d.cts → sortMarkets.d.ts} +2 -2
  263. package/dist/utils/sortMarkets.d.ts.map +1 -0
  264. package/dist/utils/{sortMarkets.mjs → sortMarkets.js} +2 -2
  265. package/dist/utils/sortMarkets.js.map +1 -0
  266. package/dist/utils/{standaloneInfoClient.d.cts → standaloneInfoClient.d.ts} +3 -3
  267. package/dist/utils/standaloneInfoClient.d.ts.map +1 -0
  268. package/dist/utils/{standaloneInfoClient.mjs → standaloneInfoClient.js} +3 -3
  269. package/dist/utils/standaloneInfoClient.js.map +1 -0
  270. package/dist/utils/{stringParseUtils.d.cts → stringParseUtils.d.ts} +1 -1
  271. package/dist/utils/stringParseUtils.d.ts.map +1 -0
  272. package/dist/utils/{stringParseUtils.mjs → stringParseUtils.js} +1 -1
  273. package/dist/utils/stringParseUtils.js.map +1 -0
  274. package/dist/utils/{transferData.d.cts → transferData.d.ts} +1 -1
  275. package/dist/utils/transferData.d.ts.map +1 -0
  276. package/dist/utils/{transferData.mjs → transferData.js} +3 -3
  277. package/dist/utils/transferData.js.map +1 -0
  278. package/dist/utils/{wait.d.cts → wait.d.ts} +1 -1
  279. package/dist/utils/wait.d.ts.map +1 -0
  280. package/dist/utils/{wait.mjs → wait.js} +1 -1
  281. package/dist/utils/wait.js.map +1 -0
  282. package/package.json +20 -48
  283. package/dist/PerpsController-method-action-types.cjs +0 -7
  284. package/dist/PerpsController-method-action-types.cjs.map +0 -1
  285. package/dist/PerpsController-method-action-types.d.cts +0 -1163
  286. package/dist/PerpsController-method-action-types.d.cts.map +0 -1
  287. package/dist/PerpsController-method-action-types.d.mts.map +0 -1
  288. package/dist/PerpsController-method-action-types.mjs.map +0 -1
  289. package/dist/PerpsController.cjs +0 -5063
  290. package/dist/PerpsController.cjs.map +0 -1
  291. package/dist/PerpsController.d.cts +0 -1274
  292. package/dist/PerpsController.d.cts.map +0 -1
  293. package/dist/PerpsController.d.mts.map +0 -1
  294. package/dist/PerpsController.mjs.map +0 -1
  295. package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -441
  296. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
  297. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
  298. package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -171
  299. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
  300. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
  301. package/dist/aggregation/index.cjs +0 -9
  302. package/dist/aggregation/index.cjs.map +0 -1
  303. package/dist/aggregation/index.d.cts +0 -6
  304. package/dist/aggregation/index.d.cts.map +0 -1
  305. package/dist/aggregation/index.d.mts +0 -6
  306. package/dist/aggregation/index.d.mts.map +0 -1
  307. package/dist/aggregation/index.mjs +0 -5
  308. package/dist/aggregation/index.mjs.map +0 -1
  309. package/dist/constants/chartConfig.cjs +0 -239
  310. package/dist/constants/chartConfig.cjs.map +0 -1
  311. package/dist/constants/chartConfig.d.cts +0 -228
  312. package/dist/constants/chartConfig.d.cts.map +0 -1
  313. package/dist/constants/chartConfig.d.mts.map +0 -1
  314. package/dist/constants/chartConfig.mjs.map +0 -1
  315. package/dist/constants/eventNames.cjs +0 -650
  316. package/dist/constants/eventNames.cjs.map +0 -1
  317. package/dist/constants/eventNames.d.cts +0 -555
  318. package/dist/constants/eventNames.d.cts.map +0 -1
  319. package/dist/constants/eventNames.d.mts +0 -555
  320. package/dist/constants/eventNames.d.mts.map +0 -1
  321. package/dist/constants/eventNames.mjs.map +0 -1
  322. package/dist/constants/hyperLiquidConfig.cjs +0 -607
  323. package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
  324. package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
  325. package/dist/constants/hyperLiquidConfig.d.mts +0 -280
  326. package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
  327. package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
  328. package/dist/constants/index.cjs +0 -28
  329. package/dist/constants/index.cjs.map +0 -1
  330. package/dist/constants/index.d.cts +0 -12
  331. package/dist/constants/index.d.cts.map +0 -1
  332. package/dist/constants/index.d.mts +0 -12
  333. package/dist/constants/index.d.mts.map +0 -1
  334. package/dist/constants/index.mjs +0 -12
  335. package/dist/constants/index.mjs.map +0 -1
  336. package/dist/constants/myxConfig.cjs +0 -253
  337. package/dist/constants/myxConfig.cjs.map +0 -1
  338. package/dist/constants/myxConfig.d.cts +0 -145
  339. package/dist/constants/myxConfig.d.cts.map +0 -1
  340. package/dist/constants/myxConfig.d.mts.map +0 -1
  341. package/dist/constants/myxConfig.mjs.map +0 -1
  342. package/dist/constants/orderTypes.cjs +0 -31
  343. package/dist/constants/orderTypes.cjs.map +0 -1
  344. package/dist/constants/orderTypes.d.cts.map +0 -1
  345. package/dist/constants/orderTypes.d.mts +0 -19
  346. package/dist/constants/orderTypes.d.mts.map +0 -1
  347. package/dist/constants/orderTypes.mjs.map +0 -1
  348. package/dist/constants/performanceMetrics.cjs +0 -63
  349. package/dist/constants/performanceMetrics.cjs.map +0 -1
  350. package/dist/constants/performanceMetrics.d.cts.map +0 -1
  351. package/dist/constants/performanceMetrics.d.mts +0 -46
  352. package/dist/constants/performanceMetrics.d.mts.map +0 -1
  353. package/dist/constants/performanceMetrics.mjs.map +0 -1
  354. package/dist/constants/perpsConfig.cjs +0 -553
  355. package/dist/constants/perpsConfig.cjs.map +0 -1
  356. package/dist/constants/perpsConfig.d.cts +0 -474
  357. package/dist/constants/perpsConfig.d.cts.map +0 -1
  358. package/dist/constants/perpsConfig.d.mts.map +0 -1
  359. package/dist/constants/perpsConfig.mjs.map +0 -1
  360. package/dist/constants/transactionsHistoryConfig.cjs +0 -38
  361. package/dist/constants/transactionsHistoryConfig.cjs.map +0 -1
  362. package/dist/constants/transactionsHistoryConfig.d.cts.map +0 -1
  363. package/dist/constants/transactionsHistoryConfig.d.mts +0 -35
  364. package/dist/constants/transactionsHistoryConfig.d.mts.map +0 -1
  365. package/dist/constants/transactionsHistoryConfig.mjs.map +0 -1
  366. package/dist/index.cjs +0 -344
  367. package/dist/index.cjs.map +0 -1
  368. package/dist/index.d.cts +0 -92
  369. package/dist/index.d.cts.map +0 -1
  370. package/dist/index.d.mts.map +0 -1
  371. package/dist/index.mjs.map +0 -1
  372. package/dist/perpsErrorCodes.cjs +0 -127
  373. package/dist/perpsErrorCodes.cjs.map +0 -1
  374. package/dist/perpsErrorCodes.d.cts +0 -104
  375. package/dist/perpsErrorCodes.d.cts.map +0 -1
  376. package/dist/perpsErrorCodes.d.mts +0 -104
  377. package/dist/perpsErrorCodes.d.mts.map +0 -1
  378. package/dist/perpsErrorCodes.mjs.map +0 -1
  379. package/dist/providers/AggregatedPerpsProvider.cjs +0 -689
  380. package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
  381. package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
  382. package/dist/providers/AggregatedPerpsProvider.d.mts +0 -232
  383. package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
  384. package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
  385. package/dist/providers/HyperLiquidProvider.cjs +0 -10416
  386. package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
  387. package/dist/providers/HyperLiquidProvider.d.cts +0 -625
  388. package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
  389. package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
  390. package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
  391. package/dist/routing/ProviderRouter.cjs +0 -154
  392. package/dist/routing/ProviderRouter.cjs.map +0 -1
  393. package/dist/routing/ProviderRouter.d.cts +0 -112
  394. package/dist/routing/ProviderRouter.d.cts.map +0 -1
  395. package/dist/routing/ProviderRouter.d.mts.map +0 -1
  396. package/dist/routing/ProviderRouter.mjs.map +0 -1
  397. package/dist/routing/index.cjs +0 -9
  398. package/dist/routing/index.cjs.map +0 -1
  399. package/dist/routing/index.d.cts +0 -6
  400. package/dist/routing/index.d.cts.map +0 -1
  401. package/dist/routing/index.d.mts +0 -6
  402. package/dist/routing/index.d.mts.map +0 -1
  403. package/dist/routing/index.mjs +0 -5
  404. package/dist/routing/index.mjs.map +0 -1
  405. package/dist/selectors.cjs +0 -264
  406. package/dist/selectors.cjs.map +0 -1
  407. package/dist/selectors.d.cts +0 -336
  408. package/dist/selectors.d.cts.map +0 -1
  409. package/dist/selectors.d.mts.map +0 -1
  410. package/dist/selectors.mjs.map +0 -1
  411. package/dist/services/AccountService.cjs +0 -324
  412. package/dist/services/AccountService.cjs.map +0 -1
  413. package/dist/services/AccountService.d.cts.map +0 -1
  414. package/dist/services/AccountService.d.mts +0 -56
  415. package/dist/services/AccountService.d.mts.map +0 -1
  416. package/dist/services/AccountService.mjs.map +0 -1
  417. package/dist/services/AggregatedOrderBookConnection.cjs +0 -405
  418. package/dist/services/AggregatedOrderBookConnection.cjs.map +0 -1
  419. package/dist/services/AggregatedOrderBookConnection.d.cts.map +0 -1
  420. package/dist/services/AggregatedOrderBookConnection.d.mts +0 -106
  421. package/dist/services/AggregatedOrderBookConnection.d.mts.map +0 -1
  422. package/dist/services/AggregatedOrderBookConnection.mjs.map +0 -1
  423. package/dist/services/DataLakeService.cjs +0 -233
  424. package/dist/services/DataLakeService.cjs.map +0 -1
  425. package/dist/services/DataLakeService.d.cts.map +0 -1
  426. package/dist/services/DataLakeService.d.mts +0 -51
  427. package/dist/services/DataLakeService.d.mts.map +0 -1
  428. package/dist/services/DataLakeService.mjs.map +0 -1
  429. package/dist/services/DepositService.cjs +0 -99
  430. package/dist/services/DepositService.cjs.map +0 -1
  431. package/dist/services/DepositService.d.cts.map +0 -1
  432. package/dist/services/DepositService.d.mts +0 -39
  433. package/dist/services/DepositService.d.mts.map +0 -1
  434. package/dist/services/DepositService.mjs.map +0 -1
  435. package/dist/services/DexDiscoveryCacheManager.cjs +0 -147
  436. package/dist/services/DexDiscoveryCacheManager.cjs.map +0 -1
  437. package/dist/services/DexDiscoveryCacheManager.d.cts.map +0 -1
  438. package/dist/services/DexDiscoveryCacheManager.d.mts +0 -52
  439. package/dist/services/DexDiscoveryCacheManager.d.mts.map +0 -1
  440. package/dist/services/DexDiscoveryCacheManager.mjs.map +0 -1
  441. package/dist/services/EligibilityService.cjs +0 -78
  442. package/dist/services/EligibilityService.cjs.map +0 -1
  443. package/dist/services/EligibilityService.d.cts.map +0 -1
  444. package/dist/services/EligibilityService.d.mts +0 -28
  445. package/dist/services/EligibilityService.d.mts.map +0 -1
  446. package/dist/services/EligibilityService.mjs.map +0 -1
  447. package/dist/services/FeatureFlagConfigurationService.cjs +0 -257
  448. package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
  449. package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
  450. package/dist/services/FeatureFlagConfigurationService.d.mts +0 -73
  451. package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
  452. package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
  453. package/dist/services/HyperLiquidClientService.cjs +0 -1045
  454. package/dist/services/HyperLiquidClientService.cjs.map +0 -1
  455. package/dist/services/HyperLiquidClientService.d.cts.map +0 -1
  456. package/dist/services/HyperLiquidClientService.d.mts +0 -239
  457. package/dist/services/HyperLiquidClientService.d.mts.map +0 -1
  458. package/dist/services/HyperLiquidClientService.mjs.map +0 -1
  459. package/dist/services/HyperLiquidSubscriptionService.cjs +0 -3196
  460. package/dist/services/HyperLiquidSubscriptionService.cjs.map +0 -1
  461. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +0 -1
  462. package/dist/services/HyperLiquidSubscriptionService.d.mts +0 -227
  463. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +0 -1
  464. package/dist/services/HyperLiquidSubscriptionService.mjs.map +0 -1
  465. package/dist/services/HyperLiquidWalletService.cjs +0 -186
  466. package/dist/services/HyperLiquidWalletService.cjs.map +0 -1
  467. package/dist/services/HyperLiquidWalletService.d.cts.map +0 -1
  468. package/dist/services/HyperLiquidWalletService.d.mts +0 -84
  469. package/dist/services/HyperLiquidWalletService.d.mts.map +0 -1
  470. package/dist/services/HyperLiquidWalletService.mjs.map +0 -1
  471. package/dist/services/MarketDataService.cjs +0 -1138
  472. package/dist/services/MarketDataService.cjs.map +0 -1
  473. package/dist/services/MarketDataService.d.cts.map +0 -1
  474. package/dist/services/MarketDataService.d.mts +0 -334
  475. package/dist/services/MarketDataService.d.mts.map +0 -1
  476. package/dist/services/MarketDataService.mjs.map +0 -1
  477. package/dist/services/RewardsIntegrationService.cjs +0 -391
  478. package/dist/services/RewardsIntegrationService.cjs.map +0 -1
  479. package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
  480. package/dist/services/RewardsIntegrationService.d.mts +0 -84
  481. package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
  482. package/dist/services/RewardsIntegrationService.mjs.map +0 -1
  483. package/dist/services/ServiceContext.cjs +0 -3
  484. package/dist/services/ServiceContext.cjs.map +0 -1
  485. package/dist/services/ServiceContext.d.cts.map +0 -1
  486. package/dist/services/ServiceContext.d.mts +0 -102
  487. package/dist/services/ServiceContext.d.mts.map +0 -1
  488. package/dist/services/ServiceContext.mjs +0 -2
  489. package/dist/services/ServiceContext.mjs.map +0 -1
  490. package/dist/services/TerminalMarketService.cjs +0 -623
  491. package/dist/services/TerminalMarketService.cjs.map +0 -1
  492. package/dist/services/TerminalMarketService.d.cts.map +0 -1
  493. package/dist/services/TerminalMarketService.d.mts +0 -45
  494. package/dist/services/TerminalMarketService.d.mts.map +0 -1
  495. package/dist/services/TerminalMarketService.mjs.map +0 -1
  496. package/dist/services/TradingReadinessCache.cjs +0 -329
  497. package/dist/services/TradingReadinessCache.cjs.map +0 -1
  498. package/dist/services/TradingReadinessCache.d.cts +0 -204
  499. package/dist/services/TradingReadinessCache.d.cts.map +0 -1
  500. package/dist/services/TradingReadinessCache.d.mts.map +0 -1
  501. package/dist/services/TradingReadinessCache.mjs.map +0 -1
  502. package/dist/services/TradingService.cjs +0 -1865
  503. package/dist/services/TradingService.cjs.map +0 -1
  504. package/dist/services/TradingService.d.cts.map +0 -1
  505. package/dist/services/TradingService.d.mts +0 -201
  506. package/dist/services/TradingService.d.mts.map +0 -1
  507. package/dist/services/TradingService.mjs.map +0 -1
  508. package/dist/types/config.cjs +0 -3
  509. package/dist/types/config.cjs.map +0 -1
  510. package/dist/types/config.d.cts.map +0 -1
  511. package/dist/types/config.d.mts +0 -49
  512. package/dist/types/config.d.mts.map +0 -1
  513. package/dist/types/config.mjs +0 -2
  514. package/dist/types/config.mjs.map +0 -1
  515. package/dist/types/hyperliquid-types.cjs +0 -45
  516. package/dist/types/hyperliquid-types.cjs.map +0 -1
  517. package/dist/types/hyperliquid-types.d.cts.map +0 -1
  518. package/dist/types/hyperliquid-types.d.mts +0 -67
  519. package/dist/types/hyperliquid-types.d.mts.map +0 -1
  520. package/dist/types/hyperliquid-types.mjs.map +0 -1
  521. package/dist/types/index.cjs +0 -151
  522. package/dist/types/index.cjs.map +0 -1
  523. package/dist/types/index.d.cts.map +0 -1
  524. package/dist/types/index.d.mts +0 -1951
  525. package/dist/types/index.d.mts.map +0 -1
  526. package/dist/types/index.mjs.map +0 -1
  527. package/dist/types/messenger.cjs +0 -3
  528. package/dist/types/messenger.cjs.map +0 -1
  529. package/dist/types/messenger.d.cts +0 -30
  530. package/dist/types/messenger.d.cts.map +0 -1
  531. package/dist/types/messenger.d.mts.map +0 -1
  532. package/dist/types/messenger.mjs +0 -2
  533. package/dist/types/messenger.mjs.map +0 -1
  534. package/dist/types/myx-types.cjs +0 -41
  535. package/dist/types/myx-types.cjs.map +0 -1
  536. package/dist/types/myx-types.d.cts +0 -94
  537. package/dist/types/myx-types.d.cts.map +0 -1
  538. package/dist/types/myx-types.d.mts.map +0 -1
  539. package/dist/types/myx-types.mjs.map +0 -1
  540. package/dist/types/perps-types.cjs +0 -7
  541. package/dist/types/perps-types.cjs.map +0 -1
  542. package/dist/types/perps-types.d.cts.map +0 -1
  543. package/dist/types/perps-types.d.mts +0 -184
  544. package/dist/types/perps-types.d.mts.map +0 -1
  545. package/dist/types/perps-types.mjs +0 -5
  546. package/dist/types/perps-types.mjs.map +0 -1
  547. package/dist/types/token.cjs +0 -3
  548. package/dist/types/token.cjs.map +0 -1
  549. package/dist/types/token.d.cts.map +0 -1
  550. package/dist/types/token.d.mts +0 -25
  551. package/dist/types/token.d.mts.map +0 -1
  552. package/dist/types/token.mjs +0 -2
  553. package/dist/types/token.mjs.map +0 -1
  554. package/dist/types/transactionTypes.cjs +0 -29
  555. package/dist/types/transactionTypes.cjs.map +0 -1
  556. package/dist/types/transactionTypes.d.cts.map +0 -1
  557. package/dist/types/transactionTypes.d.mts +0 -60
  558. package/dist/types/transactionTypes.d.mts.map +0 -1
  559. package/dist/types/transactionTypes.mjs.map +0 -1
  560. package/dist/utils/accountUtils.cjs +0 -236
  561. package/dist/utils/accountUtils.cjs.map +0 -1
  562. package/dist/utils/accountUtils.d.cts.map +0 -1
  563. package/dist/utils/accountUtils.d.mts +0 -72
  564. package/dist/utils/accountUtils.d.mts.map +0 -1
  565. package/dist/utils/accountUtils.mjs.map +0 -1
  566. package/dist/utils/capabilitySymbols.cjs +0 -25
  567. package/dist/utils/capabilitySymbols.cjs.map +0 -1
  568. package/dist/utils/capabilitySymbols.d.cts +0 -15
  569. package/dist/utils/capabilitySymbols.d.cts.map +0 -1
  570. package/dist/utils/capabilitySymbols.d.mts.map +0 -1
  571. package/dist/utils/capabilitySymbols.mjs.map +0 -1
  572. package/dist/utils/coalescePerpsRestRequest.cjs +0 -71
  573. package/dist/utils/coalescePerpsRestRequest.cjs.map +0 -1
  574. package/dist/utils/coalescePerpsRestRequest.d.cts.map +0 -1
  575. package/dist/utils/coalescePerpsRestRequest.d.mts +0 -32
  576. package/dist/utils/coalescePerpsRestRequest.d.mts.map +0 -1
  577. package/dist/utils/coalescePerpsRestRequest.mjs.map +0 -1
  578. package/dist/utils/errorUtils.cjs +0 -104
  579. package/dist/utils/errorUtils.cjs.map +0 -1
  580. package/dist/utils/errorUtils.d.cts +0 -50
  581. package/dist/utils/errorUtils.d.cts.map +0 -1
  582. package/dist/utils/errorUtils.d.mts.map +0 -1
  583. package/dist/utils/errorUtils.mjs.map +0 -1
  584. package/dist/utils/hyperLiquidAbstraction.cjs +0 -23
  585. package/dist/utils/hyperLiquidAbstraction.cjs.map +0 -1
  586. package/dist/utils/hyperLiquidAbstraction.d.cts.map +0 -1
  587. package/dist/utils/hyperLiquidAbstraction.d.mts +0 -11
  588. package/dist/utils/hyperLiquidAbstraction.d.mts.map +0 -1
  589. package/dist/utils/hyperLiquidAbstraction.mjs.map +0 -1
  590. package/dist/utils/hyperLiquidAdapter.cjs +0 -512
  591. package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
  592. package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
  593. package/dist/utils/hyperLiquidAdapter.d.mts +0 -77
  594. package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
  595. package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
  596. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -83
  597. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
  598. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -55
  599. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
  600. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
  601. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
  602. package/dist/utils/hyperLiquidValidation.cjs +0 -799
  603. package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
  604. package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
  605. package/dist/utils/hyperLiquidValidation.d.mts +0 -192
  606. package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
  607. package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
  608. package/dist/utils/idUtils.cjs +0 -18
  609. package/dist/utils/idUtils.cjs.map +0 -1
  610. package/dist/utils/idUtils.d.cts.map +0 -1
  611. package/dist/utils/idUtils.d.mts +0 -6
  612. package/dist/utils/idUtils.d.mts.map +0 -1
  613. package/dist/utils/idUtils.mjs.map +0 -1
  614. package/dist/utils/index.cjs +0 -65
  615. package/dist/utils/index.cjs.map +0 -1
  616. package/dist/utils/index.d.cts +0 -28
  617. package/dist/utils/index.d.cts.map +0 -1
  618. package/dist/utils/index.d.mts +0 -28
  619. package/dist/utils/index.d.mts.map +0 -1
  620. package/dist/utils/index.mjs.map +0 -1
  621. package/dist/utils/marketDataTransform.cjs +0 -250
  622. package/dist/utils/marketDataTransform.cjs.map +0 -1
  623. package/dist/utils/marketDataTransform.d.cts.map +0 -1
  624. package/dist/utils/marketDataTransform.d.mts +0 -71
  625. package/dist/utils/marketDataTransform.d.mts.map +0 -1
  626. package/dist/utils/marketDataTransform.mjs.map +0 -1
  627. package/dist/utils/marketSearch.cjs +0 -111
  628. package/dist/utils/marketSearch.cjs.map +0 -1
  629. package/dist/utils/marketSearch.d.cts.map +0 -1
  630. package/dist/utils/marketSearch.d.mts +0 -48
  631. package/dist/utils/marketSearch.d.mts.map +0 -1
  632. package/dist/utils/marketSearch.mjs.map +0 -1
  633. package/dist/utils/marketUtils.cjs +0 -266
  634. package/dist/utils/marketUtils.cjs.map +0 -1
  635. package/dist/utils/marketUtils.d.cts.map +0 -1
  636. package/dist/utils/marketUtils.d.mts +0 -73
  637. package/dist/utils/marketUtils.d.mts.map +0 -1
  638. package/dist/utils/marketUtils.mjs.map +0 -1
  639. package/dist/utils/myxAdapter.cjs +0 -569
  640. package/dist/utils/myxAdapter.cjs.map +0 -1
  641. package/dist/utils/myxAdapter.d.cts.map +0 -1
  642. package/dist/utils/myxAdapter.d.mts +0 -168
  643. package/dist/utils/myxAdapter.d.mts.map +0 -1
  644. package/dist/utils/myxAdapter.mjs.map +0 -1
  645. package/dist/utils/orderCalculations.cjs +0 -823
  646. package/dist/utils/orderCalculations.cjs.map +0 -1
  647. package/dist/utils/orderCalculations.d.cts.map +0 -1
  648. package/dist/utils/orderCalculations.d.mts +0 -298
  649. package/dist/utils/orderCalculations.d.mts.map +0 -1
  650. package/dist/utils/orderCalculations.mjs.map +0 -1
  651. package/dist/utils/orderTypes.cjs +0 -301
  652. package/dist/utils/orderTypes.cjs.map +0 -1
  653. package/dist/utils/orderTypes.d.cts +0 -166
  654. package/dist/utils/orderTypes.d.cts.map +0 -1
  655. package/dist/utils/orderTypes.d.mts.map +0 -1
  656. package/dist/utils/orderTypes.mjs.map +0 -1
  657. package/dist/utils/perpsConnectionAttemptContext.cjs +0 -20
  658. package/dist/utils/perpsConnectionAttemptContext.cjs.map +0 -1
  659. package/dist/utils/perpsConnectionAttemptContext.d.cts +0 -7
  660. package/dist/utils/perpsConnectionAttemptContext.d.cts.map +0 -1
  661. package/dist/utils/perpsConnectionAttemptContext.d.mts.map +0 -1
  662. package/dist/utils/perpsConnectionAttemptContext.mjs.map +0 -1
  663. package/dist/utils/perpsDiskPersistence.cjs +0 -259
  664. package/dist/utils/perpsDiskPersistence.cjs.map +0 -1
  665. package/dist/utils/perpsDiskPersistence.d.cts.map +0 -1
  666. package/dist/utils/perpsDiskPersistence.d.mts +0 -112
  667. package/dist/utils/perpsDiskPersistence.d.mts.map +0 -1
  668. package/dist/utils/perpsDiskPersistence.mjs.map +0 -1
  669. package/dist/utils/perpsFormatters.cjs +0 -509
  670. package/dist/utils/perpsFormatters.cjs.map +0 -1
  671. package/dist/utils/perpsFormatters.d.cts.map +0 -1
  672. package/dist/utils/perpsFormatters.d.mts +0 -204
  673. package/dist/utils/perpsFormatters.d.mts.map +0 -1
  674. package/dist/utils/perpsFormatters.mjs.map +0 -1
  675. package/dist/utils/rewardsUtils.cjs +0 -98
  676. package/dist/utils/rewardsUtils.cjs.map +0 -1
  677. package/dist/utils/rewardsUtils.d.cts.map +0 -1
  678. package/dist/utils/rewardsUtils.d.mts +0 -33
  679. package/dist/utils/rewardsUtils.d.mts.map +0 -1
  680. package/dist/utils/rewardsUtils.mjs.map +0 -1
  681. package/dist/utils/significantFigures.cjs +0 -88
  682. package/dist/utils/significantFigures.cjs.map +0 -1
  683. package/dist/utils/significantFigures.d.cts.map +0 -1
  684. package/dist/utils/significantFigures.d.mts +0 -25
  685. package/dist/utils/significantFigures.d.mts.map +0 -1
  686. package/dist/utils/significantFigures.mjs.map +0 -1
  687. package/dist/utils/sortMarkets.cjs +0 -93
  688. package/dist/utils/sortMarkets.cjs.map +0 -1
  689. package/dist/utils/sortMarkets.d.cts.map +0 -1
  690. package/dist/utils/sortMarkets.d.mts +0 -25
  691. package/dist/utils/sortMarkets.d.mts.map +0 -1
  692. package/dist/utils/sortMarkets.mjs.map +0 -1
  693. package/dist/utils/standaloneInfoClient.cjs +0 -70
  694. package/dist/utils/standaloneInfoClient.cjs.map +0 -1
  695. package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
  696. package/dist/utils/standaloneInfoClient.d.mts +0 -37
  697. package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
  698. package/dist/utils/standaloneInfoClient.mjs.map +0 -1
  699. package/dist/utils/stringParseUtils.cjs +0 -34
  700. package/dist/utils/stringParseUtils.cjs.map +0 -1
  701. package/dist/utils/stringParseUtils.d.cts.map +0 -1
  702. package/dist/utils/stringParseUtils.d.mts +0 -11
  703. package/dist/utils/stringParseUtils.d.mts.map +0 -1
  704. package/dist/utils/stringParseUtils.mjs.map +0 -1
  705. package/dist/utils/transferData.cjs +0 -33
  706. package/dist/utils/transferData.cjs.map +0 -1
  707. package/dist/utils/transferData.d.cts.map +0 -1
  708. package/dist/utils/transferData.d.mts +0 -9
  709. package/dist/utils/transferData.d.mts.map +0 -1
  710. package/dist/utils/transferData.mjs.map +0 -1
  711. package/dist/utils/wait.cjs +0 -6
  712. package/dist/utils/wait.cjs.map +0 -1
  713. package/dist/utils/wait.d.cts.map +0 -1
  714. package/dist/utils/wait.d.mts +0 -2
  715. package/dist/utils/wait.d.mts.map +0 -1
  716. package/dist/utils/wait.mjs.map +0 -1
@@ -1,1865 +0,0 @@
1
- "use strict";
2
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
- if (kind === "m") throw new TypeError("Private method is not writable");
4
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
- };
8
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
- };
13
- var _TradingService_instances, _TradingService_deps, _TradingService_controllerDeps, _TradingService_feeContextTail, _TradingService_getErrorContext, _TradingService_buildAttributionProperties, _TradingService_trackSubmitted, _TradingService_trackOrderResult, _TradingService_handleOrderSuccess, _TradingService_withFeeDiscount, _TradingService_loadPositionData, _TradingService_calculateCloseMetrics, _TradingService_buildCloseEventProperties, _TradingService_trackPositionCloseResult, _TradingService_handleDataLakeReporting, _TradingService_calculateFeeDiscountWithMeasurement;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.TradingService = void 0;
16
- const bignumber_js_1 = require("bignumber.js");
17
- const uuid_1 = require("uuid");
18
- const eventNames_js_1 = require("../constants/eventNames.cjs");
19
- const orderTypes_js_1 = require("../constants/orderTypes.cjs");
20
- const performanceMetrics_js_1 = require("../constants/performanceMetrics.cjs");
21
- const perpsConfig_js_1 = require("../constants/perpsConfig.cjs");
22
- const index_js_1 = require("../types/index.cjs");
23
- const errorUtils_js_1 = require("../utils/errorUtils.cjs");
24
- const orderTypes_js_2 = require("../utils/orderTypes.cjs");
25
- /**
26
- * TradingService
27
- *
28
- * Handles trading operations with fee discount management.
29
- * Controller is responsible for analytics, state management, and tracing.
30
- *
31
- * Instance-based service with constructor injection of platform dependencies.
32
- * Controller-level dependencies (RewardsController, NetworkController, etc.)
33
- * are injected via setControllerDependencies() after construction.
34
- */
35
- class TradingService {
36
- /**
37
- * Create a new TradingService instance
38
- *
39
- * @param deps - Platform dependencies for logging, metrics, etc.
40
- */
41
- constructor(deps) {
42
- _TradingService_instances.add(this);
43
- /**
44
- * Platform dependencies for logging, metrics, etc.
45
- */
46
- _TradingService_deps.set(this, void 0);
47
- /**
48
- * Controller-level dependencies for fee discount calculation.
49
- * Set via setControllerDependencies() after construction.
50
- */
51
- _TradingService_controllerDeps.set(this, null);
52
- /** Serializes provider fee context so concurrent orders cannot share it. */
53
- _TradingService_feeContextTail.set(this, Promise.resolve());
54
- __classPrivateFieldSet(this, _TradingService_deps, deps, "f");
55
- }
56
- /**
57
- * Set controller-level dependencies for fee discount calculation.
58
- * Called by PerpsController after construction to inject singleton dependencies.
59
- *
60
- * @param controllerDeps - Controller-level dependencies (RewardsController, etc.)
61
- */
62
- setControllerDependencies(controllerDeps) {
63
- __classPrivateFieldSet(this, _TradingService_controllerDeps, controllerDeps, "f");
64
- }
65
- /**
66
- * Place a new order with full orchestration
67
- * Handles tracing, fee discounts, state management, analytics, and data lake reporting
68
- *
69
- * @param options - The configuration options.
70
- * @param options.provider - The perps provider instance.
71
- * @param options.params - The operation parameters.
72
- * @param options.context - The service context for dependencies.
73
- * @param options.reportOrderToDataLake - The report order to data lake value.
74
- * @returns The result of the operation.
75
- */
76
- async placeOrder(options) {
77
- const { provider, params, context, reportOrderToDataLake } = options;
78
- const traceId = (0, uuid_1.v4)();
79
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
80
- let traceData;
81
- let orderSubmissionThresholdTimeoutId;
82
- let didExceedOrderSubmissionThreshold = false;
83
- const paymentToken = params.trackingData?.tradeWithToken === true
84
- ? (params.trackingData.mmPayTokenSelected ?? 'unknown_token')
85
- : 'perps_balance';
86
- try {
87
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.addBreadcrumb({
88
- category: 'perps',
89
- message: 'Order execution started',
90
- level: 'info',
91
- data: {
92
- payment_token: paymentToken,
93
- market: params.symbol,
94
- orderType: params.orderType,
95
- },
96
- });
97
- // Start trace for the entire operation
98
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
99
- name: index_js_1.PerpsTraceNames.PlaceOrder,
100
- id: traceId,
101
- op: index_js_1.PerpsTraceOperations.OrderSubmission,
102
- tags: {
103
- provider: context.tracingContext.provider,
104
- orderType: params.orderType,
105
- market: params.symbol,
106
- leverage: String(params.leverage ?? 1),
107
- isTestnet: String(context.tracingContext.isTestnet),
108
- payment_token: paymentToken,
109
- },
110
- data: {
111
- isBuy: params.isBuy,
112
- orderPrice: params.price ?? '',
113
- payment_token: paymentToken,
114
- },
115
- });
116
- // Calculate fee discount at execution time (fresh, secure)
117
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
118
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Fee resolution calculated', {
119
- feeDiscountBips: feeResolution?.discountBips,
120
- feeSource: feeResolution?.source,
121
- hasDiscount: feeResolution?.discountBips !== undefined,
122
- });
123
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Submitting order to provider', {
124
- symbol: params.symbol,
125
- orderType: params.orderType,
126
- isBuy: params.isBuy,
127
- size: params.size,
128
- leverage: params.leverage,
129
- hasTP: Boolean(params.takeProfitPrice),
130
- hasSL: Boolean(params.stopLossPrice),
131
- });
132
- // Emit submitted event before the provider round-trip
133
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackSubmitted).call(this, index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
134
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
135
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: params.isBuy
136
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
137
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
138
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.orderType,
139
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: parseFloat(String(params.leverage ?? 1)),
140
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
141
- });
142
- // Observational threshold: when the provider round-trip exceeds
143
- // PlaceOrderTimeoutMs we tag the trace and emit a breadcrumb, but we
144
- // intentionally do NOT cancel the in-flight order. Cancelling client-side
145
- // (e.g. Promise.race rejection) does not stop the provider request, so a
146
- // race-based timeout would let the UI mark an order as failed while
147
- // HyperLiquid could still accept it. Instead, we always await
148
- // provider.placeOrder(params) to terminal completion and surface
149
- // late completions via trace `reason: 'late_success' | 'late_error'`.
150
- orderSubmissionThresholdTimeoutId = setTimeout(() => {
151
- didExceedOrderSubmissionThreshold = true;
152
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.addBreadcrumb({
153
- category: 'perps',
154
- message: 'Order submission exceeded threshold (still pending)',
155
- level: 'warning',
156
- data: {
157
- thresholdMs: perpsConfig_js_1.PERPS_CONSTANTS.PlaceOrderTimeoutMs,
158
- payment_token: paymentToken,
159
- market: params.symbol,
160
- orderType: params.orderType,
161
- },
162
- });
163
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Order submission exceeded threshold (still pending)', {
164
- thresholdMs: perpsConfig_js_1.PERPS_CONSTANTS.PlaceOrderTimeoutMs,
165
- symbol: params.symbol,
166
- orderType: params.orderType,
167
- });
168
- }, perpsConfig_js_1.PERPS_CONSTANTS.PlaceOrderTimeoutMs);
169
- const result = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
170
- provider,
171
- feeResolution,
172
- operation: () => provider.placeOrder(params),
173
- });
174
- if (orderSubmissionThresholdTimeoutId !== undefined) {
175
- clearTimeout(orderSubmissionThresholdTimeoutId);
176
- orderSubmissionThresholdTimeoutId = undefined;
177
- }
178
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Provider response received', {
179
- success: result.success,
180
- orderId: result.orderId,
181
- error: result.error,
182
- didExceedOrderSubmissionThreshold,
183
- });
184
- // Update state and handle success/failure
185
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
186
- if (result.success) {
187
- // Handle success: state updates, data lake reporting
188
- await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_handleOrderSuccess).call(this, {
189
- params,
190
- context,
191
- reportOrderToDataLake,
192
- });
193
- traceData = {
194
- success: true,
195
- orderId: result.orderId ?? '',
196
- ...(didExceedOrderSubmissionThreshold
197
- ? { reason: 'late_success' }
198
- : {}),
199
- };
200
- // Invalidate standalone caches so external hooks (e.g., usePerpsPositionForAsset) refresh
201
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
202
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
203
- }
204
- else {
205
- traceData = {
206
- success: false,
207
- reason: didExceedOrderSubmissionThreshold ? 'late_error' : 'error',
208
- error: result.error ?? 'Unknown error',
209
- };
210
- }
211
- // Track analytics (success or failure)
212
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackOrderResult).call(this, {
213
- result,
214
- params,
215
- context,
216
- duration: completionDuration,
217
- });
218
- return result;
219
- }
220
- catch (error) {
221
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
222
- // Track analytics for exception
223
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackOrderResult).call(this, {
224
- result: null,
225
- error: error instanceof Error ? error : undefined,
226
- params,
227
- context,
228
- duration: completionDuration,
229
- });
230
- // withFeeDiscount handles fee discount cleanup automatically
231
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.placeOrder'), {
232
- tags: {
233
- feature: perpsConfig_js_1.PERPS_CONSTANTS.FeatureName,
234
- provider: context.tracingContext.provider,
235
- network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',
236
- },
237
- context: {
238
- name: context.errorContext.controller,
239
- data: {
240
- method: context.errorContext.method,
241
- symbol: params.symbol,
242
- orderType: params.orderType,
243
- },
244
- },
245
- });
246
- traceData = {
247
- success: false,
248
- reason: didExceedOrderSubmissionThreshold ? 'late_error' : 'error',
249
- error: error instanceof Error ? error.message : 'Unknown error',
250
- };
251
- throw error;
252
- }
253
- finally {
254
- if (orderSubmissionThresholdTimeoutId !== undefined) {
255
- clearTimeout(orderSubmissionThresholdTimeoutId);
256
- }
257
- // Always end trace on exit (success or failure)
258
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
259
- name: index_js_1.PerpsTraceNames.PlaceOrder,
260
- id: traceId,
261
- data: traceData,
262
- });
263
- }
264
- }
265
- /**
266
- * Edit an existing order with full orchestration
267
- * Handles tracing, fee discounts, state management, and analytics
268
- *
269
- * @param options - The configuration options.
270
- * @param options.provider - The perps provider instance.
271
- * @param options.params - The operation parameters.
272
- * @param options.context - The service context for dependencies.
273
- * @returns The result of the operation.
274
- */
275
- async editOrder(options) {
276
- const { provider, params, context } = options;
277
- const traceId = (0, uuid_1.v4)();
278
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
279
- let traceData;
280
- try {
281
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
282
- name: index_js_1.PerpsTraceNames.EditOrder,
283
- id: traceId,
284
- op: index_js_1.PerpsTraceOperations.OrderSubmission,
285
- tags: {
286
- provider: context.tracingContext.provider,
287
- orderType: params.newOrder.orderType,
288
- market: params.newOrder.symbol,
289
- leverage: String(params.newOrder.leverage ?? 1),
290
- isTestnet: String(context.tracingContext.isTestnet),
291
- },
292
- data: {
293
- isBuy: params.newOrder.isBuy,
294
- orderPrice: params.newOrder.price ?? '',
295
- },
296
- });
297
- // Calculate fee discount only if required dependencies are available
298
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
299
- // Execute order edit with fee discount management
300
- const result = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
301
- provider,
302
- feeResolution,
303
- operation: () => provider.editOrder(params),
304
- });
305
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
306
- if (result.success) {
307
- // Update state on success
308
- if (context.stateManager) {
309
- context.stateManager.update((state) => {
310
- state.lastUpdateTimestamp = Date.now();
311
- });
312
- }
313
- // Track order edit executed
314
- const editExecutedProps = {
315
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED,
316
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.newOrder.symbol,
317
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: params.newOrder.isBuy
318
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
319
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
320
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.newOrder.orderType,
321
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: params.newOrder.leverage ?? 1,
322
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: params.newOrder.size,
323
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
324
- };
325
- if (params.newOrder.price) {
326
- editExecutedProps[eventNames_js_1.PERPS_EVENT_PROPERTY.LIMIT_PRICE] = parseFloat(params.newOrder.price);
327
- }
328
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, editExecutedProps);
329
- traceData = { success: true, orderId: result.orderId ?? '' };
330
- }
331
- else {
332
- // Track order edit failed
333
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
334
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
335
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.newOrder.symbol,
336
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: params.newOrder.isBuy
337
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
338
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
339
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.newOrder.orderType,
340
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: params.newOrder.leverage ?? 1,
341
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: params.newOrder.size,
342
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
343
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',
344
- });
345
- traceData = { success: false, error: result.error ?? 'Unknown error' };
346
- }
347
- return result;
348
- }
349
- catch (error) {
350
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
351
- // Track order edit exception
352
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
353
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
354
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.newOrder.symbol,
355
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: params.newOrder.isBuy
356
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
357
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
358
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.newOrder.orderType,
359
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: params.newOrder.leverage ?? 1,
360
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: params.newOrder.size,
361
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
362
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: error instanceof Error ? error.message : 'Unknown error',
363
- });
364
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.editOrder'), {
365
- tags: {
366
- feature: perpsConfig_js_1.PERPS_CONSTANTS.FeatureName,
367
- provider: context.tracingContext.provider,
368
- network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',
369
- },
370
- context: {
371
- name: context.errorContext.controller,
372
- data: {
373
- method: context.errorContext.method,
374
- orderId: params.orderId,
375
- },
376
- },
377
- });
378
- traceData = {
379
- success: false,
380
- error: error instanceof Error ? error.message : 'Unknown error',
381
- };
382
- throw error;
383
- }
384
- finally {
385
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
386
- name: index_js_1.PerpsTraceNames.EditOrder,
387
- id: traceId,
388
- data: traceData,
389
- });
390
- }
391
- }
392
- /**
393
- * Cancel a single order with full orchestration
394
- * Handles tracing, state management, and analytics
395
- *
396
- * @param options - The configuration options.
397
- * @param options.provider - The perps provider instance.
398
- * @param options.params - The operation parameters.
399
- * @param options.context - The service context for dependencies.
400
- * @param options.bulkActionId - Optional batch correlation id.
401
- * @returns The result of the operation.
402
- */
403
- async cancelOrder(options) {
404
- const { provider, params, context, bulkActionId } = options;
405
- const traceId = (0, uuid_1.v4)();
406
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
407
- let traceData;
408
- // Shared attribution + bulk correlation props
409
- const cancelExtraProps = {
410
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
411
- ...(bulkActionId && {
412
- [eventNames_js_1.PERPS_EVENT_PROPERTY.BULK_ACTION_ID]: bulkActionId,
413
- }),
414
- };
415
- try {
416
- // Start trace for the entire operation
417
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
418
- name: index_js_1.PerpsTraceNames.CancelOrder,
419
- id: traceId,
420
- op: index_js_1.PerpsTraceOperations.OrderSubmission,
421
- tags: {
422
- provider: context.tracingContext.provider,
423
- market: params.symbol,
424
- isTestnet: String(context.tracingContext.isTestnet),
425
- },
426
- data: {
427
- orderId: params.orderId,
428
- },
429
- });
430
- // Emit submitted event before the provider round-trip
431
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackSubmitted).call(this, index_js_1.PerpsAnalyticsEvent.OrderCancelTransaction, {
432
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
433
- ...cancelExtraProps,
434
- });
435
- // Execute order cancellation
436
- const result = await provider.cancelOrder(params);
437
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
438
- if (result.success) {
439
- // Update state on success
440
- if (context.stateManager) {
441
- context.stateManager.update((state) => {
442
- state.lastUpdateTimestamp = Date.now();
443
- });
444
- }
445
- // Track order cancel executed
446
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.OrderCancelTransaction, {
447
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED,
448
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
449
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
450
- ...cancelExtraProps,
451
- });
452
- traceData = { success: true, orderId: params.orderId };
453
- }
454
- else {
455
- // Track order cancel failed
456
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.OrderCancelTransaction, {
457
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
458
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
459
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
460
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',
461
- ...cancelExtraProps,
462
- });
463
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(result.error, 'TradingService.cancelOrder'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'cancelOrder', {
464
- symbol: params.symbol,
465
- orderId: params.orderId,
466
- providerError: result.error ?? 'Unknown error',
467
- }));
468
- traceData = { success: false, error: result.error ?? 'Unknown error' };
469
- }
470
- return result;
471
- }
472
- catch (error) {
473
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
474
- // Track order cancel exception
475
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.OrderCancelTransaction, {
476
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
477
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
478
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
479
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: error instanceof Error ? error.message : 'Unknown error',
480
- ...cancelExtraProps,
481
- });
482
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.cancelOrder'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'cancelOrder', { symbol: params.symbol }));
483
- traceData = {
484
- success: false,
485
- error: error instanceof Error ? error.message : 'Unknown error',
486
- };
487
- throw error;
488
- }
489
- finally {
490
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
491
- name: index_js_1.PerpsTraceNames.CancelOrder,
492
- id: traceId,
493
- data: traceData,
494
- });
495
- }
496
- }
497
- /**
498
- * Cancel multiple orders with full orchestration
499
- * Handles tracing, stream pausing, filtering, batch operations, and analytics
500
- *
501
- * @param options - The configuration options.
502
- * @param options.provider - The perps provider instance.
503
- * @param options.params - The operation parameters.
504
- * @param options.context - The service context for dependencies.
505
- * @param options.withStreamPause - The with stream pause value.
506
- * @returns The result of the operation.
507
- */
508
- async cancelOrders(options) {
509
- const { provider, params, context, withStreamPause } = options;
510
- const traceId = (0, uuid_1.v4)();
511
- // Correlation id linking every per-item event to the batch summary
512
- const bulkActionId = (0, uuid_1.v4)();
513
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
514
- let operationResult = null;
515
- let operationError = null;
516
- try {
517
- // Start trace for batch operation
518
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
519
- name: index_js_1.PerpsTraceNames.CancelOrder,
520
- id: traceId,
521
- op: index_js_1.PerpsTraceOperations.OrderSubmission,
522
- tags: {
523
- provider: context.tracingContext.provider,
524
- isBatch: 'true',
525
- isTestnet: String(context.tracingContext.isTestnet),
526
- },
527
- data: {
528
- cancelAll: params.cancelAll ? 'true' : 'false',
529
- symbolCount: params.symbols?.length ?? 0,
530
- orderIdCount: params.orderIds?.length ?? 0,
531
- },
532
- });
533
- // Pause orders stream to prevent WebSocket updates during cancellation
534
- operationResult = await withStreamPause(async () => {
535
- // Get all open orders
536
- if (!context.getOpenOrders) {
537
- throw new Error('getOpenOrders callback not provided in context');
538
- }
539
- const orders = await context.getOpenOrders();
540
- // Filter orders based on params
541
- let ordersToCancel = orders;
542
- if (params.cancelAll === true ||
543
- (!params.symbols && !params.orderIds)) {
544
- // Cancel all orders (excluding TP/SL orders for positions)
545
- ordersToCancel = orders.filter((order) => !(0, orderTypes_js_1.isTPSLOrder)(order.detailedOrderType));
546
- }
547
- else if (params.orderIds && params.orderIds.length > 0) {
548
- // Cancel specific order IDs
549
- ordersToCancel = orders.filter((order) => params.orderIds?.includes(order.orderId));
550
- }
551
- else if (params.symbols && params.symbols.length > 0) {
552
- // Cancel orders for specific symbols
553
- ordersToCancel = orders.filter((order) => params.symbols?.includes(order.symbol));
554
- }
555
- if (ordersToCancel.length === 0) {
556
- return {
557
- success: false,
558
- successCount: 0,
559
- failureCount: 0,
560
- results: [],
561
- };
562
- }
563
- // Use batch cancel if provider supports it
564
- if (provider.cancelOrders) {
565
- return await provider.cancelOrders(ordersToCancel.map((order) => ({
566
- symbol: order.symbol,
567
- orderId: order.orderId,
568
- })));
569
- }
570
- // Fallback: Cancel orders in parallel (for providers without batch support)
571
- const results = await Promise.allSettled(ordersToCancel.map((order) => this.cancelOrder({
572
- provider,
573
- params: { symbol: order.symbol, orderId: order.orderId },
574
- context,
575
- bulkActionId,
576
- })));
577
- // Aggregate results
578
- const successCount = results.filter((res) => res.status === 'fulfilled' && res.value.success).length;
579
- const failureCount = results.length - successCount;
580
- return {
581
- success: successCount > 0,
582
- successCount,
583
- failureCount,
584
- results: results.map((result, index) => {
585
- let error;
586
- if (result.status === 'rejected') {
587
- error =
588
- result.reason instanceof Error
589
- ? result.reason.message
590
- : 'Unknown error';
591
- }
592
- else if (result.status === 'fulfilled' && !result.value.success) {
593
- error = result.value.error;
594
- }
595
- return {
596
- orderId: ordersToCancel[index].orderId,
597
- symbol: ordersToCancel[index].symbol,
598
- success: Boolean(result.status === 'fulfilled' && result.value.success),
599
- error,
600
- };
601
- }),
602
- };
603
- }, ['orders']); // Disconnect orders stream during operation
604
- if (provider.cancelOrders &&
605
- operationResult &&
606
- operationResult.failureCount > 0) {
607
- const failureSummary = operationResult.results
608
- .filter((result) => !result.success)
609
- .map((result) => `${result.symbol}/${result.orderId}: ${result.error ?? 'Unknown error'}`)
610
- .join('; ');
611
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error(new Error(`cancelOrders batch failure: ${operationResult.failureCount}/${operationResult.results.length} failed - ${failureSummary}`), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'cancelOrders', {
612
- successCount: operationResult.successCount,
613
- failureCount: operationResult.failureCount,
614
- cancelAll: params.cancelAll,
615
- }));
616
- }
617
- return operationResult;
618
- }
619
- catch (error) {
620
- operationError =
621
- error instanceof Error ? error : new Error(String(error));
622
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.cancelOrders'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'cancelOrders'));
623
- throw error;
624
- }
625
- finally {
626
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
627
- // Track batch cancel event (success or failure)
628
- const batchCancelProps = {
629
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: operationResult?.success && operationResult.successCount > 0
630
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
631
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
632
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
633
- [eventNames_js_1.PERPS_EVENT_PROPERTY.BULK_ACTION_ID]: bulkActionId,
634
- };
635
- if (operationError) {
636
- batchCancelProps[eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE] =
637
- operationError.message;
638
- }
639
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.OrderCancelTransaction, batchCancelProps);
640
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
641
- name: index_js_1.PerpsTraceNames.CancelOrder,
642
- id: traceId,
643
- });
644
- }
645
- }
646
- /**
647
- * Close a single position with full orchestration
648
- * Handles tracing, fee discounts, state management, analytics, and data lake reporting
649
- *
650
- * @param options - The configuration options.
651
- * @param options.provider - The perps provider instance.
652
- * @param options.params - The operation parameters.
653
- * @param options.context - The service context for dependencies.
654
- * @param options.reportOrderToDataLake - The report order to data lake value.
655
- * @param options.bulkActionId - Optional batch correlation id.
656
- * @returns The result of the operation.
657
- */
658
- async closePosition(options) {
659
- const { provider, params, context, reportOrderToDataLake, bulkActionId } = options;
660
- const traceId = (0, uuid_1.v4)();
661
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
662
- let position;
663
- let result;
664
- let traceData;
665
- try {
666
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
667
- name: index_js_1.PerpsTraceNames.ClosePosition,
668
- id: traceId,
669
- op: index_js_1.PerpsTraceOperations.PositionManagement,
670
- tags: {
671
- provider: context.tracingContext.provider,
672
- symbol: params.symbol,
673
- closeSize: params.size ?? 'full',
674
- isTestnet: String(context.tracingContext.isTestnet),
675
- },
676
- });
677
- // Load position data with measurement
678
- position = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_loadPositionData).call(this, {
679
- symbol: params.symbol,
680
- context,
681
- });
682
- // Emit submitted event before the provider round-trip
683
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackSubmitted).call(this, index_js_1.PerpsAnalyticsEvent.PositionCloseTransaction, {
684
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
685
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.orderType ?? eventNames_js_1.PERPS_EVENT_VALUE.ORDER_TYPE.MARKET,
686
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
687
- ...(bulkActionId && {
688
- [eventNames_js_1.PERPS_EVENT_PROPERTY.BULK_ACTION_ID]: bulkActionId,
689
- }),
690
- });
691
- // Calculate fee discount with measurement
692
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
693
- // Execute position close with fee discount management
694
- result = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
695
- provider,
696
- feeResolution,
697
- operation: () => provider.closePosition(params),
698
- });
699
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
700
- if (result.success) {
701
- // Update state on success
702
- if (context.stateManager) {
703
- context.stateManager.update((state) => {
704
- state.lastUpdateTimestamp = Date.now();
705
- });
706
- }
707
- // Report to data lake (fire-and-forget)
708
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_handleDataLakeReporting).call(this, reportOrderToDataLake, params.symbol, context);
709
- traceData = { success: true, filledSize: result.filledSize ?? '' };
710
- // Invalidate standalone caches so external hooks (e.g., usePerpsPositionForAsset) refresh
711
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
712
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
713
- }
714
- else {
715
- traceData = { success: false, error: result.error ?? 'Unknown error' };
716
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(result.error, 'TradingService.closePosition'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'closePosition', {
717
- symbol: params.symbol,
718
- providerError: result.error ?? 'Unknown error',
719
- }));
720
- }
721
- // Track analytics (success or failure, includes partial fills)
722
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackPositionCloseResult).call(this, {
723
- position,
724
- result,
725
- params,
726
- context,
727
- duration: completionDuration,
728
- bulkActionId,
729
- });
730
- return result;
731
- }
732
- catch (error) {
733
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
734
- traceData = {
735
- success: false,
736
- error: error instanceof Error ? error.message : 'Unknown error',
737
- };
738
- // Track analytics for exception
739
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackPositionCloseResult).call(this, {
740
- position,
741
- result: null,
742
- error: error instanceof Error ? error : undefined,
743
- params,
744
- context,
745
- duration: completionDuration,
746
- bulkActionId,
747
- });
748
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.closePosition'), {
749
- tags: {
750
- feature: perpsConfig_js_1.PERPS_CONSTANTS.FeatureName,
751
- provider: context.tracingContext.provider,
752
- network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',
753
- },
754
- context: {
755
- name: context.errorContext.controller,
756
- data: {
757
- method: context.errorContext.method,
758
- symbol: params.symbol,
759
- },
760
- },
761
- });
762
- throw error;
763
- }
764
- finally {
765
- // Always end trace on exit (success or failure)
766
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
767
- name: index_js_1.PerpsTraceNames.ClosePosition,
768
- id: traceId,
769
- data: traceData,
770
- });
771
- }
772
- }
773
- /**
774
- * Close multiple positions with full orchestration
775
- * Handles tracing, fee discounts, batch operations, and analytics
776
- *
777
- * @param options - The configuration options.
778
- * @param options.provider - The perps provider instance.
779
- * @param options.params - The operation parameters.
780
- * @param options.context - The service context for dependencies.
781
- * @returns The result of the operation.
782
- */
783
- async closePositions(options) {
784
- const { provider, params, context } = options;
785
- const traceId = (0, uuid_1.v4)();
786
- // Correlation id linking every per-item event to the batch summary
787
- const bulkActionId = (0, uuid_1.v4)();
788
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
789
- let operationResult = null;
790
- let operationError = null;
791
- try {
792
- // Start trace for batch operation
793
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
794
- name: index_js_1.PerpsTraceNames.ClosePosition,
795
- id: traceId,
796
- op: index_js_1.PerpsTraceOperations.PositionManagement,
797
- tags: {
798
- provider: context.tracingContext.provider,
799
- isBatch: 'true',
800
- isTestnet: String(context.tracingContext.isTestnet),
801
- },
802
- data: {
803
- closeAll: params.closeAll ? 'true' : 'false',
804
- symbolCount: params.symbols?.length ?? 0,
805
- },
806
- });
807
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('[closePositions] Batch method check', {
808
- providerType: provider.protocolId,
809
- providerKeys: Object.keys(provider).filter((key) => key.includes('close')),
810
- });
811
- // Use batch close if provider supports it (provider handles filtering)
812
- if (provider.closePositions) {
813
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
814
- operationResult = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
815
- provider,
816
- feeResolution,
817
- operation: async () => {
818
- if (!provider.closePositions) {
819
- throw new Error('closePositions method not available');
820
- }
821
- return provider.closePositions(params);
822
- },
823
- });
824
- }
825
- else {
826
- // Fallback: Get positions, filter, and close in parallel
827
- if (!context.getPositions) {
828
- throw new Error('getPositions callback not provided in context');
829
- }
830
- const positions = await context.getPositions();
831
- const positionsToClose = params.closeAll === true ||
832
- !params.symbols ||
833
- params.symbols.length === 0
834
- ? positions
835
- : positions.filter((pos) => params.symbols?.includes(pos.symbol));
836
- if (positionsToClose.length === 0) {
837
- operationResult = {
838
- success: false,
839
- successCount: 0,
840
- failureCount: 0,
841
- results: [],
842
- };
843
- return operationResult;
844
- }
845
- const results = await Promise.allSettled(positionsToClose.map((position) => this.closePosition({
846
- provider,
847
- params: { symbol: position.symbol },
848
- context,
849
- reportOrderToDataLake: () => Promise.resolve({ success: true }), // No-op for batch fallback
850
- bulkActionId,
851
- })));
852
- // Aggregate results
853
- const successCount = results.filter((res) => res.status === 'fulfilled' && res.value.success).length;
854
- const failureCount = results.length - successCount;
855
- operationResult = {
856
- success: successCount > 0,
857
- successCount,
858
- failureCount,
859
- results: results.map((result, index) => {
860
- let error;
861
- if (result.status === 'rejected') {
862
- error =
863
- result.reason instanceof Error
864
- ? result.reason.message
865
- : 'Unknown error';
866
- }
867
- else if (result.status === 'fulfilled' && !result.value.success) {
868
- error = result.value.error;
869
- }
870
- return {
871
- symbol: positionsToClose[index].symbol,
872
- success: Boolean(result.status === 'fulfilled' && result.value.success),
873
- error,
874
- };
875
- }),
876
- };
877
- }
878
- if (provider.closePositions &&
879
- operationResult &&
880
- operationResult.failureCount > 0) {
881
- const failureSummary = operationResult.results
882
- .filter((result) => !result.success)
883
- .map((result) => `${result.symbol}: ${result.error ?? 'Unknown error'}`)
884
- .join('; ');
885
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error(new Error(`closePositions batch failure: ${operationResult.failureCount}/${operationResult.results.length} failed - ${failureSummary}`), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'closePositions', {
886
- successCount: operationResult.successCount,
887
- failureCount: operationResult.failureCount,
888
- symbols: params.symbols?.length ?? 0,
889
- closeAll: params.closeAll,
890
- }));
891
- }
892
- return operationResult;
893
- }
894
- catch (error) {
895
- operationError =
896
- error instanceof Error ? error : new Error(String(error));
897
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.closePositions'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'closePositions', {
898
- symbols: params.symbols?.length ?? 0,
899
- closeAll: params.closeAll,
900
- }));
901
- throw error;
902
- }
903
- finally {
904
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
905
- // Track batch close event (success or failure)
906
- const batchCloseProps = {
907
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: operationResult?.success && operationResult.successCount > 0
908
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
909
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
910
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
911
- [eventNames_js_1.PERPS_EVENT_PROPERTY.BULK_ACTION_ID]: bulkActionId,
912
- [eventNames_js_1.PERPS_EVENT_PROPERTY.NUMBER_POSITIONS_CLOSED]: operationResult?.successCount ?? 0,
913
- };
914
- if (operationError) {
915
- batchCloseProps[eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE] =
916
- operationError.message;
917
- }
918
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.PositionCloseTransaction, batchCloseProps);
919
- // Invalidate standalone caches on successful batch close
920
- if (operationResult?.success && operationResult.successCount > 0) {
921
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
922
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
923
- }
924
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
925
- name: index_js_1.PerpsTraceNames.ClosePosition,
926
- id: traceId,
927
- });
928
- }
929
- }
930
- /**
931
- * Update TP/SL for an existing position with full orchestration
932
- * Handles tracing, fee discounts, state management, and analytics
933
- *
934
- * @param options - The configuration options.
935
- * @param options.provider - The perps provider instance.
936
- * @param options.params - The operation parameters.
937
- * @param options.context - The service context for dependencies.
938
- * @returns The result of the operation.
939
- */
940
- async updatePositionTPSL(options) {
941
- const { provider, params, context } = options;
942
- const traceId = (0, uuid_1.v4)();
943
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
944
- let traceData;
945
- let result;
946
- let errorMessage;
947
- // Extract tracking data with defaults
948
- const direction = params.trackingData?.direction;
949
- const positionSize = params.trackingData?.positionSize;
950
- const source = params.trackingData?.source ?? eventNames_js_1.PERPS_EVENT_VALUE.SOURCE.TP_SL_VIEW;
951
- const takeProfitPercentage = params.trackingData?.takeProfitPercentage;
952
- const stopLossPercentage = params.trackingData?.stopLossPercentage;
953
- const isEditingExistingPosition = params.trackingData?.isEditingExistingPosition ?? false;
954
- try {
955
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
956
- name: index_js_1.PerpsTraceNames.UpdateTpsl,
957
- id: traceId,
958
- op: index_js_1.PerpsTraceOperations.PositionManagement,
959
- tags: {
960
- provider: context.tracingContext.provider,
961
- market: params.symbol,
962
- isTestnet: String(context.tracingContext.isTestnet),
963
- },
964
- data: {
965
- takeProfitPrice: params.takeProfitPrice ?? '',
966
- stopLossPrice: params.stopLossPrice ?? '',
967
- },
968
- });
969
- // Emit submitted event before the provider round-trip
970
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackSubmitted).call(this, index_js_1.PerpsAnalyticsEvent.RiskManagement, {
971
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
972
- [eventNames_js_1.PERPS_EVENT_PROPERTY.SOURCE]: source,
973
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
974
- });
975
- // Get fee discount from rewards
976
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
977
- // Execute with fee discount management
978
- result = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
979
- provider,
980
- feeResolution,
981
- operation: () => provider.updatePositionTPSL(params),
982
- });
983
- if (result.success) {
984
- // Update state on success
985
- if (context.stateManager) {
986
- context.stateManager.update((state) => {
987
- state.lastUpdateTimestamp = Date.now();
988
- });
989
- }
990
- traceData = { success: true };
991
- }
992
- else {
993
- errorMessage = result.error ?? 'Unknown error';
994
- traceData = { success: false, error: errorMessage };
995
- }
996
- return result;
997
- }
998
- catch (error) {
999
- errorMessage = error instanceof Error ? error.message : 'Unknown error';
1000
- traceData = { success: false, error: errorMessage };
1001
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.updatePositionTPSL'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'updatePositionTPSL', {
1002
- symbol: params.symbol,
1003
- hasTakeProfit: Boolean(params.takeProfitPrice),
1004
- hasStopLoss: Boolean(params.stopLossPrice),
1005
- }));
1006
- throw error;
1007
- }
1008
- finally {
1009
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1010
- // Determine screen type based on whether editing existing position
1011
- const screenType = isEditingExistingPosition
1012
- ? eventNames_js_1.PERPS_EVENT_VALUE.SCREEN_TYPE.EDIT_TPSL
1013
- : eventNames_js_1.PERPS_EVENT_VALUE.SCREEN_TYPE.CREATE_TPSL;
1014
- // Determine if TP/SL are set
1015
- const hasTakeProfit = Boolean(params.takeProfitPrice);
1016
- const hasStopLoss = Boolean(params.stopLossPrice);
1017
- // Determine TP/SL action type
1018
- let tpslAction;
1019
- if (hasTakeProfit && hasStopLoss) {
1020
- tpslAction = eventNames_js_1.PERPS_EVENT_VALUE.ACTION.TPSL;
1021
- }
1022
- else if (hasTakeProfit) {
1023
- tpslAction = eventNames_js_1.PERPS_EVENT_VALUE.ACTION.TP;
1024
- }
1025
- else if (hasStopLoss) {
1026
- tpslAction = eventNames_js_1.PERPS_EVENT_VALUE.ACTION.SL;
1027
- }
1028
- // Build comprehensive event properties
1029
- const eventProperties = {
1030
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: result?.success
1031
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
1032
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1033
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
1034
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1035
- [eventNames_js_1.PERPS_EVENT_PROPERTY.SOURCE]: source,
1036
- [eventNames_js_1.PERPS_EVENT_PROPERTY.SCREEN_TYPE]: screenType,
1037
- [eventNames_js_1.PERPS_EVENT_PROPERTY.HAS_TAKE_PROFIT]: hasTakeProfit,
1038
- [eventNames_js_1.PERPS_EVENT_PROPERTY.HAS_STOP_LOSS]: hasStopLoss,
1039
- ...(tpslAction && {
1040
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: tpslAction,
1041
- }),
1042
- ...(direction && {
1043
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: direction === 'long'
1044
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1045
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
1046
- }),
1047
- ...(positionSize !== undefined && {
1048
- [eventNames_js_1.PERPS_EVENT_PROPERTY.POSITION_SIZE]: positionSize,
1049
- }),
1050
- ...(params.takeProfitPrice && {
1051
- [eventNames_js_1.PERPS_EVENT_PROPERTY.TAKE_PROFIT_PRICE]: parseFloat(params.takeProfitPrice),
1052
- }),
1053
- ...(params.stopLossPrice && {
1054
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STOP_LOSS_PRICE]: parseFloat(params.stopLossPrice),
1055
- }),
1056
- ...(takeProfitPercentage !== undefined && {
1057
- [eventNames_js_1.PERPS_EVENT_PROPERTY.TAKE_PROFIT_PERCENTAGE]: takeProfitPercentage,
1058
- }),
1059
- ...(stopLossPercentage !== undefined && {
1060
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STOP_LOSS_PERCENTAGE]: stopLossPercentage,
1061
- }),
1062
- ...(errorMessage && {
1063
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
1064
- }),
1065
- // Discovery attribution
1066
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
1067
- };
1068
- // Track event once with all properties
1069
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.RiskManagement, eventProperties);
1070
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
1071
- name: index_js_1.PerpsTraceNames.UpdateTpsl,
1072
- id: traceId,
1073
- data: traceData,
1074
- });
1075
- }
1076
- }
1077
- /**
1078
- * Update margin for an existing position (add or remove)
1079
- *
1080
- * @param options - The configuration options.
1081
- * @param options.provider - The perps provider instance.
1082
- * @param options.symbol - The trading pair symbol.
1083
- * @param options.amount - The amount value.
1084
- * @param options.context - The service context for dependencies.
1085
- * @returns The result of the operation.
1086
- */
1087
- async updateMargin(options) {
1088
- const { provider, symbol, amount, context } = options;
1089
- const traceId = (0, uuid_1.v4)();
1090
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
1091
- try {
1092
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
1093
- name: index_js_1.PerpsTraceNames.UpdateMargin,
1094
- id: traceId,
1095
- op: index_js_1.PerpsTraceOperations.PositionManagement,
1096
- tags: {
1097
- provider: context.tracingContext.provider,
1098
- symbol,
1099
- isAdd: String(parseFloat(amount) > 0),
1100
- isTestnet: String(context.tracingContext.isTestnet),
1101
- },
1102
- });
1103
- // Call provider method
1104
- const result = await provider.updateMargin?.({ symbol, amount });
1105
- if (!result) {
1106
- throw new Error('Provider does not support margin adjustment');
1107
- }
1108
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1109
- if (result.success) {
1110
- // Update state on success
1111
- if (context.stateManager) {
1112
- context.stateManager.update((state) => {
1113
- state.lastUpdateTimestamp = Date.now();
1114
- });
1115
- }
1116
- // Track success analytics
1117
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.RiskManagement, {
1118
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED,
1119
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: symbol,
1120
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: parseFloat(amount) > 0 ? 'add_margin' : 'remove_margin',
1121
- [eventNames_js_1.PERPS_EVENT_PROPERTY.MARGIN_USED]: Math.abs(parseFloat(amount)),
1122
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1123
- });
1124
- // Invalidate standalone caches so external hooks refresh
1125
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
1126
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
1127
- }
1128
- else {
1129
- // Track failure analytics for a non-throwing provider failure so the
1130
- // terminal Risk Management event is emitted exactly once here (the
1131
- // thrown path below handles exceptions).
1132
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.RiskManagement, {
1133
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1134
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: symbol,
1135
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: parseFloat(amount) > 0 ? 'add_margin' : 'remove_margin',
1136
- [eventNames_js_1.PERPS_EVENT_PROPERTY.MARGIN_USED]: Math.abs(parseFloat(amount)),
1137
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1138
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',
1139
- });
1140
- }
1141
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
1142
- name: index_js_1.PerpsTraceNames.UpdateMargin,
1143
- id: traceId,
1144
- data: { success: result.success, error: result.error ?? '' },
1145
- });
1146
- return result;
1147
- }
1148
- catch (error) {
1149
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1150
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
1151
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.updateMargin'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'updateMargin', { symbol, amount }));
1152
- // Track failure analytics
1153
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.RiskManagement, {
1154
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1155
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: symbol,
1156
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: parseFloat(amount) > 0 ? 'add_margin' : 'remove_margin',
1157
- [eventNames_js_1.PERPS_EVENT_PROPERTY.MARGIN_USED]: Math.abs(parseFloat(amount)),
1158
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1159
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
1160
- });
1161
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
1162
- name: index_js_1.PerpsTraceNames.UpdateMargin,
1163
- id: traceId,
1164
- data: { success: false, error: errorMessage },
1165
- });
1166
- throw error;
1167
- }
1168
- }
1169
- /**
1170
- * Flip position (reverse direction while keeping size and leverage)
1171
- *
1172
- * @param options - The configuration options.
1173
- * @param options.provider - The perps provider instance.
1174
- * @param options.position - The position data.
1175
- * @param options.trackingData - Optional tracking data for analytics events.
1176
- * @param options.context - The service context for dependencies.
1177
- * @returns The result of the operation.
1178
- */
1179
- async flipPosition(options) {
1180
- const { provider, position, trackingData, context } = options;
1181
- const traceId = (0, uuid_1.v4)();
1182
- const startTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
1183
- try {
1184
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.trace({
1185
- name: index_js_1.PerpsTraceNames.FlipPosition,
1186
- id: traceId,
1187
- op: index_js_1.PerpsTraceOperations.PositionManagement,
1188
- tags: {
1189
- provider: context.tracingContext.provider,
1190
- symbol: position.symbol,
1191
- isTestnet: String(context.tracingContext.isTestnet),
1192
- },
1193
- });
1194
- // Calculate flip parameters
1195
- const positionSize = Math.abs(parseFloat(position.size));
1196
- const isCurrentlyLong = parseFloat(position.size) > 0;
1197
- const oppositeDirection = !isCurrentlyLong;
1198
- const flipSize = positionSize * 2;
1199
- // Direction-specific flip action, shared by the submitted and terminal events
1200
- const flipAction = isCurrentlyLong
1201
- ? eventNames_js_1.PERPS_EVENT_VALUE.ACTION.FLIP_LONG_TO_SHORT
1202
- : eventNames_js_1.PERPS_EVENT_VALUE.ACTION.FLIP_SHORT_TO_LONG;
1203
- // Create order params for flip
1204
- // Use 2x position size: 1x to close current position + 1x to open opposite position.
1205
- // Do not pass the position entry price as currentPrice: the provider must fetch
1206
- // live market data for validation and IOC pricing.
1207
- const orderParams = {
1208
- symbol: position.symbol,
1209
- isBuy: oppositeDirection,
1210
- size: flipSize.toString(),
1211
- orderType: 'market',
1212
- leverage: position.leverage?.value,
1213
- };
1214
- // Emit submitted event before the provider round-trip, keeping flip
1215
- // trades aligned with the consolidated placeOrder pipeline.
1216
- __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_trackSubmitted).call(this, index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
1217
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1218
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: oppositeDirection
1219
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1220
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
1221
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: 'market',
1222
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value || 1,
1223
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
1224
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: flipAction,
1225
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, trackingData),
1226
- });
1227
- const feeResolution = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateFeeDiscountWithMeasurement).call(this);
1228
- // Place flip order (HyperLiquid handles margin transfer automatically)
1229
- const result = await __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_withFeeDiscount).call(this, {
1230
- provider,
1231
- feeResolution,
1232
- operation: () => provider.placeOrder(orderParams),
1233
- });
1234
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1235
- const executedPrice = parseFloat(result.averagePrice ?? position.entryPrice);
1236
- if (result.success) {
1237
- // Update state on success
1238
- if (context.stateManager) {
1239
- context.stateManager.update((state) => {
1240
- state.lastUpdateTimestamp = Date.now();
1241
- });
1242
- }
1243
- // Track success analytics with direction-specific flip action
1244
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
1245
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED,
1246
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1247
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: oppositeDirection
1248
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1249
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
1250
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: 'market',
1251
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value || 1,
1252
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
1253
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1254
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: flipAction,
1255
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: positionSize * executedPrice,
1256
- // MetaMask fee on flip trades
1257
- ...(trackingData?.metamaskFee !== undefined && {
1258
- [eventNames_js_1.PERPS_EVENT_PROPERTY.METAMASK_FEE]: trackingData.metamaskFee,
1259
- }),
1260
- ...(trackingData?.vipTier !== undefined && {
1261
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_TIER]: trackingData.vipTier,
1262
- }),
1263
- ...(trackingData?.vipDiscount !== undefined && {
1264
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_DISCOUNT]: trackingData.vipDiscount,
1265
- }),
1266
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, trackingData),
1267
- });
1268
- // Invalidate standalone caches so external hooks refresh
1269
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'positions' });
1270
- __classPrivateFieldGet(this, _TradingService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
1271
- }
1272
- else {
1273
- // Provider rejected the flip without throwing: emit a terminal failed
1274
- // event so every submitted flip is paired with executed or failed.
1275
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
1276
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1277
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1278
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: flipAction,
1279
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1280
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',
1281
- ...(trackingData?.vipTier !== undefined && {
1282
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_TIER]: trackingData.vipTier,
1283
- }),
1284
- ...(trackingData?.vipDiscount !== undefined && {
1285
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_DISCOUNT]: trackingData.vipDiscount,
1286
- }),
1287
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, trackingData),
1288
- });
1289
- }
1290
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
1291
- name: index_js_1.PerpsTraceNames.FlipPosition,
1292
- id: traceId,
1293
- data: { success: result.success ?? false, error: result.error ?? '' },
1294
- });
1295
- return result;
1296
- }
1297
- catch (error) {
1298
- const completionDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - startTime;
1299
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
1300
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.flipPosition'), __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_getErrorContext).call(this, 'flipPosition', { symbol: position.symbol }));
1301
- // Track failure analytics with direction-specific flip action
1302
- const wasLong = parseFloat(position.size) > 0;
1303
- const failFlipAction = wasLong
1304
- ? eventNames_js_1.PERPS_EVENT_VALUE.ACTION.FLIP_LONG_TO_SHORT
1305
- : eventNames_js_1.PERPS_EVENT_VALUE.ACTION.FLIP_SHORT_TO_LONG;
1306
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
1307
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED,
1308
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1309
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION]: failFlipAction,
1310
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
1311
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
1312
- ...(trackingData?.vipTier !== undefined && {
1313
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_TIER]: trackingData.vipTier,
1314
- }),
1315
- ...(trackingData?.vipDiscount !== undefined && {
1316
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_DISCOUNT]: trackingData.vipDiscount,
1317
- }),
1318
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, trackingData),
1319
- });
1320
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.endTrace({
1321
- name: index_js_1.PerpsTraceNames.FlipPosition,
1322
- id: traceId,
1323
- data: { success: false, error: errorMessage },
1324
- });
1325
- throw error;
1326
- }
1327
- }
1328
- }
1329
- exports.TradingService = TradingService;
1330
- _TradingService_deps = new WeakMap(), _TradingService_controllerDeps = new WeakMap(), _TradingService_feeContextTail = new WeakMap(), _TradingService_instances = new WeakSet(), _TradingService_getErrorContext = function _TradingService_getErrorContext(method, additionalContext) {
1331
- return {
1332
- controller: 'TradingService',
1333
- method,
1334
- ...additionalContext,
1335
- };
1336
- }, _TradingService_buildAttributionProperties = function _TradingService_buildAttributionProperties(trackingData) {
1337
- const properties = {};
1338
- if (trackingData?.entryPoint !== undefined) {
1339
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ENTRY_POINT] = trackingData.entryPoint;
1340
- }
1341
- if (trackingData?.discoverySource !== undefined) {
1342
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.DISCOVERY_SOURCE] =
1343
- trackingData.discoverySource;
1344
- }
1345
- if (trackingData?.perpDiscoverySource !== undefined) {
1346
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.PERP_DISCOVERY_SOURCE] =
1347
- trackingData.perpDiscoverySource;
1348
- }
1349
- if (trackingData?.hlFeeRate !== undefined) {
1350
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.HL_FEE_RATE] = trackingData.hlFeeRate;
1351
- }
1352
- return properties;
1353
- }, _TradingService_trackSubmitted = function _TradingService_trackSubmitted(event, properties) {
1354
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(event, {
1355
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.SUBMITTED,
1356
- ...properties,
1357
- });
1358
- }, _TradingService_trackOrderResult = function _TradingService_trackOrderResult(options) {
1359
- const { result, error, params, duration } = options;
1360
- const status = result?.success === true
1361
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
1362
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED;
1363
- // Build base properties
1364
- const properties = {
1365
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: status,
1366
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
1367
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: params.isBuy
1368
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1369
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
1370
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.orderType,
1371
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: parseFloat(String(params.leverage ?? 1)),
1372
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: parseFloat(result?.filledSize ?? params.size),
1373
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: duration,
1374
- };
1375
- // Add optional properties
1376
- if (params.trackingData?.marginUsed !== undefined) {
1377
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.MARGIN_USED] =
1378
- params.trackingData.marginUsed;
1379
- }
1380
- if (params.trackingData?.totalFee !== undefined) {
1381
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.FEES] = params.trackingData.totalFee;
1382
- }
1383
- if (result?.averagePrice ?? params.trackingData?.marketPrice) {
1384
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET_PRICE] = result?.averagePrice
1385
- ? parseFloat(result.averagePrice)
1386
- : params.trackingData?.marketPrice;
1387
- }
1388
- // Trigger limit placements carry a real limit price too, so the companion
1389
- // property must not go missing when order_type is stop_limit/take_profit_limit.
1390
- if ((0, orderTypes_js_2.isLimitExecutionOrderType)(params.orderType) && params.price) {
1391
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.LIMIT_PRICE] = parseFloat(params.price);
1392
- }
1393
- if (params.trackingData?.source) {
1394
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.SOURCE] = params.trackingData.source;
1395
- }
1396
- if (params.trackingData?.chartLibrary) {
1397
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.CHART_LIBRARY] =
1398
- params.trackingData.chartLibrary;
1399
- }
1400
- if (params.trackingData?.tradeAction) {
1401
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ACTION] = params.trackingData.tradeAction;
1402
- }
1403
- // Pay with any token: trade_with_token (boolean); when true, include mm_pay_token_selected and mm_pay_network_selected; when false (Perps balance), include mm_pay_token_selected: "Perps Balance"
1404
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.TRADE_WITH_TOKEN] =
1405
- params.trackingData?.tradeWithToken === true;
1406
- if (params.trackingData?.tradeWithToken === true) {
1407
- if (params.trackingData.mmPayTokenSelected !== undefined) {
1408
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.MM_PAY_TOKEN_SELECTED] =
1409
- params.trackingData.mmPayTokenSelected;
1410
- }
1411
- if (params.trackingData.mmPayNetworkSelected !== undefined) {
1412
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.MM_PAY_NETWORK_SELECTED] =
1413
- params.trackingData.mmPayNetworkSelected;
1414
- }
1415
- }
1416
- else if (params.trackingData !== undefined) {
1417
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.MM_PAY_TOKEN_SELECTED] =
1418
- eventNames_js_1.PERPS_EVENT_VALUE.MM_PAY_TOKEN.PERPS_BALANCE;
1419
- }
1420
- // Calculate order value in USD (size * price)
1421
- const orderSize = parseFloat(result?.filledSize ?? params.size);
1422
- const assetPrice = result?.averagePrice
1423
- ? parseFloat(result.averagePrice)
1424
- : params.trackingData?.marketPrice;
1425
- if (assetPrice && orderSize) {
1426
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_VALUE] = orderSize * assetPrice;
1427
- }
1428
- // Add success-specific properties
1429
- if (status === eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED) {
1430
- if (params.trackingData?.metamaskFee !== undefined) {
1431
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.METAMASK_FEE] =
1432
- params.trackingData.metamaskFee;
1433
- }
1434
- if (params.trackingData?.metamaskFeeRate !== undefined) {
1435
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.METAMASK_FEE_RATE] =
1436
- params.trackingData.metamaskFeeRate;
1437
- }
1438
- if (params.trackingData?.feeDiscountPercentage !== undefined) {
1439
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.DISCOUNT_PERCENTAGE] =
1440
- params.trackingData.feeDiscountPercentage;
1441
- }
1442
- if (params.trackingData?.estimatedPoints !== undefined) {
1443
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ESTIMATED_REWARDS] =
1444
- params.trackingData.estimatedPoints;
1445
- }
1446
- if (params.takeProfitPrice) {
1447
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.TAKE_PROFIT_PRICE] = parseFloat(params.takeProfitPrice);
1448
- }
1449
- if (params.stopLossPrice) {
1450
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.STOP_LOSS_PRICE] = parseFloat(params.stopLossPrice);
1451
- }
1452
- }
1453
- else {
1454
- // Add failure-specific properties
1455
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE] =
1456
- error?.message ?? result?.error ?? 'Unknown error';
1457
- }
1458
- if (params.trackingData?.vipTier !== undefined) {
1459
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_TIER] = params.trackingData.vipTier;
1460
- }
1461
- if (params.trackingData?.vipDiscount !== undefined) {
1462
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_DISCOUNT] =
1463
- params.trackingData.vipDiscount;
1464
- }
1465
- if (params.trackingData?.abTests &&
1466
- Object.keys(params.trackingData.abTests).length > 0) {
1467
- properties[eventNames_js_1.PERPS_EVENT_PROPERTY.AB_TESTS] = params.trackingData.abTests;
1468
- }
1469
- // Propagate discovery attribution + hl_fee_rate
1470
- Object.assign(properties, __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData));
1471
- // Emit an additional partially filled trade event when the fill is partial,
1472
- // mirroring the close path so the fill's partiality is visible in analytics
1473
- // rather than hidden behind a status=executed event. Classification is based
1474
- // on the provider's final submitted size (post precision rounding, USD
1475
- // recalculation, and $10-minimum retry), not the caller's pre-normalization
1476
- // params.size — the provider transforms the size before submission and a
1477
- // complete fill of the normalized size must not look partial. When the
1478
- // provider did not report a submitted size we do not classify (rather than
1479
- // guess from params.size). The partial event mirrors the close schema:
1480
- // order_size = submitted size, amount_filled = filled, remaining = the rest.
1481
- // Compare and subtract the decimal size strings with arbitrary-precision
1482
- // math (BigNumber): routing them through parseFloat can introduce
1483
- // binary-float artifacts that collapse distinct values (misclassifying the
1484
- // fill) or leave e-17 dust in remaining_amount. Only convert to Number for
1485
- // the emitted analytics values, after the exact decimal subtraction.
1486
- const submittedSize = result?.submittedSize === undefined
1487
- ? undefined
1488
- : new bignumber_js_1.BigNumber(result.submittedSize);
1489
- const filledSize = result?.filledSize === undefined
1490
- ? undefined
1491
- : new bignumber_js_1.BigNumber(result.filledSize);
1492
- if (result?.success === true &&
1493
- submittedSize !== undefined &&
1494
- filledSize !== undefined &&
1495
- submittedSize.isFinite() &&
1496
- filledSize.isFinite() &&
1497
- filledSize.gt(0) &&
1498
- filledSize.lt(submittedSize)) {
1499
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, {
1500
- ...properties,
1501
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: eventNames_js_1.PERPS_EVENT_VALUE.STATUS.PARTIALLY_FILLED,
1502
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: submittedSize.toNumber(),
1503
- [eventNames_js_1.PERPS_EVENT_PROPERTY.AMOUNT_FILLED]: filledSize.toNumber(),
1504
- [eventNames_js_1.PERPS_EVENT_PROPERTY.REMAINING_AMOUNT]: submittedSize
1505
- .minus(filledSize)
1506
- .toNumber(),
1507
- });
1508
- }
1509
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.TradeTransaction, properties);
1510
- }, _TradingService_handleOrderSuccess =
1511
- /**
1512
- * Handle successful order placement (state updates, analytics, data lake reporting)
1513
- *
1514
- * @param options - The configuration options.
1515
- * @param options.params - The operation parameters.
1516
- * @param options.context - The service context for dependencies.
1517
- * @param options.reportOrderToDataLake - The report order to data lake value.
1518
- */
1519
- async function _TradingService_handleOrderSuccess(options) {
1520
- const { params, context, reportOrderToDataLake } = options;
1521
- // Update state on success
1522
- if (context.stateManager) {
1523
- context.stateManager.update((state) => {
1524
- state.lastUpdateTimestamp = Date.now();
1525
- });
1526
- }
1527
- // Save executed trade configuration for this market
1528
- if (params.leverage && context.saveTradeConfiguration) {
1529
- context.saveTradeConfiguration(params.symbol, params.leverage);
1530
- }
1531
- // Report to data lake (fire-and-forget with retry)
1532
- reportOrderToDataLake({
1533
- action: 'open',
1534
- symbol: params.symbol,
1535
- slPrice: params.stopLossPrice
1536
- ? parseFloat(params.stopLossPrice)
1537
- : undefined,
1538
- tpPrice: params.takeProfitPrice
1539
- ? parseFloat(params.takeProfitPrice)
1540
- : undefined,
1541
- }).catch((error) => {
1542
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.handleOrderSuccess'), {
1543
- tags: {
1544
- feature: perpsConfig_js_1.PERPS_CONSTANTS.FeatureName,
1545
- provider: context.tracingContext.provider,
1546
- network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',
1547
- },
1548
- context: {
1549
- name: context.errorContext.controller,
1550
- data: {
1551
- method: context.errorContext.method,
1552
- operation: 'reportOrderToDataLake',
1553
- symbol: params.symbol,
1554
- },
1555
- },
1556
- });
1557
- });
1558
- }, _TradingService_withFeeDiscount =
1559
- /**
1560
- * Execute a trading operation with fee discount context
1561
- * Ensures fee discount is always cleared after operation (success or failure)
1562
- *
1563
- * @param options - The configuration options.
1564
- * @param options.provider - The perps provider instance.
1565
- * @param options.feeResolution - The resolved fee and attribution source.
1566
- * @param options.operation - The operation value.
1567
- * @returns The result of the operation.
1568
- */
1569
- async function _TradingService_withFeeDiscount(options) {
1570
- const { provider, feeResolution, operation } = options;
1571
- const previous = __classPrivateFieldGet(this, _TradingService_feeContextTail, "f");
1572
- let release = () => undefined;
1573
- __classPrivateFieldSet(this, _TradingService_feeContextTail, new Promise((resolve) => {
1574
- release = resolve;
1575
- }), "f");
1576
- await previous;
1577
- try {
1578
- if (provider.setUserFeeResolution) {
1579
- provider.setUserFeeResolution(feeResolution);
1580
- }
1581
- else if (provider.setUserFeeDiscount) {
1582
- provider.setUserFeeDiscount(feeResolution?.discountBips);
1583
- }
1584
- if (feeResolution) {
1585
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Fee resolution set in provider', {
1586
- feeDiscountBips: feeResolution.discountBips,
1587
- feeSource: feeResolution.source,
1588
- });
1589
- }
1590
- // Execute the operation
1591
- return await operation();
1592
- }
1593
- finally {
1594
- // Always clear discount context, even on exception
1595
- if (provider.setUserFeeResolution) {
1596
- provider.setUserFeeResolution(undefined);
1597
- }
1598
- else if (provider.setUserFeeDiscount) {
1599
- provider.setUserFeeDiscount(undefined);
1600
- }
1601
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Fee resolution cleared from provider');
1602
- release();
1603
- }
1604
- }, _TradingService_loadPositionData =
1605
- /**
1606
- * Load position data with performance measurement
1607
- *
1608
- * @param options - The configuration options.
1609
- * @param options.symbol - The trading pair symbol.
1610
- * @param options.context - The service context for dependencies.
1611
- * @returns The result of the operation.
1612
- */
1613
- async function _TradingService_loadPositionData(options) {
1614
- const { symbol, context } = options;
1615
- const positionLoadStart = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
1616
- try {
1617
- const positions = context.getPositions
1618
- ? await context.getPositions()
1619
- : [];
1620
- const position = positions.find((pos) => pos.symbol === symbol);
1621
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.setMeasurement(performanceMetrics_js_1.PerpsMeasurementName.PerpsGetPositionsOperation, __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - positionLoadStart, 'millisecond');
1622
- return position;
1623
- }
1624
- catch (error) {
1625
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Could not get position data for tracking', error instanceof Error ? error.message : String(error));
1626
- return undefined;
1627
- }
1628
- }, _TradingService_calculateCloseMetrics = function _TradingService_calculateCloseMetrics(position, params, result) {
1629
- const direction = parseFloat(position.size) > 0
1630
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1631
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT;
1632
- const filledSize = result.filledSize ? parseFloat(result.filledSize) : 0;
1633
- const requestedSize = params.size
1634
- ? parseFloat(params.size)
1635
- : Math.abs(parseFloat(position.size));
1636
- const isPartiallyFilled = filledSize > 0 && filledSize < requestedSize;
1637
- const orderType = params.orderType ?? eventNames_js_1.PERPS_EVENT_VALUE.ORDER_TYPE.MARKET;
1638
- const closePercentage = params.size
1639
- ? (parseFloat(params.size) / Math.abs(parseFloat(position.size))) * 100
1640
- : 100;
1641
- const closeType = closePercentage === 100
1642
- ? eventNames_js_1.PERPS_EVENT_VALUE.CLOSE_TYPE.FULL
1643
- : eventNames_js_1.PERPS_EVENT_VALUE.CLOSE_TYPE.PARTIAL;
1644
- return {
1645
- direction,
1646
- closePercentage,
1647
- closeType,
1648
- orderType,
1649
- filledSize,
1650
- requestedSize,
1651
- isPartiallyFilled,
1652
- };
1653
- }, _TradingService_buildCloseEventProperties = function _TradingService_buildCloseEventProperties(position, params, metrics, result, status, error) {
1654
- // Effective leverage = positionUSD / marginUSD, rounded to 1 decimal place.
1655
- // Computed from the live position rather than the configured leverage so it's
1656
- // populated for every close, including TP/SL triggers.
1657
- const positionUSD = Math.abs(parseFloat(position.positionValue));
1658
- const marginUSD = parseFloat(position.marginUsed);
1659
- const effectiveLeverage = Number.isFinite(positionUSD) &&
1660
- Number.isFinite(marginUSD) &&
1661
- marginUSD > 0
1662
- ? Math.round((positionUSD / marginUSD) * 10) / 10
1663
- : undefined;
1664
- const baseProperties = {
1665
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: status,
1666
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: position.symbol,
1667
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DIRECTION]: metrics.direction,
1668
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: metrics.orderType,
1669
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_SIZE]: metrics.requestedSize,
1670
- [eventNames_js_1.PERPS_EVENT_PROPERTY.OPEN_POSITION_SIZE]: Math.abs(parseFloat(position.size)),
1671
- [eventNames_js_1.PERPS_EVENT_PROPERTY.PERCENTAGE_CLOSED]: metrics.closePercentage,
1672
- ...(position.unrealizedPnl && {
1673
- [eventNames_js_1.PERPS_EVENT_PROPERTY.PNL_DOLLAR]: parseFloat(position.unrealizedPnl),
1674
- }),
1675
- ...(position.returnOnEquity && {
1676
- [eventNames_js_1.PERPS_EVENT_PROPERTY.PNL_PERCENT]: parseFloat(position.returnOnEquity) * 100,
1677
- }),
1678
- ...(params.trackingData?.totalFee !== undefined && {
1679
- [eventNames_js_1.PERPS_EVENT_PROPERTY.FEE]: params.trackingData.totalFee,
1680
- }),
1681
- ...(params.trackingData?.metamaskFee !== undefined && {
1682
- [eventNames_js_1.PERPS_EVENT_PROPERTY.METAMASK_FEE]: params.trackingData.metamaskFee,
1683
- }),
1684
- ...(params.trackingData?.metamaskFeeRate !== undefined && {
1685
- [eventNames_js_1.PERPS_EVENT_PROPERTY.METAMASK_FEE_RATE]: params.trackingData.metamaskFeeRate,
1686
- }),
1687
- ...(params.trackingData?.feeDiscountPercentage !== undefined && {
1688
- [eventNames_js_1.PERPS_EVENT_PROPERTY.DISCOUNT_PERCENTAGE]: params.trackingData.feeDiscountPercentage,
1689
- }),
1690
- ...(params.trackingData?.estimatedPoints !== undefined && {
1691
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ESTIMATED_REWARDS]: params.trackingData.estimatedPoints,
1692
- }),
1693
- ...((params.trackingData?.marketPrice ?? result?.averagePrice) && {
1694
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET_PRICE]: result?.averagePrice
1695
- ? parseFloat(result.averagePrice)
1696
- : params.trackingData?.marketPrice,
1697
- }),
1698
- ...(params.orderType &&
1699
- (0, orderTypes_js_2.isLimitExecutionOrderType)(params.orderType) &&
1700
- params.price && {
1701
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LIMIT_PRICE]: parseFloat(params.price),
1702
- }),
1703
- ...(params.trackingData?.receivedAmount !== undefined && {
1704
- [eventNames_js_1.PERPS_EVENT_PROPERTY.RECEIVED_AMOUNT]: params.trackingData.receivedAmount,
1705
- }),
1706
- ...(params.trackingData?.source && {
1707
- [eventNames_js_1.PERPS_EVENT_PROPERTY.SOURCE]: params.trackingData.source,
1708
- }),
1709
- ...(params.trackingData?.vipTier !== undefined && {
1710
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_TIER]: params.trackingData.vipTier,
1711
- }),
1712
- ...(params.trackingData?.vipDiscount !== undefined && {
1713
- [eventNames_js_1.PERPS_EVENT_PROPERTY.VIP_DISCOUNT]: params.trackingData.vipDiscount,
1714
- }),
1715
- // Effective leverage on close events
1716
- ...(effectiveLeverage !== undefined && {
1717
- [eventNames_js_1.PERPS_EVENT_PROPERTY.LEVERAGE]: effectiveLeverage,
1718
- }),
1719
- // Discovery attribution + hl_fee_rate
1720
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
1721
- };
1722
- // Calculate and add order value in USD (size * price)
1723
- const closeAssetPrice = result?.averagePrice
1724
- ? parseFloat(result.averagePrice)
1725
- : params.trackingData?.marketPrice;
1726
- const orderValue = closeAssetPrice && metrics.requestedSize
1727
- ? metrics.requestedSize * closeAssetPrice
1728
- : undefined;
1729
- // Add success-specific properties
1730
- if (status === eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED) {
1731
- return {
1732
- ...baseProperties,
1733
- [eventNames_js_1.PERPS_EVENT_PROPERTY.CLOSE_TYPE]: metrics.closeType,
1734
- ...(orderValue !== undefined && {
1735
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: orderValue,
1736
- }),
1737
- };
1738
- }
1739
- // Add error for failures
1740
- return {
1741
- ...baseProperties,
1742
- ...(error && { [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: error }),
1743
- ...(orderValue !== undefined && {
1744
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_VALUE]: orderValue,
1745
- }),
1746
- };
1747
- }, _TradingService_trackPositionCloseResult = function _TradingService_trackPositionCloseResult(options) {
1748
- const { position, result, error, params, duration, bulkActionId } = options;
1749
- // Bulk action correlation id for batch close events
1750
- const bulkActionProps = bulkActionId
1751
- ? { [eventNames_js_1.PERPS_EVENT_PROPERTY.BULK_ACTION_ID]: bulkActionId }
1752
- : {};
1753
- if (!position) {
1754
- // No local position record, yet closePosition already emitted a
1755
- // submitted event and the close may still complete at the provider.
1756
- // Emit a terminal (executed/failed) event so every submitted close has a
1757
- // matching outcome, even without position-derived metrics.
1758
- const status = result?.success === true
1759
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
1760
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED;
1761
- const errorMessage = error?.message ?? result?.error;
1762
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.PositionCloseTransaction, {
1763
- [eventNames_js_1.PERPS_EVENT_PROPERTY.STATUS]: status,
1764
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ASSET]: params.symbol,
1765
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ORDER_TYPE]: params.orderType ?? eventNames_js_1.PERPS_EVENT_VALUE.ORDER_TYPE.MARKET,
1766
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: duration,
1767
- ...(errorMessage && {
1768
- [eventNames_js_1.PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
1769
- }),
1770
- ...__classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildAttributionProperties).call(this, params.trackingData),
1771
- ...bulkActionProps,
1772
- });
1773
- return;
1774
- }
1775
- const metrics = result
1776
- ? __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_calculateCloseMetrics).call(this, position, params, result)
1777
- : {
1778
- direction: parseFloat(position.size) > 0
1779
- ? eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.LONG
1780
- : eventNames_js_1.PERPS_EVENT_VALUE.DIRECTION.SHORT,
1781
- closePercentage: params.size
1782
- ? (parseFloat(params.size) / Math.abs(parseFloat(position.size))) *
1783
- 100
1784
- : 100,
1785
- closeType: eventNames_js_1.PERPS_EVENT_VALUE.CLOSE_TYPE.FULL,
1786
- orderType: params.orderType ?? eventNames_js_1.PERPS_EVENT_VALUE.ORDER_TYPE.MARKET,
1787
- requestedSize: params.size
1788
- ? parseFloat(params.size)
1789
- : Math.abs(parseFloat(position.size)),
1790
- filledSize: 0,
1791
- isPartiallyFilled: false,
1792
- };
1793
- // Track partially filled event if applicable
1794
- if (result?.success && metrics.isPartiallyFilled) {
1795
- const partialProperties = __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildCloseEventProperties).call(this, position, params, metrics, result, eventNames_js_1.PERPS_EVENT_VALUE.STATUS.PARTIALLY_FILLED);
1796
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.PositionCloseTransaction, {
1797
- ...partialProperties,
1798
- [eventNames_js_1.PERPS_EVENT_PROPERTY.AMOUNT_FILLED]: metrics.filledSize,
1799
- [eventNames_js_1.PERPS_EVENT_PROPERTY.REMAINING_AMOUNT]: metrics.requestedSize - metrics.filledSize,
1800
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: duration,
1801
- ...bulkActionProps,
1802
- });
1803
- }
1804
- // Determine status
1805
- const status = result?.success === true
1806
- ? eventNames_js_1.PERPS_EVENT_VALUE.STATUS.EXECUTED
1807
- : eventNames_js_1.PERPS_EVENT_VALUE.STATUS.FAILED;
1808
- const errorMessage = error?.message ?? result?.error;
1809
- // Track main close event
1810
- const eventProperties = __classPrivateFieldGet(this, _TradingService_instances, "m", _TradingService_buildCloseEventProperties).call(this, position, params, metrics, result, status, errorMessage);
1811
- __classPrivateFieldGet(this, _TradingService_deps, "f").metrics.trackPerpsEvent(index_js_1.PerpsAnalyticsEvent.PositionCloseTransaction, {
1812
- ...eventProperties,
1813
- [eventNames_js_1.PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: duration,
1814
- ...bulkActionProps,
1815
- });
1816
- }, _TradingService_handleDataLakeReporting = function _TradingService_handleDataLakeReporting(reportOrderToDataLake, symbol, context) {
1817
- reportOrderToDataLake({
1818
- action: 'close',
1819
- symbol,
1820
- }).catch((error) => {
1821
- __classPrivateFieldGet(this, _TradingService_deps, "f").logger.error((0, errorUtils_js_1.ensureError)(error, 'TradingService.handleDataLakeReporting'), {
1822
- tags: {
1823
- feature: perpsConfig_js_1.PERPS_CONSTANTS.FeatureName,
1824
- provider: context.tracingContext.provider,
1825
- network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',
1826
- },
1827
- context: {
1828
- name: context.errorContext.controller,
1829
- data: {
1830
- method: context.errorContext.method,
1831
- operation: 'reportOrderToDataLake',
1832
- symbol,
1833
- },
1834
- },
1835
- });
1836
- });
1837
- }, _TradingService_calculateFeeDiscountWithMeasurement =
1838
- /**
1839
- * Calculate fee discount with performance measurement
1840
- * Uses controller dependencies injected via setControllerDependencies()
1841
- * Helper method for placeOrder orchestration
1842
- *
1843
- * @returns The result of the operation.
1844
- */
1845
- async function _TradingService_calculateFeeDiscountWithMeasurement() {
1846
- // Check if controller dependencies are available
1847
- if (!__classPrivateFieldGet(this, _TradingService_controllerDeps, "f")) {
1848
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Controller dependencies not set, skipping fee discount');
1849
- return undefined;
1850
- }
1851
- const { rewardsIntegrationService } = __classPrivateFieldGet(this, _TradingService_controllerDeps, "f");
1852
- const orderExecutionFeeDiscountStartTime = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now();
1853
- // Calculate fee discount using messenger pattern (service handles controller access internally)
1854
- const resolution = await rewardsIntegrationService.resolveFee();
1855
- const orderExecutionFeeDiscountDuration = __classPrivateFieldGet(this, _TradingService_deps, "f").performance.now() - orderExecutionFeeDiscountStartTime;
1856
- // Record measurement
1857
- __classPrivateFieldGet(this, _TradingService_deps, "f").tracer.setMeasurement(performanceMetrics_js_1.PerpsMeasurementName.PerpsRewardsOrderExecutionFeeDiscountApiCall, orderExecutionFeeDiscountDuration, 'millisecond');
1858
- __classPrivateFieldGet(this, _TradingService_deps, "f").debugLogger.log('TradingService: Fee discount API call completed', {
1859
- discountBips: resolution.discountBips,
1860
- source: resolution.source,
1861
- duration: `${orderExecutionFeeDiscountDuration.toFixed(0)}ms`,
1862
- });
1863
- return resolution;
1864
- };
1865
- //# sourceMappingURL=TradingService.cjs.map