@metamask-previews/perps-controller 0.0.0-preview-685dbf46b → 1.0.0-preview-bc00f2c
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 +30 -2
- package/dist/PerpsController.cjs +3077 -65
- package/dist/PerpsController.cjs.map +1 -1
- package/dist/PerpsController.d.cts +969 -82
- package/dist/PerpsController.d.cts.map +1 -1
- package/dist/PerpsController.d.mts +969 -82
- package/dist/PerpsController.d.mts.map +1 -1
- package/dist/PerpsController.mjs +3073 -62
- package/dist/PerpsController.mjs.map +1 -1
- package/dist/aggregation/SubscriptionMultiplexer.cjs +441 -0
- package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.cts +171 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.mts +171 -0
- package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +1 -0
- package/dist/aggregation/SubscriptionMultiplexer.mjs +437 -0
- package/dist/aggregation/SubscriptionMultiplexer.mjs.map +1 -0
- package/dist/aggregation/index.cjs +9 -0
- package/dist/aggregation/index.cjs.map +1 -0
- package/dist/aggregation/index.d.cts +6 -0
- package/dist/aggregation/index.d.cts.map +1 -0
- package/dist/aggregation/index.d.mts +6 -0
- package/dist/aggregation/index.d.mts.map +1 -0
- package/dist/aggregation/index.mjs +5 -0
- package/dist/aggregation/index.mjs.map +1 -0
- package/dist/constants/chartConfig.cjs +227 -0
- package/dist/constants/chartConfig.cjs.map +1 -0
- package/dist/constants/chartConfig.d.cts +216 -0
- package/dist/constants/chartConfig.d.cts.map +1 -0
- package/dist/constants/chartConfig.d.mts +216 -0
- package/dist/constants/chartConfig.d.mts.map +1 -0
- package/dist/constants/chartConfig.mjs +221 -0
- package/dist/constants/chartConfig.mjs.map +1 -0
- package/dist/constants/eventNames.cjs +436 -0
- package/dist/constants/eventNames.cjs.map +1 -0
- package/dist/constants/eventNames.d.cts +387 -0
- package/dist/constants/eventNames.d.cts.map +1 -0
- package/dist/constants/eventNames.d.mts +387 -0
- package/dist/constants/eventNames.d.mts.map +1 -0
- package/dist/constants/eventNames.mjs +433 -0
- package/dist/constants/eventNames.mjs.map +1 -0
- package/dist/constants/hyperLiquidConfig.cjs +380 -0
- package/dist/constants/hyperLiquidConfig.cjs.map +1 -0
- package/dist/constants/hyperLiquidConfig.d.cts +236 -0
- package/dist/constants/hyperLiquidConfig.d.cts.map +1 -0
- package/dist/constants/hyperLiquidConfig.d.mts +236 -0
- package/dist/constants/hyperLiquidConfig.d.mts.map +1 -0
- package/dist/constants/hyperLiquidConfig.mjs +371 -0
- package/dist/constants/hyperLiquidConfig.mjs.map +1 -0
- package/dist/constants/index.cjs +28 -0
- package/dist/constants/index.cjs.map +1 -0
- package/dist/constants/index.d.cts +12 -0
- package/dist/constants/index.d.cts.map +1 -0
- package/dist/constants/index.d.mts +12 -0
- package/dist/constants/index.d.mts.map +1 -0
- package/dist/constants/index.mjs +12 -0
- package/dist/constants/index.mjs.map +1 -0
- package/dist/constants/myxConfig.cjs +229 -0
- package/dist/constants/myxConfig.cjs.map +1 -0
- package/dist/constants/myxConfig.d.cts +106 -0
- package/dist/constants/myxConfig.d.cts.map +1 -0
- package/dist/constants/myxConfig.d.mts +106 -0
- package/dist/constants/myxConfig.d.mts.map +1 -0
- package/dist/constants/myxConfig.mjs +219 -0
- package/dist/constants/myxConfig.mjs.map +1 -0
- package/dist/constants/orderTypes.cjs +31 -0
- package/dist/constants/orderTypes.cjs.map +1 -0
- package/dist/constants/orderTypes.d.cts +19 -0
- package/dist/constants/orderTypes.d.cts.map +1 -0
- package/dist/constants/orderTypes.d.mts +19 -0
- package/dist/constants/orderTypes.d.mts.map +1 -0
- package/dist/constants/orderTypes.mjs +27 -0
- package/dist/constants/orderTypes.mjs.map +1 -0
- package/dist/constants/performanceMetrics.cjs +63 -0
- package/dist/constants/performanceMetrics.cjs.map +1 -0
- package/dist/constants/performanceMetrics.d.cts +46 -0
- package/dist/constants/performanceMetrics.d.cts.map +1 -0
- package/dist/constants/performanceMetrics.d.mts +46 -0
- package/dist/constants/performanceMetrics.d.mts.map +1 -0
- package/dist/constants/performanceMetrics.mjs +60 -0
- package/dist/constants/performanceMetrics.mjs.map +1 -0
- package/dist/constants/perpsConfig.cjs +295 -0
- package/dist/constants/perpsConfig.cjs.map +1 -0
- package/dist/constants/perpsConfig.d.cts +221 -0
- package/dist/constants/perpsConfig.d.cts.map +1 -0
- package/dist/constants/perpsConfig.d.mts +221 -0
- package/dist/constants/perpsConfig.d.mts.map +1 -0
- package/dist/constants/perpsConfig.mjs +292 -0
- package/dist/constants/perpsConfig.mjs.map +1 -0
- package/dist/constants/transactionsHistoryConfig.cjs +19 -0
- package/dist/constants/transactionsHistoryConfig.cjs.map +1 -0
- package/dist/constants/transactionsHistoryConfig.d.cts +16 -0
- package/dist/constants/transactionsHistoryConfig.d.cts.map +1 -0
- package/dist/constants/transactionsHistoryConfig.d.mts +16 -0
- package/dist/constants/transactionsHistoryConfig.d.mts.map +1 -0
- package/dist/constants/transactionsHistoryConfig.mjs +16 -0
- package/dist/constants/transactionsHistoryConfig.mjs.map +1 -0
- package/dist/index.cjs +63 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +38 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +46 -1
- package/dist/index.mjs.map +1 -1
- package/dist/perpsErrorCodes.cjs +80 -0
- package/dist/perpsErrorCodes.cjs.map +1 -0
- package/dist/perpsErrorCodes.d.cts +65 -0
- package/dist/perpsErrorCodes.d.cts.map +1 -0
- package/dist/perpsErrorCodes.d.mts +65 -0
- package/dist/perpsErrorCodes.d.mts.map +1 -0
- package/dist/perpsErrorCodes.mjs +77 -0
- package/dist/perpsErrorCodes.mjs.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.cjs +508 -0
- package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.d.cts +171 -0
- package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.d.mts +171 -0
- package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -0
- package/dist/providers/AggregatedPerpsProvider.mjs +504 -0
- package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -0
- package/dist/providers/HyperLiquidProvider.cjs +5679 -0
- package/dist/providers/HyperLiquidProvider.cjs.map +1 -0
- package/dist/providers/HyperLiquidProvider.d.cts +516 -0
- package/dist/providers/HyperLiquidProvider.d.cts.map +1 -0
- package/dist/providers/HyperLiquidProvider.d.mts +516 -0
- package/dist/providers/HyperLiquidProvider.d.mts.map +1 -0
- package/dist/providers/HyperLiquidProvider.mjs +5675 -0
- package/dist/providers/HyperLiquidProvider.mjs.map +1 -0
- package/dist/providers/MYXProvider.cjs +514 -0
- package/dist/providers/MYXProvider.cjs.map +1 -0
- package/dist/providers/MYXProvider.d.cts +105 -0
- package/dist/providers/MYXProvider.d.cts.map +1 -0
- package/dist/providers/MYXProvider.d.mts +105 -0
- package/dist/providers/MYXProvider.d.mts.map +1 -0
- package/dist/providers/MYXProvider.mjs +510 -0
- package/dist/providers/MYXProvider.mjs.map +1 -0
- package/dist/routing/ProviderRouter.cjs +154 -0
- package/dist/routing/ProviderRouter.cjs.map +1 -0
- package/dist/routing/ProviderRouter.d.cts +112 -0
- package/dist/routing/ProviderRouter.d.cts.map +1 -0
- package/dist/routing/ProviderRouter.d.mts +112 -0
- package/dist/routing/ProviderRouter.d.mts.map +1 -0
- package/dist/routing/ProviderRouter.mjs +150 -0
- package/dist/routing/ProviderRouter.mjs.map +1 -0
- package/dist/routing/index.cjs +9 -0
- package/dist/routing/index.cjs.map +1 -0
- package/dist/routing/index.d.cts +6 -0
- package/dist/routing/index.d.cts.map +1 -0
- package/dist/routing/index.d.mts +6 -0
- package/dist/routing/index.d.mts.map +1 -0
- package/dist/routing/index.mjs +5 -0
- package/dist/routing/index.mjs.map +1 -0
- package/dist/selectors.cjs +166 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/selectors.d.cts +362 -0
- package/dist/selectors.d.cts.map +1 -0
- package/dist/selectors.d.mts +362 -0
- package/dist/selectors.d.mts.map +1 -0
- package/dist/selectors.mjs +158 -0
- package/dist/selectors.mjs.map +1 -0
- package/dist/services/AccountService.cjs +324 -0
- package/dist/services/AccountService.cjs.map +1 -0
- package/dist/services/AccountService.d.cts +56 -0
- package/dist/services/AccountService.d.cts.map +1 -0
- package/dist/services/AccountService.d.mts +56 -0
- package/dist/services/AccountService.d.mts.map +1 -0
- package/dist/services/AccountService.mjs +320 -0
- package/dist/services/AccountService.mjs.map +1 -0
- package/dist/services/DataLakeService.cjs +233 -0
- package/dist/services/DataLakeService.cjs.map +1 -0
- package/dist/services/DataLakeService.d.cts +51 -0
- package/dist/services/DataLakeService.d.cts.map +1 -0
- package/dist/services/DataLakeService.d.mts +51 -0
- package/dist/services/DataLakeService.d.mts.map +1 -0
- package/dist/services/DataLakeService.mjs +229 -0
- package/dist/services/DataLakeService.mjs.map +1 -0
- package/dist/services/DepositService.cjs +98 -0
- package/dist/services/DepositService.cjs.map +1 -0
- package/dist/services/DepositService.d.cts +39 -0
- package/dist/services/DepositService.d.cts.map +1 -0
- package/dist/services/DepositService.d.mts +39 -0
- package/dist/services/DepositService.d.mts.map +1 -0
- package/dist/services/DepositService.mjs +94 -0
- package/dist/services/DepositService.mjs.map +1 -0
- package/dist/services/EligibilityService.cjs +173 -0
- package/dist/services/EligibilityService.cjs.map +1 -0
- package/dist/services/EligibilityService.d.cts +39 -0
- package/dist/services/EligibilityService.d.cts.map +1 -0
- package/dist/services/EligibilityService.d.mts +39 -0
- package/dist/services/EligibilityService.d.mts.map +1 -0
- package/dist/services/EligibilityService.mjs +169 -0
- package/dist/services/EligibilityService.mjs.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.cjs +257 -0
- package/dist/services/FeatureFlagConfigurationService.cjs.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.d.cts +73 -0
- package/dist/services/FeatureFlagConfigurationService.d.cts.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.d.mts +73 -0
- package/dist/services/FeatureFlagConfigurationService.d.mts.map +1 -0
- package/dist/services/FeatureFlagConfigurationService.mjs +253 -0
- package/dist/services/FeatureFlagConfigurationService.mjs.map +1 -0
- package/dist/services/HyperLiquidClientService.cjs +867 -0
- package/dist/services/HyperLiquidClientService.cjs.map +1 -0
- package/dist/services/HyperLiquidClientService.d.cts +214 -0
- package/dist/services/HyperLiquidClientService.d.cts.map +1 -0
- package/dist/services/HyperLiquidClientService.d.mts +214 -0
- package/dist/services/HyperLiquidClientService.d.mts.map +1 -0
- package/dist/services/HyperLiquidClientService.mjs +862 -0
- package/dist/services/HyperLiquidClientService.mjs.map +1 -0
- package/dist/services/HyperLiquidSubscriptionService.cjs +2199 -0
- package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -0
- package/dist/services/HyperLiquidSubscriptionService.d.cts +187 -0
- package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -0
- package/dist/services/HyperLiquidSubscriptionService.d.mts +187 -0
- package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -0
- package/dist/services/HyperLiquidSubscriptionService.mjs +2195 -0
- package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -0
- package/dist/services/HyperLiquidWalletService.cjs +163 -0
- package/dist/services/HyperLiquidWalletService.cjs.map +1 -0
- package/dist/services/HyperLiquidWalletService.d.cts +78 -0
- package/dist/services/HyperLiquidWalletService.d.cts.map +1 -0
- package/dist/services/HyperLiquidWalletService.d.mts +78 -0
- package/dist/services/HyperLiquidWalletService.d.mts.map +1 -0
- package/dist/services/HyperLiquidWalletService.mjs +159 -0
- package/dist/services/HyperLiquidWalletService.mjs.map +1 -0
- package/dist/services/MYXClientService.cjs +304 -0
- package/dist/services/MYXClientService.cjs.map +1 -0
- package/dist/services/MYXClientService.d.cts +81 -0
- package/dist/services/MYXClientService.d.cts.map +1 -0
- package/dist/services/MYXClientService.d.mts +81 -0
- package/dist/services/MYXClientService.d.mts.map +1 -0
- package/dist/services/MYXClientService.mjs +300 -0
- package/dist/services/MYXClientService.mjs.map +1 -0
- package/dist/services/MarketDataService.cjs +848 -0
- package/dist/services/MarketDataService.cjs.map +1 -0
- package/dist/services/MarketDataService.d.cts +291 -0
- package/dist/services/MarketDataService.d.cts.map +1 -0
- package/dist/services/MarketDataService.d.mts +291 -0
- package/dist/services/MarketDataService.d.mts.map +1 -0
- package/dist/services/MarketDataService.mjs +844 -0
- package/dist/services/MarketDataService.mjs.map +1 -0
- package/dist/services/RewardsIntegrationService.cjs +120 -0
- package/dist/services/RewardsIntegrationService.cjs.map +1 -0
- package/dist/services/RewardsIntegrationService.d.cts +28 -0
- package/dist/services/RewardsIntegrationService.d.cts.map +1 -0
- package/dist/services/RewardsIntegrationService.d.mts +28 -0
- package/dist/services/RewardsIntegrationService.d.mts.map +1 -0
- package/dist/services/RewardsIntegrationService.mjs +116 -0
- package/dist/services/RewardsIntegrationService.mjs.map +1 -0
- package/dist/services/ServiceContext.cjs +3 -0
- package/dist/services/ServiceContext.cjs.map +1 -0
- package/dist/services/ServiceContext.d.cts +86 -0
- package/dist/services/ServiceContext.d.cts.map +1 -0
- package/dist/services/ServiceContext.d.mts +86 -0
- package/dist/services/ServiceContext.d.mts.map +1 -0
- package/dist/services/ServiceContext.mjs +2 -0
- package/dist/services/ServiceContext.mjs.map +1 -0
- package/dist/services/TradingReadinessCache.cjs +288 -0
- package/dist/services/TradingReadinessCache.cjs.map +1 -0
- package/dist/services/TradingReadinessCache.d.cts +174 -0
- package/dist/services/TradingReadinessCache.d.cts.map +1 -0
- package/dist/services/TradingReadinessCache.d.mts +174 -0
- package/dist/services/TradingReadinessCache.d.mts.map +1 -0
- package/dist/services/TradingReadinessCache.mjs +285 -0
- package/dist/services/TradingReadinessCache.mjs.map +1 -0
- package/dist/services/TradingService.cjs +1457 -0
- package/dist/services/TradingService.cjs.map +1 -0
- package/dist/services/TradingService.d.cts +195 -0
- package/dist/services/TradingService.d.cts.map +1 -0
- package/dist/services/TradingService.d.mts +195 -0
- package/dist/services/TradingService.d.mts.map +1 -0
- package/dist/services/TradingService.mjs +1453 -0
- package/dist/services/TradingService.mjs.map +1 -0
- package/dist/types/config.cjs +3 -0
- package/dist/types/config.cjs.map +1 -0
- package/dist/types/config.d.cts +49 -0
- package/dist/types/config.d.cts.map +1 -0
- package/dist/types/config.d.mts +49 -0
- package/dist/types/config.d.mts.map +1 -0
- package/dist/types/config.mjs +2 -0
- package/dist/types/config.mjs.map +1 -0
- package/dist/types/hyperliquid-types.cjs +3 -0
- package/dist/types/hyperliquid-types.cjs.map +1 -0
- package/dist/types/hyperliquid-types.d.cts +20 -0
- package/dist/types/hyperliquid-types.d.cts.map +1 -0
- package/dist/types/hyperliquid-types.d.mts +20 -0
- package/dist/types/hyperliquid-types.d.mts.map +1 -0
- package/dist/types/hyperliquid-types.mjs +2 -0
- package/dist/types/hyperliquid-types.mjs.map +1 -0
- package/dist/types/index.cjs +115 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +1262 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.mts +1262 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/index.mjs +97 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/messenger.cjs +3 -0
- package/dist/types/messenger.cjs.map +1 -0
- package/dist/types/messenger.d.cts +27 -0
- package/dist/types/messenger.d.cts.map +1 -0
- package/dist/types/messenger.d.mts +27 -0
- package/dist/types/messenger.d.mts.map +1 -0
- package/dist/types/messenger.mjs +2 -0
- package/dist/types/messenger.mjs.map +1 -0
- package/dist/types/myx-types.cjs +25 -0
- package/dist/types/myx-types.cjs.map +1 -0
- package/dist/types/myx-types.d.cts +63 -0
- package/dist/types/myx-types.d.cts.map +1 -0
- package/dist/types/myx-types.d.mts +63 -0
- package/dist/types/myx-types.d.mts.map +1 -0
- package/dist/types/myx-types.mjs +22 -0
- package/dist/types/myx-types.mjs.map +1 -0
- package/dist/types/perps-types.cjs +4 -0
- package/dist/types/perps-types.cjs.map +1 -0
- package/dist/types/perps-types.d.cts +105 -0
- package/dist/types/perps-types.d.cts.map +1 -0
- package/dist/types/perps-types.d.mts +105 -0
- package/dist/types/perps-types.d.mts.map +1 -0
- package/dist/types/perps-types.mjs +2 -0
- package/dist/types/perps-types.mjs.map +1 -0
- package/dist/types/token.cjs +3 -0
- package/dist/types/token.cjs.map +1 -0
- package/dist/types/token.d.cts +25 -0
- package/dist/types/token.d.cts.map +1 -0
- package/dist/types/token.d.mts +25 -0
- package/dist/types/token.d.mts.map +1 -0
- package/dist/types/token.mjs +2 -0
- package/dist/types/token.mjs.map +1 -0
- package/dist/types/transactionTypes.cjs +28 -0
- package/dist/types/transactionTypes.cjs.map +1 -0
- package/dist/types/transactionTypes.d.cts +64 -0
- package/dist/types/transactionTypes.d.cts.map +1 -0
- package/dist/types/transactionTypes.d.mts +64 -0
- package/dist/types/transactionTypes.d.mts.map +1 -0
- package/dist/types/transactionTypes.mjs +23 -0
- package/dist/types/transactionTypes.mjs.map +1 -0
- package/dist/utils/accountUtils.cjs +100 -0
- package/dist/utils/accountUtils.cjs.map +1 -0
- package/dist/utils/accountUtils.d.cts +30 -0
- package/dist/utils/accountUtils.d.cts.map +1 -0
- package/dist/utils/accountUtils.d.mts +30 -0
- package/dist/utils/accountUtils.d.mts.map +1 -0
- package/dist/utils/accountUtils.mjs +92 -0
- package/dist/utils/accountUtils.mjs.map +1 -0
- package/dist/utils/errorUtils.cjs +35 -0
- package/dist/utils/errorUtils.cjs.map +1 -0
- package/dist/utils/errorUtils.d.cts +15 -0
- package/dist/utils/errorUtils.d.cts.map +1 -0
- package/dist/utils/errorUtils.d.mts +15 -0
- package/dist/utils/errorUtils.d.mts.map +1 -0
- package/dist/utils/errorUtils.mjs +31 -0
- package/dist/utils/errorUtils.mjs.map +1 -0
- package/dist/utils/hyperLiquidAdapter.cjs +331 -0
- package/dist/utils/hyperLiquidAdapter.cjs.map +1 -0
- package/dist/utils/hyperLiquidAdapter.d.cts +42 -0
- package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -0
- package/dist/utils/hyperLiquidAdapter.d.mts +42 -0
- package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -0
- package/dist/utils/hyperLiquidAdapter.mjs +316 -0
- package/dist/utils/hyperLiquidAdapter.mjs.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs +83 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +55 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +55 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +1 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.mjs +78 -0
- package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +1 -0
- package/dist/utils/hyperLiquidValidation.cjs +426 -0
- package/dist/utils/hyperLiquidValidation.cjs.map +1 -0
- package/dist/utils/hyperLiquidValidation.d.cts +143 -0
- package/dist/utils/hyperLiquidValidation.d.cts.map +1 -0
- package/dist/utils/hyperLiquidValidation.d.mts +143 -0
- package/dist/utils/hyperLiquidValidation.d.mts.map +1 -0
- package/dist/utils/hyperLiquidValidation.mjs +413 -0
- package/dist/utils/hyperLiquidValidation.mjs.map +1 -0
- package/dist/utils/idUtils.cjs +18 -0
- package/dist/utils/idUtils.cjs.map +1 -0
- package/dist/utils/idUtils.d.cts +6 -0
- package/dist/utils/idUtils.d.cts.map +1 -0
- package/dist/utils/idUtils.d.mts +6 -0
- package/dist/utils/idUtils.d.mts.map +1 -0
- package/dist/utils/idUtils.mjs +10 -0
- package/dist/utils/idUtils.mjs.map +1 -0
- package/dist/utils/index.cjs +59 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +25 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +25 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +30 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/marketDataTransform.cjs +211 -0
- package/dist/utils/marketDataTransform.cjs.map +1 -0
- package/dist/utils/marketDataTransform.d.cts +40 -0
- package/dist/utils/marketDataTransform.d.cts.map +1 -0
- package/dist/utils/marketDataTransform.d.mts +40 -0
- package/dist/utils/marketDataTransform.d.mts.map +1 -0
- package/dist/utils/marketDataTransform.mjs +205 -0
- package/dist/utils/marketDataTransform.mjs.map +1 -0
- package/dist/utils/marketUtils.cjs +151 -0
- package/dist/utils/marketUtils.cjs.map +1 -0
- package/dist/utils/marketUtils.d.cts +30 -0
- package/dist/utils/marketUtils.d.cts.map +1 -0
- package/dist/utils/marketUtils.d.mts +30 -0
- package/dist/utils/marketUtils.d.mts.map +1 -0
- package/dist/utils/marketUtils.mjs +138 -0
- package/dist/utils/marketUtils.mjs.map +1 -0
- package/dist/utils/myxAdapter.cjs +224 -0
- package/dist/utils/myxAdapter.cjs.map +1 -0
- package/dist/utils/myxAdapter.d.cts +81 -0
- package/dist/utils/myxAdapter.d.cts.map +1 -0
- package/dist/utils/myxAdapter.d.mts +81 -0
- package/dist/utils/myxAdapter.d.mts.map +1 -0
- package/dist/utils/myxAdapter.mjs +213 -0
- package/dist/utils/myxAdapter.mjs.map +1 -0
- package/dist/utils/orderCalculations.cjs +283 -0
- package/dist/utils/orderCalculations.cjs.map +1 -0
- package/dist/utils/orderCalculations.d.cts +107 -0
- package/dist/utils/orderCalculations.d.cts.map +1 -0
- package/dist/utils/orderCalculations.d.mts +107 -0
- package/dist/utils/orderCalculations.d.mts.map +1 -0
- package/dist/utils/orderCalculations.mjs +274 -0
- package/dist/utils/orderCalculations.mjs.map +1 -0
- package/dist/utils/rewardsUtils.cjs +98 -0
- package/dist/utils/rewardsUtils.cjs.map +1 -0
- package/dist/utils/rewardsUtils.d.cts +33 -0
- package/dist/utils/rewardsUtils.d.cts.map +1 -0
- package/dist/utils/rewardsUtils.d.mts +33 -0
- package/dist/utils/rewardsUtils.d.mts.map +1 -0
- package/dist/utils/rewardsUtils.mjs +92 -0
- package/dist/utils/rewardsUtils.mjs.map +1 -0
- package/dist/utils/significantFigures.cjs +88 -0
- package/dist/utils/significantFigures.cjs.map +1 -0
- package/dist/utils/significantFigures.d.cts +25 -0
- package/dist/utils/significantFigures.d.cts.map +1 -0
- package/dist/utils/significantFigures.d.mts +25 -0
- package/dist/utils/significantFigures.d.mts.map +1 -0
- package/dist/utils/significantFigures.mjs +82 -0
- package/dist/utils/significantFigures.mjs.map +1 -0
- package/dist/utils/sortMarkets.cjs +93 -0
- package/dist/utils/sortMarkets.cjs.map +1 -0
- package/dist/utils/sortMarkets.d.cts +27 -0
- package/dist/utils/sortMarkets.d.cts.map +1 -0
- package/dist/utils/sortMarkets.d.mts +27 -0
- package/dist/utils/sortMarkets.d.mts.map +1 -0
- package/dist/utils/sortMarkets.mjs +88 -0
- package/dist/utils/sortMarkets.mjs.map +1 -0
- package/dist/utils/standaloneInfoClient.cjs +70 -0
- package/dist/utils/standaloneInfoClient.cjs.map +1 -0
- package/dist/utils/standaloneInfoClient.d.cts +37 -0
- package/dist/utils/standaloneInfoClient.d.cts.map +1 -0
- package/dist/utils/standaloneInfoClient.d.mts +37 -0
- package/dist/utils/standaloneInfoClient.d.mts.map +1 -0
- package/dist/utils/standaloneInfoClient.mjs +64 -0
- package/dist/utils/standaloneInfoClient.mjs.map +1 -0
- package/dist/utils/stringParseUtils.cjs +18 -0
- package/dist/utils/stringParseUtils.cjs.map +1 -0
- package/dist/utils/stringParseUtils.d.cts +3 -0
- package/dist/utils/stringParseUtils.d.cts.map +1 -0
- package/dist/utils/stringParseUtils.d.mts +3 -0
- package/dist/utils/stringParseUtils.d.mts.map +1 -0
- package/dist/utils/stringParseUtils.mjs +13 -0
- package/dist/utils/stringParseUtils.mjs.map +1 -0
- package/dist/utils/transferData.cjs +33 -0
- package/dist/utils/transferData.cjs.map +1 -0
- package/dist/utils/transferData.d.cts +9 -0
- package/dist/utils/transferData.d.cts.map +1 -0
- package/dist/utils/transferData.d.mts +9 -0
- package/dist/utils/transferData.d.mts.map +1 -0
- package/dist/utils/transferData.mjs +29 -0
- package/dist/utils/transferData.mjs.map +1 -0
- package/dist/utils/wait.cjs +6 -0
- package/dist/utils/wait.cjs.map +1 -0
- package/dist/utils/wait.d.cts +2 -0
- package/dist/utils/wait.d.cts.map +1 -0
- package/dist/utils/wait.d.mts +2 -0
- package/dist/utils/wait.d.mts.map +1 -0
- package/dist/utils/wait.mjs +2 -0
- package/dist/utils/wait.mjs.map +1 -0
- package/package.json +16 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountUtils.cjs","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Account utilities for Perps components\n * Handles account selection and EVM account filtering\n */\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig';\nimport type { AccountState, PerpsInternalAccount } from '../types';\n\nconst EVM_ACCOUNT_TYPES = new Set(['eip155:eoa', 'eip155:erc4337']);\n\nfunction isEvmAccountType(type: string): boolean {\n return EVM_ACCOUNT_TYPES.has(type);\n}\n\nexport function findEvmAccount(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string; type: string } | null {\n const evmAccount = accounts.find(\n (account) => account && isEvmAccountType(account.type),\n );\n return evmAccount ?? null;\n}\n\nexport function getEvmAccountFromAccountGroup(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string } | undefined {\n const evmAccount = findEvmAccount(accounts);\n return evmAccount ? { address: evmAccount.address } : undefined;\n}\n\nexport function getSelectedEvmAccount(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string } | undefined {\n return getEvmAccountFromAccountGroup(accounts);\n}\n\nexport type ReturnOnEquityInput = {\n unrealizedPnl: string | number;\n returnOnEquity: string | number;\n};\n\nexport function calculateWeightedReturnOnEquity(\n accounts: ReturnOnEquityInput[],\n): string {\n if (accounts.length === 0) {\n return '0';\n }\n\n let totalWeightedROE = 0;\n let totalMarginUsed = 0;\n\n for (const account of accounts) {\n const unrealizedPnl =\n typeof account.unrealizedPnl === 'string'\n ? Number.parseFloat(account.unrealizedPnl)\n : account.unrealizedPnl;\n const returnOnEquity =\n typeof account.returnOnEquity === 'string'\n ? Number.parseFloat(account.returnOnEquity)\n : account.returnOnEquity;\n\n if (Number.isNaN(unrealizedPnl) || Number.isNaN(returnOnEquity)) {\n continue;\n }\n\n if (returnOnEquity === 0) {\n continue;\n }\n\n const marginUsed = (unrealizedPnl / returnOnEquity) * 100;\n\n if (Number.isNaN(marginUsed) || marginUsed <= 0) {\n continue;\n }\n\n const roeDecimal = returnOnEquity / 100;\n\n totalWeightedROE += roeDecimal * marginUsed;\n totalMarginUsed += marginUsed;\n }\n\n if (totalMarginUsed <= 0) {\n return '0';\n }\n\n const weightedROE = (totalWeightedROE / totalMarginUsed) * 100;\n return weightedROE.toString();\n}\n\n/**\n * Aggregate multiple per-DEX AccountState objects into one by summing numeric fields.\n * ROE is recalculated as (totalUnrealizedPnl / totalMarginUsed) * 100.\n *\n * @param states - The array of per-DEX account states to aggregate.\n * @returns The combined account state with summed balances and recalculated ROE.\n */\nexport function aggregateAccountStates(states: AccountState[]): AccountState {\n const fallback: AccountState = {\n availableBalance: PERPS_CONSTANTS.FallbackDataDisplay,\n totalBalance: PERPS_CONSTANTS.FallbackDataDisplay,\n marginUsed: PERPS_CONSTANTS.FallbackDataDisplay,\n unrealizedPnl: PERPS_CONSTANTS.FallbackDataDisplay,\n returnOnEquity: PERPS_CONSTANTS.FallbackDataDisplay,\n };\n\n if (states.length === 0) {\n return fallback;\n }\n\n const aggregated = states.reduce<AccountState>((acc, state, index) => {\n if (index === 0) {\n return { ...state };\n }\n return {\n availableBalance: (\n parseFloat(acc.availableBalance) + parseFloat(state.availableBalance)\n ).toString(),\n totalBalance: (\n parseFloat(acc.totalBalance) + parseFloat(state.totalBalance)\n ).toString(),\n marginUsed: (\n parseFloat(acc.marginUsed) + parseFloat(state.marginUsed)\n ).toString(),\n unrealizedPnl: (\n parseFloat(acc.unrealizedPnl) + parseFloat(state.unrealizedPnl)\n ).toString(),\n returnOnEquity: '0',\n };\n }, fallback);\n\n // Recalculate ROE across all DEXs\n const totalMarginUsed = parseFloat(aggregated.marginUsed);\n const totalUnrealizedPnl = parseFloat(aggregated.unrealizedPnl);\n if (totalMarginUsed > 0) {\n aggregated.returnOnEquity = (\n (totalUnrealizedPnl / totalMarginUsed) *\n 100\n ).toString();\n } else {\n aggregated.returnOnEquity = '0';\n }\n\n return aggregated;\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account utilities for Perps components
|
|
3
|
+
* Handles account selection and EVM account filtering
|
|
4
|
+
*/
|
|
5
|
+
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
6
|
+
import type { AccountState, PerpsInternalAccount } from "../types/index.cjs";
|
|
7
|
+
export declare function findEvmAccount(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
8
|
+
address: string;
|
|
9
|
+
type: string;
|
|
10
|
+
} | null;
|
|
11
|
+
export declare function getEvmAccountFromAccountGroup(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
12
|
+
address: string;
|
|
13
|
+
} | undefined;
|
|
14
|
+
export declare function getSelectedEvmAccount(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
15
|
+
address: string;
|
|
16
|
+
} | undefined;
|
|
17
|
+
export type ReturnOnEquityInput = {
|
|
18
|
+
unrealizedPnl: string | number;
|
|
19
|
+
returnOnEquity: string | number;
|
|
20
|
+
};
|
|
21
|
+
export declare function calculateWeightedReturnOnEquity(accounts: ReturnOnEquityInput[]): string;
|
|
22
|
+
/**
|
|
23
|
+
* Aggregate multiple per-DEX AccountState objects into one by summing numeric fields.
|
|
24
|
+
* ROE is recalculated as (totalUnrealizedPnl / totalMarginUsed) * 100.
|
|
25
|
+
*
|
|
26
|
+
* @param states - The array of per-DEX account states to aggregate.
|
|
27
|
+
* @returns The combined account state with summed balances and recalculated ROE.
|
|
28
|
+
*/
|
|
29
|
+
export declare function aggregateAccountStates(states: AccountState[]): AccountState;
|
|
30
|
+
//# sourceMappingURL=accountUtils.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountUtils.d.cts","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,2BAAiB;AAQnE,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK1C;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAGjC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEjC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,MAAM,CA4CR;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CA+C3E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account utilities for Perps components
|
|
3
|
+
* Handles account selection and EVM account filtering
|
|
4
|
+
*/
|
|
5
|
+
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
6
|
+
import type { AccountState, PerpsInternalAccount } from "../types/index.mjs";
|
|
7
|
+
export declare function findEvmAccount(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
8
|
+
address: string;
|
|
9
|
+
type: string;
|
|
10
|
+
} | null;
|
|
11
|
+
export declare function getEvmAccountFromAccountGroup(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
12
|
+
address: string;
|
|
13
|
+
} | undefined;
|
|
14
|
+
export declare function getSelectedEvmAccount(accounts: (InternalAccount | PerpsInternalAccount)[]): {
|
|
15
|
+
address: string;
|
|
16
|
+
} | undefined;
|
|
17
|
+
export type ReturnOnEquityInput = {
|
|
18
|
+
unrealizedPnl: string | number;
|
|
19
|
+
returnOnEquity: string | number;
|
|
20
|
+
};
|
|
21
|
+
export declare function calculateWeightedReturnOnEquity(accounts: ReturnOnEquityInput[]): string;
|
|
22
|
+
/**
|
|
23
|
+
* Aggregate multiple per-DEX AccountState objects into one by summing numeric fields.
|
|
24
|
+
* ROE is recalculated as (totalUnrealizedPnl / totalMarginUsed) * 100.
|
|
25
|
+
*
|
|
26
|
+
* @param states - The array of per-DEX account states to aggregate.
|
|
27
|
+
* @returns The combined account state with summed balances and recalculated ROE.
|
|
28
|
+
*/
|
|
29
|
+
export declare function aggregateAccountStates(states: AccountState[]): AccountState;
|
|
30
|
+
//# sourceMappingURL=accountUtils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountUtils.d.mts","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,2BAAiB;AAQnE,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK1C;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAGjC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,GACnD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEjC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,MAAM,CA4CR;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CA+C3E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { PERPS_CONSTANTS } from "../constants/perpsConfig.mjs";
|
|
2
|
+
const EVM_ACCOUNT_TYPES = new Set(['eip155:eoa', 'eip155:erc4337']);
|
|
3
|
+
function isEvmAccountType(type) {
|
|
4
|
+
return EVM_ACCOUNT_TYPES.has(type);
|
|
5
|
+
}
|
|
6
|
+
export function findEvmAccount(accounts) {
|
|
7
|
+
const evmAccount = accounts.find((account) => account && isEvmAccountType(account.type));
|
|
8
|
+
return evmAccount ?? null;
|
|
9
|
+
}
|
|
10
|
+
export function getEvmAccountFromAccountGroup(accounts) {
|
|
11
|
+
const evmAccount = findEvmAccount(accounts);
|
|
12
|
+
return evmAccount ? { address: evmAccount.address } : undefined;
|
|
13
|
+
}
|
|
14
|
+
export function getSelectedEvmAccount(accounts) {
|
|
15
|
+
return getEvmAccountFromAccountGroup(accounts);
|
|
16
|
+
}
|
|
17
|
+
export function calculateWeightedReturnOnEquity(accounts) {
|
|
18
|
+
if (accounts.length === 0) {
|
|
19
|
+
return '0';
|
|
20
|
+
}
|
|
21
|
+
let totalWeightedROE = 0;
|
|
22
|
+
let totalMarginUsed = 0;
|
|
23
|
+
for (const account of accounts) {
|
|
24
|
+
const unrealizedPnl = typeof account.unrealizedPnl === 'string'
|
|
25
|
+
? Number.parseFloat(account.unrealizedPnl)
|
|
26
|
+
: account.unrealizedPnl;
|
|
27
|
+
const returnOnEquity = typeof account.returnOnEquity === 'string'
|
|
28
|
+
? Number.parseFloat(account.returnOnEquity)
|
|
29
|
+
: account.returnOnEquity;
|
|
30
|
+
if (Number.isNaN(unrealizedPnl) || Number.isNaN(returnOnEquity)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (returnOnEquity === 0) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const marginUsed = (unrealizedPnl / returnOnEquity) * 100;
|
|
37
|
+
if (Number.isNaN(marginUsed) || marginUsed <= 0) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const roeDecimal = returnOnEquity / 100;
|
|
41
|
+
totalWeightedROE += roeDecimal * marginUsed;
|
|
42
|
+
totalMarginUsed += marginUsed;
|
|
43
|
+
}
|
|
44
|
+
if (totalMarginUsed <= 0) {
|
|
45
|
+
return '0';
|
|
46
|
+
}
|
|
47
|
+
const weightedROE = (totalWeightedROE / totalMarginUsed) * 100;
|
|
48
|
+
return weightedROE.toString();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Aggregate multiple per-DEX AccountState objects into one by summing numeric fields.
|
|
52
|
+
* ROE is recalculated as (totalUnrealizedPnl / totalMarginUsed) * 100.
|
|
53
|
+
*
|
|
54
|
+
* @param states - The array of per-DEX account states to aggregate.
|
|
55
|
+
* @returns The combined account state with summed balances and recalculated ROE.
|
|
56
|
+
*/
|
|
57
|
+
export function aggregateAccountStates(states) {
|
|
58
|
+
const fallback = {
|
|
59
|
+
availableBalance: PERPS_CONSTANTS.FallbackDataDisplay,
|
|
60
|
+
totalBalance: PERPS_CONSTANTS.FallbackDataDisplay,
|
|
61
|
+
marginUsed: PERPS_CONSTANTS.FallbackDataDisplay,
|
|
62
|
+
unrealizedPnl: PERPS_CONSTANTS.FallbackDataDisplay,
|
|
63
|
+
returnOnEquity: PERPS_CONSTANTS.FallbackDataDisplay,
|
|
64
|
+
};
|
|
65
|
+
if (states.length === 0) {
|
|
66
|
+
return fallback;
|
|
67
|
+
}
|
|
68
|
+
const aggregated = states.reduce((acc, state, index) => {
|
|
69
|
+
if (index === 0) {
|
|
70
|
+
return { ...state };
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
availableBalance: (parseFloat(acc.availableBalance) + parseFloat(state.availableBalance)).toString(),
|
|
74
|
+
totalBalance: (parseFloat(acc.totalBalance) + parseFloat(state.totalBalance)).toString(),
|
|
75
|
+
marginUsed: (parseFloat(acc.marginUsed) + parseFloat(state.marginUsed)).toString(),
|
|
76
|
+
unrealizedPnl: (parseFloat(acc.unrealizedPnl) + parseFloat(state.unrealizedPnl)).toString(),
|
|
77
|
+
returnOnEquity: '0',
|
|
78
|
+
};
|
|
79
|
+
}, fallback);
|
|
80
|
+
// Recalculate ROE across all DEXs
|
|
81
|
+
const totalMarginUsed = parseFloat(aggregated.marginUsed);
|
|
82
|
+
const totalUnrealizedPnl = parseFloat(aggregated.unrealizedPnl);
|
|
83
|
+
if (totalMarginUsed > 0) {
|
|
84
|
+
aggregated.returnOnEquity = ((totalUnrealizedPnl / totalMarginUsed) *
|
|
85
|
+
100).toString();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
aggregated.returnOnEquity = '0';
|
|
89
|
+
}
|
|
90
|
+
return aggregated;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=accountUtils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountUtils.mjs","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,qCAAiC;AAG3D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEpE,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAoD;IAEpD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAC9B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CACvD,CAAC;IACF,OAAO,UAAU,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,QAAoD;IAEpD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAoD;IAEpD,OAAO,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAOD,MAAM,UAAU,+BAA+B,CAC7C,QAA+B;IAE/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GACjB,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ;YACvC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;YAC1C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5B,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ;YACxC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;YAC3C,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAE7B,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,SAAS;QACX,CAAC;QAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;QAE1D,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,GAAG,GAAG,CAAC;QAExC,gBAAgB,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5C,eAAe,IAAI,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,gBAAgB,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IAC/D,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,MAAM,QAAQ,GAAiB;QAC7B,gBAAgB,EAAE,eAAe,CAAC,mBAAmB;QACrD,YAAY,EAAE,eAAe,CAAC,mBAAmB;QACjD,UAAU,EAAE,eAAe,CAAC,mBAAmB;QAC/C,aAAa,EAAE,eAAe,CAAC,mBAAmB;QAClD,cAAc,EAAE,eAAe,CAAC,mBAAmB;KACpD,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACnE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,OAAO;YACL,gBAAgB,EAAE,CAChB,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACtE,CAAC,QAAQ,EAAE;YACZ,YAAY,EAAE,CACZ,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAC9D,CAAC,QAAQ,EAAE;YACZ,UAAU,EAAE,CACV,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAC1D,CAAC,QAAQ,EAAE;YACZ,aAAa,EAAE,CACb,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAChE,CAAC,QAAQ,EAAE;YACZ,cAAc,EAAE,GAAG;SACpB,CAAC;IACJ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEb,kCAAkC;IAClC,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,UAAU,CAAC,cAAc,GAAG,CAC1B,CAAC,kBAAkB,GAAG,eAAe,CAAC;YACtC,GAAG,CACJ,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC;IAClC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["/**\n * Account utilities for Perps components\n * Handles account selection and EVM account filtering\n */\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig';\nimport type { AccountState, PerpsInternalAccount } from '../types';\n\nconst EVM_ACCOUNT_TYPES = new Set(['eip155:eoa', 'eip155:erc4337']);\n\nfunction isEvmAccountType(type: string): boolean {\n return EVM_ACCOUNT_TYPES.has(type);\n}\n\nexport function findEvmAccount(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string; type: string } | null {\n const evmAccount = accounts.find(\n (account) => account && isEvmAccountType(account.type),\n );\n return evmAccount ?? null;\n}\n\nexport function getEvmAccountFromAccountGroup(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string } | undefined {\n const evmAccount = findEvmAccount(accounts);\n return evmAccount ? { address: evmAccount.address } : undefined;\n}\n\nexport function getSelectedEvmAccount(\n accounts: (InternalAccount | PerpsInternalAccount)[],\n): { address: string } | undefined {\n return getEvmAccountFromAccountGroup(accounts);\n}\n\nexport type ReturnOnEquityInput = {\n unrealizedPnl: string | number;\n returnOnEquity: string | number;\n};\n\nexport function calculateWeightedReturnOnEquity(\n accounts: ReturnOnEquityInput[],\n): string {\n if (accounts.length === 0) {\n return '0';\n }\n\n let totalWeightedROE = 0;\n let totalMarginUsed = 0;\n\n for (const account of accounts) {\n const unrealizedPnl =\n typeof account.unrealizedPnl === 'string'\n ? Number.parseFloat(account.unrealizedPnl)\n : account.unrealizedPnl;\n const returnOnEquity =\n typeof account.returnOnEquity === 'string'\n ? Number.parseFloat(account.returnOnEquity)\n : account.returnOnEquity;\n\n if (Number.isNaN(unrealizedPnl) || Number.isNaN(returnOnEquity)) {\n continue;\n }\n\n if (returnOnEquity === 0) {\n continue;\n }\n\n const marginUsed = (unrealizedPnl / returnOnEquity) * 100;\n\n if (Number.isNaN(marginUsed) || marginUsed <= 0) {\n continue;\n }\n\n const roeDecimal = returnOnEquity / 100;\n\n totalWeightedROE += roeDecimal * marginUsed;\n totalMarginUsed += marginUsed;\n }\n\n if (totalMarginUsed <= 0) {\n return '0';\n }\n\n const weightedROE = (totalWeightedROE / totalMarginUsed) * 100;\n return weightedROE.toString();\n}\n\n/**\n * Aggregate multiple per-DEX AccountState objects into one by summing numeric fields.\n * ROE is recalculated as (totalUnrealizedPnl / totalMarginUsed) * 100.\n *\n * @param states - The array of per-DEX account states to aggregate.\n * @returns The combined account state with summed balances and recalculated ROE.\n */\nexport function aggregateAccountStates(states: AccountState[]): AccountState {\n const fallback: AccountState = {\n availableBalance: PERPS_CONSTANTS.FallbackDataDisplay,\n totalBalance: PERPS_CONSTANTS.FallbackDataDisplay,\n marginUsed: PERPS_CONSTANTS.FallbackDataDisplay,\n unrealizedPnl: PERPS_CONSTANTS.FallbackDataDisplay,\n returnOnEquity: PERPS_CONSTANTS.FallbackDataDisplay,\n };\n\n if (states.length === 0) {\n return fallback;\n }\n\n const aggregated = states.reduce<AccountState>((acc, state, index) => {\n if (index === 0) {\n return { ...state };\n }\n return {\n availableBalance: (\n parseFloat(acc.availableBalance) + parseFloat(state.availableBalance)\n ).toString(),\n totalBalance: (\n parseFloat(acc.totalBalance) + parseFloat(state.totalBalance)\n ).toString(),\n marginUsed: (\n parseFloat(acc.marginUsed) + parseFloat(state.marginUsed)\n ).toString(),\n unrealizedPnl: (\n parseFloat(acc.unrealizedPnl) + parseFloat(state.unrealizedPnl)\n ).toString(),\n returnOnEquity: '0',\n };\n }, fallback);\n\n // Recalculate ROE across all DEXs\n const totalMarginUsed = parseFloat(aggregated.marginUsed);\n const totalUnrealizedPnl = parseFloat(aggregated.unrealizedPnl);\n if (totalMarginUsed > 0) {\n aggregated.returnOnEquity = (\n (totalUnrealizedPnl / totalMarginUsed) *\n 100\n ).toString();\n } else {\n aggregated.returnOnEquity = '0';\n }\n\n return aggregated;\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for error handling across the application.
|
|
4
|
+
* These are general-purpose utilities, not domain-specific.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ensureError = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Ensures we have a proper Error object for logging.
|
|
10
|
+
* Converts unknown/string errors to proper Error instances.
|
|
11
|
+
* Handles undefined/null specially for better Sentry context.
|
|
12
|
+
*
|
|
13
|
+
* @param error - The caught error (could be Error, string, or unknown)
|
|
14
|
+
* @param context - Optional context string to help identify the source of the error
|
|
15
|
+
* @returns A proper Error instance
|
|
16
|
+
*/
|
|
17
|
+
function ensureError(error, context) {
|
|
18
|
+
if (error instanceof Error) {
|
|
19
|
+
return error;
|
|
20
|
+
}
|
|
21
|
+
// Handle undefined/null specifically for better error context
|
|
22
|
+
// e.g. Hyperliquid SDK may reject with undefined when AbortSignal.reason is not set
|
|
23
|
+
if (error === undefined || error === null) {
|
|
24
|
+
const baseMessage = 'Unknown error (no details provided)';
|
|
25
|
+
return new Error(context ? `${baseMessage} [${context}]` : baseMessage);
|
|
26
|
+
}
|
|
27
|
+
if (typeof error === 'string') {
|
|
28
|
+
return new Error(error);
|
|
29
|
+
}
|
|
30
|
+
return new Error(typeof error === 'object' && error !== null && 'message' in error
|
|
31
|
+
? String(error.message)
|
|
32
|
+
: 'Unknown error');
|
|
33
|
+
}
|
|
34
|
+
exports.ensureError = ensureError;
|
|
35
|
+
//# sourceMappingURL=errorUtils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.cjs","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,KAAc,EAAE,OAAgB;IAC1D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8DAA8D;IAC9D,oFAAoF;IACpF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,qCAAqC,CAAC;QAC1D,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,KAAK,CACd,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK;QAC/D,CAAC,CAAC,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,eAAe,CACpB,CAAC;AACJ,CAAC;AAlBD,kCAkBC","sourcesContent":["/**\n * Utility functions for error handling across the application.\n * These are general-purpose utilities, not domain-specific.\n */\n\n/**\n * Ensures we have a proper Error object for logging.\n * Converts unknown/string errors to proper Error instances.\n * Handles undefined/null specially for better Sentry context.\n *\n * @param error - The caught error (could be Error, string, or unknown)\n * @param context - Optional context string to help identify the source of the error\n * @returns A proper Error instance\n */\nexport function ensureError(error: unknown, context?: string): Error {\n if (error instanceof Error) {\n return error;\n }\n // Handle undefined/null specifically for better error context\n // e.g. Hyperliquid SDK may reject with undefined when AbortSignal.reason is not set\n if (error === undefined || error === null) {\n const baseMessage = 'Unknown error (no details provided)';\n return new Error(context ? `${baseMessage} [${context}]` : baseMessage);\n }\n if (typeof error === 'string') {\n return new Error(error);\n }\n return new Error(\n typeof error === 'object' && error !== null && 'message' in error\n ? String((error as { message: unknown }).message)\n : 'Unknown error',\n );\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for error handling across the application.
|
|
3
|
+
* These are general-purpose utilities, not domain-specific.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Ensures we have a proper Error object for logging.
|
|
7
|
+
* Converts unknown/string errors to proper Error instances.
|
|
8
|
+
* Handles undefined/null specially for better Sentry context.
|
|
9
|
+
*
|
|
10
|
+
* @param error - The caught error (could be Error, string, or unknown)
|
|
11
|
+
* @param context - Optional context string to help identify the source of the error
|
|
12
|
+
* @returns A proper Error instance
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureError(error: unknown, context?: string): Error;
|
|
15
|
+
//# sourceMappingURL=errorUtils.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.d.cts","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAkBnE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for error handling across the application.
|
|
3
|
+
* These are general-purpose utilities, not domain-specific.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Ensures we have a proper Error object for logging.
|
|
7
|
+
* Converts unknown/string errors to proper Error instances.
|
|
8
|
+
* Handles undefined/null specially for better Sentry context.
|
|
9
|
+
*
|
|
10
|
+
* @param error - The caught error (could be Error, string, or unknown)
|
|
11
|
+
* @param context - Optional context string to help identify the source of the error
|
|
12
|
+
* @returns A proper Error instance
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureError(error: unknown, context?: string): Error;
|
|
15
|
+
//# sourceMappingURL=errorUtils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.d.mts","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAkBnE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for error handling across the application.
|
|
3
|
+
* These are general-purpose utilities, not domain-specific.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Ensures we have a proper Error object for logging.
|
|
7
|
+
* Converts unknown/string errors to proper Error instances.
|
|
8
|
+
* Handles undefined/null specially for better Sentry context.
|
|
9
|
+
*
|
|
10
|
+
* @param error - The caught error (could be Error, string, or unknown)
|
|
11
|
+
* @param context - Optional context string to help identify the source of the error
|
|
12
|
+
* @returns A proper Error instance
|
|
13
|
+
*/
|
|
14
|
+
export function ensureError(error, context) {
|
|
15
|
+
if (error instanceof Error) {
|
|
16
|
+
return error;
|
|
17
|
+
}
|
|
18
|
+
// Handle undefined/null specifically for better error context
|
|
19
|
+
// e.g. Hyperliquid SDK may reject with undefined when AbortSignal.reason is not set
|
|
20
|
+
if (error === undefined || error === null) {
|
|
21
|
+
const baseMessage = 'Unknown error (no details provided)';
|
|
22
|
+
return new Error(context ? `${baseMessage} [${context}]` : baseMessage);
|
|
23
|
+
}
|
|
24
|
+
if (typeof error === 'string') {
|
|
25
|
+
return new Error(error);
|
|
26
|
+
}
|
|
27
|
+
return new Error(typeof error === 'object' && error !== null && 'message' in error
|
|
28
|
+
? String(error.message)
|
|
29
|
+
: 'Unknown error');
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errorUtils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorUtils.mjs","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,OAAgB;IAC1D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8DAA8D;IAC9D,oFAAoF;IACpF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,qCAAqC,CAAC;QAC1D,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,KAAK,CACd,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK;QAC/D,CAAC,CAAC,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,eAAe,CACpB,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Utility functions for error handling across the application.\n * These are general-purpose utilities, not domain-specific.\n */\n\n/**\n * Ensures we have a proper Error object for logging.\n * Converts unknown/string errors to proper Error instances.\n * Handles undefined/null specially for better Sentry context.\n *\n * @param error - The caught error (could be Error, string, or unknown)\n * @param context - Optional context string to help identify the source of the error\n * @returns A proper Error instance\n */\nexport function ensureError(error: unknown, context?: string): Error {\n if (error instanceof Error) {\n return error;\n }\n // Handle undefined/null specifically for better error context\n // e.g. Hyperliquid SDK may reject with undefined when AbortSignal.reason is not set\n if (error === undefined || error === null) {\n const baseMessage = 'Unknown error (no details provided)';\n return new Error(context ? `${baseMessage} [${context}]` : baseMessage);\n }\n if (typeof error === 'string') {\n return new Error(error);\n }\n return new Error(\n typeof error === 'object' && error !== null && 'message' in error\n ? String((error as { message: unknown }).message)\n : 'Unknown error',\n );\n}\n"]}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adaptHyperLiquidLedgerUpdateToUserHistoryItem = exports.parseAssetName = exports.calculateHip3AssetId = exports.calculatePositionSize = exports.formatHyperLiquidSize = exports.formatHyperLiquidPrice = exports.buildAssetMapping = exports.adaptAccountStateFromSDK = exports.adaptMarketFromSDK = exports.adaptOrderFromSDK = exports.adaptPositionFromSDK = exports.adaptOrderToSDK = void 0;
|
|
4
|
+
const utils_1 = require("@metamask/utils");
|
|
5
|
+
const significantFigures_1 = require("./significantFigures.cjs");
|
|
6
|
+
const hyperLiquidConfig_1 = require("../constants/hyperLiquidConfig.cjs");
|
|
7
|
+
const perpsConfig_1 = require("../constants/perpsConfig.cjs");
|
|
8
|
+
const readOptionalString = (value) => typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
9
|
+
const readOptionalOrderId = (value) => {
|
|
10
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
14
|
+
return value.toString();
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
};
|
|
18
|
+
const getParentTpslMetadata = (rawOrder) => ({
|
|
19
|
+
takeProfitPrice: readOptionalString(rawOrder.takeProfitPrice),
|
|
20
|
+
stopLossPrice: readOptionalString(rawOrder.stopLossPrice),
|
|
21
|
+
takeProfitOrderId: readOptionalOrderId(rawOrder.takeProfitOrderId),
|
|
22
|
+
stopLossOrderId: readOptionalOrderId(rawOrder.stopLossOrderId),
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* HyperLiquid SDK Adapter Utilities
|
|
26
|
+
*
|
|
27
|
+
* These functions transform between MetaMask Perps API types and HyperLiquid SDK types.
|
|
28
|
+
* The SDK uses cryptic property names for efficiency, but our API uses descriptive names
|
|
29
|
+
* to provide a consistent interface across different perps protocols.
|
|
30
|
+
*/
|
|
31
|
+
function adaptOrderToSDK(order, symbolToAssetId) {
|
|
32
|
+
const assetId = symbolToAssetId.get(order.symbol);
|
|
33
|
+
if (assetId === undefined) {
|
|
34
|
+
const availableDexs = new Set();
|
|
35
|
+
symbolToAssetId.forEach((_, symbol) => {
|
|
36
|
+
if (symbol.includes(':')) {
|
|
37
|
+
const dex = symbol.split(':')[0];
|
|
38
|
+
availableDexs.add(dex);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
const dexHint = availableDexs.size > 0
|
|
42
|
+
? ` Available HIP-3 DEXs: ${Array.from(availableDexs).join(', ')}`
|
|
43
|
+
: ' No HIP-3 DEXs currently available.';
|
|
44
|
+
throw new Error(`Asset ${order.symbol} not found in asset mapping.${dexHint} Check console logs for "HyperLiquidProvider: Asset mapping built" to see available assets.`);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
a: assetId,
|
|
48
|
+
b: order.isBuy,
|
|
49
|
+
p: order.price ?? '0',
|
|
50
|
+
s: order.size,
|
|
51
|
+
r: order.reduceOnly ?? false,
|
|
52
|
+
t: order.orderType === 'limit'
|
|
53
|
+
? {
|
|
54
|
+
limit: { tif: 'Gtc' },
|
|
55
|
+
}
|
|
56
|
+
: {
|
|
57
|
+
limit: { tif: 'FrontendMarket' },
|
|
58
|
+
},
|
|
59
|
+
c: order.clientOrderId && (0, utils_1.isHexString)(order.clientOrderId)
|
|
60
|
+
? order.clientOrderId
|
|
61
|
+
: undefined,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.adaptOrderToSDK = adaptOrderToSDK;
|
|
65
|
+
function adaptPositionFromSDK(assetPosition) {
|
|
66
|
+
const pos = assetPosition.position;
|
|
67
|
+
return {
|
|
68
|
+
symbol: pos.coin,
|
|
69
|
+
size: pos.szi,
|
|
70
|
+
entryPrice: pos.entryPx,
|
|
71
|
+
positionValue: pos.positionValue,
|
|
72
|
+
unrealizedPnl: pos.unrealizedPnl,
|
|
73
|
+
marginUsed: pos.marginUsed,
|
|
74
|
+
leverage: {
|
|
75
|
+
type: pos.leverage.type,
|
|
76
|
+
value: pos.leverage.value,
|
|
77
|
+
rawUsd: pos.leverage.type === 'isolated' ? pos.leverage.rawUsd : undefined,
|
|
78
|
+
},
|
|
79
|
+
liquidationPrice: pos.liquidationPx,
|
|
80
|
+
maxLeverage: pos.maxLeverage,
|
|
81
|
+
returnOnEquity: pos.returnOnEquity,
|
|
82
|
+
cumulativeFunding: pos.cumFunding,
|
|
83
|
+
takeProfitCount: 0,
|
|
84
|
+
stopLossCount: 0,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
exports.adaptPositionFromSDK = adaptPositionFromSDK;
|
|
88
|
+
function adaptOrderFromSDK(rawOrder, position) {
|
|
89
|
+
// TODO: Remove this widened boundary type when FrontendOrder includes
|
|
90
|
+
// takeProfitPrice/stopLossPrice and takeProfitOrderId/stopLossOrderId.
|
|
91
|
+
const parentTpslMetadata = getParentTpslMetadata(rawOrder);
|
|
92
|
+
// Extract basic fields with appropriate conversions
|
|
93
|
+
const orderId = rawOrder.oid.toString();
|
|
94
|
+
const symbol = rawOrder.coin;
|
|
95
|
+
const side = rawOrder.side === 'B' ? 'buy' : 'sell';
|
|
96
|
+
const detailedOrderType = rawOrder.orderType;
|
|
97
|
+
const { isTrigger } = rawOrder;
|
|
98
|
+
const { reduceOnly } = rawOrder;
|
|
99
|
+
let orderType = 'market';
|
|
100
|
+
if (detailedOrderType.toLowerCase().includes('limit') || rawOrder.limitPx) {
|
|
101
|
+
orderType = 'limit';
|
|
102
|
+
}
|
|
103
|
+
const price = rawOrder.limitPx || rawOrder.triggerPx || '0';
|
|
104
|
+
let size = rawOrder.sz;
|
|
105
|
+
let originalSize = rawOrder.origSz || size;
|
|
106
|
+
let currentSize = parseFloat(size);
|
|
107
|
+
let origSize = parseFloat(originalSize);
|
|
108
|
+
if (rawOrder.isPositionTpsl && origSize === 0 && position) {
|
|
109
|
+
const absPositionSize = Math.abs(parseFloat(position.size));
|
|
110
|
+
currentSize = absPositionSize;
|
|
111
|
+
origSize = absPositionSize;
|
|
112
|
+
size = absPositionSize.toString();
|
|
113
|
+
originalSize = absPositionSize.toString();
|
|
114
|
+
}
|
|
115
|
+
const filledSize = origSize - currentSize;
|
|
116
|
+
let takeProfitPrice;
|
|
117
|
+
let stopLossPrice;
|
|
118
|
+
let takeProfitOrderId;
|
|
119
|
+
let stopLossOrderId;
|
|
120
|
+
// TODO: We assume that there can only be 1 TP and 1 SL as children but there can be several TPSLs as children
|
|
121
|
+
if (rawOrder.children && rawOrder.children.length > 0) {
|
|
122
|
+
rawOrder.children.forEach((childUnknown) => {
|
|
123
|
+
const child = childUnknown;
|
|
124
|
+
if (child.isTrigger && child.orderType) {
|
|
125
|
+
if (child.orderType.includes('Take Profit')) {
|
|
126
|
+
takeProfitPrice = child.triggerPx || child.limitPx;
|
|
127
|
+
takeProfitOrderId = child.oid.toString();
|
|
128
|
+
}
|
|
129
|
+
else if (child.orderType.includes('Stop')) {
|
|
130
|
+
stopLossPrice = child.triggerPx || child.limitPx;
|
|
131
|
+
stopLossOrderId = child.oid.toString();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Fallback: preserve parent-level TP/SL metadata when children are absent.
|
|
137
|
+
takeProfitPrice ?? (takeProfitPrice = parentTpslMetadata.takeProfitPrice);
|
|
138
|
+
stopLossPrice ?? (stopLossPrice = parentTpslMetadata.stopLossPrice);
|
|
139
|
+
takeProfitOrderId ?? (takeProfitOrderId = parentTpslMetadata.takeProfitOrderId);
|
|
140
|
+
stopLossOrderId ?? (stopLossOrderId = parentTpslMetadata.stopLossOrderId);
|
|
141
|
+
// Build the order object
|
|
142
|
+
const order = {
|
|
143
|
+
orderId,
|
|
144
|
+
symbol,
|
|
145
|
+
side,
|
|
146
|
+
orderType,
|
|
147
|
+
size,
|
|
148
|
+
originalSize,
|
|
149
|
+
price,
|
|
150
|
+
filledSize: filledSize.toString(),
|
|
151
|
+
remainingSize: size,
|
|
152
|
+
status: 'open',
|
|
153
|
+
timestamp: rawOrder.timestamp,
|
|
154
|
+
detailedOrderType,
|
|
155
|
+
isTrigger,
|
|
156
|
+
reduceOnly,
|
|
157
|
+
};
|
|
158
|
+
if (typeof rawOrder.isPositionTpsl === 'boolean') {
|
|
159
|
+
order.isPositionTpsl = rawOrder.isPositionTpsl;
|
|
160
|
+
}
|
|
161
|
+
if (takeProfitPrice) {
|
|
162
|
+
order.takeProfitPrice = takeProfitPrice;
|
|
163
|
+
order.takeProfitOrderId = takeProfitOrderId;
|
|
164
|
+
}
|
|
165
|
+
if (stopLossPrice) {
|
|
166
|
+
order.stopLossPrice = stopLossPrice;
|
|
167
|
+
order.stopLossOrderId = stopLossOrderId;
|
|
168
|
+
}
|
|
169
|
+
if (rawOrder.triggerPx) {
|
|
170
|
+
order.triggerPrice = rawOrder.triggerPx;
|
|
171
|
+
}
|
|
172
|
+
return order;
|
|
173
|
+
}
|
|
174
|
+
exports.adaptOrderFromSDK = adaptOrderFromSDK;
|
|
175
|
+
function adaptMarketFromSDK(sdkMarket) {
|
|
176
|
+
return {
|
|
177
|
+
name: sdkMarket.name,
|
|
178
|
+
szDecimals: sdkMarket.szDecimals,
|
|
179
|
+
maxLeverage: sdkMarket.maxLeverage,
|
|
180
|
+
marginTableId: sdkMarket.marginTableId,
|
|
181
|
+
onlyIsolated: sdkMarket.onlyIsolated,
|
|
182
|
+
isDelisted: sdkMarket.isDelisted,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
exports.adaptMarketFromSDK = adaptMarketFromSDK;
|
|
186
|
+
function adaptAccountStateFromSDK(perpsState, spotState) {
|
|
187
|
+
const { totalUnrealizedPnl, weightedReturnOnEquity } = perpsState.assetPositions.reduce((acc, assetPos) => {
|
|
188
|
+
const unrealizedPnl = parseFloat(assetPos.position.unrealizedPnl || '0');
|
|
189
|
+
const marginUsed = parseFloat(assetPos.position.marginUsed || '0');
|
|
190
|
+
const returnOnEquity = parseFloat(assetPos.position.returnOnEquity || '0');
|
|
191
|
+
acc.totalUnrealizedPnl += unrealizedPnl;
|
|
192
|
+
acc.weightedReturnOnEquity += returnOnEquity * marginUsed;
|
|
193
|
+
return acc;
|
|
194
|
+
}, {
|
|
195
|
+
totalUnrealizedPnl: 0,
|
|
196
|
+
weightedReturnOnEquity: 0,
|
|
197
|
+
});
|
|
198
|
+
const totalMarginUsed = parseFloat(perpsState.marginSummary.totalMarginUsed || '0');
|
|
199
|
+
const totalReturnOnEquityPercentage = totalMarginUsed > 0
|
|
200
|
+
? ((weightedReturnOnEquity / totalMarginUsed) * 100).toString()
|
|
201
|
+
: '0';
|
|
202
|
+
const perpsBalance = parseFloat(perpsState.marginSummary.accountValue);
|
|
203
|
+
let spotBalance = 0;
|
|
204
|
+
if (spotState?.balances && Array.isArray(spotState.balances)) {
|
|
205
|
+
spotBalance = spotState.balances.reduce((sum, balance) => sum + parseFloat(balance.total ?? '0'), 0);
|
|
206
|
+
}
|
|
207
|
+
const totalBalance = (spotBalance + perpsBalance).toString();
|
|
208
|
+
const accountState = {
|
|
209
|
+
availableBalance: perpsState.withdrawable || '0',
|
|
210
|
+
totalBalance: totalBalance || '0',
|
|
211
|
+
marginUsed: perpsState.marginSummary.totalMarginUsed || '0',
|
|
212
|
+
unrealizedPnl: totalUnrealizedPnl.toString() || '0',
|
|
213
|
+
returnOnEquity: totalReturnOnEquityPercentage || '0',
|
|
214
|
+
};
|
|
215
|
+
return accountState;
|
|
216
|
+
}
|
|
217
|
+
exports.adaptAccountStateFromSDK = adaptAccountStateFromSDK;
|
|
218
|
+
function buildAssetMapping(params) {
|
|
219
|
+
const { metaUniverse, perpDexIndex } = params;
|
|
220
|
+
const symbolToAssetId = new Map();
|
|
221
|
+
const assetIdToSymbol = new Map();
|
|
222
|
+
metaUniverse.forEach((asset, index) => {
|
|
223
|
+
const assetId = calculateHip3AssetId(perpDexIndex, index);
|
|
224
|
+
symbolToAssetId.set(asset.name, assetId);
|
|
225
|
+
assetIdToSymbol.set(assetId, asset.name);
|
|
226
|
+
});
|
|
227
|
+
return { symbolToAssetId, assetIdToSymbol };
|
|
228
|
+
}
|
|
229
|
+
exports.buildAssetMapping = buildAssetMapping;
|
|
230
|
+
function formatHyperLiquidPrice(params) {
|
|
231
|
+
const { price, szDecimals } = params;
|
|
232
|
+
const priceNum = typeof price === 'string' ? parseFloat(price) : price;
|
|
233
|
+
if (Number.isInteger(priceNum)) {
|
|
234
|
+
return priceNum.toString();
|
|
235
|
+
}
|
|
236
|
+
const maxDecimalPlaces = perpsConfig_1.DECIMAL_PRECISION_CONFIG.MaxPriceDecimals - szDecimals;
|
|
237
|
+
let formattedPrice = priceNum.toFixed(maxDecimalPlaces);
|
|
238
|
+
formattedPrice = parseFloat(formattedPrice).toString();
|
|
239
|
+
const significantDigits = (0, significantFigures_1.countSignificantFigures)(formattedPrice);
|
|
240
|
+
if (significantDigits > perpsConfig_1.DECIMAL_PRECISION_CONFIG.MaxSignificantFigures) {
|
|
241
|
+
formattedPrice = (0, significantFigures_1.roundToSignificantFigures)(formattedPrice);
|
|
242
|
+
}
|
|
243
|
+
return formattedPrice;
|
|
244
|
+
}
|
|
245
|
+
exports.formatHyperLiquidPrice = formatHyperLiquidPrice;
|
|
246
|
+
function formatHyperLiquidSize(params) {
|
|
247
|
+
const { size, szDecimals } = params;
|
|
248
|
+
const number = typeof size === 'string' ? parseFloat(size) : size;
|
|
249
|
+
if (isNaN(number)) {
|
|
250
|
+
return '0';
|
|
251
|
+
}
|
|
252
|
+
const formatted = number.toFixed(szDecimals);
|
|
253
|
+
if (!formatted.includes('.')) {
|
|
254
|
+
return formatted;
|
|
255
|
+
}
|
|
256
|
+
return formatted.replace(/\.?0+$/u, '');
|
|
257
|
+
}
|
|
258
|
+
exports.formatHyperLiquidSize = formatHyperLiquidSize;
|
|
259
|
+
function calculatePositionSize(params) {
|
|
260
|
+
const { usdValue, leverage, assetPrice } = params;
|
|
261
|
+
return (usdValue * leverage) / assetPrice;
|
|
262
|
+
}
|
|
263
|
+
exports.calculatePositionSize = calculatePositionSize;
|
|
264
|
+
function calculateHip3AssetId(perpDexIndex, indexInMeta) {
|
|
265
|
+
if (perpDexIndex === 0) {
|
|
266
|
+
return indexInMeta;
|
|
267
|
+
}
|
|
268
|
+
return (hyperLiquidConfig_1.HIP3_ASSET_ID_CONFIG.BaseAssetId +
|
|
269
|
+
perpDexIndex * hyperLiquidConfig_1.HIP3_ASSET_ID_CONFIG.DexMultiplier +
|
|
270
|
+
indexInMeta);
|
|
271
|
+
}
|
|
272
|
+
exports.calculateHip3AssetId = calculateHip3AssetId;
|
|
273
|
+
function parseAssetName(assetName) {
|
|
274
|
+
const colonIndex = assetName.indexOf(':');
|
|
275
|
+
if (colonIndex === -1) {
|
|
276
|
+
return { dex: null, symbol: assetName };
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
dex: assetName.substring(0, colonIndex),
|
|
280
|
+
symbol: assetName.substring(colonIndex + 1),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
exports.parseAssetName = parseAssetName;
|
|
284
|
+
function adaptHyperLiquidLedgerUpdateToUserHistoryItem(rawLedgerUpdates) {
|
|
285
|
+
return (rawLedgerUpdates || [])
|
|
286
|
+
.filter((update) => {
|
|
287
|
+
if (update.delta.type === 'deposit') {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
if (update.delta.type === 'withdraw') {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
if (update.delta.type === 'internalTransfer') {
|
|
294
|
+
const usdc = Number.parseFloat(update.delta.usdc ?? '0');
|
|
295
|
+
if (Number.isNaN(usdc)) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
return usdc > 0;
|
|
299
|
+
}
|
|
300
|
+
return false;
|
|
301
|
+
})
|
|
302
|
+
.map((update) => {
|
|
303
|
+
let amount = '0';
|
|
304
|
+
let asset = 'USDC';
|
|
305
|
+
if ('usdc' in update.delta && update.delta.usdc) {
|
|
306
|
+
amount = Math.abs(parseFloat(update.delta.usdc)).toString();
|
|
307
|
+
}
|
|
308
|
+
if ('coin' in update.delta && typeof update.delta.coin === 'string') {
|
|
309
|
+
asset = update.delta.coin;
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
id: `history-${update.hash}`,
|
|
313
|
+
timestamp: update.time,
|
|
314
|
+
amount,
|
|
315
|
+
asset,
|
|
316
|
+
txHash: update.hash,
|
|
317
|
+
status: 'completed',
|
|
318
|
+
type: update.delta.type === 'withdraw' ? 'withdrawal' : 'deposit',
|
|
319
|
+
details: {
|
|
320
|
+
source: '',
|
|
321
|
+
bridgeContract: undefined,
|
|
322
|
+
recipient: undefined,
|
|
323
|
+
blockNumber: undefined,
|
|
324
|
+
chainId: undefined,
|
|
325
|
+
synthetic: undefined,
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
exports.adaptHyperLiquidLedgerUpdateToUserHistoryItem = adaptHyperLiquidLedgerUpdateToUserHistoryItem;
|
|
331
|
+
//# sourceMappingURL=hyperLiquidAdapter.cjs.map
|