@metamask-previews/perps-controller 16.1.0-preview-abca9bcea → 17.0.0-preview-0a30e47

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 (891) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README.md +17 -0
  3. package/dist/PerpsController-method-action-types.d.ts +1235 -0
  4. package/dist/PerpsController-method-action-types.d.ts.map +1 -0
  5. package/dist/PerpsController-method-action-types.js +6 -0
  6. package/dist/PerpsController-method-action-types.js.map +1 -0
  7. package/dist/PerpsController.d.ts +1313 -0
  8. package/dist/PerpsController.d.ts.map +1 -0
  9. package/dist/PerpsController.js +5331 -0
  10. package/dist/PerpsController.js.map +1 -0
  11. package/dist/aggregation/SubscriptionMultiplexer.d.ts +171 -0
  12. package/dist/aggregation/SubscriptionMultiplexer.d.ts.map +1 -0
  13. package/dist/aggregation/SubscriptionMultiplexer.js +451 -0
  14. package/dist/aggregation/SubscriptionMultiplexer.js.map +1 -0
  15. package/dist/aggregation/index.d.ts +6 -0
  16. package/dist/aggregation/index.d.ts.map +1 -0
  17. package/dist/aggregation/index.js +5 -0
  18. package/dist/aggregation/index.js.map +1 -0
  19. package/dist/constants/chartConfig.d.ts +228 -0
  20. package/dist/constants/chartConfig.d.ts.map +1 -0
  21. package/dist/constants/chartConfig.js +233 -0
  22. package/dist/constants/chartConfig.js.map +1 -0
  23. package/dist/constants/eventNames.d.ts +565 -0
  24. package/dist/constants/eventNames.d.ts.map +1 -0
  25. package/dist/constants/eventNames.js +657 -0
  26. package/dist/constants/eventNames.js.map +1 -0
  27. package/dist/constants/hyperLiquidConfig.d.ts +280 -0
  28. package/dist/constants/hyperLiquidConfig.d.ts.map +1 -0
  29. package/dist/constants/hyperLiquidConfig.js +596 -0
  30. package/dist/constants/hyperLiquidConfig.js.map +1 -0
  31. package/dist/constants/index.d.ts +12 -0
  32. package/dist/constants/index.d.ts.map +1 -0
  33. package/dist/constants/index.js +12 -0
  34. package/dist/constants/index.js.map +1 -0
  35. package/dist/constants/lighterConfig.d.ts +204 -0
  36. package/dist/constants/lighterConfig.d.ts.map +1 -0
  37. package/dist/constants/lighterConfig.js +317 -0
  38. package/dist/constants/lighterConfig.js.map +1 -0
  39. package/dist/constants/orderTypes.d.ts +19 -0
  40. package/dist/constants/orderTypes.d.ts.map +1 -0
  41. package/dist/constants/orderTypes.js +27 -0
  42. package/dist/constants/orderTypes.js.map +1 -0
  43. package/dist/constants/performanceMetrics.d.ts +46 -0
  44. package/dist/constants/performanceMetrics.d.ts.map +1 -0
  45. package/dist/constants/performanceMetrics.js +60 -0
  46. package/dist/constants/performanceMetrics.js.map +1 -0
  47. package/dist/constants/perpsConfig.d.ts +480 -0
  48. package/dist/constants/perpsConfig.d.ts.map +1 -0
  49. package/dist/constants/perpsConfig.js +555 -0
  50. package/dist/constants/perpsConfig.js.map +1 -0
  51. package/dist/constants/transactionsHistoryConfig.d.ts +35 -0
  52. package/dist/constants/transactionsHistoryConfig.d.ts.map +1 -0
  53. package/dist/constants/transactionsHistoryConfig.js +35 -0
  54. package/dist/constants/transactionsHistoryConfig.js.map +1 -0
  55. package/dist/index.d.ts +95 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +80 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/perpsErrorCodes.d.ts +113 -0
  60. package/dist/perpsErrorCodes.d.ts.map +1 -0
  61. package/dist/perpsErrorCodes.js +133 -0
  62. package/dist/perpsErrorCodes.js.map +1 -0
  63. package/dist/providers/AggregatedPerpsProvider.d.ts +277 -0
  64. package/dist/providers/AggregatedPerpsProvider.d.ts.map +1 -0
  65. package/dist/providers/AggregatedPerpsProvider.js +827 -0
  66. package/dist/providers/AggregatedPerpsProvider.js.map +1 -0
  67. package/dist/providers/HyperLiquidProvider.d.ts +656 -0
  68. package/dist/providers/HyperLiquidProvider.d.ts.map +1 -0
  69. package/dist/providers/HyperLiquidProvider.js +11308 -0
  70. package/dist/providers/HyperLiquidProvider.js.map +1 -0
  71. package/dist/providers/LighterProvider.d.ts +179 -0
  72. package/dist/providers/LighterProvider.d.ts.map +1 -0
  73. package/dist/providers/LighterProvider.js +6599 -0
  74. package/dist/providers/LighterProvider.js.map +1 -0
  75. package/dist/routing/ProviderRouter.d.ts +112 -0
  76. package/dist/routing/ProviderRouter.d.ts.map +1 -0
  77. package/dist/routing/ProviderRouter.js +137 -0
  78. package/dist/routing/ProviderRouter.js.map +1 -0
  79. package/dist/routing/index.d.ts +6 -0
  80. package/dist/routing/index.d.ts.map +1 -0
  81. package/dist/routing/index.js +5 -0
  82. package/dist/routing/index.js.map +1 -0
  83. package/dist/selectors.d.ts +336 -0
  84. package/dist/selectors.d.ts.map +1 -0
  85. package/dist/selectors.js +249 -0
  86. package/dist/selectors.js.map +1 -0
  87. package/dist/services/AccountService.d.ts +56 -0
  88. package/dist/services/AccountService.d.ts.map +1 -0
  89. package/dist/services/AccountService.js +307 -0
  90. package/dist/services/AccountService.js.map +1 -0
  91. package/dist/services/AggregatedOrderBookConnection.d.ts +106 -0
  92. package/dist/services/AggregatedOrderBookConnection.d.ts.map +1 -0
  93. package/dist/services/AggregatedOrderBookConnection.js +388 -0
  94. package/dist/services/AggregatedOrderBookConnection.js.map +1 -0
  95. package/dist/services/DataLakeService.d.ts +51 -0
  96. package/dist/services/DataLakeService.d.ts.map +1 -0
  97. package/dist/services/DataLakeService.js +215 -0
  98. package/dist/services/DataLakeService.js.map +1 -0
  99. package/dist/services/DepositService.d.ts +39 -0
  100. package/dist/services/DepositService.d.ts.map +1 -0
  101. package/dist/services/DepositService.js +88 -0
  102. package/dist/services/DepositService.js.map +1 -0
  103. package/dist/services/DexDiscoveryCacheManager.d.ts +52 -0
  104. package/dist/services/DexDiscoveryCacheManager.d.ts.map +1 -0
  105. package/dist/services/DexDiscoveryCacheManager.js +130 -0
  106. package/dist/services/DexDiscoveryCacheManager.js.map +1 -0
  107. package/dist/services/EligibilityService.d.ts +28 -0
  108. package/dist/services/EligibilityService.d.ts.map +1 -0
  109. package/dist/services/EligibilityService.js +61 -0
  110. package/dist/services/EligibilityService.js.map +1 -0
  111. package/dist/services/FeatureFlagConfigurationService.d.ts +73 -0
  112. package/dist/services/FeatureFlagConfigurationService.d.ts.map +1 -0
  113. package/dist/services/FeatureFlagConfigurationService.js +266 -0
  114. package/dist/services/FeatureFlagConfigurationService.js.map +1 -0
  115. package/dist/services/HyperLiquidClientService.d.ts +252 -0
  116. package/dist/services/HyperLiquidClientService.d.ts.map +1 -0
  117. package/dist/services/HyperLiquidClientService.js +1152 -0
  118. package/dist/services/HyperLiquidClientService.js.map +1 -0
  119. package/dist/services/HyperLiquidSubscriptionService.d.ts +265 -0
  120. package/dist/services/HyperLiquidSubscriptionService.d.ts.map +1 -0
  121. package/dist/services/HyperLiquidSubscriptionService.js +3874 -0
  122. package/dist/services/HyperLiquidSubscriptionService.js.map +1 -0
  123. package/dist/services/HyperLiquidWalletService.d.ts +84 -0
  124. package/dist/services/HyperLiquidWalletService.d.ts.map +1 -0
  125. package/dist/services/HyperLiquidWalletService.js +168 -0
  126. package/dist/services/HyperLiquidWalletService.js.map +1 -0
  127. package/dist/services/LighterClientService.d.ts +200 -0
  128. package/dist/services/LighterClientService.d.ts.map +1 -0
  129. package/dist/services/LighterClientService.js +634 -0
  130. package/dist/services/LighterClientService.js.map +1 -0
  131. package/dist/services/LighterWalletService.d.ts +51 -0
  132. package/dist/services/LighterWalletService.d.ts.map +1 -0
  133. package/dist/services/LighterWalletService.js +92 -0
  134. package/dist/services/LighterWalletService.js.map +1 -0
  135. package/dist/services/MarketDataService.d.ts +350 -0
  136. package/dist/services/MarketDataService.d.ts.map +1 -0
  137. package/dist/services/MarketDataService.js +1165 -0
  138. package/dist/services/MarketDataService.js.map +1 -0
  139. package/dist/services/RewardsIntegrationService.d.ts +84 -0
  140. package/dist/services/RewardsIntegrationService.d.ts.map +1 -0
  141. package/dist/services/RewardsIntegrationService.js +380 -0
  142. package/dist/services/RewardsIntegrationService.js.map +1 -0
  143. package/dist/services/ServiceContext.d.ts +102 -0
  144. package/dist/services/ServiceContext.d.ts.map +1 -0
  145. package/dist/services/ServiceContext.js +2 -0
  146. package/dist/services/ServiceContext.js.map +1 -0
  147. package/dist/services/TerminalMarketService.d.ts +45 -0
  148. package/dist/services/TerminalMarketService.d.ts.map +1 -0
  149. package/dist/services/TerminalMarketService.js +640 -0
  150. package/dist/services/TerminalMarketService.js.map +1 -0
  151. package/dist/services/TradingReadinessCache.d.ts +204 -0
  152. package/dist/services/TradingReadinessCache.d.ts.map +1 -0
  153. package/dist/services/TradingReadinessCache.js +313 -0
  154. package/dist/services/TradingReadinessCache.js.map +1 -0
  155. package/dist/services/TradingService.d.ts +201 -0
  156. package/dist/services/TradingService.d.ts.map +1 -0
  157. package/dist/services/TradingService.js +1967 -0
  158. package/dist/services/TradingService.js.map +1 -0
  159. package/dist/types/config.d.ts +49 -0
  160. package/dist/types/config.d.ts.map +1 -0
  161. package/dist/types/config.js +2 -0
  162. package/dist/types/config.js.map +1 -0
  163. package/dist/types/hyperliquid-types.d.ts +67 -0
  164. package/dist/types/hyperliquid-types.d.ts.map +1 -0
  165. package/dist/types/hyperliquid-types.js +41 -0
  166. package/dist/types/hyperliquid-types.js.map +1 -0
  167. package/dist/types/index.d.ts +2192 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +133 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/types/lighter-types.d.ts +772 -0
  172. package/dist/types/lighter-types.d.ts.map +1 -0
  173. package/dist/types/lighter-types.js +10 -0
  174. package/dist/types/lighter-types.js.map +1 -0
  175. package/dist/types/messenger.d.ts +30 -0
  176. package/dist/types/messenger.d.ts.map +1 -0
  177. package/dist/types/messenger.js +2 -0
  178. package/dist/types/messenger.js.map +1 -0
  179. package/dist/types/perps-types.d.ts +184 -0
  180. package/dist/types/perps-types.d.ts.map +1 -0
  181. package/dist/types/perps-types.js +2 -0
  182. package/dist/types/perps-types.js.map +1 -0
  183. package/dist/types/token.d.ts +25 -0
  184. package/dist/types/token.d.ts.map +1 -0
  185. package/dist/types/token.js +2 -0
  186. package/dist/types/token.js.map +1 -0
  187. package/dist/types/transactionTypes.d.ts +60 -0
  188. package/dist/types/transactionTypes.d.ts.map +1 -0
  189. package/dist/types/transactionTypes.js +24 -0
  190. package/dist/types/transactionTypes.js.map +1 -0
  191. package/dist/utils/accountUtils.d.ts +72 -0
  192. package/dist/utils/accountUtils.d.ts.map +1 -0
  193. package/dist/utils/accountUtils.js +223 -0
  194. package/dist/utils/accountUtils.js.map +1 -0
  195. package/dist/utils/capabilitySymbols.d.ts +15 -0
  196. package/dist/utils/capabilitySymbols.d.ts.map +1 -0
  197. package/dist/utils/capabilitySymbols.js +21 -0
  198. package/dist/utils/capabilitySymbols.js.map +1 -0
  199. package/dist/utils/coalescePerpsRestRequest.d.ts +32 -0
  200. package/dist/utils/coalescePerpsRestRequest.d.ts.map +1 -0
  201. package/dist/utils/coalescePerpsRestRequest.js +66 -0
  202. package/dist/utils/coalescePerpsRestRequest.js.map +1 -0
  203. package/dist/utils/errorUtils.d.ts +50 -0
  204. package/dist/utils/errorUtils.d.ts.map +1 -0
  205. package/dist/utils/errorUtils.js +96 -0
  206. package/dist/utils/errorUtils.js.map +1 -0
  207. package/dist/utils/hyperLiquidAbstraction.d.ts +11 -0
  208. package/dist/utils/hyperLiquidAbstraction.d.ts.map +1 -0
  209. package/dist/utils/hyperLiquidAbstraction.js +19 -0
  210. package/dist/utils/hyperLiquidAbstraction.js.map +1 -0
  211. package/dist/utils/hyperLiquidAdapter.d.ts +77 -0
  212. package/dist/utils/hyperLiquidAdapter.d.ts.map +1 -0
  213. package/dist/utils/hyperLiquidAdapter.js +495 -0
  214. package/dist/utils/hyperLiquidAdapter.js.map +1 -0
  215. package/dist/utils/hyperLiquidOrderBookProcessor.d.ts +55 -0
  216. package/dist/utils/hyperLiquidOrderBookProcessor.d.ts.map +1 -0
  217. package/dist/utils/hyperLiquidOrderBookProcessor.js +78 -0
  218. package/dist/utils/hyperLiquidOrderBookProcessor.js.map +1 -0
  219. package/dist/utils/hyperLiquidPositionPreview.d.ts +124 -0
  220. package/dist/utils/hyperLiquidPositionPreview.d.ts.map +1 -0
  221. package/dist/utils/hyperLiquidPositionPreview.js +347 -0
  222. package/dist/utils/hyperLiquidPositionPreview.js.map +1 -0
  223. package/dist/utils/hyperLiquidValidation.d.ts +192 -0
  224. package/dist/utils/hyperLiquidValidation.d.ts.map +1 -0
  225. package/dist/utils/hyperLiquidValidation.js +786 -0
  226. package/dist/utils/hyperLiquidValidation.js.map +1 -0
  227. package/dist/utils/idUtils.d.ts +6 -0
  228. package/dist/utils/idUtils.d.ts.map +1 -0
  229. package/dist/utils/idUtils.js +10 -0
  230. package/dist/utils/idUtils.js.map +1 -0
  231. package/dist/utils/index.d.ts +29 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +34 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/lighterAdapter.d.ts +117 -0
  236. package/dist/utils/lighterAdapter.d.ts.map +1 -0
  237. package/dist/utils/lighterAdapter.js +562 -0
  238. package/dist/utils/lighterAdapter.js.map +1 -0
  239. package/dist/utils/marketDataTransform.d.ts +71 -0
  240. package/dist/utils/marketDataTransform.d.ts.map +1 -0
  241. package/dist/utils/marketDataTransform.js +243 -0
  242. package/dist/utils/marketDataTransform.js.map +1 -0
  243. package/dist/utils/marketSearch.d.ts +48 -0
  244. package/dist/utils/marketSearch.d.ts.map +1 -0
  245. package/dist/utils/marketSearch.js +106 -0
  246. package/dist/utils/marketSearch.js.map +1 -0
  247. package/dist/utils/marketUtils.d.ts +73 -0
  248. package/dist/utils/marketUtils.d.ts.map +1 -0
  249. package/dist/utils/marketUtils.js +248 -0
  250. package/dist/utils/marketUtils.js.map +1 -0
  251. package/dist/utils/orderCalculations.d.ts +306 -0
  252. package/dist/utils/orderCalculations.d.ts.map +1 -0
  253. package/dist/utils/orderCalculations.js +833 -0
  254. package/dist/utils/orderCalculations.js.map +1 -0
  255. package/dist/utils/orderTypes.d.ts +166 -0
  256. package/dist/utils/orderTypes.d.ts.map +1 -0
  257. package/dist/utils/orderTypes.js +287 -0
  258. package/dist/utils/orderTypes.js.map +1 -0
  259. package/dist/utils/perpsConnectionAttemptContext.d.ts +7 -0
  260. package/dist/utils/perpsConnectionAttemptContext.d.ts.map +1 -0
  261. package/dist/utils/perpsConnectionAttemptContext.js +15 -0
  262. package/dist/utils/perpsConnectionAttemptContext.js.map +1 -0
  263. package/dist/utils/perpsDiskPersistence.d.ts +112 -0
  264. package/dist/utils/perpsDiskPersistence.d.ts.map +1 -0
  265. package/dist/utils/perpsDiskPersistence.js +251 -0
  266. package/dist/utils/perpsDiskPersistence.js.map +1 -0
  267. package/dist/utils/perpsFormatters.d.ts +204 -0
  268. package/dist/utils/perpsFormatters.d.ts.map +1 -0
  269. package/dist/utils/perpsFormatters.js +500 -0
  270. package/dist/utils/perpsFormatters.js.map +1 -0
  271. package/dist/utils/rewardsUtils.d.ts +33 -0
  272. package/dist/utils/rewardsUtils.d.ts.map +1 -0
  273. package/dist/utils/rewardsUtils.js +92 -0
  274. package/dist/utils/rewardsUtils.js.map +1 -0
  275. package/dist/utils/significantFigures.d.ts +25 -0
  276. package/dist/utils/significantFigures.d.ts.map +1 -0
  277. package/dist/utils/significantFigures.js +82 -0
  278. package/dist/utils/significantFigures.js.map +1 -0
  279. package/dist/utils/sortMarkets.d.ts +25 -0
  280. package/dist/utils/sortMarkets.d.ts.map +1 -0
  281. package/dist/utils/sortMarkets.js +88 -0
  282. package/dist/utils/sortMarkets.js.map +1 -0
  283. package/dist/utils/standaloneInfoClient.d.ts +37 -0
  284. package/dist/utils/standaloneInfoClient.d.ts.map +1 -0
  285. package/dist/utils/standaloneInfoClient.js +64 -0
  286. package/dist/utils/standaloneInfoClient.js.map +1 -0
  287. package/dist/utils/stringParseUtils.d.ts +11 -0
  288. package/dist/utils/stringParseUtils.d.ts.map +1 -0
  289. package/dist/utils/stringParseUtils.js +28 -0
  290. package/dist/utils/stringParseUtils.js.map +1 -0
  291. package/dist/utils/transferData.d.ts +9 -0
  292. package/dist/utils/transferData.d.ts.map +1 -0
  293. package/dist/utils/transferData.js +29 -0
  294. package/dist/utils/transferData.js.map +1 -0
  295. package/dist/utils/wait.d.ts +2 -0
  296. package/dist/utils/wait.d.ts.map +1 -0
  297. package/dist/utils/wait.js +2 -0
  298. package/dist/utils/wait.js.map +1 -0
  299. package/package.json +33 -61
  300. package/dist/PerpsController-method-action-types.cjs +0 -7
  301. package/dist/PerpsController-method-action-types.cjs.map +0 -1
  302. package/dist/PerpsController-method-action-types.d.cts +0 -1235
  303. package/dist/PerpsController-method-action-types.d.cts.map +0 -1
  304. package/dist/PerpsController-method-action-types.d.mts +0 -1235
  305. package/dist/PerpsController-method-action-types.d.mts.map +0 -1
  306. package/dist/PerpsController-method-action-types.mjs +0 -6
  307. package/dist/PerpsController-method-action-types.mjs.map +0 -1
  308. package/dist/PerpsController.cjs +0 -5154
  309. package/dist/PerpsController.cjs.map +0 -1
  310. package/dist/PerpsController.d.cts +0 -1313
  311. package/dist/PerpsController.d.cts.map +0 -1
  312. package/dist/PerpsController.d.mts +0 -1313
  313. package/dist/PerpsController.d.mts.map +0 -1
  314. package/dist/PerpsController.mjs +0 -5142
  315. package/dist/PerpsController.mjs.map +0 -1
  316. package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -441
  317. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
  318. package/dist/aggregation/SubscriptionMultiplexer.d.cts +0 -171
  319. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
  320. package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -171
  321. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
  322. package/dist/aggregation/SubscriptionMultiplexer.mjs +0 -437
  323. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
  324. package/dist/aggregation/index.cjs +0 -9
  325. package/dist/aggregation/index.cjs.map +0 -1
  326. package/dist/aggregation/index.d.cts +0 -6
  327. package/dist/aggregation/index.d.cts.map +0 -1
  328. package/dist/aggregation/index.d.mts +0 -6
  329. package/dist/aggregation/index.d.mts.map +0 -1
  330. package/dist/aggregation/index.mjs +0 -5
  331. package/dist/aggregation/index.mjs.map +0 -1
  332. package/dist/constants/chartConfig.cjs +0 -239
  333. package/dist/constants/chartConfig.cjs.map +0 -1
  334. package/dist/constants/chartConfig.d.cts +0 -228
  335. package/dist/constants/chartConfig.d.cts.map +0 -1
  336. package/dist/constants/chartConfig.d.mts +0 -228
  337. package/dist/constants/chartConfig.d.mts.map +0 -1
  338. package/dist/constants/chartConfig.mjs +0 -233
  339. package/dist/constants/chartConfig.mjs.map +0 -1
  340. package/dist/constants/eventNames.cjs +0 -660
  341. package/dist/constants/eventNames.cjs.map +0 -1
  342. package/dist/constants/eventNames.d.cts +0 -565
  343. package/dist/constants/eventNames.d.cts.map +0 -1
  344. package/dist/constants/eventNames.d.mts +0 -565
  345. package/dist/constants/eventNames.d.mts.map +0 -1
  346. package/dist/constants/eventNames.mjs +0 -657
  347. package/dist/constants/eventNames.mjs.map +0 -1
  348. package/dist/constants/hyperLiquidConfig.cjs +0 -607
  349. package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
  350. package/dist/constants/hyperLiquidConfig.d.cts +0 -280
  351. package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
  352. package/dist/constants/hyperLiquidConfig.d.mts +0 -280
  353. package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
  354. package/dist/constants/hyperLiquidConfig.mjs +0 -596
  355. package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
  356. package/dist/constants/index.cjs +0 -28
  357. package/dist/constants/index.cjs.map +0 -1
  358. package/dist/constants/index.d.cts +0 -12
  359. package/dist/constants/index.d.cts.map +0 -1
  360. package/dist/constants/index.d.mts +0 -12
  361. package/dist/constants/index.d.mts.map +0 -1
  362. package/dist/constants/index.mjs +0 -12
  363. package/dist/constants/index.mjs.map +0 -1
  364. package/dist/constants/lighterConfig.cjs +0 -328
  365. package/dist/constants/lighterConfig.cjs.map +0 -1
  366. package/dist/constants/lighterConfig.d.cts +0 -204
  367. package/dist/constants/lighterConfig.d.cts.map +0 -1
  368. package/dist/constants/lighterConfig.d.mts +0 -204
  369. package/dist/constants/lighterConfig.d.mts.map +0 -1
  370. package/dist/constants/lighterConfig.mjs +0 -317
  371. package/dist/constants/lighterConfig.mjs.map +0 -1
  372. package/dist/constants/orderTypes.cjs +0 -31
  373. package/dist/constants/orderTypes.cjs.map +0 -1
  374. package/dist/constants/orderTypes.d.cts +0 -19
  375. package/dist/constants/orderTypes.d.cts.map +0 -1
  376. package/dist/constants/orderTypes.d.mts +0 -19
  377. package/dist/constants/orderTypes.d.mts.map +0 -1
  378. package/dist/constants/orderTypes.mjs +0 -27
  379. package/dist/constants/orderTypes.mjs.map +0 -1
  380. package/dist/constants/performanceMetrics.cjs +0 -63
  381. package/dist/constants/performanceMetrics.cjs.map +0 -1
  382. package/dist/constants/performanceMetrics.d.cts +0 -46
  383. package/dist/constants/performanceMetrics.d.cts.map +0 -1
  384. package/dist/constants/performanceMetrics.d.mts +0 -46
  385. package/dist/constants/performanceMetrics.d.mts.map +0 -1
  386. package/dist/constants/performanceMetrics.mjs +0 -60
  387. package/dist/constants/performanceMetrics.mjs.map +0 -1
  388. package/dist/constants/perpsConfig.cjs +0 -560
  389. package/dist/constants/perpsConfig.cjs.map +0 -1
  390. package/dist/constants/perpsConfig.d.cts +0 -480
  391. package/dist/constants/perpsConfig.d.cts.map +0 -1
  392. package/dist/constants/perpsConfig.d.mts +0 -480
  393. package/dist/constants/perpsConfig.d.mts.map +0 -1
  394. package/dist/constants/perpsConfig.mjs +0 -555
  395. package/dist/constants/perpsConfig.mjs.map +0 -1
  396. package/dist/constants/transactionsHistoryConfig.cjs +0 -38
  397. package/dist/constants/transactionsHistoryConfig.cjs.map +0 -1
  398. package/dist/constants/transactionsHistoryConfig.d.cts +0 -35
  399. package/dist/constants/transactionsHistoryConfig.d.cts.map +0 -1
  400. package/dist/constants/transactionsHistoryConfig.d.mts +0 -35
  401. package/dist/constants/transactionsHistoryConfig.d.mts.map +0 -1
  402. package/dist/constants/transactionsHistoryConfig.mjs +0 -35
  403. package/dist/constants/transactionsHistoryConfig.mjs.map +0 -1
  404. package/dist/index.cjs +0 -334
  405. package/dist/index.cjs.map +0 -1
  406. package/dist/index.d.cts +0 -95
  407. package/dist/index.d.cts.map +0 -1
  408. package/dist/index.d.mts +0 -95
  409. package/dist/index.d.mts.map +0 -1
  410. package/dist/index.mjs +0 -80
  411. package/dist/index.mjs.map +0 -1
  412. package/dist/perpsErrorCodes.cjs +0 -128
  413. package/dist/perpsErrorCodes.cjs.map +0 -1
  414. package/dist/perpsErrorCodes.d.cts +0 -105
  415. package/dist/perpsErrorCodes.d.cts.map +0 -1
  416. package/dist/perpsErrorCodes.d.mts +0 -105
  417. package/dist/perpsErrorCodes.d.mts.map +0 -1
  418. package/dist/perpsErrorCodes.mjs +0 -125
  419. package/dist/perpsErrorCodes.mjs.map +0 -1
  420. package/dist/providers/AggregatedPerpsProvider.cjs +0 -810
  421. package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
  422. package/dist/providers/AggregatedPerpsProvider.d.cts +0 -277
  423. package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
  424. package/dist/providers/AggregatedPerpsProvider.d.mts +0 -277
  425. package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
  426. package/dist/providers/AggregatedPerpsProvider.mjs +0 -805
  427. package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
  428. package/dist/providers/HyperLiquidProvider.cjs +0 -10963
  429. package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
  430. package/dist/providers/HyperLiquidProvider.d.cts +0 -656
  431. package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
  432. package/dist/providers/HyperLiquidProvider.d.mts +0 -656
  433. package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
  434. package/dist/providers/HyperLiquidProvider.mjs +0 -10959
  435. package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
  436. package/dist/providers/LighterProvider.cjs +0 -6575
  437. package/dist/providers/LighterProvider.cjs.map +0 -1
  438. package/dist/providers/LighterProvider.d.cts +0 -179
  439. package/dist/providers/LighterProvider.d.cts.map +0 -1
  440. package/dist/providers/LighterProvider.d.mts +0 -179
  441. package/dist/providers/LighterProvider.d.mts.map +0 -1
  442. package/dist/providers/LighterProvider.mjs +0 -6571
  443. package/dist/providers/LighterProvider.mjs.map +0 -1
  444. package/dist/routing/ProviderRouter.cjs +0 -154
  445. package/dist/routing/ProviderRouter.cjs.map +0 -1
  446. package/dist/routing/ProviderRouter.d.cts +0 -112
  447. package/dist/routing/ProviderRouter.d.cts.map +0 -1
  448. package/dist/routing/ProviderRouter.d.mts +0 -112
  449. package/dist/routing/ProviderRouter.d.mts.map +0 -1
  450. package/dist/routing/ProviderRouter.mjs +0 -150
  451. package/dist/routing/ProviderRouter.mjs.map +0 -1
  452. package/dist/routing/index.cjs +0 -9
  453. package/dist/routing/index.cjs.map +0 -1
  454. package/dist/routing/index.d.cts +0 -6
  455. package/dist/routing/index.d.cts.map +0 -1
  456. package/dist/routing/index.d.mts +0 -6
  457. package/dist/routing/index.d.mts.map +0 -1
  458. package/dist/routing/index.mjs +0 -5
  459. package/dist/routing/index.mjs.map +0 -1
  460. package/dist/selectors.cjs +0 -264
  461. package/dist/selectors.cjs.map +0 -1
  462. package/dist/selectors.d.cts +0 -336
  463. package/dist/selectors.d.cts.map +0 -1
  464. package/dist/selectors.d.mts +0 -336
  465. package/dist/selectors.d.mts.map +0 -1
  466. package/dist/selectors.mjs +0 -249
  467. package/dist/selectors.mjs.map +0 -1
  468. package/dist/services/AccountService.cjs +0 -324
  469. package/dist/services/AccountService.cjs.map +0 -1
  470. package/dist/services/AccountService.d.cts +0 -56
  471. package/dist/services/AccountService.d.cts.map +0 -1
  472. package/dist/services/AccountService.d.mts +0 -56
  473. package/dist/services/AccountService.d.mts.map +0 -1
  474. package/dist/services/AccountService.mjs +0 -320
  475. package/dist/services/AccountService.mjs.map +0 -1
  476. package/dist/services/AggregatedOrderBookConnection.cjs +0 -405
  477. package/dist/services/AggregatedOrderBookConnection.cjs.map +0 -1
  478. package/dist/services/AggregatedOrderBookConnection.d.cts +0 -106
  479. package/dist/services/AggregatedOrderBookConnection.d.cts.map +0 -1
  480. package/dist/services/AggregatedOrderBookConnection.d.mts +0 -106
  481. package/dist/services/AggregatedOrderBookConnection.d.mts.map +0 -1
  482. package/dist/services/AggregatedOrderBookConnection.mjs +0 -400
  483. package/dist/services/AggregatedOrderBookConnection.mjs.map +0 -1
  484. package/dist/services/DataLakeService.cjs +0 -233
  485. package/dist/services/DataLakeService.cjs.map +0 -1
  486. package/dist/services/DataLakeService.d.cts +0 -51
  487. package/dist/services/DataLakeService.d.cts.map +0 -1
  488. package/dist/services/DataLakeService.d.mts +0 -51
  489. package/dist/services/DataLakeService.d.mts.map +0 -1
  490. package/dist/services/DataLakeService.mjs +0 -229
  491. package/dist/services/DataLakeService.mjs.map +0 -1
  492. package/dist/services/DepositService.cjs +0 -105
  493. package/dist/services/DepositService.cjs.map +0 -1
  494. package/dist/services/DepositService.d.cts +0 -39
  495. package/dist/services/DepositService.d.cts.map +0 -1
  496. package/dist/services/DepositService.d.mts +0 -39
  497. package/dist/services/DepositService.d.mts.map +0 -1
  498. package/dist/services/DepositService.mjs +0 -101
  499. package/dist/services/DepositService.mjs.map +0 -1
  500. package/dist/services/DexDiscoveryCacheManager.cjs +0 -147
  501. package/dist/services/DexDiscoveryCacheManager.cjs.map +0 -1
  502. package/dist/services/DexDiscoveryCacheManager.d.cts +0 -52
  503. package/dist/services/DexDiscoveryCacheManager.d.cts.map +0 -1
  504. package/dist/services/DexDiscoveryCacheManager.d.mts +0 -52
  505. package/dist/services/DexDiscoveryCacheManager.d.mts.map +0 -1
  506. package/dist/services/DexDiscoveryCacheManager.mjs +0 -143
  507. package/dist/services/DexDiscoveryCacheManager.mjs.map +0 -1
  508. package/dist/services/EligibilityService.cjs +0 -78
  509. package/dist/services/EligibilityService.cjs.map +0 -1
  510. package/dist/services/EligibilityService.d.cts +0 -28
  511. package/dist/services/EligibilityService.d.cts.map +0 -1
  512. package/dist/services/EligibilityService.d.mts +0 -28
  513. package/dist/services/EligibilityService.d.mts.map +0 -1
  514. package/dist/services/EligibilityService.mjs +0 -74
  515. package/dist/services/EligibilityService.mjs.map +0 -1
  516. package/dist/services/FeatureFlagConfigurationService.cjs +0 -257
  517. package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
  518. package/dist/services/FeatureFlagConfigurationService.d.cts +0 -73
  519. package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
  520. package/dist/services/FeatureFlagConfigurationService.d.mts +0 -73
  521. package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
  522. package/dist/services/FeatureFlagConfigurationService.mjs +0 -253
  523. package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
  524. package/dist/services/HyperLiquidClientService.cjs +0 -1114
  525. package/dist/services/HyperLiquidClientService.cjs.map +0 -1
  526. package/dist/services/HyperLiquidClientService.d.cts +0 -252
  527. package/dist/services/HyperLiquidClientService.d.cts.map +0 -1
  528. package/dist/services/HyperLiquidClientService.d.mts +0 -252
  529. package/dist/services/HyperLiquidClientService.d.mts.map +0 -1
  530. package/dist/services/HyperLiquidClientService.mjs +0 -1109
  531. package/dist/services/HyperLiquidClientService.mjs.map +0 -1
  532. package/dist/services/HyperLiquidSubscriptionService.cjs +0 -3594
  533. package/dist/services/HyperLiquidSubscriptionService.cjs.map +0 -1
  534. package/dist/services/HyperLiquidSubscriptionService.d.cts +0 -265
  535. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +0 -1
  536. package/dist/services/HyperLiquidSubscriptionService.d.mts +0 -265
  537. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +0 -1
  538. package/dist/services/HyperLiquidSubscriptionService.mjs +0 -3590
  539. package/dist/services/HyperLiquidSubscriptionService.mjs.map +0 -1
  540. package/dist/services/HyperLiquidWalletService.cjs +0 -186
  541. package/dist/services/HyperLiquidWalletService.cjs.map +0 -1
  542. package/dist/services/HyperLiquidWalletService.d.cts +0 -84
  543. package/dist/services/HyperLiquidWalletService.d.cts.map +0 -1
  544. package/dist/services/HyperLiquidWalletService.d.mts +0 -84
  545. package/dist/services/HyperLiquidWalletService.d.mts.map +0 -1
  546. package/dist/services/HyperLiquidWalletService.mjs +0 -182
  547. package/dist/services/HyperLiquidWalletService.mjs.map +0 -1
  548. package/dist/services/LighterClientService.cjs +0 -643
  549. package/dist/services/LighterClientService.cjs.map +0 -1
  550. package/dist/services/LighterClientService.d.cts +0 -200
  551. package/dist/services/LighterClientService.d.cts.map +0 -1
  552. package/dist/services/LighterClientService.d.mts +0 -200
  553. package/dist/services/LighterClientService.d.mts.map +0 -1
  554. package/dist/services/LighterClientService.mjs +0 -637
  555. package/dist/services/LighterClientService.mjs.map +0 -1
  556. package/dist/services/LighterWalletService.cjs +0 -109
  557. package/dist/services/LighterWalletService.cjs.map +0 -1
  558. package/dist/services/LighterWalletService.d.cts +0 -51
  559. package/dist/services/LighterWalletService.d.cts.map +0 -1
  560. package/dist/services/LighterWalletService.d.mts +0 -51
  561. package/dist/services/LighterWalletService.d.mts.map +0 -1
  562. package/dist/services/LighterWalletService.mjs +0 -105
  563. package/dist/services/LighterWalletService.mjs.map +0 -1
  564. package/dist/services/MarketDataService.cjs +0 -1171
  565. package/dist/services/MarketDataService.cjs.map +0 -1
  566. package/dist/services/MarketDataService.d.cts +0 -350
  567. package/dist/services/MarketDataService.d.cts.map +0 -1
  568. package/dist/services/MarketDataService.d.mts +0 -350
  569. package/dist/services/MarketDataService.d.mts.map +0 -1
  570. package/dist/services/MarketDataService.mjs +0 -1167
  571. package/dist/services/MarketDataService.mjs.map +0 -1
  572. package/dist/services/RewardsIntegrationService.cjs +0 -391
  573. package/dist/services/RewardsIntegrationService.cjs.map +0 -1
  574. package/dist/services/RewardsIntegrationService.d.cts +0 -84
  575. package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
  576. package/dist/services/RewardsIntegrationService.d.mts +0 -84
  577. package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
  578. package/dist/services/RewardsIntegrationService.mjs +0 -387
  579. package/dist/services/RewardsIntegrationService.mjs.map +0 -1
  580. package/dist/services/ServiceContext.cjs +0 -3
  581. package/dist/services/ServiceContext.cjs.map +0 -1
  582. package/dist/services/ServiceContext.d.cts +0 -102
  583. package/dist/services/ServiceContext.d.cts.map +0 -1
  584. package/dist/services/ServiceContext.d.mts +0 -102
  585. package/dist/services/ServiceContext.d.mts.map +0 -1
  586. package/dist/services/ServiceContext.mjs +0 -2
  587. package/dist/services/ServiceContext.mjs.map +0 -1
  588. package/dist/services/TerminalMarketService.cjs +0 -623
  589. package/dist/services/TerminalMarketService.cjs.map +0 -1
  590. package/dist/services/TerminalMarketService.d.cts +0 -45
  591. package/dist/services/TerminalMarketService.d.cts.map +0 -1
  592. package/dist/services/TerminalMarketService.d.mts +0 -45
  593. package/dist/services/TerminalMarketService.d.mts.map +0 -1
  594. package/dist/services/TerminalMarketService.mjs +0 -619
  595. package/dist/services/TerminalMarketService.mjs.map +0 -1
  596. package/dist/services/TradingReadinessCache.cjs +0 -329
  597. package/dist/services/TradingReadinessCache.cjs.map +0 -1
  598. package/dist/services/TradingReadinessCache.d.cts +0 -204
  599. package/dist/services/TradingReadinessCache.d.cts.map +0 -1
  600. package/dist/services/TradingReadinessCache.d.mts +0 -204
  601. package/dist/services/TradingReadinessCache.d.mts.map +0 -1
  602. package/dist/services/TradingReadinessCache.mjs +0 -326
  603. package/dist/services/TradingReadinessCache.mjs.map +0 -1
  604. package/dist/services/TradingService.cjs +0 -1895
  605. package/dist/services/TradingService.cjs.map +0 -1
  606. package/dist/services/TradingService.d.cts +0 -201
  607. package/dist/services/TradingService.d.cts.map +0 -1
  608. package/dist/services/TradingService.d.mts +0 -201
  609. package/dist/services/TradingService.d.mts.map +0 -1
  610. package/dist/services/TradingService.mjs +0 -1891
  611. package/dist/services/TradingService.mjs.map +0 -1
  612. package/dist/types/config.cjs +0 -3
  613. package/dist/types/config.cjs.map +0 -1
  614. package/dist/types/config.d.cts +0 -49
  615. package/dist/types/config.d.cts.map +0 -1
  616. package/dist/types/config.d.mts +0 -49
  617. package/dist/types/config.d.mts.map +0 -1
  618. package/dist/types/config.mjs +0 -2
  619. package/dist/types/config.mjs.map +0 -1
  620. package/dist/types/hyperliquid-types.cjs +0 -45
  621. package/dist/types/hyperliquid-types.cjs.map +0 -1
  622. package/dist/types/hyperliquid-types.d.cts +0 -67
  623. package/dist/types/hyperliquid-types.d.cts.map +0 -1
  624. package/dist/types/hyperliquid-types.d.mts +0 -67
  625. package/dist/types/hyperliquid-types.d.mts.map +0 -1
  626. package/dist/types/hyperliquid-types.mjs +0 -41
  627. package/dist/types/hyperliquid-types.mjs.map +0 -1
  628. package/dist/types/index.cjs +0 -151
  629. package/dist/types/index.cjs.map +0 -1
  630. package/dist/types/index.d.cts +0 -2183
  631. package/dist/types/index.d.cts.map +0 -1
  632. package/dist/types/index.d.mts +0 -2183
  633. package/dist/types/index.d.mts.map +0 -1
  634. package/dist/types/index.mjs +0 -133
  635. package/dist/types/index.mjs.map +0 -1
  636. package/dist/types/lighter-types.cjs +0 -11
  637. package/dist/types/lighter-types.cjs.map +0 -1
  638. package/dist/types/lighter-types.d.cts +0 -763
  639. package/dist/types/lighter-types.d.cts.map +0 -1
  640. package/dist/types/lighter-types.d.mts +0 -763
  641. package/dist/types/lighter-types.d.mts.map +0 -1
  642. package/dist/types/lighter-types.mjs +0 -10
  643. package/dist/types/lighter-types.mjs.map +0 -1
  644. package/dist/types/messenger.cjs +0 -3
  645. package/dist/types/messenger.cjs.map +0 -1
  646. package/dist/types/messenger.d.cts +0 -30
  647. package/dist/types/messenger.d.cts.map +0 -1
  648. package/dist/types/messenger.d.mts +0 -30
  649. package/dist/types/messenger.d.mts.map +0 -1
  650. package/dist/types/messenger.mjs +0 -2
  651. package/dist/types/messenger.mjs.map +0 -1
  652. package/dist/types/perps-types.cjs +0 -7
  653. package/dist/types/perps-types.cjs.map +0 -1
  654. package/dist/types/perps-types.d.cts +0 -184
  655. package/dist/types/perps-types.d.cts.map +0 -1
  656. package/dist/types/perps-types.d.mts +0 -184
  657. package/dist/types/perps-types.d.mts.map +0 -1
  658. package/dist/types/perps-types.mjs +0 -5
  659. package/dist/types/perps-types.mjs.map +0 -1
  660. package/dist/types/token.cjs +0 -3
  661. package/dist/types/token.cjs.map +0 -1
  662. package/dist/types/token.d.cts +0 -25
  663. package/dist/types/token.d.cts.map +0 -1
  664. package/dist/types/token.d.mts +0 -25
  665. package/dist/types/token.d.mts.map +0 -1
  666. package/dist/types/token.mjs +0 -2
  667. package/dist/types/token.mjs.map +0 -1
  668. package/dist/types/transactionTypes.cjs +0 -29
  669. package/dist/types/transactionTypes.cjs.map +0 -1
  670. package/dist/types/transactionTypes.d.cts +0 -60
  671. package/dist/types/transactionTypes.d.cts.map +0 -1
  672. package/dist/types/transactionTypes.d.mts +0 -60
  673. package/dist/types/transactionTypes.d.mts.map +0 -1
  674. package/dist/types/transactionTypes.mjs +0 -24
  675. package/dist/types/transactionTypes.mjs.map +0 -1
  676. package/dist/utils/accountUtils.cjs +0 -236
  677. package/dist/utils/accountUtils.cjs.map +0 -1
  678. package/dist/utils/accountUtils.d.cts +0 -72
  679. package/dist/utils/accountUtils.d.cts.map +0 -1
  680. package/dist/utils/accountUtils.d.mts +0 -72
  681. package/dist/utils/accountUtils.d.mts.map +0 -1
  682. package/dist/utils/accountUtils.mjs +0 -223
  683. package/dist/utils/accountUtils.mjs.map +0 -1
  684. package/dist/utils/capabilitySymbols.cjs +0 -25
  685. package/dist/utils/capabilitySymbols.cjs.map +0 -1
  686. package/dist/utils/capabilitySymbols.d.cts +0 -15
  687. package/dist/utils/capabilitySymbols.d.cts.map +0 -1
  688. package/dist/utils/capabilitySymbols.d.mts +0 -15
  689. package/dist/utils/capabilitySymbols.d.mts.map +0 -1
  690. package/dist/utils/capabilitySymbols.mjs +0 -21
  691. package/dist/utils/capabilitySymbols.mjs.map +0 -1
  692. package/dist/utils/coalescePerpsRestRequest.cjs +0 -71
  693. package/dist/utils/coalescePerpsRestRequest.cjs.map +0 -1
  694. package/dist/utils/coalescePerpsRestRequest.d.cts +0 -32
  695. package/dist/utils/coalescePerpsRestRequest.d.cts.map +0 -1
  696. package/dist/utils/coalescePerpsRestRequest.d.mts +0 -32
  697. package/dist/utils/coalescePerpsRestRequest.d.mts.map +0 -1
  698. package/dist/utils/coalescePerpsRestRequest.mjs +0 -66
  699. package/dist/utils/coalescePerpsRestRequest.mjs.map +0 -1
  700. package/dist/utils/errorUtils.cjs +0 -104
  701. package/dist/utils/errorUtils.cjs.map +0 -1
  702. package/dist/utils/errorUtils.d.cts +0 -50
  703. package/dist/utils/errorUtils.d.cts.map +0 -1
  704. package/dist/utils/errorUtils.d.mts +0 -50
  705. package/dist/utils/errorUtils.d.mts.map +0 -1
  706. package/dist/utils/errorUtils.mjs +0 -96
  707. package/dist/utils/errorUtils.mjs.map +0 -1
  708. package/dist/utils/hyperLiquidAbstraction.cjs +0 -23
  709. package/dist/utils/hyperLiquidAbstraction.cjs.map +0 -1
  710. package/dist/utils/hyperLiquidAbstraction.d.cts +0 -11
  711. package/dist/utils/hyperLiquidAbstraction.d.cts.map +0 -1
  712. package/dist/utils/hyperLiquidAbstraction.d.mts +0 -11
  713. package/dist/utils/hyperLiquidAbstraction.d.mts.map +0 -1
  714. package/dist/utils/hyperLiquidAbstraction.mjs +0 -19
  715. package/dist/utils/hyperLiquidAbstraction.mjs.map +0 -1
  716. package/dist/utils/hyperLiquidAdapter.cjs +0 -512
  717. package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
  718. package/dist/utils/hyperLiquidAdapter.d.cts +0 -77
  719. package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
  720. package/dist/utils/hyperLiquidAdapter.d.mts +0 -77
  721. package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
  722. package/dist/utils/hyperLiquidAdapter.mjs +0 -494
  723. package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
  724. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -83
  725. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
  726. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -55
  727. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
  728. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +0 -55
  729. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
  730. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +0 -78
  731. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
  732. package/dist/utils/hyperLiquidPositionPreview.cjs +0 -355
  733. package/dist/utils/hyperLiquidPositionPreview.cjs.map +0 -1
  734. package/dist/utils/hyperLiquidPositionPreview.d.cts +0 -124
  735. package/dist/utils/hyperLiquidPositionPreview.d.cts.map +0 -1
  736. package/dist/utils/hyperLiquidPositionPreview.d.mts +0 -124
  737. package/dist/utils/hyperLiquidPositionPreview.d.mts.map +0 -1
  738. package/dist/utils/hyperLiquidPositionPreview.mjs +0 -347
  739. package/dist/utils/hyperLiquidPositionPreview.mjs.map +0 -1
  740. package/dist/utils/hyperLiquidValidation.cjs +0 -799
  741. package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
  742. package/dist/utils/hyperLiquidValidation.d.cts +0 -192
  743. package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
  744. package/dist/utils/hyperLiquidValidation.d.mts +0 -192
  745. package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
  746. package/dist/utils/hyperLiquidValidation.mjs +0 -786
  747. package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
  748. package/dist/utils/idUtils.cjs +0 -18
  749. package/dist/utils/idUtils.cjs.map +0 -1
  750. package/dist/utils/idUtils.d.cts +0 -6
  751. package/dist/utils/idUtils.d.cts.map +0 -1
  752. package/dist/utils/idUtils.d.mts +0 -6
  753. package/dist/utils/idUtils.d.mts.map +0 -1
  754. package/dist/utils/idUtils.mjs +0 -10
  755. package/dist/utils/idUtils.mjs.map +0 -1
  756. package/dist/utils/index.cjs +0 -66
  757. package/dist/utils/index.cjs.map +0 -1
  758. package/dist/utils/index.d.cts +0 -29
  759. package/dist/utils/index.d.cts.map +0 -1
  760. package/dist/utils/index.d.mts +0 -29
  761. package/dist/utils/index.d.mts.map +0 -1
  762. package/dist/utils/index.mjs +0 -34
  763. package/dist/utils/index.mjs.map +0 -1
  764. package/dist/utils/lighterAdapter.cjs +0 -575
  765. package/dist/utils/lighterAdapter.cjs.map +0 -1
  766. package/dist/utils/lighterAdapter.d.cts +0 -117
  767. package/dist/utils/lighterAdapter.d.cts.map +0 -1
  768. package/dist/utils/lighterAdapter.d.mts +0 -117
  769. package/dist/utils/lighterAdapter.d.mts.map +0 -1
  770. package/dist/utils/lighterAdapter.mjs +0 -562
  771. package/dist/utils/lighterAdapter.mjs.map +0 -1
  772. package/dist/utils/marketDataTransform.cjs +0 -250
  773. package/dist/utils/marketDataTransform.cjs.map +0 -1
  774. package/dist/utils/marketDataTransform.d.cts +0 -71
  775. package/dist/utils/marketDataTransform.d.cts.map +0 -1
  776. package/dist/utils/marketDataTransform.d.mts +0 -71
  777. package/dist/utils/marketDataTransform.d.mts.map +0 -1
  778. package/dist/utils/marketDataTransform.mjs +0 -243
  779. package/dist/utils/marketDataTransform.mjs.map +0 -1
  780. package/dist/utils/marketSearch.cjs +0 -111
  781. package/dist/utils/marketSearch.cjs.map +0 -1
  782. package/dist/utils/marketSearch.d.cts +0 -48
  783. package/dist/utils/marketSearch.d.cts.map +0 -1
  784. package/dist/utils/marketSearch.d.mts +0 -48
  785. package/dist/utils/marketSearch.d.mts.map +0 -1
  786. package/dist/utils/marketSearch.mjs +0 -106
  787. package/dist/utils/marketSearch.mjs.map +0 -1
  788. package/dist/utils/marketUtils.cjs +0 -266
  789. package/dist/utils/marketUtils.cjs.map +0 -1
  790. package/dist/utils/marketUtils.d.cts +0 -73
  791. package/dist/utils/marketUtils.d.cts.map +0 -1
  792. package/dist/utils/marketUtils.d.mts +0 -73
  793. package/dist/utils/marketUtils.d.mts.map +0 -1
  794. package/dist/utils/marketUtils.mjs +0 -248
  795. package/dist/utils/marketUtils.mjs.map +0 -1
  796. package/dist/utils/orderCalculations.cjs +0 -849
  797. package/dist/utils/orderCalculations.cjs.map +0 -1
  798. package/dist/utils/orderCalculations.d.cts +0 -306
  799. package/dist/utils/orderCalculations.d.cts.map +0 -1
  800. package/dist/utils/orderCalculations.d.mts +0 -306
  801. package/dist/utils/orderCalculations.d.mts.map +0 -1
  802. package/dist/utils/orderCalculations.mjs +0 -833
  803. package/dist/utils/orderCalculations.mjs.map +0 -1
  804. package/dist/utils/orderTypes.cjs +0 -301
  805. package/dist/utils/orderTypes.cjs.map +0 -1
  806. package/dist/utils/orderTypes.d.cts +0 -166
  807. package/dist/utils/orderTypes.d.cts.map +0 -1
  808. package/dist/utils/orderTypes.d.mts +0 -166
  809. package/dist/utils/orderTypes.d.mts.map +0 -1
  810. package/dist/utils/orderTypes.mjs +0 -287
  811. package/dist/utils/orderTypes.mjs.map +0 -1
  812. package/dist/utils/perpsConnectionAttemptContext.cjs +0 -20
  813. package/dist/utils/perpsConnectionAttemptContext.cjs.map +0 -1
  814. package/dist/utils/perpsConnectionAttemptContext.d.cts +0 -7
  815. package/dist/utils/perpsConnectionAttemptContext.d.cts.map +0 -1
  816. package/dist/utils/perpsConnectionAttemptContext.d.mts +0 -7
  817. package/dist/utils/perpsConnectionAttemptContext.d.mts.map +0 -1
  818. package/dist/utils/perpsConnectionAttemptContext.mjs +0 -15
  819. package/dist/utils/perpsConnectionAttemptContext.mjs.map +0 -1
  820. package/dist/utils/perpsDiskPersistence.cjs +0 -259
  821. package/dist/utils/perpsDiskPersistence.cjs.map +0 -1
  822. package/dist/utils/perpsDiskPersistence.d.cts +0 -112
  823. package/dist/utils/perpsDiskPersistence.d.cts.map +0 -1
  824. package/dist/utils/perpsDiskPersistence.d.mts +0 -112
  825. package/dist/utils/perpsDiskPersistence.d.mts.map +0 -1
  826. package/dist/utils/perpsDiskPersistence.mjs +0 -251
  827. package/dist/utils/perpsDiskPersistence.mjs.map +0 -1
  828. package/dist/utils/perpsFormatters.cjs +0 -509
  829. package/dist/utils/perpsFormatters.cjs.map +0 -1
  830. package/dist/utils/perpsFormatters.d.cts +0 -204
  831. package/dist/utils/perpsFormatters.d.cts.map +0 -1
  832. package/dist/utils/perpsFormatters.d.mts +0 -204
  833. package/dist/utils/perpsFormatters.d.mts.map +0 -1
  834. package/dist/utils/perpsFormatters.mjs +0 -500
  835. package/dist/utils/perpsFormatters.mjs.map +0 -1
  836. package/dist/utils/rewardsUtils.cjs +0 -98
  837. package/dist/utils/rewardsUtils.cjs.map +0 -1
  838. package/dist/utils/rewardsUtils.d.cts +0 -33
  839. package/dist/utils/rewardsUtils.d.cts.map +0 -1
  840. package/dist/utils/rewardsUtils.d.mts +0 -33
  841. package/dist/utils/rewardsUtils.d.mts.map +0 -1
  842. package/dist/utils/rewardsUtils.mjs +0 -92
  843. package/dist/utils/rewardsUtils.mjs.map +0 -1
  844. package/dist/utils/significantFigures.cjs +0 -88
  845. package/dist/utils/significantFigures.cjs.map +0 -1
  846. package/dist/utils/significantFigures.d.cts +0 -25
  847. package/dist/utils/significantFigures.d.cts.map +0 -1
  848. package/dist/utils/significantFigures.d.mts +0 -25
  849. package/dist/utils/significantFigures.d.mts.map +0 -1
  850. package/dist/utils/significantFigures.mjs +0 -82
  851. package/dist/utils/significantFigures.mjs.map +0 -1
  852. package/dist/utils/sortMarkets.cjs +0 -93
  853. package/dist/utils/sortMarkets.cjs.map +0 -1
  854. package/dist/utils/sortMarkets.d.cts +0 -25
  855. package/dist/utils/sortMarkets.d.cts.map +0 -1
  856. package/dist/utils/sortMarkets.d.mts +0 -25
  857. package/dist/utils/sortMarkets.d.mts.map +0 -1
  858. package/dist/utils/sortMarkets.mjs +0 -88
  859. package/dist/utils/sortMarkets.mjs.map +0 -1
  860. package/dist/utils/standaloneInfoClient.cjs +0 -70
  861. package/dist/utils/standaloneInfoClient.cjs.map +0 -1
  862. package/dist/utils/standaloneInfoClient.d.cts +0 -37
  863. package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
  864. package/dist/utils/standaloneInfoClient.d.mts +0 -37
  865. package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
  866. package/dist/utils/standaloneInfoClient.mjs +0 -64
  867. package/dist/utils/standaloneInfoClient.mjs.map +0 -1
  868. package/dist/utils/stringParseUtils.cjs +0 -34
  869. package/dist/utils/stringParseUtils.cjs.map +0 -1
  870. package/dist/utils/stringParseUtils.d.cts +0 -11
  871. package/dist/utils/stringParseUtils.d.cts.map +0 -1
  872. package/dist/utils/stringParseUtils.d.mts +0 -11
  873. package/dist/utils/stringParseUtils.d.mts.map +0 -1
  874. package/dist/utils/stringParseUtils.mjs +0 -28
  875. package/dist/utils/stringParseUtils.mjs.map +0 -1
  876. package/dist/utils/transferData.cjs +0 -33
  877. package/dist/utils/transferData.cjs.map +0 -1
  878. package/dist/utils/transferData.d.cts +0 -9
  879. package/dist/utils/transferData.d.cts.map +0 -1
  880. package/dist/utils/transferData.d.mts +0 -9
  881. package/dist/utils/transferData.d.mts.map +0 -1
  882. package/dist/utils/transferData.mjs +0 -29
  883. package/dist/utils/transferData.mjs.map +0 -1
  884. package/dist/utils/wait.cjs +0 -6
  885. package/dist/utils/wait.cjs.map +0 -1
  886. package/dist/utils/wait.d.cts +0 -2
  887. package/dist/utils/wait.d.cts.map +0 -1
  888. package/dist/utils/wait.d.mts +0 -2
  889. package/dist/utils/wait.d.mts.map +0 -1
  890. package/dist/utils/wait.mjs +0 -2
  891. package/dist/utils/wait.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DexDiscoveryCacheManager.js","sourceRoot":"","sources":["../../src/services/DexDiscoveryCacheManager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MAINNET_HIP3_CONFIG,\n TESTNET_HIP3_CONFIG,\n} from '../constants/hyperLiquidConfig.js';\nimport type {\n DexDiscoveryState,\n ExtendedPerpDex,\n} from '../types/perps-types.js';\n\ntype DexDiscoveryDeps = {\n isTestnetMode: () => boolean;\n debugLogger: { log: (...args: unknown[]) => void };\n getAllowlistMarkets: () => string[];\n};\n\n/**\n * Manages the unified DEX discovery cache — single source of truth for all perpDexs() derivatives.\n *\n * Extracted from HyperLiquidProvider to isolate cache logic.\n * All writes go through update(); readers use .state.\n */\nexport class DexDiscoveryCacheManager {\n /**\n * Unified DEX discovery state.\n * null = not yet fetched; object = raw + validated + timestamp.\n */\n state: DexDiscoveryState | null = null;\n\n readonly #deps: DexDiscoveryDeps;\n\n constructor(deps: DexDiscoveryDeps) {\n this.#deps = deps;\n }\n\n /**\n * Single atomic writer for DEX discovery state.\n * All code paths that fetch perpDexs() MUST call this — no direct field writes.\n *\n * @param allDexs - Raw perpDexs() API response array.\n * @returns The newly created unified discovery state.\n */\n update(allDexs: (ExtendedPerpDex | null)[]): DexDiscoveryState {\n const validated = this.computeValidatedDexs(allDexs);\n const newState: DexDiscoveryState = {\n raw: allDexs,\n validated,\n timestamp: Date.now(),\n };\n this.state = newState;\n return newState;\n }\n\n /**\n * Reset state to null (used on disconnect/reconnect).\n */\n reset(): void {\n this.state = null;\n }\n\n /**\n * Pure filtering of perpDexs() response into validated DEX names.\n * Encapsulates testnet/mainnet feature-flag logic.\n *\n * @param allDexs - Raw perpDexs() API response array.\n * @returns Filtered DEX name list (null = main DEX, strings = HIP-3 DEXs).\n */\n computeValidatedDexs(allDexs: (ExtendedPerpDex | null)[]): (string | null)[] {\n const availableHip3Dexs: string[] = [];\n allDexs.forEach((dex) => {\n if (dex !== null) {\n availableHip3Dexs.push(dex.name);\n }\n });\n\n if (this.#deps.isTestnetMode()) {\n const { EnabledDexs, AutoDiscoverAll } = TESTNET_HIP3_CONFIG;\n\n if (!AutoDiscoverAll) {\n if (EnabledDexs.length === 0) {\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Testnet - using main DEX only (HIP-3 DEXs filtered)',\n {\n availableHip3Dexs: availableHip3Dexs.length,\n reason: 'TESTNET_HIP3_CONFIG.EnabledDexs is empty',\n },\n );\n return [null];\n }\n\n const filteredDexs = availableHip3Dexs.filter((dex) =>\n EnabledDexs.includes(dex),\n );\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Testnet - filtered to allowed DEXs',\n {\n allowedDexs: EnabledDexs,\n filteredDexs,\n availableHip3Dexs: availableHip3Dexs.length,\n },\n );\n return [null, ...filteredDexs];\n }\n\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Testnet - AUTO_DISCOVER_ALL enabled, using all DEXs',\n { totalDexCount: availableHip3Dexs.length + 1 },\n );\n } else {\n const { AutoDiscoverAll } = MAINNET_HIP3_CONFIG;\n\n if (!AutoDiscoverAll) {\n const allowedDexsFromAllowlist = this.extractDexsFromAllowlist();\n\n if (allowedDexsFromAllowlist.length === 0) {\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Mainnet - using main DEX only (no HIP-3 DEXs in allowlist)',\n {\n availableHip3Dexs: availableHip3Dexs.length,\n allowlistMarkets: this.#deps.getAllowlistMarkets(),\n },\n );\n return [null];\n }\n\n const filteredDexs = availableHip3Dexs.filter((dex) =>\n allowedDexsFromAllowlist.includes(dex),\n );\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Mainnet - filtered to allowlist DEXs',\n {\n allowedDexsFromAllowlist,\n filteredDexs,\n availableHip3Dexs: availableHip3Dexs.length,\n },\n );\n return [null, ...filteredDexs];\n }\n\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: Mainnet - AUTO_DISCOVER_ALL enabled, using all DEXs',\n { totalDexCount: availableHip3Dexs.length + 1 },\n );\n }\n\n this.#deps.debugLogger.log(\n 'HyperLiquidProvider: All DEXs enabled (market filtering at data layer)',\n {\n mainDex: true,\n hip3Dexs: availableHip3Dexs,\n totalDexCount: availableHip3Dexs.length + 1,\n },\n );\n return [null, ...availableHip3Dexs];\n }\n\n /**\n * Extract unique DEX names from allowlist market patterns.\n * Patterns can be: \"xyz:*\" (wildcard), \"xyz:TSLA\" (exact), or \"xyz\" (DEX shorthand).\n *\n * @returns Array of unique DEX names from the allowlist.\n */\n extractDexsFromAllowlist(): string[] {\n const allowlistMarkets = this.#deps.getAllowlistMarkets();\n if (allowlistMarkets.length === 0) {\n return [];\n }\n\n const dexNames = new Set<string>();\n\n for (const pattern of allowlistMarkets) {\n const colonIndex = pattern.indexOf(':');\n if (colonIndex > 0) {\n const dex = pattern.substring(0, colonIndex);\n dexNames.add(dex);\n } else if (pattern.length > 0 && !pattern.includes('*')) {\n if (/^[a-z][a-z0-9]*$/iu.test(pattern)) {\n dexNames.add(pattern.toLowerCase());\n }\n }\n }\n\n return Array.from(dexNames);\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type { PerpsPlatformDependencies, CheckEligibilityParams } from '../types/index.js';
2
+ /**
3
+ * EligibilityService
4
+ *
5
+ * Handles eligibility checking based on geolocation and blocked regions.
6
+ * Geolocation is sourced externally from the GeolocationController.
7
+ *
8
+ * Instance-based service with constructor injection of platform dependencies.
9
+ */
10
+ export declare class EligibilityService {
11
+ #private;
12
+ /**
13
+ * Create a new EligibilityService instance
14
+ *
15
+ * @param deps - Platform dependencies for logging, metrics, etc.
16
+ */
17
+ constructor(deps: PerpsPlatformDependencies);
18
+ /**
19
+ * Check if user is eligible based on geo-blocked regions.
20
+ *
21
+ * @param options - The eligibility check parameters.
22
+ * @param options.blockedRegions - List of blocked region codes (e.g., ['US', 'CN']).
23
+ * @param options.geoLocation - The user's geolocation string from GeolocationController.
24
+ * @returns True if eligible (not in blocked region), false otherwise.
25
+ */
26
+ checkEligibility(options: CheckEligibilityParams): Promise<boolean>;
27
+ }
28
+ //# sourceMappingURL=EligibilityService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EligibilityService.d.ts","sourceRoot":"","sources":["../../src/services/EligibilityService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;GAOG;AACH,qBAAa,kBAAkB;;IAG7B;;;;OAIG;IACH,YAAY,IAAI,EAAE,yBAAyB,EAE1C;IAED;;;;;;;OAOG;IACG,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0CxE;CACF"}
@@ -0,0 +1,61 @@
1
+ import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
2
+ import { ensureError } from '../utils/errorUtils.js';
3
+ /**
4
+ * EligibilityService
5
+ *
6
+ * Handles eligibility checking based on geolocation and blocked regions.
7
+ * Geolocation is sourced externally from the GeolocationController.
8
+ *
9
+ * Instance-based service with constructor injection of platform dependencies.
10
+ */
11
+ export class EligibilityService {
12
+ #deps;
13
+ /**
14
+ * Create a new EligibilityService instance
15
+ *
16
+ * @param deps - Platform dependencies for logging, metrics, etc.
17
+ */
18
+ constructor(deps) {
19
+ this.#deps = deps;
20
+ }
21
+ /**
22
+ * Check if user is eligible based on geo-blocked regions.
23
+ *
24
+ * @param options - The eligibility check parameters.
25
+ * @param options.blockedRegions - List of blocked region codes (e.g., ['US', 'CN']).
26
+ * @param options.geoLocation - The user's geolocation string from GeolocationController.
27
+ * @returns True if eligible (not in blocked region), false otherwise.
28
+ */
29
+ async checkEligibility(options) {
30
+ const { blockedRegions, geoLocation } = options;
31
+ try {
32
+ this.#deps.debugLogger.log('EligibilityService: Checking eligibility', {
33
+ blockedRegionsCount: blockedRegions.length,
34
+ geoLocation,
35
+ });
36
+ if (geoLocation !== 'UNKNOWN') {
37
+ const isEligible = blockedRegions.every((geoBlockedRegion) => !geoLocation
38
+ .toUpperCase()
39
+ .startsWith(geoBlockedRegion.toUpperCase()));
40
+ this.#deps.debugLogger.log('EligibilityService: Eligibility check completed', {
41
+ geoLocation,
42
+ isEligible,
43
+ blockedRegions,
44
+ });
45
+ return isEligible;
46
+ }
47
+ return true;
48
+ }
49
+ catch (error) {
50
+ this.#deps.logger.error(ensureError(error, 'EligibilityService.checkEligibility'), {
51
+ tags: { feature: PERPS_CONSTANTS.FeatureName },
52
+ context: {
53
+ name: 'EligibilityService.checkEligibility',
54
+ data: {},
55
+ },
56
+ });
57
+ return true;
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=EligibilityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EligibilityService.js","sourceRoot":"","sources":["../../src/services/EligibilityService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAK9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IACpB,KAAK,CAA4B;IAE1C;;;;OAIG;IACH,YAAY,IAA+B;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAA+B;QACpD,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAChD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,0CAA0C,EAAE;gBACrE,mBAAmB,EAAE,cAAc,CAAC,MAAM;gBAC1C,WAAW;aACZ,CAAC,CAAC;YAEH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CACrC,CAAC,gBAAgB,EAAE,EAAE,CACnB,CAAC,WAAW;qBACT,WAAW,EAAE;qBACb,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAChD,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CACxB,iDAAiD,EACjD;oBACE,WAAW;oBACX,UAAU;oBACV,cAAc;iBACf,CACF,CAAC;gBAEF,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CACrB,WAAW,CAAC,KAAK,EAAE,qCAAqC,CAAC,EACzD;gBACE,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,WAAW,EAAE;gBAC9C,OAAO,EAAE;oBACP,IAAI,EAAE,qCAAqC;oBAC3C,IAAI,EAAE,EAAE;iBACT;aACF,CACF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF","sourcesContent":["import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';\nimport type {\n PerpsPlatformDependencies,\n CheckEligibilityParams,\n} from '../types/index.js';\nimport { ensureError } from '../utils/errorUtils.js';\n\n/**\n * EligibilityService\n *\n * Handles eligibility checking based on geolocation and blocked regions.\n * Geolocation is sourced externally from the GeolocationController.\n *\n * Instance-based service with constructor injection of platform dependencies.\n */\nexport class EligibilityService {\n readonly #deps: PerpsPlatformDependencies;\n\n /**\n * Create a new EligibilityService instance\n *\n * @param deps - Platform dependencies for logging, metrics, etc.\n */\n constructor(deps: PerpsPlatformDependencies) {\n this.#deps = deps;\n }\n\n /**\n * Check if user is eligible based on geo-blocked regions.\n *\n * @param options - The eligibility check parameters.\n * @param options.blockedRegions - List of blocked region codes (e.g., ['US', 'CN']).\n * @param options.geoLocation - The user's geolocation string from GeolocationController.\n * @returns True if eligible (not in blocked region), false otherwise.\n */\n async checkEligibility(options: CheckEligibilityParams): Promise<boolean> {\n const { blockedRegions, geoLocation } = options;\n try {\n this.#deps.debugLogger.log('EligibilityService: Checking eligibility', {\n blockedRegionsCount: blockedRegions.length,\n geoLocation,\n });\n\n if (geoLocation !== 'UNKNOWN') {\n const isEligible = blockedRegions.every(\n (geoBlockedRegion) =>\n !geoLocation\n .toUpperCase()\n .startsWith(geoBlockedRegion.toUpperCase()),\n );\n\n this.#deps.debugLogger.log(\n 'EligibilityService: Eligibility check completed',\n {\n geoLocation,\n isEligible,\n blockedRegions,\n },\n );\n\n return isEligible;\n }\n\n return true;\n } catch (error) {\n this.#deps.logger.error(\n ensureError(error, 'EligibilityService.checkEligibility'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'EligibilityService.checkEligibility',\n data: {},\n },\n },\n );\n return true;\n }\n }\n}\n"]}
@@ -0,0 +1,73 @@
1
+ import type { PerpsPlatformDependencies, PerpsRemoteFeatureFlagState } from '../types/index.js';
2
+ import type { ServiceContext } from './ServiceContext.js';
3
+ /**
4
+ * FeatureFlagConfigurationService
5
+ *
6
+ * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.
7
+ * Implements "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
8
+ * Orchestrates validation, change detection, and version management for feature flag updates.
9
+ *
10
+ * Responsibilities:
11
+ * - Remote feature flag validation and parsing
12
+ * - HIP-3 configuration management (equity, allowlist, blocklist)
13
+ * - Geo-blocking configuration from remote flags
14
+ * - Change detection and version management
15
+ * - "Sticky remote" pattern enforcement (never downgrade)
16
+ *
17
+ * Instance-based service with constructor injection of platform dependencies.
18
+ */
19
+ export declare class FeatureFlagConfigurationService {
20
+ #private;
21
+ /**
22
+ * Create a new FeatureFlagConfigurationService instance
23
+ *
24
+ * @param deps - Platform dependencies for logging, metrics, etc.
25
+ */
26
+ constructor(deps: PerpsPlatformDependencies);
27
+ /**
28
+ * Refresh HIP-3 configuration when remote feature flags change.
29
+ * This method extracts HIP-3 settings from remote flags, validates them,
30
+ * and updates internal state if they differ from current values.
31
+ * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.
32
+ *
33
+ * Follows the "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
34
+ *
35
+ * @param options - Configuration object
36
+ * @param options.remoteFeatureFlagControllerState - Remote feature flag state
37
+ * @param options.context - ServiceContext providing state access callbacks
38
+ */
39
+ refreshHip3Config(options: {
40
+ remoteFeatureFlagControllerState: PerpsRemoteFeatureFlagState;
41
+ context: ServiceContext;
42
+ }): void;
43
+ /**
44
+ * Respond to RemoteFeatureFlagController state changes
45
+ * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.
46
+ * Uses fallback configuration when remote feature flag is undefined.
47
+ * Note: Initial eligibility is set in the constructor if fallback regions are provided.
48
+ *
49
+ * @param options - Configuration object
50
+ * @param options.remoteFeatureFlagControllerState - Remote feature flag state
51
+ * @param options.context - ServiceContext providing callbacks
52
+ */
53
+ refreshEligibility(options: {
54
+ remoteFeatureFlagControllerState: PerpsRemoteFeatureFlagState;
55
+ context: ServiceContext;
56
+ }): void;
57
+ /**
58
+ * Set blocked region list with "never downgrade" pattern enforcement
59
+ * Updates the blocked region list and triggers eligibility refresh.
60
+ * Implements "sticky remote": once remote regions are set, never downgrade to fallback.
61
+ *
62
+ * @param options - Configuration object
63
+ * @param options.list - Array of blocked region codes
64
+ * @param options.source - Source of the list ('remote' or 'fallback')
65
+ * @param options.context - ServiceContext providing callbacks
66
+ */
67
+ setBlockedRegions(options: {
68
+ list: string[];
69
+ source: 'remote' | 'fallback';
70
+ context: ServiceContext;
71
+ }): void;
72
+ }
73
+ //# sourceMappingURL=FeatureFlagConfigurationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlagConfigurationService.d.ts","sourceRoot":"","sources":["../../src/services/FeatureFlagConfigurationService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,+BAA+B;;IAG1C;;;;OAIG;IACH,YAAY,IAAI,EAAE,yBAAyB,EAE1C;IAuID;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,gCAAgC,EAAE,2BAA2B,CAAC;QAC9D,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI,CA2HP;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,gCAAgC,EAAE,2BAA2B,CAAC;QAC9D,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI,CAsBP;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;QAC9B,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI,CAoCP;CACF"}
@@ -0,0 +1,266 @@
1
+ import { hasProperty } from '@metamask/utils';
2
+ import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
3
+ import { isVersionGatedFeatureFlag } from '../types/index.js';
4
+ import { ensureError } from '../utils/errorUtils.js';
5
+ import { validateMarketPattern } from '../utils/marketUtils.js';
6
+ import { parseCommaSeparatedString, stripQuotes, } from '../utils/stringParseUtils.js';
7
+ /**
8
+ * FeatureFlagConfigurationService
9
+ *
10
+ * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.
11
+ * Implements "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
12
+ * Orchestrates validation, change detection, and version management for feature flag updates.
13
+ *
14
+ * Responsibilities:
15
+ * - Remote feature flag validation and parsing
16
+ * - HIP-3 configuration management (equity, allowlist, blocklist)
17
+ * - Geo-blocking configuration from remote flags
18
+ * - Change detection and version management
19
+ * - "Sticky remote" pattern enforcement (never downgrade)
20
+ *
21
+ * Instance-based service with constructor injection of platform dependencies.
22
+ */
23
+ export class FeatureFlagConfigurationService {
24
+ #deps;
25
+ /**
26
+ * Create a new FeatureFlagConfigurationService instance
27
+ *
28
+ * @param deps - Platform dependencies for logging, metrics, etc.
29
+ */
30
+ constructor(deps) {
31
+ this.#deps = deps;
32
+ }
33
+ /**
34
+ * Validate and parse market list from remote feature flags
35
+ * Handles both string (comma-separated) and array formats from LaunchDarkly
36
+ *
37
+ * @param remoteValue - The raw value from remote feature flags (string or array).
38
+ * @param fieldName - The name of the field being validated (for logging).
39
+ * @param currentValue - The current local market list as fallback reference.
40
+ * @returns The validated market list, or undefined if validation fails.
41
+ */
42
+ #validateMarketList(remoteValue, fieldName, currentValue) {
43
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validation`, {
44
+ remoteValue,
45
+ type: typeof remoteValue,
46
+ isArray: Array.isArray(remoteValue),
47
+ });
48
+ // LaunchDarkly returns comma-separated strings for list values
49
+ // Values may have literal quotes (e.g., '"xyz"') due to JSON encoding quirks
50
+ if (typeof remoteValue === 'string') {
51
+ const parsed = this.#filterValidPatterns(parseCommaSeparatedString(remoteValue).map(stripQuotes), fieldName);
52
+ if (parsed.length > 0) {
53
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validated from string`, { validatedMarkets: parsed });
54
+ return parsed;
55
+ }
56
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} string was empty after parsing`, { fallbackValue: currentValue });
57
+ return undefined;
58
+ }
59
+ // Fallback: Validate array of non-empty strings
60
+ if (Array.isArray(remoteValue) &&
61
+ remoteValue.every((item) => typeof item === 'string' && item.length > 0)) {
62
+ const validatedMarkets = this.#filterValidPatterns(remoteValue
63
+ .map((market) => stripQuotes(market.trim()))
64
+ .filter((market) => market.length > 0), fieldName);
65
+ if (validatedMarkets.length > 0) {
66
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validated from array`, { validatedMarkets });
67
+ return validatedMarkets;
68
+ }
69
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} array was empty after filtering`, { fallbackValue: currentValue });
70
+ return undefined;
71
+ }
72
+ this.#deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validation FAILED - falling back to local config`, {
73
+ reason: Array.isArray(remoteValue)
74
+ ? 'Array contains non-string or empty values'
75
+ : 'Invalid type (expected string or array)',
76
+ fallbackValue: currentValue,
77
+ });
78
+ return undefined;
79
+ }
80
+ /**
81
+ * Filter out patterns that fail market pattern validation.
82
+ * Invalid patterns are logged and dropped instead of propagated downstream.
83
+ *
84
+ * @param patterns - The array of market patterns to validate.
85
+ * @param fieldName - The name of the field being validated (for logging).
86
+ * @returns The filtered array containing only valid market patterns.
87
+ */
88
+ #filterValidPatterns(patterns, fieldName) {
89
+ return patterns.filter((pattern) => {
90
+ try {
91
+ validateMarketPattern(pattern);
92
+ return true;
93
+ }
94
+ catch (error) {
95
+ this.#deps.logger.error(ensureError(error, `FeatureFlagConfigurationService.filterValidPatterns`), {
96
+ tags: { feature: PERPS_CONSTANTS.FeatureName },
97
+ context: {
98
+ name: 'FeatureFlagConfigurationService.filterValidPatterns',
99
+ data: { fieldName, pattern },
100
+ },
101
+ });
102
+ return false;
103
+ }
104
+ });
105
+ }
106
+ /**
107
+ * Check if arrays have different values (order-independent comparison)
108
+ *
109
+ * @param a - The first string array to compare.
110
+ * @param b - The second string array to compare.
111
+ * @returns True if the arrays contain different values.
112
+ */
113
+ #arraysHaveDifferentValues(a, b) {
114
+ return (JSON.stringify([...a].sort((itemA, itemB) => itemA.localeCompare(itemB))) !==
115
+ JSON.stringify([...b].sort((itemA, itemB) => itemA.localeCompare(itemB))));
116
+ }
117
+ /**
118
+ * Refresh HIP-3 configuration when remote feature flags change.
119
+ * This method extracts HIP-3 settings from remote flags, validates them,
120
+ * and updates internal state if they differ from current values.
121
+ * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.
122
+ *
123
+ * Follows the "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
124
+ *
125
+ * @param options - Configuration object
126
+ * @param options.remoteFeatureFlagControllerState - Remote feature flag state
127
+ * @param options.context - ServiceContext providing state access callbacks
128
+ */
129
+ refreshHip3Config(options) {
130
+ const { remoteFeatureFlagControllerState, context } = options;
131
+ if (!context.getHip3Config ||
132
+ !context.setHip3Config ||
133
+ !context.incrementHip3ConfigVersion) {
134
+ throw new Error('Required HIP-3 callbacks not available in ServiceContext');
135
+ }
136
+ const remoteFlags = remoteFeatureFlagControllerState.remoteFeatureFlags;
137
+ const currentConfig = context.getHip3Config();
138
+ // Extract and validate remote HIP-3 equity enabled flag
139
+ const equityFlag = remoteFlags?.perpsHip3Enabled;
140
+ // Use type guard to validate before calling - validatedVersionGatedFeatureFlag also
141
+ // handles invalid flags internally, but proper typing requires the guard
142
+ const validatedEquity = isVersionGatedFeatureFlag(equityFlag)
143
+ ? this.#deps.featureFlags.validateVersionGated(equityFlag)
144
+ : undefined;
145
+ this.#deps.debugLogger.log('PerpsController: HIP-3 equity flag validation', {
146
+ equityFlag,
147
+ validatedEquity,
148
+ willUse: validatedEquity === undefined ? 'fallback' : 'remote',
149
+ });
150
+ // Extract and validate remote HIP-3 market lists
151
+ const validatedAllowlistMarkets = hasProperty(remoteFlags, 'perpsHip3AllowlistMarkets')
152
+ ? this.#validateMarketList(remoteFlags.perpsHip3AllowlistMarkets, 'allowlistMarkets', currentConfig.allowlistMarkets)
153
+ : undefined;
154
+ const validatedBlocklistMarkets = hasProperty(remoteFlags, 'perpsHip3BlocklistMarkets')
155
+ ? this.#validateMarketList(remoteFlags.perpsHip3BlocklistMarkets, 'blocklistMarkets', currentConfig.blocklistMarkets)
156
+ : undefined;
157
+ // Detect changes (only if we have valid remote values)
158
+ const equityChanged = validatedEquity !== undefined &&
159
+ validatedEquity !== currentConfig.enabled;
160
+ const allowlistMarketsChanged = validatedAllowlistMarkets !== undefined &&
161
+ this.#arraysHaveDifferentValues(validatedAllowlistMarkets, currentConfig.allowlistMarkets);
162
+ const blocklistMarketsChanged = validatedBlocklistMarkets !== undefined &&
163
+ this.#arraysHaveDifferentValues(validatedBlocklistMarkets, currentConfig.blocklistMarkets);
164
+ if (equityChanged || allowlistMarketsChanged || blocklistMarketsChanged) {
165
+ this.#deps.debugLogger.log('PerpsController: HIP-3 config changed via remote feature flags', {
166
+ equityChanged,
167
+ allowlistMarketsChanged,
168
+ blocklistMarketsChanged,
169
+ oldEquity: currentConfig.enabled,
170
+ newEquity: validatedEquity,
171
+ oldAllowlistMarkets: currentConfig.allowlistMarkets,
172
+ newAllowlistMarkets: validatedAllowlistMarkets,
173
+ oldBlocklistMarkets: currentConfig.blocklistMarkets,
174
+ newBlocklistMarkets: validatedBlocklistMarkets,
175
+ source: 'remote',
176
+ });
177
+ // Update internal state (sticky remote - never downgrade)
178
+ context.setHip3Config({
179
+ enabled: validatedEquity,
180
+ allowlistMarkets: validatedAllowlistMarkets
181
+ ? [...validatedAllowlistMarkets]
182
+ : undefined,
183
+ blocklistMarkets: validatedBlocklistMarkets
184
+ ? [...validatedBlocklistMarkets]
185
+ : undefined,
186
+ source: 'remote',
187
+ });
188
+ // Increment version to trigger ConnectionManager reconnection and cache clearing
189
+ const newVersion = context.incrementHip3ConfigVersion();
190
+ this.#deps.debugLogger.log('PerpsController: Incremented hip3ConfigVersion to trigger reconnection', {
191
+ newVersion,
192
+ newHip3Enabled: validatedEquity ?? currentConfig.enabled,
193
+ newHip3AllowlistMarkets: validatedAllowlistMarkets ?? currentConfig.allowlistMarkets,
194
+ newHip3BlocklistMarkets: validatedBlocklistMarkets ?? currentConfig.blocklistMarkets,
195
+ });
196
+ // Note: ConnectionManager will handle:
197
+ // 1. Detecting hip3ConfigVersion change via Redux monitoring
198
+ // 2. Clearing all StreamManager caches
199
+ // 3. Calling reconnectWithNewContext() -> initializeProviders()
200
+ // 4. Provider reinitialization will read the new HIP-3 config below
201
+ }
202
+ }
203
+ /**
204
+ * Respond to RemoteFeatureFlagController state changes
205
+ * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.
206
+ * Uses fallback configuration when remote feature flag is undefined.
207
+ * Note: Initial eligibility is set in the constructor if fallback regions are provided.
208
+ *
209
+ * @param options - Configuration object
210
+ * @param options.remoteFeatureFlagControllerState - Remote feature flag state
211
+ * @param options.context - ServiceContext providing callbacks
212
+ */
213
+ refreshEligibility(options) {
214
+ const { remoteFeatureFlagControllerState, context } = options;
215
+ const perpsGeoBlockedRegionsFeatureFlag =
216
+ // NOTE: Do not use perpsPerpTradingGeoBlockedCountries as it is deprecated.
217
+ remoteFeatureFlagControllerState.remoteFeatureFlags
218
+ ?.perpsPerpTradingGeoBlockedCountriesV2;
219
+ const remoteBlockedRegions = perpsGeoBlockedRegionsFeatureFlag?.blockedRegions;
220
+ if (Array.isArray(remoteBlockedRegions)) {
221
+ this.setBlockedRegions({
222
+ list: remoteBlockedRegions,
223
+ source: 'remote',
224
+ context,
225
+ });
226
+ }
227
+ // Also check for HIP-3 config changes
228
+ this.refreshHip3Config({ remoteFeatureFlagControllerState, context });
229
+ }
230
+ /**
231
+ * Set blocked region list with "never downgrade" pattern enforcement
232
+ * Updates the blocked region list and triggers eligibility refresh.
233
+ * Implements "sticky remote": once remote regions are set, never downgrade to fallback.
234
+ *
235
+ * @param options - Configuration object
236
+ * @param options.list - Array of blocked region codes
237
+ * @param options.source - Source of the list ('remote' or 'fallback')
238
+ * @param options.context - ServiceContext providing callbacks
239
+ */
240
+ setBlockedRegions(options) {
241
+ const { list, source, context } = options;
242
+ if (!context.getBlockedRegionList ||
243
+ !context.setBlockedRegionList ||
244
+ !context.refreshEligibility) {
245
+ throw new Error('Required blocked region callbacks not available in ServiceContext');
246
+ }
247
+ const currentList = context.getBlockedRegionList();
248
+ // Never downgrade from remote to fallback
249
+ if (source === 'fallback' && currentList.source === 'remote') {
250
+ return;
251
+ }
252
+ if (Array.isArray(list)) {
253
+ context.setBlockedRegionList(list, source);
254
+ }
255
+ context.refreshEligibility().catch((error) => {
256
+ this.#deps.logger.error(ensureError(error, 'FeatureFlagConfigurationService.setBlockedRegions'), {
257
+ tags: { feature: PERPS_CONSTANTS.FeatureName },
258
+ context: {
259
+ name: 'FeatureFlagConfigurationService.setBlockedRegions',
260
+ data: { source },
261
+ },
262
+ });
263
+ });
264
+ }
265
+ }
266
+ //# sourceMappingURL=FeatureFlagConfigurationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlagConfigurationService.js","sourceRoot":"","sources":["../../src/services/FeatureFlagConfigurationService.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasProperty } from '@metamask/utils';\n\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig.js';\nimport { isVersionGatedFeatureFlag } from '../types/index.js';\nimport type {\n PerpsPlatformDependencies,\n PerpsRemoteFeatureFlagState,\n} from '../types/index.js';\nimport { ensureError } from '../utils/errorUtils.js';\nimport { validateMarketPattern } from '../utils/marketUtils.js';\nimport {\n parseCommaSeparatedString,\n stripQuotes,\n} from '../utils/stringParseUtils.js';\nimport type { ServiceContext } from './ServiceContext.js';\n\n/**\n * FeatureFlagConfigurationService\n *\n * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.\n * Implements \"sticky remote\" pattern: once remote config is loaded, never downgrade to fallback.\n * Orchestrates validation, change detection, and version management for feature flag updates.\n *\n * Responsibilities:\n * - Remote feature flag validation and parsing\n * - HIP-3 configuration management (equity, allowlist, blocklist)\n * - Geo-blocking configuration from remote flags\n * - Change detection and version management\n * - \"Sticky remote\" pattern enforcement (never downgrade)\n *\n * Instance-based service with constructor injection of platform dependencies.\n */\nexport class FeatureFlagConfigurationService {\n readonly #deps: PerpsPlatformDependencies;\n\n /**\n * Create a new FeatureFlagConfigurationService instance\n *\n * @param deps - Platform dependencies for logging, metrics, etc.\n */\n constructor(deps: PerpsPlatformDependencies) {\n this.#deps = deps;\n }\n\n /**\n * Validate and parse market list from remote feature flags\n * Handles both string (comma-separated) and array formats from LaunchDarkly\n *\n * @param remoteValue - The raw value from remote feature flags (string or array).\n * @param fieldName - The name of the field being validated (for logging).\n * @param currentValue - The current local market list as fallback reference.\n * @returns The validated market list, or undefined if validation fails.\n */\n #validateMarketList(\n remoteValue: unknown,\n fieldName: string,\n currentValue: string[],\n ): string[] | undefined {\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} validation`,\n {\n remoteValue,\n type: typeof remoteValue,\n isArray: Array.isArray(remoteValue),\n },\n );\n\n // LaunchDarkly returns comma-separated strings for list values\n // Values may have literal quotes (e.g., '\"xyz\"') due to JSON encoding quirks\n if (typeof remoteValue === 'string') {\n const parsed = this.#filterValidPatterns(\n parseCommaSeparatedString(remoteValue).map(stripQuotes),\n fieldName,\n );\n\n if (parsed.length > 0) {\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} validated from string`,\n { validatedMarkets: parsed },\n );\n return parsed;\n }\n\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} string was empty after parsing`,\n { fallbackValue: currentValue },\n );\n return undefined;\n }\n\n // Fallback: Validate array of non-empty strings\n if (\n Array.isArray(remoteValue) &&\n remoteValue.every((item) => typeof item === 'string' && item.length > 0)\n ) {\n const validatedMarkets = this.#filterValidPatterns(\n (remoteValue as string[])\n .map((market) => stripQuotes(market.trim()))\n .filter((market) => market.length > 0),\n fieldName,\n );\n\n if (validatedMarkets.length > 0) {\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} validated from array`,\n { validatedMarkets },\n );\n return validatedMarkets;\n }\n\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} array was empty after filtering`,\n { fallbackValue: currentValue },\n );\n return undefined;\n }\n\n this.#deps.debugLogger.log(\n `PerpsController: HIP-3 ${fieldName} validation FAILED - falling back to local config`,\n {\n reason: Array.isArray(remoteValue)\n ? 'Array contains non-string or empty values'\n : 'Invalid type (expected string or array)',\n fallbackValue: currentValue,\n },\n );\n return undefined;\n }\n\n /**\n * Filter out patterns that fail market pattern validation.\n * Invalid patterns are logged and dropped instead of propagated downstream.\n *\n * @param patterns - The array of market patterns to validate.\n * @param fieldName - The name of the field being validated (for logging).\n * @returns The filtered array containing only valid market patterns.\n */\n #filterValidPatterns(patterns: string[], fieldName: string): string[] {\n return patterns.filter((pattern) => {\n try {\n validateMarketPattern(pattern);\n return true;\n } catch (error) {\n this.#deps.logger.error(\n ensureError(\n error,\n `FeatureFlagConfigurationService.filterValidPatterns`,\n ),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'FeatureFlagConfigurationService.filterValidPatterns',\n data: { fieldName, pattern },\n },\n },\n );\n return false;\n }\n });\n }\n\n /**\n * Check if arrays have different values (order-independent comparison)\n *\n * @param a - The first string array to compare.\n * @param b - The second string array to compare.\n * @returns True if the arrays contain different values.\n */\n #arraysHaveDifferentValues(a: string[], b: string[]): boolean {\n return (\n JSON.stringify(\n [...a].sort((itemA, itemB) => itemA.localeCompare(itemB)),\n ) !==\n JSON.stringify([...b].sort((itemA, itemB) => itemA.localeCompare(itemB)))\n );\n }\n\n /**\n * Refresh HIP-3 configuration when remote feature flags change.\n * This method extracts HIP-3 settings from remote flags, validates them,\n * and updates internal state if they differ from current values.\n * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.\n *\n * Follows the \"sticky remote\" pattern: once remote config is loaded, never downgrade to fallback.\n *\n * @param options - Configuration object\n * @param options.remoteFeatureFlagControllerState - Remote feature flag state\n * @param options.context - ServiceContext providing state access callbacks\n */\n refreshHip3Config(options: {\n remoteFeatureFlagControllerState: PerpsRemoteFeatureFlagState;\n context: ServiceContext;\n }): void {\n const { remoteFeatureFlagControllerState, context } = options;\n\n if (\n !context.getHip3Config ||\n !context.setHip3Config ||\n !context.incrementHip3ConfigVersion\n ) {\n throw new Error(\n 'Required HIP-3 callbacks not available in ServiceContext',\n );\n }\n\n const remoteFlags = remoteFeatureFlagControllerState.remoteFeatureFlags;\n const currentConfig = context.getHip3Config();\n\n // Extract and validate remote HIP-3 equity enabled flag\n const equityFlag = remoteFlags?.perpsHip3Enabled;\n // Use type guard to validate before calling - validatedVersionGatedFeatureFlag also\n // handles invalid flags internally, but proper typing requires the guard\n const validatedEquity = isVersionGatedFeatureFlag(equityFlag)\n ? this.#deps.featureFlags.validateVersionGated(equityFlag)\n : undefined;\n\n this.#deps.debugLogger.log(\n 'PerpsController: HIP-3 equity flag validation',\n {\n equityFlag,\n validatedEquity,\n willUse: validatedEquity === undefined ? 'fallback' : 'remote',\n },\n );\n\n // Extract and validate remote HIP-3 market lists\n const validatedAllowlistMarkets = hasProperty(\n remoteFlags,\n 'perpsHip3AllowlistMarkets',\n )\n ? this.#validateMarketList(\n remoteFlags.perpsHip3AllowlistMarkets,\n 'allowlistMarkets',\n currentConfig.allowlistMarkets,\n )\n : undefined;\n\n const validatedBlocklistMarkets = hasProperty(\n remoteFlags,\n 'perpsHip3BlocklistMarkets',\n )\n ? this.#validateMarketList(\n remoteFlags.perpsHip3BlocklistMarkets,\n 'blocklistMarkets',\n currentConfig.blocklistMarkets,\n )\n : undefined;\n\n // Detect changes (only if we have valid remote values)\n const equityChanged =\n validatedEquity !== undefined &&\n validatedEquity !== currentConfig.enabled;\n const allowlistMarketsChanged =\n validatedAllowlistMarkets !== undefined &&\n this.#arraysHaveDifferentValues(\n validatedAllowlistMarkets,\n currentConfig.allowlistMarkets,\n );\n const blocklistMarketsChanged =\n validatedBlocklistMarkets !== undefined &&\n this.#arraysHaveDifferentValues(\n validatedBlocklistMarkets,\n currentConfig.blocklistMarkets,\n );\n\n if (equityChanged || allowlistMarketsChanged || blocklistMarketsChanged) {\n this.#deps.debugLogger.log(\n 'PerpsController: HIP-3 config changed via remote feature flags',\n {\n equityChanged,\n allowlistMarketsChanged,\n blocklistMarketsChanged,\n oldEquity: currentConfig.enabled,\n newEquity: validatedEquity,\n oldAllowlistMarkets: currentConfig.allowlistMarkets,\n newAllowlistMarkets: validatedAllowlistMarkets,\n oldBlocklistMarkets: currentConfig.blocklistMarkets,\n newBlocklistMarkets: validatedBlocklistMarkets,\n source: 'remote',\n },\n );\n\n // Update internal state (sticky remote - never downgrade)\n context.setHip3Config({\n enabled: validatedEquity,\n allowlistMarkets: validatedAllowlistMarkets\n ? [...validatedAllowlistMarkets]\n : undefined,\n blocklistMarkets: validatedBlocklistMarkets\n ? [...validatedBlocklistMarkets]\n : undefined,\n source: 'remote',\n });\n\n // Increment version to trigger ConnectionManager reconnection and cache clearing\n const newVersion = context.incrementHip3ConfigVersion();\n\n this.#deps.debugLogger.log(\n 'PerpsController: Incremented hip3ConfigVersion to trigger reconnection',\n {\n newVersion,\n newHip3Enabled: validatedEquity ?? currentConfig.enabled,\n newHip3AllowlistMarkets:\n validatedAllowlistMarkets ?? currentConfig.allowlistMarkets,\n newHip3BlocklistMarkets:\n validatedBlocklistMarkets ?? currentConfig.blocklistMarkets,\n },\n );\n\n // Note: ConnectionManager will handle:\n // 1. Detecting hip3ConfigVersion change via Redux monitoring\n // 2. Clearing all StreamManager caches\n // 3. Calling reconnectWithNewContext() -> initializeProviders()\n // 4. Provider reinitialization will read the new HIP-3 config below\n }\n }\n\n /**\n * Respond to RemoteFeatureFlagController state changes\n * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.\n * Uses fallback configuration when remote feature flag is undefined.\n * Note: Initial eligibility is set in the constructor if fallback regions are provided.\n *\n * @param options - Configuration object\n * @param options.remoteFeatureFlagControllerState - Remote feature flag state\n * @param options.context - ServiceContext providing callbacks\n */\n refreshEligibility(options: {\n remoteFeatureFlagControllerState: PerpsRemoteFeatureFlagState;\n context: ServiceContext;\n }): void {\n const { remoteFeatureFlagControllerState, context } = options;\n\n const perpsGeoBlockedRegionsFeatureFlag =\n // NOTE: Do not use perpsPerpTradingGeoBlockedCountries as it is deprecated.\n remoteFeatureFlagControllerState.remoteFeatureFlags\n ?.perpsPerpTradingGeoBlockedCountriesV2;\n\n const remoteBlockedRegions = (\n perpsGeoBlockedRegionsFeatureFlag as { blockedRegions?: string[] }\n )?.blockedRegions;\n\n if (Array.isArray(remoteBlockedRegions)) {\n this.setBlockedRegions({\n list: remoteBlockedRegions,\n source: 'remote',\n context,\n });\n }\n\n // Also check for HIP-3 config changes\n this.refreshHip3Config({ remoteFeatureFlagControllerState, context });\n }\n\n /**\n * Set blocked region list with \"never downgrade\" pattern enforcement\n * Updates the blocked region list and triggers eligibility refresh.\n * Implements \"sticky remote\": once remote regions are set, never downgrade to fallback.\n *\n * @param options - Configuration object\n * @param options.list - Array of blocked region codes\n * @param options.source - Source of the list ('remote' or 'fallback')\n * @param options.context - ServiceContext providing callbacks\n */\n setBlockedRegions(options: {\n list: string[];\n source: 'remote' | 'fallback';\n context: ServiceContext;\n }): void {\n const { list, source, context } = options;\n\n if (\n !context.getBlockedRegionList ||\n !context.setBlockedRegionList ||\n !context.refreshEligibility\n ) {\n throw new Error(\n 'Required blocked region callbacks not available in ServiceContext',\n );\n }\n\n const currentList = context.getBlockedRegionList();\n\n // Never downgrade from remote to fallback\n if (source === 'fallback' && currentList.source === 'remote') {\n return;\n }\n\n if (Array.isArray(list)) {\n context.setBlockedRegionList(list, source);\n }\n\n context.refreshEligibility().catch((error) => {\n this.#deps.logger.error(\n ensureError(error, 'FeatureFlagConfigurationService.setBlockedRegions'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'FeatureFlagConfigurationService.setBlockedRegions',\n data: { source },\n },\n },\n );\n });\n }\n}\n"]}