@metamask-previews/perps-controller 0.0.0-preview-e4aa1532 → 0.0.0-preview-6dfa4aeba

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 (498) hide show
  1. package/CHANGELOG.md +1 -11
  2. package/dist/PerpsController.cjs +66 -2224
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts +79 -933
  5. package/dist/PerpsController.d.cts.map +1 -1
  6. package/dist/PerpsController.d.mts +79 -933
  7. package/dist/PerpsController.d.mts.map +1 -1
  8. package/dist/PerpsController.mjs +64 -2221
  9. package/dist/PerpsController.mjs.map +1 -1
  10. package/dist/index.cjs +1 -32
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +2 -6
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +2 -6
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -9
  17. package/dist/index.mjs.map +1 -1
  18. package/package.json +4 -19
  19. package/dist/__mocks__/hyperliquidMock.cjs +0 -68
  20. package/dist/__mocks__/hyperliquidMock.cjs.map +0 -1
  21. package/dist/__mocks__/hyperliquidMock.d.cts +0 -15
  22. package/dist/__mocks__/hyperliquidMock.d.cts.map +0 -1
  23. package/dist/__mocks__/hyperliquidMock.d.mts +0 -15
  24. package/dist/__mocks__/hyperliquidMock.d.mts.map +0 -1
  25. package/dist/__mocks__/hyperliquidMock.mjs +0 -65
  26. package/dist/__mocks__/hyperliquidMock.mjs.map +0 -1
  27. package/dist/__mocks__/providerMocks.cjs +0 -144
  28. package/dist/__mocks__/providerMocks.cjs.map +0 -1
  29. package/dist/__mocks__/providerMocks.d.cts +0 -44
  30. package/dist/__mocks__/providerMocks.d.cts.map +0 -1
  31. package/dist/__mocks__/providerMocks.d.mts +0 -44
  32. package/dist/__mocks__/providerMocks.d.mts.map +0 -1
  33. package/dist/__mocks__/providerMocks.mjs +0 -136
  34. package/dist/__mocks__/providerMocks.mjs.map +0 -1
  35. package/dist/__mocks__/serviceMocks.cjs +0 -187
  36. package/dist/__mocks__/serviceMocks.cjs.map +0 -1
  37. package/dist/__mocks__/serviceMocks.d.cts +0 -58
  38. package/dist/__mocks__/serviceMocks.d.cts.map +0 -1
  39. package/dist/__mocks__/serviceMocks.d.mts +0 -58
  40. package/dist/__mocks__/serviceMocks.d.mts.map +0 -1
  41. package/dist/__mocks__/serviceMocks.mjs +0 -180
  42. package/dist/__mocks__/serviceMocks.mjs.map +0 -1
  43. package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -459
  44. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
  45. package/dist/aggregation/SubscriptionMultiplexer.d.cts +0 -222
  46. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
  47. package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -222
  48. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
  49. package/dist/aggregation/SubscriptionMultiplexer.mjs +0 -455
  50. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
  51. package/dist/aggregation/index.cjs +0 -9
  52. package/dist/aggregation/index.cjs.map +0 -1
  53. package/dist/aggregation/index.d.cts +0 -6
  54. package/dist/aggregation/index.d.cts.map +0 -1
  55. package/dist/aggregation/index.d.mts +0 -6
  56. package/dist/aggregation/index.d.mts.map +0 -1
  57. package/dist/aggregation/index.mjs +0 -5
  58. package/dist/aggregation/index.mjs.map +0 -1
  59. package/dist/constants/eventNames.cjs +0 -117
  60. package/dist/constants/eventNames.cjs.map +0 -1
  61. package/dist/constants/eventNames.d.cts +0 -106
  62. package/dist/constants/eventNames.d.cts.map +0 -1
  63. package/dist/constants/eventNames.d.mts +0 -106
  64. package/dist/constants/eventNames.d.mts.map +0 -1
  65. package/dist/constants/eventNames.mjs +0 -114
  66. package/dist/constants/eventNames.mjs.map +0 -1
  67. package/dist/constants/hyperLiquidConfig.cjs +0 -366
  68. package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
  69. package/dist/constants/hyperLiquidConfig.d.cts +0 -276
  70. package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
  71. package/dist/constants/hyperLiquidConfig.d.mts +0 -276
  72. package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
  73. package/dist/constants/hyperLiquidConfig.mjs +0 -357
  74. package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
  75. package/dist/constants/index.cjs +0 -23
  76. package/dist/constants/index.cjs.map +0 -1
  77. package/dist/constants/index.d.cts +0 -7
  78. package/dist/constants/index.d.cts.map +0 -1
  79. package/dist/constants/index.d.mts +0 -7
  80. package/dist/constants/index.d.mts.map +0 -1
  81. package/dist/constants/index.mjs +0 -7
  82. package/dist/constants/index.mjs.map +0 -1
  83. package/dist/constants/orderTypes.cjs +0 -31
  84. package/dist/constants/orderTypes.cjs.map +0 -1
  85. package/dist/constants/orderTypes.d.cts +0 -19
  86. package/dist/constants/orderTypes.d.cts.map +0 -1
  87. package/dist/constants/orderTypes.d.mts +0 -19
  88. package/dist/constants/orderTypes.d.mts.map +0 -1
  89. package/dist/constants/orderTypes.mjs +0 -27
  90. package/dist/constants/orderTypes.mjs.map +0 -1
  91. package/dist/constants/performanceMetrics.cjs +0 -61
  92. package/dist/constants/performanceMetrics.cjs.map +0 -1
  93. package/dist/constants/performanceMetrics.d.cts +0 -44
  94. package/dist/constants/performanceMetrics.d.cts.map +0 -1
  95. package/dist/constants/performanceMetrics.d.mts +0 -44
  96. package/dist/constants/performanceMetrics.d.mts.map +0 -1
  97. package/dist/constants/performanceMetrics.mjs +0 -58
  98. package/dist/constants/performanceMetrics.mjs.map +0 -1
  99. package/dist/constants/perpsConfig.cjs +0 -461
  100. package/dist/constants/perpsConfig.cjs.map +0 -1
  101. package/dist/constants/perpsConfig.d.cts +0 -343
  102. package/dist/constants/perpsConfig.d.cts.map +0 -1
  103. package/dist/constants/perpsConfig.d.mts +0 -343
  104. package/dist/constants/perpsConfig.d.mts.map +0 -1
  105. package/dist/constants/perpsConfig.mjs +0 -458
  106. package/dist/constants/perpsConfig.mjs.map +0 -1
  107. package/dist/constants/perpsErrorCodes.cjs +0 -79
  108. package/dist/constants/perpsErrorCodes.cjs.map +0 -1
  109. package/dist/constants/perpsErrorCodes.d.cts +0 -64
  110. package/dist/constants/perpsErrorCodes.d.cts.map +0 -1
  111. package/dist/constants/perpsErrorCodes.d.mts +0 -64
  112. package/dist/constants/perpsErrorCodes.d.mts.map +0 -1
  113. package/dist/constants/perpsErrorCodes.mjs +0 -76
  114. package/dist/constants/perpsErrorCodes.mjs.map +0 -1
  115. package/dist/platform-services/HyperLiquidClientService.cjs +0 -857
  116. package/dist/platform-services/HyperLiquidClientService.cjs.map +0 -1
  117. package/dist/platform-services/HyperLiquidClientService.d.cts +0 -263
  118. package/dist/platform-services/HyperLiquidClientService.d.cts.map +0 -1
  119. package/dist/platform-services/HyperLiquidClientService.d.mts +0 -263
  120. package/dist/platform-services/HyperLiquidClientService.d.mts.map +0 -1
  121. package/dist/platform-services/HyperLiquidClientService.mjs +0 -853
  122. package/dist/platform-services/HyperLiquidClientService.mjs.map +0 -1
  123. package/dist/platform-services/HyperLiquidSubscriptionService.cjs +0 -2170
  124. package/dist/platform-services/HyperLiquidSubscriptionService.cjs.map +0 -1
  125. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts +0 -424
  126. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts.map +0 -1
  127. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts +0 -424
  128. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts.map +0 -1
  129. package/dist/platform-services/HyperLiquidSubscriptionService.mjs +0 -2166
  130. package/dist/platform-services/HyperLiquidSubscriptionService.mjs.map +0 -1
  131. package/dist/platform-services/HyperLiquidWalletService.cjs +0 -140
  132. package/dist/platform-services/HyperLiquidWalletService.cjs.map +0 -1
  133. package/dist/platform-services/HyperLiquidWalletService.d.cts +0 -78
  134. package/dist/platform-services/HyperLiquidWalletService.d.cts.map +0 -1
  135. package/dist/platform-services/HyperLiquidWalletService.d.mts +0 -78
  136. package/dist/platform-services/HyperLiquidWalletService.d.mts.map +0 -1
  137. package/dist/platform-services/HyperLiquidWalletService.mjs +0 -136
  138. package/dist/platform-services/HyperLiquidWalletService.mjs.map +0 -1
  139. package/dist/providers/AggregatedPerpsProvider.cjs +0 -777
  140. package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
  141. package/dist/providers/AggregatedPerpsProvider.d.cts +0 -466
  142. package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
  143. package/dist/providers/AggregatedPerpsProvider.d.mts +0 -466
  144. package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
  145. package/dist/providers/AggregatedPerpsProvider.mjs +0 -773
  146. package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
  147. package/dist/providers/HyperLiquidProvider.cjs +0 -5172
  148. package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
  149. package/dist/providers/HyperLiquidProvider.d.cts +0 -881
  150. package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
  151. package/dist/providers/HyperLiquidProvider.d.mts +0 -881
  152. package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
  153. package/dist/providers/HyperLiquidProvider.mjs +0 -5168
  154. package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
  155. package/dist/providers/index.cjs +0 -11
  156. package/dist/providers/index.cjs.map +0 -1
  157. package/dist/providers/index.d.cts +0 -6
  158. package/dist/providers/index.d.cts.map +0 -1
  159. package/dist/providers/index.d.mts +0 -6
  160. package/dist/providers/index.d.mts.map +0 -1
  161. package/dist/providers/index.mjs +0 -6
  162. package/dist/providers/index.mjs.map +0 -1
  163. package/dist/routing/ProviderRouter.cjs +0 -148
  164. package/dist/routing/ProviderRouter.cjs.map +0 -1
  165. package/dist/routing/ProviderRouter.d.cts +0 -124
  166. package/dist/routing/ProviderRouter.d.cts.map +0 -1
  167. package/dist/routing/ProviderRouter.d.mts +0 -124
  168. package/dist/routing/ProviderRouter.d.mts.map +0 -1
  169. package/dist/routing/ProviderRouter.mjs +0 -144
  170. package/dist/routing/ProviderRouter.mjs.map +0 -1
  171. package/dist/routing/index.cjs +0 -9
  172. package/dist/routing/index.cjs.map +0 -1
  173. package/dist/routing/index.d.cts +0 -6
  174. package/dist/routing/index.d.cts.map +0 -1
  175. package/dist/routing/index.d.mts +0 -6
  176. package/dist/routing/index.d.mts.map +0 -1
  177. package/dist/routing/index.mjs +0 -5
  178. package/dist/routing/index.mjs.map +0 -1
  179. package/dist/selectors.cjs +0 -161
  180. package/dist/selectors.cjs.map +0 -1
  181. package/dist/selectors.d.cts +0 -345
  182. package/dist/selectors.d.cts.map +0 -1
  183. package/dist/selectors.d.mts +0 -345
  184. package/dist/selectors.d.mts.map +0 -1
  185. package/dist/selectors.mjs +0 -153
  186. package/dist/selectors.mjs.map +0 -1
  187. package/dist/services/AccountService.cjs +0 -313
  188. package/dist/services/AccountService.cjs.map +0 -1
  189. package/dist/services/AccountService.d.cts +0 -53
  190. package/dist/services/AccountService.d.cts.map +0 -1
  191. package/dist/services/AccountService.d.mts +0 -53
  192. package/dist/services/AccountService.d.mts.map +0 -1
  193. package/dist/services/AccountService.mjs +0 -309
  194. package/dist/services/AccountService.mjs.map +0 -1
  195. package/dist/services/DataLakeService.cjs +0 -219
  196. package/dist/services/DataLakeService.cjs.map +0 -1
  197. package/dist/services/DataLakeService.d.cts +0 -49
  198. package/dist/services/DataLakeService.d.cts.map +0 -1
  199. package/dist/services/DataLakeService.d.mts +0 -49
  200. package/dist/services/DataLakeService.d.mts.map +0 -1
  201. package/dist/services/DataLakeService.mjs +0 -215
  202. package/dist/services/DataLakeService.mjs.map +0 -1
  203. package/dist/services/DepositService.cjs +0 -96
  204. package/dist/services/DepositService.cjs.map +0 -1
  205. package/dist/services/DepositService.d.cts +0 -37
  206. package/dist/services/DepositService.d.cts.map +0 -1
  207. package/dist/services/DepositService.d.mts +0 -37
  208. package/dist/services/DepositService.d.mts.map +0 -1
  209. package/dist/services/DepositService.mjs +0 -92
  210. package/dist/services/DepositService.mjs.map +0 -1
  211. package/dist/services/EligibilityService.cjs +0 -156
  212. package/dist/services/EligibilityService.cjs.map +0 -1
  213. package/dist/services/EligibilityService.d.cts +0 -48
  214. package/dist/services/EligibilityService.d.cts.map +0 -1
  215. package/dist/services/EligibilityService.d.mts +0 -48
  216. package/dist/services/EligibilityService.d.mts.map +0 -1
  217. package/dist/services/EligibilityService.mjs +0 -152
  218. package/dist/services/EligibilityService.mjs.map +0 -1
  219. package/dist/services/FeatureFlagConfigurationService.cjs +0 -258
  220. package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
  221. package/dist/services/FeatureFlagConfigurationService.d.cts +0 -100
  222. package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
  223. package/dist/services/FeatureFlagConfigurationService.d.mts +0 -100
  224. package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
  225. package/dist/services/FeatureFlagConfigurationService.mjs +0 -254
  226. package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
  227. package/dist/services/MarketDataService.cjs +0 -875
  228. package/dist/services/MarketDataService.cjs.map +0 -1
  229. package/dist/services/MarketDataService.d.cts +0 -289
  230. package/dist/services/MarketDataService.d.cts.map +0 -1
  231. package/dist/services/MarketDataService.d.mts +0 -289
  232. package/dist/services/MarketDataService.d.mts.map +0 -1
  233. package/dist/services/MarketDataService.mjs +0 -871
  234. package/dist/services/MarketDataService.mjs.map +0 -1
  235. package/dist/services/RewardsIntegrationService.cjs +0 -94
  236. package/dist/services/RewardsIntegrationService.cjs.map +0 -1
  237. package/dist/services/RewardsIntegrationService.d.cts +0 -30
  238. package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
  239. package/dist/services/RewardsIntegrationService.d.mts +0 -30
  240. package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
  241. package/dist/services/RewardsIntegrationService.mjs +0 -90
  242. package/dist/services/RewardsIntegrationService.mjs.map +0 -1
  243. package/dist/services/ServiceContext.cjs +0 -3
  244. package/dist/services/ServiceContext.cjs.map +0 -1
  245. package/dist/services/ServiceContext.d.cts +0 -110
  246. package/dist/services/ServiceContext.d.cts.map +0 -1
  247. package/dist/services/ServiceContext.d.mts +0 -110
  248. package/dist/services/ServiceContext.d.mts.map +0 -1
  249. package/dist/services/ServiceContext.mjs +0 -2
  250. package/dist/services/ServiceContext.mjs.map +0 -1
  251. package/dist/services/TradingService.cjs +0 -1481
  252. package/dist/services/TradingService.cjs.map +0 -1
  253. package/dist/services/TradingService.d.cts +0 -308
  254. package/dist/services/TradingService.d.cts.map +0 -1
  255. package/dist/services/TradingService.d.mts +0 -308
  256. package/dist/services/TradingService.d.mts.map +0 -1
  257. package/dist/services/TradingService.mjs +0 -1477
  258. package/dist/services/TradingService.mjs.map +0 -1
  259. package/dist/services/index.cjs +0 -26
  260. package/dist/services/index.cjs.map +0 -1
  261. package/dist/services/index.d.cts +0 -11
  262. package/dist/services/index.d.cts.map +0 -1
  263. package/dist/services/index.d.mts +0 -11
  264. package/dist/services/index.d.mts.map +0 -1
  265. package/dist/services/index.mjs +0 -10
  266. package/dist/services/index.mjs.map +0 -1
  267. package/dist/services/utils.cjs +0 -16
  268. package/dist/services/utils.cjs.map +0 -1
  269. package/dist/services/utils.d.cts +0 -8
  270. package/dist/services/utils.d.cts.map +0 -1
  271. package/dist/services/utils.d.mts +0 -8
  272. package/dist/services/utils.d.mts.map +0 -1
  273. package/dist/services/utils.mjs +0 -12
  274. package/dist/services/utils.mjs.map +0 -1
  275. package/dist/types/chart.cjs +0 -42
  276. package/dist/types/chart.cjs.map +0 -1
  277. package/dist/types/chart.d.cts +0 -62
  278. package/dist/types/chart.d.cts.map +0 -1
  279. package/dist/types/chart.d.mts +0 -62
  280. package/dist/types/chart.d.mts.map +0 -1
  281. package/dist/types/chart.mjs +0 -39
  282. package/dist/types/chart.mjs.map +0 -1
  283. package/dist/types/hyperliquid-types.cjs +0 -3
  284. package/dist/types/hyperliquid-types.cjs.map +0 -1
  285. package/dist/types/hyperliquid-types.d.cts +0 -52
  286. package/dist/types/hyperliquid-types.d.cts.map +0 -1
  287. package/dist/types/hyperliquid-types.d.mts +0 -52
  288. package/dist/types/hyperliquid-types.d.mts.map +0 -1
  289. package/dist/types/hyperliquid-types.mjs +0 -2
  290. package/dist/types/hyperliquid-types.mjs.map +0 -1
  291. package/dist/types/index.cjs +0 -96
  292. package/dist/types/index.cjs.map +0 -1
  293. package/dist/types/index.d.cts +0 -1153
  294. package/dist/types/index.d.cts.map +0 -1
  295. package/dist/types/index.d.mts +0 -1153
  296. package/dist/types/index.d.mts.map +0 -1
  297. package/dist/types/index.mjs +0 -79
  298. package/dist/types/index.mjs.map +0 -1
  299. package/dist/types/transactionTypes.cjs +0 -28
  300. package/dist/types/transactionTypes.cjs.map +0 -1
  301. package/dist/types/transactionTypes.d.cts +0 -64
  302. package/dist/types/transactionTypes.d.cts.map +0 -1
  303. package/dist/types/transactionTypes.d.mts +0 -64
  304. package/dist/types/transactionTypes.d.mts.map +0 -1
  305. package/dist/types/transactionTypes.mjs +0 -23
  306. package/dist/types/transactionTypes.mjs.map +0 -1
  307. package/dist/utils/accountUtils.cjs +0 -65
  308. package/dist/utils/accountUtils.cjs.map +0 -1
  309. package/dist/utils/accountUtils.d.cts +0 -26
  310. package/dist/utils/accountUtils.d.cts.map +0 -1
  311. package/dist/utils/accountUtils.d.mts +0 -26
  312. package/dist/utils/accountUtils.d.mts.map +0 -1
  313. package/dist/utils/accountUtils.mjs +0 -61
  314. package/dist/utils/accountUtils.mjs.map +0 -1
  315. package/dist/utils/amountConversion.cjs +0 -61
  316. package/dist/utils/amountConversion.cjs.map +0 -1
  317. package/dist/utils/amountConversion.d.cts +0 -16
  318. package/dist/utils/amountConversion.d.cts.map +0 -1
  319. package/dist/utils/amountConversion.d.mts +0 -16
  320. package/dist/utils/amountConversion.d.mts.map +0 -1
  321. package/dist/utils/amountConversion.mjs +0 -54
  322. package/dist/utils/amountConversion.mjs.map +0 -1
  323. package/dist/utils/chartUtils.cjs +0 -98
  324. package/dist/utils/chartUtils.cjs.map +0 -1
  325. package/dist/utils/chartUtils.d.cts +0 -14
  326. package/dist/utils/chartUtils.d.cts.map +0 -1
  327. package/dist/utils/chartUtils.d.mts +0 -14
  328. package/dist/utils/chartUtils.d.mts.map +0 -1
  329. package/dist/utils/chartUtils.mjs +0 -94
  330. package/dist/utils/chartUtils.mjs.map +0 -1
  331. package/dist/utils/errorUtils.cjs +0 -22
  332. package/dist/utils/errorUtils.cjs.map +0 -1
  333. package/dist/utils/errorUtils.d.cts +0 -13
  334. package/dist/utils/errorUtils.d.cts.map +0 -1
  335. package/dist/utils/errorUtils.d.mts +0 -13
  336. package/dist/utils/errorUtils.d.mts.map +0 -1
  337. package/dist/utils/errorUtils.mjs +0 -18
  338. package/dist/utils/errorUtils.mjs.map +0 -1
  339. package/dist/utils/formatUtils.cjs +0 -987
  340. package/dist/utils/formatUtils.cjs.map +0 -1
  341. package/dist/utils/formatUtils.d.cts +0 -387
  342. package/dist/utils/formatUtils.d.cts.map +0 -1
  343. package/dist/utils/formatUtils.d.mts +0 -387
  344. package/dist/utils/formatUtils.d.mts.map +0 -1
  345. package/dist/utils/formatUtils.mjs +0 -966
  346. package/dist/utils/formatUtils.mjs.map +0 -1
  347. package/dist/utils/hyperLiquidAdapter.cjs +0 -454
  348. package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
  349. package/dist/utils/hyperLiquidAdapter.d.cts +0 -158
  350. package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
  351. package/dist/utils/hyperLiquidAdapter.d.mts +0 -158
  352. package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
  353. package/dist/utils/hyperLiquidAdapter.mjs +0 -439
  354. package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
  355. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -89
  356. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
  357. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -58
  358. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
  359. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +0 -58
  360. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
  361. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +0 -84
  362. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
  363. package/dist/utils/hyperLiquidValidation.cjs +0 -426
  364. package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
  365. package/dist/utils/hyperLiquidValidation.d.cts +0 -143
  366. package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
  367. package/dist/utils/hyperLiquidValidation.d.mts +0 -143
  368. package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
  369. package/dist/utils/hyperLiquidValidation.mjs +0 -413
  370. package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
  371. package/dist/utils/idUtils.cjs +0 -50
  372. package/dist/utils/idUtils.cjs.map +0 -1
  373. package/dist/utils/idUtils.d.cts +0 -38
  374. package/dist/utils/idUtils.d.cts.map +0 -1
  375. package/dist/utils/idUtils.d.mts +0 -38
  376. package/dist/utils/idUtils.d.mts.map +0 -1
  377. package/dist/utils/idUtils.mjs +0 -42
  378. package/dist/utils/idUtils.mjs.map +0 -1
  379. package/dist/utils/marginUtils.cjs +0 -137
  380. package/dist/utils/marginUtils.cjs.map +0 -1
  381. package/dist/utils/marginUtils.d.cts +0 -64
  382. package/dist/utils/marginUtils.d.cts.map +0 -1
  383. package/dist/utils/marginUtils.d.mts +0 -64
  384. package/dist/utils/marginUtils.d.mts.map +0 -1
  385. package/dist/utils/marginUtils.mjs +0 -131
  386. package/dist/utils/marginUtils.mjs.map +0 -1
  387. package/dist/utils/marketDataTransform.cjs +0 -227
  388. package/dist/utils/marketDataTransform.cjs.map +0 -1
  389. package/dist/utils/marketDataTransform.d.cts +0 -45
  390. package/dist/utils/marketDataTransform.d.cts.map +0 -1
  391. package/dist/utils/marketDataTransform.d.mts +0 -45
  392. package/dist/utils/marketDataTransform.d.mts.map +0 -1
  393. package/dist/utils/marketDataTransform.mjs +0 -220
  394. package/dist/utils/marketDataTransform.mjs.map +0 -1
  395. package/dist/utils/marketUtils.cjs +0 -420
  396. package/dist/utils/marketUtils.cjs.map +0 -1
  397. package/dist/utils/marketUtils.d.cts +0 -227
  398. package/dist/utils/marketUtils.d.cts.map +0 -1
  399. package/dist/utils/marketUtils.d.mts +0 -227
  400. package/dist/utils/marketUtils.d.mts.map +0 -1
  401. package/dist/utils/marketUtils.mjs +0 -404
  402. package/dist/utils/marketUtils.mjs.map +0 -1
  403. package/dist/utils/orderBookGrouping.cjs +0 -151
  404. package/dist/utils/orderBookGrouping.cjs.map +0 -1
  405. package/dist/utils/orderBookGrouping.d.cts +0 -76
  406. package/dist/utils/orderBookGrouping.d.cts.map +0 -1
  407. package/dist/utils/orderBookGrouping.d.mts +0 -76
  408. package/dist/utils/orderBookGrouping.d.mts.map +0 -1
  409. package/dist/utils/orderBookGrouping.mjs +0 -143
  410. package/dist/utils/orderBookGrouping.mjs.map +0 -1
  411. package/dist/utils/orderCalculations.cjs +0 -283
  412. package/dist/utils/orderCalculations.cjs.map +0 -1
  413. package/dist/utils/orderCalculations.d.cts +0 -107
  414. package/dist/utils/orderCalculations.d.cts.map +0 -1
  415. package/dist/utils/orderCalculations.d.mts +0 -107
  416. package/dist/utils/orderCalculations.d.mts.map +0 -1
  417. package/dist/utils/orderCalculations.mjs +0 -274
  418. package/dist/utils/orderCalculations.mjs.map +0 -1
  419. package/dist/utils/orderUtils.cjs +0 -159
  420. package/dist/utils/orderUtils.cjs.map +0 -1
  421. package/dist/utils/orderUtils.d.cts +0 -66
  422. package/dist/utils/orderUtils.d.cts.map +0 -1
  423. package/dist/utils/orderUtils.d.mts +0 -66
  424. package/dist/utils/orderUtils.d.mts.map +0 -1
  425. package/dist/utils/orderUtils.mjs +0 -151
  426. package/dist/utils/orderUtils.mjs.map +0 -1
  427. package/dist/utils/pnlCalculations.cjs +0 -107
  428. package/dist/utils/pnlCalculations.cjs.map +0 -1
  429. package/dist/utils/pnlCalculations.d.cts +0 -79
  430. package/dist/utils/pnlCalculations.d.cts.map +0 -1
  431. package/dist/utils/pnlCalculations.d.mts +0 -79
  432. package/dist/utils/pnlCalculations.d.mts.map +0 -1
  433. package/dist/utils/pnlCalculations.mjs +0 -97
  434. package/dist/utils/pnlCalculations.mjs.map +0 -1
  435. package/dist/utils/positionCalculations.cjs +0 -176
  436. package/dist/utils/positionCalculations.cjs.map +0 -1
  437. package/dist/utils/positionCalculations.d.cts +0 -85
  438. package/dist/utils/positionCalculations.d.cts.map +0 -1
  439. package/dist/utils/positionCalculations.d.mts +0 -85
  440. package/dist/utils/positionCalculations.d.mts.map +0 -1
  441. package/dist/utils/positionCalculations.mjs +0 -165
  442. package/dist/utils/positionCalculations.mjs.map +0 -1
  443. package/dist/utils/sortMarkets.cjs +0 -88
  444. package/dist/utils/sortMarkets.cjs.map +0 -1
  445. package/dist/utils/sortMarkets.d.cts +0 -21
  446. package/dist/utils/sortMarkets.d.cts.map +0 -1
  447. package/dist/utils/sortMarkets.d.mts +0 -21
  448. package/dist/utils/sortMarkets.d.mts.map +0 -1
  449. package/dist/utils/sortMarkets.mjs +0 -84
  450. package/dist/utils/sortMarkets.mjs.map +0 -1
  451. package/dist/utils/standaloneInfoClient.cjs +0 -34
  452. package/dist/utils/standaloneInfoClient.cjs.map +0 -1
  453. package/dist/utils/standaloneInfoClient.d.cts +0 -31
  454. package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
  455. package/dist/utils/standaloneInfoClient.d.mts +0 -31
  456. package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
  457. package/dist/utils/standaloneInfoClient.mjs +0 -30
  458. package/dist/utils/standaloneInfoClient.mjs.map +0 -1
  459. package/dist/utils/stringParseUtils.cjs +0 -49
  460. package/dist/utils/stringParseUtils.cjs.map +0 -1
  461. package/dist/utils/stringParseUtils.d.cts +0 -35
  462. package/dist/utils/stringParseUtils.d.cts.map +0 -1
  463. package/dist/utils/stringParseUtils.d.mts +0 -35
  464. package/dist/utils/stringParseUtils.d.mts.map +0 -1
  465. package/dist/utils/stringParseUtils.mjs +0 -44
  466. package/dist/utils/stringParseUtils.mjs.map +0 -1
  467. package/dist/utils/time.cjs +0 -37
  468. package/dist/utils/time.cjs.map +0 -1
  469. package/dist/utils/time.d.cts +0 -17
  470. package/dist/utils/time.d.cts.map +0 -1
  471. package/dist/utils/time.d.mts +0 -17
  472. package/dist/utils/time.d.mts.map +0 -1
  473. package/dist/utils/time.mjs +0 -33
  474. package/dist/utils/time.mjs.map +0 -1
  475. package/dist/utils/tpslValidation.cjs +0 -505
  476. package/dist/utils/tpslValidation.cjs.map +0 -1
  477. package/dist/utils/tpslValidation.d.cts +0 -182
  478. package/dist/utils/tpslValidation.d.cts.map +0 -1
  479. package/dist/utils/tpslValidation.d.mts +0 -182
  480. package/dist/utils/tpslValidation.d.mts.map +0 -1
  481. package/dist/utils/tpslValidation.mjs +0 -482
  482. package/dist/utils/tpslValidation.mjs.map +0 -1
  483. package/dist/utils/transactionUtils.cjs +0 -36
  484. package/dist/utils/transactionUtils.cjs.map +0 -1
  485. package/dist/utils/transactionUtils.d.cts +0 -17
  486. package/dist/utils/transactionUtils.d.cts.map +0 -1
  487. package/dist/utils/transactionUtils.d.mts +0 -17
  488. package/dist/utils/transactionUtils.d.mts.map +0 -1
  489. package/dist/utils/transactionUtils.mjs +0 -32
  490. package/dist/utils/transactionUtils.mjs.map +0 -1
  491. package/dist/utils/wait.cjs +0 -12
  492. package/dist/utils/wait.cjs.map +0 -1
  493. package/dist/utils/wait.d.cts +0 -8
  494. package/dist/utils/wait.d.cts.map +0 -1
  495. package/dist/utils/wait.d.mts +0 -8
  496. package/dist/utils/wait.d.mts.map +0 -1
  497. package/dist/utils/wait.mjs +0 -8
  498. package/dist/utils/wait.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"TradingService.cjs","sourceRoot":"","sources":["../../src/services/TradingService.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable id-denylist, jsdoc/require-param-description, @typescript-eslint/prefer-nullish-coalescing, no-restricted-syntax, @typescript-eslint/naming-convention, @typescript-eslint/unbound-method, no-eq-null, jsdoc/check-param-names */\n// TODO: Fix ESLint errors in this file - tracked for Phase 5 cleanup\nimport { v4 as uuidv4 } from 'uuid';\n\nimport type { RewardsIntegrationService } from './RewardsIntegrationService';\nimport type { ServiceContext } from './ServiceContext';\nimport {\n PerpsEventProperties,\n PerpsEventValues,\n} from '../constants/eventNames';\nimport { isTPSLOrder } from '../constants/orderTypes';\nimport { PerpsMeasurementName } from '../constants/performanceMetrics';\nimport type { PerpsControllerMessenger } from '../PerpsController';\nimport {\n PerpsAnalyticsEvent,\n PerpsTraceNames,\n PerpsTraceOperations,\n} from '../types';\nimport type {\n PerpsProvider,\n PerpsControllerAccess,\n OrderParams,\n OrderResult,\n EditOrderParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersParams,\n CancelOrdersResult,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n Position,\n UpdatePositionTPSLParams,\n PerpsAnalyticsProperties,\n PerpsPlatformDependencies,\n} from '../types';\n\n/**\n * Controller-level dependencies for TradingService.\n * These are singletons that don't change per-call, injected once via setControllerDependencies().\n */\nexport type TradingServiceControllerDeps = {\n controllers: PerpsControllerAccess;\n messenger: PerpsControllerMessenger;\n rewardsIntegrationService: RewardsIntegrationService;\n};\n\n/**\n * TradingService\n *\n * Handles trading operations with fee discount management.\n * Controller is responsible for analytics, state management, and tracing.\n *\n * Instance-based service with constructor injection of platform dependencies.\n * Controller-level dependencies (RewardsController, NetworkController, etc.)\n * are injected via setControllerDependencies() after construction.\n */\nexport class TradingService {\n /**\n * Platform dependencies for logging, metrics, etc.\n */\n private readonly deps: PerpsPlatformDependencies;\n\n /**\n * Controller-level dependencies for fee discount calculation.\n * Set via setControllerDependencies() after construction.\n */\n private controllerDeps: TradingServiceControllerDeps | null = null;\n\n /**\n * Create a new TradingService instance.\n *\n * @param deps - Platform dependencies for logging, metrics, etc.\n */\n constructor(deps: PerpsPlatformDependencies) {\n this.deps = deps;\n }\n\n /**\n * Set controller-level dependencies for fee discount calculation.\n * Called by PerpsController after construction to inject singleton dependencies.\n *\n * @param controllerDeps - Controller-level dependencies (RewardsController, etc.)\n */\n setControllerDependencies(\n controllerDeps: TradingServiceControllerDeps,\n ): void {\n this.controllerDeps = controllerDeps;\n }\n\n /**\n * Error context helper for consistent logging.\n *\n * @param method - Method name\n * @param additionalContext - Additional context data\n * @returns Error context object\n */\n private getErrorContext(\n method: string,\n additionalContext?: Record<string, unknown>,\n ): Record<string, unknown> {\n return {\n controller: 'TradingService',\n method,\n ...additionalContext,\n };\n }\n\n /**\n * Track order result analytics event (success or failure).\n *\n * @param options - Tracking options\n * @param options.result\n * @param options.error\n * @param options.params\n * @param options.context\n * @param options.duration\n */\n private trackOrderResult(options: {\n result: OrderResult | null;\n error?: Error;\n params: OrderParams;\n context: ServiceContext;\n duration: number;\n }): void {\n const { result, error, params, duration } = options;\n\n const status =\n result?.success === true\n ? PerpsEventValues.STATUS.EXECUTED\n : PerpsEventValues.STATUS.FAILED;\n\n // Build base properties\n const properties: PerpsAnalyticsProperties = {\n [PerpsEventProperties.STATUS]: status,\n [PerpsEventProperties.ASSET]: params.symbol,\n [PerpsEventProperties.DIRECTION]: params.isBuy\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n [PerpsEventProperties.ORDER_TYPE]: params.orderType,\n [PerpsEventProperties.LEVERAGE]: parseFloat(String(params.leverage || 1)),\n [PerpsEventProperties.ORDER_SIZE]: parseFloat(\n result?.filledSize || params.size,\n ),\n [PerpsEventProperties.COMPLETION_DURATION]: duration,\n };\n\n // Add optional properties\n if (params.trackingData?.marginUsed != null) {\n properties[PerpsEventProperties.MARGIN_USED] =\n params.trackingData.marginUsed;\n }\n if (params.trackingData?.totalFee != null) {\n properties[PerpsEventProperties.FEES] = params.trackingData.totalFee;\n }\n if (result?.averagePrice || params.trackingData?.marketPrice) {\n properties[PerpsEventProperties.ASSET_PRICE] = result?.averagePrice\n ? parseFloat(result.averagePrice)\n : params.trackingData?.marketPrice;\n }\n if (params.orderType === 'limit' && params.price) {\n properties[PerpsEventProperties.LIMIT_PRICE] = parseFloat(params.price);\n }\n if (params.trackingData?.source) {\n properties[PerpsEventProperties.SOURCE] = params.trackingData.source;\n }\n if (params.trackingData?.tradeAction) {\n properties[PerpsEventProperties.ACTION] = params.trackingData.tradeAction;\n }\n\n // Add success-specific properties\n if (status === PerpsEventValues.STATUS.EXECUTED) {\n if (params.trackingData?.metamaskFee != null) {\n properties[PerpsEventProperties.METAMASK_FEE] =\n params.trackingData.metamaskFee;\n }\n if (params.trackingData?.metamaskFeeRate != null) {\n properties[PerpsEventProperties.METAMASK_FEE_RATE] =\n params.trackingData.metamaskFeeRate;\n }\n if (params.trackingData?.feeDiscountPercentage != null) {\n properties[PerpsEventProperties.DISCOUNT_PERCENTAGE] =\n params.trackingData.feeDiscountPercentage;\n }\n if (params.trackingData?.estimatedPoints != null) {\n properties[PerpsEventProperties.ESTIMATED_REWARDS] =\n params.trackingData.estimatedPoints;\n }\n if (params.takeProfitPrice) {\n properties[PerpsEventProperties.TAKE_PROFIT_PRICE] = parseFloat(\n params.takeProfitPrice,\n );\n }\n if (params.stopLossPrice) {\n properties[PerpsEventProperties.STOP_LOSS_PRICE] = parseFloat(\n params.stopLossPrice,\n );\n }\n } else {\n // Add failure-specific properties\n properties[PerpsEventProperties.ERROR_MESSAGE] =\n error?.message || result?.error || 'Unknown error';\n }\n\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.TradeTransaction,\n properties,\n );\n }\n\n /**\n * Handle successful order placement (state updates, analytics, data lake reporting).\n *\n * @param options - Options for handling order success\n * @param options.params\n * @param options.context\n * @param options.reportOrderToDataLake\n */\n private async handleOrderSuccess(options: {\n params: OrderParams;\n context: ServiceContext;\n reportOrderToDataLake: (params: {\n action: 'open' | 'close';\n symbol: string;\n sl_price?: number;\n tp_price?: number;\n }) => Promise<{ success: boolean; error?: string }>;\n }): Promise<void> {\n const { params, context, reportOrderToDataLake } = options;\n\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Save executed trade configuration for this market\n if (params.leverage && context.saveTradeConfiguration) {\n context.saveTradeConfiguration(params.symbol, params.leverage);\n }\n\n // Report to data lake (fire-and-forget with retry)\n reportOrderToDataLake({\n action: 'open',\n symbol: params.symbol,\n sl_price: params.stopLossPrice\n ? parseFloat(params.stopLossPrice)\n : undefined,\n tp_price: params.takeProfitPrice\n ? parseFloat(params.takeProfitPrice)\n : undefined,\n }).catch((caughtError: unknown) => {\n const errorObj =\n caughtError instanceof Error\n ? caughtError\n : new Error(String(caughtError));\n this.deps.logger.error(errorObj, {\n tags: {\n feature: 'perps',\n provider: context.tracingContext.provider,\n network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',\n },\n context: {\n name: context.errorContext.controller,\n data: {\n method: context.errorContext.method,\n operation: 'reportOrderToDataLake',\n symbol: params.symbol,\n },\n },\n });\n });\n }\n\n /**\n * Execute a trading operation with fee discount context.\n * Ensures fee discount is always cleared after operation (success or failure).\n *\n * @param options - Options for fee discount context\n * @param options.provider\n * @param options.feeDiscountBips\n * @param options.operation\n * @returns The operation result\n */\n private async withFeeDiscount<T>(options: {\n provider: PerpsProvider;\n feeDiscountBips?: number;\n operation: () => Promise<T>;\n }): Promise<T> {\n const { provider, feeDiscountBips, operation } = options;\n\n try {\n // Set discount context in provider for this operation\n if (feeDiscountBips !== undefined && provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(feeDiscountBips);\n this.deps.debugLogger.log(\n 'TradingService: Fee discount set in provider',\n {\n feeDiscountBips,\n },\n );\n }\n\n // Execute the operation\n return await operation();\n } finally {\n // Always clear discount context, even on exception\n if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(undefined);\n this.deps.debugLogger.log(\n 'TradingService: Fee discount cleared from provider',\n );\n }\n }\n }\n\n /**\n * Place a new order with full orchestration.\n * Handles tracing, fee discounts, state management, analytics, and data lake reporting.\n *\n * @param options - Options for placing order\n * @param options.provider\n * @param options.params\n * @param options.context\n * @param options.reportOrderToDataLake\n * @returns Order result\n */\n async placeOrder(options: {\n provider: PerpsProvider;\n params: OrderParams;\n context: ServiceContext;\n reportOrderToDataLake: (params: {\n action: 'open' | 'close';\n symbol: string;\n sl_price?: number;\n tp_price?: number;\n }) => Promise<{ success: boolean; error?: string }>;\n }): Promise<OrderResult> {\n const { provider, params, context, reportOrderToDataLake } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let traceData:\n | { success: boolean; error?: string; orderId?: string }\n | undefined;\n\n try {\n // Start trace for the entire operation\n this.deps.tracer.trace({\n name: PerpsTraceNames.PlaceOrder,\n id: traceId,\n op: PerpsTraceOperations.OrderSubmission,\n tags: {\n provider: context.tracingContext.provider,\n orderType: params.orderType,\n market: params.symbol,\n leverage: String(params.leverage || 1),\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n isBuy: params.isBuy,\n orderPrice: params.price || '',\n },\n });\n\n // Calculate fee discount at execution time (fresh, secure)\n const feeDiscountBips = await this.calculateFeeDiscountWithMeasurement();\n\n this.deps.debugLogger.log('TradingService: Fee discount calculated', {\n feeDiscountBips,\n hasDiscount: feeDiscountBips !== undefined,\n });\n\n this.deps.debugLogger.log(\n 'TradingService: Submitting order to provider',\n {\n symbol: params.symbol,\n orderType: params.orderType,\n isBuy: params.isBuy,\n size: params.size,\n leverage: params.leverage,\n hasTP: Boolean(params.takeProfitPrice),\n hasSL: Boolean(params.stopLossPrice),\n },\n );\n\n // Execute order with fee discount management\n const result = await this.withFeeDiscount({\n provider,\n feeDiscountBips,\n operation: () => provider.placeOrder(params),\n });\n\n this.deps.debugLogger.log('TradingService: Provider response received', {\n success: result.success,\n orderId: result.orderId,\n error: result.error,\n });\n\n // Update state and handle success/failure\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Handle success: state updates, data lake reporting\n await this.handleOrderSuccess({\n params,\n context,\n reportOrderToDataLake,\n });\n traceData = { success: true, orderId: result.orderId || '' };\n } else {\n traceData = { success: false, error: result.error || 'Unknown error' };\n }\n\n // Track analytics (success or failure)\n this.trackOrderResult({\n result,\n params,\n context,\n duration: completionDuration,\n });\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Track analytics for exception\n this.trackOrderResult({\n result: null,\n error,\n params,\n context,\n duration: completionDuration,\n });\n\n this.deps.logger.error(error, {\n tags: {\n feature: 'perps',\n provider: context.tracingContext.provider,\n network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',\n },\n context: {\n name: context.errorContext.controller,\n data: {\n method: context.errorContext.method,\n symbol: params.symbol,\n orderType: params.orderType,\n },\n },\n });\n\n traceData = {\n success: false,\n error: error.message,\n };\n throw err;\n } finally {\n // Always end trace on exit (success or failure)\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.PlaceOrder,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Load position data with performance measurement.\n *\n * @param options - Options for loading position data\n * @param options.symbol\n * @param options.context\n * @returns The position or undefined\n */\n private async loadPositionData(options: {\n symbol: string;\n context: ServiceContext;\n }): Promise<Position | undefined> {\n const { symbol, context } = options;\n\n const positionLoadStart = this.deps.performance.now();\n try {\n const positions = context.getPositions\n ? await context.getPositions()\n : [];\n const position = positions.find((pos) => pos.symbol === symbol);\n\n this.deps.tracer.setMeasurement(\n PerpsMeasurementName.PerpsGetPositionsOperation,\n this.deps.performance.now() - positionLoadStart,\n 'millisecond',\n );\n\n return position;\n } catch (err) {\n this.deps.debugLogger.log(\n 'TradingService: Could not get position data for tracking',\n err instanceof Error ? err.message : String(err),\n );\n return undefined;\n }\n }\n\n /**\n * Calculate close position metrics.\n *\n * @param position - The position being closed\n * @param params - Close position parameters\n * @param result - Order result\n * @returns Calculated metrics\n */\n private calculateCloseMetrics(\n position: Position,\n params: ClosePositionParams,\n result: OrderResult,\n ): {\n direction: string;\n closePercentage: number;\n closeType: string;\n orderType: string;\n filledSize: number;\n requestedSize: number;\n isPartiallyFilled: boolean;\n } {\n const direction =\n parseFloat(position.size) > 0\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT;\n\n const filledSize = result.filledSize ? parseFloat(result.filledSize) : 0;\n const requestedSize = params.size\n ? parseFloat(params.size)\n : Math.abs(parseFloat(position.size));\n const isPartiallyFilled = filledSize > 0 && filledSize < requestedSize;\n\n const orderType = params.orderType || PerpsEventValues.ORDER_TYPE.MARKET;\n const closePercentage = params.size\n ? (parseFloat(params.size) / Math.abs(parseFloat(position.size))) * 100\n : 100;\n const closeType =\n closePercentage === 100\n ? PerpsEventValues.CLOSE_TYPE.FULL\n : PerpsEventValues.CLOSE_TYPE.PARTIAL;\n\n return {\n direction,\n closePercentage,\n closeType,\n orderType,\n filledSize,\n requestedSize,\n isPartiallyFilled,\n };\n }\n\n /**\n * Build event properties for position close analytics.\n *\n * @param position - The position being closed\n * @param params - Close position parameters\n * @param metrics - Calculated metrics\n * @param metrics.direction\n * @param result - Order result\n * @param metrics.closePercentage\n * @param status - Event status\n * @param metrics.closeType\n * @param error - Error message if any\n * @param metrics.orderType\n * @param metrics.requestedSize\n * @returns Event properties\n */\n private buildCloseEventProperties(\n position: Position,\n params: ClosePositionParams,\n metrics: {\n direction: string;\n closePercentage: number;\n closeType: string;\n orderType: string;\n requestedSize: number;\n },\n result: OrderResult | null,\n status: string,\n error?: string,\n ): Record<string, unknown> {\n const baseProperties = {\n [PerpsEventProperties.STATUS]: status,\n [PerpsEventProperties.ASSET]: position.symbol,\n [PerpsEventProperties.DIRECTION]: metrics.direction,\n [PerpsEventProperties.ORDER_TYPE]: metrics.orderType,\n [PerpsEventProperties.ORDER_SIZE]: metrics.requestedSize,\n [PerpsEventProperties.OPEN_POSITION_SIZE]: Math.abs(\n parseFloat(position.size),\n ),\n [PerpsEventProperties.PERCENTAGE_CLOSED]: metrics.closePercentage,\n ...(position.unrealizedPnl && {\n [PerpsEventProperties.PNL_DOLLAR]: parseFloat(position.unrealizedPnl),\n }),\n ...(position.returnOnEquity && {\n [PerpsEventProperties.PNL_PERCENT]:\n parseFloat(position.returnOnEquity) * 100,\n }),\n ...(params.trackingData?.totalFee != null && {\n [PerpsEventProperties.FEE]: params.trackingData.totalFee,\n }),\n ...(params.trackingData?.metamaskFee != null && {\n [PerpsEventProperties.METAMASK_FEE]: params.trackingData.metamaskFee,\n }),\n ...(params.trackingData?.metamaskFeeRate != null && {\n [PerpsEventProperties.METAMASK_FEE_RATE]:\n params.trackingData.metamaskFeeRate,\n }),\n ...(params.trackingData?.feeDiscountPercentage != null && {\n [PerpsEventProperties.DISCOUNT_PERCENTAGE]:\n params.trackingData.feeDiscountPercentage,\n }),\n ...(params.trackingData?.estimatedPoints != null && {\n [PerpsEventProperties.ESTIMATED_REWARDS]:\n params.trackingData.estimatedPoints,\n }),\n ...((params.trackingData?.marketPrice || result?.averagePrice) && {\n [PerpsEventProperties.ASSET_PRICE]: result?.averagePrice\n ? parseFloat(result.averagePrice)\n : params.trackingData?.marketPrice,\n }),\n ...(params.orderType === 'limit' &&\n params.price && {\n [PerpsEventProperties.LIMIT_PRICE]: parseFloat(params.price),\n }),\n ...(params.trackingData?.receivedAmount != null && {\n [PerpsEventProperties.RECEIVED_AMOUNT]:\n params.trackingData.receivedAmount,\n }),\n };\n\n // Add success-specific properties\n if (status === PerpsEventValues.STATUS.EXECUTED) {\n return {\n ...baseProperties,\n [PerpsEventProperties.CLOSE_TYPE]: metrics.closeType,\n };\n }\n\n // Add error for failures\n return {\n ...baseProperties,\n ...(error && { [PerpsEventProperties.ERROR_MESSAGE]: error }),\n };\n }\n\n /**\n * Track position close result analytics (consolidates all tracking logic).\n *\n * @param options - Tracking options\n * @param options.position\n * @param options.result\n * @param options.error\n * @param options.params\n * @param options.context\n * @param options.duration\n */\n private trackPositionCloseResult(options: {\n position: Position | undefined;\n result: OrderResult | null;\n error?: Error;\n params: ClosePositionParams;\n context: ServiceContext;\n duration: number;\n }): void {\n const { position, result, error, params, duration } = options;\n\n if (!position) {\n return;\n }\n\n const metrics = result\n ? this.calculateCloseMetrics(position, params, result)\n : {\n direction:\n parseFloat(position.size) > 0\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n closePercentage: params.size\n ? (parseFloat(params.size) / Math.abs(parseFloat(position.size))) *\n 100\n : 100,\n closeType: PerpsEventValues.CLOSE_TYPE.FULL,\n orderType: params.orderType || PerpsEventValues.ORDER_TYPE.MARKET,\n requestedSize: params.size\n ? parseFloat(params.size)\n : Math.abs(parseFloat(position.size)),\n filledSize: 0,\n isPartiallyFilled: false,\n };\n\n // Track partially filled event if applicable\n if (result?.success && metrics.isPartiallyFilled) {\n const partialProperties = this.buildCloseEventProperties(\n position,\n params,\n metrics,\n result,\n PerpsEventValues.STATUS.PARTIALLY_FILLED,\n );\n\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.PositionCloseTransaction,\n {\n ...partialProperties,\n [PerpsEventProperties.AMOUNT_FILLED]: metrics.filledSize,\n [PerpsEventProperties.REMAINING_AMOUNT]:\n metrics.requestedSize - metrics.filledSize,\n [PerpsEventProperties.COMPLETION_DURATION]: duration,\n },\n );\n }\n\n // Determine status\n const status =\n result?.success === true\n ? PerpsEventValues.STATUS.EXECUTED\n : PerpsEventValues.STATUS.FAILED;\n\n const errorMessage = error?.message || result?.error;\n\n // Track main close event\n const eventProperties = this.buildCloseEventProperties(\n position,\n params,\n metrics,\n result,\n status,\n errorMessage,\n );\n\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.PositionCloseTransaction,\n {\n ...eventProperties,\n [PerpsEventProperties.COMPLETION_DURATION]: duration,\n },\n );\n }\n\n /**\n * Handle data lake reporting (fire-and-forget).\n *\n * @param reportOrderToDataLake - Data lake reporting function\n * @param symbol - Asset symbol\n * @param context - Service context\n */\n private handleDataLakeReporting(\n reportOrderToDataLake: (params: {\n action: 'open' | 'close';\n symbol: string;\n }) => Promise<{ success: boolean; error?: string }>,\n symbol: string,\n context: ServiceContext,\n ): void {\n reportOrderToDataLake({\n action: 'close',\n symbol,\n }).catch((caughtError: unknown) => {\n const errorObj =\n caughtError instanceof Error\n ? caughtError\n : new Error(String(caughtError));\n this.deps.logger.error(errorObj, {\n tags: {\n feature: 'perps',\n provider: context.tracingContext.provider,\n network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',\n },\n context: {\n name: context.errorContext.controller,\n data: {\n method: context.errorContext.method,\n operation: 'reportOrderToDataLake',\n symbol,\n },\n },\n });\n });\n }\n\n /**\n * Calculate fee discount with performance measurement.\n * Uses controller dependencies injected via setControllerDependencies().\n * Helper method for placeOrder orchestration.\n *\n * @returns Fee discount in basis points or undefined\n */\n private async calculateFeeDiscountWithMeasurement(): Promise<\n number | undefined\n > {\n // Check if controller dependencies are available\n if (!this.controllerDeps) {\n this.deps.debugLogger.log(\n 'TradingService: Controller dependencies not set, skipping fee discount',\n );\n return undefined;\n }\n\n const { controllers, rewardsIntegrationService } = this.controllerDeps;\n\n const orderExecutionFeeDiscountStartTime = this.deps.performance.now();\n\n // Calculate fee discount using injected controllers\n const discountBips =\n await rewardsIntegrationService.calculateUserFeeDiscount({\n controllers,\n });\n\n const orderExecutionFeeDiscountDuration =\n this.deps.performance.now() - orderExecutionFeeDiscountStartTime;\n\n // Record measurement\n this.deps.tracer.setMeasurement(\n PerpsMeasurementName.PerpsRewardsOrderExecutionFeeDiscountApiCall,\n orderExecutionFeeDiscountDuration,\n 'millisecond',\n );\n\n this.deps.debugLogger.log(\n 'TradingService: Fee discount API call completed',\n {\n discountBips,\n duration: `${orderExecutionFeeDiscountDuration.toFixed(0)}ms`,\n },\n );\n\n return discountBips;\n }\n\n /**\n * Edit an existing order with full orchestration.\n * Handles tracing, fee discounts, state management, and analytics.\n *\n * @param options - Options for editing order\n * @param options.provider\n * @param options.params\n * @param options.context\n * @returns Order result\n */\n async editOrder(options: {\n provider: PerpsProvider;\n params: EditOrderParams;\n context: ServiceContext;\n }): Promise<OrderResult> {\n const { provider, params, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let traceData:\n | { success: boolean; error?: string; orderId?: string }\n | undefined;\n\n try {\n this.deps.tracer.trace({\n name: PerpsTraceNames.EditOrder,\n id: traceId,\n op: PerpsTraceOperations.OrderSubmission,\n tags: {\n provider: context.tracingContext.provider,\n orderType: params.newOrder.orderType,\n market: params.newOrder.symbol,\n leverage: String(params.newOrder.leverage || 1),\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n isBuy: params.newOrder.isBuy,\n orderPrice: params.newOrder.price || '',\n },\n });\n\n // Calculate fee discount only if required dependencies are available\n const feeDiscountBips = await this.calculateFeeDiscountWithMeasurement();\n\n // Execute order edit with fee discount management\n const result = await this.withFeeDiscount({\n provider,\n feeDiscountBips,\n operation: () => provider.editOrder(params),\n });\n\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Track order edit executed\n const editExecutedProps: PerpsAnalyticsProperties = {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.EXECUTED,\n [PerpsEventProperties.ASSET]: params.newOrder.symbol,\n [PerpsEventProperties.DIRECTION]: params.newOrder.isBuy\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n [PerpsEventProperties.ORDER_TYPE]: params.newOrder.orderType,\n [PerpsEventProperties.LEVERAGE]: params.newOrder.leverage || 1,\n [PerpsEventProperties.ORDER_SIZE]: params.newOrder.size,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n };\n if (params.newOrder.price) {\n editExecutedProps[PerpsEventProperties.LIMIT_PRICE] = parseFloat(\n params.newOrder.price,\n );\n }\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.TradeTransaction,\n editExecutedProps,\n );\n\n traceData = { success: true, orderId: result.orderId || '' };\n } else {\n // Track order edit failed\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.TradeTransaction,\n {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: params.newOrder.symbol,\n [PerpsEventProperties.DIRECTION]: params.newOrder.isBuy\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n [PerpsEventProperties.ORDER_TYPE]: params.newOrder.orderType,\n [PerpsEventProperties.LEVERAGE]: params.newOrder.leverage || 1,\n [PerpsEventProperties.ORDER_SIZE]: params.newOrder.size,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]:\n result.error || 'Unknown error',\n },\n );\n\n traceData = { success: false, error: result.error || 'Unknown error' };\n }\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Track order edit exception\n this.deps.metrics.trackPerpsEvent(PerpsAnalyticsEvent.TradeTransaction, {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: params.newOrder.symbol,\n [PerpsEventProperties.DIRECTION]: params.newOrder.isBuy\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n [PerpsEventProperties.ORDER_TYPE]: params.newOrder.orderType,\n [PerpsEventProperties.LEVERAGE]: params.newOrder.leverage || 1,\n [PerpsEventProperties.ORDER_SIZE]: params.newOrder.size,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]: error.message,\n });\n\n this.deps.logger.error(error, {\n tags: {\n feature: 'perps',\n provider: context.tracingContext.provider,\n network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',\n },\n context: {\n name: context.errorContext.controller,\n data: {\n method: context.errorContext.method,\n orderId: params.orderId,\n },\n },\n });\n\n traceData = {\n success: false,\n error: error.message,\n };\n throw err;\n } finally {\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.EditOrder,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Cancel a single order with full orchestration.\n * Handles tracing, state management, and analytics.\n *\n * @param options - Options for canceling order\n * @param options.provider\n * @param options.params\n * @param options.context\n * @returns Cancel order result\n */\n async cancelOrder(options: {\n provider: PerpsProvider;\n params: CancelOrderParams;\n context: ServiceContext;\n }): Promise<CancelOrderResult> {\n const { provider, params, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let traceData:\n | { success: boolean; error?: string; orderId?: string }\n | undefined;\n\n try {\n // Start trace for the entire operation\n this.deps.tracer.trace({\n name: PerpsTraceNames.CancelOrder,\n id: traceId,\n op: PerpsTraceOperations.OrderSubmission,\n tags: {\n provider: context.tracingContext.provider,\n market: params.symbol,\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n orderId: params.orderId,\n },\n });\n\n // Execute order cancellation\n const result = await provider.cancelOrder(params);\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Track order cancel executed\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.OrderCancelTransaction,\n {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.EXECUTED,\n [PerpsEventProperties.ASSET]: params.symbol,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n },\n );\n\n traceData = { success: true, orderId: params.orderId };\n } else {\n // Track order cancel failed\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.OrderCancelTransaction,\n {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: params.symbol,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]:\n result.error || 'Unknown error',\n },\n );\n\n traceData = { success: false, error: result.error || 'Unknown error' };\n }\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Track order cancel exception\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.OrderCancelTransaction,\n {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: params.symbol,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]: error.message,\n },\n );\n\n this.deps.logger.error(\n error,\n this.getErrorContext('cancelOrder', { symbol: params.symbol }),\n );\n\n traceData = {\n success: false,\n error: error.message,\n };\n throw err;\n } finally {\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.CancelOrder,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Cancel multiple orders with full orchestration.\n * Handles tracing, stream pausing, filtering, batch operations, and analytics.\n *\n * @param options - Options for canceling multiple orders\n * @param options.provider\n * @param options.params\n * @param options.context\n * @param options.withStreamPause\n * @returns Cancel orders result\n */\n async cancelOrders(options: {\n provider: PerpsProvider;\n params: CancelOrdersParams;\n context: ServiceContext;\n withStreamPause: <T>(\n operation: () => Promise<T>,\n channels: string[],\n ) => Promise<T>;\n }): Promise<CancelOrdersResult> {\n const { provider, params, context, withStreamPause } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let operationResult: CancelOrdersResult | null = null;\n let operationError: Error | null = null;\n\n try {\n // Start trace for batch operation\n this.deps.tracer.trace({\n name: PerpsTraceNames.CancelOrder,\n id: traceId,\n op: PerpsTraceOperations.OrderSubmission,\n tags: {\n provider: context.tracingContext.provider,\n isBatch: 'true',\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n cancelAll: params.cancelAll ? 'true' : 'false',\n symbolCount: params.symbols?.length || 0,\n orderIdCount: params.orderIds?.length || 0,\n },\n });\n\n // Pause orders stream to prevent WebSocket updates during cancellation\n operationResult = await withStreamPause(async () => {\n // Get all open orders\n if (!context.getOpenOrders) {\n throw new Error('getOpenOrders callback not provided in context');\n }\n const orders = await context.getOpenOrders();\n\n // Filter orders based on params\n let ordersToCancel = orders;\n if (params.cancelAll || (!params.symbols && !params.orderIds)) {\n // Cancel all orders (excluding TP/SL orders for positions)\n ordersToCancel = orders.filter(\n (order) => !isTPSLOrder(order.detailedOrderType),\n );\n } else if (params.orderIds && params.orderIds.length > 0) {\n // Cancel specific order IDs\n ordersToCancel = orders.filter((order) =>\n params.orderIds?.includes(order.orderId),\n );\n } else if (params.symbols && params.symbols.length > 0) {\n // Cancel orders for specific symbols\n ordersToCancel = orders.filter((order) =>\n params.symbols?.includes(order.symbol),\n );\n }\n\n if (ordersToCancel.length === 0) {\n return {\n success: false,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n }\n\n // Use batch cancel if provider supports it\n if (provider.cancelOrders) {\n return await provider.cancelOrders(\n ordersToCancel.map((order) => ({\n symbol: order.symbol,\n orderId: order.orderId,\n })),\n );\n }\n\n // Fallback: Cancel orders in parallel (for providers without batch support)\n const results = await Promise.allSettled(\n ordersToCancel.map((order) =>\n this.cancelOrder({\n provider,\n params: { symbol: order.symbol, orderId: order.orderId },\n context,\n }),\n ),\n );\n\n // Aggregate results\n const successCount = results.filter(\n (resItem) => resItem.status === 'fulfilled' && resItem.value.success,\n ).length;\n const failureCount = results.length - successCount;\n\n return {\n success: successCount > 0,\n successCount,\n failureCount,\n results: results.map((resItem, index) => {\n let errorMsg: string | undefined;\n if (resItem.status === 'rejected') {\n errorMsg =\n resItem.reason instanceof Error\n ? resItem.reason.message\n : 'Unknown error';\n } else if (\n resItem.status === 'fulfilled' &&\n !resItem.value.success\n ) {\n errorMsg = resItem.value.error;\n }\n\n return {\n orderId: ordersToCancel[index].orderId,\n symbol: ordersToCancel[index].symbol,\n success: Boolean(\n resItem.status === 'fulfilled' && resItem.value.success,\n ),\n error: errorMsg,\n };\n }),\n };\n }, ['orders']); // Disconnect orders stream during operation\n\n return operationResult;\n } catch (err) {\n operationError = err instanceof Error ? err : new Error(String(err));\n this.deps.logger.error(\n operationError,\n this.getErrorContext('cancelOrders'),\n );\n throw err;\n } finally {\n const completionDuration = this.deps.performance.now() - startTime;\n\n // Track batch cancel event (success or failure)\n const batchCancelProps: PerpsAnalyticsProperties = {\n [PerpsEventProperties.STATUS]:\n operationResult?.success && operationResult.successCount > 0\n ? PerpsEventValues.STATUS.EXECUTED\n : PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n };\n if (operationError) {\n batchCancelProps[PerpsEventProperties.ERROR_MESSAGE] =\n operationError.message;\n }\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.OrderCancelTransaction,\n batchCancelProps,\n );\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.CancelOrder,\n id: traceId,\n });\n }\n }\n\n /**\n * Close a single position with full orchestration.\n * Handles tracing, fee discounts, state management, analytics, and data lake reporting.\n *\n * @param options - Options for closing position\n * @param options.provider\n * @param options.params\n * @param options.context\n * @param options.reportOrderToDataLake\n * @returns Order result\n */\n async closePosition(options: {\n provider: PerpsProvider;\n params: ClosePositionParams;\n context: ServiceContext;\n reportOrderToDataLake: (params: {\n action: 'open' | 'close';\n symbol: string;\n }) => Promise<{ success: boolean; error?: string }>;\n }): Promise<OrderResult> {\n const { provider, params, context, reportOrderToDataLake } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let position: Position | undefined;\n let result: OrderResult | undefined;\n let traceData:\n | { success: boolean; error?: string; filledSize?: string }\n | undefined;\n\n try {\n this.deps.tracer.trace({\n name: PerpsTraceNames.ClosePosition,\n id: traceId,\n op: PerpsTraceOperations.PositionManagement,\n tags: {\n provider: context.tracingContext.provider,\n symbol: params.symbol,\n closeSize: params.size || 'full',\n isTestnet: String(context.tracingContext.isTestnet),\n },\n });\n\n // Load position data with measurement\n position = await this.loadPositionData({\n symbol: params.symbol,\n context,\n });\n\n // Calculate fee discount with measurement\n const feeDiscountBips = await this.calculateFeeDiscountWithMeasurement();\n\n // Execute position close with fee discount management\n result = await this.withFeeDiscount({\n provider,\n feeDiscountBips,\n operation: () => provider.closePosition(params),\n });\n\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Report to data lake (fire-and-forget)\n this.handleDataLakeReporting(\n reportOrderToDataLake,\n params.symbol,\n context,\n );\n\n traceData = { success: true, filledSize: result.filledSize || '' };\n } else {\n traceData = { success: false, error: result.error || 'Unknown error' };\n }\n\n // Track analytics (success or failure, includes partial fills)\n this.trackPositionCloseResult({\n position,\n result,\n params,\n context,\n duration: completionDuration,\n });\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const error = err instanceof Error ? err : new Error(String(err));\n\n traceData = {\n success: false,\n error: error.message,\n };\n\n // Track analytics for exception\n this.trackPositionCloseResult({\n position,\n result: null,\n error,\n params,\n context,\n duration: completionDuration,\n });\n\n this.deps.logger.error(error, {\n tags: {\n feature: 'perps',\n provider: context.tracingContext.provider,\n network: context.tracingContext.isTestnet ? 'testnet' : 'mainnet',\n },\n context: {\n name: context.errorContext.controller,\n data: {\n method: context.errorContext.method,\n symbol: params.symbol,\n },\n },\n });\n\n throw err;\n } finally {\n // Always end trace on exit (success or failure)\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.ClosePosition,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Close multiple positions with full orchestration.\n * Handles tracing, fee discounts, batch operations, and analytics.\n *\n * @param options - Options for closing multiple positions\n * @param options.provider\n * @param options.params\n * @param options.context\n * @returns Close positions result\n */\n async closePositions(options: {\n provider: PerpsProvider;\n params: ClosePositionsParams;\n context: ServiceContext;\n }): Promise<ClosePositionsResult> {\n const { provider, params, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let operationResult: ClosePositionsResult | null = null;\n let operationError: Error | null = null;\n\n try {\n // Start trace for batch operation\n this.deps.tracer.trace({\n name: PerpsTraceNames.ClosePosition,\n id: traceId,\n op: PerpsTraceOperations.PositionManagement,\n tags: {\n provider: context.tracingContext.provider,\n isBatch: 'true',\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n closeAll: params.closeAll ? 'true' : 'false',\n symbolCount: params.symbols?.length || 0,\n },\n });\n\n this.deps.debugLogger.log('[closePositions] Batch method check', {\n providerType: provider.protocolId,\n hasBatchMethod: Boolean(provider.closePositions),\n methodType: typeof provider.closePositions,\n providerKeys: Object.keys(provider).filter((key) =>\n key.includes('close'),\n ),\n });\n\n // Use batch close if provider supports it (provider handles filtering)\n if (provider.closePositions) {\n const feeDiscountBips =\n await this.calculateFeeDiscountWithMeasurement();\n\n operationResult = await this.withFeeDiscount({\n provider,\n feeDiscountBips,\n operation: async () => {\n if (!provider.closePositions) {\n throw new Error('closePositions method not available');\n }\n return provider.closePositions(params);\n },\n });\n } else {\n // Fallback: Get positions, filter, and close in parallel\n if (!context.getPositions) {\n throw new Error('getPositions callback not provided in context');\n }\n const positions = await context.getPositions();\n\n const positionsToClose =\n params.closeAll || !params.symbols || params.symbols.length === 0\n ? positions\n : positions.filter((pos) => params.symbols?.includes(pos.symbol));\n\n if (positionsToClose.length === 0) {\n operationResult = {\n success: false,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n return operationResult;\n }\n\n const results = await Promise.allSettled(\n positionsToClose.map((pos) =>\n this.closePosition({\n provider,\n params: { symbol: pos.symbol },\n context,\n reportOrderToDataLake: () => Promise.resolve({ success: true }), // No-op for batch fallback\n }),\n ),\n );\n\n // Aggregate results\n const successCount = results.filter(\n (resItem) => resItem.status === 'fulfilled' && resItem.value.success,\n ).length;\n const failureCount = results.length - successCount;\n\n operationResult = {\n success: successCount > 0,\n successCount,\n failureCount,\n results: results.map((resItem, index) => {\n let errorMsg: string | undefined;\n if (resItem.status === 'rejected') {\n errorMsg =\n resItem.reason instanceof Error\n ? resItem.reason.message\n : 'Unknown error';\n } else if (\n resItem.status === 'fulfilled' &&\n !resItem.value.success\n ) {\n errorMsg = resItem.value.error;\n }\n\n return {\n symbol: positionsToClose[index].symbol,\n success: Boolean(\n resItem.status === 'fulfilled' && resItem.value.success,\n ),\n error: errorMsg,\n };\n }),\n };\n }\n\n return operationResult;\n } catch (err) {\n operationError = err instanceof Error ? err : new Error(String(err));\n this.deps.logger.error(\n operationError,\n this.getErrorContext('closePositions', {\n symbols: params.symbols?.length || 0,\n closeAll: params.closeAll,\n }),\n );\n throw err;\n } finally {\n const completionDuration = this.deps.performance.now() - startTime;\n\n // Track batch close event (success or failure)\n const batchCloseProps: PerpsAnalyticsProperties = {\n [PerpsEventProperties.STATUS]:\n operationResult?.success && operationResult.successCount > 0\n ? PerpsEventValues.STATUS.EXECUTED\n : PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n };\n if (operationError) {\n batchCloseProps[PerpsEventProperties.ERROR_MESSAGE] =\n operationError.message;\n }\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.PositionCloseTransaction,\n batchCloseProps,\n );\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.ClosePosition,\n id: traceId,\n });\n }\n }\n\n /**\n * Update TP/SL for an existing position with full orchestration.\n * Handles tracing, fee discounts, state management, and analytics.\n *\n * @param options - Options for updating TP/SL\n * @param options.provider\n * @param options.params\n * @param options.context\n * @returns Order result\n */\n async updatePositionTPSL(options: {\n provider: PerpsProvider;\n params: UpdatePositionTPSLParams;\n context: ServiceContext;\n }): Promise<OrderResult> {\n const { provider, params, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n let traceData: { success: boolean; error?: string } | undefined;\n let result: OrderResult | undefined;\n let errorMessage: string | undefined;\n\n // Extract tracking data with defaults\n const direction = params.trackingData?.direction;\n const positionSize = params.trackingData?.positionSize;\n const source =\n params.trackingData?.source || PerpsEventValues.SOURCE.TP_SL_VIEW;\n const takeProfitPercentage = params.trackingData?.takeProfitPercentage;\n const stopLossPercentage = params.trackingData?.stopLossPercentage;\n const isEditingExistingPosition =\n params.trackingData?.isEditingExistingPosition ?? false;\n\n try {\n this.deps.tracer.trace({\n name: PerpsTraceNames.UpdateTpsl,\n id: traceId,\n op: PerpsTraceOperations.PositionManagement,\n tags: {\n provider: context.tracingContext.provider,\n market: params.symbol,\n isTestnet: String(context.tracingContext.isTestnet),\n },\n data: {\n takeProfitPrice: params.takeProfitPrice || '',\n stopLossPrice: params.stopLossPrice || '',\n },\n });\n\n // Get fee discount from rewards\n const feeDiscountBips = await this.calculateFeeDiscountWithMeasurement();\n\n // Execute with fee discount management\n result = await this.withFeeDiscount({\n provider,\n feeDiscountBips,\n operation: () => provider.updatePositionTPSL(params),\n });\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n traceData = { success: true };\n } else {\n errorMessage = result.error || 'Unknown error';\n traceData = { success: false, error: errorMessage };\n }\n\n return result;\n } catch (err) {\n errorMessage = err instanceof Error ? err.message : 'Unknown error';\n traceData = { success: false, error: errorMessage };\n throw err;\n } finally {\n const completionDuration = this.deps.performance.now() - startTime;\n\n // Determine screen type based on whether editing existing position\n const screenType = isEditingExistingPosition\n ? PerpsEventValues.SCREEN_TYPE.EDIT_TPSL\n : PerpsEventValues.SCREEN_TYPE.CREATE_TPSL;\n\n // Determine if TP/SL are set\n const hasTakeProfit = Boolean(params.takeProfitPrice);\n const hasStopLoss = Boolean(params.stopLossPrice);\n\n // Build comprehensive event properties\n const eventProperties = {\n [PerpsEventProperties.STATUS]: result?.success\n ? PerpsEventValues.STATUS.EXECUTED\n : PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: params.symbol,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.SOURCE]: source,\n [PerpsEventProperties.SCREEN_TYPE]: screenType,\n [PerpsEventProperties.HAS_TAKE_PROFIT]: hasTakeProfit,\n [PerpsEventProperties.HAS_STOP_LOSS]: hasStopLoss,\n ...(direction && {\n [PerpsEventProperties.DIRECTION]:\n direction === 'long'\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n }),\n ...(positionSize !== undefined && {\n [PerpsEventProperties.POSITION_SIZE]: positionSize,\n }),\n ...(params.takeProfitPrice && {\n [PerpsEventProperties.TAKE_PROFIT_PRICE]: parseFloat(\n params.takeProfitPrice,\n ),\n }),\n ...(params.stopLossPrice && {\n [PerpsEventProperties.STOP_LOSS_PRICE]: parseFloat(\n params.stopLossPrice,\n ),\n }),\n ...(takeProfitPercentage !== undefined && {\n [PerpsEventProperties.TAKE_PROFIT_PERCENTAGE]: takeProfitPercentage,\n }),\n ...(stopLossPercentage !== undefined && {\n [PerpsEventProperties.STOP_LOSS_PERCENTAGE]: stopLossPercentage,\n }),\n ...(errorMessage && {\n [PerpsEventProperties.ERROR_MESSAGE]: errorMessage,\n }),\n };\n\n // Track event once with all properties\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.RiskManagement,\n eventProperties,\n );\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.UpdateTpsl,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Update margin for an existing position (add or remove).\n *\n * @param options - Options for updating margin\n * @param options.provider\n * @param options.symbol\n * @param options.amount\n * @param options.context\n * @returns Margin update result\n */\n async updateMargin(options: {\n provider: PerpsProvider;\n symbol: string;\n amount: string;\n context: ServiceContext;\n }): Promise<{ success: boolean; error?: string }> {\n const { provider, symbol, amount, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n\n try {\n this.deps.tracer.trace({\n name: PerpsTraceNames.UpdateMargin,\n id: traceId,\n op: PerpsTraceOperations.PositionManagement,\n tags: {\n provider: context.tracingContext.provider,\n symbol,\n isAdd: String(parseFloat(amount) > 0),\n isTestnet: String(context.tracingContext.isTestnet),\n },\n });\n\n // Call provider method\n const result = await provider.updateMargin?.({ symbol, amount });\n\n if (!result) {\n throw new Error('Provider does not support margin adjustment');\n }\n\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Track success analytics\n this.deps.metrics.trackPerpsEvent(PerpsAnalyticsEvent.RiskManagement, {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.EXECUTED,\n [PerpsEventProperties.ASSET]: symbol,\n [PerpsEventProperties.ACTION]:\n parseFloat(amount) > 0 ? 'add_margin' : 'remove_margin',\n [PerpsEventProperties.MARGIN_USED]: Math.abs(parseFloat(amount)),\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n });\n }\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.UpdateMargin,\n id: traceId,\n data: { success: result.success, error: result.error || '' },\n });\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n const error = err instanceof Error ? err : new Error(String(err));\n\n this.deps.logger.error(\n error,\n this.getErrorContext('updateMargin', { symbol, amount }),\n );\n\n // Track failure analytics\n this.deps.metrics.trackPerpsEvent(PerpsAnalyticsEvent.RiskManagement, {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: symbol,\n [PerpsEventProperties.ACTION]:\n parseFloat(amount) > 0 ? 'add_margin' : 'remove_margin',\n [PerpsEventProperties.MARGIN_USED]: Math.abs(parseFloat(amount)),\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]: errorMessage,\n });\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.UpdateMargin,\n id: traceId,\n data: { success: false, error: errorMessage },\n });\n\n throw err;\n }\n }\n\n /**\n * Flip position (reverse direction while keeping size and leverage).\n *\n * @param options - Options for flipping position\n * @param options.provider\n * @param options.position\n * @param options.context\n * @returns Order result\n */\n async flipPosition(options: {\n provider: PerpsProvider;\n position: Position;\n context: ServiceContext;\n }): Promise<OrderResult> {\n const { provider, position, context } = options;\n const traceId = uuidv4();\n const startTime = this.deps.performance.now();\n\n try {\n this.deps.tracer.trace({\n name: PerpsTraceNames.FlipPosition,\n id: traceId,\n op: PerpsTraceOperations.PositionManagement,\n tags: {\n provider: context.tracingContext.provider,\n symbol: position.symbol,\n isTestnet: String(context.tracingContext.isTestnet),\n },\n });\n\n // Calculate flip parameters\n const positionSize = Math.abs(parseFloat(position.size));\n const isCurrentlyLong = parseFloat(position.size) > 0;\n const oppositeDirection = !isCurrentlyLong;\n\n // Validate available balance for fees\n const accountState = await provider.getAccountState?.();\n if (!accountState) {\n throw new Error('Failed to get account state');\n }\n\n const availableBalance = parseFloat(accountState.availableBalance);\n\n // Estimate fees (close + open, approximately 0.09% of notional)\n // Flip requires 2x position size (1x to close, 1x to open opposite)\n const entryPrice = parseFloat(position.entryPrice);\n const flipSize = positionSize * 2;\n const notionalValue = flipSize * entryPrice;\n const estimatedFees = notionalValue * 0.0009;\n\n if (estimatedFees > availableBalance) {\n throw new Error(\n `Insufficient balance for flip fees. Need $${estimatedFees.toFixed(2)}, have $${availableBalance.toFixed(2)}`,\n );\n }\n\n // Create order params for flip\n // Use 2x position size: 1x to close current position + 1x to open opposite position\n const orderParams: OrderParams = {\n symbol: position.symbol,\n isBuy: oppositeDirection,\n size: flipSize.toString(),\n orderType: 'market',\n leverage: position.leverage?.value,\n currentPrice: entryPrice,\n };\n\n // Place flip order (HyperLiquid handles margin transfer automatically)\n const result = await provider.placeOrder(orderParams);\n\n const completionDuration = this.deps.performance.now() - startTime;\n\n if (result.success) {\n // Update state on success\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastUpdateTimestamp = Date.now();\n });\n }\n\n // Track success analytics\n this.deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.TradeTransaction,\n {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.EXECUTED,\n [PerpsEventProperties.ASSET]: position.symbol,\n [PerpsEventProperties.DIRECTION]: oppositeDirection\n ? PerpsEventValues.DIRECTION.LONG\n : PerpsEventValues.DIRECTION.SHORT,\n [PerpsEventProperties.ORDER_TYPE]: 'market',\n [PerpsEventProperties.LEVERAGE]: position.leverage?.value || 1,\n [PerpsEventProperties.ORDER_SIZE]: positionSize,\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ACTION]: 'flip_position',\n },\n );\n }\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.FlipPosition,\n id: traceId,\n data: { success: result.success ?? false, error: result.error || '' },\n });\n\n return result;\n } catch (err) {\n const completionDuration = this.deps.performance.now() - startTime;\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n const error = err instanceof Error ? err : new Error(String(err));\n\n this.deps.logger.error(\n error,\n this.getErrorContext('flipPosition', { symbol: position.symbol }),\n );\n\n // Track failure analytics\n this.deps.metrics.trackPerpsEvent(PerpsAnalyticsEvent.TradeTransaction, {\n [PerpsEventProperties.STATUS]: PerpsEventValues.STATUS.FAILED,\n [PerpsEventProperties.ASSET]: position.symbol,\n [PerpsEventProperties.ACTION]: 'flip_position',\n [PerpsEventProperties.COMPLETION_DURATION]: completionDuration,\n [PerpsEventProperties.ERROR_MESSAGE]: errorMessage,\n });\n\n this.deps.tracer.endTrace({\n name: PerpsTraceNames.FlipPosition,\n id: traceId,\n data: { success: false, error: errorMessage },\n });\n\n throw err;\n }\n }\n}\n"]}
@@ -1,308 +0,0 @@
1
- import type { RewardsIntegrationService } from "./RewardsIntegrationService.cjs";
2
- import type { ServiceContext } from "./ServiceContext.cjs";
3
- import type { PerpsControllerMessenger } from "../PerpsController.cjs";
4
- import type { PerpsProvider, PerpsControllerAccess, OrderParams, OrderResult, EditOrderParams, CancelOrderParams, CancelOrderResult, CancelOrdersParams, CancelOrdersResult, ClosePositionParams, ClosePositionsParams, ClosePositionsResult, Position, UpdatePositionTPSLParams, PerpsPlatformDependencies } from "../types/index.cjs";
5
- /**
6
- * Controller-level dependencies for TradingService.
7
- * These are singletons that don't change per-call, injected once via setControllerDependencies().
8
- */
9
- export type TradingServiceControllerDeps = {
10
- controllers: PerpsControllerAccess;
11
- messenger: PerpsControllerMessenger;
12
- rewardsIntegrationService: RewardsIntegrationService;
13
- };
14
- /**
15
- * TradingService
16
- *
17
- * Handles trading operations with fee discount management.
18
- * Controller is responsible for analytics, state management, and tracing.
19
- *
20
- * Instance-based service with constructor injection of platform dependencies.
21
- * Controller-level dependencies (RewardsController, NetworkController, etc.)
22
- * are injected via setControllerDependencies() after construction.
23
- */
24
- export declare class TradingService {
25
- /**
26
- * Platform dependencies for logging, metrics, etc.
27
- */
28
- private readonly deps;
29
- /**
30
- * Controller-level dependencies for fee discount calculation.
31
- * Set via setControllerDependencies() after construction.
32
- */
33
- private controllerDeps;
34
- /**
35
- * Create a new TradingService instance.
36
- *
37
- * @param deps - Platform dependencies for logging, metrics, etc.
38
- */
39
- constructor(deps: PerpsPlatformDependencies);
40
- /**
41
- * Set controller-level dependencies for fee discount calculation.
42
- * Called by PerpsController after construction to inject singleton dependencies.
43
- *
44
- * @param controllerDeps - Controller-level dependencies (RewardsController, etc.)
45
- */
46
- setControllerDependencies(controllerDeps: TradingServiceControllerDeps): void;
47
- /**
48
- * Error context helper for consistent logging.
49
- *
50
- * @param method - Method name
51
- * @param additionalContext - Additional context data
52
- * @returns Error context object
53
- */
54
- private getErrorContext;
55
- /**
56
- * Track order result analytics event (success or failure).
57
- *
58
- * @param options - Tracking options
59
- * @param options.result
60
- * @param options.error
61
- * @param options.params
62
- * @param options.context
63
- * @param options.duration
64
- */
65
- private trackOrderResult;
66
- /**
67
- * Handle successful order placement (state updates, analytics, data lake reporting).
68
- *
69
- * @param options - Options for handling order success
70
- * @param options.params
71
- * @param options.context
72
- * @param options.reportOrderToDataLake
73
- */
74
- private handleOrderSuccess;
75
- /**
76
- * Execute a trading operation with fee discount context.
77
- * Ensures fee discount is always cleared after operation (success or failure).
78
- *
79
- * @param options - Options for fee discount context
80
- * @param options.provider
81
- * @param options.feeDiscountBips
82
- * @param options.operation
83
- * @returns The operation result
84
- */
85
- private withFeeDiscount;
86
- /**
87
- * Place a new order with full orchestration.
88
- * Handles tracing, fee discounts, state management, analytics, and data lake reporting.
89
- *
90
- * @param options - Options for placing order
91
- * @param options.provider
92
- * @param options.params
93
- * @param options.context
94
- * @param options.reportOrderToDataLake
95
- * @returns Order result
96
- */
97
- placeOrder(options: {
98
- provider: PerpsProvider;
99
- params: OrderParams;
100
- context: ServiceContext;
101
- reportOrderToDataLake: (params: {
102
- action: 'open' | 'close';
103
- symbol: string;
104
- sl_price?: number;
105
- tp_price?: number;
106
- }) => Promise<{
107
- success: boolean;
108
- error?: string;
109
- }>;
110
- }): Promise<OrderResult>;
111
- /**
112
- * Load position data with performance measurement.
113
- *
114
- * @param options - Options for loading position data
115
- * @param options.symbol
116
- * @param options.context
117
- * @returns The position or undefined
118
- */
119
- private loadPositionData;
120
- /**
121
- * Calculate close position metrics.
122
- *
123
- * @param position - The position being closed
124
- * @param params - Close position parameters
125
- * @param result - Order result
126
- * @returns Calculated metrics
127
- */
128
- private calculateCloseMetrics;
129
- /**
130
- * Build event properties for position close analytics.
131
- *
132
- * @param position - The position being closed
133
- * @param params - Close position parameters
134
- * @param metrics - Calculated metrics
135
- * @param metrics.direction
136
- * @param result - Order result
137
- * @param metrics.closePercentage
138
- * @param status - Event status
139
- * @param metrics.closeType
140
- * @param error - Error message if any
141
- * @param metrics.orderType
142
- * @param metrics.requestedSize
143
- * @returns Event properties
144
- */
145
- private buildCloseEventProperties;
146
- /**
147
- * Track position close result analytics (consolidates all tracking logic).
148
- *
149
- * @param options - Tracking options
150
- * @param options.position
151
- * @param options.result
152
- * @param options.error
153
- * @param options.params
154
- * @param options.context
155
- * @param options.duration
156
- */
157
- private trackPositionCloseResult;
158
- /**
159
- * Handle data lake reporting (fire-and-forget).
160
- *
161
- * @param reportOrderToDataLake - Data lake reporting function
162
- * @param symbol - Asset symbol
163
- * @param context - Service context
164
- */
165
- private handleDataLakeReporting;
166
- /**
167
- * Calculate fee discount with performance measurement.
168
- * Uses controller dependencies injected via setControllerDependencies().
169
- * Helper method for placeOrder orchestration.
170
- *
171
- * @returns Fee discount in basis points or undefined
172
- */
173
- private calculateFeeDiscountWithMeasurement;
174
- /**
175
- * Edit an existing order with full orchestration.
176
- * Handles tracing, fee discounts, state management, and analytics.
177
- *
178
- * @param options - Options for editing order
179
- * @param options.provider
180
- * @param options.params
181
- * @param options.context
182
- * @returns Order result
183
- */
184
- editOrder(options: {
185
- provider: PerpsProvider;
186
- params: EditOrderParams;
187
- context: ServiceContext;
188
- }): Promise<OrderResult>;
189
- /**
190
- * Cancel a single order with full orchestration.
191
- * Handles tracing, state management, and analytics.
192
- *
193
- * @param options - Options for canceling order
194
- * @param options.provider
195
- * @param options.params
196
- * @param options.context
197
- * @returns Cancel order result
198
- */
199
- cancelOrder(options: {
200
- provider: PerpsProvider;
201
- params: CancelOrderParams;
202
- context: ServiceContext;
203
- }): Promise<CancelOrderResult>;
204
- /**
205
- * Cancel multiple orders with full orchestration.
206
- * Handles tracing, stream pausing, filtering, batch operations, and analytics.
207
- *
208
- * @param options - Options for canceling multiple orders
209
- * @param options.provider
210
- * @param options.params
211
- * @param options.context
212
- * @param options.withStreamPause
213
- * @returns Cancel orders result
214
- */
215
- cancelOrders(options: {
216
- provider: PerpsProvider;
217
- params: CancelOrdersParams;
218
- context: ServiceContext;
219
- withStreamPause: <T>(operation: () => Promise<T>, channels: string[]) => Promise<T>;
220
- }): Promise<CancelOrdersResult>;
221
- /**
222
- * Close a single position with full orchestration.
223
- * Handles tracing, fee discounts, state management, analytics, and data lake reporting.
224
- *
225
- * @param options - Options for closing position
226
- * @param options.provider
227
- * @param options.params
228
- * @param options.context
229
- * @param options.reportOrderToDataLake
230
- * @returns Order result
231
- */
232
- closePosition(options: {
233
- provider: PerpsProvider;
234
- params: ClosePositionParams;
235
- context: ServiceContext;
236
- reportOrderToDataLake: (params: {
237
- action: 'open' | 'close';
238
- symbol: string;
239
- }) => Promise<{
240
- success: boolean;
241
- error?: string;
242
- }>;
243
- }): Promise<OrderResult>;
244
- /**
245
- * Close multiple positions with full orchestration.
246
- * Handles tracing, fee discounts, batch operations, and analytics.
247
- *
248
- * @param options - Options for closing multiple positions
249
- * @param options.provider
250
- * @param options.params
251
- * @param options.context
252
- * @returns Close positions result
253
- */
254
- closePositions(options: {
255
- provider: PerpsProvider;
256
- params: ClosePositionsParams;
257
- context: ServiceContext;
258
- }): Promise<ClosePositionsResult>;
259
- /**
260
- * Update TP/SL for an existing position with full orchestration.
261
- * Handles tracing, fee discounts, state management, and analytics.
262
- *
263
- * @param options - Options for updating TP/SL
264
- * @param options.provider
265
- * @param options.params
266
- * @param options.context
267
- * @returns Order result
268
- */
269
- updatePositionTPSL(options: {
270
- provider: PerpsProvider;
271
- params: UpdatePositionTPSLParams;
272
- context: ServiceContext;
273
- }): Promise<OrderResult>;
274
- /**
275
- * Update margin for an existing position (add or remove).
276
- *
277
- * @param options - Options for updating margin
278
- * @param options.provider
279
- * @param options.symbol
280
- * @param options.amount
281
- * @param options.context
282
- * @returns Margin update result
283
- */
284
- updateMargin(options: {
285
- provider: PerpsProvider;
286
- symbol: string;
287
- amount: string;
288
- context: ServiceContext;
289
- }): Promise<{
290
- success: boolean;
291
- error?: string;
292
- }>;
293
- /**
294
- * Flip position (reverse direction while keeping size and leverage).
295
- *
296
- * @param options - Options for flipping position
297
- * @param options.provider
298
- * @param options.position
299
- * @param options.context
300
- * @returns Order result
301
- */
302
- flipPosition(options: {
303
- provider: PerpsProvider;
304
- position: Position;
305
- context: ServiceContext;
306
- }): Promise<OrderResult>;
307
- }
308
- //# sourceMappingURL=TradingService.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TradingService.d.cts","sourceRoot":"","sources":["../../src/services/TradingService.ts"],"names":[],"mappings":"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"}