@metamask-previews/perps-controller 10.0.0-preview-a42e8d0d2 → 10.0.0-preview-5a03e1b92

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 (106) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/constants/eventNames.cjs +6 -0
  3. package/dist/constants/eventNames.cjs.map +1 -1
  4. package/dist/constants/eventNames.d.cts +4 -0
  5. package/dist/constants/eventNames.d.cts.map +1 -1
  6. package/dist/constants/eventNames.d.mts +4 -0
  7. package/dist/constants/eventNames.d.mts.map +1 -1
  8. package/dist/constants/eventNames.mjs +6 -0
  9. package/dist/constants/eventNames.mjs.map +1 -1
  10. package/dist/index.cjs +86 -74
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +3 -1
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +3 -1
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +2 -0
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/perpsErrorCodes.cjs +16 -0
  19. package/dist/perpsErrorCodes.cjs.map +1 -1
  20. package/dist/perpsErrorCodes.d.cts +12 -0
  21. package/dist/perpsErrorCodes.d.cts.map +1 -1
  22. package/dist/perpsErrorCodes.d.mts +12 -0
  23. package/dist/perpsErrorCodes.d.mts.map +1 -1
  24. package/dist/perpsErrorCodes.mjs +16 -0
  25. package/dist/perpsErrorCodes.mjs.map +1 -1
  26. package/dist/providers/HyperLiquidProvider.cjs +674 -77
  27. package/dist/providers/HyperLiquidProvider.cjs.map +1 -1
  28. package/dist/providers/HyperLiquidProvider.d.cts +13 -0
  29. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -1
  30. package/dist/providers/HyperLiquidProvider.d.mts +13 -0
  31. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -1
  32. package/dist/providers/HyperLiquidProvider.mjs +676 -79
  33. package/dist/providers/HyperLiquidProvider.mjs.map +1 -1
  34. package/dist/selectors.cjs.map +1 -1
  35. package/dist/selectors.d.cts +17 -17
  36. package/dist/selectors.d.cts.map +1 -1
  37. package/dist/selectors.d.mts +17 -17
  38. package/dist/selectors.d.mts.map +1 -1
  39. package/dist/selectors.mjs.map +1 -1
  40. package/dist/services/HyperLiquidSubscriptionService.cjs +121 -11
  41. package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -1
  42. package/dist/services/HyperLiquidSubscriptionService.d.cts +21 -0
  43. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -1
  44. package/dist/services/HyperLiquidSubscriptionService.d.mts +21 -0
  45. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -1
  46. package/dist/services/HyperLiquidSubscriptionService.mjs +121 -11
  47. package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -1
  48. package/dist/services/TradingService.cjs +6 -2
  49. package/dist/services/TradingService.cjs.map +1 -1
  50. package/dist/services/TradingService.d.cts.map +1 -1
  51. package/dist/services/TradingService.d.mts.map +1 -1
  52. package/dist/services/TradingService.mjs +6 -2
  53. package/dist/services/TradingService.mjs.map +1 -1
  54. package/dist/types/index.cjs.map +1 -1
  55. package/dist/types/index.d.cts +69 -4
  56. package/dist/types/index.d.cts.map +1 -1
  57. package/dist/types/index.d.mts +69 -4
  58. package/dist/types/index.d.mts.map +1 -1
  59. package/dist/types/index.mjs.map +1 -1
  60. package/dist/types/perps-types.cjs.map +1 -1
  61. package/dist/types/perps-types.d.cts +35 -1
  62. package/dist/types/perps-types.d.cts.map +1 -1
  63. package/dist/types/perps-types.d.mts +35 -1
  64. package/dist/types/perps-types.d.mts.map +1 -1
  65. package/dist/types/perps-types.mjs.map +1 -1
  66. package/dist/utils/hyperLiquidAdapter.cjs +168 -10
  67. package/dist/utils/hyperLiquidAdapter.cjs.map +1 -1
  68. package/dist/utils/hyperLiquidAdapter.d.cts +35 -1
  69. package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -1
  70. package/dist/utils/hyperLiquidAdapter.d.mts +35 -1
  71. package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -1
  72. package/dist/utils/hyperLiquidAdapter.mjs +166 -11
  73. package/dist/utils/hyperLiquidAdapter.mjs.map +1 -1
  74. package/dist/utils/hyperLiquidValidation.cjs +160 -5
  75. package/dist/utils/hyperLiquidValidation.cjs.map +1 -1
  76. package/dist/utils/hyperLiquidValidation.d.cts +23 -4
  77. package/dist/utils/hyperLiquidValidation.d.cts.map +1 -1
  78. package/dist/utils/hyperLiquidValidation.d.mts +23 -4
  79. package/dist/utils/hyperLiquidValidation.d.mts.map +1 -1
  80. package/dist/utils/hyperLiquidValidation.mjs +160 -5
  81. package/dist/utils/hyperLiquidValidation.mjs.map +1 -1
  82. package/dist/utils/index.cjs +5 -1
  83. package/dist/utils/index.cjs.map +1 -1
  84. package/dist/utils/index.d.cts +2 -1
  85. package/dist/utils/index.d.cts.map +1 -1
  86. package/dist/utils/index.d.mts +2 -1
  87. package/dist/utils/index.d.mts.map +1 -1
  88. package/dist/utils/index.mjs +2 -1
  89. package/dist/utils/index.mjs.map +1 -1
  90. package/dist/utils/orderCalculations.cjs +363 -37
  91. package/dist/utils/orderCalculations.cjs.map +1 -1
  92. package/dist/utils/orderCalculations.d.cts +87 -2
  93. package/dist/utils/orderCalculations.d.cts.map +1 -1
  94. package/dist/utils/orderCalculations.d.mts +87 -2
  95. package/dist/utils/orderCalculations.d.mts.map +1 -1
  96. package/dist/utils/orderCalculations.mjs +359 -36
  97. package/dist/utils/orderCalculations.mjs.map +1 -1
  98. package/dist/utils/orderTypes.cjs +222 -0
  99. package/dist/utils/orderTypes.cjs.map +1 -0
  100. package/dist/utils/orderTypes.d.cts +114 -0
  101. package/dist/utils/orderTypes.d.cts.map +1 -0
  102. package/dist/utils/orderTypes.d.mts +114 -0
  103. package/dist/utils/orderTypes.d.mts.map +1 -0
  104. package/dist/utils/orderTypes.mjs +210 -0
  105. package/dist/utils/orderTypes.mjs.map +1 -0
  106. package/package.json +7 -6
@@ -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 DEFAULT_PRO_LAYOUT_PREFERENCES,\n DEFAULT_PERPS_MODE,\n} from './constants/perpsConfig.js';\nimport type {\n PerpsMode,\n ProLayoutPreferences,\n} from './constants/perpsConfig.js';\nimport type { PerpsControllerState } from './PerpsController.js';\nimport type {\n PerpsSelectedPaymentToken,\n SortDirection,\n} from './types/index.js';\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 pro-mode layout preferences (network-independent).\n *\n * Merges over defaults so callers always receive a fully-populated object,\n * even when the state slice (or a nested field) is missing.\n *\n * @param state - PerpsController state\n * @returns The pro-mode layout preferences object\n */\nexport const selectProLayoutPreferences = (\n state: PerpsControllerState,\n): ProLayoutPreferences => ({\n ...DEFAULT_PRO_LAYOUT_PREFERENCES,\n ...state?.proLayoutPreferences,\n});\n\n/**\n * Select the current Perps interface mode (lite/pro).\n *\n * Falls back to the default mode when the state slice is missing.\n *\n * @param state - PerpsController state\n * @returns The current Perps mode\n */\nexport const selectPerpsMode = (state: PerpsControllerState): PerpsMode =>\n state?.mode ?? DEFAULT_PERPS_MODE;\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 {\n MARKET_SORTING_CONFIG,\n PERPS_CONSTANTS,\n SortOptionId,\n DEFAULT_PRO_LAYOUT_PREFERENCES,\n DEFAULT_PERPS_MODE,\n} from './constants/perpsConfig.js';\nimport type {\n PerpsMode,\n ProLayoutPreferences,\n} from './constants/perpsConfig.js';\nimport type { PerpsControllerState } from './PerpsController.js';\nimport type {\n OrderType,\n PerpsSelectedPaymentToken,\n SortDirection,\n} from './types/index.js';\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?: OrderType;\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 pro-mode layout preferences (network-independent).\n *\n * Merges over defaults so callers always receive a fully-populated object,\n * even when the state slice (or a nested field) is missing.\n *\n * @param state - PerpsController state\n * @returns The pro-mode layout preferences object\n */\nexport const selectProLayoutPreferences = (\n state: PerpsControllerState,\n): ProLayoutPreferences => ({\n ...DEFAULT_PRO_LAYOUT_PREFERENCES,\n ...state?.proLayoutPreferences,\n});\n\n/**\n * Select the current Perps interface mode (lite/pro).\n *\n * Falls back to the default mode when the state slice is missing.\n *\n * @param state - PerpsController state\n * @returns The current Perps mode\n */\nexport const selectPerpsMode = (state: PerpsControllerState): PerpsMode =>\n state?.mode ?? DEFAULT_PERPS_MODE;\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,7 +1,7 @@
1
1
  import { SortOptionId } from "./constants/perpsConfig.cjs";
2
2
  import type { PerpsMode, ProLayoutPreferences } from "./constants/perpsConfig.cjs";
3
3
  import type { PerpsControllerState } from "./PerpsController.cjs";
4
- import type { PerpsSelectedPaymentToken, SortDirection } from "./types/index.cjs";
4
+ import type { OrderType, PerpsSelectedPaymentToken, SortDirection } from "./types/index.cjs";
5
5
  /**
6
6
  * Select whether the user is a first-time perps user
7
7
  *
@@ -70,7 +70,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
70
70
  takeProfitPrice?: string | undefined;
71
71
  stopLossPrice?: string | undefined;
72
72
  limitPrice?: string | undefined;
73
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
73
+ orderType?: OrderType | undefined;
74
74
  timestamp: number;
75
75
  } | undefined;
76
76
  };
@@ -85,7 +85,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
85
85
  takeProfitPrice?: string | undefined;
86
86
  stopLossPrice?: string | undefined;
87
87
  limitPrice?: string | undefined;
88
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
88
+ orderType?: OrderType | undefined;
89
89
  timestamp: number;
90
90
  } | undefined;
91
91
  };
@@ -104,7 +104,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
104
104
  takeProfitPrice?: string | undefined;
105
105
  stopLossPrice?: string | undefined;
106
106
  limitPrice?: string | undefined;
107
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
107
+ orderType?: OrderType | undefined;
108
108
  timestamp: number;
109
109
  } | undefined;
110
110
  };
@@ -119,7 +119,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
119
119
  takeProfitPrice?: string | undefined;
120
120
  stopLossPrice?: string | undefined;
121
121
  limitPrice?: string | undefined;
122
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
122
+ orderType?: OrderType | undefined;
123
123
  timestamp: number;
124
124
  } | undefined;
125
125
  };
@@ -159,7 +159,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
159
159
  takeProfitPrice?: string | undefined;
160
160
  stopLossPrice?: string | undefined;
161
161
  limitPrice?: string | undefined;
162
- orderType?: "market" | "limit" | undefined;
162
+ orderType?: OrderType | undefined;
163
163
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
164
164
  } | undefined) & {
165
165
  clearCache: () => void;
@@ -177,7 +177,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
177
177
  takeProfitPrice?: string | undefined;
178
178
  stopLossPrice?: string | undefined;
179
179
  limitPrice?: string | undefined;
180
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
180
+ orderType?: OrderType | undefined;
181
181
  timestamp: number;
182
182
  } | undefined;
183
183
  };
@@ -192,7 +192,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
192
192
  takeProfitPrice?: string | undefined;
193
193
  stopLossPrice?: string | undefined;
194
194
  limitPrice?: string | undefined;
195
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
195
+ orderType?: OrderType | undefined;
196
196
  timestamp: number;
197
197
  } | undefined;
198
198
  };
@@ -203,7 +203,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
203
203
  takeProfitPrice?: string | undefined;
204
204
  stopLossPrice?: string | undefined;
205
205
  limitPrice?: string | undefined;
206
- orderType?: "market" | "limit" | undefined;
206
+ orderType?: OrderType | undefined;
207
207
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
208
208
  } | undefined;
209
209
  memoizedResultFunc: ((resultFuncArgs_0: boolean | undefined, resultFuncArgs_1: {
@@ -217,7 +217,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
217
217
  takeProfitPrice?: string | undefined;
218
218
  stopLossPrice?: string | undefined;
219
219
  limitPrice?: string | undefined;
220
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
220
+ orderType?: OrderType | undefined;
221
221
  timestamp: number;
222
222
  } | undefined;
223
223
  };
@@ -232,7 +232,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
232
232
  takeProfitPrice?: string | undefined;
233
233
  stopLossPrice?: string | undefined;
234
234
  limitPrice?: string | undefined;
235
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
235
+ orderType?: OrderType | undefined;
236
236
  timestamp: number;
237
237
  } | undefined;
238
238
  };
@@ -243,7 +243,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
243
243
  takeProfitPrice?: string | undefined;
244
244
  stopLossPrice?: string | undefined;
245
245
  limitPrice?: string | undefined;
246
- orderType?: "market" | "limit" | undefined;
246
+ orderType?: OrderType | undefined;
247
247
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
248
248
  } | undefined) & {
249
249
  clearCache: () => void;
@@ -256,7 +256,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
256
256
  takeProfitPrice?: string | undefined;
257
257
  stopLossPrice?: string | undefined;
258
258
  limitPrice?: string | undefined;
259
- orderType?: "market" | "limit" | undefined;
259
+ orderType?: OrderType | undefined;
260
260
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
261
261
  } | undefined;
262
262
  dependencies: [(state: PerpsControllerState) => boolean | undefined, (state: PerpsControllerState, _coin: string) => PerpsControllerState['tradeConfigurations'] | undefined, (_state: PerpsControllerState, coin: string) => string];
@@ -322,7 +322,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
322
322
  takeProfitPrice?: string | undefined;
323
323
  stopLossPrice?: string | undefined;
324
324
  limitPrice?: string | undefined;
325
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
325
+ orderType?: OrderType | undefined;
326
326
  timestamp: number;
327
327
  } | undefined;
328
328
  };
@@ -337,7 +337,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
337
337
  takeProfitPrice?: string | undefined;
338
338
  stopLossPrice?: string | undefined;
339
339
  limitPrice?: string | undefined;
340
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
340
+ orderType?: OrderType | undefined;
341
341
  timestamp: number;
342
342
  } | undefined;
343
343
  };
@@ -354,7 +354,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
354
354
  takeProfitPrice?: string | undefined;
355
355
  stopLossPrice?: string | undefined;
356
356
  limitPrice?: string | undefined;
357
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
357
+ orderType?: OrderType | undefined;
358
358
  timestamp: number;
359
359
  } | undefined;
360
360
  };
@@ -369,7 +369,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
369
369
  takeProfitPrice?: string | undefined;
370
370
  stopLossPrice?: string | undefined;
371
371
  limitPrice?: string | undefined;
372
- orderType?: import("./types/perps-types.cjs").OrderType | undefined;
372
+ orderType?: OrderType | undefined;
373
373
  timestamp: number;
374
374
  } | undefined;
375
375
  };
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,YAAY,EAGb,oCAAmC;AACpC,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACrB,oCAAmC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA6B;AACjE,OAAO,KAAK,EACV,yBAAyB,EACzB,aAAa,EACd,0BAAyB;AAE1B;;;;;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;AACH,eAAO,MAAM,0BAA0B,UAC9B,oBAAoB,KAC1B,oBAGD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAW,oBAAoB,KAAG,SAC3B,CAAC;AAEpC;;;;;;;;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,EAGL,YAAY,EAGb,oCAAmC;AACpC,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACrB,oCAAmC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA6B;AACjE,OAAO,KAAK,EACV,SAAS,EACT,yBAAyB,EACzB,aAAa,EACd,0BAAyB;AAE1B;;;;;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;AACH,eAAO,MAAM,0BAA0B,UAC9B,oBAAoB,KAC1B,oBAGD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAW,oBAAoB,KAAG,SAC3B,CAAC;AAEpC;;;;;;;;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,7 +1,7 @@
1
1
  import { SortOptionId } from "./constants/perpsConfig.mjs";
2
2
  import type { PerpsMode, ProLayoutPreferences } from "./constants/perpsConfig.mjs";
3
3
  import type { PerpsControllerState } from "./PerpsController.mjs";
4
- import type { PerpsSelectedPaymentToken, SortDirection } from "./types/index.mjs";
4
+ import type { OrderType, PerpsSelectedPaymentToken, SortDirection } from "./types/index.mjs";
5
5
  /**
6
6
  * Select whether the user is a first-time perps user
7
7
  *
@@ -70,7 +70,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
70
70
  takeProfitPrice?: string | undefined;
71
71
  stopLossPrice?: string | undefined;
72
72
  limitPrice?: string | undefined;
73
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
73
+ orderType?: OrderType | undefined;
74
74
  timestamp: number;
75
75
  } | undefined;
76
76
  };
@@ -85,7 +85,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
85
85
  takeProfitPrice?: string | undefined;
86
86
  stopLossPrice?: string | undefined;
87
87
  limitPrice?: string | undefined;
88
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
88
+ orderType?: OrderType | undefined;
89
89
  timestamp: number;
90
90
  } | undefined;
91
91
  };
@@ -104,7 +104,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
104
104
  takeProfitPrice?: string | undefined;
105
105
  stopLossPrice?: string | undefined;
106
106
  limitPrice?: string | undefined;
107
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
107
+ orderType?: OrderType | undefined;
108
108
  timestamp: number;
109
109
  } | undefined;
110
110
  };
@@ -119,7 +119,7 @@ export declare const selectTradeConfiguration: ((state: PerpsControllerState, _c
119
119
  takeProfitPrice?: string | undefined;
120
120
  stopLossPrice?: string | undefined;
121
121
  limitPrice?: string | undefined;
122
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
122
+ orderType?: OrderType | undefined;
123
123
  timestamp: number;
124
124
  } | undefined;
125
125
  };
@@ -159,7 +159,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
159
159
  takeProfitPrice?: string | undefined;
160
160
  stopLossPrice?: string | undefined;
161
161
  limitPrice?: string | undefined;
162
- orderType?: "market" | "limit" | undefined;
162
+ orderType?: OrderType | undefined;
163
163
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
164
164
  } | undefined) & {
165
165
  clearCache: () => void;
@@ -177,7 +177,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
177
177
  takeProfitPrice?: string | undefined;
178
178
  stopLossPrice?: string | undefined;
179
179
  limitPrice?: string | undefined;
180
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
180
+ orderType?: OrderType | undefined;
181
181
  timestamp: number;
182
182
  } | undefined;
183
183
  };
@@ -192,7 +192,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
192
192
  takeProfitPrice?: string | undefined;
193
193
  stopLossPrice?: string | undefined;
194
194
  limitPrice?: string | undefined;
195
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
195
+ orderType?: OrderType | undefined;
196
196
  timestamp: number;
197
197
  } | undefined;
198
198
  };
@@ -203,7 +203,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
203
203
  takeProfitPrice?: string | undefined;
204
204
  stopLossPrice?: string | undefined;
205
205
  limitPrice?: string | undefined;
206
- orderType?: "market" | "limit" | undefined;
206
+ orderType?: OrderType | undefined;
207
207
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
208
208
  } | undefined;
209
209
  memoizedResultFunc: ((resultFuncArgs_0: boolean | undefined, resultFuncArgs_1: {
@@ -217,7 +217,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
217
217
  takeProfitPrice?: string | undefined;
218
218
  stopLossPrice?: string | undefined;
219
219
  limitPrice?: string | undefined;
220
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
220
+ orderType?: OrderType | undefined;
221
221
  timestamp: number;
222
222
  } | undefined;
223
223
  };
@@ -232,7 +232,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
232
232
  takeProfitPrice?: string | undefined;
233
233
  stopLossPrice?: string | undefined;
234
234
  limitPrice?: string | undefined;
235
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
235
+ orderType?: OrderType | undefined;
236
236
  timestamp: number;
237
237
  } | undefined;
238
238
  };
@@ -243,7 +243,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
243
243
  takeProfitPrice?: string | undefined;
244
244
  stopLossPrice?: string | undefined;
245
245
  limitPrice?: string | undefined;
246
- orderType?: "market" | "limit" | undefined;
246
+ orderType?: OrderType | undefined;
247
247
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
248
248
  } | undefined) & {
249
249
  clearCache: () => void;
@@ -256,7 +256,7 @@ export declare const selectPendingTradeConfiguration: ((state: PerpsControllerSt
256
256
  takeProfitPrice?: string | undefined;
257
257
  stopLossPrice?: string | undefined;
258
258
  limitPrice?: string | undefined;
259
- orderType?: "market" | "limit" | undefined;
259
+ orderType?: OrderType | undefined;
260
260
  selectedPaymentToken?: PerpsSelectedPaymentToken | null | undefined;
261
261
  } | undefined;
262
262
  dependencies: [(state: PerpsControllerState) => boolean | undefined, (state: PerpsControllerState, _coin: string) => PerpsControllerState['tradeConfigurations'] | undefined, (_state: PerpsControllerState, coin: string) => string];
@@ -322,7 +322,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
322
322
  takeProfitPrice?: string | undefined;
323
323
  stopLossPrice?: string | undefined;
324
324
  limitPrice?: string | undefined;
325
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
325
+ orderType?: OrderType | undefined;
326
326
  timestamp: number;
327
327
  } | undefined;
328
328
  };
@@ -337,7 +337,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
337
337
  takeProfitPrice?: string | undefined;
338
338
  stopLossPrice?: string | undefined;
339
339
  limitPrice?: string | undefined;
340
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
340
+ orderType?: OrderType | undefined;
341
341
  timestamp: number;
342
342
  } | undefined;
343
343
  };
@@ -354,7 +354,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
354
354
  takeProfitPrice?: string | undefined;
355
355
  stopLossPrice?: string | undefined;
356
356
  limitPrice?: string | undefined;
357
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
357
+ orderType?: OrderType | undefined;
358
358
  timestamp: number;
359
359
  } | undefined;
360
360
  };
@@ -369,7 +369,7 @@ export declare const selectOrderBookGrouping: ((state: PerpsControllerState, _co
369
369
  takeProfitPrice?: string | undefined;
370
370
  stopLossPrice?: string | undefined;
371
371
  limitPrice?: string | undefined;
372
- orderType?: import("./types/perps-types.mjs").OrderType | undefined;
372
+ orderType?: OrderType | undefined;
373
373
  timestamp: number;
374
374
  } | undefined;
375
375
  };
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.mts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,YAAY,EAGb,oCAAmC;AACpC,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACrB,oCAAmC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA6B;AACjE,OAAO,KAAK,EACV,yBAAyB,EACzB,aAAa,EACd,0BAAyB;AAE1B;;;;;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;AACH,eAAO,MAAM,0BAA0B,UAC9B,oBAAoB,KAC1B,oBAGD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAW,oBAAoB,KAAG,SAC3B,CAAC;AAEpC;;;;;;;;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,EAGL,YAAY,EAGb,oCAAmC;AACpC,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACrB,oCAAmC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA6B;AACjE,OAAO,KAAK,EACV,SAAS,EACT,yBAAyB,EACzB,aAAa,EACd,0BAAyB;AAE1B;;;;;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;AACH,eAAO,MAAM,0BAA0B,UAC9B,oBAAoB,KAC1B,oBAGD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAW,oBAAoB,KAAG,SAC3B,CAAC;AAEpC;;;;;;;;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 +1 @@
1
- {"version":3,"file":"selectors.mjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB;AAE1C,OAAO,EACL,qBAAqB,EACrB,eAAe,EAEf,8BAA8B,EAC9B,kBAAkB,EACnB,oCAAmC;AAWpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAuC,EAC9B,EAAE;IACX,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,IAAI,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,IAAI,IAAI,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,KAA2B,EAClB,EAAE;IACX,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,IAAI,KAAK,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,IAAI,KAAK,CAAC;AACtD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAA2B,EACjB,EAAE;IACZ,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,IAAI,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,KAA2B,EAC3B,MAAc,EACL,EAAE;IACX,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAA2B,EACjB,EAAE;IACZ,MAAM,OAAO,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,MAAM,OAAO,GAAG,KAAK,EAAE,qBAAqB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,0BAA0B,CAAC;IAEvE,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;SAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CACpD;IACE,CAAC,KAA2B,EAAuB,EAAE,CAAC,KAAK,EAAE,SAAS;IACtE,CACE,KAA2B,EAC3B,KAAa,EAC4C,EAAE,CAC3D,KAAK,EAAE,mBAAmB;IAC5B,CAAC,MAA4B,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI;CAC7D,EACD,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAqC,EAAE;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvC,CAAC,CACF,CAAC;AAEF;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,cAAc,CAC3D;IACE,CAAC,KAA2B,EAAuB,EAAE,CAAC,KAAK,EAAE,SAAS;IACtE,CACE,KAA2B,EAC3B,KAAa,EAC4C,EAAE,CAC3D,KAAK,EAAE,mBAAmB;IAC5B,CAAC,MAA4B,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI;CAC7D,EACD,CACE,SAAS,EACT,OAAO,EACP,IAAI,EAWQ,EAAE;IACd,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAEzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iEAAiE;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,GAAG,GAAG,eAAe,EAAE,CAAC;QAC1B,mCAAmC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,CAAC;IACxD,OAAO,sBAAsB,CAAC;AAChC,CAAC,CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,KAA2B,EAC2B,EAAE;IACxD,MAAM,IAAI,GAAG,KAAK,EAAE,uBAAuB,CAAC;IAE5C,uDAAuD;IACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,wCAAwC;QACxC,sDAAsD;QACtD,mEAAmE;QACnE,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,MAAM;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/B,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,OAAO;YACL,QAAQ,EAAE,IAAoB;YAC9B,SAAS,EAAE,qBAAqB,CAAC,gBAAgB;SAClD,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,OAAO,CACL,IAAI,IAAI;QACN,QAAQ,EAAE,qBAAqB,CAAC,mBAAmB;QACnD,SAAS,EAAE,qBAAqB,CAAC,gBAAgB;KAClD,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAA2B,EACL,EAAE,CAAC,CAAC;IAC1B,GAAG,8BAA8B;IACjC,GAAG,KAAK,EAAE,oBAAoB;CAC/B,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAa,EAAE,CACxE,KAAK,EAAE,IAAI,IAAI,kBAAkB,CAAC;AAEpC;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CACnD;IACE,CAAC,KAA2B,EAAuB,EAAE,CAAC,KAAK,EAAE,SAAS;IACtE,CACE,KAA2B,EAC3B,KAAa,EAC4C,EAAE,CAC3D,KAAK,EAAE,mBAAmB;IAC5B,CAAC,MAA4B,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI;CAC7D,EACD,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAsB,EAAE;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,OAAO,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;AACvD,CAAC,CACF,CAAC","sourcesContent":["import { createSelector } from 'reselect';\n\nimport {\n MARKET_SORTING_CONFIG,\n PERPS_CONSTANTS,\n SortOptionId,\n DEFAULT_PRO_LAYOUT_PREFERENCES,\n DEFAULT_PERPS_MODE,\n} from './constants/perpsConfig.js';\nimport type {\n PerpsMode,\n ProLayoutPreferences,\n} from './constants/perpsConfig.js';\nimport type { PerpsControllerState } from './PerpsController.js';\nimport type {\n PerpsSelectedPaymentToken,\n SortDirection,\n} from './types/index.js';\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 pro-mode layout preferences (network-independent).\n *\n * Merges over defaults so callers always receive a fully-populated object,\n * even when the state slice (or a nested field) is missing.\n *\n * @param state - PerpsController state\n * @returns The pro-mode layout preferences object\n */\nexport const selectProLayoutPreferences = (\n state: PerpsControllerState,\n): ProLayoutPreferences => ({\n ...DEFAULT_PRO_LAYOUT_PREFERENCES,\n ...state?.proLayoutPreferences,\n});\n\n/**\n * Select the current Perps interface mode (lite/pro).\n *\n * Falls back to the default mode when the state slice is missing.\n *\n * @param state - PerpsController state\n * @returns The current Perps mode\n */\nexport const selectPerpsMode = (state: PerpsControllerState): PerpsMode =>\n state?.mode ?? DEFAULT_PERPS_MODE;\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 {\n MARKET_SORTING_CONFIG,\n PERPS_CONSTANTS,\n SortOptionId,\n DEFAULT_PRO_LAYOUT_PREFERENCES,\n DEFAULT_PERPS_MODE,\n} from './constants/perpsConfig.js';\nimport type {\n PerpsMode,\n ProLayoutPreferences,\n} from './constants/perpsConfig.js';\nimport type { PerpsControllerState } from './PerpsController.js';\nimport type {\n OrderType,\n PerpsSelectedPaymentToken,\n SortDirection,\n} from './types/index.js';\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?: OrderType;\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 pro-mode layout preferences (network-independent).\n *\n * Merges over defaults so callers always receive a fully-populated object,\n * even when the state slice (or a nested field) is missing.\n *\n * @param state - PerpsController state\n * @returns The pro-mode layout preferences object\n */\nexport const selectProLayoutPreferences = (\n state: PerpsControllerState,\n): ProLayoutPreferences => ({\n ...DEFAULT_PRO_LAYOUT_PREFERENCES,\n ...state?.proLayoutPreferences,\n});\n\n/**\n * Select the current Perps interface mode (lite/pro).\n *\n * Falls back to the default mode when the state slice is missing.\n *\n * @param state - PerpsController state\n * @returns The current Perps mode\n */\nexport const selectPerpsMode = (state: PerpsControllerState): PerpsMode =>\n state?.mode ?? DEFAULT_PERPS_MODE;\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"]}