@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,320 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
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");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
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");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _AccountService_deps, _AccountService_messenger;
|
|
13
|
+
import { v4 as uuidv4 } from "uuid";
|
|
14
|
+
import { PERPS_EVENT_PROPERTY, PERPS_EVENT_VALUE } from "../constants/eventNames.mjs";
|
|
15
|
+
import { USDC_SYMBOL } from "../constants/hyperLiquidConfig.mjs";
|
|
16
|
+
import { PERPS_CONSTANTS } from "../constants/perpsConfig.mjs";
|
|
17
|
+
import { PERPS_ERROR_CODES } from "../perpsErrorCodes.mjs";
|
|
18
|
+
import { PerpsAnalyticsEvent, PerpsTraceNames, PerpsTraceOperations } from "../types/index.mjs";
|
|
19
|
+
import { getSelectedEvmAccount } from "../utils/accountUtils.mjs";
|
|
20
|
+
import { ensureError } from "../utils/errorUtils.mjs";
|
|
21
|
+
/**
|
|
22
|
+
* AccountService
|
|
23
|
+
*
|
|
24
|
+
* Handles account operations (deposits, withdrawals).
|
|
25
|
+
* Stateless service that delegates to provider.
|
|
26
|
+
* Controller handles state updates and analytics.
|
|
27
|
+
*
|
|
28
|
+
* Instance-based service with constructor injection of platform dependencies
|
|
29
|
+
* and messenger for inter-controller communication.
|
|
30
|
+
*/
|
|
31
|
+
export class AccountService {
|
|
32
|
+
/**
|
|
33
|
+
* Create a new AccountService instance
|
|
34
|
+
*
|
|
35
|
+
* @param deps - Platform dependencies for logging, metrics, etc.
|
|
36
|
+
* @param messenger - Controller messenger for cross-controller communication.
|
|
37
|
+
*/
|
|
38
|
+
constructor(deps, messenger) {
|
|
39
|
+
_AccountService_deps.set(this, void 0);
|
|
40
|
+
_AccountService_messenger.set(this, void 0);
|
|
41
|
+
__classPrivateFieldSet(this, _AccountService_deps, deps, "f");
|
|
42
|
+
__classPrivateFieldSet(this, _AccountService_messenger, messenger, "f");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Withdraw funds with full orchestration
|
|
46
|
+
* Handles tracing, state management, analytics, and account refresh
|
|
47
|
+
*
|
|
48
|
+
* @param options - The withdrawal configuration.
|
|
49
|
+
* @param options.provider - The perps provider to execute the withdrawal.
|
|
50
|
+
* @param options.params - The withdrawal parameters (amount, destination, etc.).
|
|
51
|
+
* @param options.context - The service context for tracing and dependencies.
|
|
52
|
+
* @param options.refreshAccountState - Callback to refresh account state after withdrawal.
|
|
53
|
+
* @returns The withdrawal result containing success status and transaction details.
|
|
54
|
+
*/
|
|
55
|
+
async withdraw(options) {
|
|
56
|
+
const { provider, params, context, refreshAccountState } = options;
|
|
57
|
+
const traceId = uuidv4();
|
|
58
|
+
const startTime = __classPrivateFieldGet(this, _AccountService_deps, "f").performance.now();
|
|
59
|
+
let traceData;
|
|
60
|
+
// Generate withdrawal request ID for tracking
|
|
61
|
+
const currentWithdrawalId = `withdraw-${Date.now()}-${Math.random()
|
|
62
|
+
.toString(36)
|
|
63
|
+
.substring(2, 11)}`;
|
|
64
|
+
try {
|
|
65
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").tracer.trace({
|
|
66
|
+
name: PerpsTraceNames.Withdraw,
|
|
67
|
+
id: traceId,
|
|
68
|
+
op: PerpsTraceOperations.Operation,
|
|
69
|
+
tags: {
|
|
70
|
+
assetId: params.assetId ?? '',
|
|
71
|
+
provider: context.tracingContext.provider,
|
|
72
|
+
isTestnet: String(context.tracingContext.isTestnet),
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: STARTING WITHDRAWAL', {
|
|
76
|
+
params,
|
|
77
|
+
timestamp: new Date().toISOString(),
|
|
78
|
+
assetId: params.assetId,
|
|
79
|
+
amount: params.amount,
|
|
80
|
+
destination: params.destination,
|
|
81
|
+
activeProvider: context.tracingContext.provider,
|
|
82
|
+
isTestnet: context.tracingContext.isTestnet,
|
|
83
|
+
});
|
|
84
|
+
// Set withdrawal in progress
|
|
85
|
+
if (context.stateManager) {
|
|
86
|
+
context.stateManager.update((state) => {
|
|
87
|
+
state.withdrawInProgress = true;
|
|
88
|
+
// Calculate net amount after fees
|
|
89
|
+
const grossAmount = parseFloat(params.amount);
|
|
90
|
+
const feeAmount = 1.0; // HyperLiquid withdrawal fee is $1 USDC
|
|
91
|
+
const netAmount = Math.max(0, grossAmount - feeAmount);
|
|
92
|
+
// Get current account address via messenger
|
|
93
|
+
const evmAccount = getSelectedEvmAccount(__classPrivateFieldGet(this, _AccountService_messenger, "f").call('AccountTreeController:getAccountsFromSelectedAccountGroup'));
|
|
94
|
+
const accountAddress = evmAccount?.address ?? 'unknown';
|
|
95
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: Creating withdrawal request', {
|
|
96
|
+
accountAddress,
|
|
97
|
+
hasEvmAccount: Boolean(evmAccount),
|
|
98
|
+
evmAccountAddress: evmAccount?.address,
|
|
99
|
+
amount: netAmount.toString(),
|
|
100
|
+
});
|
|
101
|
+
// Add withdrawal request to tracking
|
|
102
|
+
const withdrawalRequest = {
|
|
103
|
+
id: currentWithdrawalId,
|
|
104
|
+
timestamp: Date.now(),
|
|
105
|
+
amount: netAmount.toString(), // Use net amount (after fees)
|
|
106
|
+
asset: USDC_SYMBOL,
|
|
107
|
+
accountAddress, // Track which account initiated withdrawal
|
|
108
|
+
success: false, // Will be updated when transaction completes
|
|
109
|
+
txHash: undefined,
|
|
110
|
+
status: 'pending',
|
|
111
|
+
destination: params.destination,
|
|
112
|
+
transactionId: undefined, // Will be set to withdrawalId when available
|
|
113
|
+
};
|
|
114
|
+
state.withdrawalRequests.unshift(withdrawalRequest);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: DELEGATING TO PROVIDER', {
|
|
118
|
+
provider: context.tracingContext.provider,
|
|
119
|
+
providerReady: Boolean(provider),
|
|
120
|
+
});
|
|
121
|
+
// Execute withdrawal
|
|
122
|
+
const result = await provider.withdraw(params);
|
|
123
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: WITHDRAWAL RESULT', {
|
|
124
|
+
success: result.success,
|
|
125
|
+
error: result.error,
|
|
126
|
+
txHash: result.txHash,
|
|
127
|
+
timestamp: new Date().toISOString(),
|
|
128
|
+
});
|
|
129
|
+
// Update state based on result
|
|
130
|
+
if (result.success) {
|
|
131
|
+
if (context.stateManager) {
|
|
132
|
+
context.stateManager.update((state) => {
|
|
133
|
+
state.lastError = null;
|
|
134
|
+
state.lastUpdateTimestamp = Date.now();
|
|
135
|
+
state.withdrawInProgress = false;
|
|
136
|
+
state.lastWithdrawResult = {
|
|
137
|
+
success: true,
|
|
138
|
+
txHash: result.txHash ?? '',
|
|
139
|
+
amount: params.amount,
|
|
140
|
+
asset: USDC_SYMBOL,
|
|
141
|
+
timestamp: Date.now(),
|
|
142
|
+
error: '',
|
|
143
|
+
};
|
|
144
|
+
// Update the withdrawal request by request ID
|
|
145
|
+
if (state.withdrawalRequests.length > 0) {
|
|
146
|
+
const requestToUpdate = state.withdrawalRequests.find((req) => req.id === currentWithdrawalId);
|
|
147
|
+
if (requestToUpdate) {
|
|
148
|
+
if (result.txHash) {
|
|
149
|
+
requestToUpdate.status = 'completed';
|
|
150
|
+
requestToUpdate.success = true;
|
|
151
|
+
requestToUpdate.txHash = result.txHash;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
requestToUpdate.status = 'bridging';
|
|
155
|
+
requestToUpdate.success = true;
|
|
156
|
+
}
|
|
157
|
+
if (result.withdrawalId) {
|
|
158
|
+
requestToUpdate.withdrawalId = result.withdrawalId;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: WITHDRAWAL SUCCESSFUL', {
|
|
165
|
+
txHash: result.txHash,
|
|
166
|
+
amount: params.amount,
|
|
167
|
+
assetId: params.assetId,
|
|
168
|
+
withdrawalId: result.withdrawalId,
|
|
169
|
+
});
|
|
170
|
+
// Track withdrawal transaction executed
|
|
171
|
+
const completionDuration = __classPrivateFieldGet(this, _AccountService_deps, "f").performance.now() - startTime;
|
|
172
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").metrics.trackPerpsEvent(PerpsAnalyticsEvent.WithdrawalTransaction, {
|
|
173
|
+
[PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.EXECUTED,
|
|
174
|
+
[PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: parseFloat(params.amount),
|
|
175
|
+
[PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
|
|
176
|
+
});
|
|
177
|
+
// Trigger account state refresh after withdrawal
|
|
178
|
+
refreshAccountState().catch((refreshError) => {
|
|
179
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").logger.error(ensureError(refreshError, 'AccountService.withdraw'), {
|
|
180
|
+
tags: { feature: PERPS_CONSTANTS.FeatureName },
|
|
181
|
+
context: {
|
|
182
|
+
name: 'AccountService.withdraw',
|
|
183
|
+
data: { operation: 'refreshAccountState' },
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
// Invalidate standalone caches so external hooks (e.g., usePerpsPositionForAsset) refresh
|
|
188
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").cacheInvalidator.invalidate({ cacheType: 'accountState' });
|
|
189
|
+
traceData = {
|
|
190
|
+
success: true,
|
|
191
|
+
txHash: result.txHash ?? '',
|
|
192
|
+
withdrawalId: result.withdrawalId ?? '',
|
|
193
|
+
};
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
// Handle failure
|
|
197
|
+
if (context.stateManager) {
|
|
198
|
+
context.stateManager.update((state) => {
|
|
199
|
+
state.lastError = result.error ?? PERPS_ERROR_CODES.WITHDRAW_FAILED;
|
|
200
|
+
state.lastUpdateTimestamp = Date.now();
|
|
201
|
+
state.withdrawInProgress = false;
|
|
202
|
+
state.lastWithdrawResult = {
|
|
203
|
+
success: false,
|
|
204
|
+
error: result.error ?? PERPS_ERROR_CODES.WITHDRAW_FAILED,
|
|
205
|
+
amount: params.amount,
|
|
206
|
+
asset: USDC_SYMBOL,
|
|
207
|
+
timestamp: Date.now(),
|
|
208
|
+
txHash: '',
|
|
209
|
+
};
|
|
210
|
+
// Update the withdrawal request by request ID
|
|
211
|
+
if (state.withdrawalRequests.length > 0) {
|
|
212
|
+
const requestToUpdate = state.withdrawalRequests.find((req) => req.id === currentWithdrawalId);
|
|
213
|
+
if (requestToUpdate) {
|
|
214
|
+
requestToUpdate.status = 'failed';
|
|
215
|
+
requestToUpdate.success = false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").debugLogger.log('AccountService: WITHDRAWAL FAILED', {
|
|
221
|
+
error: result.error,
|
|
222
|
+
params,
|
|
223
|
+
});
|
|
224
|
+
// Track withdrawal transaction failed
|
|
225
|
+
const completionDuration = __classPrivateFieldGet(this, _AccountService_deps, "f").performance.now() - startTime;
|
|
226
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").metrics.trackPerpsEvent(PerpsAnalyticsEvent.WithdrawalTransaction, {
|
|
227
|
+
[PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.FAILED,
|
|
228
|
+
[PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: parseFloat(params.amount),
|
|
229
|
+
[PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
|
|
230
|
+
[PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',
|
|
231
|
+
});
|
|
232
|
+
traceData = {
|
|
233
|
+
success: false,
|
|
234
|
+
error: result.error ?? 'Unknown error',
|
|
235
|
+
};
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
const errorMessage = error instanceof Error
|
|
240
|
+
? error.message
|
|
241
|
+
: PERPS_ERROR_CODES.WITHDRAW_FAILED;
|
|
242
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").logger.error(ensureError(error, 'AccountService.withdraw'), {
|
|
243
|
+
tags: { feature: PERPS_CONSTANTS.FeatureName },
|
|
244
|
+
context: {
|
|
245
|
+
name: 'AccountService.withdraw',
|
|
246
|
+
data: { assetId: params.assetId, amount: params.amount },
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
if (context.stateManager) {
|
|
250
|
+
context.stateManager.update((state) => {
|
|
251
|
+
state.lastError = errorMessage;
|
|
252
|
+
state.lastUpdateTimestamp = Date.now();
|
|
253
|
+
state.withdrawInProgress = false;
|
|
254
|
+
state.lastWithdrawResult = {
|
|
255
|
+
success: false,
|
|
256
|
+
error: errorMessage,
|
|
257
|
+
amount: '0',
|
|
258
|
+
asset: USDC_SYMBOL,
|
|
259
|
+
timestamp: Date.now(),
|
|
260
|
+
txHash: '',
|
|
261
|
+
};
|
|
262
|
+
// Update the withdrawal request by request ID
|
|
263
|
+
if (state.withdrawalRequests.length > 0) {
|
|
264
|
+
const requestToUpdate = state.withdrawalRequests.find((req) => req.id === currentWithdrawalId);
|
|
265
|
+
if (requestToUpdate) {
|
|
266
|
+
requestToUpdate.status = 'failed';
|
|
267
|
+
requestToUpdate.success = false;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// Track withdrawal transaction failed (catch block)
|
|
273
|
+
const completionDuration = __classPrivateFieldGet(this, _AccountService_deps, "f").performance.now() - startTime;
|
|
274
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").metrics.trackPerpsEvent(PerpsAnalyticsEvent.WithdrawalTransaction, {
|
|
275
|
+
[PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.FAILED,
|
|
276
|
+
[PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: params.amount,
|
|
277
|
+
[PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
|
|
278
|
+
[PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,
|
|
279
|
+
});
|
|
280
|
+
traceData = {
|
|
281
|
+
success: false,
|
|
282
|
+
error: errorMessage,
|
|
283
|
+
};
|
|
284
|
+
return { success: false, error: errorMessage };
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").tracer.endTrace({
|
|
288
|
+
name: PerpsTraceNames.Withdraw,
|
|
289
|
+
id: traceId,
|
|
290
|
+
data: traceData,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Validate withdrawal parameters
|
|
296
|
+
*
|
|
297
|
+
* @param options - The validation configuration.
|
|
298
|
+
* @param options.provider - The perps provider to validate against.
|
|
299
|
+
* @param options.params - The withdrawal parameters to validate.
|
|
300
|
+
* @returns An object indicating whether the withdrawal is valid, with an optional error message.
|
|
301
|
+
*/
|
|
302
|
+
async validateWithdrawal(options) {
|
|
303
|
+
const { provider, params } = options;
|
|
304
|
+
try {
|
|
305
|
+
return await provider.validateWithdrawal(params);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
__classPrivateFieldGet(this, _AccountService_deps, "f").logger.error(ensureError(error, 'AccountService.validateWithdrawal'), {
|
|
309
|
+
tags: { feature: PERPS_CONSTANTS.FeatureName },
|
|
310
|
+
context: {
|
|
311
|
+
name: 'AccountService.validateWithdrawal',
|
|
312
|
+
data: { params },
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
throw error;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
_AccountService_deps = new WeakMap(), _AccountService_messenger = new WeakMap();
|
|
320
|
+
//# sourceMappingURL=AccountService.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountService.mjs","sourceRoot":"","sources":["../../src/services/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\n\nimport type { ServiceContext } from './ServiceContext';\nimport {\n PERPS_EVENT_PROPERTY,\n PERPS_EVENT_VALUE,\n} from '../constants/eventNames';\nimport { USDC_SYMBOL } from '../constants/hyperLiquidConfig';\nimport { PERPS_CONSTANTS } from '../constants/perpsConfig';\nimport { PERPS_ERROR_CODES } from '../perpsErrorCodes';\nimport {\n PerpsAnalyticsEvent,\n PerpsTraceNames,\n PerpsTraceOperations,\n} from '../types';\nimport type {\n PerpsProvider,\n WithdrawParams,\n WithdrawResult,\n PerpsPlatformDependencies,\n} from '../types';\nimport type { PerpsControllerMessengerBase } from '../types/messenger';\nimport type { TransactionStatus } from '../types/transactionTypes';\nimport { getSelectedEvmAccount } from '../utils/accountUtils';\nimport { ensureError } from '../utils/errorUtils';\n\n/**\n * AccountService\n *\n * Handles account operations (deposits, withdrawals).\n * Stateless service that delegates to provider.\n * Controller handles state updates and analytics.\n *\n * Instance-based service with constructor injection of platform dependencies\n * and messenger for inter-controller communication.\n */\nexport class AccountService {\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #messenger: PerpsControllerMessengerBase;\n\n /**\n * Create a new AccountService instance\n *\n * @param deps - Platform dependencies for logging, metrics, etc.\n * @param messenger - Controller messenger for cross-controller communication.\n */\n constructor(\n deps: PerpsPlatformDependencies,\n messenger: PerpsControllerMessengerBase,\n ) {\n this.#deps = deps;\n this.#messenger = messenger;\n }\n\n /**\n * Withdraw funds with full orchestration\n * Handles tracing, state management, analytics, and account refresh\n *\n * @param options - The withdrawal configuration.\n * @param options.provider - The perps provider to execute the withdrawal.\n * @param options.params - The withdrawal parameters (amount, destination, etc.).\n * @param options.context - The service context for tracing and dependencies.\n * @param options.refreshAccountState - Callback to refresh account state after withdrawal.\n * @returns The withdrawal result containing success status and transaction details.\n */\n async withdraw(options: {\n provider: PerpsProvider;\n params: WithdrawParams;\n context: ServiceContext;\n refreshAccountState: () => Promise<void>;\n }): Promise<WithdrawResult> {\n const { provider, params, context, refreshAccountState } = options;\n\n const traceId = uuidv4();\n const startTime = this.#deps.performance.now();\n let traceData:\n | {\n success: boolean;\n error?: string;\n txHash?: string;\n withdrawalId?: string;\n }\n | undefined;\n\n // Generate withdrawal request ID for tracking\n const currentWithdrawalId = `withdraw-${Date.now()}-${Math.random()\n .toString(36)\n .substring(2, 11)}`;\n\n try {\n this.#deps.tracer.trace({\n name: PerpsTraceNames.Withdraw,\n id: traceId,\n op: PerpsTraceOperations.Operation,\n tags: {\n assetId: params.assetId ?? '',\n provider: context.tracingContext.provider,\n isTestnet: String(context.tracingContext.isTestnet),\n },\n });\n\n this.#deps.debugLogger.log('AccountService: STARTING WITHDRAWAL', {\n params,\n timestamp: new Date().toISOString(),\n assetId: params.assetId,\n amount: params.amount,\n destination: params.destination,\n activeProvider: context.tracingContext.provider,\n isTestnet: context.tracingContext.isTestnet,\n });\n\n // Set withdrawal in progress\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.withdrawInProgress = true;\n\n // Calculate net amount after fees\n const grossAmount = parseFloat(params.amount);\n const feeAmount = 1.0; // HyperLiquid withdrawal fee is $1 USDC\n const netAmount = Math.max(0, grossAmount - feeAmount);\n\n // Get current account address via messenger\n const evmAccount = getSelectedEvmAccount(\n this.#messenger.call(\n 'AccountTreeController:getAccountsFromSelectedAccountGroup',\n ),\n );\n const accountAddress = evmAccount?.address ?? 'unknown';\n\n this.#deps.debugLogger.log(\n 'AccountService: Creating withdrawal request',\n {\n accountAddress,\n hasEvmAccount: Boolean(evmAccount),\n evmAccountAddress: evmAccount?.address,\n amount: netAmount.toString(),\n },\n );\n\n // Add withdrawal request to tracking\n const withdrawalRequest = {\n id: currentWithdrawalId,\n timestamp: Date.now(),\n amount: netAmount.toString(), // Use net amount (after fees)\n asset: USDC_SYMBOL,\n accountAddress, // Track which account initiated withdrawal\n success: false, // Will be updated when transaction completes\n txHash: undefined,\n status: 'pending' as TransactionStatus,\n destination: params.destination,\n transactionId: undefined, // Will be set to withdrawalId when available\n };\n\n state.withdrawalRequests.unshift(withdrawalRequest);\n });\n }\n\n this.#deps.debugLogger.log('AccountService: DELEGATING TO PROVIDER', {\n provider: context.tracingContext.provider,\n providerReady: Boolean(provider),\n });\n\n // Execute withdrawal\n const result = await provider.withdraw(params);\n\n this.#deps.debugLogger.log('AccountService: WITHDRAWAL RESULT', {\n success: result.success,\n error: result.error,\n txHash: result.txHash,\n timestamp: new Date().toISOString(),\n });\n\n // Update state based on result\n if (result.success) {\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastError = null;\n state.lastUpdateTimestamp = Date.now();\n state.withdrawInProgress = false;\n state.lastWithdrawResult = {\n success: true,\n txHash: result.txHash ?? '',\n amount: params.amount,\n asset: USDC_SYMBOL,\n timestamp: Date.now(),\n error: '',\n };\n\n // Update the withdrawal request by request ID\n if (state.withdrawalRequests.length > 0) {\n const requestToUpdate = state.withdrawalRequests.find(\n (req) => req.id === currentWithdrawalId,\n );\n if (requestToUpdate) {\n if (result.txHash) {\n requestToUpdate.status = 'completed' as TransactionStatus;\n requestToUpdate.success = true;\n requestToUpdate.txHash = result.txHash;\n } else {\n requestToUpdate.status = 'bridging' as TransactionStatus;\n requestToUpdate.success = true;\n }\n if (result.withdrawalId) {\n requestToUpdate.withdrawalId = result.withdrawalId;\n }\n }\n }\n });\n }\n\n this.#deps.debugLogger.log('AccountService: WITHDRAWAL SUCCESSFUL', {\n txHash: result.txHash,\n amount: params.amount,\n assetId: params.assetId,\n withdrawalId: result.withdrawalId,\n });\n\n // Track withdrawal transaction executed\n const completionDuration = this.#deps.performance.now() - startTime;\n this.#deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.WithdrawalTransaction,\n {\n [PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.EXECUTED,\n [PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: parseFloat(params.amount),\n [PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,\n },\n );\n\n // Trigger account state refresh after withdrawal\n refreshAccountState().catch((refreshError) => {\n this.#deps.logger.error(\n ensureError(refreshError, 'AccountService.withdraw'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'AccountService.withdraw',\n data: { operation: 'refreshAccountState' },\n },\n },\n );\n });\n\n // Invalidate standalone caches so external hooks (e.g., usePerpsPositionForAsset) refresh\n this.#deps.cacheInvalidator.invalidate({ cacheType: 'accountState' });\n\n traceData = {\n success: true,\n txHash: result.txHash ?? '',\n withdrawalId: result.withdrawalId ?? '',\n };\n\n return result;\n }\n\n // Handle failure\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastError = result.error ?? PERPS_ERROR_CODES.WITHDRAW_FAILED;\n state.lastUpdateTimestamp = Date.now();\n state.withdrawInProgress = false;\n state.lastWithdrawResult = {\n success: false,\n error: result.error ?? PERPS_ERROR_CODES.WITHDRAW_FAILED,\n amount: params.amount,\n asset: USDC_SYMBOL,\n timestamp: Date.now(),\n txHash: '',\n };\n\n // Update the withdrawal request by request ID\n if (state.withdrawalRequests.length > 0) {\n const requestToUpdate = state.withdrawalRequests.find(\n (req) => req.id === currentWithdrawalId,\n );\n if (requestToUpdate) {\n requestToUpdate.status = 'failed' as TransactionStatus;\n requestToUpdate.success = false;\n }\n }\n });\n }\n\n this.#deps.debugLogger.log('AccountService: WITHDRAWAL FAILED', {\n error: result.error,\n params,\n });\n\n // Track withdrawal transaction failed\n const completionDuration = this.#deps.performance.now() - startTime;\n this.#deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.WithdrawalTransaction,\n {\n [PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.FAILED,\n [PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: parseFloat(params.amount),\n [PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,\n [PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: result.error ?? 'Unknown error',\n },\n );\n\n traceData = {\n success: false,\n error: result.error ?? 'Unknown error',\n };\n\n return result;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : PERPS_ERROR_CODES.WITHDRAW_FAILED;\n\n this.#deps.logger.error(ensureError(error, 'AccountService.withdraw'), {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'AccountService.withdraw',\n data: { assetId: params.assetId, amount: params.amount },\n },\n });\n\n if (context.stateManager) {\n context.stateManager.update((state) => {\n state.lastError = errorMessage;\n state.lastUpdateTimestamp = Date.now();\n state.withdrawInProgress = false;\n state.lastWithdrawResult = {\n success: false,\n error: errorMessage,\n amount: '0',\n asset: USDC_SYMBOL,\n timestamp: Date.now(),\n txHash: '',\n };\n\n // Update the withdrawal request by request ID\n if (state.withdrawalRequests.length > 0) {\n const requestToUpdate = state.withdrawalRequests.find(\n (req) => req.id === currentWithdrawalId,\n );\n if (requestToUpdate) {\n requestToUpdate.status = 'failed' as TransactionStatus;\n requestToUpdate.success = false;\n }\n }\n });\n }\n\n // Track withdrawal transaction failed (catch block)\n const completionDuration = this.#deps.performance.now() - startTime;\n this.#deps.metrics.trackPerpsEvent(\n PerpsAnalyticsEvent.WithdrawalTransaction,\n {\n [PERPS_EVENT_PROPERTY.STATUS]: PERPS_EVENT_VALUE.STATUS.FAILED,\n [PERPS_EVENT_PROPERTY.WITHDRAWAL_AMOUNT]: params.amount,\n [PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,\n [PERPS_EVENT_PROPERTY.ERROR_MESSAGE]: errorMessage,\n },\n );\n\n traceData = {\n success: false,\n error: errorMessage,\n };\n\n return { success: false, error: errorMessage };\n } finally {\n this.#deps.tracer.endTrace({\n name: PerpsTraceNames.Withdraw,\n id: traceId,\n data: traceData,\n });\n }\n }\n\n /**\n * Validate withdrawal parameters\n *\n * @param options - The validation configuration.\n * @param options.provider - The perps provider to validate against.\n * @param options.params - The withdrawal parameters to validate.\n * @returns An object indicating whether the withdrawal is valid, with an optional error message.\n */\n async validateWithdrawal(options: {\n provider: PerpsProvider;\n params: WithdrawParams;\n }): Promise<{ isValid: boolean; error?: string }> {\n const { provider, params } = options;\n\n try {\n return await provider.validateWithdrawal(params);\n } catch (error) {\n this.#deps.logger.error(\n ensureError(error, 'AccountService.validateWithdrawal'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'AccountService.validateWithdrawal',\n data: { params },\n },\n },\n );\n throw error;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
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");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
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");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _DataLakeService_instances, _DataLakeService_deps, _DataLakeService_messenger, _DataLakeService_getBearerToken;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DataLakeService = void 0;
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
17
|
+
const performanceMetrics_1 = require("../constants/performanceMetrics.cjs");
|
|
18
|
+
const perpsConfig_1 = require("../constants/perpsConfig.cjs");
|
|
19
|
+
const types_1 = require("../types/index.cjs");
|
|
20
|
+
const accountUtils_1 = require("../utils/accountUtils.cjs");
|
|
21
|
+
const errorUtils_1 = require("../utils/errorUtils.cjs");
|
|
22
|
+
/**
|
|
23
|
+
* DataLakeService
|
|
24
|
+
*
|
|
25
|
+
* Handles reporting order events to external Data Lake API.
|
|
26
|
+
* Implements exponential backoff retry logic and performance tracing.
|
|
27
|
+
* Stateless service that operates purely on external API calls.
|
|
28
|
+
*
|
|
29
|
+
* Instance-based service with constructor injection of platform dependencies.
|
|
30
|
+
*/
|
|
31
|
+
class DataLakeService {
|
|
32
|
+
/**
|
|
33
|
+
* Create a new DataLakeService instance
|
|
34
|
+
*
|
|
35
|
+
* @param deps - Platform dependencies for logging, metrics, etc.
|
|
36
|
+
* @param messenger - Controller messenger for cross-controller communication.
|
|
37
|
+
*/
|
|
38
|
+
constructor(deps, messenger) {
|
|
39
|
+
_DataLakeService_instances.add(this);
|
|
40
|
+
_DataLakeService_deps.set(this, void 0);
|
|
41
|
+
_DataLakeService_messenger.set(this, void 0);
|
|
42
|
+
__classPrivateFieldSet(this, _DataLakeService_deps, deps, "f");
|
|
43
|
+
__classPrivateFieldSet(this, _DataLakeService_messenger, messenger, "f");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Report order events to data lake API with retry (non-blocking)
|
|
47
|
+
* Implements exponential backoff retry logic (max 3 retries)
|
|
48
|
+
*
|
|
49
|
+
* @param options - Configuration object
|
|
50
|
+
* @param options.action - Order action ('open' or 'close')
|
|
51
|
+
* @param options.symbol - Market symbol
|
|
52
|
+
* @param options.slPrice - Optional stop loss price.
|
|
53
|
+
* @param options.tpPrice - Optional take profit price.
|
|
54
|
+
* @param options.isTestnet - Whether this is a testnet operation (skips API call)
|
|
55
|
+
* @param options.context - ServiceContext for dependencies (messenger, tracing)
|
|
56
|
+
* @param options.retryCount - Internal retry counter (managed by service)
|
|
57
|
+
* @param options._traceId - Internal trace ID (managed by service)
|
|
58
|
+
* @returns Result object with success flag and optional error message
|
|
59
|
+
*/
|
|
60
|
+
async reportOrder(options) {
|
|
61
|
+
const { action, symbol, slPrice, tpPrice, isTestnet, context, retryCount = 0, _traceId, } = options;
|
|
62
|
+
// Skip data lake reporting for testnet as the API doesn't handle testnet data
|
|
63
|
+
if (isTestnet) {
|
|
64
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").debugLogger.log('DataLake API: Skipping for testnet', {
|
|
65
|
+
action,
|
|
66
|
+
symbol,
|
|
67
|
+
network: 'testnet',
|
|
68
|
+
});
|
|
69
|
+
return { success: true, error: 'Skipped for testnet' };
|
|
70
|
+
}
|
|
71
|
+
const MAX_RETRIES = 3;
|
|
72
|
+
const RETRY_DELAY_MS = 1000;
|
|
73
|
+
// Generate trace ID once on first call
|
|
74
|
+
const traceId = _traceId ?? (0, uuid_1.v4)();
|
|
75
|
+
// Start trace only on first attempt
|
|
76
|
+
if (retryCount === 0) {
|
|
77
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").tracer.trace({
|
|
78
|
+
name: types_1.PerpsTraceNames.DataLakeReport,
|
|
79
|
+
op: types_1.PerpsTraceOperations.Operation,
|
|
80
|
+
id: traceId,
|
|
81
|
+
tags: {
|
|
82
|
+
action,
|
|
83
|
+
symbol,
|
|
84
|
+
provider: context.tracingContext.provider,
|
|
85
|
+
isTestnet: String(context.tracingContext.isTestnet),
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Log the attempt
|
|
90
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").debugLogger.log('DataLake API: Starting order report', {
|
|
91
|
+
action,
|
|
92
|
+
symbol,
|
|
93
|
+
attempt: retryCount + 1,
|
|
94
|
+
maxAttempts: MAX_RETRIES + 1,
|
|
95
|
+
hasStopLoss: Boolean(slPrice),
|
|
96
|
+
hasTakeProfit: Boolean(tpPrice),
|
|
97
|
+
timestamp: new Date().toISOString(),
|
|
98
|
+
});
|
|
99
|
+
const apiCallStartTime = __classPrivateFieldGet(this, _DataLakeService_deps, "f").performance.now();
|
|
100
|
+
try {
|
|
101
|
+
const token = await __classPrivateFieldGet(this, _DataLakeService_instances, "m", _DataLakeService_getBearerToken).call(this);
|
|
102
|
+
const evmAccount = (0, accountUtils_1.getSelectedEvmAccount)(__classPrivateFieldGet(this, _DataLakeService_messenger, "f").call('AccountTreeController:getAccountsFromSelectedAccountGroup'));
|
|
103
|
+
if (!evmAccount || !token) {
|
|
104
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").debugLogger.log('DataLake API: Missing requirements', {
|
|
105
|
+
hasAccount: Boolean(evmAccount),
|
|
106
|
+
hasToken: Boolean(token),
|
|
107
|
+
action,
|
|
108
|
+
symbol,
|
|
109
|
+
});
|
|
110
|
+
return { success: false, error: 'No account or token available' };
|
|
111
|
+
}
|
|
112
|
+
const response = await fetch(perpsConfig_1.DATA_LAKE_API_CONFIG.OrdersEndpoint, {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
headers: {
|
|
115
|
+
'Content-Type': 'application/json',
|
|
116
|
+
Authorization: `Bearer ${token}`,
|
|
117
|
+
},
|
|
118
|
+
body: JSON.stringify({
|
|
119
|
+
user_id: evmAccount.address,
|
|
120
|
+
symbol,
|
|
121
|
+
sl_price: slPrice,
|
|
122
|
+
tp_price: tpPrice,
|
|
123
|
+
}),
|
|
124
|
+
});
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
throw new Error(`DataLake API error: ${response.status}`);
|
|
127
|
+
}
|
|
128
|
+
// Consume response body (might be empty for 201, but good to check)
|
|
129
|
+
const responseBody = await response.text();
|
|
130
|
+
const apiCallDuration = __classPrivateFieldGet(this, _DataLakeService_deps, "f").performance.now() - apiCallStartTime;
|
|
131
|
+
// Record measurement
|
|
132
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").tracer.setMeasurement(performanceMetrics_1.PerpsMeasurementName.PerpsDataLakeApiCall, apiCallDuration, 'millisecond');
|
|
133
|
+
// Success logging
|
|
134
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").debugLogger.log('DataLake API: Order reported successfully', {
|
|
135
|
+
action,
|
|
136
|
+
symbol,
|
|
137
|
+
status: response.status,
|
|
138
|
+
attempt: retryCount + 1,
|
|
139
|
+
responseBody: responseBody || 'empty',
|
|
140
|
+
duration: `${apiCallDuration.toFixed(0)}ms`,
|
|
141
|
+
});
|
|
142
|
+
// End trace on success
|
|
143
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").tracer.endTrace({
|
|
144
|
+
name: types_1.PerpsTraceNames.DataLakeReport,
|
|
145
|
+
id: traceId,
|
|
146
|
+
data: {
|
|
147
|
+
success: true,
|
|
148
|
+
retries: retryCount,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
return { success: true };
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
155
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").logger.error((0, errorUtils_1.ensureError)(error, 'DataLakeService.reportOrder'), {
|
|
156
|
+
tags: { feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName },
|
|
157
|
+
context: {
|
|
158
|
+
name: 'DataLakeService.reportOrder',
|
|
159
|
+
data: {
|
|
160
|
+
action,
|
|
161
|
+
symbol,
|
|
162
|
+
retryCount,
|
|
163
|
+
willRetry: retryCount < MAX_RETRIES,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
// Retry logic
|
|
168
|
+
if (retryCount < MAX_RETRIES) {
|
|
169
|
+
const retryDelay = RETRY_DELAY_MS * Math.pow(2, retryCount);
|
|
170
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").debugLogger.log('DataLake API: Scheduling retry', {
|
|
171
|
+
retryIn: `${retryDelay}ms`,
|
|
172
|
+
nextAttempt: retryCount + 2,
|
|
173
|
+
action,
|
|
174
|
+
symbol,
|
|
175
|
+
});
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
this.reportOrder({
|
|
178
|
+
action,
|
|
179
|
+
symbol,
|
|
180
|
+
slPrice,
|
|
181
|
+
tpPrice,
|
|
182
|
+
isTestnet,
|
|
183
|
+
context,
|
|
184
|
+
retryCount: retryCount + 1,
|
|
185
|
+
_traceId: traceId,
|
|
186
|
+
}).catch((_retryError) => {
|
|
187
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").logger.error((0, errorUtils_1.ensureError)(_retryError, 'DataLakeService.reportOrder'), {
|
|
188
|
+
tags: { feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName },
|
|
189
|
+
context: {
|
|
190
|
+
name: 'DataLakeService.reportOrder',
|
|
191
|
+
data: {
|
|
192
|
+
operation: 'retry',
|
|
193
|
+
retryCount: retryCount + 1,
|
|
194
|
+
action,
|
|
195
|
+
symbol,
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
}, retryDelay);
|
|
201
|
+
return { success: false, error: errorMessage };
|
|
202
|
+
}
|
|
203
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").tracer.endTrace({
|
|
204
|
+
name: types_1.PerpsTraceNames.DataLakeReport,
|
|
205
|
+
id: traceId,
|
|
206
|
+
data: {
|
|
207
|
+
success: false,
|
|
208
|
+
error: errorMessage,
|
|
209
|
+
totalRetries: retryCount,
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
__classPrivateFieldGet(this, _DataLakeService_deps, "f").logger.error((0, errorUtils_1.ensureError)(error, 'DataLakeService.reportOrder'), {
|
|
213
|
+
tags: { feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName },
|
|
214
|
+
context: {
|
|
215
|
+
name: 'DataLakeService.reportOrder',
|
|
216
|
+
data: { operation: 'finalFailure', action, symbol, retryCount },
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
return { success: false, error: errorMessage };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.DataLakeService = DataLakeService;
|
|
224
|
+
_DataLakeService_deps = new WeakMap(), _DataLakeService_messenger = new WeakMap(), _DataLakeService_instances = new WeakSet(), _DataLakeService_getBearerToken =
|
|
225
|
+
/**
|
|
226
|
+
* Get bearer token via DI authentication controller
|
|
227
|
+
*
|
|
228
|
+
* @returns The bearer token string for API authentication.
|
|
229
|
+
*/
|
|
230
|
+
async function _DataLakeService_getBearerToken() {
|
|
231
|
+
return __classPrivateFieldGet(this, _DataLakeService_messenger, "f").call('AuthenticationController:getBearerToken');
|
|
232
|
+
};
|
|
233
|
+
//# sourceMappingURL=DataLakeService.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataLakeService.cjs","sourceRoot":"","sources":["../../src/services/DataLakeService.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\n\nimport type { ServiceContext } from './ServiceContext';\nimport { PerpsMeasurementName } from '../constants/performanceMetrics';\nimport {\n DATA_LAKE_API_CONFIG,\n PERPS_CONSTANTS,\n} from '../constants/perpsConfig';\nimport { PerpsTraceNames, PerpsTraceOperations } from '../types';\nimport type { PerpsPlatformDependencies } from '../types';\nimport type { PerpsControllerMessengerBase } from '../types/messenger';\nimport { getSelectedEvmAccount } from '../utils/accountUtils';\nimport { ensureError } from '../utils/errorUtils';\n\n/**\n * DataLakeService\n *\n * Handles reporting order events to external Data Lake API.\n * Implements exponential backoff retry logic and performance tracing.\n * Stateless service that operates purely on external API calls.\n *\n * Instance-based service with constructor injection of platform dependencies.\n */\nexport class DataLakeService {\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #messenger: PerpsControllerMessengerBase;\n\n /**\n * Create a new DataLakeService instance\n *\n * @param deps - Platform dependencies for logging, metrics, etc.\n * @param messenger - Controller messenger for cross-controller communication.\n */\n constructor(\n deps: PerpsPlatformDependencies,\n messenger: PerpsControllerMessengerBase,\n ) {\n this.#deps = deps;\n this.#messenger = messenger;\n }\n\n /**\n * Get bearer token via DI authentication controller\n *\n * @returns The bearer token string for API authentication.\n */\n async #getBearerToken(): Promise<string> {\n return this.#messenger.call('AuthenticationController:getBearerToken');\n }\n\n /**\n * Report order events to data lake API with retry (non-blocking)\n * Implements exponential backoff retry logic (max 3 retries)\n *\n * @param options - Configuration object\n * @param options.action - Order action ('open' or 'close')\n * @param options.symbol - Market symbol\n * @param options.slPrice - Optional stop loss price.\n * @param options.tpPrice - Optional take profit price.\n * @param options.isTestnet - Whether this is a testnet operation (skips API call)\n * @param options.context - ServiceContext for dependencies (messenger, tracing)\n * @param options.retryCount - Internal retry counter (managed by service)\n * @param options._traceId - Internal trace ID (managed by service)\n * @returns Result object with success flag and optional error message\n */\n async reportOrder(options: {\n action: 'open' | 'close';\n symbol: string;\n slPrice?: number;\n tpPrice?: number;\n isTestnet: boolean;\n context: ServiceContext;\n retryCount?: number;\n _traceId?: string;\n }): Promise<{ success: boolean; error?: string }> {\n const {\n action,\n symbol,\n slPrice,\n tpPrice,\n isTestnet,\n context,\n retryCount = 0,\n _traceId,\n } = options;\n\n // Skip data lake reporting for testnet as the API doesn't handle testnet data\n if (isTestnet) {\n this.#deps.debugLogger.log('DataLake API: Skipping for testnet', {\n action,\n symbol,\n network: 'testnet',\n });\n return { success: true, error: 'Skipped for testnet' };\n }\n\n const MAX_RETRIES = 3;\n const RETRY_DELAY_MS = 1000;\n\n // Generate trace ID once on first call\n const traceId = _traceId ?? uuidv4();\n\n // Start trace only on first attempt\n if (retryCount === 0) {\n this.#deps.tracer.trace({\n name: PerpsTraceNames.DataLakeReport,\n op: PerpsTraceOperations.Operation,\n id: traceId,\n tags: {\n action,\n symbol,\n provider: context.tracingContext.provider,\n isTestnet: String(context.tracingContext.isTestnet),\n },\n });\n }\n\n // Log the attempt\n this.#deps.debugLogger.log('DataLake API: Starting order report', {\n action,\n symbol,\n attempt: retryCount + 1,\n maxAttempts: MAX_RETRIES + 1,\n hasStopLoss: Boolean(slPrice),\n hasTakeProfit: Boolean(tpPrice),\n timestamp: new Date().toISOString(),\n });\n\n const apiCallStartTime = this.#deps.performance.now();\n\n try {\n const token = await this.#getBearerToken();\n const evmAccount = getSelectedEvmAccount(\n this.#messenger.call(\n 'AccountTreeController:getAccountsFromSelectedAccountGroup',\n ),\n );\n\n if (!evmAccount || !token) {\n this.#deps.debugLogger.log('DataLake API: Missing requirements', {\n hasAccount: Boolean(evmAccount),\n hasToken: Boolean(token),\n action,\n symbol,\n });\n return { success: false, error: 'No account or token available' };\n }\n\n const response = await fetch(DATA_LAKE_API_CONFIG.OrdersEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n user_id: evmAccount.address,\n symbol,\n sl_price: slPrice,\n tp_price: tpPrice,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`DataLake API error: ${response.status}`);\n }\n\n // Consume response body (might be empty for 201, but good to check)\n const responseBody = await response.text();\n\n const apiCallDuration = this.#deps.performance.now() - apiCallStartTime;\n\n // Record measurement\n this.#deps.tracer.setMeasurement(\n PerpsMeasurementName.PerpsDataLakeApiCall,\n apiCallDuration,\n 'millisecond',\n );\n\n // Success logging\n this.#deps.debugLogger.log('DataLake API: Order reported successfully', {\n action,\n symbol,\n status: response.status,\n attempt: retryCount + 1,\n responseBody: responseBody || 'empty',\n duration: `${apiCallDuration.toFixed(0)}ms`,\n });\n\n // End trace on success\n this.#deps.tracer.endTrace({\n name: PerpsTraceNames.DataLakeReport,\n id: traceId,\n data: {\n success: true,\n retries: retryCount,\n },\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n\n this.#deps.logger.error(\n ensureError(error, 'DataLakeService.reportOrder'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'DataLakeService.reportOrder',\n data: {\n action,\n symbol,\n retryCount,\n willRetry: retryCount < MAX_RETRIES,\n },\n },\n },\n );\n\n // Retry logic\n if (retryCount < MAX_RETRIES) {\n const retryDelay = RETRY_DELAY_MS * Math.pow(2, retryCount);\n this.#deps.debugLogger.log('DataLake API: Scheduling retry', {\n retryIn: `${retryDelay}ms`,\n nextAttempt: retryCount + 2,\n action,\n symbol,\n });\n\n setTimeout(() => {\n this.reportOrder({\n action,\n symbol,\n slPrice,\n tpPrice,\n isTestnet,\n context,\n retryCount: retryCount + 1,\n _traceId: traceId,\n }).catch((_retryError) => {\n this.#deps.logger.error(\n ensureError(_retryError, 'DataLakeService.reportOrder'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'DataLakeService.reportOrder',\n data: {\n operation: 'retry',\n retryCount: retryCount + 1,\n action,\n symbol,\n },\n },\n },\n );\n });\n }, retryDelay);\n\n return { success: false, error: errorMessage };\n }\n\n this.#deps.tracer.endTrace({\n name: PerpsTraceNames.DataLakeReport,\n id: traceId,\n data: {\n success: false,\n error: errorMessage,\n totalRetries: retryCount,\n },\n });\n\n this.#deps.logger.error(\n ensureError(error, 'DataLakeService.reportOrder'),\n {\n tags: { feature: PERPS_CONSTANTS.FeatureName },\n context: {\n name: 'DataLakeService.reportOrder',\n data: { operation: 'finalFailure', action, symbol, retryCount },\n },\n },\n );\n\n return { success: false, error: errorMessage };\n }\n }\n}\n"]}
|