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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/CHANGELOG.md +1 -11
  2. package/dist/PerpsController.cjs +66 -2224
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts +79 -933
  5. package/dist/PerpsController.d.cts.map +1 -1
  6. package/dist/PerpsController.d.mts +79 -933
  7. package/dist/PerpsController.d.mts.map +1 -1
  8. package/dist/PerpsController.mjs +64 -2221
  9. package/dist/PerpsController.mjs.map +1 -1
  10. package/dist/index.cjs +1 -32
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +2 -6
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +2 -6
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -9
  17. package/dist/index.mjs.map +1 -1
  18. package/package.json +4 -19
  19. package/dist/__mocks__/hyperliquidMock.cjs +0 -68
  20. package/dist/__mocks__/hyperliquidMock.cjs.map +0 -1
  21. package/dist/__mocks__/hyperliquidMock.d.cts +0 -15
  22. package/dist/__mocks__/hyperliquidMock.d.cts.map +0 -1
  23. package/dist/__mocks__/hyperliquidMock.d.mts +0 -15
  24. package/dist/__mocks__/hyperliquidMock.d.mts.map +0 -1
  25. package/dist/__mocks__/hyperliquidMock.mjs +0 -65
  26. package/dist/__mocks__/hyperliquidMock.mjs.map +0 -1
  27. package/dist/__mocks__/providerMocks.cjs +0 -144
  28. package/dist/__mocks__/providerMocks.cjs.map +0 -1
  29. package/dist/__mocks__/providerMocks.d.cts +0 -44
  30. package/dist/__mocks__/providerMocks.d.cts.map +0 -1
  31. package/dist/__mocks__/providerMocks.d.mts +0 -44
  32. package/dist/__mocks__/providerMocks.d.mts.map +0 -1
  33. package/dist/__mocks__/providerMocks.mjs +0 -136
  34. package/dist/__mocks__/providerMocks.mjs.map +0 -1
  35. package/dist/__mocks__/serviceMocks.cjs +0 -187
  36. package/dist/__mocks__/serviceMocks.cjs.map +0 -1
  37. package/dist/__mocks__/serviceMocks.d.cts +0 -58
  38. package/dist/__mocks__/serviceMocks.d.cts.map +0 -1
  39. package/dist/__mocks__/serviceMocks.d.mts +0 -58
  40. package/dist/__mocks__/serviceMocks.d.mts.map +0 -1
  41. package/dist/__mocks__/serviceMocks.mjs +0 -180
  42. package/dist/__mocks__/serviceMocks.mjs.map +0 -1
  43. package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -459
  44. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
  45. package/dist/aggregation/SubscriptionMultiplexer.d.cts +0 -222
  46. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
  47. package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -222
  48. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
  49. package/dist/aggregation/SubscriptionMultiplexer.mjs +0 -455
  50. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
  51. package/dist/aggregation/index.cjs +0 -9
  52. package/dist/aggregation/index.cjs.map +0 -1
  53. package/dist/aggregation/index.d.cts +0 -6
  54. package/dist/aggregation/index.d.cts.map +0 -1
  55. package/dist/aggregation/index.d.mts +0 -6
  56. package/dist/aggregation/index.d.mts.map +0 -1
  57. package/dist/aggregation/index.mjs +0 -5
  58. package/dist/aggregation/index.mjs.map +0 -1
  59. package/dist/constants/eventNames.cjs +0 -117
  60. package/dist/constants/eventNames.cjs.map +0 -1
  61. package/dist/constants/eventNames.d.cts +0 -106
  62. package/dist/constants/eventNames.d.cts.map +0 -1
  63. package/dist/constants/eventNames.d.mts +0 -106
  64. package/dist/constants/eventNames.d.mts.map +0 -1
  65. package/dist/constants/eventNames.mjs +0 -114
  66. package/dist/constants/eventNames.mjs.map +0 -1
  67. package/dist/constants/hyperLiquidConfig.cjs +0 -366
  68. package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
  69. package/dist/constants/hyperLiquidConfig.d.cts +0 -276
  70. package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
  71. package/dist/constants/hyperLiquidConfig.d.mts +0 -276
  72. package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
  73. package/dist/constants/hyperLiquidConfig.mjs +0 -357
  74. package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
  75. package/dist/constants/index.cjs +0 -23
  76. package/dist/constants/index.cjs.map +0 -1
  77. package/dist/constants/index.d.cts +0 -7
  78. package/dist/constants/index.d.cts.map +0 -1
  79. package/dist/constants/index.d.mts +0 -7
  80. package/dist/constants/index.d.mts.map +0 -1
  81. package/dist/constants/index.mjs +0 -7
  82. package/dist/constants/index.mjs.map +0 -1
  83. package/dist/constants/orderTypes.cjs +0 -31
  84. package/dist/constants/orderTypes.cjs.map +0 -1
  85. package/dist/constants/orderTypes.d.cts +0 -19
  86. package/dist/constants/orderTypes.d.cts.map +0 -1
  87. package/dist/constants/orderTypes.d.mts +0 -19
  88. package/dist/constants/orderTypes.d.mts.map +0 -1
  89. package/dist/constants/orderTypes.mjs +0 -27
  90. package/dist/constants/orderTypes.mjs.map +0 -1
  91. package/dist/constants/performanceMetrics.cjs +0 -61
  92. package/dist/constants/performanceMetrics.cjs.map +0 -1
  93. package/dist/constants/performanceMetrics.d.cts +0 -44
  94. package/dist/constants/performanceMetrics.d.cts.map +0 -1
  95. package/dist/constants/performanceMetrics.d.mts +0 -44
  96. package/dist/constants/performanceMetrics.d.mts.map +0 -1
  97. package/dist/constants/performanceMetrics.mjs +0 -58
  98. package/dist/constants/performanceMetrics.mjs.map +0 -1
  99. package/dist/constants/perpsConfig.cjs +0 -461
  100. package/dist/constants/perpsConfig.cjs.map +0 -1
  101. package/dist/constants/perpsConfig.d.cts +0 -343
  102. package/dist/constants/perpsConfig.d.cts.map +0 -1
  103. package/dist/constants/perpsConfig.d.mts +0 -343
  104. package/dist/constants/perpsConfig.d.mts.map +0 -1
  105. package/dist/constants/perpsConfig.mjs +0 -458
  106. package/dist/constants/perpsConfig.mjs.map +0 -1
  107. package/dist/constants/perpsErrorCodes.cjs +0 -79
  108. package/dist/constants/perpsErrorCodes.cjs.map +0 -1
  109. package/dist/constants/perpsErrorCodes.d.cts +0 -64
  110. package/dist/constants/perpsErrorCodes.d.cts.map +0 -1
  111. package/dist/constants/perpsErrorCodes.d.mts +0 -64
  112. package/dist/constants/perpsErrorCodes.d.mts.map +0 -1
  113. package/dist/constants/perpsErrorCodes.mjs +0 -76
  114. package/dist/constants/perpsErrorCodes.mjs.map +0 -1
  115. package/dist/platform-services/HyperLiquidClientService.cjs +0 -857
  116. package/dist/platform-services/HyperLiquidClientService.cjs.map +0 -1
  117. package/dist/platform-services/HyperLiquidClientService.d.cts +0 -263
  118. package/dist/platform-services/HyperLiquidClientService.d.cts.map +0 -1
  119. package/dist/platform-services/HyperLiquidClientService.d.mts +0 -263
  120. package/dist/platform-services/HyperLiquidClientService.d.mts.map +0 -1
  121. package/dist/platform-services/HyperLiquidClientService.mjs +0 -853
  122. package/dist/platform-services/HyperLiquidClientService.mjs.map +0 -1
  123. package/dist/platform-services/HyperLiquidSubscriptionService.cjs +0 -2170
  124. package/dist/platform-services/HyperLiquidSubscriptionService.cjs.map +0 -1
  125. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts +0 -424
  126. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts.map +0 -1
  127. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts +0 -424
  128. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts.map +0 -1
  129. package/dist/platform-services/HyperLiquidSubscriptionService.mjs +0 -2166
  130. package/dist/platform-services/HyperLiquidSubscriptionService.mjs.map +0 -1
  131. package/dist/platform-services/HyperLiquidWalletService.cjs +0 -140
  132. package/dist/platform-services/HyperLiquidWalletService.cjs.map +0 -1
  133. package/dist/platform-services/HyperLiquidWalletService.d.cts +0 -78
  134. package/dist/platform-services/HyperLiquidWalletService.d.cts.map +0 -1
  135. package/dist/platform-services/HyperLiquidWalletService.d.mts +0 -78
  136. package/dist/platform-services/HyperLiquidWalletService.d.mts.map +0 -1
  137. package/dist/platform-services/HyperLiquidWalletService.mjs +0 -136
  138. package/dist/platform-services/HyperLiquidWalletService.mjs.map +0 -1
  139. package/dist/providers/AggregatedPerpsProvider.cjs +0 -777
  140. package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
  141. package/dist/providers/AggregatedPerpsProvider.d.cts +0 -466
  142. package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
  143. package/dist/providers/AggregatedPerpsProvider.d.mts +0 -466
  144. package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
  145. package/dist/providers/AggregatedPerpsProvider.mjs +0 -773
  146. package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
  147. package/dist/providers/HyperLiquidProvider.cjs +0 -5172
  148. package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
  149. package/dist/providers/HyperLiquidProvider.d.cts +0 -881
  150. package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
  151. package/dist/providers/HyperLiquidProvider.d.mts +0 -881
  152. package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
  153. package/dist/providers/HyperLiquidProvider.mjs +0 -5168
  154. package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
  155. package/dist/providers/index.cjs +0 -11
  156. package/dist/providers/index.cjs.map +0 -1
  157. package/dist/providers/index.d.cts +0 -6
  158. package/dist/providers/index.d.cts.map +0 -1
  159. package/dist/providers/index.d.mts +0 -6
  160. package/dist/providers/index.d.mts.map +0 -1
  161. package/dist/providers/index.mjs +0 -6
  162. package/dist/providers/index.mjs.map +0 -1
  163. package/dist/routing/ProviderRouter.cjs +0 -148
  164. package/dist/routing/ProviderRouter.cjs.map +0 -1
  165. package/dist/routing/ProviderRouter.d.cts +0 -124
  166. package/dist/routing/ProviderRouter.d.cts.map +0 -1
  167. package/dist/routing/ProviderRouter.d.mts +0 -124
  168. package/dist/routing/ProviderRouter.d.mts.map +0 -1
  169. package/dist/routing/ProviderRouter.mjs +0 -144
  170. package/dist/routing/ProviderRouter.mjs.map +0 -1
  171. package/dist/routing/index.cjs +0 -9
  172. package/dist/routing/index.cjs.map +0 -1
  173. package/dist/routing/index.d.cts +0 -6
  174. package/dist/routing/index.d.cts.map +0 -1
  175. package/dist/routing/index.d.mts +0 -6
  176. package/dist/routing/index.d.mts.map +0 -1
  177. package/dist/routing/index.mjs +0 -5
  178. package/dist/routing/index.mjs.map +0 -1
  179. package/dist/selectors.cjs +0 -161
  180. package/dist/selectors.cjs.map +0 -1
  181. package/dist/selectors.d.cts +0 -345
  182. package/dist/selectors.d.cts.map +0 -1
  183. package/dist/selectors.d.mts +0 -345
  184. package/dist/selectors.d.mts.map +0 -1
  185. package/dist/selectors.mjs +0 -153
  186. package/dist/selectors.mjs.map +0 -1
  187. package/dist/services/AccountService.cjs +0 -313
  188. package/dist/services/AccountService.cjs.map +0 -1
  189. package/dist/services/AccountService.d.cts +0 -53
  190. package/dist/services/AccountService.d.cts.map +0 -1
  191. package/dist/services/AccountService.d.mts +0 -53
  192. package/dist/services/AccountService.d.mts.map +0 -1
  193. package/dist/services/AccountService.mjs +0 -309
  194. package/dist/services/AccountService.mjs.map +0 -1
  195. package/dist/services/DataLakeService.cjs +0 -219
  196. package/dist/services/DataLakeService.cjs.map +0 -1
  197. package/dist/services/DataLakeService.d.cts +0 -49
  198. package/dist/services/DataLakeService.d.cts.map +0 -1
  199. package/dist/services/DataLakeService.d.mts +0 -49
  200. package/dist/services/DataLakeService.d.mts.map +0 -1
  201. package/dist/services/DataLakeService.mjs +0 -215
  202. package/dist/services/DataLakeService.mjs.map +0 -1
  203. package/dist/services/DepositService.cjs +0 -96
  204. package/dist/services/DepositService.cjs.map +0 -1
  205. package/dist/services/DepositService.d.cts +0 -37
  206. package/dist/services/DepositService.d.cts.map +0 -1
  207. package/dist/services/DepositService.d.mts +0 -37
  208. package/dist/services/DepositService.d.mts.map +0 -1
  209. package/dist/services/DepositService.mjs +0 -92
  210. package/dist/services/DepositService.mjs.map +0 -1
  211. package/dist/services/EligibilityService.cjs +0 -156
  212. package/dist/services/EligibilityService.cjs.map +0 -1
  213. package/dist/services/EligibilityService.d.cts +0 -48
  214. package/dist/services/EligibilityService.d.cts.map +0 -1
  215. package/dist/services/EligibilityService.d.mts +0 -48
  216. package/dist/services/EligibilityService.d.mts.map +0 -1
  217. package/dist/services/EligibilityService.mjs +0 -152
  218. package/dist/services/EligibilityService.mjs.map +0 -1
  219. package/dist/services/FeatureFlagConfigurationService.cjs +0 -258
  220. package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
  221. package/dist/services/FeatureFlagConfigurationService.d.cts +0 -100
  222. package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
  223. package/dist/services/FeatureFlagConfigurationService.d.mts +0 -100
  224. package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
  225. package/dist/services/FeatureFlagConfigurationService.mjs +0 -254
  226. package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
  227. package/dist/services/MarketDataService.cjs +0 -875
  228. package/dist/services/MarketDataService.cjs.map +0 -1
  229. package/dist/services/MarketDataService.d.cts +0 -289
  230. package/dist/services/MarketDataService.d.cts.map +0 -1
  231. package/dist/services/MarketDataService.d.mts +0 -289
  232. package/dist/services/MarketDataService.d.mts.map +0 -1
  233. package/dist/services/MarketDataService.mjs +0 -871
  234. package/dist/services/MarketDataService.mjs.map +0 -1
  235. package/dist/services/RewardsIntegrationService.cjs +0 -94
  236. package/dist/services/RewardsIntegrationService.cjs.map +0 -1
  237. package/dist/services/RewardsIntegrationService.d.cts +0 -30
  238. package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
  239. package/dist/services/RewardsIntegrationService.d.mts +0 -30
  240. package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
  241. package/dist/services/RewardsIntegrationService.mjs +0 -90
  242. package/dist/services/RewardsIntegrationService.mjs.map +0 -1
  243. package/dist/services/ServiceContext.cjs +0 -3
  244. package/dist/services/ServiceContext.cjs.map +0 -1
  245. package/dist/services/ServiceContext.d.cts +0 -110
  246. package/dist/services/ServiceContext.d.cts.map +0 -1
  247. package/dist/services/ServiceContext.d.mts +0 -110
  248. package/dist/services/ServiceContext.d.mts.map +0 -1
  249. package/dist/services/ServiceContext.mjs +0 -2
  250. package/dist/services/ServiceContext.mjs.map +0 -1
  251. package/dist/services/TradingService.cjs +0 -1481
  252. package/dist/services/TradingService.cjs.map +0 -1
  253. package/dist/services/TradingService.d.cts +0 -308
  254. package/dist/services/TradingService.d.cts.map +0 -1
  255. package/dist/services/TradingService.d.mts +0 -308
  256. package/dist/services/TradingService.d.mts.map +0 -1
  257. package/dist/services/TradingService.mjs +0 -1477
  258. package/dist/services/TradingService.mjs.map +0 -1
  259. package/dist/services/index.cjs +0 -26
  260. package/dist/services/index.cjs.map +0 -1
  261. package/dist/services/index.d.cts +0 -11
  262. package/dist/services/index.d.cts.map +0 -1
  263. package/dist/services/index.d.mts +0 -11
  264. package/dist/services/index.d.mts.map +0 -1
  265. package/dist/services/index.mjs +0 -10
  266. package/dist/services/index.mjs.map +0 -1
  267. package/dist/services/utils.cjs +0 -16
  268. package/dist/services/utils.cjs.map +0 -1
  269. package/dist/services/utils.d.cts +0 -8
  270. package/dist/services/utils.d.cts.map +0 -1
  271. package/dist/services/utils.d.mts +0 -8
  272. package/dist/services/utils.d.mts.map +0 -1
  273. package/dist/services/utils.mjs +0 -12
  274. package/dist/services/utils.mjs.map +0 -1
  275. package/dist/types/chart.cjs +0 -42
  276. package/dist/types/chart.cjs.map +0 -1
  277. package/dist/types/chart.d.cts +0 -62
  278. package/dist/types/chart.d.cts.map +0 -1
  279. package/dist/types/chart.d.mts +0 -62
  280. package/dist/types/chart.d.mts.map +0 -1
  281. package/dist/types/chart.mjs +0 -39
  282. package/dist/types/chart.mjs.map +0 -1
  283. package/dist/types/hyperliquid-types.cjs +0 -3
  284. package/dist/types/hyperliquid-types.cjs.map +0 -1
  285. package/dist/types/hyperliquid-types.d.cts +0 -52
  286. package/dist/types/hyperliquid-types.d.cts.map +0 -1
  287. package/dist/types/hyperliquid-types.d.mts +0 -52
  288. package/dist/types/hyperliquid-types.d.mts.map +0 -1
  289. package/dist/types/hyperliquid-types.mjs +0 -2
  290. package/dist/types/hyperliquid-types.mjs.map +0 -1
  291. package/dist/types/index.cjs +0 -96
  292. package/dist/types/index.cjs.map +0 -1
  293. package/dist/types/index.d.cts +0 -1153
  294. package/dist/types/index.d.cts.map +0 -1
  295. package/dist/types/index.d.mts +0 -1153
  296. package/dist/types/index.d.mts.map +0 -1
  297. package/dist/types/index.mjs +0 -79
  298. package/dist/types/index.mjs.map +0 -1
  299. package/dist/types/transactionTypes.cjs +0 -28
  300. package/dist/types/transactionTypes.cjs.map +0 -1
  301. package/dist/types/transactionTypes.d.cts +0 -64
  302. package/dist/types/transactionTypes.d.cts.map +0 -1
  303. package/dist/types/transactionTypes.d.mts +0 -64
  304. package/dist/types/transactionTypes.d.mts.map +0 -1
  305. package/dist/types/transactionTypes.mjs +0 -23
  306. package/dist/types/transactionTypes.mjs.map +0 -1
  307. package/dist/utils/accountUtils.cjs +0 -65
  308. package/dist/utils/accountUtils.cjs.map +0 -1
  309. package/dist/utils/accountUtils.d.cts +0 -26
  310. package/dist/utils/accountUtils.d.cts.map +0 -1
  311. package/dist/utils/accountUtils.d.mts +0 -26
  312. package/dist/utils/accountUtils.d.mts.map +0 -1
  313. package/dist/utils/accountUtils.mjs +0 -61
  314. package/dist/utils/accountUtils.mjs.map +0 -1
  315. package/dist/utils/amountConversion.cjs +0 -61
  316. package/dist/utils/amountConversion.cjs.map +0 -1
  317. package/dist/utils/amountConversion.d.cts +0 -16
  318. package/dist/utils/amountConversion.d.cts.map +0 -1
  319. package/dist/utils/amountConversion.d.mts +0 -16
  320. package/dist/utils/amountConversion.d.mts.map +0 -1
  321. package/dist/utils/amountConversion.mjs +0 -54
  322. package/dist/utils/amountConversion.mjs.map +0 -1
  323. package/dist/utils/chartUtils.cjs +0 -98
  324. package/dist/utils/chartUtils.cjs.map +0 -1
  325. package/dist/utils/chartUtils.d.cts +0 -14
  326. package/dist/utils/chartUtils.d.cts.map +0 -1
  327. package/dist/utils/chartUtils.d.mts +0 -14
  328. package/dist/utils/chartUtils.d.mts.map +0 -1
  329. package/dist/utils/chartUtils.mjs +0 -94
  330. package/dist/utils/chartUtils.mjs.map +0 -1
  331. package/dist/utils/errorUtils.cjs +0 -22
  332. package/dist/utils/errorUtils.cjs.map +0 -1
  333. package/dist/utils/errorUtils.d.cts +0 -13
  334. package/dist/utils/errorUtils.d.cts.map +0 -1
  335. package/dist/utils/errorUtils.d.mts +0 -13
  336. package/dist/utils/errorUtils.d.mts.map +0 -1
  337. package/dist/utils/errorUtils.mjs +0 -18
  338. package/dist/utils/errorUtils.mjs.map +0 -1
  339. package/dist/utils/formatUtils.cjs +0 -987
  340. package/dist/utils/formatUtils.cjs.map +0 -1
  341. package/dist/utils/formatUtils.d.cts +0 -387
  342. package/dist/utils/formatUtils.d.cts.map +0 -1
  343. package/dist/utils/formatUtils.d.mts +0 -387
  344. package/dist/utils/formatUtils.d.mts.map +0 -1
  345. package/dist/utils/formatUtils.mjs +0 -966
  346. package/dist/utils/formatUtils.mjs.map +0 -1
  347. package/dist/utils/hyperLiquidAdapter.cjs +0 -454
  348. package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
  349. package/dist/utils/hyperLiquidAdapter.d.cts +0 -158
  350. package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
  351. package/dist/utils/hyperLiquidAdapter.d.mts +0 -158
  352. package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
  353. package/dist/utils/hyperLiquidAdapter.mjs +0 -439
  354. package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
  355. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -89
  356. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
  357. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -58
  358. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
  359. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +0 -58
  360. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
  361. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +0 -84
  362. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
  363. package/dist/utils/hyperLiquidValidation.cjs +0 -426
  364. package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
  365. package/dist/utils/hyperLiquidValidation.d.cts +0 -143
  366. package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
  367. package/dist/utils/hyperLiquidValidation.d.mts +0 -143
  368. package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
  369. package/dist/utils/hyperLiquidValidation.mjs +0 -413
  370. package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
  371. package/dist/utils/idUtils.cjs +0 -50
  372. package/dist/utils/idUtils.cjs.map +0 -1
  373. package/dist/utils/idUtils.d.cts +0 -38
  374. package/dist/utils/idUtils.d.cts.map +0 -1
  375. package/dist/utils/idUtils.d.mts +0 -38
  376. package/dist/utils/idUtils.d.mts.map +0 -1
  377. package/dist/utils/idUtils.mjs +0 -42
  378. package/dist/utils/idUtils.mjs.map +0 -1
  379. package/dist/utils/marginUtils.cjs +0 -137
  380. package/dist/utils/marginUtils.cjs.map +0 -1
  381. package/dist/utils/marginUtils.d.cts +0 -64
  382. package/dist/utils/marginUtils.d.cts.map +0 -1
  383. package/dist/utils/marginUtils.d.mts +0 -64
  384. package/dist/utils/marginUtils.d.mts.map +0 -1
  385. package/dist/utils/marginUtils.mjs +0 -131
  386. package/dist/utils/marginUtils.mjs.map +0 -1
  387. package/dist/utils/marketDataTransform.cjs +0 -227
  388. package/dist/utils/marketDataTransform.cjs.map +0 -1
  389. package/dist/utils/marketDataTransform.d.cts +0 -45
  390. package/dist/utils/marketDataTransform.d.cts.map +0 -1
  391. package/dist/utils/marketDataTransform.d.mts +0 -45
  392. package/dist/utils/marketDataTransform.d.mts.map +0 -1
  393. package/dist/utils/marketDataTransform.mjs +0 -220
  394. package/dist/utils/marketDataTransform.mjs.map +0 -1
  395. package/dist/utils/marketUtils.cjs +0 -420
  396. package/dist/utils/marketUtils.cjs.map +0 -1
  397. package/dist/utils/marketUtils.d.cts +0 -227
  398. package/dist/utils/marketUtils.d.cts.map +0 -1
  399. package/dist/utils/marketUtils.d.mts +0 -227
  400. package/dist/utils/marketUtils.d.mts.map +0 -1
  401. package/dist/utils/marketUtils.mjs +0 -404
  402. package/dist/utils/marketUtils.mjs.map +0 -1
  403. package/dist/utils/orderBookGrouping.cjs +0 -151
  404. package/dist/utils/orderBookGrouping.cjs.map +0 -1
  405. package/dist/utils/orderBookGrouping.d.cts +0 -76
  406. package/dist/utils/orderBookGrouping.d.cts.map +0 -1
  407. package/dist/utils/orderBookGrouping.d.mts +0 -76
  408. package/dist/utils/orderBookGrouping.d.mts.map +0 -1
  409. package/dist/utils/orderBookGrouping.mjs +0 -143
  410. package/dist/utils/orderBookGrouping.mjs.map +0 -1
  411. package/dist/utils/orderCalculations.cjs +0 -283
  412. package/dist/utils/orderCalculations.cjs.map +0 -1
  413. package/dist/utils/orderCalculations.d.cts +0 -107
  414. package/dist/utils/orderCalculations.d.cts.map +0 -1
  415. package/dist/utils/orderCalculations.d.mts +0 -107
  416. package/dist/utils/orderCalculations.d.mts.map +0 -1
  417. package/dist/utils/orderCalculations.mjs +0 -274
  418. package/dist/utils/orderCalculations.mjs.map +0 -1
  419. package/dist/utils/orderUtils.cjs +0 -159
  420. package/dist/utils/orderUtils.cjs.map +0 -1
  421. package/dist/utils/orderUtils.d.cts +0 -66
  422. package/dist/utils/orderUtils.d.cts.map +0 -1
  423. package/dist/utils/orderUtils.d.mts +0 -66
  424. package/dist/utils/orderUtils.d.mts.map +0 -1
  425. package/dist/utils/orderUtils.mjs +0 -151
  426. package/dist/utils/orderUtils.mjs.map +0 -1
  427. package/dist/utils/pnlCalculations.cjs +0 -107
  428. package/dist/utils/pnlCalculations.cjs.map +0 -1
  429. package/dist/utils/pnlCalculations.d.cts +0 -79
  430. package/dist/utils/pnlCalculations.d.cts.map +0 -1
  431. package/dist/utils/pnlCalculations.d.mts +0 -79
  432. package/dist/utils/pnlCalculations.d.mts.map +0 -1
  433. package/dist/utils/pnlCalculations.mjs +0 -97
  434. package/dist/utils/pnlCalculations.mjs.map +0 -1
  435. package/dist/utils/positionCalculations.cjs +0 -176
  436. package/dist/utils/positionCalculations.cjs.map +0 -1
  437. package/dist/utils/positionCalculations.d.cts +0 -85
  438. package/dist/utils/positionCalculations.d.cts.map +0 -1
  439. package/dist/utils/positionCalculations.d.mts +0 -85
  440. package/dist/utils/positionCalculations.d.mts.map +0 -1
  441. package/dist/utils/positionCalculations.mjs +0 -165
  442. package/dist/utils/positionCalculations.mjs.map +0 -1
  443. package/dist/utils/sortMarkets.cjs +0 -88
  444. package/dist/utils/sortMarkets.cjs.map +0 -1
  445. package/dist/utils/sortMarkets.d.cts +0 -21
  446. package/dist/utils/sortMarkets.d.cts.map +0 -1
  447. package/dist/utils/sortMarkets.d.mts +0 -21
  448. package/dist/utils/sortMarkets.d.mts.map +0 -1
  449. package/dist/utils/sortMarkets.mjs +0 -84
  450. package/dist/utils/sortMarkets.mjs.map +0 -1
  451. package/dist/utils/standaloneInfoClient.cjs +0 -34
  452. package/dist/utils/standaloneInfoClient.cjs.map +0 -1
  453. package/dist/utils/standaloneInfoClient.d.cts +0 -31
  454. package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
  455. package/dist/utils/standaloneInfoClient.d.mts +0 -31
  456. package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
  457. package/dist/utils/standaloneInfoClient.mjs +0 -30
  458. package/dist/utils/standaloneInfoClient.mjs.map +0 -1
  459. package/dist/utils/stringParseUtils.cjs +0 -49
  460. package/dist/utils/stringParseUtils.cjs.map +0 -1
  461. package/dist/utils/stringParseUtils.d.cts +0 -35
  462. package/dist/utils/stringParseUtils.d.cts.map +0 -1
  463. package/dist/utils/stringParseUtils.d.mts +0 -35
  464. package/dist/utils/stringParseUtils.d.mts.map +0 -1
  465. package/dist/utils/stringParseUtils.mjs +0 -44
  466. package/dist/utils/stringParseUtils.mjs.map +0 -1
  467. package/dist/utils/time.cjs +0 -37
  468. package/dist/utils/time.cjs.map +0 -1
  469. package/dist/utils/time.d.cts +0 -17
  470. package/dist/utils/time.d.cts.map +0 -1
  471. package/dist/utils/time.d.mts +0 -17
  472. package/dist/utils/time.d.mts.map +0 -1
  473. package/dist/utils/time.mjs +0 -33
  474. package/dist/utils/time.mjs.map +0 -1
  475. package/dist/utils/tpslValidation.cjs +0 -505
  476. package/dist/utils/tpslValidation.cjs.map +0 -1
  477. package/dist/utils/tpslValidation.d.cts +0 -182
  478. package/dist/utils/tpslValidation.d.cts.map +0 -1
  479. package/dist/utils/tpslValidation.d.mts +0 -182
  480. package/dist/utils/tpslValidation.d.mts.map +0 -1
  481. package/dist/utils/tpslValidation.mjs +0 -482
  482. package/dist/utils/tpslValidation.mjs.map +0 -1
  483. package/dist/utils/transactionUtils.cjs +0 -36
  484. package/dist/utils/transactionUtils.cjs.map +0 -1
  485. package/dist/utils/transactionUtils.d.cts +0 -17
  486. package/dist/utils/transactionUtils.d.cts.map +0 -1
  487. package/dist/utils/transactionUtils.d.mts +0 -17
  488. package/dist/utils/transactionUtils.d.mts.map +0 -1
  489. package/dist/utils/transactionUtils.mjs +0 -32
  490. package/dist/utils/transactionUtils.mjs.map +0 -1
  491. package/dist/utils/wait.cjs +0 -12
  492. package/dist/utils/wait.cjs.map +0 -1
  493. package/dist/utils/wait.d.cts +0 -8
  494. package/dist/utils/wait.d.cts.map +0 -1
  495. package/dist/utils/wait.d.mts +0 -8
  496. package/dist/utils/wait.d.mts.map +0 -1
  497. package/dist/utils/wait.mjs +0 -8
  498. package/dist/utils/wait.mjs.map +0 -1
@@ -1,258 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FeatureFlagConfigurationService = void 0;
4
- /* eslint-disable id-denylist, no-restricted-syntax, no-negated-condition */
5
- // TODO: Fix ESLint errors in this file - tracked for Phase 5 cleanup
6
- const utils_1 = require("@metamask/utils");
7
- const stringParseUtils_1 = require("../utils/stringParseUtils.cjs");
8
- /**
9
- * Check if a value is a valid version gated feature flag.
10
- *
11
- * @param flag - The value to check
12
- * @returns True if the value has a boolean 'value' property
13
- */
14
- function isVersionGatedFeatureFlag(flag) {
15
- return (typeof flag === 'object' &&
16
- flag !== null &&
17
- 'value' in flag &&
18
- typeof flag.value === 'boolean');
19
- }
20
- /**
21
- * Extract the boolean value from a version gated feature flag.
22
- *
23
- * @param flag - The version gated feature flag
24
- * @returns The boolean value or undefined if invalid
25
- */
26
- function validatedVersionGatedFeatureFlag(flag) {
27
- return flag.value;
28
- }
29
- /**
30
- * FeatureFlagConfigurationService
31
- *
32
- * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.
33
- * Implements "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
34
- * Orchestrates validation, change detection, and version management for feature flag updates.
35
- *
36
- * Responsibilities:
37
- * - Remote feature flag validation and parsing
38
- * - HIP-3 configuration management (equity, allowlist, blocklist)
39
- * - Geo-blocking configuration from remote flags
40
- * - Change detection and version management
41
- * - "Sticky remote" pattern enforcement (never downgrade)
42
- *
43
- * Instance-based service with constructor injection of platform dependencies.
44
- */
45
- class FeatureFlagConfigurationService {
46
- /**
47
- * Create a new FeatureFlagConfigurationService instance.
48
- *
49
- * @param deps - Platform dependencies for logging, metrics, etc.
50
- */
51
- constructor(deps) {
52
- this.deps = deps;
53
- }
54
- /**
55
- * Validate and parse market list from remote feature flags.
56
- * Handles both string (comma-separated) and array formats from LaunchDarkly.
57
- *
58
- * @param remoteValue - The raw value from remote feature flags
59
- * @param fieldName - The name of the field for logging
60
- * @param currentValue - The current value to use as fallback
61
- * @returns The validated market list or undefined if validation fails
62
- */
63
- validateMarketList(remoteValue, fieldName, currentValue) {
64
- this.deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validation`, {
65
- remoteValue,
66
- type: typeof remoteValue,
67
- isArray: Array.isArray(remoteValue),
68
- });
69
- // LaunchDarkly returns comma-separated strings for list values
70
- // Values may have literal quotes (e.g., '"xyz"') due to JSON encoding quirks
71
- if (typeof remoteValue === 'string') {
72
- const parsed = (0, stringParseUtils_1.parseCommaSeparatedString)(remoteValue).map(stringParseUtils_1.stripQuotes);
73
- if (parsed.length > 0) {
74
- this.deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validated from string`, { validatedMarkets: parsed });
75
- return parsed;
76
- }
77
- this.deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} string was empty after parsing`, { fallbackValue: currentValue });
78
- return undefined;
79
- }
80
- // Fallback: Validate array of non-empty strings
81
- if (Array.isArray(remoteValue) &&
82
- remoteValue.every((item) => typeof item === 'string' && item.length > 0)) {
83
- const validatedMarkets = remoteValue
84
- .map((market) => (0, stringParseUtils_1.stripQuotes)(market.trim()))
85
- .filter((market) => market.length > 0);
86
- this.deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validated from array`, { validatedMarkets });
87
- return validatedMarkets;
88
- }
89
- this.deps.debugLogger.log(`PerpsController: HIP-3 ${fieldName} validation FAILED - falling back to local config`, {
90
- reason: Array.isArray(remoteValue)
91
- ? 'Array contains non-string or empty values'
92
- : 'Invalid type (expected string or array)',
93
- fallbackValue: currentValue,
94
- });
95
- return undefined;
96
- }
97
- /**
98
- * Check if arrays have different values (order-independent comparison).
99
- *
100
- * @param a - First array
101
- * @param b - Second array
102
- * @returns True if arrays have different values
103
- */
104
- arraysHaveDifferentValues(a, b) {
105
- return (JSON.stringify([...a].sort((itemA, itemB) => itemA.localeCompare(itemB))) !==
106
- JSON.stringify([...b].sort((itemA, itemB) => itemA.localeCompare(itemB))));
107
- }
108
- /**
109
- * Refresh HIP-3 configuration when remote feature flags change.
110
- * This method extracts HIP-3 settings from remote flags, validates them,
111
- * and updates internal state if they differ from current values.
112
- * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.
113
- *
114
- * Follows the "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
115
- *
116
- * @param options - Configuration object
117
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
118
- * @param options.context - ServiceContext providing state access callbacks
119
- */
120
- refreshHip3Config(options) {
121
- const { remoteFeatureFlagControllerState, context } = options;
122
- if (!context.getHip3Config ||
123
- !context.setHip3Config ||
124
- !context.incrementHip3ConfigVersion) {
125
- throw new Error('Required HIP-3 callbacks not available in ServiceContext');
126
- }
127
- const remoteFlags = remoteFeatureFlagControllerState.remoteFeatureFlags;
128
- const currentConfig = context.getHip3Config();
129
- // Extract and validate remote HIP-3 equity enabled flag
130
- const equityFlag = remoteFlags?.perpsHip3Enabled;
131
- // Use type guard to validate before calling - validatedVersionGatedFeatureFlag also
132
- // handles invalid flags internally, but proper typing requires the guard
133
- const validatedEquity = isVersionGatedFeatureFlag(equityFlag)
134
- ? validatedVersionGatedFeatureFlag(equityFlag)
135
- : undefined;
136
- this.deps.debugLogger.log('PerpsController: HIP-3 equity flag validation', {
137
- equityFlag,
138
- validatedEquity,
139
- willUse: validatedEquity !== undefined ? 'remote' : 'fallback',
140
- });
141
- // Extract and validate remote HIP-3 market lists
142
- const validatedAllowlistMarkets = (0, utils_1.hasProperty)(remoteFlags, 'perpsHip3AllowlistMarkets')
143
- ? this.validateMarketList(remoteFlags.perpsHip3AllowlistMarkets, 'allowlistMarkets', currentConfig.allowlistMarkets)
144
- : undefined;
145
- const validatedBlocklistMarkets = (0, utils_1.hasProperty)(remoteFlags, 'perpsHip3BlocklistMarkets')
146
- ? this.validateMarketList(remoteFlags.perpsHip3BlocklistMarkets, 'blocklistMarkets', currentConfig.blocklistMarkets)
147
- : undefined;
148
- // Detect changes (only if we have valid remote values)
149
- const equityChanged = validatedEquity !== undefined &&
150
- validatedEquity !== currentConfig.enabled;
151
- const allowlistMarketsChanged = validatedAllowlistMarkets !== undefined &&
152
- this.arraysHaveDifferentValues(validatedAllowlistMarkets, currentConfig.allowlistMarkets);
153
- const blocklistMarketsChanged = validatedBlocklistMarkets !== undefined &&
154
- this.arraysHaveDifferentValues(validatedBlocklistMarkets, currentConfig.blocklistMarkets);
155
- if (equityChanged || allowlistMarketsChanged || blocklistMarketsChanged) {
156
- this.deps.debugLogger.log('PerpsController: HIP-3 config changed via remote feature flags', {
157
- equityChanged,
158
- allowlistMarketsChanged,
159
- blocklistMarketsChanged,
160
- oldEquity: currentConfig.enabled,
161
- newEquity: validatedEquity,
162
- oldAllowlistMarkets: currentConfig.allowlistMarkets,
163
- newAllowlistMarkets: validatedAllowlistMarkets,
164
- oldBlocklistMarkets: currentConfig.blocklistMarkets,
165
- newBlocklistMarkets: validatedBlocklistMarkets,
166
- source: 'remote',
167
- });
168
- // Update internal state (sticky remote - never downgrade)
169
- context.setHip3Config({
170
- enabled: validatedEquity,
171
- allowlistMarkets: validatedAllowlistMarkets
172
- ? [...validatedAllowlistMarkets]
173
- : undefined,
174
- blocklistMarkets: validatedBlocklistMarkets
175
- ? [...validatedBlocklistMarkets]
176
- : undefined,
177
- source: 'remote',
178
- });
179
- // Increment version to trigger ConnectionManager reconnection and cache clearing
180
- const newVersion = context.incrementHip3ConfigVersion();
181
- this.deps.debugLogger.log('PerpsController: Incremented hip3ConfigVersion to trigger reconnection', {
182
- newVersion,
183
- newHip3Enabled: validatedEquity ?? currentConfig.enabled,
184
- newHip3AllowlistMarkets: validatedAllowlistMarkets ?? currentConfig.allowlistMarkets,
185
- newHip3BlocklistMarkets: validatedBlocklistMarkets ?? currentConfig.blocklistMarkets,
186
- });
187
- // Note: ConnectionManager will handle:
188
- // 1. Detecting hip3ConfigVersion change via Redux monitoring
189
- // 2. Clearing all StreamManager caches
190
- // 3. Calling reconnectWithNewContext() -> initializeProviders()
191
- // 4. Provider reinitialization will read the new HIP-3 config below
192
- }
193
- }
194
- /**
195
- * Respond to RemoteFeatureFlagController state changes.
196
- * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.
197
- * Uses fallback configuration when remote feature flag is undefined.
198
- * Note: Initial eligibility is set in the constructor if fallback regions are provided.
199
- *
200
- * @param options - Configuration object
201
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
202
- * @param options.context - ServiceContext providing callbacks
203
- */
204
- refreshEligibility(options) {
205
- const { remoteFeatureFlagControllerState, context } = options;
206
- const perpsGeoBlockedRegionsFeatureFlag =
207
- // NOTE: Do not use perpsPerpTradingGeoBlockedCountries as it is deprecated.
208
- remoteFeatureFlagControllerState.remoteFeatureFlags
209
- ?.perpsPerpTradingGeoBlockedCountriesV2;
210
- const remoteBlockedRegions = perpsGeoBlockedRegionsFeatureFlag?.blockedRegions;
211
- if (Array.isArray(remoteBlockedRegions)) {
212
- this.setBlockedRegions({
213
- list: remoteBlockedRegions,
214
- source: 'remote',
215
- context,
216
- });
217
- }
218
- // Also check for HIP-3 config changes
219
- this.refreshHip3Config({ remoteFeatureFlagControllerState, context });
220
- }
221
- /**
222
- * Set blocked region list with "never downgrade" pattern enforcement.
223
- * Updates the blocked region list and triggers eligibility refresh.
224
- * Implements "sticky remote": once remote regions are set, never downgrade to fallback.
225
- *
226
- * @param options - Configuration object
227
- * @param options.list - Array of blocked region codes
228
- * @param options.source - Source of the list ('remote' or 'fallback')
229
- * @param options.context - ServiceContext providing callbacks
230
- */
231
- setBlockedRegions(options) {
232
- const { list, source, context } = options;
233
- if (!context.getBlockedRegionList ||
234
- !context.setBlockedRegionList ||
235
- !context.refreshEligibility) {
236
- throw new Error('Required blocked region callbacks not available in ServiceContext');
237
- }
238
- const currentList = context.getBlockedRegionList();
239
- // Never downgrade from remote to fallback
240
- if (source === 'fallback' && currentList.source === 'remote') {
241
- return;
242
- }
243
- if (Array.isArray(list)) {
244
- context.setBlockedRegionList(list, source);
245
- }
246
- context.refreshEligibility().catch((err) => {
247
- const error = err instanceof Error ? err : new Error(String(err));
248
- this.deps.logger.error(error, {
249
- context: {
250
- name: 'FeatureFlagConfigurationService.setBlockedRegions',
251
- data: { source },
252
- },
253
- });
254
- });
255
- }
256
- }
257
- exports.FeatureFlagConfigurationService = FeatureFlagConfigurationService;
258
- //# sourceMappingURL=FeatureFlagConfigurationService.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FeatureFlagConfigurationService.cjs","sourceRoot":"","sources":["../../src/services/FeatureFlagConfigurationService.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,qEAAqE;AACrE,2CAA8C;AAI9C,oEAGmC;AAkBnC;;;;;GAKG;AACH,SAAS,yBAAyB,CAChC,IAAa;IAEb,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,IAAI;QACf,OAAQ,IAAgC,CAAC,KAAK,KAAK,SAAS,CAC7D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,gCAAgC,CACvC,IAA6B;IAE7B,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAa,+BAA+B;IAG1C;;;;OAIG;IACH,YAAY,IAA+B;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;;;;OAQG;IACK,kBAAkB,CACxB,WAAoB,EACpB,SAAiB,EACjB,YAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,0BAA0B,SAAS,aAAa,EAChD;YACE,WAAW;YACX,IAAI,EAAE,OAAO,WAAW;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;SACpC,CACF,CAAC;QAEF,+DAA+D;QAC/D,6EAA6E;QAC7E,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAA,4CAAyB,EAAC,WAAW,CAAC,CAAC,GAAG,CAAC,8BAAW,CAAC,CAAC;YAEvE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,0BAA0B,SAAS,wBAAwB,EAC3D,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAC7B,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,0BAA0B,SAAS,iCAAiC,EACpE,EAAE,aAAa,EAAE,YAAY,EAAE,CAChC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,gDAAgD;QAChD,IACE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC1B,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EACxE,CAAC;YACD,MAAM,gBAAgB,GAAI,WAAwB;iBAC/C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,8BAAW,EAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,0BAA0B,SAAS,uBAAuB,EAC1D,EAAE,gBAAgB,EAAE,CACrB,CAAC;YACF,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,0BAA0B,SAAS,mDAAmD,EACtF;YACE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAChC,CAAC,CAAC,2CAA2C;gBAC7C,CAAC,CAAC,yCAAyC;YAC7C,aAAa,EAAE,YAAY;SAC5B,CACF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACK,yBAAyB,CAAC,CAAW,EAAE,CAAW;QACxD,OAAO,CACL,IAAI,CAAC,SAAS,CACZ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAC1D;YACD,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,OAGjB;QACC,MAAM,EAAE,gCAAgC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE9D,IACE,CAAC,OAAO,CAAC,aAAa;YACtB,CAAC,OAAO,CAAC,aAAa;YACtB,CAAC,OAAO,CAAC,0BAA0B,EACnC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,gCAAgC,CAAC,kBAAkB,CAAC;QACxE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE9C,wDAAwD;QACxD,MAAM,UAAU,GAAG,WAAW,EAAE,gBAAgB,CAAC;QACjD,oFAAoF;QACpF,yEAAyE;QACzE,MAAM,eAAe,GAAG,yBAAyB,CAAC,UAAU,CAAC;YAC3D,CAAC,CAAC,gCAAgC,CAAC,UAAU,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,+CAA+C,EAAE;YACzE,UAAU;YACV,eAAe;YACf,OAAO,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;SAC/D,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,yBAAyB,GAAG,IAAA,mBAAW,EAC3C,WAAW,EACX,2BAA2B,CAC5B;YACC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CACrB,WAAW,CAAC,yBAAyB,EACrC,kBAAkB,EAClB,aAAa,CAAC,gBAAgB,CAC/B;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,yBAAyB,GAAG,IAAA,mBAAW,EAC3C,WAAW,EACX,2BAA2B,CAC5B;YACC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CACrB,WAAW,CAAC,yBAAyB,EACrC,kBAAkB,EAClB,aAAa,CAAC,gBAAgB,CAC/B;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,uDAAuD;QACvD,MAAM,aAAa,GACjB,eAAe,KAAK,SAAS;YAC7B,eAAe,KAAK,aAAa,CAAC,OAAO,CAAC;QAC5C,MAAM,uBAAuB,GAC3B,yBAAyB,KAAK,SAAS;YACvC,IAAI,CAAC,yBAAyB,CAC5B,yBAAyB,EACzB,aAAa,CAAC,gBAAgB,CAC/B,CAAC;QACJ,MAAM,uBAAuB,GAC3B,yBAAyB,KAAK,SAAS;YACvC,IAAI,CAAC,yBAAyB,CAC5B,yBAAyB,EACzB,aAAa,CAAC,gBAAgB,CAC/B,CAAC;QAEJ,IAAI,aAAa,IAAI,uBAAuB,IAAI,uBAAuB,EAAE,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,gEAAgE,EAChE;gBACE,aAAa;gBACb,uBAAuB;gBACvB,uBAAuB;gBACvB,SAAS,EAAE,aAAa,CAAC,OAAO;gBAChC,SAAS,EAAE,eAAe;gBAC1B,mBAAmB,EAAE,aAAa,CAAC,gBAAgB;gBACnD,mBAAmB,EAAE,yBAAyB;gBAC9C,mBAAmB,EAAE,aAAa,CAAC,gBAAgB;gBACnD,mBAAmB,EAAE,yBAAyB;gBAC9C,MAAM,EAAE,QAAQ;aACjB,CACF,CAAC;YAEF,0DAA0D;YAC1D,OAAO,CAAC,aAAa,CAAC;gBACpB,OAAO,EAAE,eAAe;gBACxB,gBAAgB,EAAE,yBAAyB;oBACzC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;oBAChC,CAAC,CAAC,SAAS;gBACb,gBAAgB,EAAE,yBAAyB;oBACzC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;oBAChC,CAAC,CAAC,SAAS;gBACb,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,iFAAiF;YACjF,MAAM,UAAU,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;YAExD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CACvB,wEAAwE,EACxE;gBACE,UAAU;gBACV,cAAc,EAAE,eAAe,IAAI,aAAa,CAAC,OAAO;gBACxD,uBAAuB,EACrB,yBAAyB,IAAI,aAAa,CAAC,gBAAgB;gBAC7D,uBAAuB,EACrB,yBAAyB,IAAI,aAAa,CAAC,gBAAgB;aAC9D,CACF,CAAC;YAEF,uCAAuC;YACvC,6DAA6D;YAC7D,uCAAuC;YACvC,gEAAgE;YAChE,oEAAoE;QACtE,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAGlB;QACC,MAAM,EAAE,gCAAgC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE9D,MAAM,iCAAiC;QACrC,4EAA4E;QAC5E,gCAAgC,CAAC,kBAAkB;YACjD,EAAE,qCAAqC,CAAC;QAE5C,MAAM,oBAAoB,GACxB,iCACD,EAAE,cAAc,CAAC;QAElB,IAAI,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,iBAAiB,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,QAAQ;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,iBAAiB,CAAC,EAAE,gCAAgC,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAIjB;QACC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE1C,IACE,CAAC,OAAO,CAAC,oBAAoB;YAC7B,CAAC,OAAO,CAAC,oBAAoB;YAC7B,CAAC,OAAO,CAAC,kBAAkB,EAC3B,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAEnD,0CAA0C;QAC1C,IAAI,MAAM,KAAK,UAAU,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC5B,OAAO,EAAE;oBACP,IAAI,EAAE,mDAAmD;oBACzD,IAAI,EAAE,EAAE,MAAM,EAAE;iBACjB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAjUD,0EAiUC","sourcesContent":["/* eslint-disable id-denylist, no-restricted-syntax, no-negated-condition */\n// TODO: Fix ESLint errors in this file - tracked for Phase 5 cleanup\nimport { hasProperty } from '@metamask/utils';\n\nimport type { ServiceContext } from './ServiceContext';\nimport type { PerpsPlatformDependencies } from '../types';\nimport {\n parseCommaSeparatedString,\n stripQuotes,\n} from '../utils/stringParseUtils';\n\n/**\n * Remote feature flags state shape for perps-related flags.\n * This is a minimal type definition to avoid direct dependency on\n * RemoteFeatureFlagController which can cause build issues.\n */\ntype RemoteFeatureFlagState = {\n remoteFeatureFlags: Record<string, unknown>;\n};\n\n/**\n * Version gated feature flag structure for validating remote flags.\n */\ntype VersionGatedFeatureFlag = {\n value?: boolean;\n};\n\n/**\n * Check if a value is a valid version gated feature flag.\n *\n * @param flag - The value to check\n * @returns True if the value has a boolean 'value' property\n */\nfunction isVersionGatedFeatureFlag(\n flag: unknown,\n): flag is VersionGatedFeatureFlag {\n return (\n typeof flag === 'object' &&\n flag !== null &&\n 'value' in flag &&\n typeof (flag as VersionGatedFeatureFlag).value === 'boolean'\n );\n}\n\n/**\n * Extract the boolean value from a version gated feature flag.\n *\n * @param flag - The version gated feature flag\n * @returns The boolean value or undefined if invalid\n */\nfunction validatedVersionGatedFeatureFlag(\n flag: VersionGatedFeatureFlag,\n): boolean | undefined {\n return flag.value;\n}\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 private 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\n * @param fieldName - The name of the field for logging\n * @param currentValue - The current value to use as fallback\n * @returns The validated market list or undefined if validation fails\n */\n private 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 = parseCommaSeparatedString(remoteValue).map(stripQuotes);\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 = (remoteValue as string[])\n .map((market) => stripQuotes(market.trim()))\n .filter((market) => market.length > 0);\n\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} 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 * Check if arrays have different values (order-independent comparison).\n *\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays have different values\n */\n private 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 - State from RemoteFeatureFlagController\n * @param options.context - ServiceContext providing state access callbacks\n */\n refreshHip3Config(options: {\n remoteFeatureFlagControllerState: RemoteFeatureFlagState;\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 ? validatedVersionGatedFeatureFlag(equityFlag)\n : undefined;\n\n this.deps.debugLogger.log('PerpsController: HIP-3 equity flag validation', {\n equityFlag,\n validatedEquity,\n willUse: validatedEquity !== undefined ? 'remote' : 'fallback',\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 - State from RemoteFeatureFlagController\n * @param options.context - ServiceContext providing callbacks\n */\n refreshEligibility(options: {\n remoteFeatureFlagControllerState: RemoteFeatureFlagState;\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((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n this.deps.logger.error(error, {\n context: {\n name: 'FeatureFlagConfigurationService.setBlockedRegions',\n data: { source },\n },\n });\n });\n }\n}\n"]}
@@ -1,100 +0,0 @@
1
- import type { ServiceContext } from "./ServiceContext.cjs";
2
- import type { PerpsPlatformDependencies } from "../types/index.cjs";
3
- /**
4
- * Remote feature flags state shape for perps-related flags.
5
- * This is a minimal type definition to avoid direct dependency on
6
- * RemoteFeatureFlagController which can cause build issues.
7
- */
8
- type RemoteFeatureFlagState = {
9
- remoteFeatureFlags: Record<string, unknown>;
10
- };
11
- /**
12
- * FeatureFlagConfigurationService
13
- *
14
- * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.
15
- * Implements "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
16
- * Orchestrates validation, change detection, and version management for feature flag updates.
17
- *
18
- * Responsibilities:
19
- * - Remote feature flag validation and parsing
20
- * - HIP-3 configuration management (equity, allowlist, blocklist)
21
- * - Geo-blocking configuration from remote flags
22
- * - Change detection and version management
23
- * - "Sticky remote" pattern enforcement (never downgrade)
24
- *
25
- * Instance-based service with constructor injection of platform dependencies.
26
- */
27
- export declare class FeatureFlagConfigurationService {
28
- private readonly deps;
29
- /**
30
- * Create a new FeatureFlagConfigurationService instance.
31
- *
32
- * @param deps - Platform dependencies for logging, metrics, etc.
33
- */
34
- constructor(deps: PerpsPlatformDependencies);
35
- /**
36
- * Validate and parse market list from remote feature flags.
37
- * Handles both string (comma-separated) and array formats from LaunchDarkly.
38
- *
39
- * @param remoteValue - The raw value from remote feature flags
40
- * @param fieldName - The name of the field for logging
41
- * @param currentValue - The current value to use as fallback
42
- * @returns The validated market list or undefined if validation fails
43
- */
44
- private validateMarketList;
45
- /**
46
- * Check if arrays have different values (order-independent comparison).
47
- *
48
- * @param a - First array
49
- * @param b - Second array
50
- * @returns True if arrays have different values
51
- */
52
- private arraysHaveDifferentValues;
53
- /**
54
- * Refresh HIP-3 configuration when remote feature flags change.
55
- * This method extracts HIP-3 settings from remote flags, validates them,
56
- * and updates internal state if they differ from current values.
57
- * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.
58
- *
59
- * Follows the "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
60
- *
61
- * @param options - Configuration object
62
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
63
- * @param options.context - ServiceContext providing state access callbacks
64
- */
65
- refreshHip3Config(options: {
66
- remoteFeatureFlagControllerState: RemoteFeatureFlagState;
67
- context: ServiceContext;
68
- }): void;
69
- /**
70
- * Respond to RemoteFeatureFlagController state changes.
71
- * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.
72
- * Uses fallback configuration when remote feature flag is undefined.
73
- * Note: Initial eligibility is set in the constructor if fallback regions are provided.
74
- *
75
- * @param options - Configuration object
76
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
77
- * @param options.context - ServiceContext providing callbacks
78
- */
79
- refreshEligibility(options: {
80
- remoteFeatureFlagControllerState: RemoteFeatureFlagState;
81
- context: ServiceContext;
82
- }): void;
83
- /**
84
- * Set blocked region list with "never downgrade" pattern enforcement.
85
- * Updates the blocked region list and triggers eligibility refresh.
86
- * Implements "sticky remote": once remote regions are set, never downgrade to fallback.
87
- *
88
- * @param options - Configuration object
89
- * @param options.list - Array of blocked region codes
90
- * @param options.source - Source of the list ('remote' or 'fallback')
91
- * @param options.context - ServiceContext providing callbacks
92
- */
93
- setBlockedRegions(options: {
94
- list: string[];
95
- source: 'remote' | 'fallback';
96
- context: ServiceContext;
97
- }): void;
98
- }
99
- export {};
100
- //# sourceMappingURL=FeatureFlagConfigurationService.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FeatureFlagConfigurationService.d.cts","sourceRoot":"","sources":["../../src/services/FeatureFlagConfigurationService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,6BAAyB;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAiB;AAM1D;;;;GAIG;AACH,KAAK,sBAAsB,GAAG;IAC5B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C,CAAC;AAsCF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IAEjD;;;;OAIG;gBACS,IAAI,EAAE,yBAAyB;IAI3C;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA8D1B;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IASjC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,gCAAgC,EAAE,sBAAsB,CAAC;QACzD,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI;IA0HR;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,gCAAgC,EAAE,sBAAsB,CAAC;QACzD,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI;IAwBR;;;;;;;;;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;CAkCT"}
@@ -1,100 +0,0 @@
1
- import type { ServiceContext } from "./ServiceContext.mjs";
2
- import type { PerpsPlatformDependencies } from "../types/index.mjs";
3
- /**
4
- * Remote feature flags state shape for perps-related flags.
5
- * This is a minimal type definition to avoid direct dependency on
6
- * RemoteFeatureFlagController which can cause build issues.
7
- */
8
- type RemoteFeatureFlagState = {
9
- remoteFeatureFlags: Record<string, unknown>;
10
- };
11
- /**
12
- * FeatureFlagConfigurationService
13
- *
14
- * Handles HIP-3 configuration and geo-blocking configuration from remote feature flags.
15
- * Implements "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
16
- * Orchestrates validation, change detection, and version management for feature flag updates.
17
- *
18
- * Responsibilities:
19
- * - Remote feature flag validation and parsing
20
- * - HIP-3 configuration management (equity, allowlist, blocklist)
21
- * - Geo-blocking configuration from remote flags
22
- * - Change detection and version management
23
- * - "Sticky remote" pattern enforcement (never downgrade)
24
- *
25
- * Instance-based service with constructor injection of platform dependencies.
26
- */
27
- export declare class FeatureFlagConfigurationService {
28
- private readonly deps;
29
- /**
30
- * Create a new FeatureFlagConfigurationService instance.
31
- *
32
- * @param deps - Platform dependencies for logging, metrics, etc.
33
- */
34
- constructor(deps: PerpsPlatformDependencies);
35
- /**
36
- * Validate and parse market list from remote feature flags.
37
- * Handles both string (comma-separated) and array formats from LaunchDarkly.
38
- *
39
- * @param remoteValue - The raw value from remote feature flags
40
- * @param fieldName - The name of the field for logging
41
- * @param currentValue - The current value to use as fallback
42
- * @returns The validated market list or undefined if validation fails
43
- */
44
- private validateMarketList;
45
- /**
46
- * Check if arrays have different values (order-independent comparison).
47
- *
48
- * @param a - First array
49
- * @param b - Second array
50
- * @returns True if arrays have different values
51
- */
52
- private arraysHaveDifferentValues;
53
- /**
54
- * Refresh HIP-3 configuration when remote feature flags change.
55
- * This method extracts HIP-3 settings from remote flags, validates them,
56
- * and updates internal state if they differ from current values.
57
- * When config changes, increments hip3ConfigVersion to trigger ConnectionManager reconnection.
58
- *
59
- * Follows the "sticky remote" pattern: once remote config is loaded, never downgrade to fallback.
60
- *
61
- * @param options - Configuration object
62
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
63
- * @param options.context - ServiceContext providing state access callbacks
64
- */
65
- refreshHip3Config(options: {
66
- remoteFeatureFlagControllerState: RemoteFeatureFlagState;
67
- context: ServiceContext;
68
- }): void;
69
- /**
70
- * Respond to RemoteFeatureFlagController state changes.
71
- * Refreshes user eligibility based on geo-blocked regions defined in remote feature flag.
72
- * Uses fallback configuration when remote feature flag is undefined.
73
- * Note: Initial eligibility is set in the constructor if fallback regions are provided.
74
- *
75
- * @param options - Configuration object
76
- * @param options.remoteFeatureFlagControllerState - State from RemoteFeatureFlagController
77
- * @param options.context - ServiceContext providing callbacks
78
- */
79
- refreshEligibility(options: {
80
- remoteFeatureFlagControllerState: RemoteFeatureFlagState;
81
- context: ServiceContext;
82
- }): void;
83
- /**
84
- * Set blocked region list with "never downgrade" pattern enforcement.
85
- * Updates the blocked region list and triggers eligibility refresh.
86
- * Implements "sticky remote": once remote regions are set, never downgrade to fallback.
87
- *
88
- * @param options - Configuration object
89
- * @param options.list - Array of blocked region codes
90
- * @param options.source - Source of the list ('remote' or 'fallback')
91
- * @param options.context - ServiceContext providing callbacks
92
- */
93
- setBlockedRegions(options: {
94
- list: string[];
95
- source: 'remote' | 'fallback';
96
- context: ServiceContext;
97
- }): void;
98
- }
99
- export {};
100
- //# sourceMappingURL=FeatureFlagConfigurationService.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FeatureFlagConfigurationService.d.mts","sourceRoot":"","sources":["../../src/services/FeatureFlagConfigurationService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,6BAAyB;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAiB;AAM1D;;;;GAIG;AACH,KAAK,sBAAsB,GAAG;IAC5B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C,CAAC;AAsCF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IAEjD;;;;OAIG;gBACS,IAAI,EAAE,yBAAyB;IAI3C;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA8D1B;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IASjC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,gCAAgC,EAAE,sBAAsB,CAAC;QACzD,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI;IA0HR;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,gCAAgC,EAAE,sBAAsB,CAAC;QACzD,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,IAAI;IAwBR;;;;;;;;;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;CAkCT"}