@metamask-previews/perps-controller 9.0.0-preview-e82188855 → 9.0.0-preview-ea5e7f6d0

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 (102) hide show
  1. package/CHANGELOG.md +0 -34
  2. package/dist/PerpsController-method-action-types.cjs.map +1 -1
  3. package/dist/PerpsController-method-action-types.d.cts +1 -54
  4. package/dist/PerpsController-method-action-types.d.cts.map +1 -1
  5. package/dist/PerpsController-method-action-types.d.mts +1 -54
  6. package/dist/PerpsController-method-action-types.d.mts.map +1 -1
  7. package/dist/PerpsController-method-action-types.mjs.map +1 -1
  8. package/dist/PerpsController.cjs +8 -115
  9. package/dist/PerpsController.cjs.map +1 -1
  10. package/dist/PerpsController.d.cts +1 -59
  11. package/dist/PerpsController.d.cts.map +1 -1
  12. package/dist/PerpsController.d.mts +1 -59
  13. package/dist/PerpsController.d.mts.map +1 -1
  14. package/dist/PerpsController.mjs +8 -115
  15. package/dist/PerpsController.mjs.map +1 -1
  16. package/dist/constants/eventNames.cjs +0 -72
  17. package/dist/constants/eventNames.cjs.map +1 -1
  18. package/dist/constants/eventNames.d.cts +0 -54
  19. package/dist/constants/eventNames.d.cts.map +1 -1
  20. package/dist/constants/eventNames.d.mts +0 -54
  21. package/dist/constants/eventNames.d.mts.map +1 -1
  22. package/dist/constants/eventNames.mjs +0 -72
  23. package/dist/constants/eventNames.mjs.map +1 -1
  24. package/dist/constants/perpsConfig.cjs +0 -3
  25. package/dist/constants/perpsConfig.cjs.map +1 -1
  26. package/dist/constants/perpsConfig.d.cts +0 -2
  27. package/dist/constants/perpsConfig.d.cts.map +1 -1
  28. package/dist/constants/perpsConfig.d.mts +0 -2
  29. package/dist/constants/perpsConfig.d.mts.map +1 -1
  30. package/dist/constants/perpsConfig.mjs +0 -3
  31. package/dist/constants/perpsConfig.mjs.map +1 -1
  32. package/dist/index.cjs +1 -2
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +3 -3
  35. package/dist/index.d.cts.map +1 -1
  36. package/dist/index.d.mts +3 -3
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +1 -1
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/providers/HyperLiquidProvider.cjs +2 -1
  41. package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
  42. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
  43. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
  44. package/dist/providers/HyperLiquidProvider.mjs +2 -1
  45. package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
  46. package/dist/selectors.cjs +1 -21
  47. package/dist/selectors.cjs.map +1 -1
  48. package/dist/selectors.d.cts +0 -11
  49. package/dist/selectors.d.cts.map +1 -1
  50. package/dist/selectors.d.mts +0 -11
  51. package/dist/selectors.d.mts.map +1 -1
  52. package/dist/selectors.mjs +1 -20
  53. package/dist/selectors.mjs.map +1 -1
  54. package/dist/services/HyperLiquidClientService.cjs +8 -5
  55. package/dist/services/HyperLiquidClientService.cjs.map +1 -1
  56. package/dist/services/HyperLiquidClientService.d.cts.map +1 -1
  57. package/dist/services/HyperLiquidClientService.d.mts.map +1 -1
  58. package/dist/services/HyperLiquidClientService.mjs +7 -4
  59. package/dist/services/HyperLiquidClientService.mjs.map +1 -1
  60. package/dist/services/HyperLiquidSubscriptionService.cjs +33 -101
  61. package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
  62. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
  63. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
  64. package/dist/services/HyperLiquidSubscriptionService.mjs +33 -101
  65. package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
  66. package/dist/services/MarketDataService.cjs +0 -1
  67. package/dist/services/MarketDataService.cjs.map +1 -1
  68. package/dist/services/MarketDataService.d.cts.map +1 -1
  69. package/dist/services/MarketDataService.d.mts.map +1 -1
  70. package/dist/services/MarketDataService.mjs +0 -1
  71. package/dist/services/MarketDataService.mjs.map +1 -1
  72. package/dist/services/TerminalMarketService.cjs +0 -9
  73. package/dist/services/TerminalMarketService.cjs.map +1 -1
  74. package/dist/services/TerminalMarketService.d.cts.map +1 -1
  75. package/dist/services/TerminalMarketService.d.mts.map +1 -1
  76. package/dist/services/TerminalMarketService.mjs +1 -10
  77. package/dist/services/TerminalMarketService.mjs.map +1 -1
  78. package/dist/services/TradingService.cjs +7 -154
  79. package/dist/services/TradingService.cjs.map +1 -1
  80. package/dist/services/TradingService.d.cts +0 -4
  81. package/dist/services/TradingService.d.cts.map +1 -1
  82. package/dist/services/TradingService.d.mts +0 -4
  83. package/dist/services/TradingService.d.mts.map +1 -1
  84. package/dist/services/TradingService.mjs +7 -154
  85. package/dist/services/TradingService.mjs.map +1 -1
  86. package/dist/types/index.cjs +0 -7
  87. package/dist/types/index.cjs.map +1 -1
  88. package/dist/types/index.d.cts +1 -51
  89. package/dist/types/index.d.cts.map +1 -1
  90. package/dist/types/index.d.mts +1 -51
  91. package/dist/types/index.d.mts.map +1 -1
  92. package/dist/types/index.mjs +0 -7
  93. package/dist/types/index.mjs.map +1 -1
  94. package/dist/utils/hyperLiquidAdapter.cjs +4 -3
  95. package/dist/utils/hyperLiquidAdapter.cjs.map +1 -1
  96. package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -1
  97. package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -1
  98. package/dist/utils/hyperLiquidAdapter.mjs +4 -3
  99. package/dist/utils/hyperLiquidAdapter.mjs.map +1 -1
  100. package/dist/utils/standaloneInfoClient.cjs +1 -1
  101. package/dist/utils/standaloneInfoClient.cjs.map +1 -1
  102. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectOrderBookGrouping = exports.selectMarketFilterPreferences = exports.selectPendingTradeConfiguration = exports.selectTradeConfiguration = exports.selectRecentlyViewedMarkets = exports.selectIsWatchlistMarket = exports.selectWatchlistMarkets = exports.selectHasPlacedFirstOrder = exports.selectIsFirstTimeUser = void 0;
3
+ exports.selectOrderBookGrouping = exports.selectMarketFilterPreferences = exports.selectPendingTradeConfiguration = exports.selectTradeConfiguration = exports.selectIsWatchlistMarket = exports.selectWatchlistMarkets = exports.selectHasPlacedFirstOrder = exports.selectIsFirstTimeUser = void 0;
4
4
  const reselect_1 = require("reselect");
5
5
  const perpsConfig_1 = require("./constants/perpsConfig.cjs");
6
6
  /**
@@ -54,26 +54,6 @@ const selectIsWatchlistMarket = (state, symbol) => {
54
54
  return watchlist.includes(symbol);
55
55
  };
56
56
  exports.selectIsWatchlistMarket = selectIsWatchlistMarket;
57
- /**
58
- * Select recently viewed markets for the current network.
59
- *
60
- * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered
61
- * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs
62
- * (24 hours). Returns an empty array when no qualifying entries exist.
63
- *
64
- * @param state - PerpsController state
65
- * @returns Ordered array of recently viewed market symbols
66
- */
67
- const selectRecentlyViewedMarkets = (state) => {
68
- const network = state?.isTestnet ? 'testnet' : 'mainnet';
69
- const entries = state?.recentlyViewedMarkets?.[network] ?? [];
70
- const cutoff = Date.now() - perpsConfig_1.PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs;
71
- return entries
72
- .filter((entry) => entry.viewedAt > cutoff)
73
- .map((entry) => entry.symbol)
74
- .slice(0, perpsConfig_1.PERPS_CONSTANTS.RecentlyViewedMarketsLimit);
75
- };
76
- exports.selectRecentlyViewedMarkets = selectRecentlyViewedMarkets;
77
57
  /**
78
58
  * Select trade configuration for a specific market on the current network.
79
59
  * Uses memoization to return stable object references and prevent unnecessary re-renders.
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.cjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSelector } from 'reselect';\n\nimport {\n MARKET_SORTING_CONFIG,\n PERPS_CONSTANTS,\n SortOptionId,\n} from './constants/perpsConfig';\nimport type { PerpsControllerState } from './PerpsController';\nimport type { PerpsSelectedPaymentToken, SortDirection } from './types';\n\n/**\n * Select whether the user is a first-time perps user\n *\n * @param state - PerpsController state\n * @returns true if user is first-time, false otherwise\n */\nexport const selectIsFirstTimeUser = (\n state: PerpsControllerState | undefined,\n): boolean => {\n if (state?.isTestnet) {\n return state?.isFirstTimeUser?.testnet ?? true;\n }\n return state?.isFirstTimeUser?.mainnet ?? true;\n};\n\n/**\n * Select whether user has ever placed their first successful order\n *\n * @param state - PerpsController state\n * @returns boolean indicating if first order was placed\n */\nexport const selectHasPlacedFirstOrder = (\n state: PerpsControllerState,\n): boolean => {\n if (state?.isTestnet) {\n return state?.hasPlacedFirstOrder?.testnet ?? false;\n }\n return state?.hasPlacedFirstOrder?.mainnet ?? false;\n};\n\n/**\n * Select watchlist markets for the current network\n *\n * @param state - PerpsController state\n * @returns Array of watchlist market symbols for current network\n */\nexport const selectWatchlistMarkets = (\n state: PerpsControllerState,\n): string[] => {\n if (state?.isTestnet) {\n return state?.watchlistMarkets?.testnet ?? [];\n }\n return state?.watchlistMarkets?.mainnet ?? [];\n};\n\n/**\n * Check if a specific market is in the watchlist on the current network\n *\n * @param state - PerpsController state\n * @param symbol - Market symbol to check (e.g., 'BTC', 'ETH')\n * @returns boolean indicating if market is in watchlist\n */\nexport const selectIsWatchlistMarket = (\n state: PerpsControllerState,\n symbol: string,\n): boolean => {\n const watchlist = selectWatchlistMarkets(state);\n return watchlist.includes(symbol);\n};\n\n/**\n * Select recently viewed markets for the current network.\n *\n * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered\n * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs\n * (24 hours). Returns an empty array when no qualifying entries exist.\n *\n * @param state - PerpsController state\n * @returns Ordered array of recently viewed market symbols\n */\nexport const selectRecentlyViewedMarkets = (\n state: PerpsControllerState,\n): string[] => {\n const network = state?.isTestnet ? 'testnet' : 'mainnet';\n const entries = state?.recentlyViewedMarkets?.[network] ?? [];\n const cutoff = Date.now() - PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs;\n\n return entries\n .filter((entry) => entry.viewedAt > cutoff)\n .map((entry) => entry.symbol)\n .slice(0, PERPS_CONSTANTS.RecentlyViewedMarketsLimit);\n};\n\n/**\n * Select trade configuration for a specific market on the current network.\n * Uses memoization to return stable object references and prevent unnecessary re-renders.\n *\n * Usage: selectTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The trade configuration for the specified market, or undefined.\n */\n\nexport const selectTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): { leverage?: number } | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin];\n\n if (!config?.leverage) {\n return undefined;\n }\n\n return { leverage: config.leverage };\n },\n);\n\n/**\n * Select pending trade configuration for a specific market on the current network.\n * Returns undefined if config doesn't exist or has expired (more than 5 minutes old).\n *\n * Usage: selectPendingTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The pending trade configuration, or undefined if expired or not found.\n */\n\nexport const selectPendingTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (\n isTestnet,\n configs,\n coin,\n ):\n | {\n amount?: string;\n leverage?: number;\n takeProfitPrice?: string;\n stopLossPrice?: string;\n limitPrice?: string;\n orderType?: 'market' | 'limit';\n selectedPaymentToken?: PerpsSelectedPaymentToken | null;\n }\n | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin]?.pendingConfig;\n\n if (!config) {\n return undefined;\n }\n\n // Check if config has expired (5 minutes = 300,000 milliseconds)\n const now = Date.now();\n const FIVE_MINUTES_MS = 5 * 60 * 1000;\n const age = now - config.timestamp;\n\n if (age > FIVE_MINUTES_MS) {\n // Config expired, return undefined\n return undefined;\n }\n\n // Return config without timestamp\n const { timestamp, ...configWithoutTimestamp } = config;\n return configWithoutTimestamp;\n },\n);\n\n/**\n * Select market filter preferences (network-independent)\n *\n * @param state - PerpsController state\n * @returns Sort/filter preferences object with optionId and direction\n */\nexport const selectMarketFilterPreferences = (\n state: PerpsControllerState,\n): { optionId: SortOptionId; direction: SortDirection } => {\n const pref = state?.marketFilterPreferences;\n\n // Handle legacy string format (backward compatibility)\n if (typeof pref === 'string') {\n // Map legacy compound IDs to new format\n // Old format: 'priceChange-desc' or 'priceChange-asc'\n // New format: { optionId: 'priceChange', direction: 'desc'/'asc' }\n if (pref === 'priceChange-desc') {\n return {\n optionId: 'priceChange',\n direction: 'desc',\n };\n }\n if (pref === 'priceChange-asc') {\n return {\n optionId: 'priceChange',\n direction: 'asc',\n };\n }\n\n // Handle other simple legacy strings (e.g., 'volume', 'openInterest', etc.)\n return {\n optionId: pref as SortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n };\n }\n\n // Return new object format or default\n return (\n pref ?? {\n optionId: MARKET_SORTING_CONFIG.DefaultSortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n }\n );\n};\n\n/**\n * Select order book grouping for a specific market on the current network.\n *\n * Usage: selectOrderBookGrouping(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The order book grouping value, or undefined.\n */\n\nexport const selectOrderBookGrouping = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): number | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n return configs?.[network]?.[coin]?.orderBookGrouping;\n },\n);\n"]}
1
+ {"version":3,"file":"selectors.cjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSelector } from 'reselect';\n\nimport { MARKET_SORTING_CONFIG, SortOptionId } from './constants/perpsConfig';\nimport type { PerpsControllerState } from './PerpsController';\nimport type { PerpsSelectedPaymentToken, SortDirection } from './types';\n\n/**\n * Select whether the user is a first-time perps user\n *\n * @param state - PerpsController state\n * @returns true if user is first-time, false otherwise\n */\nexport const selectIsFirstTimeUser = (\n state: PerpsControllerState | undefined,\n): boolean => {\n if (state?.isTestnet) {\n return state?.isFirstTimeUser?.testnet ?? true;\n }\n return state?.isFirstTimeUser?.mainnet ?? true;\n};\n\n/**\n * Select whether user has ever placed their first successful order\n *\n * @param state - PerpsController state\n * @returns boolean indicating if first order was placed\n */\nexport const selectHasPlacedFirstOrder = (\n state: PerpsControllerState,\n): boolean => {\n if (state?.isTestnet) {\n return state?.hasPlacedFirstOrder?.testnet ?? false;\n }\n return state?.hasPlacedFirstOrder?.mainnet ?? false;\n};\n\n/**\n * Select watchlist markets for the current network\n *\n * @param state - PerpsController state\n * @returns Array of watchlist market symbols for current network\n */\nexport const selectWatchlistMarkets = (\n state: PerpsControllerState,\n): string[] => {\n if (state?.isTestnet) {\n return state?.watchlistMarkets?.testnet ?? [];\n }\n return state?.watchlistMarkets?.mainnet ?? [];\n};\n\n/**\n * Check if a specific market is in the watchlist on the current network\n *\n * @param state - PerpsController state\n * @param symbol - Market symbol to check (e.g., 'BTC', 'ETH')\n * @returns boolean indicating if market is in watchlist\n */\nexport const selectIsWatchlistMarket = (\n state: PerpsControllerState,\n symbol: string,\n): boolean => {\n const watchlist = selectWatchlistMarkets(state);\n return watchlist.includes(symbol);\n};\n\n/**\n * Select trade configuration for a specific market on the current network.\n * Uses memoization to return stable object references and prevent unnecessary re-renders.\n *\n * Usage: selectTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The trade configuration for the specified market, or undefined.\n */\n\nexport const selectTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): { leverage?: number } | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin];\n\n if (!config?.leverage) {\n return undefined;\n }\n\n return { leverage: config.leverage };\n },\n);\n\n/**\n * Select pending trade configuration for a specific market on the current network.\n * Returns undefined if config doesn't exist or has expired (more than 5 minutes old).\n *\n * Usage: selectPendingTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The pending trade configuration, or undefined if expired or not found.\n */\n\nexport const selectPendingTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (\n isTestnet,\n configs,\n coin,\n ):\n | {\n amount?: string;\n leverage?: number;\n takeProfitPrice?: string;\n stopLossPrice?: string;\n limitPrice?: string;\n orderType?: 'market' | 'limit';\n selectedPaymentToken?: PerpsSelectedPaymentToken | null;\n }\n | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin]?.pendingConfig;\n\n if (!config) {\n return undefined;\n }\n\n // Check if config has expired (5 minutes = 300,000 milliseconds)\n const now = Date.now();\n const FIVE_MINUTES_MS = 5 * 60 * 1000;\n const age = now - config.timestamp;\n\n if (age > FIVE_MINUTES_MS) {\n // Config expired, return undefined\n return undefined;\n }\n\n // Return config without timestamp\n const { timestamp, ...configWithoutTimestamp } = config;\n return configWithoutTimestamp;\n },\n);\n\n/**\n * Select market filter preferences (network-independent)\n *\n * @param state - PerpsController state\n * @returns Sort/filter preferences object with optionId and direction\n */\nexport const selectMarketFilterPreferences = (\n state: PerpsControllerState,\n): { optionId: SortOptionId; direction: SortDirection } => {\n const pref = state?.marketFilterPreferences;\n\n // Handle legacy string format (backward compatibility)\n if (typeof pref === 'string') {\n // Map legacy compound IDs to new format\n // Old format: 'priceChange-desc' or 'priceChange-asc'\n // New format: { optionId: 'priceChange', direction: 'desc'/'asc' }\n if (pref === 'priceChange-desc') {\n return {\n optionId: 'priceChange',\n direction: 'desc',\n };\n }\n if (pref === 'priceChange-asc') {\n return {\n optionId: 'priceChange',\n direction: 'asc',\n };\n }\n\n // Handle other simple legacy strings (e.g., 'volume', 'openInterest', etc.)\n return {\n optionId: pref as SortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n };\n }\n\n // Return new object format or default\n return (\n pref ?? {\n optionId: MARKET_SORTING_CONFIG.DefaultSortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n }\n );\n};\n\n/**\n * Select order book grouping for a specific market on the current network.\n *\n * Usage: selectOrderBookGrouping(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The order book grouping value, or undefined.\n */\n\nexport const selectOrderBookGrouping = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): number | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n return configs?.[network]?.[coin]?.orderBookGrouping;\n },\n);\n"]}
@@ -30,17 +30,6 @@ export declare const selectWatchlistMarkets: (state: PerpsControllerState) => st
30
30
  * @returns boolean indicating if market is in watchlist
31
31
  */
32
32
  export declare const selectIsWatchlistMarket: (state: PerpsControllerState, symbol: string) => boolean;
33
- /**
34
- * Select recently viewed markets for the current network.
35
- *
36
- * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered
37
- * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs
38
- * (24 hours). Returns an empty array when no qualifying entries exist.
39
- *
40
- * @param state - PerpsController state
41
- * @returns Ordered array of recently viewed market symbols
42
- */
43
- export declare const selectRecentlyViewedMarkets: (state: PerpsControllerState) => string[];
44
33
  /**
45
34
  * Select trade configuration for a specific market on the current network.
46
35
  * Uses memoization to return stable object references and prevent unnecessary re-renders.
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,YAAY,EACb,oCAAgC;AACjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA0B;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,0BAAgB;AAExE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UACzB,oBAAoB,GAAG,SAAS,KACtC,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,UAC7B,oBAAoB,KAC1B,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAC1B,oBAAoB,KAC1B,MAAM,EAKR,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAC3B,oBAAoB,UACnB,MAAM,KACb,OAGF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,UAC/B,oBAAoB,KAC1B,MAAM,EASR,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEzB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAYvD,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEhC,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAsCvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,UACjC,oBAAoB,KAC1B;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAmCpD,CAAC;AAEF;;;;;;;;GAQG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAExB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAMvD,CAAC"}
1
+ {"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,YAAY,EAAE,oCAAgC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA0B;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,0BAAgB;AAExE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UACzB,oBAAoB,GAAG,SAAS,KACtC,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,UAC7B,oBAAoB,KAC1B,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAC1B,oBAAoB,KAC1B,MAAM,EAKR,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAC3B,oBAAoB,UACnB,MAAM,KACb,OAGF,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEzB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAYvD,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEhC,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAsCvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,UACjC,oBAAoB,KAC1B;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAmCpD,CAAC;AAEF;;;;;;;;GAQG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAExB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAMvD,CAAC"}
@@ -30,17 +30,6 @@ export declare const selectWatchlistMarkets: (state: PerpsControllerState) => st
30
30
  * @returns boolean indicating if market is in watchlist
31
31
  */
32
32
  export declare const selectIsWatchlistMarket: (state: PerpsControllerState, symbol: string) => boolean;
33
- /**
34
- * Select recently viewed markets for the current network.
35
- *
36
- * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered
37
- * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs
38
- * (24 hours). Returns an empty array when no qualifying entries exist.
39
- *
40
- * @param state - PerpsController state
41
- * @returns Ordered array of recently viewed market symbols
42
- */
43
- export declare const selectRecentlyViewedMarkets: (state: PerpsControllerState) => string[];
44
33
  /**
45
34
  * Select trade configuration for a specific market on the current network.
46
35
  * Uses memoization to return stable object references and prevent unnecessary re-renders.
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.mts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,YAAY,EACb,oCAAgC;AACjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA0B;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,0BAAgB;AAExE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UACzB,oBAAoB,GAAG,SAAS,KACtC,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,UAC7B,oBAAoB,KAC1B,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAC1B,oBAAoB,KAC1B,MAAM,EAKR,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAC3B,oBAAoB,UACnB,MAAM,KACb,OAGF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,UAC/B,oBAAoB,KAC1B,MAAM,EASR,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEzB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAYvD,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEhC,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAsCvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,UACjC,oBAAoB,KAC1B;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAmCpD,CAAC;AAEF;;;;;;;;GAQG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAExB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAMvD,CAAC"}
1
+ {"version":3,"file":"selectors.d.mts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,YAAY,EAAE,oCAAgC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA0B;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,0BAAgB;AAExE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UACzB,oBAAoB,GAAG,SAAS,KACtC,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,UAC7B,oBAAoB,KAC1B,OAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAC1B,oBAAoB,KAC1B,MAAM,EAKR,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAC3B,oBAAoB,UACnB,MAAM,KACb,OAGF,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEzB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAYvD,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAEhC,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAsCvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,UACjC,oBAAoB,KAC1B;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAmCpD,CAAC;AAEF;;;;;;;;GAQG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAExB,oBAAoB,KAAG,OAAO,GAAG,SAAS,UAEzC,oBAAoB,SACpB,MAAM,KACZ,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,WAEjD,oBAAoB,QAAQ,MAAM,KAAG,MAAM;;;;;;;;CAMvD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { createSelector } from "reselect";
2
- import { MARKET_SORTING_CONFIG, PERPS_CONSTANTS } from "./constants/perpsConfig.mjs";
2
+ import { MARKET_SORTING_CONFIG } from "./constants/perpsConfig.mjs";
3
3
  /**
4
4
  * Select whether the user is a first-time perps user
5
5
  *
@@ -47,25 +47,6 @@ export const selectIsWatchlistMarket = (state, symbol) => {
47
47
  const watchlist = selectWatchlistMarkets(state);
48
48
  return watchlist.includes(symbol);
49
49
  };
50
- /**
51
- * Select recently viewed markets for the current network.
52
- *
53
- * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered
54
- * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs
55
- * (24 hours). Returns an empty array when no qualifying entries exist.
56
- *
57
- * @param state - PerpsController state
58
- * @returns Ordered array of recently viewed market symbols
59
- */
60
- export const selectRecentlyViewedMarkets = (state) => {
61
- const network = state?.isTestnet ? 'testnet' : 'mainnet';
62
- const entries = state?.recentlyViewedMarkets?.[network] ?? [];
63
- const cutoff = Date.now() - PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs;
64
- return entries
65
- .filter((entry) => entry.viewedAt > cutoff)
66
- .map((entry) => entry.symbol)
67
- .slice(0, PERPS_CONSTANTS.RecentlyViewedMarketsLimit);
68
- };
69
50
  /**
70
51
  * Select trade configuration for a specific market on the current network.
71
52
  * Uses memoization to return stable object references and prevent unnecessary re-renders.
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.mjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSelector } from 'reselect';\n\nimport {\n MARKET_SORTING_CONFIG,\n PERPS_CONSTANTS,\n SortOptionId,\n} from './constants/perpsConfig';\nimport type { PerpsControllerState } from './PerpsController';\nimport type { PerpsSelectedPaymentToken, SortDirection } from './types';\n\n/**\n * Select whether the user is a first-time perps user\n *\n * @param state - PerpsController state\n * @returns true if user is first-time, false otherwise\n */\nexport const selectIsFirstTimeUser = (\n state: PerpsControllerState | undefined,\n): boolean => {\n if (state?.isTestnet) {\n return state?.isFirstTimeUser?.testnet ?? true;\n }\n return state?.isFirstTimeUser?.mainnet ?? true;\n};\n\n/**\n * Select whether user has ever placed their first successful order\n *\n * @param state - PerpsController state\n * @returns boolean indicating if first order was placed\n */\nexport const selectHasPlacedFirstOrder = (\n state: PerpsControllerState,\n): boolean => {\n if (state?.isTestnet) {\n return state?.hasPlacedFirstOrder?.testnet ?? false;\n }\n return state?.hasPlacedFirstOrder?.mainnet ?? false;\n};\n\n/**\n * Select watchlist markets for the current network\n *\n * @param state - PerpsController state\n * @returns Array of watchlist market symbols for current network\n */\nexport const selectWatchlistMarkets = (\n state: PerpsControllerState,\n): string[] => {\n if (state?.isTestnet) {\n return state?.watchlistMarkets?.testnet ?? [];\n }\n return state?.watchlistMarkets?.mainnet ?? [];\n};\n\n/**\n * Check if a specific market is in the watchlist on the current network\n *\n * @param state - PerpsController state\n * @param symbol - Market symbol to check (e.g., 'BTC', 'ETH')\n * @returns boolean indicating if market is in watchlist\n */\nexport const selectIsWatchlistMarket = (\n state: PerpsControllerState,\n symbol: string,\n): boolean => {\n const watchlist = selectWatchlistMarkets(state);\n return watchlist.includes(symbol);\n};\n\n/**\n * Select recently viewed markets for the current network.\n *\n * Returns up to PERPS_CONSTANTS.RecentlyViewedMarketsLimit symbols, ordered\n * newest-first, filtered to entries within PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs\n * (24 hours). Returns an empty array when no qualifying entries exist.\n *\n * @param state - PerpsController state\n * @returns Ordered array of recently viewed market symbols\n */\nexport const selectRecentlyViewedMarkets = (\n state: PerpsControllerState,\n): string[] => {\n const network = state?.isTestnet ? 'testnet' : 'mainnet';\n const entries = state?.recentlyViewedMarkets?.[network] ?? [];\n const cutoff = Date.now() - PERPS_CONSTANTS.RecentlyViewedMarketsTtlMs;\n\n return entries\n .filter((entry) => entry.viewedAt > cutoff)\n .map((entry) => entry.symbol)\n .slice(0, PERPS_CONSTANTS.RecentlyViewedMarketsLimit);\n};\n\n/**\n * Select trade configuration for a specific market on the current network.\n * Uses memoization to return stable object references and prevent unnecessary re-renders.\n *\n * Usage: selectTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The trade configuration for the specified market, or undefined.\n */\n\nexport const selectTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): { leverage?: number } | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin];\n\n if (!config?.leverage) {\n return undefined;\n }\n\n return { leverage: config.leverage };\n },\n);\n\n/**\n * Select pending trade configuration for a specific market on the current network.\n * Returns undefined if config doesn't exist or has expired (more than 5 minutes old).\n *\n * Usage: selectPendingTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The pending trade configuration, or undefined if expired or not found.\n */\n\nexport const selectPendingTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (\n isTestnet,\n configs,\n coin,\n ):\n | {\n amount?: string;\n leverage?: number;\n takeProfitPrice?: string;\n stopLossPrice?: string;\n limitPrice?: string;\n orderType?: 'market' | 'limit';\n selectedPaymentToken?: PerpsSelectedPaymentToken | null;\n }\n | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin]?.pendingConfig;\n\n if (!config) {\n return undefined;\n }\n\n // Check if config has expired (5 minutes = 300,000 milliseconds)\n const now = Date.now();\n const FIVE_MINUTES_MS = 5 * 60 * 1000;\n const age = now - config.timestamp;\n\n if (age > FIVE_MINUTES_MS) {\n // Config expired, return undefined\n return undefined;\n }\n\n // Return config without timestamp\n const { timestamp, ...configWithoutTimestamp } = config;\n return configWithoutTimestamp;\n },\n);\n\n/**\n * Select market filter preferences (network-independent)\n *\n * @param state - PerpsController state\n * @returns Sort/filter preferences object with optionId and direction\n */\nexport const selectMarketFilterPreferences = (\n state: PerpsControllerState,\n): { optionId: SortOptionId; direction: SortDirection } => {\n const pref = state?.marketFilterPreferences;\n\n // Handle legacy string format (backward compatibility)\n if (typeof pref === 'string') {\n // Map legacy compound IDs to new format\n // Old format: 'priceChange-desc' or 'priceChange-asc'\n // New format: { optionId: 'priceChange', direction: 'desc'/'asc' }\n if (pref === 'priceChange-desc') {\n return {\n optionId: 'priceChange',\n direction: 'desc',\n };\n }\n if (pref === 'priceChange-asc') {\n return {\n optionId: 'priceChange',\n direction: 'asc',\n };\n }\n\n // Handle other simple legacy strings (e.g., 'volume', 'openInterest', etc.)\n return {\n optionId: pref as SortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n };\n }\n\n // Return new object format or default\n return (\n pref ?? {\n optionId: MARKET_SORTING_CONFIG.DefaultSortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n }\n );\n};\n\n/**\n * Select order book grouping for a specific market on the current network.\n *\n * Usage: selectOrderBookGrouping(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The order book grouping value, or undefined.\n */\n\nexport const selectOrderBookGrouping = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): number | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n return configs?.[network]?.[coin]?.orderBookGrouping;\n },\n);\n"]}
1
+ {"version":3,"file":"selectors.mjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSelector } from 'reselect';\n\nimport { MARKET_SORTING_CONFIG, SortOptionId } from './constants/perpsConfig';\nimport type { PerpsControllerState } from './PerpsController';\nimport type { PerpsSelectedPaymentToken, SortDirection } from './types';\n\n/**\n * Select whether the user is a first-time perps user\n *\n * @param state - PerpsController state\n * @returns true if user is first-time, false otherwise\n */\nexport const selectIsFirstTimeUser = (\n state: PerpsControllerState | undefined,\n): boolean => {\n if (state?.isTestnet) {\n return state?.isFirstTimeUser?.testnet ?? true;\n }\n return state?.isFirstTimeUser?.mainnet ?? true;\n};\n\n/**\n * Select whether user has ever placed their first successful order\n *\n * @param state - PerpsController state\n * @returns boolean indicating if first order was placed\n */\nexport const selectHasPlacedFirstOrder = (\n state: PerpsControllerState,\n): boolean => {\n if (state?.isTestnet) {\n return state?.hasPlacedFirstOrder?.testnet ?? false;\n }\n return state?.hasPlacedFirstOrder?.mainnet ?? false;\n};\n\n/**\n * Select watchlist markets for the current network\n *\n * @param state - PerpsController state\n * @returns Array of watchlist market symbols for current network\n */\nexport const selectWatchlistMarkets = (\n state: PerpsControllerState,\n): string[] => {\n if (state?.isTestnet) {\n return state?.watchlistMarkets?.testnet ?? [];\n }\n return state?.watchlistMarkets?.mainnet ?? [];\n};\n\n/**\n * Check if a specific market is in the watchlist on the current network\n *\n * @param state - PerpsController state\n * @param symbol - Market symbol to check (e.g., 'BTC', 'ETH')\n * @returns boolean indicating if market is in watchlist\n */\nexport const selectIsWatchlistMarket = (\n state: PerpsControllerState,\n symbol: string,\n): boolean => {\n const watchlist = selectWatchlistMarkets(state);\n return watchlist.includes(symbol);\n};\n\n/**\n * Select trade configuration for a specific market on the current network.\n * Uses memoization to return stable object references and prevent unnecessary re-renders.\n *\n * Usage: selectTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The trade configuration for the specified market, or undefined.\n */\n\nexport const selectTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): { leverage?: number } | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin];\n\n if (!config?.leverage) {\n return undefined;\n }\n\n return { leverage: config.leverage };\n },\n);\n\n/**\n * Select pending trade configuration for a specific market on the current network.\n * Returns undefined if config doesn't exist or has expired (more than 5 minutes old).\n *\n * Usage: selectPendingTradeConfiguration(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The pending trade configuration, or undefined if expired or not found.\n */\n\nexport const selectPendingTradeConfiguration = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (\n isTestnet,\n configs,\n coin,\n ):\n | {\n amount?: string;\n leverage?: number;\n takeProfitPrice?: string;\n stopLossPrice?: string;\n limitPrice?: string;\n orderType?: 'market' | 'limit';\n selectedPaymentToken?: PerpsSelectedPaymentToken | null;\n }\n | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n const config = configs?.[network]?.[coin]?.pendingConfig;\n\n if (!config) {\n return undefined;\n }\n\n // Check if config has expired (5 minutes = 300,000 milliseconds)\n const now = Date.now();\n const FIVE_MINUTES_MS = 5 * 60 * 1000;\n const age = now - config.timestamp;\n\n if (age > FIVE_MINUTES_MS) {\n // Config expired, return undefined\n return undefined;\n }\n\n // Return config without timestamp\n const { timestamp, ...configWithoutTimestamp } = config;\n return configWithoutTimestamp;\n },\n);\n\n/**\n * Select market filter preferences (network-independent)\n *\n * @param state - PerpsController state\n * @returns Sort/filter preferences object with optionId and direction\n */\nexport const selectMarketFilterPreferences = (\n state: PerpsControllerState,\n): { optionId: SortOptionId; direction: SortDirection } => {\n const pref = state?.marketFilterPreferences;\n\n // Handle legacy string format (backward compatibility)\n if (typeof pref === 'string') {\n // Map legacy compound IDs to new format\n // Old format: 'priceChange-desc' or 'priceChange-asc'\n // New format: { optionId: 'priceChange', direction: 'desc'/'asc' }\n if (pref === 'priceChange-desc') {\n return {\n optionId: 'priceChange',\n direction: 'desc',\n };\n }\n if (pref === 'priceChange-asc') {\n return {\n optionId: 'priceChange',\n direction: 'asc',\n };\n }\n\n // Handle other simple legacy strings (e.g., 'volume', 'openInterest', etc.)\n return {\n optionId: pref as SortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n };\n }\n\n // Return new object format or default\n return (\n pref ?? {\n optionId: MARKET_SORTING_CONFIG.DefaultSortOptionId,\n direction: MARKET_SORTING_CONFIG.DefaultDirection,\n }\n );\n};\n\n/**\n * Select order book grouping for a specific market on the current network.\n *\n * Usage: selectOrderBookGrouping(state, coin)\n *\n * @param state - The perps controller state.\n * @param coin - The market coin symbol.\n * @returns The order book grouping value, or undefined.\n */\n\nexport const selectOrderBookGrouping = createSelector(\n [\n (state: PerpsControllerState): boolean | undefined => state?.isTestnet,\n (\n state: PerpsControllerState,\n _coin: string,\n ): PerpsControllerState['tradeConfigurations'] | undefined =>\n state?.tradeConfigurations,\n (_state: PerpsControllerState, coin: string): string => coin,\n ],\n (isTestnet, configs, coin): number | undefined => {\n const network = isTestnet ? 'testnet' : 'mainnet';\n return configs?.[network]?.[coin]?.orderBookGrouping;\n },\n);\n"]}
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  var _HyperLiquidClientService_instances, _HyperLiquidClientService_exchangeClient, _HyperLiquidClientService_infoClient, _HyperLiquidClientService_infoClientHttp, _HyperLiquidClientService_subscriptionClient, _HyperLiquidClientService_wsTransport, _HyperLiquidClientService_httpTransport, _HyperLiquidClientService_isTestnet, _HyperLiquidClientService_connectionState, _HyperLiquidClientService_disconnectionPromise, _HyperLiquidClientService_onTerminateCallback, _HyperLiquidClientService_onReconnectCallback, _HyperLiquidClientService_reconnectionAttempt, _HyperLiquidClientService_connectionStateListeners, _HyperLiquidClientService_reconnectionRetryTimeout, _HyperLiquidClientService_deps, _HyperLiquidClientService_createTransports, _HyperLiquidClientService_runCandleSnapshotFetch, _HyperLiquidClientService_runHistoricalOrdersFetch, _HyperLiquidClientService_getIntervalMilliseconds, _HyperLiquidClientService_performDisconnection, _HyperLiquidClientService_updateConnectionState, _HyperLiquidClientService_notifyConnectionStateListeners, _HyperLiquidClientService_isReconnecting, _HyperLiquidClientService_handleConnectionDrop;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.HyperLiquidClientService = exports.WebSocketConnectionState = void 0;
16
- const hyperliquid_1 = require("file:///home/runner/work/hyperliquid/hyperliquid/src/mod.ts");
16
+ const hyperliquid_1 = require("@nktkas/hyperliquid");
17
17
  const chartConfig_1 = require("../constants/chartConfig.cjs");
18
18
  const hyperLiquidConfig_1 = require("../constants/hyperLiquidConfig.cjs");
19
19
  const perpsConfig_1 = require("../constants/perpsConfig.cjs");
@@ -117,7 +117,7 @@ class HyperLiquidClientService {
117
117
  // Close WebSocket transport to release resources and event listeners
118
118
  if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
119
119
  try {
120
- __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
120
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
121
121
  }
122
122
  catch {
123
123
  // Ignore cleanup errors
@@ -687,7 +687,10 @@ _HyperLiquidClientService_exchangeClient = new WeakMap(), _HyperLiquidClientServ
687
687
  __classPrivateFieldSet(this, _HyperLiquidClientService_wsTransport, new hyperliquid_1.WebSocketTransport({
688
688
  isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
689
689
  ...hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG,
690
- reconnect: hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG.reconnect,
690
+ reconnect: {
691
+ ...hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG.reconnect,
692
+ WebSocket: globalThis.WebSocket, // Use React Native's global WebSocket
693
+ },
691
694
  }), "f");
692
695
  // Listen for WebSocket termination (fired when SDK exhausts all reconnection attempts)
693
696
  __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").socket.addEventListener('terminate', (event) => {
@@ -817,7 +820,7 @@ _HyperLiquidClientService_exchangeClient = new WeakMap(), _HyperLiquidClientServ
817
820
  // Close WebSocket transport only (HTTP is stateless)
818
821
  if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
819
822
  try {
820
- __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
823
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
821
824
  __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Closed WebSocket transport', {
822
825
  timestamp: new Date().toISOString(),
823
826
  });
@@ -905,7 +908,7 @@ async function _HyperLiquidClientService_handleConnectionDrop() {
905
908
  // so createTransports() will create fresh ones
906
909
  if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
907
910
  try {
908
- __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
911
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
909
912
  }
910
913
  catch {
911
914
  // Ignore errors during close - transport may already be dead