@metamask-previews/perps-controller 13.1.0-preview-8c2a2eeb2 → 13.1.0-preview-4f4c98e
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.
- package/CHANGELOG.md +4 -1
- package/dist/{PerpsController-method-action-types.d.mts → PerpsController-method-action-types.d.ts} +2 -2
- package/dist/PerpsController-method-action-types.d.ts.map +1 -0
- package/dist/{PerpsController-method-action-types.mjs → PerpsController-method-action-types.js} +1 -1
- package/dist/PerpsController-method-action-types.js.map +1 -0
- package/dist/{PerpsController.d.mts → PerpsController.d.ts} +17 -17
- package/dist/PerpsController.d.ts.map +1 -0
- package/dist/{PerpsController.mjs → PerpsController.js} +33 -31
- package/dist/PerpsController.js.map +1 -0
- package/dist/aggregation/{SubscriptionMultiplexer.d.cts → SubscriptionMultiplexer.d.ts} +2 -2
- package/dist/aggregation/SubscriptionMultiplexer.d.ts.map +1 -0
- package/dist/aggregation/{SubscriptionMultiplexer.mjs → SubscriptionMultiplexer.js} +3 -3
- package/dist/aggregation/SubscriptionMultiplexer.js.map +1 -0
- package/dist/aggregation/index.d.ts +6 -0
- package/dist/aggregation/index.d.ts.map +1 -0
- package/dist/aggregation/index.js +5 -0
- package/dist/aggregation/index.js.map +1 -0
- package/dist/constants/{chartConfig.d.mts → chartConfig.d.ts} +34 -34
- package/dist/constants/chartConfig.d.ts.map +1 -0
- package/dist/constants/{chartConfig.mjs → chartConfig.js} +1 -1
- package/dist/constants/chartConfig.js.map +1 -0
- package/dist/constants/eventNames.d.ts +555 -0
- package/dist/constants/eventNames.d.ts.map +1 -0
- package/dist/constants/{eventNames.mjs → eventNames.js} +1 -1
- package/dist/constants/eventNames.js.map +1 -0
- package/dist/constants/{hyperLiquidConfig.d.cts → hyperLiquidConfig.d.ts} +12 -12
- package/dist/constants/hyperLiquidConfig.d.ts.map +1 -0
- package/dist/constants/{hyperLiquidConfig.mjs → hyperLiquidConfig.js} +4 -4
- package/dist/constants/hyperLiquidConfig.js.map +1 -0
- package/dist/constants/index.d.ts +12 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +12 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/{myxConfig.d.mts → myxConfig.d.ts} +9 -8
- package/dist/constants/myxConfig.d.ts.map +1 -0
- package/dist/constants/{myxConfig.mjs → myxConfig.js} +2 -2
- package/dist/constants/myxConfig.js.map +1 -0
- package/dist/constants/{orderTypes.d.cts → orderTypes.d.ts} +7 -7
- package/dist/constants/orderTypes.d.ts.map +1 -0
- package/dist/constants/{orderTypes.mjs → orderTypes.js} +1 -1
- package/dist/constants/orderTypes.js.map +1 -0
- package/dist/constants/{performanceMetrics.d.cts → performanceMetrics.d.ts} +1 -1
- package/dist/constants/performanceMetrics.d.ts.map +1 -0
- package/dist/constants/{performanceMetrics.mjs → performanceMetrics.js} +1 -1
- package/dist/constants/performanceMetrics.js.map +1 -0
- package/dist/constants/{perpsConfig.d.mts → perpsConfig.d.ts} +56 -56
- package/dist/constants/perpsConfig.d.ts.map +1 -0
- package/dist/constants/{perpsConfig.mjs → perpsConfig.js} +1 -1
- package/dist/constants/perpsConfig.js.map +1 -0
- package/dist/constants/{transactionsHistoryConfig.d.cts → transactionsHistoryConfig.d.ts} +1 -1
- package/dist/constants/transactionsHistoryConfig.d.ts.map +1 -0
- package/dist/constants/{transactionsHistoryConfig.mjs → transactionsHistoryConfig.js} +1 -1
- package/dist/constants/transactionsHistoryConfig.js.map +1 -0
- package/dist/{index.d.mts → index.d.ts} +64 -64
- package/dist/index.d.ts.map +1 -0
- package/dist/{index.mjs → index.js} +41 -41
- package/dist/index.js.map +1 -0
- package/dist/perpsErrorCodes.d.ts +104 -0
- package/dist/perpsErrorCodes.d.ts.map +1 -0
- package/dist/{perpsErrorCodes.mjs → perpsErrorCodes.js} +1 -1
- package/dist/perpsErrorCodes.js.map +1 -0
- package/dist/providers/{AggregatedPerpsProvider.d.cts → AggregatedPerpsProvider.d.ts} +5 -5
- package/dist/providers/AggregatedPerpsProvider.d.ts.map +1 -0
- package/dist/providers/{AggregatedPerpsProvider.mjs → AggregatedPerpsProvider.js} +5 -5
- package/dist/providers/AggregatedPerpsProvider.js.map +1 -0
- package/dist/providers/{HyperLiquidProvider.d.mts → HyperLiquidProvider.d.ts} +7 -7
- package/dist/providers/HyperLiquidProvider.d.ts.map +1 -0
- package/dist/providers/{HyperLiquidProvider.mjs → HyperLiquidProvider.js} +48 -50
- package/dist/providers/HyperLiquidProvider.js.map +1 -0
- package/dist/routing/{ProviderRouter.d.mts → ProviderRouter.d.ts} +2 -2
- package/dist/routing/ProviderRouter.d.ts.map +1 -0
- package/dist/routing/{ProviderRouter.mjs → ProviderRouter.js} +1 -1
- package/dist/routing/ProviderRouter.js.map +1 -0
- package/dist/routing/index.d.ts +6 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +5 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/{selectors.d.mts → selectors.d.ts} +97 -97
- package/dist/selectors.d.ts.map +1 -0
- package/dist/{selectors.mjs → selectors.js} +4 -4
- package/dist/selectors.js.map +1 -0
- package/dist/services/{AccountService.d.cts → AccountService.d.ts} +4 -4
- package/dist/services/AccountService.d.ts.map +1 -0
- package/dist/services/{AccountService.mjs → AccountService.js} +9 -9
- package/dist/services/AccountService.js.map +1 -0
- package/dist/services/{AggregatedOrderBookConnection.d.cts → AggregatedOrderBookConnection.d.ts} +2 -2
- package/dist/services/AggregatedOrderBookConnection.d.ts.map +1 -0
- package/dist/services/{AggregatedOrderBookConnection.mjs → AggregatedOrderBookConnection.js} +3 -3
- package/dist/services/AggregatedOrderBookConnection.js.map +1 -0
- package/dist/services/{DataLakeService.d.cts → DataLakeService.d.ts} +4 -4
- package/dist/services/DataLakeService.d.ts.map +1 -0
- package/dist/services/{DataLakeService.mjs → DataLakeService.js} +7 -7
- package/dist/services/DataLakeService.js.map +1 -0
- package/dist/services/{DepositService.d.cts → DepositService.d.ts} +4 -4
- package/dist/services/DepositService.d.ts.map +1 -0
- package/dist/services/{DepositService.mjs → DepositService.js} +7 -7
- package/dist/services/DepositService.js.map +1 -0
- package/dist/services/{DexDiscoveryCacheManager.d.cts → DexDiscoveryCacheManager.d.ts} +2 -2
- package/dist/services/DexDiscoveryCacheManager.d.ts.map +1 -0
- package/dist/services/{DexDiscoveryCacheManager.mjs → DexDiscoveryCacheManager.js} +2 -2
- package/dist/services/DexDiscoveryCacheManager.js.map +1 -0
- package/dist/services/{EligibilityService.d.cts → EligibilityService.d.ts} +2 -2
- package/dist/services/EligibilityService.d.ts.map +1 -0
- package/dist/services/{EligibilityService.mjs → EligibilityService.js} +3 -3
- package/dist/services/EligibilityService.js.map +1 -0
- package/dist/services/{FeatureFlagConfigurationService.d.cts → FeatureFlagConfigurationService.d.ts} +3 -3
- package/dist/services/FeatureFlagConfigurationService.d.ts.map +1 -0
- package/dist/services/{FeatureFlagConfigurationService.mjs → FeatureFlagConfigurationService.js} +7 -7
- package/dist/services/FeatureFlagConfigurationService.js.map +1 -0
- package/dist/services/{HyperLiquidClientService.d.cts → HyperLiquidClientService.d.ts} +10 -10
- package/dist/services/HyperLiquidClientService.d.ts.map +1 -0
- package/dist/services/{HyperLiquidClientService.mjs → HyperLiquidClientService.js} +11 -11
- package/dist/services/HyperLiquidClientService.js.map +1 -0
- package/dist/services/{HyperLiquidSubscriptionService.d.cts → HyperLiquidSubscriptionService.d.ts} +6 -6
- package/dist/services/HyperLiquidSubscriptionService.d.ts.map +1 -0
- package/dist/services/{HyperLiquidSubscriptionService.mjs → HyperLiquidSubscriptionService.js} +12 -12
- package/dist/services/HyperLiquidSubscriptionService.js.map +1 -0
- package/dist/services/{HyperLiquidWalletService.d.cts → HyperLiquidWalletService.d.ts} +4 -4
- package/dist/services/HyperLiquidWalletService.d.ts.map +1 -0
- package/dist/services/{HyperLiquidWalletService.mjs → HyperLiquidWalletService.js} +5 -5
- package/dist/services/HyperLiquidWalletService.js.map +1 -0
- package/dist/services/{MarketDataService.d.cts → MarketDataService.d.ts} +5 -5
- package/dist/services/MarketDataService.d.ts.map +1 -0
- package/dist/services/{MarketDataService.mjs → MarketDataService.js} +9 -9
- package/dist/services/MarketDataService.js.map +1 -0
- package/dist/services/{RewardsIntegrationService.d.cts → RewardsIntegrationService.d.ts} +3 -3
- package/dist/services/RewardsIntegrationService.d.ts.map +1 -0
- package/dist/services/{RewardsIntegrationService.mjs → RewardsIntegrationService.js} +6 -6
- package/dist/services/RewardsIntegrationService.js.map +1 -0
- package/dist/services/{ServiceContext.d.cts → ServiceContext.d.ts} +3 -3
- package/dist/services/ServiceContext.d.ts.map +1 -0
- package/dist/services/ServiceContext.js +2 -0
- package/dist/services/ServiceContext.js.map +1 -0
- package/dist/services/{TerminalMarketService.d.cts → TerminalMarketService.d.ts} +2 -2
- package/dist/services/TerminalMarketService.d.ts.map +1 -0
- package/dist/services/{TerminalMarketService.mjs → TerminalMarketService.js} +9 -9
- package/dist/services/TerminalMarketService.js.map +1 -0
- package/dist/services/{TradingReadinessCache.d.mts → TradingReadinessCache.d.ts} +1 -1
- package/dist/services/TradingReadinessCache.d.ts.map +1 -0
- package/dist/services/{TradingReadinessCache.mjs → TradingReadinessCache.js} +1 -1
- package/dist/services/TradingReadinessCache.js.map +1 -0
- package/dist/services/{TradingService.d.cts → TradingService.d.ts} +4 -4
- package/dist/services/TradingService.d.ts.map +1 -0
- package/dist/services/{TradingService.mjs → TradingService.js} +10 -10
- package/dist/services/TradingService.js.map +1 -0
- package/dist/types/{config.d.cts → config.d.ts} +2 -2
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/{hyperliquid-types.d.cts → hyperliquid-types.d.ts} +6 -6
- package/dist/types/hyperliquid-types.d.ts.map +1 -0
- package/dist/types/{hyperliquid-types.mjs → hyperliquid-types.js} +1 -1
- package/dist/types/hyperliquid-types.js.map +1 -0
- package/dist/types/{index.d.cts → index.d.ts} +41 -41
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/{index.mjs → index.js} +3 -3
- package/dist/types/index.js.map +1 -0
- package/dist/types/{messenger.d.mts → messenger.d.ts} +11 -11
- package/dist/types/messenger.d.ts.map +1 -0
- package/dist/types/messenger.js +2 -0
- package/dist/types/messenger.js.map +1 -0
- package/dist/types/{myx-types.d.mts → myx-types.d.ts} +16 -16
- package/dist/types/myx-types.d.ts.map +1 -0
- package/dist/types/{myx-types.mjs → myx-types.js} +3 -3
- package/dist/types/myx-types.js.map +1 -0
- package/dist/types/{perps-types.d.cts → perps-types.d.ts} +4 -4
- package/dist/types/perps-types.d.ts.map +1 -0
- package/dist/types/perps-types.js +2 -0
- package/dist/types/perps-types.js.map +1 -0
- package/dist/types/{token.d.cts → token.d.ts} +2 -2
- package/dist/types/token.d.ts.map +1 -0
- package/dist/types/token.js +2 -0
- package/dist/types/token.js.map +1 -0
- package/dist/types/{transactionTypes.d.cts → transactionTypes.d.ts} +1 -1
- package/dist/types/transactionTypes.d.ts.map +1 -0
- package/dist/types/{transactionTypes.mjs → transactionTypes.js} +2 -2
- package/dist/types/transactionTypes.js.map +1 -0
- package/dist/utils/{accountUtils.d.cts → accountUtils.d.ts} +4 -4
- package/dist/utils/accountUtils.d.ts.map +1 -0
- package/dist/utils/{accountUtils.mjs → accountUtils.js} +2 -2
- package/dist/utils/accountUtils.js.map +1 -0
- package/dist/utils/{capabilitySymbols.d.mts → capabilitySymbols.d.ts} +1 -1
- package/dist/utils/capabilitySymbols.d.ts.map +1 -0
- package/dist/utils/{capabilitySymbols.mjs → capabilitySymbols.js} +1 -1
- package/dist/utils/capabilitySymbols.js.map +1 -0
- package/dist/utils/{coalescePerpsRestRequest.d.cts → coalescePerpsRestRequest.d.ts} +1 -1
- package/dist/utils/coalescePerpsRestRequest.d.ts.map +1 -0
- package/dist/utils/{coalescePerpsRestRequest.mjs → coalescePerpsRestRequest.js} +2 -2
- package/dist/utils/coalescePerpsRestRequest.js.map +1 -0
- package/dist/utils/{errorUtils.d.mts → errorUtils.d.ts} +1 -1
- package/dist/utils/errorUtils.d.ts.map +1 -0
- package/dist/utils/{errorUtils.mjs → errorUtils.js} +3 -3
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/{hyperLiquidAbstraction.d.cts → hyperLiquidAbstraction.d.ts} +2 -2
- package/dist/utils/hyperLiquidAbstraction.d.ts.map +1 -0
- package/dist/utils/{hyperLiquidAbstraction.mjs → hyperLiquidAbstraction.js} +1 -1
- package/dist/utils/hyperLiquidAbstraction.js.map +1 -0
- package/dist/utils/{hyperLiquidAdapter.d.cts → hyperLiquidAdapter.d.ts} +4 -4
- package/dist/utils/hyperLiquidAdapter.d.ts.map +1 -0
- package/dist/utils/{hyperLiquidAdapter.mjs → hyperLiquidAdapter.js} +9 -9
- package/dist/utils/hyperLiquidAdapter.js.map +1 -0
- package/dist/utils/{hyperLiquidOrderBookProcessor.d.mts → hyperLiquidOrderBookProcessor.d.ts} +3 -3
- package/dist/utils/hyperLiquidOrderBookProcessor.d.ts.map +1 -0
- package/dist/utils/{hyperLiquidOrderBookProcessor.mjs → hyperLiquidOrderBookProcessor.js} +1 -1
- package/dist/utils/hyperLiquidOrderBookProcessor.js.map +1 -0
- package/dist/utils/{hyperLiquidValidation.d.cts → hyperLiquidValidation.d.ts} +4 -4
- package/dist/utils/hyperLiquidValidation.d.ts.map +1 -0
- package/dist/utils/{hyperLiquidValidation.mjs → hyperLiquidValidation.js} +6 -6
- package/dist/utils/hyperLiquidValidation.js.map +1 -0
- package/dist/utils/{idUtils.d.cts → idUtils.d.ts} +1 -1
- package/dist/utils/idUtils.d.ts.map +1 -0
- package/dist/utils/{idUtils.mjs → idUtils.js} +2 -2
- package/dist/utils/idUtils.js.map +1 -0
- package/dist/utils/index.d.ts +28 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/{index.mjs → index.js} +21 -21
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/{marketDataTransform.d.cts → marketDataTransform.d.ts} +3 -3
- package/dist/utils/marketDataTransform.d.ts.map +1 -0
- package/dist/utils/{marketDataTransform.mjs → marketDataTransform.js} +5 -5
- package/dist/utils/marketDataTransform.js.map +1 -0
- package/dist/utils/{marketSearch.d.cts → marketSearch.d.ts} +2 -2
- package/dist/utils/marketSearch.d.ts.map +1 -0
- package/dist/utils/{marketSearch.mjs → marketSearch.js} +1 -1
- package/dist/utils/marketSearch.js.map +1 -0
- package/dist/utils/{marketUtils.d.cts → marketUtils.d.ts} +3 -3
- package/dist/utils/marketUtils.d.ts.map +1 -0
- package/dist/utils/{marketUtils.mjs → marketUtils.js} +2 -2
- package/dist/utils/marketUtils.js.map +1 -0
- package/dist/utils/{myxAdapter.d.cts → myxAdapter.d.ts} +3 -3
- package/dist/utils/myxAdapter.d.ts.map +1 -0
- package/dist/utils/{myxAdapter.mjs → myxAdapter.js} +3 -3
- package/dist/utils/myxAdapter.js.map +1 -0
- package/dist/utils/{orderCalculations.d.cts → orderCalculations.d.ts} +4 -4
- package/dist/utils/orderCalculations.d.ts.map +1 -0
- package/dist/utils/{orderCalculations.mjs → orderCalculations.js} +6 -6
- package/dist/utils/orderCalculations.js.map +1 -0
- package/dist/utils/{orderTypes.d.mts → orderTypes.d.ts} +3 -3
- package/dist/utils/orderTypes.d.ts.map +1 -0
- package/dist/utils/{orderTypes.mjs → orderTypes.js} +1 -1
- package/dist/utils/orderTypes.js.map +1 -0
- package/dist/utils/{perpsConnectionAttemptContext.d.mts → perpsConnectionAttemptContext.d.ts} +1 -1
- package/dist/utils/perpsConnectionAttemptContext.d.ts.map +1 -0
- package/dist/utils/{perpsConnectionAttemptContext.mjs → perpsConnectionAttemptContext.js} +1 -1
- package/dist/utils/perpsConnectionAttemptContext.js.map +1 -0
- package/dist/utils/{perpsDiskPersistence.d.cts → perpsDiskPersistence.d.ts} +2 -2
- package/dist/utils/perpsDiskPersistence.d.ts.map +1 -0
- package/dist/utils/{perpsDiskPersistence.mjs → perpsDiskPersistence.js} +2 -2
- package/dist/utils/perpsDiskPersistence.js.map +1 -0
- package/dist/utils/{perpsFormatters.d.cts → perpsFormatters.d.ts} +1 -1
- package/dist/utils/perpsFormatters.d.ts.map +1 -0
- package/dist/utils/{perpsFormatters.mjs → perpsFormatters.js} +2 -2
- package/dist/utils/perpsFormatters.js.map +1 -0
- package/dist/utils/{rewardsUtils.d.cts → rewardsUtils.d.ts} +4 -4
- package/dist/utils/rewardsUtils.d.ts.map +1 -0
- package/dist/utils/{rewardsUtils.mjs → rewardsUtils.js} +4 -4
- package/dist/utils/rewardsUtils.js.map +1 -0
- package/dist/utils/{significantFigures.d.cts → significantFigures.d.ts} +1 -1
- package/dist/utils/significantFigures.d.ts.map +1 -0
- package/dist/utils/{significantFigures.mjs → significantFigures.js} +2 -2
- package/dist/utils/significantFigures.js.map +1 -0
- package/dist/utils/{sortMarkets.d.cts → sortMarkets.d.ts} +2 -2
- package/dist/utils/sortMarkets.d.ts.map +1 -0
- package/dist/utils/{sortMarkets.mjs → sortMarkets.js} +2 -2
- package/dist/utils/sortMarkets.js.map +1 -0
- package/dist/utils/{standaloneInfoClient.d.cts → standaloneInfoClient.d.ts} +3 -3
- package/dist/utils/standaloneInfoClient.d.ts.map +1 -0
- package/dist/utils/{standaloneInfoClient.mjs → standaloneInfoClient.js} +3 -3
- package/dist/utils/standaloneInfoClient.js.map +1 -0
- package/dist/utils/{stringParseUtils.d.cts → stringParseUtils.d.ts} +1 -1
- package/dist/utils/stringParseUtils.d.ts.map +1 -0
- package/dist/utils/{stringParseUtils.mjs → stringParseUtils.js} +1 -1
- package/dist/utils/stringParseUtils.js.map +1 -0
- package/dist/utils/{transferData.d.cts → transferData.d.ts} +1 -1
- package/dist/utils/transferData.d.ts.map +1 -0
- package/dist/utils/{transferData.mjs → transferData.js} +3 -3
- package/dist/utils/transferData.js.map +1 -0
- package/dist/utils/{wait.d.cts → wait.d.ts} +1 -1
- package/dist/utils/wait.d.ts.map +1 -0
- package/dist/utils/{wait.mjs → wait.js} +1 -1
- package/dist/utils/wait.js.map +1 -0
- package/package.json +20 -48
- package/dist/PerpsController-method-action-types.cjs +0 -7
- package/dist/PerpsController-method-action-types.cjs.map +0 -1
- package/dist/PerpsController-method-action-types.d.cts +0 -1163
- package/dist/PerpsController-method-action-types.d.cts.map +0 -1
- package/dist/PerpsController-method-action-types.d.mts.map +0 -1
- package/dist/PerpsController-method-action-types.mjs.map +0 -1
- package/dist/PerpsController.cjs +0 -5063
- package/dist/PerpsController.cjs.map +0 -1
- package/dist/PerpsController.d.cts +0 -1274
- package/dist/PerpsController.d.cts.map +0 -1
- package/dist/PerpsController.d.mts.map +0 -1
- package/dist/PerpsController.mjs.map +0 -1
- package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -441
- package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
- package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
- package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -171
- package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
- package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
- package/dist/aggregation/index.cjs +0 -9
- package/dist/aggregation/index.cjs.map +0 -1
- package/dist/aggregation/index.d.cts +0 -6
- package/dist/aggregation/index.d.cts.map +0 -1
- package/dist/aggregation/index.d.mts +0 -6
- package/dist/aggregation/index.d.mts.map +0 -1
- package/dist/aggregation/index.mjs +0 -5
- package/dist/aggregation/index.mjs.map +0 -1
- package/dist/constants/chartConfig.cjs +0 -239
- package/dist/constants/chartConfig.cjs.map +0 -1
- package/dist/constants/chartConfig.d.cts +0 -228
- package/dist/constants/chartConfig.d.cts.map +0 -1
- package/dist/constants/chartConfig.d.mts.map +0 -1
- package/dist/constants/chartConfig.mjs.map +0 -1
- package/dist/constants/eventNames.cjs +0 -650
- package/dist/constants/eventNames.cjs.map +0 -1
- package/dist/constants/eventNames.d.cts +0 -555
- package/dist/constants/eventNames.d.cts.map +0 -1
- package/dist/constants/eventNames.d.mts +0 -555
- package/dist/constants/eventNames.d.mts.map +0 -1
- package/dist/constants/eventNames.mjs.map +0 -1
- package/dist/constants/hyperLiquidConfig.cjs +0 -607
- package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
- package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
- package/dist/constants/hyperLiquidConfig.d.mts +0 -280
- package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
- package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
- package/dist/constants/index.cjs +0 -28
- package/dist/constants/index.cjs.map +0 -1
- package/dist/constants/index.d.cts +0 -12
- package/dist/constants/index.d.cts.map +0 -1
- package/dist/constants/index.d.mts +0 -12
- package/dist/constants/index.d.mts.map +0 -1
- package/dist/constants/index.mjs +0 -12
- package/dist/constants/index.mjs.map +0 -1
- package/dist/constants/myxConfig.cjs +0 -253
- package/dist/constants/myxConfig.cjs.map +0 -1
- package/dist/constants/myxConfig.d.cts +0 -145
- package/dist/constants/myxConfig.d.cts.map +0 -1
- package/dist/constants/myxConfig.d.mts.map +0 -1
- package/dist/constants/myxConfig.mjs.map +0 -1
- package/dist/constants/orderTypes.cjs +0 -31
- package/dist/constants/orderTypes.cjs.map +0 -1
- package/dist/constants/orderTypes.d.cts.map +0 -1
- package/dist/constants/orderTypes.d.mts +0 -19
- package/dist/constants/orderTypes.d.mts.map +0 -1
- package/dist/constants/orderTypes.mjs.map +0 -1
- package/dist/constants/performanceMetrics.cjs +0 -63
- package/dist/constants/performanceMetrics.cjs.map +0 -1
- package/dist/constants/performanceMetrics.d.cts.map +0 -1
- package/dist/constants/performanceMetrics.d.mts +0 -46
- package/dist/constants/performanceMetrics.d.mts.map +0 -1
- package/dist/constants/performanceMetrics.mjs.map +0 -1
- package/dist/constants/perpsConfig.cjs +0 -553
- package/dist/constants/perpsConfig.cjs.map +0 -1
- package/dist/constants/perpsConfig.d.cts +0 -474
- package/dist/constants/perpsConfig.d.cts.map +0 -1
- package/dist/constants/perpsConfig.d.mts.map +0 -1
- package/dist/constants/perpsConfig.mjs.map +0 -1
- package/dist/constants/transactionsHistoryConfig.cjs +0 -38
- package/dist/constants/transactionsHistoryConfig.cjs.map +0 -1
- package/dist/constants/transactionsHistoryConfig.d.cts.map +0 -1
- package/dist/constants/transactionsHistoryConfig.d.mts +0 -35
- package/dist/constants/transactionsHistoryConfig.d.mts.map +0 -1
- package/dist/constants/transactionsHistoryConfig.mjs.map +0 -1
- package/dist/index.cjs +0 -344
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -92
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/perpsErrorCodes.cjs +0 -127
- package/dist/perpsErrorCodes.cjs.map +0 -1
- package/dist/perpsErrorCodes.d.cts +0 -104
- package/dist/perpsErrorCodes.d.cts.map +0 -1
- package/dist/perpsErrorCodes.d.mts +0 -104
- package/dist/perpsErrorCodes.d.mts.map +0 -1
- package/dist/perpsErrorCodes.mjs.map +0 -1
- package/dist/providers/AggregatedPerpsProvider.cjs +0 -689
- package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
- package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
- package/dist/providers/AggregatedPerpsProvider.d.mts +0 -232
- package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
- package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
- package/dist/providers/HyperLiquidProvider.cjs +0 -10416
- package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
- package/dist/providers/HyperLiquidProvider.d.cts +0 -625
- package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
- package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
- package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
- package/dist/routing/ProviderRouter.cjs +0 -154
- package/dist/routing/ProviderRouter.cjs.map +0 -1
- package/dist/routing/ProviderRouter.d.cts +0 -112
- package/dist/routing/ProviderRouter.d.cts.map +0 -1
- package/dist/routing/ProviderRouter.d.mts.map +0 -1
- package/dist/routing/ProviderRouter.mjs.map +0 -1
- package/dist/routing/index.cjs +0 -9
- package/dist/routing/index.cjs.map +0 -1
- package/dist/routing/index.d.cts +0 -6
- package/dist/routing/index.d.cts.map +0 -1
- package/dist/routing/index.d.mts +0 -6
- package/dist/routing/index.d.mts.map +0 -1
- package/dist/routing/index.mjs +0 -5
- package/dist/routing/index.mjs.map +0 -1
- package/dist/selectors.cjs +0 -264
- package/dist/selectors.cjs.map +0 -1
- package/dist/selectors.d.cts +0 -336
- package/dist/selectors.d.cts.map +0 -1
- package/dist/selectors.d.mts.map +0 -1
- package/dist/selectors.mjs.map +0 -1
- package/dist/services/AccountService.cjs +0 -324
- package/dist/services/AccountService.cjs.map +0 -1
- package/dist/services/AccountService.d.cts.map +0 -1
- package/dist/services/AccountService.d.mts +0 -56
- package/dist/services/AccountService.d.mts.map +0 -1
- package/dist/services/AccountService.mjs.map +0 -1
- package/dist/services/AggregatedOrderBookConnection.cjs +0 -405
- package/dist/services/AggregatedOrderBookConnection.cjs.map +0 -1
- package/dist/services/AggregatedOrderBookConnection.d.cts.map +0 -1
- package/dist/services/AggregatedOrderBookConnection.d.mts +0 -106
- package/dist/services/AggregatedOrderBookConnection.d.mts.map +0 -1
- package/dist/services/AggregatedOrderBookConnection.mjs.map +0 -1
- package/dist/services/DataLakeService.cjs +0 -233
- package/dist/services/DataLakeService.cjs.map +0 -1
- package/dist/services/DataLakeService.d.cts.map +0 -1
- package/dist/services/DataLakeService.d.mts +0 -51
- package/dist/services/DataLakeService.d.mts.map +0 -1
- package/dist/services/DataLakeService.mjs.map +0 -1
- package/dist/services/DepositService.cjs +0 -99
- package/dist/services/DepositService.cjs.map +0 -1
- package/dist/services/DepositService.d.cts.map +0 -1
- package/dist/services/DepositService.d.mts +0 -39
- package/dist/services/DepositService.d.mts.map +0 -1
- package/dist/services/DepositService.mjs.map +0 -1
- package/dist/services/DexDiscoveryCacheManager.cjs +0 -147
- package/dist/services/DexDiscoveryCacheManager.cjs.map +0 -1
- package/dist/services/DexDiscoveryCacheManager.d.cts.map +0 -1
- package/dist/services/DexDiscoveryCacheManager.d.mts +0 -52
- package/dist/services/DexDiscoveryCacheManager.d.mts.map +0 -1
- package/dist/services/DexDiscoveryCacheManager.mjs.map +0 -1
- package/dist/services/EligibilityService.cjs +0 -78
- package/dist/services/EligibilityService.cjs.map +0 -1
- package/dist/services/EligibilityService.d.cts.map +0 -1
- package/dist/services/EligibilityService.d.mts +0 -28
- package/dist/services/EligibilityService.d.mts.map +0 -1
- package/dist/services/EligibilityService.mjs.map +0 -1
- package/dist/services/FeatureFlagConfigurationService.cjs +0 -257
- package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
- package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
- package/dist/services/FeatureFlagConfigurationService.d.mts +0 -73
- package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
- package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
- package/dist/services/HyperLiquidClientService.cjs +0 -1045
- package/dist/services/HyperLiquidClientService.cjs.map +0 -1
- package/dist/services/HyperLiquidClientService.d.cts.map +0 -1
- package/dist/services/HyperLiquidClientService.d.mts +0 -239
- package/dist/services/HyperLiquidClientService.d.mts.map +0 -1
- package/dist/services/HyperLiquidClientService.mjs.map +0 -1
- package/dist/services/HyperLiquidSubscriptionService.cjs +0 -3196
- package/dist/services/HyperLiquidSubscriptionService.cjs.map +0 -1
- package/dist/services/HyperLiquidSubscriptionService.d.cts.map +0 -1
- package/dist/services/HyperLiquidSubscriptionService.d.mts +0 -227
- package/dist/services/HyperLiquidSubscriptionService.d.mts.map +0 -1
- package/dist/services/HyperLiquidSubscriptionService.mjs.map +0 -1
- package/dist/services/HyperLiquidWalletService.cjs +0 -186
- package/dist/services/HyperLiquidWalletService.cjs.map +0 -1
- package/dist/services/HyperLiquidWalletService.d.cts.map +0 -1
- package/dist/services/HyperLiquidWalletService.d.mts +0 -84
- package/dist/services/HyperLiquidWalletService.d.mts.map +0 -1
- package/dist/services/HyperLiquidWalletService.mjs.map +0 -1
- package/dist/services/MarketDataService.cjs +0 -1138
- package/dist/services/MarketDataService.cjs.map +0 -1
- package/dist/services/MarketDataService.d.cts.map +0 -1
- package/dist/services/MarketDataService.d.mts +0 -334
- package/dist/services/MarketDataService.d.mts.map +0 -1
- package/dist/services/MarketDataService.mjs.map +0 -1
- package/dist/services/RewardsIntegrationService.cjs +0 -391
- package/dist/services/RewardsIntegrationService.cjs.map +0 -1
- package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
- package/dist/services/RewardsIntegrationService.d.mts +0 -84
- package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
- package/dist/services/RewardsIntegrationService.mjs.map +0 -1
- package/dist/services/ServiceContext.cjs +0 -3
- package/dist/services/ServiceContext.cjs.map +0 -1
- package/dist/services/ServiceContext.d.cts.map +0 -1
- package/dist/services/ServiceContext.d.mts +0 -102
- package/dist/services/ServiceContext.d.mts.map +0 -1
- package/dist/services/ServiceContext.mjs +0 -2
- package/dist/services/ServiceContext.mjs.map +0 -1
- package/dist/services/TerminalMarketService.cjs +0 -623
- package/dist/services/TerminalMarketService.cjs.map +0 -1
- package/dist/services/TerminalMarketService.d.cts.map +0 -1
- package/dist/services/TerminalMarketService.d.mts +0 -45
- package/dist/services/TerminalMarketService.d.mts.map +0 -1
- package/dist/services/TerminalMarketService.mjs.map +0 -1
- package/dist/services/TradingReadinessCache.cjs +0 -329
- package/dist/services/TradingReadinessCache.cjs.map +0 -1
- package/dist/services/TradingReadinessCache.d.cts +0 -204
- package/dist/services/TradingReadinessCache.d.cts.map +0 -1
- package/dist/services/TradingReadinessCache.d.mts.map +0 -1
- package/dist/services/TradingReadinessCache.mjs.map +0 -1
- package/dist/services/TradingService.cjs +0 -1865
- package/dist/services/TradingService.cjs.map +0 -1
- package/dist/services/TradingService.d.cts.map +0 -1
- package/dist/services/TradingService.d.mts +0 -201
- package/dist/services/TradingService.d.mts.map +0 -1
- package/dist/services/TradingService.mjs.map +0 -1
- package/dist/types/config.cjs +0 -3
- package/dist/types/config.cjs.map +0 -1
- package/dist/types/config.d.cts.map +0 -1
- package/dist/types/config.d.mts +0 -49
- package/dist/types/config.d.mts.map +0 -1
- package/dist/types/config.mjs +0 -2
- package/dist/types/config.mjs.map +0 -1
- package/dist/types/hyperliquid-types.cjs +0 -45
- package/dist/types/hyperliquid-types.cjs.map +0 -1
- package/dist/types/hyperliquid-types.d.cts.map +0 -1
- package/dist/types/hyperliquid-types.d.mts +0 -67
- package/dist/types/hyperliquid-types.d.mts.map +0 -1
- package/dist/types/hyperliquid-types.mjs.map +0 -1
- package/dist/types/index.cjs +0 -151
- package/dist/types/index.cjs.map +0 -1
- package/dist/types/index.d.cts.map +0 -1
- package/dist/types/index.d.mts +0 -1951
- package/dist/types/index.d.mts.map +0 -1
- package/dist/types/index.mjs.map +0 -1
- package/dist/types/messenger.cjs +0 -3
- package/dist/types/messenger.cjs.map +0 -1
- package/dist/types/messenger.d.cts +0 -30
- package/dist/types/messenger.d.cts.map +0 -1
- package/dist/types/messenger.d.mts.map +0 -1
- package/dist/types/messenger.mjs +0 -2
- package/dist/types/messenger.mjs.map +0 -1
- package/dist/types/myx-types.cjs +0 -41
- package/dist/types/myx-types.cjs.map +0 -1
- package/dist/types/myx-types.d.cts +0 -94
- package/dist/types/myx-types.d.cts.map +0 -1
- package/dist/types/myx-types.d.mts.map +0 -1
- package/dist/types/myx-types.mjs.map +0 -1
- package/dist/types/perps-types.cjs +0 -7
- package/dist/types/perps-types.cjs.map +0 -1
- package/dist/types/perps-types.d.cts.map +0 -1
- package/dist/types/perps-types.d.mts +0 -184
- package/dist/types/perps-types.d.mts.map +0 -1
- package/dist/types/perps-types.mjs +0 -5
- package/dist/types/perps-types.mjs.map +0 -1
- package/dist/types/token.cjs +0 -3
- package/dist/types/token.cjs.map +0 -1
- package/dist/types/token.d.cts.map +0 -1
- package/dist/types/token.d.mts +0 -25
- package/dist/types/token.d.mts.map +0 -1
- package/dist/types/token.mjs +0 -2
- package/dist/types/token.mjs.map +0 -1
- package/dist/types/transactionTypes.cjs +0 -29
- package/dist/types/transactionTypes.cjs.map +0 -1
- package/dist/types/transactionTypes.d.cts.map +0 -1
- package/dist/types/transactionTypes.d.mts +0 -60
- package/dist/types/transactionTypes.d.mts.map +0 -1
- package/dist/types/transactionTypes.mjs.map +0 -1
- package/dist/utils/accountUtils.cjs +0 -236
- package/dist/utils/accountUtils.cjs.map +0 -1
- package/dist/utils/accountUtils.d.cts.map +0 -1
- package/dist/utils/accountUtils.d.mts +0 -72
- package/dist/utils/accountUtils.d.mts.map +0 -1
- package/dist/utils/accountUtils.mjs.map +0 -1
- package/dist/utils/capabilitySymbols.cjs +0 -25
- package/dist/utils/capabilitySymbols.cjs.map +0 -1
- package/dist/utils/capabilitySymbols.d.cts +0 -15
- package/dist/utils/capabilitySymbols.d.cts.map +0 -1
- package/dist/utils/capabilitySymbols.d.mts.map +0 -1
- package/dist/utils/capabilitySymbols.mjs.map +0 -1
- package/dist/utils/coalescePerpsRestRequest.cjs +0 -71
- package/dist/utils/coalescePerpsRestRequest.cjs.map +0 -1
- package/dist/utils/coalescePerpsRestRequest.d.cts.map +0 -1
- package/dist/utils/coalescePerpsRestRequest.d.mts +0 -32
- package/dist/utils/coalescePerpsRestRequest.d.mts.map +0 -1
- package/dist/utils/coalescePerpsRestRequest.mjs.map +0 -1
- package/dist/utils/errorUtils.cjs +0 -104
- package/dist/utils/errorUtils.cjs.map +0 -1
- package/dist/utils/errorUtils.d.cts +0 -50
- package/dist/utils/errorUtils.d.cts.map +0 -1
- package/dist/utils/errorUtils.d.mts.map +0 -1
- package/dist/utils/errorUtils.mjs.map +0 -1
- package/dist/utils/hyperLiquidAbstraction.cjs +0 -23
- package/dist/utils/hyperLiquidAbstraction.cjs.map +0 -1
- package/dist/utils/hyperLiquidAbstraction.d.cts.map +0 -1
- package/dist/utils/hyperLiquidAbstraction.d.mts +0 -11
- package/dist/utils/hyperLiquidAbstraction.d.mts.map +0 -1
- package/dist/utils/hyperLiquidAbstraction.mjs.map +0 -1
- package/dist/utils/hyperLiquidAdapter.cjs +0 -512
- package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
- package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
- package/dist/utils/hyperLiquidAdapter.d.mts +0 -77
- package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
- package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -83
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -55
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
- package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
- package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
- package/dist/utils/hyperLiquidValidation.cjs +0 -799
- package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
- package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
- package/dist/utils/hyperLiquidValidation.d.mts +0 -192
- package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
- package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
- package/dist/utils/idUtils.cjs +0 -18
- package/dist/utils/idUtils.cjs.map +0 -1
- package/dist/utils/idUtils.d.cts.map +0 -1
- package/dist/utils/idUtils.d.mts +0 -6
- package/dist/utils/idUtils.d.mts.map +0 -1
- package/dist/utils/idUtils.mjs.map +0 -1
- package/dist/utils/index.cjs +0 -65
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.d.cts +0 -28
- package/dist/utils/index.d.cts.map +0 -1
- package/dist/utils/index.d.mts +0 -28
- package/dist/utils/index.d.mts.map +0 -1
- package/dist/utils/index.mjs.map +0 -1
- package/dist/utils/marketDataTransform.cjs +0 -250
- package/dist/utils/marketDataTransform.cjs.map +0 -1
- package/dist/utils/marketDataTransform.d.cts.map +0 -1
- package/dist/utils/marketDataTransform.d.mts +0 -71
- package/dist/utils/marketDataTransform.d.mts.map +0 -1
- package/dist/utils/marketDataTransform.mjs.map +0 -1
- package/dist/utils/marketSearch.cjs +0 -111
- package/dist/utils/marketSearch.cjs.map +0 -1
- package/dist/utils/marketSearch.d.cts.map +0 -1
- package/dist/utils/marketSearch.d.mts +0 -48
- package/dist/utils/marketSearch.d.mts.map +0 -1
- package/dist/utils/marketSearch.mjs.map +0 -1
- package/dist/utils/marketUtils.cjs +0 -266
- package/dist/utils/marketUtils.cjs.map +0 -1
- package/dist/utils/marketUtils.d.cts.map +0 -1
- package/dist/utils/marketUtils.d.mts +0 -73
- package/dist/utils/marketUtils.d.mts.map +0 -1
- package/dist/utils/marketUtils.mjs.map +0 -1
- package/dist/utils/myxAdapter.cjs +0 -569
- package/dist/utils/myxAdapter.cjs.map +0 -1
- package/dist/utils/myxAdapter.d.cts.map +0 -1
- package/dist/utils/myxAdapter.d.mts +0 -168
- package/dist/utils/myxAdapter.d.mts.map +0 -1
- package/dist/utils/myxAdapter.mjs.map +0 -1
- package/dist/utils/orderCalculations.cjs +0 -823
- package/dist/utils/orderCalculations.cjs.map +0 -1
- package/dist/utils/orderCalculations.d.cts.map +0 -1
- package/dist/utils/orderCalculations.d.mts +0 -298
- package/dist/utils/orderCalculations.d.mts.map +0 -1
- package/dist/utils/orderCalculations.mjs.map +0 -1
- package/dist/utils/orderTypes.cjs +0 -301
- package/dist/utils/orderTypes.cjs.map +0 -1
- package/dist/utils/orderTypes.d.cts +0 -166
- package/dist/utils/orderTypes.d.cts.map +0 -1
- package/dist/utils/orderTypes.d.mts.map +0 -1
- package/dist/utils/orderTypes.mjs.map +0 -1
- package/dist/utils/perpsConnectionAttemptContext.cjs +0 -20
- package/dist/utils/perpsConnectionAttemptContext.cjs.map +0 -1
- package/dist/utils/perpsConnectionAttemptContext.d.cts +0 -7
- package/dist/utils/perpsConnectionAttemptContext.d.cts.map +0 -1
- package/dist/utils/perpsConnectionAttemptContext.d.mts.map +0 -1
- package/dist/utils/perpsConnectionAttemptContext.mjs.map +0 -1
- package/dist/utils/perpsDiskPersistence.cjs +0 -259
- package/dist/utils/perpsDiskPersistence.cjs.map +0 -1
- package/dist/utils/perpsDiskPersistence.d.cts.map +0 -1
- package/dist/utils/perpsDiskPersistence.d.mts +0 -112
- package/dist/utils/perpsDiskPersistence.d.mts.map +0 -1
- package/dist/utils/perpsDiskPersistence.mjs.map +0 -1
- package/dist/utils/perpsFormatters.cjs +0 -509
- package/dist/utils/perpsFormatters.cjs.map +0 -1
- package/dist/utils/perpsFormatters.d.cts.map +0 -1
- package/dist/utils/perpsFormatters.d.mts +0 -204
- package/dist/utils/perpsFormatters.d.mts.map +0 -1
- package/dist/utils/perpsFormatters.mjs.map +0 -1
- package/dist/utils/rewardsUtils.cjs +0 -98
- package/dist/utils/rewardsUtils.cjs.map +0 -1
- package/dist/utils/rewardsUtils.d.cts.map +0 -1
- package/dist/utils/rewardsUtils.d.mts +0 -33
- package/dist/utils/rewardsUtils.d.mts.map +0 -1
- package/dist/utils/rewardsUtils.mjs.map +0 -1
- package/dist/utils/significantFigures.cjs +0 -88
- package/dist/utils/significantFigures.cjs.map +0 -1
- package/dist/utils/significantFigures.d.cts.map +0 -1
- package/dist/utils/significantFigures.d.mts +0 -25
- package/dist/utils/significantFigures.d.mts.map +0 -1
- package/dist/utils/significantFigures.mjs.map +0 -1
- package/dist/utils/sortMarkets.cjs +0 -93
- package/dist/utils/sortMarkets.cjs.map +0 -1
- package/dist/utils/sortMarkets.d.cts.map +0 -1
- package/dist/utils/sortMarkets.d.mts +0 -25
- package/dist/utils/sortMarkets.d.mts.map +0 -1
- package/dist/utils/sortMarkets.mjs.map +0 -1
- package/dist/utils/standaloneInfoClient.cjs +0 -70
- package/dist/utils/standaloneInfoClient.cjs.map +0 -1
- package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
- package/dist/utils/standaloneInfoClient.d.mts +0 -37
- package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
- package/dist/utils/standaloneInfoClient.mjs.map +0 -1
- package/dist/utils/stringParseUtils.cjs +0 -34
- package/dist/utils/stringParseUtils.cjs.map +0 -1
- package/dist/utils/stringParseUtils.d.cts.map +0 -1
- package/dist/utils/stringParseUtils.d.mts +0 -11
- package/dist/utils/stringParseUtils.d.mts.map +0 -1
- package/dist/utils/stringParseUtils.mjs.map +0 -1
- package/dist/utils/transferData.cjs +0 -33
- package/dist/utils/transferData.cjs.map +0 -1
- package/dist/utils/transferData.d.cts.map +0 -1
- package/dist/utils/transferData.d.mts +0 -9
- package/dist/utils/transferData.d.mts.map +0 -1
- package/dist/utils/transferData.mjs.map +0 -1
- package/dist/utils/wait.cjs +0 -6
- package/dist/utils/wait.cjs.map +0 -1
- package/dist/utils/wait.d.cts.map +0 -1
- package/dist/utils/wait.d.mts +0 -2
- package/dist/utils/wait.d.mts.map +0 -1
- package/dist/utils/wait.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalMarketService.cjs","sourceRoot":"","sources":["../../src/services/TerminalMarketService.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n is,\n nullable,\n number,\n object,\n optional,\n string,\n tuple,\n type,\n union,\n} from '@metamask/superstruct';\nimport { bytesToHex, sha256, stringToBytes } from '@metamask/utils';\n\nimport { canonicalizeHyperLiquidDexes } from '../constants/hyperLiquidConfig.js';\nimport {\n PERPS_CONSTANTS,\n TERMINAL_API_CONFIG,\n} from '../constants/perpsConfig.js';\nimport type {\n MarketInfo,\n PerpsGlobalSnapshotRequest,\n PerpsGlobalSnapshotResult,\n PerpsMarketData,\n PerpsPlatformDependencies,\n TerminalAssetMetadata,\n} from '../types/index.js';\nimport { MarketCategory } from '../types/index.js';\nimport { ensureError } from '../utils/errorUtils.js';\nimport { formatChange } from '../utils/marketDataTransform.js';\nimport { clonePerpsMarketData } from '../utils/marketUtils.js';\n\nconst VALID_MARKET_TYPES = new Set<string>(Object.values(MarketCategory));\nconst GLOBAL_SNAPSHOT_SCHEMA_VERSION = 2;\nconst GLOBAL_SNAPSHOT_CONSUMER_MAX_AGE_MS = 30_000;\nconst GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES = 1_048_576;\nconst GLOBAL_SNAPSHOT_PERCENT_TOLERANCE = 0.01;\nconst GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS = 5_000;\nconst MINIMUM_EPOCH_MILLISECONDS = Date.UTC(2000, 0, 1);\nconst DECIMAL_PATTERN = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u;\nconst NON_NEGATIVE_DECIMAL_PATTERN = /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u;\nconst DEX_PATTERN = /^(?:main|[a-z0-9][a-z0-9-]*)$/u;\n\nconst GlobalSnapshotMarketStruct = object({\n symbol: string(),\n provider: string(),\n dex: string(),\n name: nullable(string()),\n description: nullable(string()),\n iconUrl: nullable(string()),\n szDecimals: number(),\n maxLeverage: number(),\n markPrice: string(),\n price: string(),\n midPrice: nullable(string()),\n oraclePrice: string(),\n change24h: string(),\n changePercent24h: number(),\n funding: string(),\n volume24h: string(),\n openInterest: string(),\n category: nullable(string()),\n keywords: nullable(array(string())),\n tags: nullable(array(string())),\n listedAt: nullable(number()),\n trend: array(tuple([number(), string()])),\n});\n\nconst GlobalSnapshotStruct = object({\n schemaVersion: number(),\n provider: string(),\n network: string(),\n enabledDexes: array(string()),\n fingerprint: string(),\n generatedAt: number(),\n receivedAt: number(),\n maxAgeMs: number(),\n complete: boolean(),\n perDexErrors: array(\n object({\n dex: string(),\n error: string(),\n }),\n ),\n markets: array(GlobalSnapshotMarketStruct),\n});\n\ntype GlobalSnapshotMarket = Infer<typeof GlobalSnapshotMarketStruct>;\ntype GlobalSnapshot = Infer<typeof GlobalSnapshotStruct>;\n\n/**\n * Runtime validation schema for a single market item returned by\n * `GET {terminalApi.marketDataUrl}`.\n *\n * Uses `type()` (loose object matching) so that extra fields the API sends\n * (e.g. `price`, `iconUrl`, `trend`) are silently accepted.\n * Each item is individually validated; items that fail validation are\n * filtered out and logged rather than rejecting the entire response.\n */\nconst TerminalPerpetualItemStruct = type({\n symbol: string(),\n name: optional(nullable(string())),\n description: optional(nullable(string())),\n szDecimals: optional(number()),\n maxLeverage: optional(number()),\n marginTableId: optional(number()),\n onlyIsolated: optional(boolean()),\n isDelisted: optional(boolean()),\n minimumOrderSize: optional(number()),\n keywords: optional(nullable(array(string()))),\n tags: optional(nullable(array(string()))),\n categories: optional(nullable(array(string()))),\n marketType: optional(nullable(string())),\n listedAt: optional(nullable(union([number(), string()]))),\n});\n\ntype TerminalPerpetualItem = Infer<typeof TerminalPerpetualItemStruct>;\n\ntype CacheEntry = {\n markets: MarketInfo[];\n metadata: Map<string, TerminalAssetMetadata>;\n timestamp: number;\n};\n\n/**\n * TerminalMarketService\n *\n * Fetches structured market metadata from the MetaMask Terminal API.\n * Caches responses for {@link TERMINAL_API_CONFIG.CacheTtlMs} to avoid\n * redundant network calls across polling cycles.\n *\n * Instance-based service with constructor injection of platform dependencies.\n */\nexport class TerminalMarketService {\n readonly #deps: PerpsPlatformDependencies;\n\n #cache: CacheEntry | null = null;\n\n readonly #globalSnapshotCache = new Map<string, PerpsGlobalSnapshotResult>();\n\n readonly #globalSnapshotInFlight = new Map<\n string,\n Promise<PerpsGlobalSnapshotResult>\n >();\n\n #globalSnapshotGeneration = 0;\n\n constructor(deps: PerpsPlatformDependencies) {\n this.#deps = deps;\n }\n\n /**\n * Fetch markets from the Terminal API.\n * Returns cached data when available and within TTL.\n *\n * @returns Object with mapped MarketInfo array and per-symbol metadata.\n */\n async fetchMarkets(): Promise<{\n markets: MarketInfo[];\n metadata: Map<string, TerminalAssetMetadata>;\n }> {\n if (\n this.#cache &&\n Date.now() - this.#cache.timestamp < TERMINAL_API_CONFIG.CacheTtlMs\n ) {\n return {\n markets: this.#cache.markets,\n metadata: this.#cache.metadata,\n };\n }\n\n const marketDataUrl =\n this.#deps.terminalApi?.marketDataUrl ?? this.#deps.terminalApiUrl;\n if (!marketDataUrl) {\n throw new Error('Terminal API market-data URL not configured');\n }\n\n const url = marketDataUrl;\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(new Error('Terminal API fetch timed out')),\n TERMINAL_API_CONFIG.FetchTimeoutMs,\n );\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (!response.ok) {\n throw new Error(\n `Terminal API returned ${String(response.status)}: ${response.statusText}`,\n );\n }\n\n const body: unknown = await response.json();\n\n if (!Array.isArray(body)) {\n throw new Error(`Terminal API returned non-array body: ${typeof body}`);\n }\n\n const items = this.#validateItems(body);\n const markets = this.#mapToMarketInfo(items);\n const metadata = this.#extractMetadata(items);\n\n this.#cache = { markets, metadata, timestamp: Date.now() };\n return { markets, metadata };\n }\n\n /**\n * Fetch, authenticate by exact identity, and map a schema-v2 atomic market\n * snapshot. Accepted entries remain inside the source freshness window;\n * rejected responses are never cached.\n *\n * @param request - Exact provider/network/DEX identity expected by the client.\n * @returns UI-ready market data and its source-bounded expiry.\n */\n async fetchGlobalSnapshot(\n request: PerpsGlobalSnapshotRequest,\n ): Promise<PerpsGlobalSnapshotResult> {\n const identity = this.#validateRequestedIdentity(request);\n if (!this.#deps.terminalApi?.globalSnapshotUrl) {\n throw new Error('Terminal global snapshot URL not configured');\n }\n\n const url = this.#buildGlobalSnapshotUrl(\n this.#deps.terminalApi.globalSnapshotUrl,\n identity,\n );\n const cacheKey = [\n url,\n String(GLOBAL_SNAPSHOT_SCHEMA_VERSION),\n identity.provider,\n identity.network,\n identity.enabledDexes.join(','),\n ].join('|');\n const now = Date.now();\n const cached = this.#globalSnapshotCache.get(cacheKey);\n if (cached && now < cached.expiresAt) {\n return this.#cloneGlobalSnapshotResult(cached);\n }\n if (cached) {\n this.#globalSnapshotCache.delete(cacheKey);\n }\n\n const existing = this.#globalSnapshotInFlight.get(cacheKey);\n if (existing) {\n return this.#cloneGlobalSnapshotResult(await existing);\n }\n\n const generation = this.#globalSnapshotGeneration;\n const pending = this.#fetchAndValidateGlobalSnapshot(identity, url).then(\n (result) => {\n if (this.#globalSnapshotGeneration !== generation) {\n return result;\n }\n this.#globalSnapshotCache.set(cacheKey, result);\n return result;\n },\n );\n this.#globalSnapshotInFlight.set(cacheKey, pending);\n try {\n return this.#cloneGlobalSnapshotResult(await pending);\n } finally {\n if (this.#globalSnapshotInFlight.get(cacheKey) === pending) {\n this.#globalSnapshotInFlight.delete(cacheKey);\n }\n }\n }\n\n async #fetchAndValidateGlobalSnapshot(\n identity: PerpsGlobalSnapshotRequest,\n url: string,\n ): Promise<PerpsGlobalSnapshotResult> {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(new Error('Terminal global snapshot timed out')),\n TERMINAL_API_CONFIG.FetchTimeoutMs,\n );\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(\n `Terminal global snapshot returned ${String(response.status)}: ${response.statusText}`,\n );\n }\n\n const declaredLength = response.headers?.get('content-length');\n if (\n declaredLength !== null &&\n declaredLength !== undefined &&\n /^\\d+$/u.test(declaredLength) &&\n Number(declaredLength) > GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES\n ) {\n throw new Error('Terminal global snapshot payload exceeds 1 MiB');\n }\n // React Native fetch does not consistently expose a streaming reader.\n // Reject declared oversize bodies before allocation, then enforce the same\n // byte cap after text() for servers that omit Content-Length.\n const text = await response.text();\n if (stringToBytes(text).byteLength > GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES) {\n throw new Error('Terminal global snapshot payload exceeds 1 MiB');\n }\n let body: unknown;\n try {\n body = JSON.parse(text) as unknown;\n } catch {\n throw new Error('Terminal global snapshot returned invalid JSON');\n }\n if (!is(body, GlobalSnapshotStruct)) {\n throw new Error('Terminal global snapshot failed schema validation');\n }\n return this.#validateAndMapGlobalSnapshot(body, identity, Date.now());\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async #validateAndMapGlobalSnapshot(\n snapshot: GlobalSnapshot,\n identity: PerpsGlobalSnapshotRequest,\n now: number,\n ): Promise<PerpsGlobalSnapshotResult> {\n if (snapshot.schemaVersion !== GLOBAL_SNAPSHOT_SCHEMA_VERSION) {\n throw new Error('Terminal global snapshot schema version mismatch');\n }\n if (\n snapshot.provider !== identity.provider ||\n snapshot.network !== identity.network\n ) {\n throw new Error('Terminal global snapshot identity mismatch');\n }\n\n const responseDexes = this.#normalizeDexes(snapshot.enabledDexes);\n if (\n responseDexes.length !== identity.enabledDexes.length ||\n responseDexes.some((dex, index) => dex !== identity.enabledDexes[index])\n ) {\n throw new Error('Terminal global snapshot DEX mismatch');\n }\n const expectedFingerprint = await this.#createFingerprint(identity);\n if (snapshot.fingerprint !== expectedFingerprint) {\n throw new Error('Terminal global snapshot fingerprint mismatch');\n }\n if (!snapshot.complete || snapshot.perDexErrors.length > 0) {\n throw new Error('Terminal global snapshot is incomplete');\n }\n if (\n !this.#isNonNegativeSafeInteger(snapshot.generatedAt) ||\n !this.#isNonNegativeSafeInteger(snapshot.receivedAt) ||\n !this.#isPositiveSafeInteger(snapshot.maxAgeMs) ||\n snapshot.receivedAt > snapshot.generatedAt ||\n snapshot.generatedAt > now + GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS ||\n snapshot.receivedAt > now + GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS\n ) {\n throw new Error('Terminal global snapshot has invalid timestamps');\n }\n\n const trustedMaxAgeMs = Math.min(\n snapshot.maxAgeMs,\n GLOBAL_SNAPSHOT_CONSUMER_MAX_AGE_MS,\n );\n const expiresAt = snapshot.receivedAt + trustedMaxAgeMs;\n if (now >= expiresAt) {\n throw new Error('Terminal global snapshot is stale');\n }\n if (snapshot.markets.length === 0) {\n throw new Error('Terminal global snapshot has no markets');\n }\n\n const marketKeys = new Set<string>();\n const representedDexes = new Set<string>();\n const markets = snapshot.markets\n .map((market, index) => {\n this.#validateSnapshotMarket(\n market,\n identity,\n index,\n snapshot.generatedAt,\n );\n const key = `${market.dex}:${market.symbol}`;\n if (marketKeys.has(key)) {\n throw new Error(`Terminal global snapshot duplicates market ${key}`);\n }\n marketKeys.add(key);\n representedDexes.add(market.dex);\n return market;\n })\n .map((market) => this.#mapSnapshotMarket(market, expiresAt));\n if (identity.enabledDexes.some((dex) => !representedDexes.has(dex))) {\n throw new Error('Terminal global snapshot is missing a requested DEX');\n }\n if (markets.length === 0) {\n throw new Error('Terminal global snapshot has no tradable markets');\n }\n\n return { markets, expiresAt };\n }\n\n #validateRequestedIdentity(\n request: PerpsGlobalSnapshotRequest,\n ): PerpsGlobalSnapshotRequest {\n if (request.provider !== 'hyperliquid') {\n throw new Error('Terminal global snapshot provider is unsupported');\n }\n if (request.network !== 'mainnet' && request.network !== 'testnet') {\n throw new Error('Terminal global snapshot network is unsupported');\n }\n return {\n provider: request.provider,\n network: request.network,\n enabledDexes: this.#normalizeDexes(request.enabledDexes),\n };\n }\n\n #buildGlobalSnapshotUrl(\n baseUrl: string,\n identity: PerpsGlobalSnapshotRequest,\n ): string {\n const query = new URLSearchParams({\n provider: identity.provider,\n network: identity.network,\n dexes: identity.enabledDexes.join(','),\n });\n return `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}${query.toString()}`;\n }\n\n #normalizeDexes(dexes: string[]): string[] {\n if (!Array.isArray(dexes) || dexes.length === 0) {\n throw new Error('Terminal global snapshot requires at least one DEX');\n }\n const normalized = dexes.map((dex) => {\n if (typeof dex !== 'string' || !DEX_PATTERN.test(dex)) {\n throw new Error('Terminal global snapshot contains an invalid DEX');\n }\n return dex;\n });\n if (new Set(normalized).size !== normalized.length) {\n throw new Error('Terminal global snapshot contains duplicate DEXes');\n }\n if (!normalized.includes('main')) {\n throw new Error('Terminal global snapshot requires the main DEX');\n }\n return canonicalizeHyperLiquidDexes(normalized);\n }\n\n async #createFingerprint(\n identity: PerpsGlobalSnapshotRequest,\n ): Promise<string> {\n const canonicalIdentity = JSON.stringify({\n provider: identity.provider,\n network: identity.network,\n enabledDexes: identity.enabledDexes,\n });\n const digest = await sha256(stringToBytes(canonicalIdentity));\n return `sha256:${bytesToHex(digest).slice(2)}`;\n }\n\n #validateSnapshotMarket(\n market: GlobalSnapshotMarket,\n identity: PerpsGlobalSnapshotRequest,\n index: number,\n generatedAt: number,\n ): void {\n const invalid = (field: string): Error =>\n new Error(\n `Terminal global snapshot market ${String(index)} has invalid ${field}`,\n );\n if (!identity.enabledDexes.includes(market.dex)) {\n throw invalid('dex');\n }\n const expectedProvider = market.dex === 'main' ? 'hyperliquid' : market.dex;\n if (market.provider !== expectedProvider) {\n throw invalid('provider');\n }\n const expectedPrefix = market.dex === 'main' ? '' : `${market.dex}:`;\n if (\n market.symbol.length === 0 ||\n (expectedPrefix\n ? !market.symbol.startsWith(expectedPrefix)\n : market.symbol.includes(':'))\n ) {\n throw invalid('symbol');\n }\n if (\n !this.#isNonNegativeSafeInteger(market.szDecimals) ||\n !this.#isPositiveSafeInteger(market.maxLeverage) ||\n (market.listedAt !== null &&\n (!this.#isNonNegativeSafeInteger(market.listedAt) ||\n market.listedAt < MINIMUM_EPOCH_MILLISECONDS ||\n market.listedAt > generatedAt))\n ) {\n throw invalid('integer field');\n }\n\n const decimalFields: [string, string, boolean][] = [\n ['markPrice', market.markPrice, true],\n ['price', market.price, true],\n ['oraclePrice', market.oraclePrice, true],\n ['change24h', market.change24h, false],\n ['volume24h', market.volume24h, true],\n ['openInterest', market.openInterest, true],\n ['funding', market.funding, false],\n ];\n if (market.midPrice !== null) {\n decimalFields.push(['midPrice', market.midPrice, true]);\n }\n for (const [field, value, nonNegative] of decimalFields) {\n const pattern = nonNegative\n ? NON_NEGATIVE_DECIMAL_PATTERN\n : DECIMAL_PATTERN;\n if (!pattern.test(value) || !Number.isFinite(Number(value))) {\n throw invalid(field);\n }\n }\n if (market.price !== market.markPrice) {\n throw invalid('deprecated price alias');\n }\n if (\n Number(market.oraclePrice) <= 0 ||\n (market.midPrice !== null && Number(market.midPrice) <= 0)\n ) {\n throw invalid('reference price');\n }\n const price = Number(market.markPrice);\n const change24h = Number(market.change24h);\n const previousPrice = price - change24h;\n if (price <= 0 || previousPrice <= 0 || !Number.isFinite(previousPrice)) {\n throw invalid('mark/change coherence');\n }\n const derivedPercent = (change24h / previousPrice) * 100;\n if (\n !Number.isFinite(derivedPercent) ||\n !Number.isFinite(market.changePercent24h) ||\n Math.abs(market.changePercent24h - derivedPercent) >\n GLOBAL_SNAPSHOT_PERCENT_TOLERANCE\n ) {\n throw invalid('changePercent24h coherence');\n }\n for (const [field, values] of [\n ['keywords', market.keywords],\n ['tags', market.tags],\n ] as const) {\n if (\n values !== null &&\n (values.some((value) => value.length === 0) ||\n new Set(values).size !== values.length)\n ) {\n throw invalid(field);\n }\n }\n for (const [field, value] of [\n ['name', market.name],\n ['description', market.description],\n ['iconUrl', market.iconUrl],\n ['category', market.category],\n ] as const) {\n if (value !== null && value.length === 0) {\n throw invalid(field);\n }\n }\n let previousTrendTimestamp = -1;\n for (const [timestamp, trendPrice] of market.trend) {\n if (\n !this.#isNonNegativeSafeInteger(timestamp) ||\n timestamp < MINIMUM_EPOCH_MILLISECONDS ||\n timestamp > generatedAt ||\n timestamp <= previousTrendTimestamp ||\n !NON_NEGATIVE_DECIMAL_PATTERN.test(trendPrice) ||\n !Number.isFinite(Number(trendPrice)) ||\n Number(trendPrice) <= 0\n ) {\n throw invalid('trend');\n }\n previousTrendTimestamp = timestamp;\n }\n }\n\n #mapSnapshotMarket(\n market: GlobalSnapshotMarket,\n sourceExpiresAt: number,\n ): PerpsMarketData {\n const formatters = this.#deps.marketDataFormatters;\n // Keep both provider price semantics explicit in the wire contract. Core\n // maps markPrice to its UI price while retaining validation of midPrice.\n const price = Number(market.markPrice);\n const change24h = Number(market.change24h);\n const volume = Number(market.volume24h);\n const openInterest = Number(market.openInterest);\n const isHip3 = market.dex !== 'main';\n const marketType = this.#marketTypeFor(market.dex, market.category);\n\n return {\n symbol: market.symbol,\n name: market.name ?? market.symbol,\n ...(market.description !== null && {\n description: market.description,\n }),\n maxLeverage: `${String(market.maxLeverage)}x`,\n price: formatters.formatPerpsFiat(price, {\n ranges: formatters.priceRangesUniversal,\n }),\n change24h: formatChange(change24h, formatters),\n change24hPercent: formatters.formatPercentage(market.changePercent24h),\n volume: formatters.formatVolume(volume),\n openInterest: formatters.formatVolume(openInterest),\n fundingRate: Number(market.funding),\n marketSource: isHip3 ? market.dex : undefined,\n marketType,\n isHip3,\n isNewMarket: isHip3 && marketType === undefined,\n ...(market.keywords && { keywords: market.keywords }),\n ...(market.tags && { tags: market.tags }),\n ...(market.category && { categories: [market.category] }),\n ...(market.listedAt !== null && { listedAt: market.listedAt }),\n trend: market.trend,\n dataSource: 'terminal-global-snapshot-mark',\n sourceExpiresAt,\n };\n }\n\n #marketTypeFor(\n dex: string,\n category: string | null,\n ): TerminalAssetMetadata['marketType'] | undefined {\n if (dex === 'main') {\n return MarketCategory.CryptoCurrency;\n }\n if (category === 'stocks') {\n return MarketCategory.Stock;\n }\n if (category === 'pre_ipo') {\n return MarketCategory.PreIpo;\n }\n if (category && VALID_MARKET_TYPES.has(category)) {\n return category as TerminalAssetMetadata['marketType'];\n }\n return undefined;\n }\n\n #cloneGlobalSnapshotResult(\n result: PerpsGlobalSnapshotResult,\n ): PerpsGlobalSnapshotResult {\n return {\n expiresAt: result.expiresAt,\n markets: clonePerpsMarketData(result.markets),\n };\n }\n\n #isNonNegativeSafeInteger(value: unknown): value is number {\n return (\n typeof value === 'number' && Number.isSafeInteger(value) && value >= 0\n );\n }\n\n #isPositiveSafeInteger(value: unknown): value is number {\n return this.#isNonNegativeSafeInteger(value) && value > 0;\n }\n\n /**\n * Invalidate the internal cache so the next fetch hits the network.\n */\n clearCache(): void {\n this.#cache = null;\n this.#globalSnapshotGeneration += 1;\n this.#globalSnapshotCache.clear();\n this.#globalSnapshotInFlight.clear();\n }\n\n /**\n * Validate raw API response items against the expected schema.\n * Items that fail validation are filtered out and logged rather than\n * rejecting the entire response.\n *\n * @param raw - The raw array from the API response body.\n * @returns Array of validated items.\n */\n #validateItems(raw: unknown[]): TerminalPerpetualItem[] {\n const valid: TerminalPerpetualItem[] = [];\n for (const item of raw) {\n if (is(item, TerminalPerpetualItemStruct)) {\n valid.push(item);\n } else {\n this.#deps.logger.error(\n ensureError(\n new Error('Terminal API item failed schema validation'),\n 'TerminalMarketService.validateItems',\n ),\n {\n tags: {\n feature: PERPS_CONSTANTS.FeatureName,\n source: 'terminal-api',\n },\n context: {\n name: 'TerminalMarketService.validateItems',\n data: {\n symbol:\n typeof item === 'object' &&\n item !== null &&\n Object.prototype.hasOwnProperty.call(item, 'symbol')\n ? (item as Record<string, unknown>).symbol\n : undefined,\n },\n },\n },\n );\n }\n }\n return valid;\n }\n\n /**\n * Map Terminal API items to the protocol-agnostic MarketInfo shape.\n *\n * @param items - Raw items from the API response.\n * @returns Array of MarketInfo objects.\n */\n #mapToMarketInfo(items: TerminalPerpetualItem[]): MarketInfo[] {\n return items\n .filter(\n (item) => typeof item.symbol === 'string' && item.symbol.length > 0,\n )\n .map((item) => ({\n name: item.symbol,\n szDecimals: item.szDecimals ?? 0,\n maxLeverage: item.maxLeverage ?? 1,\n marginTableId: item.marginTableId ?? 0,\n ...(item.onlyIsolated === true && { onlyIsolated: true as const }),\n ...(item.isDelisted === true && { isDelisted: true as const }),\n ...(item.minimumOrderSize !== undefined && {\n minimumOrderSize: item.minimumOrderSize,\n }),\n }));\n }\n\n /**\n * Extract per-symbol metadata for downstream merge into PerpsMarketData.\n *\n * @param items - Raw items from the API response.\n * @returns Map keyed by symbol with enrichment metadata.\n */\n #extractMetadata(\n items: TerminalPerpetualItem[],\n ): Map<string, TerminalAssetMetadata> {\n const map = new Map<string, TerminalAssetMetadata>();\n\n for (const item of items) {\n if (typeof item.symbol !== 'string' || item.symbol.length === 0) {\n continue;\n }\n\n const entry: TerminalAssetMetadata = {};\n\n if (typeof item.name === 'string' && item.name.length > 0) {\n entry.name = item.name;\n }\n\n if (typeof item.description === 'string' && item.description.length > 0) {\n entry.description = item.description;\n }\n\n if (Array.isArray(item.keywords) && item.keywords.length > 0) {\n entry.keywords = item.keywords;\n }\n if (Array.isArray(item.tags) && item.tags.length > 0) {\n entry.tags = item.tags;\n }\n if (Array.isArray(item.categories) && item.categories.length > 0) {\n entry.categories = item.categories;\n }\n if (\n typeof item.marketType === 'string' &&\n VALID_MARKET_TYPES.has(item.marketType)\n ) {\n entry.marketType =\n item.marketType as TerminalAssetMetadata['marketType'];\n }\n\n if (item.listedAt !== null && item.listedAt !== undefined) {\n const listedAtMs =\n typeof item.listedAt === 'number'\n ? item.listedAt\n : Date.parse(item.listedAt);\n if (isFinite(listedAtMs)) {\n entry.listedAt = listedAtMs;\n }\n }\n\n map.set(item.symbol, entry);\n }\n\n return map;\n }\n\n /**\n * Log a Terminal API error to Sentry without surfacing it to the user.\n *\n * @param error - The caught error.\n * @param method - The calling method name for context.\n */\n logError(error: unknown, method: string): void {\n this.#deps.logger.error(\n ensureError(error, `TerminalMarketService.${method}`),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName, source: 'terminal-api' },\n context: {\n name: `TerminalMarketService.${method}`,\n data: {\n url: method.includes('globalSnapshot')\n ? this.#deps.terminalApi?.globalSnapshotUrl\n : (this.#deps.terminalApi?.marketDataUrl ??\n this.#deps.terminalApiUrl),\n },\n },\n },\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalMarketService.d.cts","sourceRoot":"","sources":["../../src/services/TerminalMarketService.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,UAAU,EACV,0BAA0B,EAC1B,yBAAyB,EAEzB,yBAAyB,EACzB,qBAAqB,EACtB,2BAA0B;AAkG3B;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;;gBAcpB,IAAI,EAAE,yBAAyB;IAI3C;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KAC9C,CAAC;IAuDF;;;;;;;OAOG;IACG,mBAAmB,CACvB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IA8brC;;OAEG;IACH,UAAU,IAAI,IAAI;IAoIlB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAiB/C"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { MarketInfo, PerpsGlobalSnapshotRequest, PerpsGlobalSnapshotResult, PerpsPlatformDependencies, TerminalAssetMetadata } from "../types/index.mjs";
|
|
2
|
-
/**
|
|
3
|
-
* TerminalMarketService
|
|
4
|
-
*
|
|
5
|
-
* Fetches structured market metadata from the MetaMask Terminal API.
|
|
6
|
-
* Caches responses for {@link TERMINAL_API_CONFIG.CacheTtlMs} to avoid
|
|
7
|
-
* redundant network calls across polling cycles.
|
|
8
|
-
*
|
|
9
|
-
* Instance-based service with constructor injection of platform dependencies.
|
|
10
|
-
*/
|
|
11
|
-
export declare class TerminalMarketService {
|
|
12
|
-
#private;
|
|
13
|
-
constructor(deps: PerpsPlatformDependencies);
|
|
14
|
-
/**
|
|
15
|
-
* Fetch markets from the Terminal API.
|
|
16
|
-
* Returns cached data when available and within TTL.
|
|
17
|
-
*
|
|
18
|
-
* @returns Object with mapped MarketInfo array and per-symbol metadata.
|
|
19
|
-
*/
|
|
20
|
-
fetchMarkets(): Promise<{
|
|
21
|
-
markets: MarketInfo[];
|
|
22
|
-
metadata: Map<string, TerminalAssetMetadata>;
|
|
23
|
-
}>;
|
|
24
|
-
/**
|
|
25
|
-
* Fetch, authenticate by exact identity, and map a schema-v2 atomic market
|
|
26
|
-
* snapshot. Accepted entries remain inside the source freshness window;
|
|
27
|
-
* rejected responses are never cached.
|
|
28
|
-
*
|
|
29
|
-
* @param request - Exact provider/network/DEX identity expected by the client.
|
|
30
|
-
* @returns UI-ready market data and its source-bounded expiry.
|
|
31
|
-
*/
|
|
32
|
-
fetchGlobalSnapshot(request: PerpsGlobalSnapshotRequest): Promise<PerpsGlobalSnapshotResult>;
|
|
33
|
-
/**
|
|
34
|
-
* Invalidate the internal cache so the next fetch hits the network.
|
|
35
|
-
*/
|
|
36
|
-
clearCache(): void;
|
|
37
|
-
/**
|
|
38
|
-
* Log a Terminal API error to Sentry without surfacing it to the user.
|
|
39
|
-
*
|
|
40
|
-
* @param error - The caught error.
|
|
41
|
-
* @param method - The calling method name for context.
|
|
42
|
-
*/
|
|
43
|
-
logError(error: unknown, method: string): void;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=TerminalMarketService.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalMarketService.d.mts","sourceRoot":"","sources":["../../src/services/TerminalMarketService.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,UAAU,EACV,0BAA0B,EAC1B,yBAAyB,EAEzB,yBAAyB,EACzB,qBAAqB,EACtB,2BAA0B;AAkG3B;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;;gBAcpB,IAAI,EAAE,yBAAyB;IAI3C;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KAC9C,CAAC;IAuDF;;;;;;;OAOG;IACG,mBAAmB,CACvB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IA8brC;;OAEG;IACH,UAAU,IAAI,IAAI;IAoIlB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAiB/C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalMarketService.mjs","sourceRoot":"","sources":["../../src/services/TerminalMarketService.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n is,\n nullable,\n number,\n object,\n optional,\n string,\n tuple,\n type,\n union,\n} from '@metamask/superstruct';\nimport { bytesToHex, sha256, stringToBytes } from '@metamask/utils';\n\nimport { canonicalizeHyperLiquidDexes } from '../constants/hyperLiquidConfig.js';\nimport {\n PERPS_CONSTANTS,\n TERMINAL_API_CONFIG,\n} from '../constants/perpsConfig.js';\nimport type {\n MarketInfo,\n PerpsGlobalSnapshotRequest,\n PerpsGlobalSnapshotResult,\n PerpsMarketData,\n PerpsPlatformDependencies,\n TerminalAssetMetadata,\n} from '../types/index.js';\nimport { MarketCategory } from '../types/index.js';\nimport { ensureError } from '../utils/errorUtils.js';\nimport { formatChange } from '../utils/marketDataTransform.js';\nimport { clonePerpsMarketData } from '../utils/marketUtils.js';\n\nconst VALID_MARKET_TYPES = new Set<string>(Object.values(MarketCategory));\nconst GLOBAL_SNAPSHOT_SCHEMA_VERSION = 2;\nconst GLOBAL_SNAPSHOT_CONSUMER_MAX_AGE_MS = 30_000;\nconst GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES = 1_048_576;\nconst GLOBAL_SNAPSHOT_PERCENT_TOLERANCE = 0.01;\nconst GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS = 5_000;\nconst MINIMUM_EPOCH_MILLISECONDS = Date.UTC(2000, 0, 1);\nconst DECIMAL_PATTERN = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u;\nconst NON_NEGATIVE_DECIMAL_PATTERN = /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u;\nconst DEX_PATTERN = /^(?:main|[a-z0-9][a-z0-9-]*)$/u;\n\nconst GlobalSnapshotMarketStruct = object({\n symbol: string(),\n provider: string(),\n dex: string(),\n name: nullable(string()),\n description: nullable(string()),\n iconUrl: nullable(string()),\n szDecimals: number(),\n maxLeverage: number(),\n markPrice: string(),\n price: string(),\n midPrice: nullable(string()),\n oraclePrice: string(),\n change24h: string(),\n changePercent24h: number(),\n funding: string(),\n volume24h: string(),\n openInterest: string(),\n category: nullable(string()),\n keywords: nullable(array(string())),\n tags: nullable(array(string())),\n listedAt: nullable(number()),\n trend: array(tuple([number(), string()])),\n});\n\nconst GlobalSnapshotStruct = object({\n schemaVersion: number(),\n provider: string(),\n network: string(),\n enabledDexes: array(string()),\n fingerprint: string(),\n generatedAt: number(),\n receivedAt: number(),\n maxAgeMs: number(),\n complete: boolean(),\n perDexErrors: array(\n object({\n dex: string(),\n error: string(),\n }),\n ),\n markets: array(GlobalSnapshotMarketStruct),\n});\n\ntype GlobalSnapshotMarket = Infer<typeof GlobalSnapshotMarketStruct>;\ntype GlobalSnapshot = Infer<typeof GlobalSnapshotStruct>;\n\n/**\n * Runtime validation schema for a single market item returned by\n * `GET {terminalApi.marketDataUrl}`.\n *\n * Uses `type()` (loose object matching) so that extra fields the API sends\n * (e.g. `price`, `iconUrl`, `trend`) are silently accepted.\n * Each item is individually validated; items that fail validation are\n * filtered out and logged rather than rejecting the entire response.\n */\nconst TerminalPerpetualItemStruct = type({\n symbol: string(),\n name: optional(nullable(string())),\n description: optional(nullable(string())),\n szDecimals: optional(number()),\n maxLeverage: optional(number()),\n marginTableId: optional(number()),\n onlyIsolated: optional(boolean()),\n isDelisted: optional(boolean()),\n minimumOrderSize: optional(number()),\n keywords: optional(nullable(array(string()))),\n tags: optional(nullable(array(string()))),\n categories: optional(nullable(array(string()))),\n marketType: optional(nullable(string())),\n listedAt: optional(nullable(union([number(), string()]))),\n});\n\ntype TerminalPerpetualItem = Infer<typeof TerminalPerpetualItemStruct>;\n\ntype CacheEntry = {\n markets: MarketInfo[];\n metadata: Map<string, TerminalAssetMetadata>;\n timestamp: number;\n};\n\n/**\n * TerminalMarketService\n *\n * Fetches structured market metadata from the MetaMask Terminal API.\n * Caches responses for {@link TERMINAL_API_CONFIG.CacheTtlMs} to avoid\n * redundant network calls across polling cycles.\n *\n * Instance-based service with constructor injection of platform dependencies.\n */\nexport class TerminalMarketService {\n readonly #deps: PerpsPlatformDependencies;\n\n #cache: CacheEntry | null = null;\n\n readonly #globalSnapshotCache = new Map<string, PerpsGlobalSnapshotResult>();\n\n readonly #globalSnapshotInFlight = new Map<\n string,\n Promise<PerpsGlobalSnapshotResult>\n >();\n\n #globalSnapshotGeneration = 0;\n\n constructor(deps: PerpsPlatformDependencies) {\n this.#deps = deps;\n }\n\n /**\n * Fetch markets from the Terminal API.\n * Returns cached data when available and within TTL.\n *\n * @returns Object with mapped MarketInfo array and per-symbol metadata.\n */\n async fetchMarkets(): Promise<{\n markets: MarketInfo[];\n metadata: Map<string, TerminalAssetMetadata>;\n }> {\n if (\n this.#cache &&\n Date.now() - this.#cache.timestamp < TERMINAL_API_CONFIG.CacheTtlMs\n ) {\n return {\n markets: this.#cache.markets,\n metadata: this.#cache.metadata,\n };\n }\n\n const marketDataUrl =\n this.#deps.terminalApi?.marketDataUrl ?? this.#deps.terminalApiUrl;\n if (!marketDataUrl) {\n throw new Error('Terminal API market-data URL not configured');\n }\n\n const url = marketDataUrl;\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(new Error('Terminal API fetch timed out')),\n TERMINAL_API_CONFIG.FetchTimeoutMs,\n );\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (!response.ok) {\n throw new Error(\n `Terminal API returned ${String(response.status)}: ${response.statusText}`,\n );\n }\n\n const body: unknown = await response.json();\n\n if (!Array.isArray(body)) {\n throw new Error(`Terminal API returned non-array body: ${typeof body}`);\n }\n\n const items = this.#validateItems(body);\n const markets = this.#mapToMarketInfo(items);\n const metadata = this.#extractMetadata(items);\n\n this.#cache = { markets, metadata, timestamp: Date.now() };\n return { markets, metadata };\n }\n\n /**\n * Fetch, authenticate by exact identity, and map a schema-v2 atomic market\n * snapshot. Accepted entries remain inside the source freshness window;\n * rejected responses are never cached.\n *\n * @param request - Exact provider/network/DEX identity expected by the client.\n * @returns UI-ready market data and its source-bounded expiry.\n */\n async fetchGlobalSnapshot(\n request: PerpsGlobalSnapshotRequest,\n ): Promise<PerpsGlobalSnapshotResult> {\n const identity = this.#validateRequestedIdentity(request);\n if (!this.#deps.terminalApi?.globalSnapshotUrl) {\n throw new Error('Terminal global snapshot URL not configured');\n }\n\n const url = this.#buildGlobalSnapshotUrl(\n this.#deps.terminalApi.globalSnapshotUrl,\n identity,\n );\n const cacheKey = [\n url,\n String(GLOBAL_SNAPSHOT_SCHEMA_VERSION),\n identity.provider,\n identity.network,\n identity.enabledDexes.join(','),\n ].join('|');\n const now = Date.now();\n const cached = this.#globalSnapshotCache.get(cacheKey);\n if (cached && now < cached.expiresAt) {\n return this.#cloneGlobalSnapshotResult(cached);\n }\n if (cached) {\n this.#globalSnapshotCache.delete(cacheKey);\n }\n\n const existing = this.#globalSnapshotInFlight.get(cacheKey);\n if (existing) {\n return this.#cloneGlobalSnapshotResult(await existing);\n }\n\n const generation = this.#globalSnapshotGeneration;\n const pending = this.#fetchAndValidateGlobalSnapshot(identity, url).then(\n (result) => {\n if (this.#globalSnapshotGeneration !== generation) {\n return result;\n }\n this.#globalSnapshotCache.set(cacheKey, result);\n return result;\n },\n );\n this.#globalSnapshotInFlight.set(cacheKey, pending);\n try {\n return this.#cloneGlobalSnapshotResult(await pending);\n } finally {\n if (this.#globalSnapshotInFlight.get(cacheKey) === pending) {\n this.#globalSnapshotInFlight.delete(cacheKey);\n }\n }\n }\n\n async #fetchAndValidateGlobalSnapshot(\n identity: PerpsGlobalSnapshotRequest,\n url: string,\n ): Promise<PerpsGlobalSnapshotResult> {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(new Error('Terminal global snapshot timed out')),\n TERMINAL_API_CONFIG.FetchTimeoutMs,\n );\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(\n `Terminal global snapshot returned ${String(response.status)}: ${response.statusText}`,\n );\n }\n\n const declaredLength = response.headers?.get('content-length');\n if (\n declaredLength !== null &&\n declaredLength !== undefined &&\n /^\\d+$/u.test(declaredLength) &&\n Number(declaredLength) > GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES\n ) {\n throw new Error('Terminal global snapshot payload exceeds 1 MiB');\n }\n // React Native fetch does not consistently expose a streaming reader.\n // Reject declared oversize bodies before allocation, then enforce the same\n // byte cap after text() for servers that omit Content-Length.\n const text = await response.text();\n if (stringToBytes(text).byteLength > GLOBAL_SNAPSHOT_MAX_PAYLOAD_BYTES) {\n throw new Error('Terminal global snapshot payload exceeds 1 MiB');\n }\n let body: unknown;\n try {\n body = JSON.parse(text) as unknown;\n } catch {\n throw new Error('Terminal global snapshot returned invalid JSON');\n }\n if (!is(body, GlobalSnapshotStruct)) {\n throw new Error('Terminal global snapshot failed schema validation');\n }\n return this.#validateAndMapGlobalSnapshot(body, identity, Date.now());\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async #validateAndMapGlobalSnapshot(\n snapshot: GlobalSnapshot,\n identity: PerpsGlobalSnapshotRequest,\n now: number,\n ): Promise<PerpsGlobalSnapshotResult> {\n if (snapshot.schemaVersion !== GLOBAL_SNAPSHOT_SCHEMA_VERSION) {\n throw new Error('Terminal global snapshot schema version mismatch');\n }\n if (\n snapshot.provider !== identity.provider ||\n snapshot.network !== identity.network\n ) {\n throw new Error('Terminal global snapshot identity mismatch');\n }\n\n const responseDexes = this.#normalizeDexes(snapshot.enabledDexes);\n if (\n responseDexes.length !== identity.enabledDexes.length ||\n responseDexes.some((dex, index) => dex !== identity.enabledDexes[index])\n ) {\n throw new Error('Terminal global snapshot DEX mismatch');\n }\n const expectedFingerprint = await this.#createFingerprint(identity);\n if (snapshot.fingerprint !== expectedFingerprint) {\n throw new Error('Terminal global snapshot fingerprint mismatch');\n }\n if (!snapshot.complete || snapshot.perDexErrors.length > 0) {\n throw new Error('Terminal global snapshot is incomplete');\n }\n if (\n !this.#isNonNegativeSafeInteger(snapshot.generatedAt) ||\n !this.#isNonNegativeSafeInteger(snapshot.receivedAt) ||\n !this.#isPositiveSafeInteger(snapshot.maxAgeMs) ||\n snapshot.receivedAt > snapshot.generatedAt ||\n snapshot.generatedAt > now + GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS ||\n snapshot.receivedAt > now + GLOBAL_SNAPSHOT_MAX_FUTURE_CLOCK_SKEW_MS\n ) {\n throw new Error('Terminal global snapshot has invalid timestamps');\n }\n\n const trustedMaxAgeMs = Math.min(\n snapshot.maxAgeMs,\n GLOBAL_SNAPSHOT_CONSUMER_MAX_AGE_MS,\n );\n const expiresAt = snapshot.receivedAt + trustedMaxAgeMs;\n if (now >= expiresAt) {\n throw new Error('Terminal global snapshot is stale');\n }\n if (snapshot.markets.length === 0) {\n throw new Error('Terminal global snapshot has no markets');\n }\n\n const marketKeys = new Set<string>();\n const representedDexes = new Set<string>();\n const markets = snapshot.markets\n .map((market, index) => {\n this.#validateSnapshotMarket(\n market,\n identity,\n index,\n snapshot.generatedAt,\n );\n const key = `${market.dex}:${market.symbol}`;\n if (marketKeys.has(key)) {\n throw new Error(`Terminal global snapshot duplicates market ${key}`);\n }\n marketKeys.add(key);\n representedDexes.add(market.dex);\n return market;\n })\n .map((market) => this.#mapSnapshotMarket(market, expiresAt));\n if (identity.enabledDexes.some((dex) => !representedDexes.has(dex))) {\n throw new Error('Terminal global snapshot is missing a requested DEX');\n }\n if (markets.length === 0) {\n throw new Error('Terminal global snapshot has no tradable markets');\n }\n\n return { markets, expiresAt };\n }\n\n #validateRequestedIdentity(\n request: PerpsGlobalSnapshotRequest,\n ): PerpsGlobalSnapshotRequest {\n if (request.provider !== 'hyperliquid') {\n throw new Error('Terminal global snapshot provider is unsupported');\n }\n if (request.network !== 'mainnet' && request.network !== 'testnet') {\n throw new Error('Terminal global snapshot network is unsupported');\n }\n return {\n provider: request.provider,\n network: request.network,\n enabledDexes: this.#normalizeDexes(request.enabledDexes),\n };\n }\n\n #buildGlobalSnapshotUrl(\n baseUrl: string,\n identity: PerpsGlobalSnapshotRequest,\n ): string {\n const query = new URLSearchParams({\n provider: identity.provider,\n network: identity.network,\n dexes: identity.enabledDexes.join(','),\n });\n return `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}${query.toString()}`;\n }\n\n #normalizeDexes(dexes: string[]): string[] {\n if (!Array.isArray(dexes) || dexes.length === 0) {\n throw new Error('Terminal global snapshot requires at least one DEX');\n }\n const normalized = dexes.map((dex) => {\n if (typeof dex !== 'string' || !DEX_PATTERN.test(dex)) {\n throw new Error('Terminal global snapshot contains an invalid DEX');\n }\n return dex;\n });\n if (new Set(normalized).size !== normalized.length) {\n throw new Error('Terminal global snapshot contains duplicate DEXes');\n }\n if (!normalized.includes('main')) {\n throw new Error('Terminal global snapshot requires the main DEX');\n }\n return canonicalizeHyperLiquidDexes(normalized);\n }\n\n async #createFingerprint(\n identity: PerpsGlobalSnapshotRequest,\n ): Promise<string> {\n const canonicalIdentity = JSON.stringify({\n provider: identity.provider,\n network: identity.network,\n enabledDexes: identity.enabledDexes,\n });\n const digest = await sha256(stringToBytes(canonicalIdentity));\n return `sha256:${bytesToHex(digest).slice(2)}`;\n }\n\n #validateSnapshotMarket(\n market: GlobalSnapshotMarket,\n identity: PerpsGlobalSnapshotRequest,\n index: number,\n generatedAt: number,\n ): void {\n const invalid = (field: string): Error =>\n new Error(\n `Terminal global snapshot market ${String(index)} has invalid ${field}`,\n );\n if (!identity.enabledDexes.includes(market.dex)) {\n throw invalid('dex');\n }\n const expectedProvider = market.dex === 'main' ? 'hyperliquid' : market.dex;\n if (market.provider !== expectedProvider) {\n throw invalid('provider');\n }\n const expectedPrefix = market.dex === 'main' ? '' : `${market.dex}:`;\n if (\n market.symbol.length === 0 ||\n (expectedPrefix\n ? !market.symbol.startsWith(expectedPrefix)\n : market.symbol.includes(':'))\n ) {\n throw invalid('symbol');\n }\n if (\n !this.#isNonNegativeSafeInteger(market.szDecimals) ||\n !this.#isPositiveSafeInteger(market.maxLeverage) ||\n (market.listedAt !== null &&\n (!this.#isNonNegativeSafeInteger(market.listedAt) ||\n market.listedAt < MINIMUM_EPOCH_MILLISECONDS ||\n market.listedAt > generatedAt))\n ) {\n throw invalid('integer field');\n }\n\n const decimalFields: [string, string, boolean][] = [\n ['markPrice', market.markPrice, true],\n ['price', market.price, true],\n ['oraclePrice', market.oraclePrice, true],\n ['change24h', market.change24h, false],\n ['volume24h', market.volume24h, true],\n ['openInterest', market.openInterest, true],\n ['funding', market.funding, false],\n ];\n if (market.midPrice !== null) {\n decimalFields.push(['midPrice', market.midPrice, true]);\n }\n for (const [field, value, nonNegative] of decimalFields) {\n const pattern = nonNegative\n ? NON_NEGATIVE_DECIMAL_PATTERN\n : DECIMAL_PATTERN;\n if (!pattern.test(value) || !Number.isFinite(Number(value))) {\n throw invalid(field);\n }\n }\n if (market.price !== market.markPrice) {\n throw invalid('deprecated price alias');\n }\n if (\n Number(market.oraclePrice) <= 0 ||\n (market.midPrice !== null && Number(market.midPrice) <= 0)\n ) {\n throw invalid('reference price');\n }\n const price = Number(market.markPrice);\n const change24h = Number(market.change24h);\n const previousPrice = price - change24h;\n if (price <= 0 || previousPrice <= 0 || !Number.isFinite(previousPrice)) {\n throw invalid('mark/change coherence');\n }\n const derivedPercent = (change24h / previousPrice) * 100;\n if (\n !Number.isFinite(derivedPercent) ||\n !Number.isFinite(market.changePercent24h) ||\n Math.abs(market.changePercent24h - derivedPercent) >\n GLOBAL_SNAPSHOT_PERCENT_TOLERANCE\n ) {\n throw invalid('changePercent24h coherence');\n }\n for (const [field, values] of [\n ['keywords', market.keywords],\n ['tags', market.tags],\n ] as const) {\n if (\n values !== null &&\n (values.some((value) => value.length === 0) ||\n new Set(values).size !== values.length)\n ) {\n throw invalid(field);\n }\n }\n for (const [field, value] of [\n ['name', market.name],\n ['description', market.description],\n ['iconUrl', market.iconUrl],\n ['category', market.category],\n ] as const) {\n if (value !== null && value.length === 0) {\n throw invalid(field);\n }\n }\n let previousTrendTimestamp = -1;\n for (const [timestamp, trendPrice] of market.trend) {\n if (\n !this.#isNonNegativeSafeInteger(timestamp) ||\n timestamp < MINIMUM_EPOCH_MILLISECONDS ||\n timestamp > generatedAt ||\n timestamp <= previousTrendTimestamp ||\n !NON_NEGATIVE_DECIMAL_PATTERN.test(trendPrice) ||\n !Number.isFinite(Number(trendPrice)) ||\n Number(trendPrice) <= 0\n ) {\n throw invalid('trend');\n }\n previousTrendTimestamp = timestamp;\n }\n }\n\n #mapSnapshotMarket(\n market: GlobalSnapshotMarket,\n sourceExpiresAt: number,\n ): PerpsMarketData {\n const formatters = this.#deps.marketDataFormatters;\n // Keep both provider price semantics explicit in the wire contract. Core\n // maps markPrice to its UI price while retaining validation of midPrice.\n const price = Number(market.markPrice);\n const change24h = Number(market.change24h);\n const volume = Number(market.volume24h);\n const openInterest = Number(market.openInterest);\n const isHip3 = market.dex !== 'main';\n const marketType = this.#marketTypeFor(market.dex, market.category);\n\n return {\n symbol: market.symbol,\n name: market.name ?? market.symbol,\n ...(market.description !== null && {\n description: market.description,\n }),\n maxLeverage: `${String(market.maxLeverage)}x`,\n price: formatters.formatPerpsFiat(price, {\n ranges: formatters.priceRangesUniversal,\n }),\n change24h: formatChange(change24h, formatters),\n change24hPercent: formatters.formatPercentage(market.changePercent24h),\n volume: formatters.formatVolume(volume),\n openInterest: formatters.formatVolume(openInterest),\n fundingRate: Number(market.funding),\n marketSource: isHip3 ? market.dex : undefined,\n marketType,\n isHip3,\n isNewMarket: isHip3 && marketType === undefined,\n ...(market.keywords && { keywords: market.keywords }),\n ...(market.tags && { tags: market.tags }),\n ...(market.category && { categories: [market.category] }),\n ...(market.listedAt !== null && { listedAt: market.listedAt }),\n trend: market.trend,\n dataSource: 'terminal-global-snapshot-mark',\n sourceExpiresAt,\n };\n }\n\n #marketTypeFor(\n dex: string,\n category: string | null,\n ): TerminalAssetMetadata['marketType'] | undefined {\n if (dex === 'main') {\n return MarketCategory.CryptoCurrency;\n }\n if (category === 'stocks') {\n return MarketCategory.Stock;\n }\n if (category === 'pre_ipo') {\n return MarketCategory.PreIpo;\n }\n if (category && VALID_MARKET_TYPES.has(category)) {\n return category as TerminalAssetMetadata['marketType'];\n }\n return undefined;\n }\n\n #cloneGlobalSnapshotResult(\n result: PerpsGlobalSnapshotResult,\n ): PerpsGlobalSnapshotResult {\n return {\n expiresAt: result.expiresAt,\n markets: clonePerpsMarketData(result.markets),\n };\n }\n\n #isNonNegativeSafeInteger(value: unknown): value is number {\n return (\n typeof value === 'number' && Number.isSafeInteger(value) && value >= 0\n );\n }\n\n #isPositiveSafeInteger(value: unknown): value is number {\n return this.#isNonNegativeSafeInteger(value) && value > 0;\n }\n\n /**\n * Invalidate the internal cache so the next fetch hits the network.\n */\n clearCache(): void {\n this.#cache = null;\n this.#globalSnapshotGeneration += 1;\n this.#globalSnapshotCache.clear();\n this.#globalSnapshotInFlight.clear();\n }\n\n /**\n * Validate raw API response items against the expected schema.\n * Items that fail validation are filtered out and logged rather than\n * rejecting the entire response.\n *\n * @param raw - The raw array from the API response body.\n * @returns Array of validated items.\n */\n #validateItems(raw: unknown[]): TerminalPerpetualItem[] {\n const valid: TerminalPerpetualItem[] = [];\n for (const item of raw) {\n if (is(item, TerminalPerpetualItemStruct)) {\n valid.push(item);\n } else {\n this.#deps.logger.error(\n ensureError(\n new Error('Terminal API item failed schema validation'),\n 'TerminalMarketService.validateItems',\n ),\n {\n tags: {\n feature: PERPS_CONSTANTS.FeatureName,\n source: 'terminal-api',\n },\n context: {\n name: 'TerminalMarketService.validateItems',\n data: {\n symbol:\n typeof item === 'object' &&\n item !== null &&\n Object.prototype.hasOwnProperty.call(item, 'symbol')\n ? (item as Record<string, unknown>).symbol\n : undefined,\n },\n },\n },\n );\n }\n }\n return valid;\n }\n\n /**\n * Map Terminal API items to the protocol-agnostic MarketInfo shape.\n *\n * @param items - Raw items from the API response.\n * @returns Array of MarketInfo objects.\n */\n #mapToMarketInfo(items: TerminalPerpetualItem[]): MarketInfo[] {\n return items\n .filter(\n (item) => typeof item.symbol === 'string' && item.symbol.length > 0,\n )\n .map((item) => ({\n name: item.symbol,\n szDecimals: item.szDecimals ?? 0,\n maxLeverage: item.maxLeverage ?? 1,\n marginTableId: item.marginTableId ?? 0,\n ...(item.onlyIsolated === true && { onlyIsolated: true as const }),\n ...(item.isDelisted === true && { isDelisted: true as const }),\n ...(item.minimumOrderSize !== undefined && {\n minimumOrderSize: item.minimumOrderSize,\n }),\n }));\n }\n\n /**\n * Extract per-symbol metadata for downstream merge into PerpsMarketData.\n *\n * @param items - Raw items from the API response.\n * @returns Map keyed by symbol with enrichment metadata.\n */\n #extractMetadata(\n items: TerminalPerpetualItem[],\n ): Map<string, TerminalAssetMetadata> {\n const map = new Map<string, TerminalAssetMetadata>();\n\n for (const item of items) {\n if (typeof item.symbol !== 'string' || item.symbol.length === 0) {\n continue;\n }\n\n const entry: TerminalAssetMetadata = {};\n\n if (typeof item.name === 'string' && item.name.length > 0) {\n entry.name = item.name;\n }\n\n if (typeof item.description === 'string' && item.description.length > 0) {\n entry.description = item.description;\n }\n\n if (Array.isArray(item.keywords) && item.keywords.length > 0) {\n entry.keywords = item.keywords;\n }\n if (Array.isArray(item.tags) && item.tags.length > 0) {\n entry.tags = item.tags;\n }\n if (Array.isArray(item.categories) && item.categories.length > 0) {\n entry.categories = item.categories;\n }\n if (\n typeof item.marketType === 'string' &&\n VALID_MARKET_TYPES.has(item.marketType)\n ) {\n entry.marketType =\n item.marketType as TerminalAssetMetadata['marketType'];\n }\n\n if (item.listedAt !== null && item.listedAt !== undefined) {\n const listedAtMs =\n typeof item.listedAt === 'number'\n ? item.listedAt\n : Date.parse(item.listedAt);\n if (isFinite(listedAtMs)) {\n entry.listedAt = listedAtMs;\n }\n }\n\n map.set(item.symbol, entry);\n }\n\n return map;\n }\n\n /**\n * Log a Terminal API error to Sentry without surfacing it to the user.\n *\n * @param error - The caught error.\n * @param method - The calling method name for context.\n */\n logError(error: unknown, method: string): void {\n this.#deps.logger.error(\n ensureError(error, `TerminalMarketService.${method}`),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName, source: 'terminal-api' },\n context: {\n name: `TerminalMarketService.${method}`,\n data: {\n url: method.includes('globalSnapshot')\n ? this.#deps.terminalApi?.globalSnapshotUrl\n : (this.#deps.terminalApi?.marketDataUrl ??\n this.#deps.terminalApiUrl),\n },\n },\n },\n );\n }\n}\n"]}
|
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Global singleton cache for Perps signing operations
|
|
4
|
-
*
|
|
5
|
-
* This cache persists across provider reconnections to prevent repeated
|
|
6
|
-
* signing requests for hardware wallets. Critical for preventing repeated
|
|
7
|
-
* hardware wallet signing prompts.
|
|
8
|
-
*
|
|
9
|
-
* Cache is intentionally kept separate from provider instances because providers
|
|
10
|
-
* are recreated on account/network changes, which would reset instance-level caches.
|
|
11
|
-
*
|
|
12
|
-
* Tracks three signing operations:
|
|
13
|
-
* 1. Unified Account enablement (one-time, replaces deprecated DEX abstraction)
|
|
14
|
-
* 2. Builder Fee approval (required for trading)
|
|
15
|
-
* 3. Referral code setup (one-time per account)
|
|
16
|
-
*
|
|
17
|
-
* Cache Structure:
|
|
18
|
-
* - Key: `network:userAddress` (e.g., "mainnet:0x123...")
|
|
19
|
-
* - Value: { unifiedAccount, builderFee, referral, timestamp }
|
|
20
|
-
*
|
|
21
|
-
* Lifecycle:
|
|
22
|
-
* - Cache persists throughout app session
|
|
23
|
-
* - Individual entries can be cleared per user/network
|
|
24
|
-
* - Full cache can be cleared on app restart or explicit user action
|
|
25
|
-
*/
|
|
26
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
27
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
28
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
29
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
30
|
-
};
|
|
31
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
32
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
33
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
34
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
35
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
36
|
-
};
|
|
37
|
-
var _PerpsSigningCacheManager_instances, _a, _PerpsSigningCacheManager_instance, _PerpsSigningCacheManager_cache, _PerpsSigningCacheManager_inFlightOperations, _PerpsSigningCacheManager_getCacheKey, _PerpsSigningCacheManager_getOrCreateEntry;
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.PerpsSigningCache = exports.TradingReadinessCache = void 0;
|
|
40
|
-
class PerpsSigningCacheManager {
|
|
41
|
-
// Singleton: use getInstance() instead of new
|
|
42
|
-
constructor() {
|
|
43
|
-
_PerpsSigningCacheManager_instances.add(this);
|
|
44
|
-
_PerpsSigningCacheManager_cache.set(this, new Map());
|
|
45
|
-
// Global in-flight locks to prevent concurrent signing attempts across providers
|
|
46
|
-
// Key: operationType:network:userAddress, Value: Promise that resolves when operation completes
|
|
47
|
-
_PerpsSigningCacheManager_inFlightOperations.set(this, new Map());
|
|
48
|
-
// Protected constructor for singleton
|
|
49
|
-
}
|
|
50
|
-
static getInstance() {
|
|
51
|
-
var _b;
|
|
52
|
-
__classPrivateFieldSet(_b = _a, _a, __classPrivateFieldGet(_b, _a, "f", _PerpsSigningCacheManager_instance) ?? new _a(), "f", _PerpsSigningCacheManager_instance);
|
|
53
|
-
return __classPrivateFieldGet(_a, _a, "f", _PerpsSigningCacheManager_instance);
|
|
54
|
-
}
|
|
55
|
-
// ===== In-Flight Lock Methods =====
|
|
56
|
-
/**
|
|
57
|
-
* Check if an operation is currently in-flight for this user/network
|
|
58
|
-
*
|
|
59
|
-
* @param operationType - The type of operation being performed.
|
|
60
|
-
* @param network - The network environment.
|
|
61
|
-
* @param userAddress - The user's wallet address.
|
|
62
|
-
* @returns The resulting string value.
|
|
63
|
-
*/
|
|
64
|
-
isInFlight(operationType, network, userAddress) {
|
|
65
|
-
const key = `${operationType}:${network}:${userAddress.toLowerCase()}`;
|
|
66
|
-
return __classPrivateFieldGet(this, _PerpsSigningCacheManager_inFlightOperations, "f").get(key);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Set an operation as in-flight
|
|
70
|
-
* Returns a function to call when operation completes
|
|
71
|
-
*
|
|
72
|
-
* @param operationType - The type of operation being performed.
|
|
73
|
-
* @param network - The network environment.
|
|
74
|
-
* @param userAddress - The user's wallet address.
|
|
75
|
-
* @returns The resulting string value.
|
|
76
|
-
*/
|
|
77
|
-
setInFlight(operationType, network, userAddress) {
|
|
78
|
-
const key = `${operationType}:${network}:${userAddress.toLowerCase()}`;
|
|
79
|
-
let resolvePromise;
|
|
80
|
-
const promise = new Promise((resolve) => {
|
|
81
|
-
resolvePromise = resolve;
|
|
82
|
-
});
|
|
83
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_inFlightOperations, "f").set(key, promise);
|
|
84
|
-
return () => {
|
|
85
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_inFlightOperations, "f").delete(key);
|
|
86
|
-
resolvePromise();
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
// ===== Unified Account Methods =====
|
|
90
|
-
/**
|
|
91
|
-
* Get unified account cache entry (legacy compatibility)
|
|
92
|
-
*
|
|
93
|
-
* @param network - The network environment.
|
|
94
|
-
* @param userAddress - The user's wallet address.
|
|
95
|
-
* @returns The resulting string value.
|
|
96
|
-
*/
|
|
97
|
-
get(network, userAddress) {
|
|
98
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
99
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
100
|
-
if (!entry) {
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
attempted: entry.unifiedAccount.attempted,
|
|
105
|
-
enabled: entry.unifiedAccount.success,
|
|
106
|
-
reason: entry.unifiedAccount.reason,
|
|
107
|
-
timestamp: entry.timestamp,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Set unified account cache entry (legacy compatibility)
|
|
112
|
-
*
|
|
113
|
-
* @param network - The network environment.
|
|
114
|
-
* @param userAddress - The user's wallet address.
|
|
115
|
-
* @param data - The transaction data payload.
|
|
116
|
-
* @param data.attempted - Whether the operation was attempted.
|
|
117
|
-
* @param data.enabled - Whether the feature is enabled.
|
|
118
|
-
* @param data.reason - Optional discriminator explaining a non-success outcome.
|
|
119
|
-
*/
|
|
120
|
-
set(network, userAddress, data) {
|
|
121
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getOrCreateEntry).call(this, network, userAddress);
|
|
122
|
-
entry.unifiedAccount = {
|
|
123
|
-
attempted: data.attempted,
|
|
124
|
-
success: data.enabled,
|
|
125
|
-
reason: data.reason,
|
|
126
|
-
};
|
|
127
|
-
entry.timestamp = Date.now();
|
|
128
|
-
}
|
|
129
|
-
// ===== Builder Fee Methods =====
|
|
130
|
-
/**
|
|
131
|
-
* Check if builder fee approval was attempted
|
|
132
|
-
*
|
|
133
|
-
* @param network - The network environment.
|
|
134
|
-
* @param userAddress - The user's wallet address.
|
|
135
|
-
* @returns The resulting string value.
|
|
136
|
-
*/
|
|
137
|
-
getBuilderFee(network, userAddress) {
|
|
138
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
139
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
140
|
-
return entry?.builderFee;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Set builder fee approval state
|
|
144
|
-
*
|
|
145
|
-
* @param network - The network environment.
|
|
146
|
-
* @param userAddress - The user's wallet address.
|
|
147
|
-
* @param state - The current state.
|
|
148
|
-
*/
|
|
149
|
-
setBuilderFee(network, userAddress, state) {
|
|
150
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getOrCreateEntry).call(this, network, userAddress);
|
|
151
|
-
entry.builderFee = state;
|
|
152
|
-
entry.timestamp = Date.now();
|
|
153
|
-
}
|
|
154
|
-
// ===== Referral Methods =====
|
|
155
|
-
/**
|
|
156
|
-
* Check if referral setup was attempted
|
|
157
|
-
*
|
|
158
|
-
* @param network - The network environment.
|
|
159
|
-
* @param userAddress - The user's wallet address.
|
|
160
|
-
* @returns The resulting string value.
|
|
161
|
-
*/
|
|
162
|
-
getReferral(network, userAddress) {
|
|
163
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
164
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
165
|
-
return entry?.referral;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Set referral setup state
|
|
169
|
-
*
|
|
170
|
-
* @param network - The network environment.
|
|
171
|
-
* @param userAddress - The user's wallet address.
|
|
172
|
-
* @param state - The current state.
|
|
173
|
-
*/
|
|
174
|
-
setReferral(network, userAddress, state) {
|
|
175
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getOrCreateEntry).call(this, network, userAddress);
|
|
176
|
-
entry.referral = state;
|
|
177
|
-
entry.timestamp = Date.now();
|
|
178
|
-
}
|
|
179
|
-
// ===== General Methods =====
|
|
180
|
-
/**
|
|
181
|
-
* Clear only unified account state for a specific network and user address
|
|
182
|
-
* This preserves builder fee and referral states
|
|
183
|
-
*
|
|
184
|
-
* @param network - The network environment.
|
|
185
|
-
* @param userAddress - The user's wallet address.
|
|
186
|
-
*/
|
|
187
|
-
clearUnifiedAccount(network, userAddress) {
|
|
188
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
189
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
190
|
-
if (entry) {
|
|
191
|
-
entry.unifiedAccount = { attempted: false, success: false };
|
|
192
|
-
entry.timestamp = Date.now();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
// ===== Wallet Registration Methods =====
|
|
196
|
-
/**
|
|
197
|
-
* Read the wallet's Hyperliquid registration signal.
|
|
198
|
-
*
|
|
199
|
-
* @param network - The network environment.
|
|
200
|
-
* @param userAddress - The user's wallet address.
|
|
201
|
-
* @returns The current signal, or undefined if no entry exists.
|
|
202
|
-
*/
|
|
203
|
-
getWalletRegistered(network, userAddress) {
|
|
204
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
205
|
-
return __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key)?.walletRegistered;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Record whether the wallet has been observed on Hyperliquid. Once
|
|
209
|
-
* `registered=true` is set, it stays true for the session — the goal
|
|
210
|
-
* is to skip doomed exchange writes for unfunded wallets, not to
|
|
211
|
-
* gate them after they fund.
|
|
212
|
-
*
|
|
213
|
-
* @param network - The network environment.
|
|
214
|
-
* @param userAddress - The user's wallet address.
|
|
215
|
-
* @param registered - True once any evidence (clearinghouseState balance,
|
|
216
|
-
* userFills, successful deposit, ...) confirms the wallet exists on HL.
|
|
217
|
-
*/
|
|
218
|
-
setWalletRegistered(network, userAddress, registered) {
|
|
219
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getOrCreateEntry).call(this, network, userAddress);
|
|
220
|
-
if (entry.walletRegistered.registered && !registered) {
|
|
221
|
-
// Monotonic: once registered, never demote.
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
entry.walletRegistered = { known: true, registered };
|
|
225
|
-
entry.timestamp = Date.now();
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Clear only builder fee state for a specific network and user address
|
|
229
|
-
* This preserves unified account and referral states
|
|
230
|
-
*
|
|
231
|
-
* @param network - The network environment.
|
|
232
|
-
* @param userAddress - The user's wallet address.
|
|
233
|
-
*/
|
|
234
|
-
clearBuilderFee(network, userAddress) {
|
|
235
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
236
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
237
|
-
if (entry) {
|
|
238
|
-
entry.builderFee = { attempted: false, success: false };
|
|
239
|
-
entry.timestamp = Date.now();
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Clear only referral state for a specific network and user address
|
|
244
|
-
* This preserves unified account and builder fee states
|
|
245
|
-
*
|
|
246
|
-
* @param network - The network environment.
|
|
247
|
-
* @param userAddress - The user's wallet address.
|
|
248
|
-
*/
|
|
249
|
-
clearReferral(network, userAddress) {
|
|
250
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
251
|
-
const entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
252
|
-
if (entry) {
|
|
253
|
-
entry.referral = { attempted: false, success: false };
|
|
254
|
-
entry.timestamp = Date.now();
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Clear entire cache entry for a specific network and user address
|
|
259
|
-
* WARNING: This clears ALL signing operation states (unifiedAccount, builderFee, referral)
|
|
260
|
-
*
|
|
261
|
-
* @param network - The network environment.
|
|
262
|
-
* @param userAddress - The user's wallet address.
|
|
263
|
-
*/
|
|
264
|
-
clear(network, userAddress) {
|
|
265
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
266
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").delete(key);
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Clear all cache entries
|
|
270
|
-
* WARNING: This clears ALL signing operation states for ALL users
|
|
271
|
-
*/
|
|
272
|
-
clearAll() {
|
|
273
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").clear();
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Get all cache entries (for debugging)
|
|
277
|
-
*
|
|
278
|
-
* @returns The result of the operation.
|
|
279
|
-
*/
|
|
280
|
-
getAll() {
|
|
281
|
-
return new Map(__classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f"));
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Get cache size (for debugging)
|
|
285
|
-
*
|
|
286
|
-
* @returns The resulting numeric value.
|
|
287
|
-
*/
|
|
288
|
-
size() {
|
|
289
|
-
return __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").size;
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Get full cache state for debugging
|
|
293
|
-
*
|
|
294
|
-
* @returns The resulting string value.
|
|
295
|
-
*/
|
|
296
|
-
debugState() {
|
|
297
|
-
const entries = [];
|
|
298
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").forEach((entry, key) => {
|
|
299
|
-
entries.push(`${key}: unified=${entry.unifiedAccount.attempted}/${entry.unifiedAccount.success}, ` +
|
|
300
|
-
`builder=${entry.builderFee.attempted}/${entry.builderFee.success}, ` +
|
|
301
|
-
`referral=${entry.referral.attempted}/${entry.referral.success}, ` +
|
|
302
|
-
`walletRegistered=${entry.walletRegistered.known}/${entry.walletRegistered.registered}`);
|
|
303
|
-
});
|
|
304
|
-
return entries.join('\n') || '(empty)';
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
_a = PerpsSigningCacheManager, _PerpsSigningCacheManager_cache = new WeakMap(), _PerpsSigningCacheManager_inFlightOperations = new WeakMap(), _PerpsSigningCacheManager_instances = new WeakSet(), _PerpsSigningCacheManager_getCacheKey = function _PerpsSigningCacheManager_getCacheKey(network, userAddress) {
|
|
308
|
-
return `${network}:${userAddress.toLowerCase()}`;
|
|
309
|
-
}, _PerpsSigningCacheManager_getOrCreateEntry = function _PerpsSigningCacheManager_getOrCreateEntry(network, userAddress) {
|
|
310
|
-
const key = __classPrivateFieldGet(this, _PerpsSigningCacheManager_instances, "m", _PerpsSigningCacheManager_getCacheKey).call(this, network, userAddress);
|
|
311
|
-
let entry = __classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").get(key);
|
|
312
|
-
if (!entry) {
|
|
313
|
-
entry = {
|
|
314
|
-
unifiedAccount: { attempted: false, success: false },
|
|
315
|
-
builderFee: { attempted: false, success: false },
|
|
316
|
-
referral: { attempted: false, success: false },
|
|
317
|
-
walletRegistered: { known: false, registered: false },
|
|
318
|
-
timestamp: Date.now(),
|
|
319
|
-
};
|
|
320
|
-
__classPrivateFieldGet(this, _PerpsSigningCacheManager_cache, "f").set(key, entry);
|
|
321
|
-
}
|
|
322
|
-
return entry;
|
|
323
|
-
};
|
|
324
|
-
_PerpsSigningCacheManager_instance = { value: void 0 };
|
|
325
|
-
// Export singleton instance with backward-compatible name
|
|
326
|
-
exports.TradingReadinessCache = PerpsSigningCacheManager.getInstance();
|
|
327
|
-
// Export with new name for clarity
|
|
328
|
-
exports.PerpsSigningCache = PerpsSigningCacheManager.getInstance();
|
|
329
|
-
//# sourceMappingURL=TradingReadinessCache.cjs.map
|